diff options
author | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:28:01 +0200 |
---|---|---|
committer | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:28:01 +0200 |
commit | fe9eb89ebc1b3c33cbac00a3fa095a14faef9113 (patch) | |
tree | 8a3bb620a9acb83fe0057061a86e8f2cb91a9fe1 | |
parent | 5.21 (diff) | |
download | FreeFileSync-fe9eb89ebc1b3c33cbac00a3fa095a14faef9113.tar.gz FreeFileSync-fe9eb89ebc1b3c33cbac00a3fa095a14faef9113.tar.bz2 FreeFileSync-fe9eb89ebc1b3c33cbac00a3fa095a14faef9113.zip |
5.22
172 files changed, 17621 insertions, 16354 deletions
diff --git a/Application.cpp b/Application.cpp index 6581ba25..f84614f7 100644 --- a/Application.cpp +++ b/Application.cpp @@ -7,11 +7,12 @@ #include "application.h" #include <memory> #include <zen/file_handling.h> -#include <wx/msgdlg.h> -#include <wx/tooltip.h> //wxWidgets v2.9 +#include <wx/tooltip.h> #include <wx/log.h> #include <wx+/app_main.h> #include <wx+/string_conv.h> +#include <wx+/popup_dlg.h> +#include <wx+/image_resources.h> #include "comparison.h" #include "algorithm.h" #include "synchronization.h" @@ -19,7 +20,6 @@ #include "ui/check_version.h" #include "ui/main_dlg.h" #include "ui/switch_to_gui.h" -#include "lib/resources.h" #include "lib/process_xml.h" #include "lib/error_log.h" @@ -142,6 +142,8 @@ bool Application::OnInit() SetAppName(L"FreeFileSync"); //if not set, the default is the executable's name! + initResourceImages(getResourceDir() + Zstr("Resources.zip")); + Connect(wxEVT_QUERY_END_SESSION, wxEventHandler(Application::onQueryEndSession), nullptr, this); Connect(wxEVT_END_SESSION, wxEventHandler(Application::onQueryEndSession), nullptr, this); @@ -206,7 +208,7 @@ int Application::OnRun() { //it's not always possible to display a message box, e.g. corrupted stack, however low-level file output works! logError(utfCvrtTo<std::string>(msg)); - wxSafeShowMessage(_("An exception occurred"), msg); + wxSafeShowMessage(L"FreeFileSync - " + _("An exception occurred"), msg); }; try @@ -248,8 +250,7 @@ void Application::launch(const std::vector<Zstring>& commandArgs) { //wxWidgets app exit handling is weird... we want the app to exit only if the logical main window is closed wxTheApp->SetExitOnFrameDelete(false); //avoid popup-windows from becoming temporary top windows leading to program exit after closure - auto app = wxTheApp; //fix lambda/wxWigets/VC fuck up - ZEN_ON_SCOPE_EXIT(if (!mainWindowWasSet()) app->ExitMainLoop();); //quit application, if no main window was set (batch silent mode) + ZEN_ON_SCOPE_EXIT(if (!mainWindowWasSet()) wxTheApp->ExitMainLoop();); //quit application, if no main window was set (batch silent mode) try { @@ -258,9 +259,9 @@ void Application::launch(const std::vector<Zstring>& commandArgs) } catch (const FileError&) { assert(false); } //no messagebox: consider batch job! - auto notifyError = [&](const std::wstring& msg, const std::wstring& header) + auto notifyError = [&](const std::wstring& msg, const std::wstring& title) { - wxMessageBox(msg.c_str(), L"FreeFileSync - " + header, wxOK | wxICON_ERROR); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setTitle(title).setDetailInstructions(msg)); raiseReturnCode(returnCode, FFS_RC_ABORTED); }; @@ -313,7 +314,7 @@ void Application::launch(const std::vector<Zstring>& commandArgs) filename += Zstr(".ffs_gui"); else { - notifyError(replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(filename)), _("Error")); + notifyError(replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(filename)), std::wstring()); return; } } @@ -322,7 +323,7 @@ void Application::launch(const std::vector<Zstring>& commandArgs) { case XML_TYPE_GLOBAL: case XML_TYPE_OTHER: - notifyError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename)), _("Error")); + notifyError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename)), std::wstring()); return; case XML_TYPE_GUI: @@ -406,7 +407,7 @@ void Application::launch(const std::vector<Zstring>& commandArgs) catch (const xmlAccess::FfsXmlError& e) { //batch mode: break on errors AND even warnings! - notifyError(e.toString(), _("Error")); + notifyError(e.toString(), std::wstring()); return; } if (!replaceDirectories(batchCfg.mainCfg)) return; @@ -423,11 +424,11 @@ void Application::launch(const std::vector<Zstring>& commandArgs) catch (const xmlAccess::FfsXmlError& e) { if (e.getSeverity() == FfsXmlError::WARNING) - wxMessageBox(e.toString(), L"FreeFileSync - " + _("Warning"), wxOK | wxICON_WARNING); + showNotificationDialog(nullptr, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); //what about simulating changed config on parsing errors???? else { - notifyError(e.toString(), _("Error")); + notifyError(e.toString(), std::wstring()); return; } } @@ -459,11 +460,11 @@ void Application::launch(const std::vector<Zstring>& commandArgs) catch (const FfsXmlError& e) { if (e.getSeverity() == FfsXmlError::WARNING) - wxMessageBox(e.toString(), L"FreeFileSync - " + _("Warning"), wxOK | wxICON_WARNING); + showNotificationDialog(nullptr, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); //what about simulating changed config on parsing errors???? else { - notifyError(e.toString(), _("Error")); + notifyError(e.toString(), std::wstring()); return; } } @@ -484,15 +485,16 @@ void runGuiMode(const xmlAccess::XmlGuiConfig& guiCfg, void showSyntaxHelp() { - wxMessageBox(_("Syntax:") + L"\n" + - L"FreeFileSync [" + _("config files") + L"]\n[-leftdir " + _("directory") + L"] [-rightdir " + _("directory") + L"]" + L"\n" + - L"\n" + - _("config files") + L"\n" + - _("Any number of FreeFileSync .ffs_gui and/or .ffs_batch configuration files.") + L"\n\n" - - L"-leftdir " + _("directory") + L" -rightdir " + _("directory") + L"\n" + - _("Any number of alternative directories for at most one config file."), - L"FreeFileSync - " + _("Command line"), wxOK | wxICON_INFORMATION); + showNotificationDialog(nullptr, DialogInfoType::INFO, PopupDialogCfg(). + setTitle(_("Command line")). + setDetailInstructions(_("Syntax:") + L"\n" + + L"FreeFileSync [" + _("config files") + L"]\n[-leftdir " + _("directory") + L"] [-rightdir " + _("directory") + L"]" + L"\n" + + L"\n" + + _("config files") + L"\n" + + _("Any number of FreeFileSync .ffs_gui and/or .ffs_batch configuration files.") + L"\n\n" + + L"-leftdir " + _("directory") + L" -rightdir " + _("directory") + L"\n" + + _("Any number of alternative directories for at most one config file."))); } @@ -501,7 +503,7 @@ void runBatchMode(const XmlBatchConfig& batchCfg, const Zstring& referenceFile, auto notifyError = [&](const std::wstring& msg, FfsReturnCode rc) { if (batchCfg.handleError == ON_ERROR_POPUP) - wxMessageBox(msg.c_str(), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(msg)); else //"exit" or "ignore" logError(utfCvrtTo<std::string>(msg)); @@ -553,6 +555,8 @@ void runBatchMode(const XmlBatchConfig& batchCfg, const Zstring& referenceFile, batchCfg.logfilesCountLimit, globalCfg.lastSyncsLogFileSizeMax, batchCfg.handleError, + globalCfg.automaticRetryCount, + globalCfg.automaticRetryDelay, switchBatchToGui, returnCode, batchCfg.mainCfg.onCompletion, @@ -567,7 +571,7 @@ void runBatchMode(const XmlBatchConfig& batchCfg, const Zstring& referenceFile, allowPwPrompt = true; break; case ON_ERROR_IGNORE: - case ON_ERROR_ABORT: + case ON_ERROR_STOP: break; } @@ -596,7 +600,7 @@ void runBatchMode(const XmlBatchConfig& batchCfg, const Zstring& referenceFile, globalCfg.verifyFileCopy, globalCfg.copyLockedFiles, globalCfg.copyFilePermissions, - globalCfg.transactionalFileCopy, + globalCfg.failsafeFileCopy, globalCfg.runWithBackgroundPriority, syncProcessCfg, folderCmp, diff --git a/Application.h b/Application.h index b621a1a3..defc1e17 100644 --- a/Application.h +++ b/Application.h @@ -10,7 +10,6 @@ #include <vector> #include <zen/zstring.h> #include <wx/app.h> -//#include "lib/process_xml.h" #include "lib/return_codes.h" diff --git a/BUILD/Changelog.txt b/BUILD/Changelog.txt index 8582e2b4..8f8006d6 100644 --- a/BUILD/Changelog.txt +++ b/BUILD/Changelog.txt @@ -1,5 +1,25 @@ -FreeFileSync 5.21 ------------------ +FreeFileSync 5.22 [2013-10-01] +------------------------------ +New options for automatic retry after error +Improved compliance with Windows User Experience guidelines +Harmonized popup dialog layouts +Correctly show program menu when main dialog receives focus (OS X) +Revised configuration dialog layouts and designs +Fixed crash on startup for CPUs without SSE2 support (Windows XP) +Work around wxWidgets bug for sorted list boxes (Linux) +Updated and revised help file +Early parameter validation for filter and sync config dialogs +Fixed followed directory symlinks being incorrectly excluded +Automatically calculate best initial message box size +Progress graph and status icons support high contrast color schemes +Include directory child-elements when manually setting filter +Allow manual filter for short name on overview panel +Don't treat file drops on directory input fields as URI (Linux) +Updated translation files + + +FreeFileSync 5.21 [2013-09-02] +------------------------------ Detect moved/renamed files in mirror and custom variants New database format for two way variant: old database files are converted automatically Support double-clicking ffs_gui/ffs_batch files (OS X) @@ -15,7 +35,7 @@ Always remove .ffs_tmp files permanently Fixed layout for buttons with text and graphics for RTL languages (Arabic, Hebrew) Revised file filter parser: new syntax for excluding items in subdirectories Improved configuration merge algorithm -Fixed crash when showing help due to wxWigets 64-bit bug in help component (Windows 8) +Fixed crash when showing help due to wxWidgets 64-bit bug in help component (Windows 8) Avoid progress dialog graph flicker during resize when too few samples are available Progress status when deleting files not greyed out anymore Increased time-out to 20 seconds when checking for directory existence @@ -25,13 +45,13 @@ Consistently set batch error codes during startup phase Updated translation files -FreeFileSync 5.20 ------------------ -Fixed crash on startup due to wxWigets 64-bit bug in font enumeration (Windows 8) +FreeFileSync 5.20 [2013-08-03] +------------------------------ +Fixed crash on startup due to wxWidgets 64-bit bug in font enumeration (Windows 8) -FreeFileSync 5.19 ------------------ +FreeFileSync 5.19 [2013-08-02] +------------------------------ Redesigned progress dialog including new items graph New command line syntax: set directory names of a .ffs_gui/.ffs_batch externally Explicit button on progress dialog to minimize to systray @@ -53,13 +73,13 @@ Show a blinking system tray icon on errors instead of a modal dialog in Realtime Added installation size for Windows' Add/Remove Programs -FreeFileSync 5.18 ------------------ +FreeFileSync 5.18 [2013-07-02] +------------------------------ Work around boost 1.54 bug "The procedure entry point GetTickCount64 could not be located in the dynamic link library KERNEL32.dll" (Windows XP) -FreeFileSync 5.17 ------------------ +FreeFileSync 5.17 [2013-07-02] +------------------------------ Consider target file when updating followed file symlinks Support moving files to recycle bin contained in followed directory symlinks Move instead of copy updated files into versioning directory @@ -88,8 +108,8 @@ Log error message upon retry as type info only Updated translation files -FreeFileSync 5.16 ------------------ +FreeFileSync 5.16 [2013-06-01] +------------------------------ Integrated both category and sync action view into middle grid Condensed folder pair display names on overview panel Consider symlinks and junctions when copying locked files (Windows Vista) @@ -120,8 +140,8 @@ Systematically resolved translation bugs Added Serbian language -FreeFileSync 5.15 ------------------ +FreeFileSync 5.15 [2013-05-01] +------------------------------ New menu option to activate/deactivate automatic update checking Show status message while checking for program updates Faster start up times through asynchronous config file checking @@ -151,8 +171,8 @@ New help file topic "Expert Settings" Updated translation files -FreeFileSync 5.14 ------------------ +FreeFileSync 5.14 [2013-03-31] +------------------------------ Do not process child elements when parent directory creation fails Start comparison after pressing Enter in directory input fields Lead grid is determined via keyboard input instead of input focus change @@ -177,8 +197,8 @@ Fit grid row label to match wide font sizes Added macros %csidl_Downloads%, %csidl_PublicDownloads%, %csidl_QuickLaunch% (Windows Vista and later) -FreeFileSync 5.13 ------------------ +FreeFileSync 5.13 [2013-03-06] +------------------------------ Prepared support for new build on Mac OS X Time out for not existing directories after 10 seconds Check directory existence in parallel @@ -192,8 +212,8 @@ More polished user interfaces Fixed time stamp not being set on NFS/Samba shares (Linux) -FreeFileSync 5.12 ------------------ +FreeFileSync 5.12 [2013-02-04] +------------------------------ Dynamic statistics adjustment during synchronization Allow to save active view filter settings as default (context menu) Stay responsive while checking recycle bin existence on slow disks @@ -208,8 +228,8 @@ Use full time window of sync phase when calculating overall speed Added Arabic language -FreeFileSync 5.11 ------------------ +FreeFileSync 5.11 [2013-01-06] +------------------------------ New file versioning scheme: move to folder replacing existing files Fixed high CPU consumption after longer syncs Improved .ffs_batch configuration file handling @@ -228,8 +248,8 @@ Updated help file Updated translation files -FreeFileSync 5.10 ------------------ +FreeFileSync 5.10 [2012-12-03] +------------------------------ Show synchronization log as a grid in results dialog Improved grid scrolling performance (most noticeable on Linux) Allow grid selection starting from outside of the grid @@ -248,8 +268,8 @@ Copy file access permissions by default (Linux) Fixed unexpected "File or Directory not existing" error during file copy (Linux) -FreeFileSync 5.9 ----------------- +FreeFileSync 5.9 [2012-11-03] +----------------------------- Scroll grid under mouse cursor Move files directly to recycle bin without parent "FFS 2012-05-15 131513" temporary folders Offer $HOME directory alias in directory drop down list (Linux) @@ -265,8 +285,8 @@ New sync completion sound Fixed sync completion sound not playing (Ubuntu) -FreeFileSync 5.8 ----------------- +FreeFileSync 5.8 [2012-10-01] +----------------------------- New icon theme Dynamic save button and dialog title show unsaved configuration Exclude all folders if file size or time span filters are active @@ -280,8 +300,8 @@ Disabled UAC virtualization for 32-bit user-mode process Descriptive error message when setting invalid dates on FAT volumes -FreeFileSync 5.7 ----------------- +FreeFileSync 5.7 [2012-09-04] +----------------------------- Modern directory selection dialog (Windows Vista and later) New file versioning scheme appending revision number to files New sync option to limit number of versions per file @@ -298,8 +318,8 @@ Harmonized external application macros: %item_path%, %item_folder%, %item2_path% Updated translation files -FreeFileSync 5.6 ----------------- +FreeFileSync 5.6 [2012-08-02] +----------------------------- Resize left and right grids equally Allow to move middle grid position via mouse Automatically resize file name columns @@ -315,8 +335,8 @@ More detailed tool tip describing items that differ in attributes only Added Scottish Gaelic translation -FreeFileSync 5.5 ----------------- +FreeFileSync 5.5 [2012-07-01] +----------------------------- New database format for <automatic> variant: old database files are converted automatically Tuned performance for <automatic> variant when saving database for millions of files: > 95% faster Support partial database updates for <automatic> variant respecting current filter @@ -337,8 +357,8 @@ Consider both global and local filter when estimating whether folder could conta Updated translation files -FreeFileSync 5.4 ----------------- +FreeFileSync 5.4 [2012-06-01] +----------------------------- Copy all NTFS extended attributes Improved statistics panel Improved main grid @@ -364,8 +384,8 @@ Support Arch Linux (Chakra) Updated translation files -FreeFileSync 5.3 ----------------- +FreeFileSync 5.3 [2012-05-02] +----------------------------- Show which processes lock a file during synchronization (Windows Vista and later) Use unbuffered copy to speed up copying large files (Windows Vista and later) Preserve NTFS sparse files @@ -389,13 +409,13 @@ Added Norwegian translation Updated translation files -FreeFileSync 5.2 ----------------- +FreeFileSync 5.2 [2012-04-01] +----------------------------- Fixed runtime error "Error comparing strings! (LCMapString)" (Windows 2000, XP only) -FreeFileSync 5.1 ----------------- +FreeFileSync 5.1 [2012-03-31] +----------------------------- New category for time span filter: last x days Fixed "Error loading library function: GetVolumeInformationByHandleW" if NTFS permissions are copied Fixed command line issues: allow config name without extension, allow multiple directories instead of a config file @@ -430,16 +450,16 @@ All executables digitally signed Updated translation files -FreeFileSync 5.0 ----------------- +FreeFileSync 5.0 [2012-01-30] +----------------------------- New grid control New tree control Revised Right to Left layout for Hebrew Updated translation files -FreeFileSync 4.6 ----------------- +FreeFileSync 4.6 [2011-12-25] +----------------------------- Execute user-defined command after synchronization Option to automatically close synchronization progress dialog Automatically adjust statistics during sync if changes happened after comparison @@ -457,21 +477,21 @@ Save settings before forced exit due to shutdown or log off Updated translation files -FreeFileSync 4.5 ----------------- +FreeFileSync 4.5 [2011-11-25] +----------------------------- Fixed "Windows Error Code 50: The request is not supported" Fixed "Windows Error Code 124: The system call level is not correct" Fixed config load performance problem if network drive is not reachable Support traversing truly empty directories (no ., ..) (Windows) -FreeFileSync 4.4 ----------------- +FreeFileSync 4.4 [2011-11-22] +----------------------------- Fixed error copying files containing alternate data streams (Windows) -FreeFileSync 4.3 ----------------- +FreeFileSync 4.3 [2011-11-20] +----------------------------- Detection of moved and renamed files New database format for <Automatic> mode: a full sync is suggested before upgrading Fixed overwrite symlink with regular file @@ -482,8 +502,8 @@ Added Croatian language Updated translation files -FreeFileSync 4.2 ----------------- +FreeFileSync 4.2 [2011-11-02] +----------------------------- Implemented workaround for compiler bug leading to uncaught exceptions (Windows 32 bit) Shadow Copy Service: Native support for Windows7/Server 2008 Fixed reference by volume name parsing issue @@ -496,8 +516,8 @@ Honor DACL/SACL inheritance flags when copying NTFS permissions (Windows) New option in GlobalSettings.xml: "RunWithBackgroundPriority" (Windows Vista and later) -FreeFileSync 4.1 ----------------- +FreeFileSync 4.1 [2011-10-09] +----------------------------- Improved synchronization progress dialog Show all available aliases in directory history list Show password prompt when connecting to mapped network share @@ -510,8 +530,8 @@ Allow passing multiple configurations via command line Allow passing multiple directory names via command line -FreeFileSync 4.0 ----------------- +FreeFileSync 4.0 [2011-09-25] +----------------------------- Thumbnail list view Option to specify comparison settings at folder pair level Correctly update parent-child relationship when changing sync directions @@ -542,15 +562,15 @@ Updated help file Updated translation files -FreeFileSync 3.21 ------------------ +FreeFileSync 3.21 [2011-08-19] +------------------------------ Fixed deleting to user-defined directory Fixed crash when using include filter New global option to disable transactional file copy -FreeFileSync 3.20 ------------------ +FreeFileSync 3.20 [2011-08-11] +------------------------------ Scan multiple directories in parallel Automatically resolve disconnected network maps Fixed temporal hang when dropping large files on main dialog @@ -561,8 +581,8 @@ Support for Ubuntu Unity Launcher (Linux) RealtimeSync: Failure notification if command line is invalid (Linux) -FreeFileSync 3.19 ------------------ +FreeFileSync 3.19 [2011-07-23] +------------------------------ Exclude sub directories from synchronization which cannot be accessed during comparison Warning if Recycle Bin is not available instead of deleting silently (Windows) Adapted log message if missing recycler leads to permanent deletion (Windows) @@ -583,8 +603,8 @@ Restrict maximum number of visible folder pairs to 6 (configurable via GlobalSet New macros: %day%, %hour%, %min%, %sec% -FreeFileSync 3.18 ------------------ +FreeFileSync 3.18 [2011-07-03] +------------------------------ Launcher running synchronously and returning application error code Fixed sort by file extension Fixed drag and drop of SAMBA network folder @@ -598,8 +618,8 @@ Added Danish language Updated translation files -FreeFileSync 3.17 ------------------ +FreeFileSync 3.17 [2011-05-20] +------------------------------ Filter files by size Filter latest files by time span Launcher automatically selecting 32/64 bit executable on start up @@ -624,14 +644,14 @@ Added Ukrainian language Updated translation files -FreeFileSync 3.16 ------------------ +FreeFileSync 3.16 [2011-04-21] +------------------------------ Fixed file copy issues on SAMBA shares Small GUI fixes -FreeFileSync 3.15 ------------------ +FreeFileSync 3.15 [2011-04-19] +------------------------------ Overwriting a file as fully transactional operation Optimized synchronization speed (non-cached volumes, e.g. memory sticks in particular) Volumes can be specified by name: [<volume-name>]\<path> (use case: variable drive letters, RealtimeSync) @@ -650,8 +670,8 @@ More tolerant file move: ignore existing files (user-defined deletion directory) Added macro %weekday% -FreeFileSync 3.14 ------------------ +FreeFileSync 3.14 [2011-03-20] +------------------------------ New keyboard shortcuts: F5: compare F6: synchronize Skip to next folder pair if fatal error occurred (instead of abort) Reload last selected configuration on start up @@ -670,8 +690,8 @@ Many small GUI/usability fixes Added Korean translation -FreeFileSync 3.13 ------------------ +FreeFileSync 3.13 [2011-01-16] +------------------------------ Implemented Advanced User Interface to allow user specified layout customizations Process case sensitive file/directory/symlink names Synchronize name/attributes only avoiding full copy if appropriate @@ -695,8 +715,8 @@ Added privilege to access restricted symlink content Added Greek translation -FreeFileSync 3.12 ------------------ +FreeFileSync 3.12 [2010-11-28] +------------------------------ Allow empty folder pairs without complaining Automatically exclude database and lock files from all (sub-)directories (not only from base) Resize grid columns on both sides in parallel @@ -718,14 +738,14 @@ Handle empty tool tips correctly (Linux) Updated translation files -FreeFileSync 3.11 ------------------ +FreeFileSync 3.11 [2010-09-20] +------------------------------ Fixed migration issue: reasonable default value for number of folder pairs Better message box background color -FreeFileSync 3.10 ------------------ +FreeFileSync 3.10 [2010-09-19] +------------------------------ Automatically solve daylight saving time and time zone shift issues on FAT/FAT32 (finally) Instantly resolve abandoned directory locks associated with local computer Show expanded directory name as tool tip and label text (resolves macros and relative paths) @@ -746,8 +766,8 @@ Further GUI enhancements/polishment/standard conformance Updated translation files -FreeFileSync 3.9 ----------------- +FreeFileSync 3.9 [2010-08-10] +----------------------------- Advanced locking strategy to allow multiple processes synchronize the same directories (e.g. via network share) Merge multiple *.ffs_batch, *.ffs_gui files or combinations of both via drag & drop Copy file and folder permissions (requires admin rights): @@ -765,8 +785,8 @@ Moved settings "file time tolerance" and "verify copied files" to GlobalSettings Updated translation files -FreeFileSync 3.8 ----------------- +FreeFileSync 3.8 [2010-06-20] +----------------------------- New options handling Symlinks: ignore/direct/follow => warning: new database format for <Automatic> mode Fixed crash when starting sync for Windows XP SP2 Prevent tool tip from stealing focus @@ -781,8 +801,8 @@ Adjusted auto-updater web-address Updated translation files -FreeFileSync 3.7 ----------------- +FreeFileSync 3.7 [2010-05-16] +----------------------------- RealtimeSync: Trigger command line only if all directories are existing Allow for drag and drop of very large files Batch modus: New "Switch" button opens GUI modus when warnings occur @@ -800,13 +820,13 @@ A lot of small GUI fixes Updated translation files -FreeFileSync 3.6 ----------------- +FreeFileSync 3.6 [2010-03-31] +----------------------------- Fixed occasional crash when starting FreeFileSync -FreeFileSync 3.5 ----------------- +FreeFileSync 3.5 [2010-03-27] +----------------------------- Allow <Automatic> mode syncs between 32 bit, 64 bit, Windows and Linux builds Show progess indicator in window title Support for progess indicator in Windows 7 Superbar @@ -819,8 +839,8 @@ Allow aborting all operations via Escape key Added British English translation -FreeFileSync 3.4 ----------------- +FreeFileSync 3.4 [2010-03-04] +----------------------------- Performance: Reduced Recycle Bin access time by 90% Recycle Bin support for Linux Performance: Reduced binary comparison sequential read time (by up to 75% for CD/DVD access) @@ -841,8 +861,8 @@ Updated translation files New Linux .deb package: ppa:freefilesync/ffs -FreeFileSync 3.3 ----------------- +FreeFileSync 3.3 [2010-02-02] +----------------------------- New installer package for portable/local/32/64-bit versions Built-in support for very long filenames: apply \\?\-prefix automatically New button for synchronization preview: show equal files @@ -861,8 +881,8 @@ Added Swedish translation Updated translation files -FreeFileSync 3.2 ----------------- +FreeFileSync 3.2 [2009-12-13] +----------------------------- Native Windows 64-Bit version (including Volume Shadow Copy Service) Harmonized filter handling: global and local file filters Unified handling of first folder pair: all pairs now semantically equal @@ -882,8 +902,8 @@ Added Finnish translation Updated translation files -FreeFileSync 3.1 ----------------- +FreeFileSync 3.1 [2009-10-26] +----------------------------- Support for multiple data sources in Automatic mode Copy file and folder create/access/modification times when synchronizing Progress dialog can be minimized to systray (Batch and GUI mode) @@ -891,8 +911,8 @@ Allow switching between silent/non-silent batch mode interactively Some GUI improvements -FreeFileSync 3.0 ----------------- +FreeFileSync 3.0 [2009-10-15] +----------------------------- New synchronization mode: <Automatic> Consolidated batch mode error handling Fixed crash when comparing multiple pairs by content @@ -909,8 +929,8 @@ Added Turkish translation Updated translation files -FreeFileSync 2.3 ----------------- +FreeFileSync 2.3 [2009-09-27] +----------------------------- New filter and sync configuration at folder pair level Improved sorting: sort across multiple folder pairs stable sorting in middle grid @@ -934,8 +954,8 @@ Added Traditional Chinese translation Updated translation files -FreeFileSync 2.2 ----------------- +FreeFileSync 2.2 [2009-08-16] +----------------------------- New user-defined recycle bin directory Possibility to create synchronization directories automatically (if not existing) Support for relative directory names (e.g. \foo, ..\bar) respecting current working directory @@ -960,14 +980,14 @@ Added Czech translation Updated translation files -FreeFileSync 2.1 ----------------- +FreeFileSync 2.1 [2009-07-03] +----------------------------- Fixed bug that could cause FreeFileSync to crash after synchronization Compiled with MS Visual C++ 2008 using static runtime library -FreeFileSync 2.0 ----------------- +FreeFileSync 2.0 [2009-06-30] +----------------------------- Copy locked files using Windows Volume Shadow Copy Load file icons asynchronously for maximum display performance Handle include filter correctly when comparing @@ -990,8 +1010,8 @@ Added Russian translation Updated translation files -FreeFileSync 1.19 ------------------ +FreeFileSync 1.19 [2009-06-01] +------------------------------ New synchronization preview Sync-direction can be adapted manually New category type "conflict" @@ -1010,8 +1030,8 @@ File icon display configurable via grid column context menu Updated translation files -FreeFileSync 1.18 ------------------ +FreeFileSync 1.18 [2009-05-10] +------------------------------ Linux build officially released: all major problems solved! New statistic: remaining time New statistic: bytes per second @@ -1035,8 +1055,8 @@ Added Brazilian Portuguese translation Updated translation files -FreeFileSync 1.17 ------------------ +FreeFileSync 1.17 [2009-04-05] +------------------------------ Full support for Windows/Linux symbolic links: - traverse, copy, delete symbolic links - handle broken symbolic links @@ -1066,8 +1086,8 @@ Added Spanish translation Updated translation files -FreeFileSync 1.16 ------------------ +FreeFileSync 1.16 [2009-03-13] +------------------------------ Support for \\?\ path prefix for unrestricted path length (directory names > 255 characters) (windows only) Copy files even if target folder does not exist Fixed occasional error when switching languages @@ -1096,8 +1116,8 @@ Usability improvements: Updated translation files -FreeFileSync 1.15 ------------------ +FreeFileSync 1.15 [2009-02-22] +------------------------------ Fixed performance bottleneck in batch mode (non-silent) Improved performance of comparison by another 10% Configure column settings by right-click context menu @@ -1119,8 +1139,8 @@ Added Italian translation Updated translation files -FreeFileSync 1.14 ------------------ +FreeFileSync 1.14 [2009-02-01] +------------------------------ Massive performance improvements: - comprehensive analysis and optimization of comparison functionality - new, fast directory traversing algorithm @@ -1136,8 +1156,8 @@ Added Chinese translation Updated translation files -FreeFileSync 1.13 ------------------ +FreeFileSync 1.13 [2009-01-06] +------------------------------ Automatically detect daylight saving time (DST) change for FAT/FAT32 drives Added directory dependency check when synchronizing multiple folder pairs New synchronization option: "update" @@ -1147,8 +1167,8 @@ Further GUI improvements Updated translation files -FreeFileSync 1.12 ------------------ +FreeFileSync 1.12 [2008-12-23] +------------------------------ Significantly improved speed of all sorting algorithms Keep sorting sequence when adding or removing rows 'Sort by relative path' secondarily sorts by filename and respects folders @@ -1163,8 +1183,8 @@ Added Dutch translation Updated translation files -FreeFileSync 1.11 ------------------ +FreeFileSync 1.11 [2008-11-23] +------------------------------ Support for multiple folder pairs Optimized performance of multiple pairs to scan each folder just once Enhanced batch file format @@ -1173,8 +1193,8 @@ Reworked file filter dialog Updated translation files -FreeFileSync 1.10 ------------------ +FreeFileSync 1.10 [2008-11-09] +------------------------------ Transformed configuration file format to XML Exchanged batch files with shell links for full Unicode support (Windows-only) Improved filter usage: ignore leading/trailing white-space, upper/lower-case (Windows-only) chars @@ -1186,8 +1206,8 @@ Added Japanese translation Updated translation files -FreeFileSync 1.9 ----------------- +FreeFileSync 1.9 [2008-10-26] +----------------------------- 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 @@ -1197,8 +1217,8 @@ Transformed language files to Unicode (UTF-8) Delete elements in configuration history list via DELETE key -FreeFileSync 1.8 ----------------- +FreeFileSync 1.8 [2008-10-19] +----------------------------- Enhanced status bar information Enhanced log file information Enhanced progress information @@ -1208,8 +1228,8 @@ Added French translation Updated German translation -FreeFileSync 1.7 ----------------- +FreeFileSync 1.7 [2008-10-12] +----------------------------- Display only those view filter buttons that are actually needed Compare by size and date: last write time may differ by up to 2 seconds (NTFS vs FAT32) Fixed minor issue with trailing path separator when creating batch jobs @@ -1218,8 +1238,8 @@ Further improved Unicode compliance Updated German translation -FreeFileSync 1.6 ----------------- +FreeFileSync 1.6 [2008-10-05] +----------------------------- Significantly improved speed of filtering files and view (< 10 ms for > 200.000 rows(!)) Fixed minor grid mis-alignment under some special conditions Enhanced status bar with centered texts @@ -1234,8 +1254,8 @@ UI-option to create sync jobs (batch files) for automated synchronization Updated German translation -FreeFileSync 1.5 ----------------- +FreeFileSync 1.5 [2008-09-21] +----------------------------- Improved speed of comparison by file content Simplified and optimized calculation of accumulated file sizes Added right-click context menu to main dialog @@ -1245,8 +1265,8 @@ Solved possible issue with different file time precisions in multi-OS environmen Updated German translation -FreeFileSync 1.4 ----------------- +FreeFileSync 1.4 [2008-09-14] +----------------------------- Implemented generic multithreading class to keep "compare by content" and "file synchronization" responsive Added status bar when comparing files (with additional status information for "compare by content") Some further speed optimizations @@ -1257,8 +1277,8 @@ Added "remaining files" as sync-progress information Updated German translation -FreeFileSync 1.3 ----------------- +FreeFileSync 1.3 [2008-09-07] +----------------------------- Maintain and load different configurations by drag&drop, load-button or command line New function to delete files (or move them to recycle bin) manually on the UI (without having to re-compare): Deleting folders results in deletion of all dependent files, subfolders on UI grid (also no re-compare needed) @@ -1272,8 +1292,8 @@ Updated sources to become more Linux and Unicode friendly Updated German translation -FreeFileSync 1.2 ----------------- +FreeFileSync 1.2 [2008-08-31] +----------------------------- New progress indicator and status information when synchronizing: ->available for command line mode and UI mode: Status update and final error report New progress information when comparing directories @@ -1292,8 +1312,8 @@ Added different return values when used in command line mode to report success o Updated German translation -FreeFileSync 1.1 ----------------- +FreeFileSync 1.1 [2008-08-24] +----------------------------- Some further speed optimizations (sorting) Written custom wxGrid class to avoid mapping of data to UI: huge performance increase (especially with formatted grids > 100000 items) Filter files to include/exclude them from synchronization @@ -1306,6 +1326,6 @@ Prepared code to support unicode in some future version Updated German translation -FreeFileSync 1.0 ----------------- +FreeFileSync 1.0 [2008-08-10] +----------------------------- Initial release diff --git a/BUILD/FreeFileSync.chm b/BUILD/FreeFileSync.chm Binary files differindex 5519353b..353494e5 100644 --- a/BUILD/FreeFileSync.chm +++ b/BUILD/FreeFileSync.chm diff --git a/BUILD/Help/FreeFileSync.hhc b/BUILD/Help/FreeFileSync.hhc index d3c318d1..1902cb14 100644 --- a/BUILD/Help/FreeFileSync.hhc +++ b/BUILD/Help/FreeFileSync.hhc @@ -20,44 +20,44 @@ <param name="Local" value="html\FreeFileSync.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Command line"> - <param name="Local" value="html\Command line.html"> + <param name="Name" value="Command Line Usage"> + <param name="Local" value="html\Command Line.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Comparison settings"> - <param name="Local" value="html\Comparison settings.html"> + <param name="Name" value="Comparison Settings"> + <param name="Local" value="html\Comparison Settings.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Daylight saving time"> - <param name="Local" value="html\Daylight saving time.html"> + <param name="Name" value="Daylight Saving Time"> + <param name="Local" value="html\Daylight Saving Time.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Exclude items"> - <param name="Local" value="html\Exclude items.html"> + <param name="Name" value="Exclude Items"> + <param name="Local" value="html\Exclude Items.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Expert settings"> - <param name="Local" value="html\Expert settings.html"> + <param name="Name" value="Expert Settings"> + <param name="Local" value="html\Expert Settings.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="External applications"> - <param name="Local" value="html\External applications.html"> + <param name="Name" value="External Applications"> + <param name="Local" value="html\External Applications.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Macros"> <param name="Local" value="html\Macros.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Schedule a batch job"> - <param name="Local" value="html\Schedule a batch job.html"> + <param name="Name" value="Schedule a Batch Job"> + <param name="Local" value="html\Schedule a Batch Job.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Synchronize with FTP"> <param name="Local" value="html\Synchronize with FTP.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Variable drive letters"> - <param name="Local" value="html\Variable drive letters.html"> + <param name="Name" value="Variable Drive Letters"> + <param name="Local" value="html\Variable Drive Letters.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Versioning"> @@ -79,8 +79,8 @@ <param name="Local" value="html\RealtimeSync.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Run as service"> - <param name="Local" value="html\Run as service.html"> + <param name="Name" value="Run as Service"> + <param name="Local" value="html\Run as Service.html"> </OBJECT> </UL> <LI> <OBJECT type="text/sitemap"> diff --git a/BUILD/Help/FreeFileSync.hhp b/BUILD/Help/FreeFileSync.hhp index 713fab68..a9f19ebc 100644 --- a/BUILD/Help/FreeFileSync.hhp +++ b/BUILD/Help/FreeFileSync.hhp @@ -12,19 +12,19 @@ Title=FreeFileSync - Help [FILES] html\FreeFileSync.html html\Versioning.html -html\Command line.html -html\Expert settings.html -html\Comparison settings.html -html\Daylight Saving time.html -html\Exclude items.html -html\External applications.html +html\Command Line.html +html\Expert Settings.html +html\Comparison Settings.html +html\Daylight Saving Time.html +html\Exclude Items.html +html\External Applications.html html\Macros.html -html\Schedule a batch job.html +html\Schedule a Batch Job.html html\Synchronize with FTP.html -html\Variable drive letters.html +html\Variable Drive Letters.html html\Volume Shadow Copy.html html\RealtimeSync.html -html\Run as service.html +html\Run as Service.html html\Links.html [INFOTYPES] diff --git a/BUILD/Help/html/Batch Scripting.html b/BUILD/Help/html/Batch Scripting.html deleted file mode 100644 index 6a3ce4b8..00000000 --- a/BUILD/Help/html/Batch Scripting.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> -<HTML> -<HEAD> - <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> - <TITLE></TITLE> - <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Win32)"> - <META NAME="CREATED" CONTENT="20091206;16574000"> - <META NAME="CHANGED" CONTENT="20130206;19571611"> - <META NAME="Info 1" CONTENT=""> - <META NAME="Info 2" CONTENT=""> - <META NAME="Info 3" CONTENT=""> - <META NAME="Info 4" CONTENT=""> - <STYLE TYPE="text/css"> - <!-- - @page { margin: 2cm } - P { margin-bottom: 0.21cm } - H2.cjk { font-family: "SimSun" } - H2.ctl { font-family: "Mangal" } - --> - </STYLE> -</HEAD> -<BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Batch -scripting</FONT></FONT></H2> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">FreeFileSync -can be called from command line and supports integration into batch -scripts. This section gives some general hints and examples for -Windows <FONT FACE="Courier New, monospace">*.cmd</FONT> and <FONT FACE="Courier New, monospace">*.bat</FONT> -scripts.</FONT></P> - -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">When -FreeFileSync is started in batch mode (a <FONT FACE="Courier New, monospace">*.ffs_batch</FONT> -file is passed as argument) it returns one of the following status -codes:</FONT></P> - -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen6" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> -<FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Return - Codes</B></SPAN><SPAN STYLE="font-style: normal"><BR>0 - - Synchronization completed successfully<BR>1 - Synchronization - completed with warnings<BR>2 - Synchronization completed with - errors<BR>3 - Synchronization was aborted</SPAN></FONT> </P> -</SPAN><BR CLEAR=LEFT><BR> -</P> - -<P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT FACE="Tahoma, sans-serif">Now -you can check if synchronization was successful from a script:</FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen6" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">"C:\Program - Files\FreeFileSync\FreeFileSync.exe" "H:\some - folder\SyncJob.ffs_batch"<BR>if errorlevel 1 (<BR> </FONT><FONT COLOR="#808080"><FONT FACE="Courier New, monospace"><I><B>::if - return code is 1 or greater, something went wrong, add special - treatment here<BR> </B></I></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal">echo - Errors occurred during synchronization...</SPAN></SPAN></FONT></FONT><FONT COLOR="#808080"><FONT FACE="Courier New, monospace"><I><B><BR> </B></I></FONT></FONT><FONT FACE="Courier New, monospace">pause<BR>)</FONT></FONT></P> -</SPAN><BR CLEAR=LEFT><BR> -</P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Instead -of displaying "An error occurred!" you can also send an -email notification (using a third party tool).</FONT> -</P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><B>Attention<BR></B>Make sure your - script is not blocked by a popup dialog. Consider the following - options when setting up a FreeFileSync batch job:</FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Disable - checkbox <SPAN STYLE="font-style: normal"><B>Show progress dialog</B></SPAN> - or have <B>On completion</B> automatically close the results dialog - after synchronization.</FONT></P> - <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Set - e</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal">rror - handling</SPAN></SPAN></FONT> <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">to - </SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Exit - instantly</B></SPAN></FONT> <FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">or - </SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Ignore - errors</B></SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">.</SPAN></FONT></P> -</SPAN><BR CLEAR=LEFT><BR> -</P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -</BODY> -</HTML>
\ No newline at end of file diff --git a/BUILD/Help/html/Command line.html b/BUILD/Help/html/Command line.html index 3768d036..56d6ce13 100644 --- a/BUILD/Help/html/Command line.html +++ b/BUILD/Help/html/Command line.html @@ -20,25 +20,23 @@ </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Command -line</FONT></FONT></H2> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Command Line Usage</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">FreeFileSync enables additional synchronization scenarios via a command line interface. To get a syntax overview, open the console, go to the directory where FreeFileSync is installed and type:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">FreeFileSync - -h</FONT></FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace">FreeFileSync + -h</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>1. Run a FreeFileSync batch job</B></FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">In order to start synchronization in batch mode, supply the path of a -<FONT FACE="Courier New, monospace">*.ffs_batch</FONT> -configuration as the first argument for FreeFileSync.exe:</FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">In order to start synchronization in batch mode, supply the path of a ffs_batch +configuration file as the first argument for FreeFileSync.exe:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">FreeFileSync - "D:\Backup </FONT><FONT FACE="Courier New, monospace">Projects</FONT><FONT FACE="Courier New, monospace">.ffs_batch"</FONT></FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace">FreeFileSync + "D:\Backup Projects.ffs_batch"</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">After @@ -52,18 +50,18 @@ synchronization one of the following status codes is returned:</FONT></P> </P> </SPAN><BR CLEAR=LEFT><BR> </P> -<P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT FACE="Tahoma, sans-serif">You -can evaluate these codes from a script (e.g. a <FONT FACE="Courier New, monospace">*.cmd</FONT> -or <FONT FACE="Courier New, monospace">*.bat</FONT> file on Windows) +<P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT FACE="Tahoma, sans-serif"> +You can evaluate these codes from a script (e.g. a cmd or bat file on Windows) and check if synchronization completed successfully:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen6" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">"C:\Program - Files\FreeFileSync\FreeFileSync.exe" "D:\Backup - </FONT><FONT FACE="Courier New, monospace">Projects</FONT><FONT FACE="Courier New, monospace">.ffs_batch"<BR>if - errorlevel 1 (<BR> </FONT><FONT COLOR="#808080"><FONT FACE="Courier New, monospace"><I><B>::if - return code is 1 or greater, something went wrong, add special - treatment here<BR> </B></I></FONT></FONT><SPAN STYLE="font-variant: normal"><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal">echo - Errors occurred during synchronization...</SPAN></SPAN></FONT></FONT></SPAN><FONT COLOR="#808080"><FONT FACE="Courier New, monospace"><I><B><BR> </B></I></FONT></FONT><FONT FACE="Courier New, monospace">pause<BR>)</FONT></FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace">"C:\Program + Files\FreeFileSync\FreeFileSync.exe" "D:\Backup Projects.ffs_batch"<BR> + if errorlevel 1 (<BR> + <FONT COLOR="#808080"><I><B>::if return code is 1 or greater, something went wrong, add special treatment here<BR> + </B></I></FONT>echo Errors occurred during synchronization...<BR> + pause<BR> + )</FONT> + </P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Instead @@ -87,7 +85,7 @@ email notification (using a third party tool).</FONT> </P> <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif">Set error handling to <B>Exit instantly</B> or <B>Ignore errors</B>.</FONT> + <FONT FACE="Tahoma, sans-serif">Set error handling to <B>Stop</B> or <B>Ignore</B>.</FONT> </P> </SPAN><BR CLEAR=LEFT><BR> @@ -97,22 +95,16 @@ email notification (using a third party tool).</FONT> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>2. Start a FreeFileSync GUI configuration</B></FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">If you -pass a <FONT FACE="Courier New, monospace">*.ffs_gui</FONT> -file, FreeFileSync will start in GUI mode and immediately start -comparison (but only if all directories exist):</FONT></P> +pass a ffs_gui file, FreeFileSync will start in GUI mode and immediately start comparison (but only if all directories exist):</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace">FreeFileSync - "D:\Manual Backup.ffs_gui"</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace">FreeFileSync "D:\Manual Backup.ffs_gui"</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>3. Customize an existing configuration</B></FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">You can -replace the directories of a given <FONT FACE="Courier New, monospace">*.ffs_gui -</FONT>or <FONT FACE="Courier New, monospace">*.ffs_batch -</FONT>configuration by using the <FONT FACE="Courier New, monospace">-leftdir</FONT> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">You can replace the directories of a given ffs_gui or ffs_batch configuration file by using the <FONT FACE="Courier New, monospace">-leftdir</FONT> and <FONT FACE="Courier New, monospace">-rightdir</FONT> parameters:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> @@ -121,8 +113,7 @@ and <FONT FACE="Courier New, monospace">-rightdir</FONT> parameters:</FONT></P> </P> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>4. -Merge multiple configurations</B></FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>4. Merge multiple configurations</B></FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">When more than one configuration file is provided, FreeFileSync will merge everything into a single configuration with multiple folder pairs and diff --git a/BUILD/Help/html/Comparison Settings.html b/BUILD/Help/html/Comparison Settings.html index af17c5c3..132cb15e 100644 --- a/BUILD/Help/html/Comparison Settings.html +++ b/BUILD/Help/html/Comparison Settings.html @@ -24,11 +24,9 @@ </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Comparison -settings</FONT></FONT></H2> -<P STYLE="margin-bottom: 0cm"><IMG SRC="../img/CmpSettings.png" NAME="Grafik1" ALIGN=BOTTOM WIDTH=219 HEIGHT=267 BORDER=0></P> -<H3 CLASS="western" STYLE="page-break-after: avoid"><FONT FACE="Tahoma, sans-serif">I. -Compare by "File time and size"</FONT></H3> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Comparison Settings</FONT></FONT></H2> +<P STYLE="margin-bottom: 0cm"><IMG SRC="../img/CmpSettings.png" NAME="Grafik1" ALIGN=BOTTOM BORDER=0></P> +<H3 CLASS="western" STYLE="page-break-after: avoid"><FONT FACE="Tahoma, sans-serif">I. Compare by <i>File time and size</i></FONT></H3> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">This variant considers two files with the same name as equal when both modification time <B>and</B> file size match. The following @@ -66,8 +64,7 @@ categories are distinguished:</FONT></P> </OL> <P STYLE="margin-bottom: 0cm"><BR> </P> -<H3 CLASS="western" STYLE="page-break-after: avoid"><FONT FACE="Tahoma, sans-serif">II. -Compare by "File content"</FONT></H3> +<H3 CLASS="western" STYLE="page-break-after: avoid"><FONT FACE="Tahoma, sans-serif">II. Compare by <i>File content</i></FONT></H3> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Two files with the same name are marked as equal if and only if they have the same content. This option is more useful for consistency checks @@ -96,10 +93,8 @@ modification time is not taken into account at all.</FONT></P> </OL> <P STYLE="margin-bottom: 0cm"><BR> </P> -<H3 CLASS="western"><FONT FACE="Tahoma, sans-serif">Symbolic link -handling</FONT></H3> -<P STYLE="margin-bottom: 0cm"><BR> -</P> +<H3 CLASS="western"><FONT FACE="Tahoma, sans-serif">Symbolic Link Handling</FONT></H3> +<BR> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">FreeFileSync offers three options to configure handling of symbolic links (also called symlinks or soft links):</FONT></P> diff --git a/BUILD/Help/html/Daylight Saving Time.html b/BUILD/Help/html/Daylight Saving Time.html index 126ab928..8cc5601c 100644 --- a/BUILD/Help/html/Daylight Saving Time.html +++ b/BUILD/Help/html/Daylight Saving Time.html @@ -20,27 +20,26 @@ </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt"><SPAN STYLE="font-style: normal">Daylight -saving time </SPAN><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal">(Windows)</SPAN></SPAN></FONT></FONT></H2> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt"><SPAN STYLE="font-style: normal">Daylight Saving Time </SPAN><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal">(Windows)</SPAN></SPAN></FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">A -common problem synchronization software has to deal with are +-1 hour +common problem synchronization software has to handle are +-1 hour file time shifts after a Daylight Saving Time (DST) switch has occurred. This can be observed for example when a FAT-formatted -volume is compared against an NTFS volume as frequently happens with -USB memory sticks. Files that previously appeared to be in sync are -now shown with a one hour modification time offset, although they -have not been modified by the user or by other means.</FONT></P> +volume is compared against an NTFS volume as is the case when synchronizing a local disk against a +USB memory stick. Files that previously appeared to be in sync are +now shown with an one hour modification time offset, although they +have not been modified by the user or the operating system.</FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The -reason for this strange behavior lies in the way NTFS and FAT drives +reason for this behavior lies in the way NTFS and FAT drives store file times: NTFS stores time in UTC format, while FAT uses local time.</FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">When -times stored in these two different formats are compared, one format -has to be converted into the other first. In both cases Windows uses -the current DST status as well as current time zone information for +times of these two different formats are compared, one format +has to be converted into the other first. In either way Windows uses +the current DST status as well as the current time zone for its calculations. Consequently the result of this comparison is dependent from current system settings and in particular file times -that used to be the same can show up as different after a DST switch.</FONT></P> +that used to be the same can show up as different after a DST switch or when the time zone is changed.</FONT></P> <P STYLE="margin-bottom: 0cm"><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">For a @@ -49,8 +48,8 @@ detailed discussion about this issue refer to: <P STYLE="margin-bottom: 0cm"><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Solution:</B></FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Luckily -FreeFileSync users need not to worry about this issue. Each file on a +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"> +FreeFileSync automatically handles this problem by adding the missing time information. Each file on a FAT volume automatically gets additional meta data encoded in its creation date that enables a correct file time calculation. This not only solves all DST issues but also time shifts that occur due to @@ -62,7 +61,7 @@ travel between different time zones.</FONT></P> <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">In order for FreeFileSync to start handling DST and timezone differences, an initial full synchronization is required. - Subsequent syncs will never show a time difference again.</FONT></P> + Subsequent syncs will then never show a time difference again for unchanged files.</FONT></P> <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm; font-style: normal"> <FONT FACE="Tahoma, sans-serif">If a FAT volume is scanned the first time by FreeFileSync this will take longer than usual since diff --git a/BUILD/Help/html/Exclude Items.html b/BUILD/Help/html/Exclude Items.html index 22d46b78..d14055fd 100644 --- a/BUILD/Help/html/Exclude Items.html +++ b/BUILD/Help/html/Exclude Items.html @@ -21,11 +21,10 @@ </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Exclude -items</FONT></FONT></H2> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Exclude Items</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Files and directories are only considered for synchronization if they pass -the filter. They have to match <B>at least one</B> entry in the +all filter rules. They have to match <B>at least one</B> entry in the include list and <B>none</B> of the entries in the exclude list:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> @@ -41,9 +40,8 @@ include list and <B>none</B> of the entries in the exclude list:</FONT></P> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT> -<FONT FACE="Tahoma, sans-serif">Exclude items for mirror-sync from -</FONT><FONT FACE="Courier New, monospace">C:\Source</FONT> <FONT FACE="Tahoma, sans-serif">to -</FONT><FONT FACE="Courier New, monospace">D:\Target</FONT></P> +<FONT FACE="Tahoma, sans-serif">Exclude items for mirror-sync from <FONT FACE="Courier New, monospace">C:\Source</FONT> to <FONT FACE="Courier New, monospace">D:\Target</FONT></FONT> +</P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> <TABLE DIR="LTR" WIDTH=100% CELLPADDING=0 CELLSPACING=0> @@ -67,16 +65,15 @@ include list and <B>none</B> of the entries in the exclude list:</FONT></P> <TR> <TD WIDTH=65% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">Single folder - <FONT FACE="Courier New, monospace">C:\Source\subfolder</FONT></FONT></P> + <FONT FACE="Courier New, monospace">C:\Source\SubFolder</FONT></FONT></P> </TD> <TD WIDTH=35% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0.05cm; padding-right: 0cm"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">\subfolder\</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">\SubFolder\</FONT></P> </TD> </TR> <TR> <TD WIDTH=65% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">All files (and - folders) named <FONT FACE="Courier New, monospace">thumbs.db</FONT> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">All files (and folders) named <FONT FACE="Courier New, monospace">thumbs.db</FONT> </FONT> </P> </TD> @@ -86,19 +83,15 @@ include list and <B>none</B> of the entries in the exclude list:</FONT></P> </TR> <TR> <TD WIDTH=65% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">All <FONT FACE="Courier New, monospace">*.tmp</FONT> - files located in <FONT FACE="Courier New, monospace">subfolder</FONT> - only</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">All <FONT FACE="Courier New, monospace">*.tmp</FONT> files located in <FONT FACE="Courier New, monospace">SubFolder</FONT> only</FONT></P> </TD> <TD WIDTH=35% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0.05cm; padding-right: 0cm"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">\subfolder\*.tmp</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">\SubFolder\*.tmp</FONT></P> </TD> </TR> <TR> <TD WIDTH=65% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">Files and folders - containing <FONT FACE="Courier New, monospace">temp</FONT> - somewhere in their path</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">Files and folders containing <FONT FACE="Courier New, monospace">temp</FONT> somewhere in their path</FONT></P> </TD> <TD WIDTH=35% STYLE="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0.05cm; padding-right: 0cm"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">*temp*</FONT></P> @@ -124,8 +117,7 @@ include list and <B>none</B> of the entries in the exclude list:</FONT></P> </TR> <TR> <TD WIDTH=65% STYLE="border: none; padding: 0cm"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">Exclude only *.txt files -located in subdirectories of base directories</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Tahoma, sans-serif">Exclude only <FONT FACE="Courier New, monospace">*.txt</FONT> files located in subdirectories of base directories</FONT></P> </TD> <TD WIDTH=35% STYLE="border-top: none; border-bottom: none; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0cm; padding-left: 0.05cm; padding-right: 0cm"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm"><FONT FACE="Courier New, monospace">\*\*.txt</FONT></P> @@ -137,7 +129,7 @@ located in subdirectories of base directories</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> - +<BR> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">For @@ -146,7 +138,7 @@ located in subdirectories of base directories</FONT></P> <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm; font-variant: normal; font-style: normal"> <FONT FACE="Tahoma, sans-serif">A filter phrase is compared against both file and directory paths. If you want to consider directories - only, you can give a hint by appending a path separator (<FONT FACE="Courier New, monospace"><B>\</B></FONT>).</FONT></P> + only, you can give a hint by appending a path separator (<B>\</B>).</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> diff --git a/BUILD/Help/html/Expert settings.html b/BUILD/Help/html/Expert settings.html index 32064162..b0ffb459 100644 --- a/BUILD/Help/html/Expert settings.html +++ b/BUILD/Help/html/Expert settings.html @@ -21,25 +21,25 @@ </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Expert -settings</FONT></FONT></H2> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Expert Settings</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">FreeFileSync has a number of special purpose settings that can only be accessed -directly via the global configuration file "<FONT FACE="Courier New, monospace">GlobalSettings.xml</FONT>". -To locate this file enter "<FONT FACE="Courier New, monospace">%appdata%\FreeFileSync</FONT>" -in the Windows Explorer address bar or go to the FreeFileSync +directly via the global configuration file <FONT FACE="Courier New, monospace">GlobalSettings.xml</FONT>. +To locate this file enter <FONT FACE="Courier New, monospace">%appdata%\FreeFileSync</FONT> in the Windows Explorer address bar or go to the FreeFileSync installation folder if you are using the portable installation.</FONT></P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen6" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace"><?xml - version="1.0" encoding="UTF-8"?><BR><FreeFileSync - XmlType="GLOBAL"><BR> <Shared><BR> <<B>FileTimeTolerance</B> - Seconds="2"/><BR> <<B>RunWithBackgroundPriority</B> - Enabled="false"/><BR> <<B>LockDirectoriesDuringSync</B> - Enabled="true"/><BR> <<B>VerifyCopiedFiles</B> - Enabled="false"/><BR> <<B>LastSyncsLogSizeMax</B> - Bytes="100000"/></FONT></P> + +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen6" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> + <FONT FACE="Courier New, monospace"> + <?xml version="1.0" encoding="UTF-8"?><BR> + <FreeFileSync XmlType="GLOBAL"><BR> + <Shared><BR> + <<B>FileTimeTolerance</B> Seconds="2"/><BR> + <<B>RunWithBackgroundPriority</B> Enabled="false"/><BR> + <<B>LockDirectoriesDuringSync</B> Enabled="true"/><BR> + <<B>VerifyCopiedFiles</B> Enabled="false"/><BR> + <<B>LastSyncsLogSizeMax</B> Bytes="100000"/> + </FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> @@ -66,7 +66,7 @@ significantly slower synchronization speed.</FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>LockDirectoriesDuringSync:</B></FONT><BR><FONT FACE="Tahoma, sans-serif">In order to avoid race conditions of multiple FreeFileSync instances writing to the same folder at the same time, accesses are serialized -by lock files ("</FONT><FONT FACE="Courier New, monospace">sync.ffs_lock</FONT><FONT FACE="Tahoma, sans-serif">"). +by lock files (<FONT FACE="Courier New, monospace">sync.ffs_lock</FONT>). This allows to operate FreeFileSync with an arbitrary number of users in a network out of the box.</FONT></P> <P STYLE="margin-bottom: 0cm"><BR> @@ -83,8 +83,7 @@ destination successfully?</FONT></A></P> <P STYLE="margin-bottom: 0cm"><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>LastSyncsLogSizeMax:<BR></B></FONT><FONT FACE="Tahoma, sans-serif">The -progress logs of the most recent synchronizations (for both GUI and -batch jobs) are collected automatically in the file "</FONT><FONT FACE="Courier New, monospace">LastSyncs.log</FONT><FONT FACE="Tahoma, sans-serif">". +progress logs of the most recent synchronizations (for both GUI and batch jobs) are collected automatically in the file <FONT FACE="Courier New, monospace">LastSyncs.log</FONT>. The maximum size of this log file can be set here.</FONT></P> </BODY> </HTML>
\ No newline at end of file diff --git a/BUILD/Help/html/External Applications.html b/BUILD/Help/html/External Applications.html index 74e5fd0a..e4ccdbaf 100644 --- a/BUILD/Help/html/External Applications.html +++ b/BUILD/Help/html/External Applications.html @@ -20,33 +20,25 @@ </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">External -applications</FONT></FONT></H2> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">By -default FreeFileSync opens the operating system's file browser on -each mouse double-click by invoking "</FONT><FONT FACE="Courier New, monospace">explorer -/select, "%item_path%"</FONT><FONT FACE="Tahoma, sans-serif">" -on Windows and "</FONT><FONT FACE="Courier New, monospace">xdg-open -"%item_folder%"</FONT><FONT FACE="Tahoma, sans-serif">" -on Linux.</FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">However -you may integrate other external applications into FreeFileSync: -navigate to </FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Menu -→ Advanced → Global settings: External Applications</B></SPAN></FONT> -<FONT FACE="Tahoma, sans-serif">and add or replace a command. The -first entry is executed when double-clicking a row or pressing ENTER -on main grid while all other entries can only be accessed via the -context menu shown after a right-click. The following internal macros -are available:</FONT></P> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">External Applications</FONT></FONT></H2> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"> +When you double-click on one of the rows on the main dialog, FreeFileSync opens the operating system's file browser by default. On Windows it calls <FONT FACE="Courier New, monospace">explorer /select, "%item_path%"</FONT>, on Linux <FONT FACE="Courier New, monospace">xdg-open "%item_folder%"</FONT> and on OS X <FONT FACE="Courier New, monospace">open -R "%item_path%"</FONT>. +</FONT> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">You can customize this behavior and integrate other external applications into FreeFileSync: +Navigate to </FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Menu +→ Tools → Global settings: Customize context menu</B></SPAN></FONT> +<FONT FACE="Tahoma, sans-serif">and add or replace a command. The first entry is executed when double-clicking a row on main grid or pressing ENTER while all other entries can be accessed via the +context menu shown after a right mouse click. The following macros +can be used:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> - <FONT FACE="Courier New, monospace">%item_path% - - <FONT FACE="Tahoma, sans-serif">full file or folder - name</FONT><BR>%item_folder% - <FONT FACE="Tahoma, sans-serif">folder - part only</FONT><BR>%item2_path% - - <FONT FACE="Tahoma, sans-serif">Counterpart of %item_path% on the - opposite grid</FONT><BR>%item2_folder% - <FONT FACE="Tahoma, sans-serif">Counterpart - of %item_folder% on the opposite grid</FONT></FONT></P> + <FONT FACE="Courier New, monospace"> + %item_path% - <FONT FACE="Tahoma, sans-serif">full file or folder name</FONT><BR> + %item_folder% - <FONT FACE="Tahoma, sans-serif">folder part only</FONT><BR> + %item2_path% - <FONT FACE="Tahoma, sans-serif">Counterpart of %item_path% on the opposite grid</FONT><BR> + %item2_folder% - <FONT FACE="Tahoma, sans-serif">Counterpart of %item_folder% on the opposite grid</FONT> + </FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> @@ -57,21 +49,15 @@ are available:</FONT></P> visual difference tool:<BR><FONT FACE="Courier New, monospace">"C:\Program Files\WinMerge\WinMergeU.exe" "%item_path%" "%item2_path%"<BR> </FONT></FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Show - file in Windows Explorer:<BR><FONT FACE="Courier New, monospace">explorer + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Show file in Windows Explorer:<BR><FONT FACE="Courier New, monospace">explorer /select, "%item_path%"<BR> </FONT></FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Open - file in associated application:</FONT><BR><FONT FACE="Courier New, monospace">cmd - /c start "" "%item_path%" </FONT><FONT FACE="Tahoma, sans-serif">or - simply</FONT> <FONT FACE="Courier New, monospace">"%item_path%"</FONT><FONT FACE="Tahoma, sans-serif"><BR> </FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Open - console dialog:<BR><FONT FACE="Courier New, monospace">cmd /k cd /D - "%item_folder%"<BR> </FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Open file in associated application:</FONT><BR><FONT FACE="Courier New, monospace">cmd + /c start "" "%item_path%" </FONT><FONT FACE="Tahoma, sans-serif">or simply</FONT> <FONT FACE="Courier New, monospace">"%item_path%"</FONT><FONT FACE="Tahoma, sans-serif"><BR> </FONT></P> + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Open console dialog:<BR><FONT FACE="Courier New, monospace">cmd /k cd /D "%item_folder%"<BR> </FONT></FONT></P> </UL> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><B>Note</B><BR>Don't forget to use - quotation marks if file names contain spaces!</FONT></P> + <FONT FACE="Tahoma, sans-serif"><B>Note</B><BR>You need to protect macros with quotation marks if they can resolve to a file path with space characters.</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> </BODY> diff --git a/BUILD/Help/html/FreeFileSync.html b/BUILD/Help/html/FreeFileSync.html index e22a47c0..2812f282 100644 --- a/BUILD/Help/html/FreeFileSync.html +++ b/BUILD/Help/html/FreeFileSync.html @@ -27,17 +27,17 @@ Comparison and Synchronization</SPAN></I></FONT></H3> <H3 CLASS="western" ALIGN=LEFT>Usage:</H3> <OL> <LI VALUE=1><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Choose - left and right directories.<BR></FONT><IMG SRC="../img/SourceTarget.png" NAME="Grafik4" ALIGN=TEXTTOP WIDTH=426 HEIGHT=50 BORDER=0></P> + left and right directories.<BR></FONT><IMG SRC="../img/SourceTarget.png" NAME="Grafik4" ALIGN=TEXTTOP BORDER=0></P> <P STYLE="margin-bottom: 0cm"> </P> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Compare</B></SPAN></FONT><FONT FACE="Tahoma, sans-serif"> - them.<BR></FONT><IMG SRC="../img/CompareButton.png" NAME="Grafik1" ALIGN=BOTTOM WIDTH=178 HEIGHT=44 BORDER=0></P> + them.<BR></FONT><IMG SRC="../img/CompareButton.png" NAME="Grafik1" ALIGN=BOTTOM BORDER=0></P> <P STYLE="margin-bottom: 0cm"> </P> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Select - synchronization settings.<BR></FONT><IMG SRC="../img/SyncConfigButton.png" NAME="Grafik3" ALIGN=BOTTOM WIDTH=44 HEIGHT=44 BORDER=0></P> + synchronization settings.<BR></FONT><IMG SRC="../img/SyncConfigButton.png" NAME="Grafik3" ALIGN=BOTTOM BORDER=0></P> <P STYLE="margin-bottom: 0cm"> </P> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Press </FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Synchronize</B></SPAN></FONT><FONT FACE="Tahoma, sans-serif"> - to begin synchronization.<BR></FONT><IMG SRC="../img/SynchronizeButton.png" NAME="Grafik2" ALIGN=BOTTOM WIDTH=178 HEIGHT=44 BORDER=0></P> + to begin synchronization.<BR></FONT><IMG SRC="../img/SynchronizeButton.png" NAME="Grafik2" ALIGN=BOTTOM BORDER=0></P> </OL> <P STYLE="margin-bottom: 0cm; border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.07cm; padding-left: 0cm; padding-right: 0cm"> <BR> @@ -47,7 +47,7 @@ Comparison and Synchronization</SPAN></I></FONT></H3> <H3 CLASS="western" STYLE="page-break-before: always"><FONT FACE="Tahoma, sans-serif">Main Dialog Overview</FONT></H3> <OL> - <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/MainDialog.png" NAME="Grafik5" ALIGN=BOTTOM WIDTH=671 HEIGHT=428 BORDER=0></P> + <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/MainDialog.png" NAME="Grafik5" ALIGN=BOTTOM BORDER=0></P> </OL> <P STYLE="margin-bottom: 0cm"><BR> </P> diff --git a/BUILD/Help/html/Macros.html b/BUILD/Help/html/Macros.html index c93b2373..d9d34a65 100644 --- a/BUILD/Help/html/Macros.html +++ b/BUILD/Help/html/Macros.html @@ -107,34 +107,26 @@ E.g. <FONT FACE="Courier New, monospace">csidl_MyMusic</FONT> → </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Hint:</B></FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">You can -add a great amount of flexibility to batch synchronization -(*.ffs_batch) by creating new temporary environment variables in a -*.bat/*.cmd file that are evaluated by FreeFileSync at runtime!</FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">You can add a great amount of flexibility to a ffs_batch configuration file + by creating new temporary environment variables in a bat or cmd file that are evaluated by FreeFileSync at runtime.</FONT></P> <P STYLE="margin-bottom: 0cm"><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B> -The FreeFileSync batch file <FONT FACE="Courier New, monospace">C:\SyncJob.ffs_batch -</FONT>contains macro <FONT FACE="Courier New, monospace">%MyVar% -</FONT>instead of an absolute target folder and is invoked by a *.cmd -file:</FONT></P> +The FreeFileSync batch file <FONT FACE="Courier New, monospace">C:\SyncJob.ffs_batch</FONT> contains macro <FONT FACE="Courier New, monospace">%MyVar%</FONT> instead of an absolute target folder and is invoked by a cmd file:</FONT> +</P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">set - MyVar=C:\Target<BR>"C:\Program - files\FreeFileSync\FreeFileSync.exe" - C:\SyncJob.ffs_batch<BR></FONT><FONT COLOR="#808080"><FONT FACE="Courier New, monospace"><I><B>::%MyVar% - is resolved as C:\Target during synchronization</B></I></FONT></FONT></FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace">set + MyVar=C:\Target<BR>"C:\Program files\FreeFileSync\FreeFileSync.exe" C:\SyncJob.ffs_batch<BR> + <FONT COLOR="#808080"><I><B>::%MyVar% is resolved as C:\Target during synchronization</B></I></FONT></FONT> +</P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> </P> <P><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B><BR>Temporary - environment variables created with the "<FONT FACE="Courier New, monospace">set</FONT>" - command are only valid if the batch job is started by calling the - executable directly! Using "<FONT FACE="Courier New, monospace">start - /wait</FONT>" or relying on Shell Execute creates a new - program context without these temporal variables.</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B><BR> + Temporary environment variables created with the <FONT FACE="Courier New, monospace">set</FONT> command are only valid if the synchronization is started by calling the + FreeFileSync executable directly. Using <FONT FACE="Courier New, monospace">start /wait</FONT> creates a new program context without these temporal variables.</FONT></P> </SPAN><BR CLEAR=LEFT> </P> </BODY> diff --git a/BUILD/Help/html/RealtimeSync.html b/BUILD/Help/html/RealtimeSync.html index d765c818..e9eae9cf 100644 --- a/BUILD/Help/html/RealtimeSync.html +++ b/BUILD/Help/html/RealtimeSync.html @@ -22,117 +22,110 @@ </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> -<H3 CLASS="western" ALIGN=CENTER><IMG SRC="../img/RTS_logo.png" NAME="Grafik6" ALIGN=ABSMIDDLE WIDTH=269 HEIGHT=59 BORDER=0><FONT SIZE=4 STYLE="font-size: 16pt"><BR></FONT><FONT SIZE=3><I><SPAN STYLE="font-weight: normal">Automated -Synchronization</SPAN></I></FONT></H3> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">RealtimeSync -is a small tool which executes a command line each time it detects -changes in one of the monitored directories </FONT><SPAN STYLE="font-variant: normal"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>or</B></SPAN></FONT></SPAN> -<FONT FACE="Tahoma, sans-serif">a directory becomes available (e. g. -insert of a USB-stick). Usually this command line will simply trigger +<H3 CLASS="western" ALIGN=CENTER><IMG SRC="../img/RTS_logo.png" NAME="Grafik6" ALIGN=ABSMIDDLE WIDTH=269 HEIGHT=59 BORDER=0><FONT SIZE=4 STYLE="font-size: 16pt"><BR></FONT><FONT SIZE=3><I><SPAN STYLE="font-weight: normal">Automated Synchronization</SPAN></I></FONT></H3> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"> +The primary purpose of RealtimeSync is to execute a command line each time a directory becomes +available (e. g. insert of a USB-stick) <b>or</b> when it detects changes in one of the monitored directories. Usually this command line will trigger a FreeFileSync batch job.</FONT></P> <P STYLE="margin-bottom: 0cm"><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT> <FONT FACE="Tahoma, sans-serif">Real time synchronization - in combination with FreeFileSync</FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Start -RealtimeSync.exe located in FreeFileSync's installation directory. -Then specify all folders that shall be monitored. Instead of doing -this manually you can import a </FONT><FONT FACE="Courier New, monospace">*.ffs_batch</FONT> -<FONT FACE="Tahoma, sans-serif">file via </FONT><SPAN STYLE="font-variant: normal"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Menu -→ Program → Open</B></SPAN></FONT></SPAN><FONT FACE="Tahoma, sans-serif">. -This not only extracts all directories relevant for synchronization -but also sets up the command line to execute the </FONT><FONT FACE="Courier New, monospace">*.ffs_batch</FONT> -<FONT FACE="Tahoma, sans-serif">file each time changes are detected. -Now press </FONT><SPAN STYLE="font-variant: normal"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Start</B></SPAN></FONT></SPAN> -<FONT FACE="Tahoma, sans-serif">to begin monitoring.</FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Start RealtimeSync.exe located in FreeFileSync's installation directory and +enter all folders you want to monitor. Instead of doing this manually you can import a ffs_batch +file via <B>Menu → Program → Open</B>. This not only extracts all directories relevant for synchronization +but also sets up the command line to execute the ffs_batch file each time changes are detected. +Now press <B>Start</B> to begin monitoring.</FONT></P> <UL> - <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/RealtimeSync.png" NAME="Grafik3" ALIGN=MIDDLE WIDTH=461 HEIGHT=388 BORDER=0></P> + <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/RealtimeSync.png" NAME="Grafik3" ALIGN=MIDDLE BORDER=0></P> </UL> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> +<BR> + +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"> + <B>Note</B></FONT></P> <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The command should </FONT><FONT FACE="Tahoma, sans-serif"><B>not</B></FONT> - <FONT FACE="Tahoma, sans-serif"><B>block</B></FONT> <FONT FACE="Tahoma, sans-serif">progress. - Make sure the FreeFileSync batch job does not show any popup - dialogs. See notes in <A HREF="Batch%20scripting.html">Batch - Scripting</A>.</FONT><SPAN STYLE="text-decoration: none"><FONT FACE="Tahoma, sans-serif"><BR> </FONT></SPAN></P> + <FONT FACE="Tahoma, sans-serif"><B>block</B></FONT> <FONT FACE="Tahoma, sans-serif">progress. If you call a FreeFileSync batch job, make sure it does not show any popup + windows. See notes in <A HREF="Command%20line.html">Command Line Usage</A>.</FONT><BR> </P> - <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The - settings dialog can be skipped by passing a RealtimeSync - configuration file (<FONT FACE="Courier New, monospace">*.ffs_real</FONT>) - <B>or</B> a FreeFileSync batch file (<FONT FACE="Courier New, monospace">*.ffs_batch</FONT>) - as first command line argument to RealtimeSync.exe. This can be - integrated into the operating system's auto start - facility:<BR> <FONT FACE="Courier New, monospace">"C:\Program - Files\FreeFileSync\RealtimeSync.exe" "</FONT><FONT FACE="Courier New, monospace">D</FONT><FONT FACE="Courier New, monospace">:\</FONT><FONT FACE="Courier New, monospace">Backup - Projects</FONT><FONT FACE="Courier New, monospace">.ffs_real"<BR></FONT> <FONT FACE="Courier New, monospace">"C:\Program - Files\FreeFileSync\RealtimeSync.exe" "</FONT><FONT FACE="Courier New, monospace">D</FONT><FONT FACE="Courier New, monospace">:\</FONT><FONT FACE="Courier New, monospace">Backup - Projects</FONT><FONT FACE="Courier New, monospace">.ffs_batch"</FONT><BR> </FONT></P> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"> + RealtimeSync will skip showing the main dialog and begin monitoring immediately if you pass a ffs_real configuration file <B>or</B> a FreeFileSync ffs_batch file + as first command line argument to RealtimeSync.exe. This helps you integrate RealtimeSync into your operating system's auto start:<BR> + <FONT FACE="Courier New, monospace">"C:\Program Files\FreeFileSync\RealtimeSync.exe" "D:\Backup Projects.ffs_real"</FONT><BR> + <FONT FACE="Courier New, monospace">"C:\Program Files\FreeFileSync\RealtimeSync.exe" "D:\Backup Projects.ffs_batch"</FONT><BR> + </FONT> + </P> - <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Using - RealtimeSync is not restricted to starting FreeFileSync. It can - also be used in other scenarios, like sending an email whenever a - certain directory is modified.</FONT></P> -</SPAN><BR CLEAR=LEFT><BR> - -<P STYLE="margin-bottom: 0cm"><BR> + <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"> + RealtimeSync is not tied to starting FreeFileSync. It can also be used in other scenarios, like sending an email whenever a certain directory is modified.</FONT></P> +</SPAN><BR CLEAR=LEFT> </P> + +<BR> +<BR> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT> -<FONT FACE="Tahoma, sans-serif">Automatic synchronization when USB +<FONT FACE="Tahoma, sans-serif">Automatic synchronization when a USB stick is inserted</FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Save a -ffs_batch configuration into the USB stick's root directory and have -it called when the stick is mounted. Then configure RealtimeSync as -shown in the following:</FONT></P> +ffs_batch configuration in the USB stick's root directory, e.g. <FONT FACE="Courier New, monospace">H:\</FONT>, to let RealtimeSync call it when the stick is mounted. Configure RealtimeSync as follows:</FONT></P> <UL> - <P><IMG SRC="../img/WatchUsbInsert.png" NAME="Grafik2" ALIGN=BOTTOM WIDTH=437 HEIGHT=362 BORDER=0></P> + <P><IMG SRC="../img/WatchUsbInsert.png" NAME="Grafik2" ALIGN=BOTTOM BORDER=0> + <BR></P> </UL> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Whenever -directory "</FONT><FONT FACE="Courier New, monospace">H:\Data</FONT><FONT FACE="Tahoma, sans-serif">" -becomes available, the command line executes and starts the batch job -on the stick. Additionally it also starts the batch job each time -files are modified in "</FONT><FONT FACE="Courier New, monospace">H:\Data</FONT><FONT FACE="Tahoma, sans-serif">". -</FONT> -</P> -<P STYLE="margin-bottom: 0cm"><BR> + +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Whenever directory <FONT FACE="Courier New, monospace">H:\Data</FONT> becomes available, RealtimeSync executes the command line which starts the batch job located +on the stick. RealtimeSync will also trigger each time files are modified in <FONT FACE="Courier New, monospace">H:\Data</FONT>.</FONT> </P> +<BR> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note<BR></B></FONT><FONT FACE="Tahoma, sans-serif">The - full path of the last changed file and the action that triggered the - change notification (create, update or delete) are </FONT><SPAN STYLE="text-decoration: none"><FONT FACE="Tahoma, sans-serif">written - to the environment variables </FONT></SPAN><SPAN STYLE="text-decoration: none"><FONT FACE="Courier New, monospace"><B>%change_path%</B></FONT></SPAN><SPAN STYLE="text-decoration: none"> - </SPAN><SPAN STYLE="text-decoration: none"><FONT FACE="Tahoma, sans-serif">and - </FONT></SPAN><SPAN STYLE="text-decoration: none"><FONT FACE="Courier New, monospace"><B>%change_action%</B></FONT></SPAN><SPAN STYLE="text-decoration: none"><FONT FACE="Courier New, monospace">.</FONT></SPAN></P> -</SPAN><BR CLEAR=LEFT><BR> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> + <FONT FACE="Tahoma, sans-serif"> + <B>Note</B><BR> + The full path of the last changed file and the action that triggered the + change notification (create, update or delete) are written + to the environment variables <B>%change_path%</B> and <B>%change_action%</B>. + </FONT> + </P> +</SPAN><BR CLEAR=LEFT> </P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT> -<FONT FACE="Tahoma, sans-serif">Show names of changed files or -directories. (Windows)</FONT></P> +<BR> +<BR> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B> +Log names of changed files and directories (Windows)</FONT></P> + <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace"><FONT FACE="Tahoma, sans-serif">Show - which file or directory has triggered a change. Enter command - line:</FONT><BR> cmd /c echo %change_action% - "%change_path%" & pause<BR><BR><FONT FACE="Tahoma, sans-serif">Write - a list of all changes to a logfile:</FONT><BR> cmd - /c echo %change_action% "%change_path%" >> - c:\log.txt</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> + + <FONT FACE="Tahoma, sans-serif">Show which file or directory has triggered a change. Enter command + line:</FONT><BR> + + <FONT FACE="Courier New, monospace"> + cmd /c echo %change_action% + "%change_path%" & pause<BR><BR> + </FONT> + + <FONT FACE="Tahoma, sans-serif">Write a list of all changes to a log file:</FONT><BR> + + <FONT FACE="Courier New, monospace"> + cmd /c echo %change_action% "%change_path%" >> C:\log.txt + </FONT> + </P> </SPAN><BR CLEAR=LEFT><BR> </P> + <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note<BR></B></FONT><FONT FACE="Tahoma, sans-serif">During - execution of a Windows Batch file (*.bat/*.cmd) a black console - window is shown. You can hide it using the Visual Basic script - "HideConsole.vbs" located in FreeFileSync's installation - directory:</FONT></P> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace"><B>wscript - "C:\Program files\FreeFileSync\HideConsole.vbs" - C:\MyBatchFile.cmd</B></FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> + <FONT FACE="Tahoma, sans-serif"> + <b>Note</b><br> + When RealtimeSync executes a Windows batch file (bat or cmd) a black console window is shown. You can hide it using the Visual Basic script + <FONT FACE="Courier New, monospace">HideConsole.vbs</FONT> located in FreeFileSync's installation directory: + </FONT><br><br> + + <FONT FACE="Courier New, monospace">wscript "C:\Program files\FreeFileSync\HideConsole.vbs" C:\MyBatchFile.cmd</FONT> + </P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> @@ -141,7 +134,8 @@ directories. (Windows)</FONT></P> <UL> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">If multiple changes happen at the same time, only the name of the first - file is written to variable "changed_file".</FONT></P> + file is written to variable <b>%changed_file%</b>.</FONT></P> + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">While RealtimeSync is executing the command line, monitoring is inactive and changes occurring during this time are lost. </FONT> diff --git a/BUILD/Help/html/Run as Service.html b/BUILD/Help/html/Run as Service.html index d04d8115..39ee6ba6 100644 --- a/BUILD/Help/html/Run as Service.html +++ b/BUILD/Help/html/Run as Service.html @@ -20,46 +20,38 @@ </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Run -as service <SPAN STYLE="font-weight: normal">(Windows)</SPAN></FONT></FONT></H2> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">RealtimeSync -is designed as a background process which does not need further -attention once it is running. Depending on your requirements there -are a number of ways to start it together with the operating system. -Generally the goal is to execute a command line like the following: -</FONT><SPAN STYLE="font-variant: normal"><FONT FACE="Courier New, monospace"><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal"><installation -folder>\RealtimeSync.exe <path to *.ffs_real or *.ffs_batch -file></SPAN></SPAN></FONT></SPAN></P> -<P STYLE="margin-bottom: 0cm"><BR> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Run as Service <SPAN STYLE="font-weight: normal">(Windows)</SPAN></FONT></FONT></H2> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"> + RealtimeSync is designed to run as a background process which does not need further + attention. Depending on your requirements there are a number of ways you can start it automatically. + Generally the goal is to execute a command line like:</FONT><br> + <br> + <FONT FACE="Courier New, monospace"><FreeFileSync installation folder>\RealtimeSync.exe <path to *.ffs_real or *.ffs_batch file></FONT> </P> + +<BR> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT></P> <UL> <P><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace">"C:\Program - Files\FreeFileSync\RealtimeSync.exe" "<FONT COLOR="#000000"><FONT SIZE=3><SPAN STYLE="font-weight: normal">D</SPAN></FONT></FONT><FONT COLOR="#000000"><FONT SIZE=3><SPAN STYLE="font-weight: normal">:\</SPAN></FONT></FONT><FONT COLOR="#000000"><FONT SIZE=3><SPAN STYLE="font-weight: normal">Backup - Projects</SPAN></FONT></FONT>.ffs_real"</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Courier New, monospace"> + "C:\Program Files\FreeFileSync\RealtimeSync.exe" "D:\Backup Projects.ffs_real"</FONT></P> </SPAN><BR CLEAR=LEFT> </P> </UL> -<P><BR><BR> -</P> +<BR><BR> <OL> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-variant: normal"><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal">RealtimeSync - should be monitoring only while a specific user is logged in: </SPAN></SPAN></SPAN>Create - a new shortcut, enter the command line from above as target and - place it into the user's autostart folder.</FONT></P> + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"> + RealtimeSync should be monitoring only while a specific user is logged in: Create + a new shortcut, enter the command line from above as target and place it into the user's autostart folder.</FONT></P> + <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/create_shortcut.png" NAME="Grafik3" ALIGN=BOTTOM BORDER=0></P> <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/shortcut_properties.png" NAME="Grafik4" ALIGN=BOTTOM BORDER=0></P> <P STYLE="margin-bottom: 0cm"> </P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">RealtimeSync - should be monitoring while Windows is online irrespective of - currently logged in users: Create a new task in your operating - systems's task scheduler and have it execute the command line above - when the system starts. See <A HREF="Schedule%20a%20batch%20job.html">Schedule - a Batch Job</A> for an example how to add a new task. Then change - the user to run the task to </FONT><FONT FACE="Tahoma, sans-serif"><B>SYSTEM</B></FONT> - <FONT FACE="Tahoma, sans-serif">- a special user account always - running in the background.</FONT></P> + + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">RealtimeSync should be monitoring while Windows is running irrespective of + currently logged in users: Create a new task in your operating systems's task scheduler and have it execute the command line above + when the system starts. See <A HREF="Schedule%20a%20batch%20job.html">Schedule a Batch Job</A> for an example how to add a task. Then change + the user which runs the task to <B>SYSTEM</B> - a special user account always running in the background.</FONT></P> <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/schedule_realtimesync.png" NAME="Grafik1" ALIGN=BOTTOM BORDER=0></P> </OL> <P STYLE="margin-bottom: 0cm"><BR> diff --git a/BUILD/Help/html/Schedule a Batch Job.html b/BUILD/Help/html/Schedule a Batch Job.html index 76393187..dbd3fc2a 100644 --- a/BUILD/Help/html/Schedule a Batch Job.html +++ b/BUILD/Help/html/Schedule a Batch Job.html @@ -16,8 +16,7 @@ </STYLE> </HEAD> <BODY LANG="de-DE" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Schedule -a batch job</FONT></FONT></H2> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Schedule a Batch Job</FONT></FONT></H2> <OL> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Create a new batch job via FreeFileSync's main dialog: </FONT><SPAN STYLE="font-variant: normal"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Menu @@ -27,19 +26,26 @@ a batch job</FONT></FONT></H2> unattended batch script, make sure that no popup dialog stops the progress:<BR>Disable checkbox <SPAN STYLE="font-variant: normal"><SPAN STYLE="font-style: normal"><B>Show progress dialog</B></SPAN></SPAN> to avoid blocking while showing - the result after synchronization. Alternatively you can select the - "On completion" action <B>Close progress dialog</B> - located in synchronization settings.<BR><B>Note:</B> Even if the - progress dialog is not shown at the beginning, a user can make it + the result after synchronization. Alternatively you can leave this option checked and select the <i>On completion</i> action <B>Close progress dialog</B> + located in synchronization settings. FreeFileSync will then show a progress dialog but close it automatically when it is finished.<BR> + <br> + <B>Note:</B> Even if the + progress dialog is not shown at the beginning, you can make it visible <B>during</B> synchronization by double-clicking the - FreeFileSync systray icon.<BR><IMG SRC="../img/SetupBatch.png" NAME="Grafik3" ALIGN=BOTTOM WIDTH=660 HEIGHT=263 BORDER=0></FONT></P> - <P STYLE="margin-bottom: 0cm"> </P> + FreeFileSync notification area icon.<BR> + <BR> + <IMG SRC="../img/SetupBatch.png" NAME="Grafik3" ALIGN=BOTTOM BORDER=0> + <br><br> + </FONT> + </P> + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">In order to prevent error or warning popup messages from stopping - progress, set <SPAN STYLE="font-variant: normal"><SPAN STYLE="font-style: normal"><B>Error - handling</B></SPAN></SPAN> to either <SPAN STYLE="font-variant: normal"><SPAN STYLE="font-style: normal"><B>Ignore</B></SPAN></SPAN> - or <SPAN STYLE="font-variant: normal"><SPAN STYLE="font-style: normal"><B>Exit</B></SPAN></SPAN>.</FONT></P> - <P STYLE="margin-bottom: 0cm"> </P> + progress, set <SPAN STYLE="font-variant: normal"><SPAN STYLE="font-style: normal"><B>Handle errors</B></SPAN></SPAN> to either <SPAN STYLE="font-variant: normal"><SPAN STYLE="font-style: normal"><B>Ignore</B></SPAN></SPAN> + or <SPAN STYLE="font-variant: normal"><SPAN STYLE="font-style: normal"><B>Stop</B></SPAN></SPAN>.</FONT> + <br><br> + </P> + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Setup your operating system's scheduler</FONT></P> </OL> @@ -48,59 +54,63 @@ a batch job</FONT></FONT></H2> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Windows 7 Task Scheduler:</B></FONT></P> <UL> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Go - to Start and run</SPAN></FONT> <FONT FACE="Tahoma, sans-serif"><FONT SIZE=3><B>taskschd.msc</B></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=3><SPAN STYLE="font-weight: normal">.</SPAN></FONT></FONT></FONT></P> - <LI><P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT COLOR="#000000"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=3>Create - a new basic task and follow the wizard.</FONT></FONT></FONT></P> - <LI><P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT COLOR="#000000"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=3>Make - <B>Program/script</B> point to the location of FreeFileSync.exe - and insert the <FONT FACE="Courier New, monospace">*.ffs_batch</FONT> - file into <B>Add arguments</B>.</FONT></FONT></FONT></P> - <LI><P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT FACE="Tahoma, sans-serif"><FONT COLOR="#000000"><FONT SIZE=3>Use - quotation marks to protect spaces in path names, e.g.: </FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=3>"</FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=3>D</FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=3>:\</FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=3>Backup - Projects</FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=3>.ffs_batch"</FONT></FONT></FONT><FONT COLOR="#000000"><FONT SIZE=3><BR></FONT></FONT><IMG SRC="../img/win7scheduler.png" NAME="Grafik1" ALIGN=BOTTOM WIDTH=708 HEIGHT=284 BORDER=0></FONT></P> + <LI> + <P STYLE="margin-bottom: 0cm"> + <FONT FACE="Tahoma, sans-serif">Go to Start and run <FONT FACE="Courier New, monospace"><B>taskschd.msc</B></FONT>.</FONT> + </P> + + <LI> + <P STYLE="margin-bottom: 0cm"> + <FONT FACE="Tahoma, sans-serif">Create a new basic task and follow the wizard.</FONT> + </P> + + <LI> + <P STYLE="margin-bottom: 0cm"> + <FONT FACE="Tahoma, sans-serif">Make <B>Program/script</B> point to the location of FreeFileSync.exe + and insert the ffs_batch file into <B>Add arguments</B>.</FONT> + </P> + + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Use quotation marks to protect spaces in path names, e.g. <FONT FACE="Courier New, monospace">"D:\Backup Projects.ffs_batch"</FONT><BR> + <BR> + <IMG SRC="../img/win7scheduler.png" NAME="Grafik1" ALIGN=BOTTOM BORDER=0></FONT> + </P> </UL> </OL> <P STYLE="margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT><FONT FACE="Tahoma, sans-serif"><BR>Beginning - with Windows Vista the "Program/script" always needs - point to an executable file like "FreeFileSync.exe" even - if ffs_batch file associations have been set!</FONT> I<FONT FACE="Tahoma, sans-serif">f - a ffs_batch file were entered instead the task would return with + with Windows Vista the <i>Program/script</i> always needs point to an executable file like FreeFileSync.exe even + if ffs_batch file association is set. If a ffs_batch file is entered instead the task will return with error code 0xC1, "%1 is not a valid Win32 application".</FONT></P> </SPAN><BR CLEAR=LEFT> </P> </OL> <OL> <OL TYPE=A START=2> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Windows - XP Scheduled Tasks:</B></FONT></P> + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Windows XP Scheduled Tasks:</B></FONT></P> <UL> <LI VALUE=1><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Go - to <SPAN STYLE="font-variant: normal"><SPAN STYLE="font-style: normal"><B>Start - → Control Panel → Scheduled Tasks</B></SPAN></SPAN> and - select <SPAN STYLE="font-variant: normal"><SPAN STYLE="font-style: normal"><B>Add - Scheduled Task</B></SPAN></SPAN>.</FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Follow - the wizard and select FreeFileSync.exe as program to run.</FONT></P> - <LI><P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT FACE="Tahoma, sans-serif">Fill - input field <B>Run:</B> as: <FONT FACE="Courier New, monospace"><FreeFileSync - installation folder>\FreeFileSync.exe <job - name>.ffs_batch</FONT><BR><IMG SRC="../img/ScheduleBatch.png" NAME="Grafik2" ALIGN=BOTTOM WIDTH=406 HEIGHT=455 BORDER=0><BR> </FONT></P> + to <B>Start → Control Panel → Scheduled Tasks</B> and select <B>Add Scheduled Task</B>.</FONT> + </P> + + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Follow the wizard and select FreeFileSync.exe as program to run.</FONT></P> + + <LI><P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT FACE="Tahoma, sans-serif">Fill the input field <B>Run:</B> + <FONT FACE="Courier New, monospace"><FreeFileSync installation folder>\FreeFileSync.exe <job name>.ffs_batch</FONT><BR> + <BR> + <IMG SRC="../img/ScheduleBatch.png" NAME="Grafik2" ALIGN=BOTTOM BORDER=0><BR> </FONT></P> </UL> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Ubuntu - Linux Gnome-schedule:</B></FONT></P> + + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Ubuntu Linux Gnome-schedule:</B></FONT></P> <UL> - <LI><P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT FACE="Tahoma, sans-serif">Install - Gnome-schedule, if necessary: <FONT FACE="Courier New, monospace">sudo - apt-get install gnome-schedule</FONT></FONT></P> - <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Go - to </SPAN></FONT><SPAN STYLE="font-variant: normal"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>System - → Preferences → Scheduled tasks</B></SPAN></FONT></SPAN></P> - <LI><P STYLE="margin-bottom: 0cm"><SPAN STYLE="font-variant: normal"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal">Enter - the command as:</SPAN></SPAN></FONT></SPAN><SPAN STYLE="font-variant: normal"> - </SPAN><SPAN STYLE="font-variant: normal"><FONT FACE="Courier New, monospace"><SPAN STYLE="font-style: normal"><SPAN STYLE="font-weight: normal"><FreeFileSync - installation folder>/FreeFileSync <job name>.ffs_batch</SPAN></SPAN></FONT></SPAN><FONT FACE="Courier New, monospace"><I><SPAN STYLE="font-weight: normal"><BR></SPAN></I></FONT><IMG SRC="../img/ubuntuScheduler.png" NAME="Grafik5" ALIGN=BOTTOM WIDTH=629 HEIGHT=560 BORDER=0></P> + <LI><P STYLE="margin-bottom: 0cm; font-weight: normal"> + <FONT FACE="Tahoma, sans-serif">Install Gnome-schedule, if necessary: </FONT><FONT FACE="Courier New, monospace">sudo apt-get install gnome-schedule</FONT></P> + + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Go to <B>System → Preferences → Scheduled tasks</B></FONT></P> + + <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Enter the command:</FONT> + <FONT FACE="Courier New, monospace"><FreeFileSync installation folder>/FreeFileSync <job name>.ffs_batch</FONT><BR> + <BR> + <IMG SRC="../img/ubuntuScheduler.png" NAME="Grafik5" ALIGN=BOTTOM BORDER=0></P> </UL> </OL> </OL> diff --git a/BUILD/Help/html/Synchronize with FTP.html b/BUILD/Help/html/Synchronize with FTP.html index 43cc5a1b..cbca698d 100644 --- a/BUILD/Help/html/Synchronize with FTP.html +++ b/BUILD/Help/html/Synchronize with FTP.html @@ -50,10 +50,7 @@ drive letter:</FONT></P> <A HREF="Compare%20by%20File%20Size.html">Compare by File Size</A>.</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> +<br> <H3 CLASS="western"><FONT FACE="Tahoma, sans-serif">Synchronize with SFTP <SPAN STYLE="font-weight: normal">(Linux)</SPAN></FONT></H3> <P STYLE="margin-bottom: 0cm"><BR> @@ -62,13 +59,18 @@ SFTP <SPAN STYLE="font-weight: normal">(Linux)</SPAN></FONT></H3> share can be easily mapped onto a local folder for use with FreeFileSync:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> - <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Install:</FONT><FONT FACE="Courier New, monospace"><BR>sudo - apt-get install sshfs<BR> </FONT></P> - <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Mount - SFTP share:</FONT><FONT FACE="Courier New, monospace"><BR>sshfs - ssh-account@ssh-server:<path> mountpoint<BR> </FONT></P> - <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Unmount:</FONT><FONT FACE="Courier New, monospace"><BR>fusermount - -u mountpoint</FONT></P> + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> + <FONT FACE="Tahoma, sans-serif">Install:</FONT> + <FONT FACE="Courier New, monospace"><BR>sudo apt-get install sshfs<BR> + </FONT></P> + + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> + <FONT FACE="Tahoma, sans-serif">Mount SFTP share:</FONT> + <FONT FACE="Courier New, monospace"><BR>sshfs ssh-account@ssh-server:<path> mountpoint<BR> + </FONT></P> + + <LI><P STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Unmount:</FONT> + <FONT FACE="Courier New, monospace"><BR>fusermount -u mountpoint</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> </BODY> diff --git a/BUILD/Help/html/Variable Drive Letters.html b/BUILD/Help/html/Variable Drive Letters.html index ee95e4a3..a9368041 100644 --- a/BUILD/Help/html/Variable Drive Letters.html +++ b/BUILD/Help/html/Variable Drive Letters.html @@ -16,8 +16,7 @@ </STYLE> </HEAD> <BODY LANG="de-DE" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Variable -drive letters</FONT></FONT></H2> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Variable Drive Letters</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">USB memory sticks or external hard disks often get different drive letters assigned when plugged into distinct computers. FreeFileSync @@ -27,49 +26,42 @@ offers two solutions to handle this problem:</FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Option 1: </B>Specify a folder path by using the volume name:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Use - "<FONT FACE="Courier New, monospace">[ZENJU-USB]\folder</FONT>" - instead of "<FONT FACE="Courier New, monospace">G:\folder</FONT>" - where "<FONT FACE="Courier New, monospace">ZENJU-USB</FONT>" - is the volume name of the USB stick which is currently mounted in - drive G:\.</FONT></P> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> + <FONT FACE="Tahoma, sans-serif">Use <FONT FACE="Courier New, monospace">[ZENJU-USB]\folder</FONT> instead of <FONT FACE="Courier New, monospace">G:\folder</FONT> where ZENJU-USB + is the volume name of the USB stick which is currently mounted in drive <FONT FACE="Courier New, monospace">G:\</FONT>. + </FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note<BR></B>It + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"> + <B>Note<BR></B>It is not required to look up and enter the volume name manually. Just - select the corresponding entry in the drop down menu.</FONT></P> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><IMG SRC="../img/VolumeName.png" NAME="Grafik1" ALIGN=BOTTOM WIDTH=424 HEIGHT=86 BORDER=0></P> + select the corresponding entry in the drop down menu.</FONT> + <IMG SRC="../img/VolumeName.png" NAME="Grafik1" ALIGN=BOTTOM BORDER=0> + </P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Option -2: </B></FONT><FONT FACE="Tahoma, sans-serif">Use a relative -directory name:</FONT></P> +2: </B></FONT><FONT FACE="Tahoma, sans-serif">Use a relative directory name:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0.05cm; background: #e6e6e6"> <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif">Use - "</FONT><FONT FACE="Courier New, monospace">\folder</FONT><FONT FACE="Tahoma, sans-serif">" - instead of "</FONT><FONT FACE="Courier New, monospace">G:\folder</FONT><FONT FACE="Tahoma, sans-serif">"</FONT> + <FONT FACE="Tahoma, sans-serif">Use <FONT FACE="Courier New, monospace">\folder</FONT> instead of <FONT FACE="Courier New, monospace">G:\folder</FONT></FONT> </P><BR> <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm; font-style: normal"> - <FONT FACE="Tahoma, sans-serif">Save - and copy synchronization settings to the USB stick: - "</FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=3>G:\</FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=3>Backup</FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Courier New, monospace"><FONT SIZE=3>.ffs_gui"</FONT></FONT></FONT> + <FONT FACE="Tahoma, sans-serif">Save and copy synchronization settings to the USB stick: </FONT><FONT FACE="Courier New, monospace">G:\Backup.ffs_gui</FONT> </P><BR> <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm; font-style: normal"> - <FONT FACE="Tahoma, sans-serif">Start - FreeFileSync by double-clicking on "</FONT><FONT FACE="Courier New, monospace">G:\</FONT><FONT FACE="Courier New, monospace">Backup</FONT><FONT FACE="Courier New, monospace">.ffs_gui</FONT><FONT FACE="Tahoma, sans-serif">"<BR>→ - The working directory is automatically set to "</FONT><FONT FACE="Courier New, monospace">G:\</FONT><FONT FACE="Tahoma, sans-serif">" - by the operating system so that </FONT><FONT FACE="Tahoma, sans-serif">the - relative path </FONT><FONT FACE="Tahoma, sans-serif">"</FONT><FONT FACE="Courier New, monospace">\folder</FONT><FONT FACE="Tahoma, sans-serif">" - will be resolved as "</FONT><FONT FACE="Courier New, monospace">G:\folder</FONT><FONT FACE="Tahoma, sans-serif">" - during synchronization.</FONT> + <FONT FACE="Tahoma, sans-serif">Start FreeFileSync by double-clicking on <FONT FACE="Courier New, monospace">G:\Backup.ffs_gui</FONT><br> + <br> + The working directory is then automatically set to <FONT FACE="Courier New, monospace">G:\</FONT> by the operating system so that the + relative path <FONT FACE="Courier New, monospace">\folder</FONT> will be resolved as <FONT FACE="Courier New, monospace">G:\folder</FONT> during synchronization. + </FONT> </P> </SPAN><BR CLEAR=LEFT><BR> </P> diff --git a/BUILD/Help/html/Versioning.html b/BUILD/Help/html/Versioning.html index e61ec43f..9b81b731 100644 --- a/BUILD/Help/html/Versioning.html +++ b/BUILD/Help/html/Versioning.html @@ -20,12 +20,11 @@ </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">File -versioning</FONT></FONT></H2> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">File Versioning</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">When you need to preserve files that have been deleted or overwritten it's -often sufficient to select <B>Recycle Bin</B> in synchronization -settings. However this is only available on local drives and offers +often sufficient to select <B>Recycle bin</B> in synchronization +settings. However this is only available for local drives and offers little control on how to store and how long to keep the files. FreeFileSync therefore has an additional option, <B>Versioning</B>.</FONT></P> <P STYLE="margin-bottom: 0cm"><BR> @@ -39,11 +38,10 @@ deleted files into the provided folder and add a time stamp to each file name. The structure of the synchronized folders is preserved so that old versions of a file can be conveniently accessed via a file browser.</FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example: -</B></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">A -file "</SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">Folder\File.txt</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">" -was updated three times and old versions were moved to folder -"</SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">C:\Revisions</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">"</SPAN></FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B> +A file <FONT FACE="Courier New, monospace">Folder\File.txt</FONT> was updated three times and old versions were moved to folder <FONT FACE="Courier New, monospace">C:\Revisions</FONT> +</FONT> +</P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">C:\Revisions\Folder\File.txt </FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 @@ -56,7 +54,7 @@ was updated three times and old versions were moved to folder <P STYLE="margin-bottom: 0cm"><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>2. -Save only most recent version</B></FONT></P> +Save only the most recent version</B></FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Set deletion handling to <B>Versioning</B> and naming convention to <B>Replace</B>. Deleted files will be moved to the specified folder @@ -68,14 +66,16 @@ versions.</FONT></P> Save versions at certain intervals</B></FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">With naming convention </FONT><FONT FACE="Tahoma, sans-serif"><B>Replace</B></FONT> -<FONT FACE="Tahoma, sans-serif">it's possible to refine the +<FONT FACE="Tahoma, sans-serif">it is possible to refine the granularity of versions to keep by adding <A HREF="Macros.html">macros</A> to the versioning folder path. For example you can save deleted files on a per sync session basis by adding the </FONT><FONT FACE="Tahoma, sans-serif"><B>%timestamp%</B></FONT> <FONT FACE="Tahoma, sans-serif">macro:</FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example: -</B></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">Using -the dynamically generated folder name "</SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">C:\Revisions\%timestamp%</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">"</SPAN></FONT></P> + +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B> +Using the dynamically generated folder name <FONT FACE="Courier New, monospace">C:\Revisions\%timestamp%</FONT></FONT> +</P> + <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.04cm; border: none; padding: 0cm; background: #e6e6e6"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">C:\Revisions\</FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 111111</B></FONT><FONT FACE="Courier New, monospace">\Folder\File.txt<BR>C:\Revisions\</FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 diff --git a/BUILD/Help/html/Volume Shadow Copy.html b/BUILD/Help/html/Volume Shadow Copy.html index 24a3bd92..c5e32e80 100644 --- a/BUILD/Help/html/Volume Shadow Copy.html +++ b/BUILD/Help/html/Volume Shadow Copy.html @@ -25,7 +25,7 @@ Shadow Copy Service <SPAN STYLE="font-weight: normal">(Windows only)</SPAN></FON <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">FreeFileSync supports copying locked or shared files by creating a Volume Shadow Copy of the source drive. This feature can be configured via </FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Menu -→ Advanced → Global settings: Copy locked files</B></SPAN></FONT><FONT FACE="Tahoma, sans-serif">.</FONT></P> +→ Tools → Global settings: Copy locked files</B></SPAN></FONT><FONT FACE="Tahoma, sans-serif">.</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen3" DIR="LTR" STYLE="float: left; width: 80%; border: 1px solid #000080; padding: 0.05cm; background: #ccccff"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Note</B></FONT></P> <LI><P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The @@ -40,16 +40,25 @@ Copy of the source drive. This feature can be configured via </FONT><FONT FACE=" <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Troubleshooting</B></FONT></P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">If you experience problems using the Volume Shadow Copy Service a renewal of -registration might help. Create and execute a *.cmd batch file with -the follow content or enter directly via command line:</FONT></P> +registration might help. Create and execute a cmd batch file and insert the following lines or enter directly via command line:</FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; border: none; padding: 0cm; background: #e6e6e6"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-bottom: 0cm"> - <FONT FACE="Courier New, monospace">cd /d %windir%\system32<BR>Net - stop vss<BR>Net stop swprv<BR>regsvr32 ole32.dll<BR>regsvr32 - oleaut32.dll<BR>regsvr32 vss_ps.dll<BR>Vssvc /register<BR>regsvr32 - /i swprv.dll<BR>regsvr32 /i eventcls.dll<BR>regsvr32 es.dll<BR>regsvr32 - stdprov.dll<BR>regsvr32 vssui.dll<BR>regsvr32 msxml.dll<BR>regsvr32 - msxml3.dll<BR>regsvr32 msxml4.dll</FONT></P> + <FONT FACE="Courier New, monospace"> + cd /d %windir%\system32<BR> + Net stop vss<BR> + Net stop swprv<BR> + regsvr32 ole32.dll<BR> + regsvr32 oleaut32.dll<BR> + regsvr32 vss_ps.dll<BR> + Vssvc /register<BR> + regsvr32 /i swprv.dll<BR> + regsvr32 /i eventcls.dll<BR> + regsvr32 es.dll<BR> + regsvr32 stdprov.dll<BR> + regsvr32 vssui.dll<BR> + regsvr32 msxml.dll<BR> + regsvr32 msxml3.dll<BR> + regsvr32 msxml4.dll</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P ALIGN=LEFT STYLE=" margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Reference: diff --git a/BUILD/Help/img/CmpSettings.png b/BUILD/Help/img/CmpSettings.png Binary files differindex da67415a..16c30698 100644 --- a/BUILD/Help/img/CmpSettings.png +++ b/BUILD/Help/img/CmpSettings.png diff --git a/BUILD/Help/img/CompareButton.png b/BUILD/Help/img/CompareButton.png Binary files differindex b761e929..3fe37be1 100644 --- a/BUILD/Help/img/CompareButton.png +++ b/BUILD/Help/img/CompareButton.png diff --git a/BUILD/Help/img/MainDialog.png b/BUILD/Help/img/MainDialog.png Binary files differindex 5ac7aa5a..9f2f2566 100644 --- a/BUILD/Help/img/MainDialog.png +++ b/BUILD/Help/img/MainDialog.png diff --git a/BUILD/Help/img/RealtimeSync.png b/BUILD/Help/img/RealtimeSync.png Binary files differindex 59b4fa01..971baefd 100644 --- a/BUILD/Help/img/RealtimeSync.png +++ b/BUILD/Help/img/RealtimeSync.png diff --git a/BUILD/Help/img/SetupBatch.png b/BUILD/Help/img/SetupBatch.png Binary files differindex 01d1ecff..e1789917 100644 --- a/BUILD/Help/img/SetupBatch.png +++ b/BUILD/Help/img/SetupBatch.png diff --git a/BUILD/Help/img/SynchronizeButton.png b/BUILD/Help/img/SynchronizeButton.png Binary files differindex 084edcb7..0ab74cb8 100644 --- a/BUILD/Help/img/SynchronizeButton.png +++ b/BUILD/Help/img/SynchronizeButton.png diff --git a/BUILD/Help/img/WatchUsbInsert.png b/BUILD/Help/img/WatchUsbInsert.png Binary files differindex 35d0b45d..0e90278a 100644 --- a/BUILD/Help/img/WatchUsbInsert.png +++ b/BUILD/Help/img/WatchUsbInsert.png diff --git a/BUILD/Languages/arabic.lng b/BUILD/Languages/arabic.lng index c97b927d..9a59faea 100644 --- a/BUILD/Languages/arabic.lng +++ b/BUILD/Languages/arabic.lng @@ -2,176 +2,31 @@ <language>العربية</language> <translator>MEinea</translator> <locale>ar</locale> - <flag_image>flag_arabic.png</flag_image> - <plural_form_count>6</plural_form_count> + <image>flag_arabic.png</image> + <plural_count>6</plural_count> <plural_definition>n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5</plural_definition> </header> -<source>Unable to move %x to the recycle bin.</source> -<target></target> - <source> -<pluralform>Do you really want to move the following item to the recycle bin?</pluralform> -<pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> -</source> -<target> -</target> - -<source>Log</source> -<target></target> - -<source>&Continue</source> -<target></target> - -<source>&Don't show this warning again</source> -<target></target> - -<source>&Ignore subsequent errors</source> -<target></target> - -<source>Comma-separated values</source> -<target></target> - -<source>Never save &changes</source> -<target></target> - -<source>Include via filter:</source> -<target></target> - -<source>&Execute</source> -<target></target> - -<source>Confirm</source> -<target></target> - -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> </target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target></target> - -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target></target> - -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target></target> - -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target></target> - -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target></target> - -<source>Move files to a user-defined folder</source> -<target></target> - -<source>Back up deleted and overwritten files in the recycle bin</source> -<target></target> - -<source>Recycle bin</source> -<target></target> - -<source>Requires database files. Not supported by all file systems.</source> -<target></target> - -<source>Detect moved files</source> -<target></target> - -<source>&Don't show this dialog again</source> -<target></target> - -<source>Minimize to notification area</source> -<target></target> - -<source>Retrying operation after error:</source> -<target></target> - -<source>job name</source> +<source>&Check</source> <target></target> -<source>Creating a Volume Shadow Copy for %x...</source> -<target></target> - -<source>The following folders are significantly different. Make sure you are matching the correct folders for synchronization.</source> -<target></target> - -<source>&Show error</source> -<target></target> - -<source>Waiting until all directories are available...</source> -<target></target> - -<source>Directory monitoring active</source> -<target></target> - -<source>Volume name %x is not part of file path %y.</source> -<target></target> - -<source>Cannot access the Volume Shadow Copy Service.</source> -<target></target> - -<source>%x items</source> +<source>Retrying operation...</source> <target></target> <source> -<pluralform>1 byte</pluralform> -<pluralform>%x bytes</pluralform> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> </source> <target> </target> -<source>Any number of alternative directories for at most one config file.</source> -<target></target> - -<source>Any number of FreeFileSync .ffs_gui and/or .ffs_batch configuration files.</source> -<target></target> - -<source>directory</source> -<target></target> - -<source>config files</source> -<target></target> - -<source>Syntax:</source> -<target></target> - -<source>Directories cannot be set for more than one configuration file.</source> -<target></target> - -<source>The config file must not contain settings at directory pair level when directories are set via command line.</source> -<target></target> - -<source>Unequal number of left and right directories specified.</source> -<target></target> - -<source>Cannot open file %x.</source> -<target></target> - -<source>Syntax error</source> -<target></target> - -<source>A directory path is expected after %x.</source> -<target></target> - -<source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source> -<target></target> - -<source>Moving symbolic link %x to the recycle bin</source> -<target></target> - -<source>Moving folder %x to the recycle bin</source> -<target></target> - -<source>Moving file %x to the recycle bin</source> -<target></target> - <source>Both sides have changed since last synchronization.</source> <target>كلا الجانبين قد تغير منذ المزامنة الأخيرة.</target> @@ -190,6 +45,15 @@ Note: File paths must be relative to base directories. <source>Checking recycle bin availability for folder %x...</source> <target>التØقق من تواÙر سلة المØذوÙات من أجل المجلد %x...</target> +<source>Moving file %x to the recycle bin</source> +<target>نقل المل٠%x إلى سلة المهملات</target> + +<source>Moving folder %x to the recycle bin</source> +<target>نقل المجلد %x إلى سلة المهملات</target> + +<source>Moving symbolic link %x to the recycle bin</source> +<target>نقل الارتباط الرمزي %x إلى سلة المهملات</target> + <source>Deleting file %x</source> <target>Øذ٠المل٠%x</target> @@ -199,21 +63,51 @@ Note: File paths must be relative to base directories. <source>Deleting symbolic link %x</source> <target>Øذ٠الارتباط الرمزي %x</target> +<source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source> +<target>سلة المهملات غير متوÙرة للمجلدات التالية. سيتم Øذ٠الملÙات بشكل نهائي بدلاً عن ذلك:</target> + <source>An exception occurred</source> <target>Øدث استثناء</target> -<source>Error</source> -<target>خطأ</target> +<source>A directory path is expected after %x.</source> +<target>مسار متوقع بعد %x.</target> + +<source>Syntax error</source> +<target>خطأ ÙÙŠ البنية</target> + +<source>Cannot open file %x.</source> +<target>تعذر ÙØªØ Ø§Ù„Ù…Ù„Ù %x.</target> <source>File %x does not contain a valid configuration.</source> <target>لا ÙŠØتوي المل٠%x تكويناً صØÙŠØاً.</target> -<source>Warning</source> -<target>تØذير</target> +<source>Unequal number of left and right directories specified.</source> +<target>لم يتم تØديد عدد متساوي من المسارات على الطرÙين</target> + +<source>The config file must not contain settings at directory pair level when directories are set via command line.</source> +<target>يجب أن ÙŠØتوي مل٠الخيارات الخيارات على مستوى أزواج المسارات عند تØديد المسارات بواسطة سطر الأوامر</target> + +<source>Directories cannot be set for more than one configuration file.</source> +<target>لا يمكن اختيار المسارات لأكثر من مل٠خيارات واØد</target> <source>Command line</source> <target>سطر الأوامر</target> +<source>Syntax:</source> +<target>بنية:</target> + +<source>config files</source> +<target>ملÙات الخيارات</target> + +<source>directory</source> +<target>مسار</target> + +<source>Any number of FreeFileSync .ffs_gui and/or .ffs_batch configuration files.</source> +<target>أي عدد من ملÙات خيارات FreeFileSyn أو\Ùˆ _gui and/or .ffs_batch</target> + +<source>Any number of alternative directories for at most one config file.</source> +<target>أي عدد من المسارات البديلة لمل٠خيارات ÙˆØيد على الأكثر.</target> + <source>A folder input field is empty.</source> <target>Øقل إدخال خاص بمجلد Ùارغ.</target> @@ -374,6 +268,19 @@ Note: File paths must be relative to base directories. <source>Total time:</source> <target>مجموع الوقت:</target> +<source> +<pluralform>1 byte</pluralform> +<pluralform>%x bytes</pluralform> +</source> +<target> +<pluralform>0 byte</pluralform> +<pluralform>1 byte</pluralform> +<pluralform>2 bytes</pluralform> +<pluralform>%x bytes</pluralform> +<pluralform>%x bytes</pluralform> +<pluralform>%x bytes</pluralform> +</target> + <source>%x MB</source> <target>%x MB</target> @@ -411,6 +318,9 @@ Note: File paths must be relative to base directories. <source>/sec</source> <target>\ثانية</target> +<source>%x items/sec</source> +<target>%x عنصر\الثانية</target> + <source>Configuration file %x loaded partially only.</source> <target>تم تØميل مل٠التكوين %x بشكل٠جزئي Ùقط.</target> @@ -423,6 +333,9 @@ Note: File paths must be relative to base directories. <source>Browse directory</source> <target>تصÙØ Ø§Ù„Ù…Ø³Ø§Ø±</target> +<source>Cannot access the Volume Shadow Copy Service.</source> +<target>لا يمكن الوصول إلى خدمة النسخ الظلي الوسيط.</target> + <source>Please use FreeFileSync 64-bit version to create shadow copies on this system.</source> <target>الرجاء استخدام إصدار الـ 64-bit للبرنامج لإنشاء ملÙات الظل الاØتياطية على هذا النظام.</target> @@ -432,10 +345,13 @@ Note: File paths must be relative to base directories. <source>Cannot determine volume name for %x.</source> <target>تعذر تØديد اسم الوسط %x</target> -<source>Abort requested: Waiting for current operation to finish...</source> +<source>Volume name %x is not part of file path %y.</source> +<target>اسم الوسط %x ليس جزءا من مسار الملق %y.</target> + +<source>Stop requested: Waiting for current operation to finish...</source> <target>طلب Ø¥Øباط المهمة: ÙÙŠ انتظار انتهاء المهمة الØالية...</target> -<source>Failure to create timestamp for versioning:</source> +<source>Unable to create timestamp for versioning:</source> <target>Ùشل إنشاء طبعة زمنية من أجل عملية الوسم Øسب الإصدار:</target> <source>Cannot read the following XML elements:</source> @@ -453,8 +369,8 @@ Note: File paths must be relative to base directories. <source>&Program</source> <target>&البرنامج</target> -<source>&Content</source> -<target>&المØتوى</target> +<source>&View help</source> +<target>&إظهار المساعدة</target> <source>&About</source> <target>&Øول</target> @@ -477,8 +393,8 @@ Note: File paths must be relative to base directories. <source>To get started just import a .ffs_batch file.</source> <target>للبدء قم باستيراد مل٠.ffs_batch.</target> -<source>Folders to watch</source> -<target>المجلدات للمتابعة</target> +<source>Folders to watch:</source> +<target>المجلدات المراقبة</target> <source>Add folder</source> <target>إضاÙØ© مجلد</target> @@ -492,12 +408,15 @@ Note: File paths must be relative to base directories. <source>Select a folder</source> <target>تØديد مجلد</target> -<source>Idle time [seconds]</source> -<target>وقت الخمول [ثواني]</target> +<source>Idle time (in seconds):</source> +<target>وقت الخمول (بالثانية)</target> <source>Idle time between last detected change and execution of command</source> <target>وقت الخمول بين آخر تغيير تم الكش٠عنه وتنÙيذ الأوامر</target> +<source>Command line:</source> +<target>سطر الأوامر:</target> + <source> The command is triggered if: - files or subfolders change @@ -509,8 +428,8 @@ The command is triggered if: -ظهور مجلدات جديدة (مثال: إدخال USB stick) </target> -<source>Start</source> -<target>ابدأ</target> +<source>&Start</source> +<target>&ابدأ</target> <source>&Retry</source> <target>&إعادة المØاولة</target> @@ -518,26 +437,38 @@ The command is triggered if: <source>Cancel</source> <target>إلغاء الأمر</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>المزامنة اللØظية - المزمنة التلقائية</target> +<source>About</source> +<target>Øول</target> <source>Build: %x</source> <target>بناء: %x</target> -<source>About</source> -<target>Øول</target> - <source>All files</source> <target>جميع الملÙات</target> +<source>Automated Synchronization</source> +<target>مزامنة تلقائية</target> + +<source>Directory monitoring active</source> +<target>مراقبة المسارات Ùعالة</target> + +<source>Waiting until all directories are available...</source> +<target>انتظر Øتى توÙر جميع المسارات...</target> + +<source>Error</source> +<target>خطأ</target> + <source>&Restore</source> <target>&استعادة</target> +<source>&Show error</source> +<target>&إظهار الخطأ</target> + <source>&Exit</source> <target>&خروج</target> -<source>Invalid command line:</source> -<target>سطر الأوامر غير صالØ:</target> +<source>Incorrect command line:</source> +<target>سطر أوامر خاطئ:</target> <source>File content</source> <target>Ù…Øتوى الملÙ</target> @@ -599,8 +530,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>يجب أن لا يكون Øقل إدخال المجلد الهد٠Ùارغاً.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>يجب أن لا يكون Øقل إدخال المجلد من أجل الإصدارات Ùارغاً.</target> +<source>Please enter a target folder for versioning.</source> +<target>الرجاء تØديد مجلد هد٠من أجل الوسم Øسب الإصدار.</target> <source>Source folder %x not found.</source> <target>لم يتم العثور على المجلد المصدر %x.</target> @@ -608,6 +539,9 @@ The command is triggered if: <source>The following items have unresolved conflicts and will not be synchronized:</source> <target>العناصر التالية لم تØÙ„ اختلاÙاتها، Ùˆ لن يتم مزامنتها:</target> +<source>The following folders are significantly different. Make sure you are matching the correct folders for synchronization.</source> +<target>المجلدات التالية مختلÙØ© بشكل كبير. تأكد من تقابل المجلدات بشكل صØÙŠØ Ù…Ù† أجل المزامنة.</target> + <source>Not enough free disk space available in:</source> <target>المساØØ© الØرة المتوÙرة على القرص غير كاÙية:</target> @@ -626,11 +560,17 @@ The command is triggered if: <source>Generating database...</source> <target>إنشاء قاعدة بيانات...</target> +<source>Creating a Volume Shadow Copy for %x...</source> +<target>جاري إنشاء نسخة ظل وسيطة لـ %x...</target> + <source>Data verification error: %x and %y have different content.</source> <target>خطأ ÙÙŠ التØقق من البيانات: ÙŠØتوي %x Ùˆ %y بيانات مختلÙØ©.</target> -<source>Synchronization aborted</source> -<target>تم Ø¥Øباط المزامنة</target> +<source>job name</source> +<target>اسم المهمة</target> + +<source>Synchronization stopped</source> +<target>توقÙت عملية المزامنة</target> <source>Synchronization completed with errors</source> <target>انتهاء عملية المزامنة مع وجود أخطء</target> @@ -647,11 +587,29 @@ The command is triggered if: <source>Saving log file %x...</source> <target>ØÙظ مل٠السجل %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>اضغط على "تبديل" Ù„ØÙ„ المشاكل ÙÙŠ ناÙذة الØوار الرئيسي البرنامج.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>بإمكانك العودة إلى ناÙذة FreeFileSync الرئيسية Ù„ØÙ„ هذه المشكلة.</target> -<source>Switching to FreeFileSync main dialog</source> -<target>الانتقال إلى ناÙذة Øوار FreeFileSync الأساسية</target> +<source>&Don't show this warning again</source> +<target>&لا تظهر هذا التنبيه مرة ثانية</target> + +<source>&Ignore</source> +<target>&تجاهل</target> + +<source>&Switch</source> +<target>&تبديل</target> + +<source>Switching to FreeFileSync's main window</source> +<target>العودة إلى ناÙذة FreeFileSync الرئيسية</target> + +<source>Serious Error</source> +<target>خطأ ÙادØ</target> + +<source>&Ignore subsequent errors</source> +<target>&تجاهلا الأخطاء المماثلة</target> + +<source>Check for Program Updates</source> +<target>تÙقد وجود تØديثات للبرنامج</target> <source>A new version of FreeFileSync is available:</source> <target>يتوÙر إصدار جديد من FreeFileSync:</target> @@ -659,18 +617,12 @@ The command is triggered if: <source>Download now?</source> <target>تنزيل الآن؟</target> -<source>New version found</source> -<target>تم العثور على نسخة Ø£Øدث</target> - <source>&Download</source> <target>&تنزيل</target> <source>FreeFileSync is up to date.</source> <target>البرنامج هو الأØدث Øتى الآن.</target> -<source>Information</source> -<target>معلومات</target> - <source>Unable to connect to sourceforge.net.</source> <target>تعذر الاتصال بـ sourceforge.net.</target> @@ -728,26 +680,26 @@ The command is triggered if: <source>Hibernate</source> <target>السبات</target> -<source>Selected variant:</source> -<target>المتغير المختار:</target> +<source>Alternate comparison settings</source> +<target>خيارات المÙارنة البديلة</target> -<source>Select alternate comparison settings</source> -<target>تØديد إعدادات المقارنة البديلة</target> +<source>Alternate synchronization settings</source> +<target>خيارات المزامنة البديلة</target> -<source>Select alternate synchronization settings</source> -<target>تØديد إعدادات المزامنة البديلة</target> +<source>Local filter</source> +<target>Ùلتر Ù…Øلي</target> -<source>Filter is active</source> -<target>عامل التصÙية نشط</target> +<source>Active</source> +<target>Ù…Ùعل</target> -<source>No filter selected</source> -<target>لا يوجد عامل تصÙية مختار</target> +<source>None</source> +<target>لا شيء</target> <source>Remove alternate settings</source> <target>إزالة الإعدادات البديلة</target> <source>Clear filter settings</source> -<target>Ù…Ø³Ø Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª عامل التصÙية</target> +<target>Ù…Ø³Ø Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª عامل الÙلترة</target> <source>Copy</source> <target>نسخ</target> @@ -755,6 +707,15 @@ The command is triggered if: <source>Paste</source> <target>لصق</target> +<source>Alternate Comparison Settings</source> +<target>خيارات المÙارنة البديلة</target> + +<source>Alternate Synchronization Settings</source> +<target>خيارات المزامنة البديلة</target> + +<source>Local Filter</source> +<target>Ùلتر Ù…Øلي</target> + <source>&New</source> <target>&جديد</target> @@ -770,15 +731,18 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. &مزامنة</target> +<source>&Global settings</source> +<target>&الإعدادات العامة</target> + <source>&Language</source> <target>&اللغة</target> +<source>&Find...</source> +<target>&بØØ«...</target> + <source>&Export file list...</source> <target>&تصدير قائمة الملÙات...</target> -<source>&Global settings</source> -<target>&الإعدادات العامة</target> - <source>&Tools</source> <target>&أدوات</target> @@ -788,18 +752,12 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>تØقق &أوتوماتيكياً بشكل أسبوعي</target> -<source>Check for new &version</source> -<target>التØقق من وجود &إصدار جديد</target> +<source>&Check for new version</source> +<target>&التØقق من وجود نسخة جديدة</target> <source>Compare</source> <target>قارن</target> -<source>Comparison settings</source> -<target>إعدادات المقارنة</target> - -<source>Synchronization settings</source> -<target>إعدادات المزامنة</target> - <source>Synchronize</source> <target>مزامنة</target> @@ -812,6 +770,15 @@ The command is triggered if: <source>Swap sides</source> <target>مبادلة الجانبين</target> +<source>Close search bar</source> +<target>إغلاق شريط البØØ«</target> + +<source>Find:</source> +<target>بØØ«</target> + +<source>Match case</source> +<target>مطابقة Øالة الأØر٠(Match case)</target> + <source>Save as batch job</source> <target>ØÙظ كمهمة دÙعية</target> @@ -819,7 +786,7 @@ The command is triggered if: <target>إخÙاء العناصر المستبعدة</target> <source>Show filtered or temporarily excluded files</source> -<target>إظهار الملÙات التي تم تصÙيتها أو استبعادها بشكل مؤقت</target> +<target>إظهار الملÙات التي تم Ùلترتها أو استبعادها بشكل مؤقت</target> <source>Number of files and folders that will be created</source> <target>عدد الملÙات Ùˆ المجلدات التي سيتم إنشاؤها</target> @@ -833,86 +800,71 @@ The command is triggered if: <source>Total bytes to copy</source> <target>إجمالي عدد الـ bytes التي سيتم نسخها</target> -<source>Items found:</source> -<target>العناصر التي تم العثور عليها:</target> +<source>Select a variant:</source> +<target>اختيار بديل:</target> -<source>Speed:</source> -<target>السرعة:</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>التعر٠على الملÙات المتساوية عن طريق مقارنة التاريخ Ùˆ الØجم</target> -<source>Time remaining:</source> -<target>الوقت المتبقي:</target> +<source>Identify equal files by comparing the file content.</source> +<target>التعر٠على الملÙات المتساوية عن طريق مقارنة Ù…Øتوى الملÙ</target> -<source>Time elapsed:</source> -<target>الوقت المنقضي:</target> +<source>Symbolic links:</source> +<target>ارتباطات رمزية:</target> -<source>Synchronizing...</source> -<target>مزامنة...</target> +<source>More information</source> +<target>المزيد من المعلومات</target> -<source>On completion</source> -<target>عند الانتهاء</target> +<source>OK</source> +<target>مواÙÙ‚</target> -<source>Close</source> -<target>إغلاق</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>تØديد التغيرات Ùˆ مواكبتها على الجانبين. عمليات الØØ°Ù, النقل Ùˆ المشاكل المكتشÙØ© بواسطة قواعد البيانات</target> -<source>&Pause</source> -<target>&إيقا٠مؤقت</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>إنشاء نسخة نظيرة للمجلد على اليسار بØيث يطابق المجلد على اليمين بعد المزامنة</target> -<source>Variant</source> -<target>المتغير</target> +<source>Copy new and updated files to the right folder.</source> +<target>نسخ الملÙات المØدثة إلى المجلد المناسب</target> -<source>Statistics</source> -<target>Ø¥Øصائيات</target> +<source>Configure your own synchronization rules.</source> +<target>تØديد قواعد المزامنة الخاصة بك.</target> -<source>Select a variant</source> -<target>اختيار بديل</target> +<source>Detect moved files</source> +<target>اكتشا٠الملÙات المنقولة</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -يتم تعري٠الملÙات على أنها متماثلة إذا كان - -آخر وقت Ùˆ تاريخ كتابة - -Øجم المل٠-متطابقين -</target> +<source>Requires database files. Not supported by all file systems.</source> +<target>يتطلب ملÙات قواعد بيانات. غير مدعوم من قبل جميع أنظمة الملÙات.</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target> -يتم تعري٠الملÙات على أنها متماثلة إذا كان - -Ù…Øتوى المل٠-متطابقين -</target> +<source>Delete files:</source> +<target>Øذ٠الملÙات:</target> -<source>Symbolic Link handling</source> -<target>التعامل مع الارتباط رمزي</target> +<source>Permanent</source> +<target>الدائم</target> -<source>Help</source> -<target>تعليمات</target> +<source>Delete or overwrite files permanently</source> +<target>Øذ٠أو الكتابة Ùوق الملÙات بشكل دائم</target> -<source>OK</source> -<target>مواÙÙ‚</target> +<source>Recycle bin</source> +<target>سلة المهملات</target> -<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> -<target>تØديد التغيرات Ùˆ مواكبتها على الجانبين. عمليات الØØ°Ù, النقل Ùˆ المشاكل المكتشÙØ© بواسطة قواعد البيانات</target> +<source>Back up deleted and overwritten files in the recycle bin</source> +<target>نسخ اØتياطي للملÙات المØذوÙØ© Ùˆ المستبدلة ÙÙŠ سلة المهملات</target> + +<source>Versioning</source> +<target>الوسم برقم الإصدار</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>إنشاء نسخة منعكسة عن المجلد الأيمن. يتم تعديل المجلد الأيسر ليطابق المجلد الأيمن.</target> +<source>Move files to a user-defined folder</source> +<target>نقل الملÙات إلى المجلد المØدد من قبل المستخدم</target> -<source>Copy new or updated files to right folder.</source> -<target>نسخ الملÙات الجديدة أو المØدثة إلى المجلد الأيمن.</target> +<source>Naming convention:</source> +<target>Ø§ØµØ·Ù„Ø§Ø Ø§Ù„ØªØ³Ù…ÙŠØ©:</target> -<source>Configure your own synchronization rules.</source> -<target>تØديد قواعد المزامنة الخاصة بك.</target> +<source>Show examples</source> +<target>إظهار أمثلة</target> -<source>Error handling</source> -<target>معالجة الأخطاء</target> +<source>Handle errors:</source> +<target>التعامل مع الأخطاء:</target> <source>Ignore</source> <target>تجاهل</target> @@ -926,68 +878,71 @@ is the same <source>Show pop-up on errors or warnings</source> <target>إظهار إطارات منبثقة عند Øصول أخطاء أو تØذيرات</target> -<source>Deletion handling</source> -<target>التعامل مع الØØ°Ù</target> +<source>On completion:</source> +<target>عند الانتهاء:</target> -<source>Permanent</source> -<target>الدائم</target> +<source>Start synchronization now?</source> +<target>بدأ المزامنة الآن؟</target> -<source>Delete or overwrite files permanently</source> -<target>Øذ٠أو الكتابة Ùوق الملÙات بشكل دائم</target> +<source>Variant:</source> +<target>بديل</target> -<source>Versioning</source> -<target>الوسم برقم الإصدار</target> +<source>Statistics</source> +<target>Ø¥Øصائيات</target> -<source>Naming convention:</source> -<target>Ø§ØµØ·Ù„Ø§Ø Ø§Ù„ØªØ³Ù…ÙŠØ©:</target> +<source>&Don't show this dialog again</source> +<target>&لا تظهر ناÙذة الØوار هذه مرة ثانية</target> -<source>Batch job</source> -<target>مهمة دÙعية</target> +<source>Items found:</source> +<target>العناصر التي تم العثور عليها:</target> -<source>Exit</source> -<target>خروج</target> +<source>Speed:</source> +<target>السرعة:</target> -<source>Abort synchronization on first error</source> -<target>Ø¥Øباط المزامنة عند أول خطأ</target> +<source>Time remaining:</source> +<target>الوقت المتبقي:</target> -<source>Show progress dialog</source> -<target>إظهار ناÙذة Øوار تقدم العملية</target> +<source>Time elapsed:</source> +<target>الوقت المنقضي:</target> -<source>Save log</source> -<target>ØÙظ سجل</target> +<source>Synchronizing...</source> +<target>مزامنة...</target> -<source>Select folder to save log files</source> -<target>Øدد مجلداً Ù„ØÙظ ملÙات السجل</target> +<source>Minimize to notification area</source> +<target>تصغير إلى منطقة التنبيهات</target> -<source>Limit</source> -<target>الØد الأقصى</target> +<source>Close</source> +<target>إغلاق</target> -<source>Limit maximum number of log files</source> -<target>تقييد الØد الأقصى لعدد ملÙات السجل</target> +<source>&Pause</source> +<target>&إيقا٠مؤقت</target> -<source>Source code written in C++ using:</source> -<target>الرماز المصدري مكتوب بلغة C++ باستخدام:</target> +<source>Stop</source> +<target>توقÙ</target> -<source>If you like FreeFileSync</source> -<target>إذا أعجبك FreeFileSync</target> +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>إنشاء مل٠دÙعي من أجل عمليات المزامنة غير المØضورة. للبدأ, انقر نقراً مزدوجاً على المل٠أو المهمة المجدولة ÙÙŠ منظم المهام: %x</target> -<source>Donate with PayPal</source> -<target>تبرع باستخدام PayPal</target> +<source>Stop synchronization at first error</source> +<target>إيقا٠المزامنة عند أول خطأ</target> -<source>Many thanks for localization:</source> -<target>شكرا جزيلا للترجمة:</target> +<source>Show progress dialog</source> +<target>إظهار ناÙذة Øوار تقدم العملية</target> -<source>Feedback and suggestions are welcome</source> -<target>التعليقات Ùˆ الاقتراØات موضع ترØيب</target> +<source>Save log:</source> +<target>ØÙظ السجل</target> -<source>Homepage</source> -<target>الصÙØØ© الرئيسية</target> +<source>Limit:</source> +<target>Øدود</target> -<source>Email</source> -<target>البريد الإلكتروني</target> +<source>Limit maximum number of log files</source> +<target>تقييد الØد الأقصى لعدد ملÙات السجل</target> -<source>Published under the GNU General Public License</source> -<target>نشر تØت رخصة GNU General Public License</target> +<source>How can I schedule a batch job?</source> +<target>كي٠يمكنني جدولة مهمة دÙعية؟</target> + +<source>&Recycle bin</source> +<target>&سلة المهملات</target> <source>Delete on both sides</source> <target>Øذ٠على كلا الجانبين</target> @@ -995,92 +950,140 @@ is the same <source>Delete on both sides even if the file is selected on one side only</source> <target>Øذ٠المل٠ÙÙŠ كلا الجانبين Øتى إذا كان المل٠مØدداً على جانب واØد Ùقط</target> -<source>Include</source> -<target>شمول</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>اختيار قوانين Ùلترة لاستثناء ملÙات معينة من المزامنة. أدخل مسارات الملÙات منسوبة إلى زوج المجلدات المقابل.</target> -<source>Exclude</source> -<target>استبعاد</target> +<source>Include:</source> +<target>إدخال:</target> + +<source>Exclude:</source> +<target>استثناء:</target> -<source>Time span</source> -<target>المجال الزمني</target> +<source>Time span:</source> +<target>المجال الزمني:</target> -<source>File size</source> -<target>Øجم الملÙ</target> +<source>File size:</source> +<target>Øجم الملÙ:</target> -<source>Minimum</source> -<target>الØد الأدنى</target> +<source>Minimum:</source> +<target>أصغري</target> -<source>Maximum</source> -<target>الØد الأقصى</target> +<source>Maximum:</source> +<target>أعظمي</target> <source>&Clear</source> <target>&إزالة</target> -<source>Global settings</source> -<target>الإعدادات العامة</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>هذه الإعدادات مستخدمة لجميع مهمات المزامنة</target> <source>Fail-safe file copy</source> <target>نسخ ملÙات آمن من الÙشل</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +قم بالنسخ إلى مل٠مؤقت (*.ffs_tmp) قبل استبدال المل٠الهدÙ. +هذه العملية تضمن Øالة مستقرة Øتى ÙÙŠ Øال Øدوث خطأ ÙادØ. +</target> + +<source>(recommended)</source> +<target>(موصى به)</target> + <source>Copy locked files</source> <target>نسخ الملÙات المقÙلة</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>نسخ الملÙات المشتركة مع مستخدمين آخرين أو المقÙولة باستخدام خدمة نسخ الظل الوسيط</target> + +<source>(requires administrator rights)</source> +<target>(بØاجة امتيازات المدير)</target> + <source>Copy file access permissions</source> <target>نسخ أذونات الوصول إلى الملÙ</target> -<source>Restore hidden dialogs</source> -<target>استعادة نواÙØ° الØوار المخÙية</target> +<source>Transfer file and folder permissions.</source> +<target>نقل أذونات الملÙات Ùˆ المجلدات.</target> + +<source>Automatic retry on error:</source> +<target>إعادة المØاولة بشكل تلقائي عند Øصول خطأ:</target> -<source>External applications</source> -<target>تطبيقات خارجية</target> +<source>Retry count:</source> +<target>تعداد Ù…Øاولات الإعادة:</target> + +<source>Delay (in seconds):</source> +<target>التأخير (بالثواني):</target> + +<source>Customize context menu:</source> +<target>تخصيص القائمة المØلية</target> <source>Description</source> <target>الوصÙ</target> +<source>Restore hidden windows</source> +<target>استعادة نواÙØ° الØوار المخÙية</target> + <source>&Default</source> <target>&الاÙتراضي</target> -<source>Find what:</source> -<target>بØØ« عن:</target> +<source>Source code written in C++ using:</source> +<target>الرماز المصدري مكتوب بلغة C++ باستخدام:</target> -<source>Match case</source> -<target>مطابقة Øالة الأØر٠(Match case)</target> +<source>If you like FreeFileSync</source> +<target>إذا أعجبك FreeFileSync</target> -<source>&Find next</source> -<target>&بØØ« عن التالي</target> +<source>Donate with PayPal</source> +<target>تبرع باستخدام PayPal</target> -<source>Start synchronization</source> -<target>بدء المزامنة</target> +<source>Feedback and suggestions are welcome</source> +<target>التعليقات Ùˆ الاقتراØات موضع ترØيب</target> -<source>Delete</source> -<target>ØØ°Ù</target> +<source>Homepage</source> +<target>الصÙØØ© الرئيسية</target> -<source>Configure filter</source> -<target>ضبط عامل التصÙية</target> +<source>Email</source> +<target>البريد الإلكتروني</target> -<source>Find</source> -<target>بØØ«</target> +<source>Published under the GNU General Public License</source> +<target>نشر تØت رخصة GNU General Public License</target> + +<source>Many thanks for localization:</source> +<target>شكرا جزيلا للترجمة:</target> + +<source>Save as Batch Job</source> +<target>ØÙظ كمهمة دÙعية</target> + +<source>Delete Items</source> +<target>Øذ٠العناصر</target> + +<source>Global Settings</source> +<target>الخيارات العامة</target> -<source>Select time span</source> -<target>Øدد المجال الزمني</target> +<source>Select Time Span</source> +<target>اختيار المطال الزمني</target> -<source>Folder pairs</source> +<source>Folder Pairs</source> <target>أزواج المجلدات</target> +<source>Find</source> +<target>بØØ«</target> + <source>Overview</source> <target>نظرة عامة</target> <source>Configuration</source> <target>التكوين</target> -<source>Main bar</source> +<source>Main Bar</source> <target>الشريط الرئيسي</target> -<source>Filter files</source> -<target>تصÙية الملÙات</target> +<source>Filter Files</source> +<target>Ùلترة الملÙات</target> -<source>Select view</source> -<target>Øدد طريقة العرض</target> +<source>Select View</source> +<target>اخيار طريقة العرض</target> <source>Open...</source> <target>ÙتØ...</target> @@ -1091,6 +1094,21 @@ is the same <source>Compare both sides</source> <target>مقارنة بين كلا الجانبين</target> +<source>Comparison settings</source> +<target>إعدادات المقارنة</target> + +<source>Synchronization settings</source> +<target>إعدادات المزامنة</target> + +<source>Start synchronization</source> +<target>بدء المزامنة</target> + +<source>Confirm</source> +<target>تأكيد</target> + +<source>&Execute</source> +<target>&تنÙيذ</target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1133,17 +1151,23 @@ is the same <source>Set direction:</source> <target>تØديد الاتجاه:</target> +<source>multiple selection</source> +<target>تØديد متعدد</target> + +<source>Include via filter:</source> +<target>تضمن عن طريق Ùلتر</target> + +<source>Exclude via filter:</source> +<target>استبعاد باستخدام عامل الÙلترة:</target> + <source>Exclude temporarily</source> <target>استبعاد مؤقتاً</target> <source>Include temporarily</source> <target>شمول مؤقتاً</target> -<source>multiple selection</source> -<target>تØديد متعدد</target> - -<source>Exclude via filter:</source> -<target>استبعاد باستخدام عامل التصÙية:</target> +<source>Delete</source> +<target>ØØ°Ù</target> <source>Include all</source> <target>شمول الكل</target> @@ -1187,9 +1211,15 @@ is the same <source>Do you want to save changes to %x?</source> <target>هل تريد ØÙظ التغييرات إلى %xØŸ</target> +<source>Never save &changes</source> +<target>لا تقم بØÙظ &التغيرات</target> + <source>Do&n't save</source> <target>&لا تØÙظ</target> +<source>Filter</source> +<target>عامل الÙلترة</target> + <source>Show files that exist on left side only</source> <target>إظهار الملÙات الموجودة ÙÙŠ الجانب الأيمن Ùقط</target> @@ -1235,35 +1265,26 @@ is the same <source>Set as default</source> <target>تØديد كوضع اÙتراضي</target> -<source>Operation aborted</source> -<target>تم Ø¥Øباط العملية</target> - <source>All folders are in sync</source> <target>جميع المجلدات متزامنة</target> -<source>File list exported</source> -<target>تم تصدير قائمة الملÙات</target> - -<source>Searching for program updates...</source> -<target>جاري البØØ« عن تØديثات للبرنامج...</target> +<source>Synchronization Settings</source> +<target>خيارات المزامنة</target> -<source>&Ignore</source> -<target>&تجاهل</target> - -<source>Fatal Error</source> -<target>خطأ ÙادØ</target> +<source>Comparison Settings</source> +<target>خيارات المقارنة</target> -<source>&Switch</source> -<target>&تبديل</target> +<source>Cannot find %x</source> +<target>لا يمكن العثور على %x</target> -<source>Question</source> -<target>سؤال</target> +<source>Comma-separated values</source> +<target>قيم Ù…Ùصولة بواسطة Ùواصل</target> -<source>&Yes</source> -<target>&نعم</target> +<source>File list exported</source> +<target>تم تصدير قائمة الملÙات</target> -<source>&No</source> -<target>&لا</target> +<source>Searching for program updates...</source> +<target>جاري البØØ« عن تØديثات للبرنامج...</target> <source>Scanning...</source> <target>جاري الÙØص...</target> @@ -1274,23 +1295,26 @@ is the same <source>Info</source> <target>معلومات</target> +<source>Warning</source> +<target>تØذير</target> + <source>Paused</source> <target>تم الإيقا٠مؤقتاً</target> <source>Initializing...</source> <target>التجهيز للبدأ...</target> -<source>Aborted</source> -<target>تم الإØباط</target> +<source>Stopped</source> +<target>توقÙ</target> <source>Completed</source> <target>تم الإنتهاء</target> -<source>Cannot find %x</source> -<target>لا يمكن العثور على %x</target> +<source>&Continue</source> +<target>&متابعة</target> -<source>Inactive</source> -<target>خامل</target> +<source>Log</source> +<target>السجل</target> <source>Today</source> <target>اليوم</target> @@ -1316,8 +1340,21 @@ is the same <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>عامل التصÙية</target> +<source> +<pluralform>Do you really want to move the following item to the recycle bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> +</source> +<target> +<pluralform>هل تريد Øقاً نقل 0 مل٠إلى سلة المهملات ØŸ</pluralform> +<pluralform>هل تريد Øقاً نقل هذا المل٠الوØيد 1 إلى سلة المهملات ØŸ</pluralform> +<pluralform>هل تريد Øقاً نقل هذين الملÙبن 2 إلى سلة المهملات ØŸ</pluralform> +<pluralform>هل تريد Øقاً نقل %x ملÙات إلى سلة المهملات ØŸ</pluralform> +<pluralform>هل تريد Øقاً نقل %x ملÙاً إلى سلة المهملات ØŸ</pluralform> +<pluralform>هل تريد Øقاً نقل %x مل٠إلى سلة المهملات ØŸ</pluralform> +</target> + +<source>Move</source> +<target>نقل</target> <source> <pluralform>Do you really want to delete the following item?</pluralform> @@ -1332,6 +1369,9 @@ is the same <pluralform>هل تريد Øقاً Øذ٠الـ %x مل٠التالية ØŸ</pluralform> </target> +<source>Exclude</source> +<target>استبعاد</target> + <source>Direct</source> <target>مباشر</target> @@ -1356,8 +1396,8 @@ is the same <source>- Other side's counterpart to %item_folder%</source> <target>- االنظير للجانب الآخر لـ %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>جعل التØذيرات Ùˆ نواÙØ° الØوارات المخÙية مرئية من جديد؟</target> +<source>Restore all hidden windows and warnings?</source> +<target>استعادة جميع نواÙØ° الØوار Ùˆ التØذيرات المخÙية؟</target> <source>Leave as unresolved conflict</source> <target>ترك كاختلاÙات من دون ØÙ„</target> @@ -1494,18 +1534,21 @@ is the same <pluralform>%x يوم</pluralform> </target> -<source>Failed to register to receive system messages.</source> +<source>Unable to register to receive system messages.</source> <target>تعذر التسجيل لاستقبال رسائل النظام.</target> <source>Cannot set privilege %x.</source> <target>لا يمكن تعيين امتيازات %x.</target> -<source>Failed to suspend system sleep mode.</source> +<source>Unable to suspend system sleep mode.</source> <target>تعذر تعليق وضع النوم للنظام.</target> <source>Cannot change process I/O priorities.</source> <target>تعذر تغيير أولويات I/O للعملية</target> +<source>Unable to move %x to the recycle bin.</source> +<target>تعذر نقل %x إلى سلة المهملات.</target> + <source>Cannot determine final path for %x.</source> <target>تعذر تØديد المسار النهائي لـ %x.</target> diff --git a/BUILD/Languages/chinese_simple.lng b/BUILD/Languages/chinese_simple.lng index 98c55320..8b5a89d6 100644 --- a/BUILD/Languages/chinese_simple.lng +++ b/BUILD/Languages/chinese_simple.lng @@ -2,11 +2,31 @@ <language>简体ä¸æ–‡</language> <translator>CyberCowBoy</translator> <locale>zh_CN</locale> - <flag_image>flag_china.png</flag_image> - <plural_form_count>1</plural_form_count> + <image>flag_china.png</image> + <plural_count>1</plural_count> <plural_definition>0</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>在最åŽçš„åŒæ¥ä¹‹åŽä¸¤è¾¹å‡å·²æ”¹å˜.</target> @@ -58,9 +78,6 @@ <source>Cannot open file %x.</source> <target>æ— æ³•æ‰“å¼€æ–‡ä»¶ %x.</target> -<source>Error</source> -<target>错误</target> - <source>File %x does not contain a valid configuration.</source> <target>文件 %x 并未包å«åˆæ³•çš„é…ç½®.</target> @@ -70,12 +87,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>当目录通过命令行设定时é…置文件必须ä¸åŒ…å«ç›®å½•å¯¹çº§åˆ«çš„设置.</target> -<source>Warning</source> -<target>è¦å‘Š</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>æ— æ³•ä¸ºå¤šäºŽä¸€ä¸ªé…置文件设置目录.</target> +<source>Command line</source> +<target>命令行</target> + <source>Syntax:</source> <target>è¯æ³•:</target> @@ -91,9 +108,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>ä»»æ„æ•°é‡çš„替代目录ä¸è‡³å¤šæœ‰ä¸€ä¸ªé…置文件.</target> -<source>Command line</source> -<target>命令行</target> - <source>A folder input field is empty.</source> <target>有一个文件夹输入框为空.</target> @@ -289,8 +303,8 @@ <source>/sec</source> <target>/秒</target> -<source>%x items</source> -<target>%x 个项目</target> +<source>%x items/sec</source> +<target>%x 个项目/秒</target> <source>Configuration file %x loaded partially only.</source> <target>é…置文件 %x åªæ˜¯éƒ¨åˆ†è½½å…¥.</target> @@ -319,11 +333,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>å·å %x ä¸æ˜¯æ–‡ä»¶è·¯å¾„ %y 的一部分.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>请求ä¸æ¢: æ£åœ¨ç‰å¾…当å‰æ“作完æˆ...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>åœæ¢è¦æ±‚: ç‰å¾…当å‰æ“作完æˆ...</target> -<source>Failure to create timestamp for versioning:</source> -<target>未能为历å²ç‰ˆæœ¬åˆ›å»ºæ—¶é—´æ ‡è®°</target> +<source>Unable to create timestamp for versioning:</source> +<target>æ— æ³•ä¸ºåŽ†å²ç‰ˆæœ¬åˆ›å»ºæ—¶é—´æˆ³:</target> <source>Cannot read the following XML elements:</source> <target>æ— æ³•è¯»å–如下XMLå…ƒç´ :</target> @@ -340,8 +354,8 @@ <source>&Program</source> <target>程åº(&P)</target> -<source>&Content</source> -<target>内容(&C)</target> +<source>&View help</source> +<target>查看帮助(&V)</target> <source>&About</source> <target>关于(&A)</target> @@ -364,8 +378,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>è¦å¼€å§‹åªéœ€å¯¼å…¥ä¸€ä¸ª .ffs_batch文件.</target> -<source>Folders to watch</source> -<target>è¦ç›‘视的文件夹</target> +<source>Folders to watch:</source> +<target>è¦ç›‘视的文件夹:</target> <source>Add folder</source> <target>æ·»åŠ æ–‡ä»¶å¤¹</target> @@ -379,12 +393,15 @@ <source>Select a folder</source> <target>选择一个文件夹</target> -<source>Idle time [seconds]</source> -<target>空闲时间[秒]</target> +<source>Idle time (in seconds):</source> +<target>空闲时间(秒):</target> <source>Idle time between last detected change and execution of command</source> <target>最åŽæ£€æµ‹åˆ°æ”¹å˜å’Œå‘½ä»¤æ‰§è¡Œä¹‹é—´çš„空闲时间</target> +<source>Command line:</source> +<target>命令行:</target> + <source> The command is triggered if: - files or subfolders change @@ -396,33 +413,30 @@ The command is triggered if: - 新文件夹到达(例如U盘æ’å…¥) </target> -<source>Start</source> -<target>开始</target> - -<source>&Retry</source> -<target>é‡è¯•(&R)</target> - -<source>Cancel</source> -<target>å–消</target> +<source>&Start</source> +<target>开始(&S)</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>实时åŒæ¥ - 自动åŒæ¥</target> +<source>About</source> +<target>关于</target> <source>Build: %x</source> <target>Build: %x</target> -<source>About</source> -<target>关于</target> - <source>All files</source> <target>所有文件</target> +<source>Automated Synchronization</source> +<target>自动åŒæ¥</target> + <source>Directory monitoring active</source> <target>目录监视激活</target> <source>Waiting until all directories are available...</source> <target>æ£åœ¨ç‰å¾…直到所有目录都å¯ç”¨...</target> +<source>Error</source> +<target>错误</target> + <source>&Restore</source> <target>æ¢å¤(&R)</target> @@ -432,8 +446,11 @@ The command is triggered if: <source>&Exit</source> <target>退出(&E)</target> -<source>Invalid command line:</source> -<target>æ— æ•ˆçš„å‘½ä»¤è¡Œ:</target> +<source>Incorrect command line:</source> +<target>ä¸æ£ç¡®çš„命令行:</target> + +<source>&Retry</source> +<target>é‡è¯•(&R)</target> <source>File content</source> <target>文件内容</target> @@ -495,8 +512,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>ç›®æ ‡æ–‡ä»¶å¤¹è¾“å…¥æ¡†å¿…é¡»ä¸ä¸ºç©º.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>用于å˜æ”¾åŽ†å²ç‰ˆæœ¬çš„文件夹输入框必须ä¸ä¸ºç©º.</target> +<source>Please enter a target folder for versioning.</source> +<target>请输入一个用于ä¿å˜åŽ†å²ç‰ˆæœ¬çš„ç›®æ ‡æ–‡ä»¶å¤¹.</target> <source>Source folder %x not found.</source> <target>æ— æ³•æ‰¾åˆ°æºæ–‡ä»¶å¤¹ %x.</target> @@ -534,8 +551,8 @@ The command is triggered if: <source>job name</source> <target>作业å称</target> -<source>Synchronization aborted</source> -<target>åŒæ¥å·²è¢«ä¸æ¢</target> +<source>Synchronization stopped</source> +<target>åŒæ¥å·²åœæ¢</target> <source>Synchronization completed with errors</source> <target>åŒæ¥å·²å®Œæˆä½†æœ‰é”™è¯¯</target> @@ -552,14 +569,29 @@ The command is triggered if: <source>Saving log file %x...</source> <target>æ£åœ¨ä¿å˜æ—¥å¿—文件 %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>请按下"切æ¢"æ¥è§£å†³ FreeFileSync主对è¯æ¡†ä¸Šçš„问题.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>ä½ å¯ä»¥åˆ‡æ¢è‡³ FreeFileSync 的主窗å£æ¥è§£å†³è¿™ä¸ªé—®é¢˜.</target> + +<source>&Don't show this warning again</source> +<target>ä¸å†æ˜¾ç¤ºè¿™ä¸ªè¦å‘Š(&D)</target> + +<source>&Ignore</source> +<target>忽略(&I)</target> + +<source>&Switch</source> +<target>切æ¢(&S)</target> + +<source>Switching to FreeFileSync's main window</source> +<target>切æ¢è‡³ FreeFileSync 的主窗å£</target> + +<source>&Ignore subsequent errors</source> +<target>忽略åŽç»çš„错误(&I)</target> -<source>Switching to FreeFileSync main dialog</source> -<target>æ£åœ¨åˆ‡æ¢åˆ° FreeFileSync 主对è¯æ¡†</target> +<source>Serious Error</source> +<target>严é‡é”™è¯¯</target> -<source>Retrying operation after error:</source> -<target>å‘生错误åŽé‡è¯•æ“作:</target> +<source>Check for Program Updates</source> +<target>检查程åºçš„æ›´æ–°</target> <source>A new version of FreeFileSync is available:</source> <target>å·²ç»æœ‰æ–°ç‰ˆæœ¬çš„FreeFileSyncå¯ç”¨:</target> @@ -567,18 +599,12 @@ The command is triggered if: <source>Download now?</source> <target>ç«‹å³ä¸‹è½½?</target> -<source>New version found</source> -<target>找到新版本</target> - <source>&Download</source> <target>下载(&D)</target> <source>FreeFileSync is up to date.</source> <target>FreeFileSync 已是最新.</target> -<source>Information</source> -<target>ä¿¡æ¯</target> - <source>Unable to connect to sourceforge.net.</source> <target>æ— æ³•é“¾æŽ¥åˆ° Sourceforge.net.</target> @@ -636,20 +662,20 @@ The command is triggered if: <source>Hibernate</source> <target>ä¼‘çœ </target> -<source>Selected variant:</source> -<target>选定的å˜åŒ–:</target> +<source>Alternate comparison settings</source> +<target>备用比较设置</target> -<source>Select alternate comparison settings</source> -<target>选择替æ¢çš„比较设置</target> +<source>Alternate synchronization settings</source> +<target>备用åŒæ¥è®¾ç½®</target> -<source>Select alternate synchronization settings</source> -<target>选择替æ¢åŒæ¥è®¾ç½®</target> +<source>Local filter</source> +<target>本地过滤器</target> -<source>Filter is active</source> -<target>过滤器已生效</target> +<source>Active</source> +<target>生效</target> -<source>No filter selected</source> -<target>没有选定过滤器</target> +<source>None</source> +<target>æ— </target> <source>Remove alternate settings</source> <target>移除替æ¢è®¾ç½®</target> @@ -663,6 +689,15 @@ The command is triggered if: <source>Paste</source> <target>粘贴</target> +<source>Alternate Comparison Settings</source> +<target>备用比较设置</target> + +<source>Alternate Synchronization Settings</source> +<target>备用åŒæ¥è®¾ç½®</target> + +<source>Local Filter</source> +<target>本地过滤器</target> + <source>&New</source> <target>新建(&N)</target> @@ -678,15 +713,18 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. åŒæ¥(&S)</target> +<source>&Global settings</source> +<target>全局设置(&G)</target> + <source>&Language</source> <target>切æ¢è¯è¨€(&L)</target> +<source>&Find...</source> +<target>查找...(&F)</target> + <source>&Export file list...</source> <target>导出文件列表(&E)...</target> -<source>&Global settings</source> -<target>全局设置(&G)</target> - <source>&Tools</source> <target>工具(&T)</target> @@ -696,17 +734,14 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>æ¯å‘¨è‡ªåŠ¨æ£€æŸ¥ä¸€æ¬¡(&A)</target> -<source>Check for new &version</source> -<target>检查新版本(&V)</target> +<source>&Check for new version</source> +<target>检查新版本(&C)</target> <source>Compare</source> <target>比较</target> -<source>Comparison settings</source> -<target>比较设置</target> - -<source>Synchronization settings</source> -<target>åŒæ¥è®¾ç½®</target> +<source>Cancel</source> +<target>å–消</target> <source>Synchronize</source> <target>åŒæ¥</target> @@ -720,6 +755,15 @@ The command is triggered if: <source>Swap sides</source> <target>两侧互æ¢</target> +<source>Close search bar</source> +<target>å…³é—æœç´¢æ¡</target> + +<source>Find:</source> +<target>查找:</target> + +<source>Match case</source> +<target>匹é…大å°å†™</target> + <source>Save as batch job</source> <target>å¦å˜ä¸ºæ‰¹å¤„ç†ä½œä¸š</target> @@ -741,74 +785,20 @@ The command is triggered if: <source>Total bytes to copy</source> <target>è¦å¤åˆ¶çš„总å—节数</target> -<source>Items found:</source> -<target>已找到的项目:</target> - -<source>Speed:</source> -<target>速度:</target> - -<source>Time remaining:</source> -<target>剩余时间:</target> - -<source>Time elapsed:</source> -<target>已用时间:</target> - -<source>Synchronizing...</source> -<target>åŒæ¥ä¸...</target> - -<source>Minimize to notification area</source> -<target>最å°åŒ–到托盘</target> - -<source>On completion</source> -<target>在完æˆæ—¶</target> - -<source>Close</source> -<target>å…³é—</target> - -<source>&Pause</source> -<target>æš‚åœ(&P)</target> - -<source>Variant</source> -<target>å˜åŒ–</target> - -<source>Statistics</source> -<target>统计</target> - -<source>&Don't show this dialog again</source> -<target>ä¸è¦å†æ˜¾ç¤ºè¿™ä¸ªå¯¹è¯æ¡†(&D)</target> - -<source>Select a variant</source> -<target>选择一个å˜åŒ–</target> +<source>Select a variant:</source> +<target>选择一个å˜åŒ–:</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -文件被认为是相åŒçš„,如果 - - 最åŽä¿®æ”¹æ—¶é—´å’Œæ—¥æœŸ - - æ–‡ä»¶å¤§å° -是相åŒçš„ -</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>以比较修改时间和文件大å°æ¥è¯†åˆ«ç›¸åŒæ–‡ä»¶.</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target> -文件被认为是相åŒçš„,如果 - - 文件内容 -是相åŒçš„ -</target> +<source>Identify equal files by comparing the file content.</source> +<target>以比较文件内容æ¥è¯†åˆ«ç›¸åŒçš„文件.</target> -<source>Symbolic Link handling</source> -<target>符å·è¿žæŽ¥å¤„ç†æ–¹å¼</target> +<source>Symbolic links:</source> +<target>符å·è¿žæŽ¥:</target> -<source>Help</source> -<target>帮助</target> +<source>More information</source> +<target>更多信æ¯</target> <source>OK</source> <target>确定</target> @@ -816,11 +806,11 @@ is the same <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>è¯†åˆ«å’Œä¼ æ’两侧的å˜åŒ–. åˆ é™¤, 移动和冲çªä¼šä½¿ç”¨ä¸€ä¸ªæ•°æ®åº“æ¥è‡ªåŠ¨æ£€æµ‹.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>é•œåƒå¤‡ä»½å·¦è¾¹çš„文件夹.åŒæ¥åŽå³è¾¹çš„文件夹被修改为和左边文件夹精确匹é….</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>创建左侧文件夹的镜åƒå¤‡ä»½, 在åŒæ¥ä¹‹åŽå³ä¾§æ–‡ä»¶å¤¹å®Œå…¨ç²¾ç¡®åŒ¹é….</target> -<source>Copy new or updated files to right folder.</source> -<target>å¤åˆ¶æ–°çš„或修改过的文件到å³ä¾§æ–‡ä»¶å¤¹</target> +<source>Copy new and updated files to the right folder.</source> +<target>å¤åˆ¶æ–°çš„和已更新的文件到å³ä¾§æ–‡ä»¶å¤¹.</target> <source>Configure your own synchronization rules.</source> <target>é…ç½®ä½ è‡ªå·±çš„åŒæ¥è§„则.</target> @@ -831,23 +821,8 @@ is the same <source>Requires database files. Not supported by all file systems.</source> <target>需è¦æ•°æ®åº“文件. ä¸æ˜¯æ‰€æœ‰æ–‡ä»¶ç³»ç»Ÿéƒ½æ”¯æŒ.</target> -<source>Error handling</source> -<target>错误处ç†</target> - -<source>Ignore</source> -<target>忽略</target> - -<source>Hide all error and warning messages</source> -<target>éšè—所有错误与è¦å‘Šä¿¡æ¯</target> - -<source>Pop-up</source> -<target>弹出框</target> - -<source>Show pop-up on errors or warnings</source> -<target>在错误或è¦å‘Šæ—¶æ˜¾ç¤ºå¼¹å‡ºå¯¹è¯æ¡†</target> - -<source>Deletion handling</source> -<target>åˆ é™¤å¤„ç†</target> +<source>Delete files:</source> +<target>åˆ é™¤æ–‡ä»¶:</target> <source>Permanent</source> <target>永久</target> @@ -870,56 +845,89 @@ is the same <source>Naming convention:</source> <target>命å规则:</target> -<source>Batch job</source> -<target>批处ç†ä½œä¸š</target> +<source>Show examples</source> +<target>显示范例</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>åˆ›å»ºä¸€ä¸ªç”¨äºŽæ— äººå€¼å®ˆåŒæ¥çš„批处ç†æ–‡ä»¶. è¦å¼€å§‹, åŒå‡»è¿™ä¸ªæ–‡ä»¶æˆ–任务计划器ä¸çš„计划调度: %x</target> +<source>Handle errors:</source> +<target>处ç†é”™è¯¯:</target> -<source>Exit</source> -<target>退出</target> +<source>Ignore</source> +<target>忽略</target> -<source>Abort synchronization on first error</source> -<target>在第一个错误时ä¸æ¢åŒæ¥</target> +<source>Hide all error and warning messages</source> +<target>éšè—所有错误与è¦å‘Šä¿¡æ¯</target> -<source>Show progress dialog</source> -<target>显示进度对è¯æ¡†</target> +<source>Pop-up</source> +<target>弹出框</target> -<source>Save log</source> -<target>ä¿å˜æ—¥å¿—</target> +<source>Show pop-up on errors or warnings</source> +<target>在错误或è¦å‘Šæ—¶æ˜¾ç¤ºå¼¹å‡ºå¯¹è¯æ¡†</target> -<source>Select folder to save log files</source> -<target>选择è¦ä¿å˜æ—¥å¿—文件的文件夹</target> +<source>On completion:</source> +<target>在完æˆæ—¶:</target> -<source>Limit</source> -<target>é™åˆ¶</target> +<source>Start synchronization now?</source> +<target>现在开始åŒæ¥å—?</target> -<source>Limit maximum number of log files</source> -<target>é™åˆ¶æ—¥å¿—文件的é‡å¤§ä¸ªæ•°</target> +<source>Variant:</source> +<target>å˜åŒ–:</target> -<source>Source code written in C++ using:</source> -<target>æºä»£ç 用如下C++工具写æˆ:</target> +<source>Statistics</source> +<target>统计</target> -<source>If you like FreeFileSync</source> -<target>å¦‚æžœä½ å–œæ¬¢ FreeFileSync</target> +<source>&Don't show this dialog again</source> +<target>ä¸è¦å†æ˜¾ç¤ºè¿™ä¸ªå¯¹è¯æ¡†(&D)</target> -<source>Donate with PayPal</source> -<target>通过PayPalæèµ </target> +<source>Items found:</source> +<target>已找到的项目:</target> -<source>Many thanks for localization:</source> -<target>éžå¸¸æ„Ÿè°¢ä»¥ä¸‹æœ¬åœ°åŒ–翻译者:</target> +<source>Speed:</source> +<target>速度:</target> -<source>Feedback and suggestions are welcome</source> -<target>欢迎å馈æ„è§å’Œæ出建议</target> +<source>Time remaining:</source> +<target>剩余时间:</target> -<source>Homepage</source> -<target>主页</target> +<source>Time elapsed:</source> +<target>已用时间:</target> -<source>Email</source> -<target>邮箱</target> +<source>Synchronizing...</source> +<target>åŒæ¥ä¸...</target> -<source>Published under the GNU General Public License</source> -<target>在GNU通用公共许å¯ä¸‹å‘布</target> +<source>Minimize to notification area</source> +<target>最å°åŒ–到托盘</target> + +<source>Close</source> +<target>å…³é—</target> + +<source>&Pause</source> +<target>æš‚åœ(&P)</target> + +<source>Stop</source> +<target>åœæ¢</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>åˆ›å»ºä¸€ä¸ªç”¨äºŽæ— äººå€¼å®ˆåŒæ¥çš„批处ç†æ–‡ä»¶. è¦å¼€å§‹, åŒå‡»è¿™ä¸ªæ–‡ä»¶æˆ–任务计划器ä¸çš„计划调度: %x</target> + +<source>Stop synchronization at first error</source> +<target>在é‡åˆ°ç¬¬ä¸€ä¸ªé”™è¯¯æ—¶åœæ¢åŒæ¥</target> + +<source>Show progress dialog</source> +<target>显示进度对è¯æ¡†</target> + +<source>Save log:</source> +<target>ä¿å˜æ—¥å¿—:</target> + +<source>Limit:</source> +<target>é™åˆ¶:</target> + +<source>Limit maximum number of log files</source> +<target>é™åˆ¶æ—¥å¿—文件的é‡å¤§ä¸ªæ•°</target> + +<source>How can I schedule a batch job?</source> +<target>我如何计划一个批处ç†ä½œä¸š?</target> + +<source>&Recycle bin</source> +<target>回收站(&R)</target> <source>Delete on both sides</source> <target>ä»Žä¸¤ä¾§åˆ é™¤</target> @@ -927,109 +935,136 @@ is the same <source>Delete on both sides even if the file is selected on one side only</source> <target>ä»Žä¸¤ä¾§åˆ é™¤(å³ä½¿ä»…在一侧选择文件)</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -文件仅仅在它们通过了所有的过滤器规则时æ‰ä¼šè¢«åŒæ¥. -备注: 文件路径必须是主目录的相对路径. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>选择过滤器规则以将æŸäº›æ–‡ä»¶ä»ŽåŒæ¥ä¸æŽ’除. 输入与相关的文件夹对相对的与文件路径.</target> -<source>Include</source> -<target>包括</target> +<source>Include:</source> +<target>包括:</target> -<source>Exclude</source> -<target>排除</target> +<source>Exclude:</source> +<target>排除:</target> -<source>Time span</source> -<target>时间跨度</target> +<source>Time span:</source> +<target>时间跨度:</target> -<source>File size</source> -<target>文件大å°</target> +<source>File size:</source> +<target>文件大å°:</target> -<source>Minimum</source> -<target>最å°</target> +<source>Minimum:</source> +<target>最å°:</target> -<source>Maximum</source> -<target>最大</target> +<source>Maximum:</source> +<target>最大:</target> <source>&Clear</source> <target>清除(&C)</target> -<source>Global settings</source> -<target>全局设置</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>如下的设置使用于所有åŒæ¥ä½œä¸š.</target> <source>Fail-safe file copy</source> <target>æ— é£Žé™©çš„æ–‡ä»¶å¤åˆ¶</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>å…ˆå¤åˆ¶åˆ°ä¸€ä¸ªä¸´æ—¶æ–‡ä»¶(*.ffs_tmp)然åŽå†æ”¹å. è¿™ä¿è¯äº†å³ä½¿æ˜¯åœ¨å‘生致使错误的情况下也有一致的状æ€.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target>åœ¨è¦†ç›–ç›®æ ‡ä¹‹å‰å…ˆå¤åˆ¶åˆ°ä¸´æ—¶æ–‡ä»¶(*.ffs_tmp). è¿™æ ·å³ä½¿åœ¨å‘生严é‡é”™è¯¯çš„情况下也å¯ä»¥ä¿è¯æœ‰ä¸€è‡´çš„状æ€.</target> + +<source>(recommended)</source> +<target>(推è)</target> <source>Copy locked files</source> <target>å¤åˆ¶è¢«é”定的文件</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>使用å·å½±å¤åˆ¶æœåŠ¡æ¥å¤åˆ¶å·²å…±äº«æˆ–å·²é”定的文件(需è¦ç®¡ç†å‘˜æƒé™)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>使用å·å½±å¤åˆ¶æœåŠ¡æ¥å¤åˆ¶å·²å…±äº«æˆ–å·²é”定的文件.</target> + +<source>(requires administrator rights)</source> +<target>(需è¦ç®¡ç†å‘˜æƒé™)</target> <source>Copy file access permissions</source> <target>å¤åˆ¶æ–‡ä»¶å˜å–æƒé™</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>ä¼ è¾“æ–‡ä»¶å’Œæ–‡ä»¶å¤¹æƒé™(需è¦ç®¡ç†å‘˜æƒé™)</target> +<source>Transfer file and folder permissions.</source> +<target>ä¼ è¾“æ–‡ä»¶åŠæ–‡ä»¶å¤¹çš„æƒé™.</target> + +<source>Automatic retry on error:</source> +<target>在出错时自动é‡è¯•:</target> + +<source>Retry count:</source> +<target>é‡è¯•è®¡æ•°:</target> -<source>Restore hidden dialogs</source> -<target>æ¢å¤è¢«éšè—的对è¯æ¡†</target> +<source>Delay (in seconds):</source> +<target>延时 (秒):</target> -<source>External applications</source> -<target>外部应用程åº</target> +<source>Customize context menu:</source> +<target>自定义å³é”®èœå•:</target> <source>Description</source> <target>æè¿°</target> +<source>Restore hidden windows</source> +<target>æ¢å¤éšè—窗å£</target> + <source>&Default</source> <target>默认(&D)</target> -<source>Find what:</source> -<target>è¦æŸ¥æ‰¾ä»€ä¹ˆ:</target> +<source>Source code written in C++ using:</source> +<target>æºä»£ç 用如下C++工具写æˆ:</target> -<source>Match case</source> -<target>匹é…大å°å†™</target> +<source>If you like FreeFileSync</source> +<target>å¦‚æžœä½ å–œæ¬¢ FreeFileSync</target> -<source>&Find next</source> -<target>查找下一个(&F)</target> +<source>Donate with PayPal</source> +<target>通过PayPalæèµ </target> -<source>Start synchronization</source> -<target>开始åŒæ¥</target> +<source>Feedback and suggestions are welcome</source> +<target>欢迎å馈æ„è§å’Œæ出建议</target> -<source>Delete</source> -<target>åˆ é™¤</target> +<source>Homepage</source> +<target>主页</target> -<source>Configure filter</source> -<target>é…置过滤器</target> +<source>Email</source> +<target>邮箱</target> -<source>Find</source> -<target>查找</target> +<source>Published under the GNU General Public License</source> +<target>在GNU通用公共许å¯ä¸‹å‘布</target> -<source>Select time span</source> +<source>Many thanks for localization:</source> +<target>éžå¸¸æ„Ÿè°¢ä»¥ä¸‹æœ¬åœ°åŒ–翻译者:</target> + +<source>Save as Batch Job</source> +<target>å¦å˜ä¸ºæ‰¹å¤„ç†ä½œä¸š</target> + +<source>Delete Items</source> +<target>åˆ é™¤é¡¹ç›®</target> + +<source>Global Settings</source> +<target>全局设置</target> + +<source>Select Time Span</source> <target>选择时间跨度</target> -<source>Folder pairs</source> +<source>Folder Pairs</source> <target>文件夹对</target> +<source>Find</source> +<target>查找</target> + <source>Overview</source> <target>摘è¦</target> <source>Configuration</source> <target>é…ç½®</target> -<source>Main bar</source> -<target>主工具æ¡</target> +<source>Main Bar</source> +<target>主工具æ </target> -<source>Filter files</source> +<source>Filter Files</source> <target>过滤器文件</target> -<source>Select view</source> +<source>Select View</source> <target>选择视图</target> <source>Open...</source> @@ -1041,13 +1076,14 @@ Note: File paths must be relative to base directories. <source>Compare both sides</source> <target>比较两侧</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>ä½ æ˜¯å¦çœŸçš„è¦å¯¹ %x 个项目执行命令 %y?</pluralform> -</target> +<source>Comparison settings</source> +<target>比较设置</target> + +<source>Synchronization settings</source> +<target>åŒæ¥è®¾ç½®</target> + +<source>Start synchronization</source> +<target>开始åŒæ¥</target> <source>Confirm</source> <target>确认</target> @@ -1082,12 +1118,6 @@ Note: File paths must be relative to base directories. <source>Set direction:</source> <target>设置方å‘:</target> -<source>Exclude temporarily</source> -<target>暂时排除</target> - -<source>Include temporarily</source> -<target>暂时包括</target> - <source>multiple selection</source> <target>多选</target> @@ -1097,6 +1127,15 @@ Note: File paths must be relative to base directories. <source>Exclude via filter:</source> <target>通过过滤器排除:</target> +<source>Exclude temporarily</source> +<target>暂时排除</target> + +<source>Include temporarily</source> +<target>暂时包括</target> + +<source>Delete</source> +<target>åˆ é™¤</target> + <source>Include all</source> <target>包括所有</target> @@ -1139,11 +1178,14 @@ Note: File paths must be relative to base directories. <source>Do you want to save changes to %x?</source> <target>是å¦è¦ä¿å˜ä¿®æ”¹åˆ° %x ?</target> +<source>Never save &changes</source> +<target>ä¸å†ä¿å˜æ›´æ”¹(&C)</target> + <source>Do&n't save</source> <target>ä¸ä¿å˜(&N)</target> -<source>Never save &changes</source> -<target>ä¸å†ä¿å˜æ›´æ”¹(&C)</target> +<source>Filter</source> +<target>过滤器</target> <source>Show files that exist on left side only</source> <target>显示仅å˜åœ¨å·¦ä¾§çš„文件</target> @@ -1190,12 +1232,18 @@ Note: File paths must be relative to base directories. <source>Set as default</source> <target>设置为默认值</target> -<source>Operation aborted</source> -<target>æ“作已å–消</target> - <source>All folders are in sync</source> <target>所有文件夹都是åŒæ¥çš„</target> +<source>Synchronization Settings</source> +<target>åŒæ¥è®¾ç½®</target> + +<source>Comparison Settings</source> +<target>比较设置</target> + +<source>Cannot find %x</source> +<target>找ä¸åˆ° %x</target> + <source>Comma-separated values</source> <target>逗å·åˆ†å‰²çš„数值(CSV)</target> @@ -1205,30 +1253,6 @@ Note: File paths must be relative to base directories. <source>Searching for program updates...</source> <target>æ£åœ¨æœç´¢ç¨‹åºçš„æ›´æ–°...</target> -<source>&Ignore subsequent errors</source> -<target>忽略åŽç»çš„错误(&I)</target> - -<source>&Ignore</source> -<target>忽略(&I)</target> - -<source>Fatal Error</source> -<target>致命错误</target> - -<source>&Don't show this warning again</source> -<target>ä¸å†æ˜¾ç¤ºè¿™ä¸ªè¦å‘Š(&D)</target> - -<source>&Switch</source> -<target>切æ¢(&S)</target> - -<source>Question</source> -<target>问题</target> - -<source>&Yes</source> -<target>是(&Y)</target> - -<source>&No</source> -<target>å¦(&N)</target> - <source>Scanning...</source> <target>æ£æ‰«æ...</target> @@ -1238,14 +1262,17 @@ Note: File paths must be relative to base directories. <source>Info</source> <target>ä¿¡æ¯</target> +<source>Warning</source> +<target>è¦å‘Š</target> + <source>Paused</source> <target>已暂åœ</target> <source>Initializing...</source> <target>æ£åœ¨åˆå§‹åŒ–...</target> -<source>Aborted</source> -<target>å·²å–消</target> +<source>Stopped</source> +<target>å·²åœæ¢</target> <source>Completed</source> <target>完æˆ</target> @@ -1256,12 +1283,6 @@ Note: File paths must be relative to base directories. <source>Log</source> <target>日志</target> -<source>Cannot find %x</source> -<target>找ä¸åˆ° %x</target> - -<source>Inactive</source> -<target>ä¸ä½¿ç”¨</target> - <source>Today</source> <target>今天</target> @@ -1286,9 +1307,6 @@ Note: File paths must be relative to base directories. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>过滤器</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1297,6 +1315,9 @@ Note: File paths must be relative to base directories. <pluralform>ä½ æ˜¯å¦è¦å°†å¦‚下 %x 个项目移动到回收站?</pluralform> </target> +<source>Move</source> +<target>移动</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1305,6 +1326,9 @@ Note: File paths must be relative to base directories. <pluralform>是å¦çœŸçš„è¦åˆ 除如下 %x 个项目?</pluralform> </target> +<source>Exclude</source> +<target>排除</target> + <source>Direct</source> <target>直接</target> @@ -1329,8 +1353,8 @@ Note: File paths must be relative to base directories. <source>- Other side's counterpart to %item_folder%</source> <target>- å¦ä¸€è¾¹çš„对应项到 %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>é‡æ–°è®©å·²ç»éšè—çš„è¦å‘Šå’Œå¯¹è¯æ¡†å˜ä¸ºå¯è§?</target> +<source>Restore all hidden windows and warnings?</source> +<target>è¦æ¢å¤æ‰€æœ‰éšè—的窗å£å’Œè¦å‘Šå—?</target> <source>Leave as unresolved conflict</source> <target>é—留为未解决的冲çª</target> @@ -1452,14 +1476,14 @@ Note: File paths must be relative to base directories. <pluralform>%x 天</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>接收系统信æ¯çš„注册失败.</target> +<source>Unable to register to receive system messages.</source> +<target>æ— æ³•æ³¨å†Œä»¥æŽ¥æ”¶ç³»ç»Ÿä¿¡æ¯.</target> <source>Cannot set privilege %x.</source> <target>æ— æ³•è®¾ç½® %x 的特æƒ.</target> -<source>Failed to suspend system sleep mode.</source> -<target>ä¸æ¢ç³»ç»Ÿç¡çœ 模å¼å¤±è´¥.</target> +<source>Unable to suspend system sleep mode.</source> +<target>æ— æ³•è·¯ä¸Šç³»ç»Ÿç¡çœ 模å¼.</target> <source>Cannot change process I/O priorities.</source> <target>æ— æ³•æ›´æ”¹è¿›ç¨‹çš„I/O优先级.</target> diff --git a/BUILD/Languages/chinese_traditional.lng b/BUILD/Languages/chinese_traditional.lng index 9b93446e..36cbd8ad 100644 --- a/BUILD/Languages/chinese_traditional.lng +++ b/BUILD/Languages/chinese_traditional.lng @@ -2,12 +2,15 @@ <language>æ£é«”ä¸æ–‡</language> <translator>Carlos Chen</translator> <locale>Chinese (Traditional)</locale> - <flag_image>flag_taiwan.png</flag_image> - <plural_form_count>1</plural_form_count> + <image>flag_taiwan.png</image> + <plural_count>1</plural_count> <plural_definition>0</plural_definition> </header> -<source>Close search bar</source> +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> <target></target> <source>Both sides have changed since last synchronization.</source> @@ -61,9 +64,6 @@ <source>Cannot open file %x.</source> <target>無法開啟檔案 %x。</target> -<source>Error</source> -<target>錯誤</target> - <source>File %x does not contain a valid configuration.</source> <target>檔案 %x ä¸åŒ…å«ä¸€å€‹æœ‰æ•ˆçš„é…置。</target> @@ -73,12 +73,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>目錄è¨å®šé€éŽå‘½ä»¤åˆ—時,該è¨å®šæª”å¿…é ˆä¸åŒ…å«é…å°ç›®éŒ„級別的è¨å®šã€‚</target> -<source>Warning</source> -<target>è¦å‘Š</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>目錄無法è¨å®šå¤šå€‹é…置檔。</target> +<source>Command line</source> +<target>命令列</target> + <source>Syntax:</source> <target>語法:</target> @@ -92,10 +92,7 @@ <target>FreeFileSync .ffs_guiå’Œ/或.ffs_batché…置檔案的任æ„數é‡ã€‚</target> <source>Any number of alternative directories for at most one config file.</source> -<target>替代目錄的任æ„數é‡ä¸æœ€å¤šæœ‰ä¸€å€‹é…置文件。</target> - -<source>Command line</source> -<target>命令列</target> +<target>備用目錄的任æ„數é‡ä¸æœ€å¤šæœ‰ä¸€å€‹é…置文件。</target> <source>A folder input field is empty.</source> <target>資料夾輸入欄ä½æ˜¯ç©ºçš„。</target> @@ -116,7 +113,7 @@ <target>檔案 %x 的日期無效。</target> <source>Date:</source> -<target>資料:</target> +<target>日期:</target> <source>Files %x have the same date but a different size.</source> <target>檔案 %x 日期相åŒä½†å¤§å°ä¸åŒã€‚</target> @@ -292,8 +289,8 @@ <source>/sec</source> <target>/秒</target> -<source>%x items</source> -<target>%x é …ç›®</target> +<source>%x items/sec</source> +<target>%x å€‹é …ç›®/秒</target> <source>Configuration file %x loaded partially only.</source> <target>åªè¼‰å…¥è¨å®šæª” %x 的一部份。</target> @@ -322,11 +319,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>å·å %x ä¸æ˜¯æª”案路徑 %y 的一部分。</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>ä¸æ¢è«‹æ±‚:æ£åœ¨ç‰å¾…ç›®å‰æ“作完æˆ...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>åœæ¢è¦æ±‚:ç‰å¾…ç›®å‰çš„æ“作çµæŸ...</target> -<source>Failure to create timestamp for versioning:</source> -<target>無法新建時間戳記的版本控制:</target> +<source>Unable to create timestamp for versioning:</source> +<target>無法新建版本控制的時間戳記:</target> <source>Cannot read the following XML elements:</source> <target>無法讀å–下列XMLå…ƒç´ ï¼š</target> @@ -343,8 +340,8 @@ <source>&Program</source> <target>程å¼(&P)</target> -<source>&Content</source> -<target>內容(&C)</target> +<source>&View help</source> +<target>檢視說明(&V)</target> <source>&About</source> <target>關於(&A)</target> @@ -367,8 +364,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>開始åªæ˜¯å°Žå…¥ä¸€å€‹.ffs_batch檔。</target> -<source>Folders to watch</source> -<target>è¦ç›£çœ‹çš„資料夾</target> +<source>Folders to watch:</source> +<target>è¦ç›£çœ‹çš„資料夾:</target> <source>Add folder</source> <target>新增資料夾</target> @@ -382,12 +379,15 @@ <source>Select a folder</source> <target>é¸æ“‡ä¸€å€‹è³‡æ–™å¤¾</target> -<source>Idle time [seconds]</source> -<target>閒置時間 [秒]</target> +<source>Idle time (in seconds):</source> +<target>閒置時間(以秒為單ä½)</target> <source>Idle time between last detected change and execution of command</source> <target>最後檢測到變更和執行命令之間的閒置時間</target> +<source>Command line:</source> +<target>命令列:</target> + <source> The command is triggered if: - files or subfolders change @@ -399,33 +399,30 @@ The command is triggered if: - 新資料夾到來(例如æ’å…¥USB隨身碟) </target> -<source>Start</source> -<target>開始</target> +<source>&Start</source> +<target>開始(&S)</target> -<source>&Retry</source> -<target>é‡è©¦(&R)</target> - -<source>Cancel</source> -<target>å–消</target> - -<source>RealtimeSync - Automated Synchronization</source> -<target>å³æ™‚åŒæ¥ - 自動åŒæ¥</target> +<source>About</source> +<target>關於</target> <source>Build: %x</source> <target>建立:%x</target> -<source>About</source> -<target>關於</target> - <source>All files</source> <target>所有檔案</target> +<source>Automated Synchronization</source> +<target>自動化åŒæ¥</target> + <source>Directory monitoring active</source> <target>目錄監測啟動</target> <source>Waiting until all directories are available...</source> <target>ç‰åˆ°æ‰€æœ‰ç›®éŒ„å¯ç”¨...</target> +<source>Error</source> +<target>錯誤</target> + <source>&Restore</source> <target>還原(&R)</target> @@ -435,8 +432,11 @@ The command is triggered if: <source>&Exit</source> <target>çµæŸ(&E)</target> -<source>Invalid command line:</source> -<target>無效的命令列:</target> +<source>Incorrect command line:</source> +<target>ä¸æ£ç¢ºçš„命令列:</target> + +<source>&Retry</source> +<target>é‡è©¦(&R)</target> <source>File content</source> <target>檔案内容</target> @@ -498,8 +498,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>目標資料夾輸入欄ä½ä¸èƒ½ç‚ºç©ºã€‚</target> -<source>Folder input field for versioning must not be empty.</source> -<target>版本控制資料夾輸入欄ä½ä¸èƒ½ç‚ºç©ºã€‚</target> +<source>Please enter a target folder for versioning.</source> +<target>請輸入版本控制的目的資料夾。</target> <source>Source folder %x not found.</source> <target>來æºè³‡æ–™å¤¾ %x 找ä¸åˆ°ã€‚</target> @@ -537,8 +537,8 @@ The command is triggered if: <source>job name</source> <target>作æ¥å稱</target> -<source>Synchronization aborted</source> -<target>åŒæ¥å·²ä¸æ¢</target> +<source>Synchronization stopped</source> +<target>åŒæ¥å·²åœæ¢ã€‚</target> <source>Synchronization completed with errors</source> <target>åŒæ¥å®Œæˆä½†æœ‰éŒ¯èª¤</target> @@ -555,14 +555,37 @@ The command is triggered if: <source>Saving log file %x...</source> <target>æ£åœ¨å„²å˜æ—¥èªŒæª” %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>在FreeFileSync主å°è©±æ¡†ï¼ŒæŒ‰ä¸‹ "切æ›" 來解決å•é¡Œã€‚</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>您å¯ä»¥åˆ‡æ›åˆ°FreeFileSync的主視窗ä¸ä¾†è§£æ±ºæ¤å•é¡Œã€‚</target> + +<source>&Don't show this warning again</source> +<target>ä¸è¦å†é¡¯ç¤ºæ¤è¦å‘Š(&D)</target> + +<source>&Ignore</source> +<target>忽略(&I)</target> + +<source>&Switch</source> +<target>切æ›(&S)</target> + +<source>Switching to FreeFileSync's main window</source> +<target>切æ›åˆ°FreeFileSync的主視窗</target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>在 %x 秒自動é‡è©¦...</pluralform> +</target> + +<source>&Ignore subsequent errors</source> +<target>忽略後續的錯誤(&I)</target> -<source>Switching to FreeFileSync main dialog</source> -<target>切æ›åˆ°FreeFileSync主å°è©±æ¡†</target> +<source>Serious Error</source> +<target>åš´é‡éŒ¯èª¤</target> -<source>Retrying operation after error:</source> -<target>錯誤後é‡è©¦æ“作:</target> +<source>Check for Program Updates</source> +<target>檢查程å¼æ›´æ–°</target> <source>A new version of FreeFileSync is available:</source> <target>FreeFileSync有新版本å¯ç”¨ï¼š</target> @@ -570,18 +593,12 @@ The command is triggered if: <source>Download now?</source> <target>è¦ç«‹å³ä¸‹è¼‰å—Žï¼Ÿ</target> -<source>New version found</source> -<target>找到新版本</target> - <source>&Download</source> <target>下載(&D)</target> <source>FreeFileSync is up to date.</source> <target>FreeFileSync已經是最新版本。</target> -<source>Information</source> -<target>訊æ¯</target> - <source>Unable to connect to sourceforge.net.</source> <target>無法連接到sourceforge.net。</target> @@ -639,23 +656,23 @@ The command is triggered if: <source>Hibernate</source> <target>ä¼‘çœ </target> -<source>Selected variant:</source> -<target>é¸å–的變數:</target> +<source>Alternate comparison settings</source> +<target>備用比å°è¨å®š</target> -<source>Select alternate comparison settings</source> -<target>é¸æ“‡æ›¿ä»£çš„比å°è¨å®š</target> +<source>Alternate synchronization settings</source> +<target>備用åŒæ¥è¨å®š</target> -<source>Select alternate synchronization settings</source> -<target>é¸æ“‡æ›¿ä»£çš„åŒæ¥è¨å®š</target> +<source>Local filter</source> +<target>本機篩é¸å™¨</target> -<source>Filter is active</source> -<target>篩é¸å™¨ç‚ºå•Ÿå‹•</target> +<source>Active</source> +<target>啟用</target> -<source>No filter selected</source> -<target>沒有é¸æ“‡ç¯©é¸å™¨</target> +<source>None</source> +<target>ç„¡</target> <source>Remove alternate settings</source> -<target>移除替代è¨å®š</target> +<target>移除備用è¨å®š</target> <source>Clear filter settings</source> <target>清除篩é¸å™¨è¨å®š</target> @@ -666,6 +683,15 @@ The command is triggered if: <source>Paste</source> <target>貼上</target> +<source>Alternate Comparison Settings</source> +<target>備用比å°è¨å®š</target> + +<source>Alternate Synchronization Settings</source> +<target>備用åŒæ¥è¨å®š</target> + +<source>Local Filter</source> +<target>本機篩é¸å™¨</target> + <source>&New</source> <target>新增(&N)</target> @@ -681,15 +707,18 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. åŒæ¥(&S)</target> +<source>&Global settings</source> +<target>æ•´é«”è¨å®š(&G)</target> + <source>&Language</source> <target>語言(&L)</target> +<source>&Find...</source> +<target>尋找(&F)</target> + <source>&Export file list...</source> <target>匯出檔案清單(&E)...</target> -<source>&Global settings</source> -<target>æ•´é«”è¨å®š(&G)</target> - <source>&Tools</source> <target>工具(&T)</target> @@ -699,12 +728,15 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>一週自動檢查一次(&a)</target> -<source>Check for new &version</source> -<target>檢查新版本(&v)</target> +<source>&Check for new version</source> +<target>檢查新版本(&C)</target> <source>Compare</source> <target>比å°</target> +<source>Cancel</source> +<target>å–消</target> + <source>Synchronize</source> <target>åŒæ¥</target> @@ -717,8 +749,11 @@ The command is triggered if: <source>Swap sides</source> <target>兩邊交æ›</target> -<source>Find what:</source> -<target>尋找內容:</target> +<source>Close search bar</source> +<target>關閉æœå°‹æ¬„ä½</target> + +<source>Find:</source> +<target>尋找:</target> <source>Match case</source> <target>å€åˆ†å¤§å°å¯«</target> @@ -744,65 +779,20 @@ The command is triggered if: <source>Total bytes to copy</source> <target>è¦è¤‡è£½çš„ä½å…ƒçµ„總數</target> -<source>Items found:</source> -<target>å°‹æ‰¾é …ç›®ï¼š</target> - -<source>Speed:</source> -<target>速度:</target> - -<source>Time remaining:</source> -<target>剩餘時間:</target> - -<source>Time elapsed:</source> -<target>經éŽæ™‚間:</target> - -<source>Synchronizing...</source> -<target>æ£åœ¨åŒæ¥...</target> - -<source>Minimize to notification area</source> -<target>最å°åŒ–到通知å€åŸŸ</target> - -<source>On completion</source> -<target>完æˆå¾Œ</target> - -<source>Close</source> -<target>關閉</target> - -<source>&Pause</source> -<target>æš«åœ(&P)</target> - -<source>Variant</source> -<target>變數</target> - -<source>Statistics</source> -<target>統計</target> - -<source>&Don't show this dialog again</source> -<target>ä¸è¦å†é¡¯ç¤ºæ¤å°è©±æ¡†(&D)</target> - -<source>Select a variant</source> -<target>é¸æ“‡ä¸€å€‹è®Šæ•¸</target> +<source>Select a variant:</source> +<target>é¸æ“‡ä¸€å€‹è®Šæ•¸ï¼š</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target>如果檔案大å°å’Œæœ€å¾Œä¿®æ”¹æ™‚間和日期相åŒå‰‡åˆ¤æ–·å…©è€…相åŒ</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>由修改時間和檔案大å°æ¯”å°ä¾†åˆ¤æ–·ç›¸åŒæª”案。</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target>如果檔案内容相åŒå‰‡åˆ¤æ–·å…©è€…相åŒ</target> +<source>Identify equal files by comparing the file content.</source> +<target>由比å°æª”案內容來判斷相åŒæª”案。</target> -<source>Symbolic Link handling</source> -<target>符號連çµè™•ç†</target> +<source>Symbolic links:</source> +<target>符號連çµï¼š</target> -<source>Help</source> -<target>說明</target> +<source>More information</source> +<target>詳細資訊</target> <source>OK</source> <target>確定</target> @@ -810,11 +800,11 @@ is the same <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>è˜åˆ¥å’Œå‚³æ’兩邊的變更。自動檢測刪除ã€ç§»å‹•å’Œè¡çªä½¿ç”¨çš„資料庫。</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>é¡åƒå‚™ä»½çš„左邊的資料夾。åŒæ¥å¾Œï¼Œå³é‚Šçš„資料夾進行修改以完全相é…左邊的資料夾。</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>新建左邊資料夾的é¡åƒå‚™ä»½ï¼ŒåŒæ¥å¾Œå®Œæ•´åŒ¹é…å³é‚Šè³‡æ–™å¤¾ã€‚</target> -<source>Copy new or updated files to right folder.</source> -<target>將新的或更新éŽçš„檔案複製到å³é‚Šçš„資料夾ä¸ã€‚</target> +<source>Copy new and updated files to the right folder.</source> +<target>將新的和已更新的檔案複製到å³é‚Šè³‡æ–™å¤¾ã€‚</target> <source>Configure your own synchronization rules.</source> <target>é…ç½®ä½ è‡ªå·±çš„åŒæ¥è¦å‰‡ã€‚</target> @@ -825,23 +815,8 @@ is the same <source>Requires database files. Not supported by all file systems.</source> <target>需è¦è³‡æ–™åº«æª”案。ä¸æ”¯æ´æ‰€æœ‰æª”案系統。</target> -<source>Error handling</source> -<target>錯誤處ç†</target> - -<source>Ignore</source> -<target>忽略</target> - -<source>Hide all error and warning messages</source> -<target>éš±è—所有錯誤和è¦å‘Šè¨Šæ¯</target> - -<source>Pop-up</source> -<target>彈出視窗</target> - -<source>Show pop-up on errors or warnings</source> -<target>在彈出視窗上顯示錯誤或è¦å‘Šè¨Šæ¯</target> - -<source>Deletion handling</source> -<target>刪除處ç†</target> +<source>Delete files:</source> +<target>刪除檔案:</target> <source>Permanent</source> <target>常é§</target> @@ -864,99 +839,171 @@ is the same <source>Naming convention:</source> <target>命å慣例:</target> -<source>Batch job</source> -<target>批次處ç†ä½œæ¥</target> +<source>Show examples</source> +<target>顯示範例</target> + +<source>Handle errors:</source> +<target>錯誤處ç†ï¼š</target> + +<source>Ignore</source> +<target>忽略</target> + +<source>Hide all error and warning messages</source> +<target>éš±è—所有錯誤和è¦å‘Šè¨Šæ¯</target> + +<source>Pop-up</source> +<target>彈出視窗</target> + +<source>Show pop-up on errors or warnings</source> +<target>在彈出視窗上顯示錯誤或è¦å‘Šè¨Šæ¯</target> + +<source>On completion:</source> +<target>完æˆå¾Œï¼š</target> + +<source>Start synchronization now?</source> +<target>ç¾åœ¨é–‹å§‹åŒæ¥ï¼Ÿ</target> + +<source>Variant:</source> +<target>變數:</target> + +<source>Statistics</source> +<target>統計</target> + +<source>&Don't show this dialog again</source> +<target>ä¸è¦å†é¡¯ç¤ºæ¤å°è©±æ¡†(&D)</target> + +<source>Items found:</source> +<target>å°‹æ‰¾é …ç›®ï¼š</target> + +<source>Speed:</source> +<target>速度:</target> + +<source>Time remaining:</source> +<target>剩餘時間:</target> + +<source>Time elapsed:</source> +<target>經éŽæ™‚間:</target> + +<source>Synchronizing...</source> +<target>æ£åœ¨åŒæ¥...</target> + +<source>Minimize to notification area</source> +<target>最å°åŒ–到通知å€åŸŸ</target> + +<source>Close</source> +<target>關閉</target> + +<source>&Pause</source> +<target>æš«åœ(&P)</target> + +<source>Stop</source> +<target>åœæ¢</target> <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target>新建一個批次處ç†æª”,用於無人值守åŒæ¥ã€‚開始,點兩下æ¤æª”案,或安排在任務è¦åŠƒä¸ï¼š%x</target> -<source>Exit</source> -<target>çµæŸ</target> - -<source>Abort synchronization on first error</source> -<target>在第一個錯誤出ç¾å³ä¸æ¢åŒæ¥</target> +<source>Stop synchronization at first error</source> +<target>在第一個錯誤出ç¾åœæ¢åŒæ¥</target> <source>Show progress dialog</source> <target>顯示進度å°è©±æ¡†</target> -<source>Save log</source> +<source>Save log:</source> <target>儲å˜æ—¥èªŒ</target> -<source>Select folder to save log files</source> -<target>é¸æ“‡è¦å„²å˜æ—¥èªŒæª”的資料夾</target> - -<source>Limit</source> -<target>é™åˆ¶</target> +<source>Limit:</source> +<target>é™åˆ¶ï¼š</target> <source>Limit maximum number of log files</source> <target>é™åˆ¶æ—¥èªŒæª”的最大數é‡</target> +<source>How can I schedule a batch job?</source> +<target>如何安排批次處ç†ä½œæ¥ï¼Ÿ</target> + +<source>&Recycle bin</source> +<target>資æºå›žæ”¶ç’(&R)</target> + <source>Delete on both sides</source> <target>兩邊都刪除</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>å³ä½¿åªåœ¨ä¸€é‚Šä¸é¸å¥½æª”案,還是會刪除兩邊檔案。</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -如果他們通éŽæ‰€æœ‰çš„éŽæ¿¾è¦å‰‡ï¼Œå°‡åªæœƒåŒæ¥æª”案。 -注æ„ï¼šæª”æ¡ˆè·¯å¾‘å¿…é ˆæ˜¯ç›¸å°æ–¼åŸºæœ¬ç›®éŒ„。 -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>é¸æ“‡å¾žåŒæ¥ä¸æŽ’除æŸäº›æª”案的篩é¸å™¨è¦å‰‡ã€‚輸入相å°æ–¼å…¶å°æ‡‰çš„é…å°è³‡æ–™å¤¾è·¯å¾‘。</target> -<source>Include</source> -<target>包括</target> +<source>Include:</source> +<target>包括:</target> -<source>Exclude</source> -<target>排除</target> +<source>Exclude:</source> +<target>排除:</target> -<source>Time span</source> -<target>時間間隔</target> +<source>Time span:</source> +<target>時間間隔:</target> -<source>File size</source> -<target>檔案大å°</target> +<source>File size:</source> +<target>檔案大å°ï¼š</target> -<source>Minimum</source> -<target>最å°</target> +<source>Minimum:</source> +<target>最å°ï¼š</target> -<source>Maximum</source> -<target>最大</target> +<source>Maximum:</source> +<target>最大:</target> <source>&Clear</source> <target>清除(&C)</target> -<source>Global settings</source> -<target>æ•´é«”è¨å®š</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>以下è¨å®šç”¨æ–¼æ‰€æœ‰åŒæ¥ä½œæ¥ã€‚</target> <source>Fail-safe file copy</source> <target>æ•…éšœä¿è·æª”案複製</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>先複製到一個臨時檔案(*.ffs_tmp)然後將其é‡æ–°å‘½å。å³ä½¿ç™¼ç”Ÿè‡´å‘½éŒ¯èª¤æ™‚,還能確ä¿ä¸€è‡´çš„狀態。</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +覆蓋目標之å‰å…ˆè¤‡è£½åˆ°ä¸€å€‹è‡¨æ™‚檔案(*.ffs_tmp)。 +å³ä½¿ç™¼ç”Ÿåš´é‡éŒ¯èª¤æ™‚,還能確ä¿ä¸€è‡´çš„狀態。 +</target> + +<source>(recommended)</source> +<target>(建è°)</target> <source>Copy locked files</source> <target>複製被鎖定的檔案</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>共用的副本或鎖定的檔案使用å·å½±è¤‡è£½æœå‹™(需è¦ç®¡ç†å“¡æ¬Šé™)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>共用的副本或鎖定的檔案使用å·å½±è¤‡è£½æœå‹™</target> + +<source>(requires administrator rights)</source> +<target>(需è¦ç®¡ç†å“¡æ¬Šé™)</target> <source>Copy file access permissions</source> <target>複製檔案系統權é™</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>傳輸檔案和資料夾的權é™(需è¦ç®¡ç†å“¡æ¬Šé™)</target> +<source>Transfer file and folder permissions.</source> +<target>傳輸檔案和資料夾的權é™ã€‚</target> + +<source>Automatic retry on error:</source> +<target>錯誤時自動é‡è©¦ï¼š</target> -<source>Restore hidden dialogs</source> -<target>還原隱è—çš„å°è©±æ¡†</target> +<source>Retry count:</source> +<target>é‡è©¦æ¬¡æ•¸ï¼š</target> -<source>External applications</source> -<target>外部應用程å¼</target> +<source>Delay (in seconds):</source> +<target>延é²(以秒為單ä½):</target> + +<source>Customize context menu:</source> +<target>自訂內容功能表:</target> <source>Description</source> <target>æè¿°</target> +<source>Restore hidden windows</source> +<target>還原隱è—視窗</target> + <source>&Default</source> <target>é è¨(&D)</target> @@ -984,25 +1031,19 @@ Note: File paths must be relative to base directories. <source>Many thanks for localization:</source> <target>éžå¸¸æ„Ÿè¬æœ¬åœ°åŒ–語系翻è¯å·¥ä½œäººå“¡ï¼š</target> -<source>Start synchronization</source> -<target>開始åŒæ¥</target> - -<source>Comparison settings</source> -<target>比å°è¨å®š</target> - -<source>Synchronization settings</source> -<target>åŒæ¥è¨å®š</target> +<source>Save as Batch Job</source> +<target>å¦å˜ç‚ºæ‰¹æ¬¡è™•ç†ä½œæ¥</target> -<source>Delete</source> -<target>刪除</target> +<source>Delete Items</source> +<target>åˆªé™¤é …ç›®</target> -<source>Configure filter</source> -<target>é…置篩é¸</target> +<source>Global Settings</source> +<target>æ•´é«”è¨å®š</target> -<source>Select time span</source> +<source>Select Time Span</source> <target>é¸æ“‡æ™‚é–“é–“éš”</target> -<source>Folder pairs</source> +<source>Folder Pairs</source> <target>é…å°è³‡æ–™å¤¾</target> <source>Find</source> @@ -1014,13 +1055,13 @@ Note: File paths must be relative to base directories. <source>Configuration</source> <target>é…ç½®</target> -<source>Main bar</source> +<source>Main Bar</source> <target>主欄ä½</target> -<source>Filter files</source> +<source>Filter Files</source> <target>篩é¸æª”案</target> -<source>Select view</source> +<source>Select View</source> <target>é¸æ“‡æª¢è¦–</target> <source>Open...</source> @@ -1032,17 +1073,26 @@ Note: File paths must be relative to base directories. <source>Compare both sides</source> <target>比å°å…©é‚Š</target> +<source>Comparison settings</source> +<target>比å°è¨å®š</target> + +<source>Synchronization settings</source> +<target>åŒæ¥è¨å®š</target> + +<source>Start synchronization</source> +<target>開始åŒæ¥</target> + +<source>Confirm</source> +<target>確èª</target> + <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> <pluralform>ä½ çœŸçš„è¦åŸ·è¡Œ %x é …ç›®çš„å‘½ä»¤ %y 嗎?</pluralform> </target> -<source>Confirm</source> -<target>確èª</target> - <source>&Execute</source> <target>執行(&E)</target> @@ -1077,10 +1127,10 @@ Note: File paths must be relative to base directories. <target>多é‡é¸æ“‡</target> <source>Include via filter:</source> -<target>包括é€éŽç¯©é¸å™¨ï¼š</target> +<target>é€éŽç¯©é¸å™¨åŒ…括:</target> <source>Exclude via filter:</source> -<target>使用篩é¸å™¨æŽ’除:</target> +<target>é€éŽç¯©é¸å™¨æŽ’除:</target> <source>Exclude temporarily</source> <target>暫時排除</target> @@ -1088,6 +1138,9 @@ Note: File paths must be relative to base directories. <source>Include temporarily</source> <target>暫時包括</target> +<source>Delete</source> +<target>刪除</target> + <source>Include all</source> <target>包括所有</target> @@ -1130,11 +1183,14 @@ Note: File paths must be relative to base directories. <source>Do you want to save changes to %x?</source> <target>是å¦è¦å„²å˜è®Šæ›´åˆ° %x?</target> +<source>Never save &changes</source> +<target>從ä¸ä¿å˜æ›´æ”¹(&c)</target> + <source>Do&n't save</source> <target>ä¸å„²å˜(&N)</target> -<source>Never save &changes</source> -<target>從ä¸ä¿å˜æ›´æ”¹(&c)</target> +<source>Filter</source> +<target>篩é¸å™¨</target> <source>Show files that exist on left side only</source> <target>顯示åªå˜åœ¨æ–¼å·¦é‚Šçš„檔案</target> @@ -1181,12 +1237,15 @@ Note: File paths must be relative to base directories. <source>Set as default</source> <target>è¨ç‚ºé è¨å€¼</target> -<source>Operation aborted</source> -<target>æ“作已ä¸æ¢</target> - <source>All folders are in sync</source> <target>所有資料夾都是åŒæ¥çš„</target> +<source>Synchronization Settings</source> +<target>åŒæ¥è¨å®š</target> + +<source>Comparison Settings</source> +<target>比å°è¨å®š</target> + <source>Cannot find %x</source> <target>找ä¸åˆ° %x</target> @@ -1199,30 +1258,6 @@ Note: File paths must be relative to base directories. <source>Searching for program updates...</source> <target>æ£åœ¨æœå°‹ç¨‹å¼æ›´æ–°...</target> -<source>&Ignore subsequent errors</source> -<target>忽略後續的錯誤(&I)</target> - -<source>&Ignore</source> -<target>忽略(&I)</target> - -<source>Fatal Error</source> -<target>åš´é‡éŒ¯èª¤</target> - -<source>&Don't show this warning again</source> -<target>ä¸è¦å†é¡¯ç¤ºæ¤è¦å‘Š(&D)</target> - -<source>&Switch</source> -<target>切æ›(&S)</target> - -<source>Question</source> -<target>å•é¡Œ</target> - -<source>&Yes</source> -<target>是(&Y)</target> - -<source>&No</source> -<target>å¦(&N)</target> - <source>Scanning...</source> <target>æ£åœ¨æŽƒçž„...</target> @@ -1232,14 +1267,17 @@ Note: File paths must be relative to base directories. <source>Info</source> <target>訊æ¯</target> +<source>Warning</source> +<target>è¦å‘Š</target> + <source>Paused</source> <target>已暫åœ</target> <source>Initializing...</source> <target>æ£åœ¨åˆå§‹åŒ–...</target> -<source>Aborted</source> -<target>å·²ä¸æ¢</target> +<source>Stopped</source> +<target>å·²åœæ¢</target> <source>Completed</source> <target>已完æˆ</target> @@ -1250,9 +1288,6 @@ Note: File paths must be relative to base directories. <source>Log</source> <target>日誌</target> -<source>Inactive</source> -<target>åœç”¨</target> - <source>Today</source> <target>今日</target> @@ -1277,9 +1312,6 @@ Note: File paths must be relative to base directories. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>篩é¸å™¨</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1288,6 +1320,9 @@ Note: File paths must be relative to base directories. <pluralform>ä½ çœŸçš„è¦å°‡ä»¥ä¸‹é …ç›® %x 移動到資æºå›žæ”¶ç’嗎?</pluralform> </target> +<source>Move</source> +<target>移動</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1296,6 +1331,9 @@ Note: File paths must be relative to base directories. <pluralform>您真的è¦å°‡ä¸‹åˆ— %x é …ç›®åˆªé™¤å—Žï¼Ÿ</pluralform> </target> +<source>Exclude</source> +<target>排除</target> + <source>Direct</source> <target>直接</target> @@ -1306,7 +1344,7 @@ Note: File paths must be relative to base directories. <target>複製NTFS權é™</target> <source>Integrate external applications into context menu. The following macros are available:</source> -<target>æ•´åˆä¸Šä¸‹æ–‡åŠŸèƒ½è¡¨ä¸çš„外部應用程å¼ã€‚å¯ä»¥ä½¿ç”¨ä¸‹é¢çš„巨集:</target> +<target>æ•´åˆå…§å®¹åŠŸèƒ½è¡¨ä¸çš„外部應用程å¼ã€‚å¯ä»¥ä½¿ç”¨ä¸‹é¢çš„巨集:</target> <source>- full file or folder name</source> <target>- 完整檔案或資料夾å稱</target> @@ -1320,8 +1358,8 @@ Note: File paths must be relative to base directories. <source>- Other side's counterpart to %item_folder%</source> <target>- å¦ä¸€é‚Šå°æ‡‰åˆ° %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>使隱è—çš„è¦å‘Šå’Œå°è©±æ¡†å†æ¬¡å¯è¦‹ï¼Ÿ</target> +<source>Restore all hidden windows and warnings?</source> +<target>還原所有隱è—的視窗和è¦å‘Šï¼Ÿ</target> <source>Leave as unresolved conflict</source> <target>ä¿ç•™çµ¦æœªè§£æ±ºçš„è¡çª</target> @@ -1378,10 +1416,10 @@ Note: File paths must be relative to base directories. <target>無法寫入 %x 的修改時間。</target> <source>Cannot read security context of %x.</source> -<target>ç„¡æ³•è®€å– %x 的安全上下文。</target> +<target>ç„¡æ³•è®€å– %x 的安全內容。</target> <source>Cannot write security context of %x.</source> -<target>無法寫入 %x 的安全上下文。</target> +<target>無法寫入 %x 的安全內容。</target> <source>Cannot read permissions of %x.</source> <target>ç„¡æ³•è®€å– %x 的權é™ã€‚</target> @@ -1443,14 +1481,14 @@ Note: File paths must be relative to base directories. <pluralform>%x 天</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>登錄接收系統訊æ¯å¤±æ•—。</target> +<source>Unable to register to receive system messages.</source> +<target>無法登錄接收系統訊æ¯ã€‚</target> <source>Cannot set privilege %x.</source> <target>無法è¨å®šæ¬Šé™ %x。</target> -<source>Failed to suspend system sleep mode.</source> -<target>ä¸æ¢ç³»çµ±ç¡çœ 模å¼å¤±æ•—。</target> +<source>Unable to suspend system sleep mode.</source> +<target>無法ä¸æ¢ç³»çµ±ç¡çœ 模å¼ã€‚</target> <source>Cannot change process I/O priorities.</source> <target>無法更改I/O處ç†å„ªå…ˆé †åºã€‚</target> diff --git a/BUILD/Languages/croatian.lng b/BUILD/Languages/croatian.lng index 1db53365..3bf1410c 100644 --- a/BUILD/Languages/croatian.lng +++ b/BUILD/Languages/croatian.lng @@ -2,14 +2,271 @@ <language>Hrvatski</language> <translator>Miroslav Vranić</translator> <locale>hr_HR</locale> - <flag_image>flag_croatia.png</flag_image> - <plural_form_count>3</plural_form_count> + <image>flag_croatia.png</image> + <plural_count>3</plural_count> <plural_definition>n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2</plural_definition> </header> +<source>Unable to suspend system sleep mode.</source> +<target></target> + +<source>Unable to register to receive system messages.</source> +<target></target> + +<source>Restore all hidden windows and warnings?</source> +<target></target> + +<source>Move</source> +<target></target> + +<source>Stopped</source> +<target></target> + +<source>Serious Error</source> +<target></target> + +<source>Comparison Settings</source> +<target></target> + +<source>Synchronization Settings</source> +<target></target> + +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>Select View</source> +<target></target> + +<source>Filter Files</source> +<target></target> + +<source>Main Bar</source> +<target></target> + +<source>Folder Pairs</source> +<target></target> + +<source>Select Time Span</source> +<target></target> + +<source>Global Settings</source> +<target></target> + +<source>Delete Items</source> +<target></target> + +<source>Save as Batch Job</source> +<target></target> + +<source>Restore hidden windows</source> +<target></target> + +<source>Customize context menu:</source> +<target></target> + +<source>Delay (in seconds):</source> +<target></target> + +<source>Retry count:</source> +<target></target> + +<source>Automatic retry on error:</source> +<target></target> + +<source>Transfer file and folder permissions.</source> +<target></target> + +<source>(requires administrator rights)</source> +<target></target> + +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target></target> + +<source>(recommended)</source> +<target></target> + +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target></target> + +<source>The following settings are used for all synchronization jobs.</source> +<target></target> + +<source>Maximum:</source> +<target></target> + +<source>Minimum:</source> +<target></target> + +<source>File size:</source> +<target></target> + +<source>Time span:</source> +<target></target> + +<source>Exclude:</source> +<target></target> + +<source>Include:</source> +<target></target> + +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target></target> + +<source>&Recycle bin</source> +<target></target> + +<source>How can I schedule a batch job?</source> +<target></target> + +<source>Limit:</source> +<target></target> + +<source>Save log:</source> +<target></target> + +<source>Stop synchronization at first error</source> +<target></target> + +<source>Stop</source> +<target></target> + +<source>Variant:</source> +<target></target> + +<source>Start synchronization now?</source> +<target></target> + +<source>On completion:</source> +<target></target> + +<source>Handle errors:</source> +<target></target> + +<source>Show examples</source> +<target></target> + +<source>Delete files:</source> +<target></target> + +<source>Copy new and updated files to the right folder.</source> +<target></target> + +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target></target> + +<source>More information</source> +<target></target> + +<source>Symbolic links:</source> +<target></target> + +<source>Identify equal files by comparing the file content.</source> +<target></target> + +<source>Identify equal files by comparing modification time and size.</source> +<target></target> + +<source>Select a variant:</source> +<target></target> + +<source>Find:</source> +<target></target> + <source>Close search bar</source> <target></target> +<source>&Check for new version</source> +<target></target> + +<source>&Find...</source> +<target></target> + +<source>Local Filter</source> +<target></target> + +<source>Alternate Synchronization Settings</source> +<target></target> + +<source>Alternate Comparison Settings</source> +<target></target> + +<source>None</source> +<target></target> + +<source>Active</source> +<target></target> + +<source>Local filter</source> +<target></target> + +<source>Alternate synchronization settings</source> +<target></target> + +<source>Alternate comparison settings</source> +<target></target> + +<source>Check for Program Updates</source> +<target></target> + +<source>Retrying operation</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + +<source>Switching to FreeFileSync's main window</source> +<target></target> + +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target></target> + +<source>Synchronization stopped</source> +<target></target> + +<source>Please enter a target folder for versioning.</source> +<target></target> + +<source>Incorrect command line:</source> +<target></target> + +<source>Automated Synchronization</source> +<target></target> + +<source>&Start</source> +<target></target> + +<source>Command line:</source> +<target></target> + +<source>Idle time (in seconds):</source> +<target></target> + +<source>Folders to watch:</source> +<target></target> + +<source>&View help</source> +<target></target> + +<source>Unable to create timestamp for versioning:</source> +<target></target> + +<source>Stop requested: Waiting for current operation to finish...</source> +<target></target> + +<source>%x items/sec</source> +<target></target> + <source>Both sides have changed since last synchronization.</source> <target>Obje su strane promjenjene od posljednje sinkronizacije.</target> @@ -298,9 +555,6 @@ <source>/sec</source> <target>/sek</target> -<source>%x items</source> -<target>%x stavke</target> - <source>Configuration file %x loaded partially only.</source> <target>Datoteka postavki %x uÄitana samo djelomiÄno</target> @@ -328,12 +582,6 @@ <source>Volume name %x is not part of file path %y.</source> <target>Ime voumena %x nije dio puta datotke %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Prekid zahtjevan: Äekam da se trenutna akcija zavrÅ¡i...</target> - -<source>Failure to create timestamp for versioning:</source> -<target>Nije moguća vremenska oznaka za varijantu</target> - <source>Cannot read the following XML elements:</source> <target>Ne mogu Äitati slijedeće XML elemente</target> @@ -349,9 +597,6 @@ <source>&Program</source> <target>&Program</target> -<source>&Content</source> -<target>&Sadržaj</target> - <source>&About</source> <target>&O programu</target> @@ -373,9 +618,6 @@ <source>To get started just import a .ffs_batch file.</source> <target>Za zapoÄeti uvezite .ffs slijednu datoteku.</target> -<source>Folders to watch</source> -<target>Mape za nadziranje</target> - <source>Add folder</source> <target>Dodaj mapu</target> @@ -388,9 +630,6 @@ <source>Select a folder</source> <target>Izaberite mapu</target> -<source>Idle time [seconds]</source> -<target>Vrijeme mirovanja [sekundi]</target> - <source>Idle time between last detected change and execution of command</source> <target>Vrijeme Äekanja izmeÄ‘u zadnje prepoznate promjene i izvrÅ¡enja naredbe</target> @@ -405,18 +644,12 @@ Naredba će biti pokrenuta ako se: - nove mape pojave (npr. umetanje USB sticka) </target> -<source>Start</source> -<target>Start</target> - <source>&Retry</source> <target>&Ponovi</target> <source>Cancel</source> <target>Odustani</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Automatska Sinkronizacija</target> - <source>Build: %x</source> <target>InaÄnica: %x</target> @@ -441,9 +674,6 @@ Naredba će biti pokrenuta ako se: <source>&Exit</source> <target>&Izlaz</target> -<source>Invalid command line:</source> -<target>NetoÄna naredba:</target> - <source>File content</source> <target>Sadržaj datoteke</target> @@ -504,9 +734,6 @@ Naredba će biti pokrenuta ako se: <source>Target folder input field must not be empty.</source> <target>OdrediÅ¡na mapa ne može biti prazna.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Mapa unosa ne smije biti prazna.</target> - <source>Source folder %x not found.</source> <target>Izvorna mapa %x nije pronaÄ‘ena.</target> @@ -543,9 +770,6 @@ Naredba će biti pokrenuta ako se: <source>job name</source> <target>Ime zadatka</target> -<source>Synchronization aborted</source> -<target>Sinkronizacija prekinuta</target> - <source>Synchronization completed with errors</source> <target>Sinkronizacija zavrÅ¡ena s greÅ¡kama</target> @@ -561,24 +785,12 @@ Naredba će biti pokrenuta ako se: <source>Saving log file %x...</source> <target>Spremam izješće %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Preisni "Zamjeni" za rijeÅ¡avanje problema u FreeFileSync glavnom dijaloÅ¡kom okviru</target> - -<source>Switching to FreeFileSync main dialog</source> -<target>Prebacujem na FreeFileSync glavni dijaloÅ¡ki prozor</target> - -<source>Retrying operation after error:</source> -<target>Ponavljam operaciju nakon greÅ¡ke:</target> - <source>A new version of FreeFileSync is available:</source> <target>Nova verzija FreeFileSync je dostupna:</target> <source>Download now?</source> <target>Preuzeti sada?</target> -<source>New version found</source> -<target>Nova verzija je naÄ‘ena</target> - <source>&Download</source> <target>&Preuzmi</target> @@ -645,21 +857,6 @@ Naredba će biti pokrenuta ako se: <source>Hibernate</source> <target>Hibernacija</target> -<source>Selected variant:</source> -<target>Odaberite naÄin</target> - -<source>Select alternate comparison settings</source> -<target>Izaberite alternativne postavke usporedbe</target> - -<source>Select alternate synchronization settings</source> -<target>Izaberite alternativne postavke sinkronizacije</target> - -<source>Filter is active</source> -<target>Filter je aktivan</target> - -<source>No filter selected</source> -<target>Nijedan filter odabran</target> - <source>Remove alternate settings</source> <target>Ukloni alternativne postavke</target> @@ -687,15 +884,15 @@ Naredba će biti pokrenuta ako se: <source>2. &Synchronize</source> <target>2. &Sinkroniziraj</target> +<source>&Global settings</source> +<target>&Globalne postavke</target> + <source>&Language</source> <target>&Jezik</target> <source>&Export file list...</source> <target>&Izvoz liste datoteka...</target> -<source>&Global settings</source> -<target>&Globalne postavke</target> - <source>&Tools</source> <target>&Alati</target> @@ -705,9 +902,6 @@ Naredba će biti pokrenuta ako se: <source>Check &automatically once a week</source> <target>Provjeri &automatski jednom tjedno</target> -<source>Check for new &version</source> -<target>Prvojeri dostupnost nove &verzije</target> - <source>Compare</source> <target>Usporedi</target> @@ -723,9 +917,6 @@ Naredba će biti pokrenuta ako se: <source>Swap sides</source> <target>Zamjeni strane</target> -<source>Find what:</source> -<target>NaÄ‘i Å¡to:</target> - <source>Match case</source> <target>Poklopi se</target> @@ -750,87 +941,12 @@ Naredba će biti pokrenuta ako se: <source>Total bytes to copy</source> <target>Ukupno bajta za kopirati</target> -<source>Items found:</source> -<target>PronaÄ‘ene stavke:</target> - -<source>Speed:</source> -<target>Brzina:</target> - -<source>Time remaining:</source> -<target>Preostalo vremena:</target> - -<source>Time elapsed:</source> -<target>Proteklo vremena:</target> - -<source>Synchronizing...</source> -<target>Sinkroniziram...</target> - -<source>Minimize to notification area</source> -<target>Spusti u notifikacije</target> - -<source>On completion</source> -<target>Pri zavrÅ¡etku</target> - -<source>Close</source> -<target>Zatvori</target> - -<source>&Pause</source> -<target>&Pauziraj</target> - -<source>Variant</source> -<target>NaÄin</target> - -<source>Statistics</source> -<target>Statistika</target> - -<source>&Don't show this dialog again</source> -<target>&Nemoj viÅ¡e prikazivati ovaj dijaloÅ¡ki prozor</target> - -<source>Select a variant</source> -<target>Odaberite varijantu</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Datoteke se smatraju jednake ako su im - - vrijeme zadnje promjene i datum - - veliÄina datoteke -jednaki -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Datoteke se smatraju jednake ako im je - - sadržaj datoteke -jednak -</target> - -<source>Symbolic Link handling</source> -<target>Upravljanje simboliÄnim poveznicama</target> - -<source>Help</source> -<target>Pomoć</target> - <source>OK</source> <target>U redu</target> <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>PronaÄ‘i i izvrÅ¡i izmjene na obje strane. Izbrisano, premjeÅ¡teno te sukobe se otkrije automatski pomoću baze.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Zrcalna priÄuva lijeve mape. Desna mapa je ureÄ‘ena da bi bila jednaka lijevom folderu nakon sinkronizacije.</target> - -<source>Copy new or updated files to right folder.</source> -<target>Kopiraj nove ili ažurirane datoteke u desnu mapu.</target> - <source>Configure your own synchronization rules.</source> <target>Konfigurirajte vaÅ¡a vlastita sinkronizacijska pravila.</target> @@ -840,24 +956,6 @@ jednak <source>Requires database files. Not supported by all file systems.</source> <target>Zahtjevaju se datoteke baze. Nisu podržai svi datoteÄni sustavi.</target> -<source>Error handling</source> -<target>GreÅ¡ka pri obradi</target> - -<source>Ignore</source> -<target>Ignoriraj</target> - -<source>Hide all error and warning messages</source> -<target>Sakrij sve greÅ¡ke i upozorenja</target> - -<source>Pop-up</source> -<target>Pop-up</target> - -<source>Show pop-up on errors or warnings</source> -<target>Prikaži skoÄni prozor pri greÅ¡kama i upozorenjima</target> - -<source>Deletion handling</source> -<target>Upravljanje pri brisanju</target> - <source>Permanent</source> <target>Trajno</target> @@ -879,96 +977,75 @@ jednak <source>Naming convention:</source> <target>Pravilo imena:</target> -<source>Batch job</source> -<target>Slijedni zadatak</target> +<source>Ignore</source> +<target>Ignoriraj</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Stvaranje batch datoteka za sinkronizaciju bez nadzora. Za poÄetak, dvaput kliknite na ovu datoteku ili planirajte u planeru zadataka: %x</target> +<source>Hide all error and warning messages</source> +<target>Sakrij sve greÅ¡ke i upozorenja</target> -<source>Exit</source> -<target>IzaÄ‘i</target> +<source>Pop-up</source> +<target>Pop-up</target> -<source>Abort synchronization on first error</source> -<target>Prekini sinkronizaciju pri prvoj pogreÅ¡ci</target> +<source>Show pop-up on errors or warnings</source> +<target>Prikaži skoÄni prozor pri greÅ¡kama i upozorenjima</target> -<source>Show progress dialog</source> -<target>Prikaži napredak</target> +<source>Statistics</source> +<target>Statistika</target> -<source>Save log</source> -<target>Spremi izvješće</target> +<source>&Don't show this dialog again</source> +<target>&Nemoj viÅ¡e prikazivati ovaj dijaloÅ¡ki prozor</target> -<source>Select folder to save log files</source> -<target>Odaberi mapu za spremanje izvješća</target> +<source>Items found:</source> +<target>PronaÄ‘ene stavke:</target> -<source>Limit</source> -<target>OgraniÄi</target> +<source>Speed:</source> +<target>Brzina:</target> -<source>Limit maximum number of log files</source> -<target>OgraniÄi maksimalan broj izvješća</target> +<source>Time remaining:</source> +<target>Preostalo vremena:</target> -<source>Delete on both sides</source> -<target>IzbriÅ¡i na obje strane</target> +<source>Time elapsed:</source> +<target>Proteklo vremena:</target> -<source>Delete on both sides even if the file is selected on one side only</source> -<target>IzbriÅ¡i na obje strane iako je oznaÄena datoteka samo na jednoj strani</target> +<source>Synchronizing...</source> +<target>Sinkroniziram...</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Datoteke će biti kopirane ukoliko zadovolje sve zahtjeve filtera. -Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. -</target> +<source>Minimize to notification area</source> +<target>Spusti u notifikacije</target> -<source>Include</source> -<target>UkljuÄi</target> +<source>Close</source> +<target>Zatvori</target> -<source>Exclude</source> -<target>IskljuÄi</target> +<source>&Pause</source> +<target>&Pauziraj</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Stvaranje batch datoteka za sinkronizaciju bez nadzora. Za poÄetak, dvaput kliknite na ovu datoteku ili planirajte u planeru zadataka: %x</target> -<source>Time span</source> -<target>Vremensko ograniÄenje</target> +<source>Show progress dialog</source> +<target>Prikaži napredak</target> -<source>File size</source> -<target>VeliÄina datoteke</target> +<source>Limit maximum number of log files</source> +<target>OgraniÄi maksimalan broj izvješća</target> -<source>Minimum</source> -<target>Minimum</target> +<source>Delete on both sides</source> +<target>IzbriÅ¡i na obje strane</target> -<source>Maximum</source> -<target>Maksimum</target> +<source>Delete on both sides even if the file is selected on one side only</source> +<target>IzbriÅ¡i na obje strane iako je oznaÄena datoteka samo na jednoj strani</target> <source>&Clear</source> <target>&Brisati</target> -<source>Global settings</source> -<target>Globalne postavke</target> - <source>Fail-safe file copy</source> <target>Kopiranje zaÅ¡tićeno od greÅ¡aka</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Prvo kopiraj u privremenu datoteku (*ffs_tmp) zatim promijeni ime. Ovo osigurava dosljedno stanje Äak i kod fatalne greÅ¡ke.</target> - <source>Copy locked files</source> <target>Kopiraj zakljuÄane datoteke</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Kopiraj dijeljene ili zakljuÄane datoteke koristeći Volume Shadow Copy servis (potrebna su administratorska ovlaÅ¡tenja)</target> - <source>Copy file access permissions</source> <target>Kopiraj datoteÄna dopuÅ¡tenja</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Prenesi dozvole za mape i datoteke (potrebna su administratorska ovlaÅ¡tenja)</target> - -<source>Restore hidden dialogs</source> -<target>Prikaži skrivene prozore</target> - -<source>External applications</source> -<target>Vanjske aplikacije</target> - <source>Description</source> <target>Opis</target> @@ -999,27 +1076,6 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>Many thanks for localization:</source> <target>Velike zahvale idu:</target> -<source>Start synchronization</source> -<target>ZapoÄni sinkronizaciju</target> - -<source>Comparison settings</source> -<target>Postavke usporedbe</target> - -<source>Synchronization settings</source> -<target>Postavke sinkronizacije</target> - -<source>Delete</source> -<target>IzbriÅ¡i</target> - -<source>Configure filter</source> -<target>Konfiguriraj filter</target> - -<source>Select time span</source> -<target>Izaberite mjerni raspon</target> - -<source>Folder pairs</source> -<target>Par mape</target> - <source>Find</source> <target>PronaÄ‘i</target> @@ -1029,15 +1085,6 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>Configuration</source> <target>Postavke</target> -<source>Main bar</source> -<target>Glavna traka</target> - -<source>Filter files</source> -<target>Filtriraj datoteke</target> - -<source>Select view</source> -<target>Izaberite pogled</target> - <source>Open...</source> <target>Otvori...</target> @@ -1047,15 +1094,14 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>Compare both sides</source> <target>Usporedi obje strane</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Dali stvarno želite izvrÅ¡iti nardebu %y za %x stavku?</pluralform> -<pluralform>Dali stvarno želite izvrÅ¡iti nardebu %y za %x stavke?</pluralform> -<pluralform>Dali stvarno želite izvrÅ¡iti nardebu %y za %x stavki?</pluralform> -</target> +<source>Comparison settings</source> +<target>Postavke usporedbe</target> + +<source>Synchronization settings</source> +<target>Postavke sinkronizacije</target> + +<source>Start synchronization</source> +<target>ZapoÄni sinkronizaciju</target> <source>Confirm</source> <target>Potvrdi</target> @@ -1111,6 +1157,9 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>Include temporarily</source> <target>Trenutno ukljuÄi</target> +<source>Delete</source> +<target>IzbriÅ¡i</target> + <source>Include all</source> <target>UkljuÄi sve</target> @@ -1159,6 +1208,9 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>Never save &changes</source> <target>Nikad ne spremaj &promjene</target> +<source>Filter</source> +<target>Filtriranje</target> + <source>Show files that exist on left side only</source> <target>Prikaži datoteke koje postoje samo na lijevoj strani</target> @@ -1204,9 +1256,6 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>Set as default</source> <target>Postavi kao zadano</target> -<source>Operation aborted</source> -<target>Operacija otkazana</target> - <source>All folders are in sync</source> <target>Sve mape su u sinkronizaciji</target> @@ -1228,18 +1277,12 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>&Ignore</source> <target>&Ignoriraj</target> -<source>Fatal Error</source> -<target>KritiÄna greÅ¡ka</target> - <source>&Don't show this warning again</source> <target>&Ne prikazuj viÅ¡e ovo upozorenje.</target> <source>&Switch</source> <target>&Zamjeni</target> -<source>Question</source> -<target>Pitanje</target> - <source>&Yes</source> <target>&Da</target> @@ -1261,9 +1304,6 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>Initializing...</source> <target>UÄitavam</target> -<source>Aborted</source> -<target>Prekinuto</target> - <source>Completed</source> <target>ZavrÅ¡eno</target> @@ -1273,9 +1313,6 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>Log</source> <target>Dnevnik</target> -<source>Inactive</source> -<target>Neaktivno</target> - <source>Today</source> <target>Danas</target> @@ -1300,9 +1337,6 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filtriranje</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1323,6 +1357,9 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <pluralform>Dali stvarno želite obristi sljedećih %x stavki?</pluralform> </target> +<source>Exclude</source> +<target>IskljuÄi</target> + <source>Direct</source> <target>Neposredno</target> @@ -1347,9 +1384,6 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <source>- Other side's counterpart to %item_folder%</source> <target>- Duplikat s druge strane u %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Vrati skrivena upozorenja i dijaloÅ¡ki okvir ponovno vidljivim?</target> - <source>Leave as unresolved conflict</source> <target>Ostavi kao nerijeÅ¡eni sukob</target> @@ -1476,15 +1510,9 @@ Pažnja: Putanje datoteka moraju biti relativne na ishodni direktorij. <pluralform>%x dana</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Neuspijela registracija za primanje sistemskih poruka.</target> - <source>Cannot set privilege %x.</source> <target>Ne mogu postaviti prava za %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Nije moguće odgoditi mod spavanja raÄunala</target> - <source>Cannot change process I/O priorities.</source> <target>Ne može se promjeniti proces I/O prioriteta</target> diff --git a/BUILD/Languages/czech.lng b/BUILD/Languages/czech.lng index 9762fbb7..1e49b62e 100644 --- a/BUILD/Languages/czech.lng +++ b/BUILD/Languages/czech.lng @@ -2,11 +2,28 @@ <language>ÄŒeÅ¡tina</language> <translator>ViCi</translator> <locale>cs_CZ</locale> - <flag_image>flag_czech_republic.png</flag_image> - <plural_form_count>3</plural_form_count> + <image>flag_czech_republic.png</image> + <plural_count>3</plural_count> <plural_definition>n==1 ? 0 : n>=2 && n<=4 ? 1 : 2</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>Retrying operation</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>DoÅ¡lo ke zmÄ›nÄ› obou stran od poslednà synchronizace.</target> @@ -295,8 +312,8 @@ <source>/sec</source> <target>/s</target> -<source>%x items</source> -<target>%x položek</target> +<source>%x items/sec</source> +<target>%x položek/s</target> <source>Configuration file %x loaded partially only.</source> <target>Konfigurace ze souboru %x byla naÄtena jen ÄásteÄnÄ›.</target> @@ -325,11 +342,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Název disku %x nenà souÄástà cesty souboru %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Požadavek na pÅ™eruÅ¡enÃ: ÄŒekánà na ukonÄenà aktuálnà operace...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>ZastavovánÃ: ÄŒekánà na dokonÄenà právÄ› probÃhajÃcà operace...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Chyba pÅ™i vytvoÅ™enà Äasové znaÄky verzovánÃ:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Nelze vytvoÅ™it Äasové znaÄky verzovánÃ:</target> <source>Cannot read the following XML elements:</source> <target>Nelze naÄÃst následujÃcà XML elementy:</target> @@ -346,8 +363,8 @@ <source>&Program</source> <target>&Nástroje</target> -<source>&Content</source> -<target>&Obsah</target> +<source>&View help</source> +<target>&NápovÄ›da (pouze anglicky)</target> <source>&About</source> <target>O &Programu</target> @@ -370,8 +387,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Můžete naÄÃst také konfiguraÄnà soubor .ffs_batch</target> -<source>Folders to watch</source> -<target>Složka ke sledovánÃ</target> +<source>Folders to watch:</source> +<target>Sledovaná složka:</target> <source>Add folder</source> <target>PÅ™idat adresář</target> @@ -385,12 +402,15 @@ <source>Select a folder</source> <target>Vyberte adresář</target> -<source>Idle time [seconds]</source> -<target>Prodleva (v sekundách)</target> +<source>Idle time (in seconds):</source> +<target>Prodleva (v sekundách):</target> <source>Idle time between last detected change and execution of command</source> <target>Prodleva mezi zjiÅ¡tÄ›nÃm poslednà zmÄ›ny a spuÅ¡tÄ›nÃm pÅ™Ãkazu</target> +<source>Command line:</source> +<target>PÅ™Ãkazová řádka:</target> + <source> The command is triggered if: - files or subfolders change @@ -402,8 +422,8 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: - je zjiÅ¡tÄ›na nová složka (napÅ™. vloženÃm USB disku) </target> -<source>Start</source> -<target>Start</target> +<source>&Start</source> +<target>&Start</target> <source>&Retry</source> <target>&Opakovat</target> @@ -411,18 +431,18 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Cancel</source> <target>ZruÅ¡it</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Automatická synchronizace</target> - <source>Build: %x</source> <target>Verze: %x</target> <source>About</source> -<target>O Programu</target> +<target>O programu</target> <source>All files</source> <target>VÅ¡echny soubory</target> +<source>Automated Synchronization</source> +<target>Automatická synchronizace</target> + <source>Directory monitoring active</source> <target>Sledovánà adresářů je aktivnÃ</target> @@ -438,7 +458,7 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>&Exit</source> <target>&Konec</target> -<source>Invalid command line:</source> +<source>Incorrect command line:</source> <target>Neplatný pÅ™Ãkaz:</target> <source>File content</source> @@ -501,8 +521,8 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Target folder input field must not be empty.</source> <target>CÃlová složka nesmà být prázdná.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Složka pro verzovánà souborů nesmà být prázdná.</target> +<source>Please enter a target folder for versioning.</source> +<target>ProsÃm zadejte cÃlovou složku pro verzovánÃ.</target> <source>Source folder %x not found.</source> <target>Zdrojovou složku %x nelze najÃt.</target> @@ -540,8 +560,8 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>job name</source> <target>název úlohy</target> -<source>Synchronization aborted</source> -<target>Synchronizace zruÅ¡ena</target> +<source>Synchronization stopped</source> +<target>Synchronizace zastavena</target> <source>Synchronization completed with errors</source> <target>Synchronizace dokonÄena s chybami</target> @@ -558,23 +578,20 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Saving log file %x...</source> <target>Ukládánà žurnálu %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Použijte tlaÄÃtko "PÅ™epnout" k vyÅ™eÅ¡enà problému pomocà hlavnÃho okna FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>K odstranÄ›nà tohoto problému se pÅ™epnÄ›te do hlavnÃho okna FreeFileSync.</target> -<source>Switching to FreeFileSync main dialog</source> +<source>Switching to FreeFileSync's main window</source> <target>PÅ™epÃnánà do hlavnÃho okna FreeFileSync</target> -<source>Retrying operation after error:</source> -<target>Opakovanà operace po chybÄ›:</target> - <source>A new version of FreeFileSync is available:</source> <target>Je dostupná novÄ›jÅ¡Ã verze FreeFileSync:</target> <source>Download now?</source> <target>Stáhnout nynÃ?</target> -<source>New version found</source> -<target>Nalezena novÄ›jÅ¡Ã verze</target> +<source>Check for Program Updates</source> +<target>Hledánà aktualizacà programu</target> <source>&Download</source> <target>&StahovánÃ</target> @@ -642,20 +659,20 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Hibernate</source> <target>PÅ™epnout do režimu spánku</target> -<source>Selected variant:</source> -<target>Vybraná varianta:</target> +<source>Alternate comparison settings</source> +<target>Jiné nastavenà porovnánÃ</target> -<source>Select alternate comparison settings</source> -<target>ZmÄ›nit nastavenà porovnánÃ</target> +<source>Alternate synchronization settings</source> +<target>Jiné nastavenà synchronizace</target> -<source>Select alternate synchronization settings</source> -<target>ZmÄ›nit nastavenà synchronizace</target> +<source>Local filter</source> +<target>MÃstnà filtr</target> -<source>Filter is active</source> -<target>Filtr je zapnutý</target> +<source>Active</source> +<target>Zapnutý</target> -<source>No filter selected</source> -<target>Nenà vybrán žádný filtr</target> +<source>None</source> +<target>Žádný</target> <source>Remove alternate settings</source> <target>ZruÅ¡it jiné nastavenÃ</target> @@ -669,6 +686,15 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Paste</source> <target>Vložit</target> +<source>Alternate Comparison Settings</source> +<target>Jiné nastavenà porovnánÃ</target> + +<source>Alternate Synchronization Settings</source> +<target>Jiné nastavenà synchronizace</target> + +<source>Local Filter</source> +<target>MÃstnà filtr</target> + <source>&New</source> <target>&Nový</target> @@ -684,15 +710,18 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>2. &Synchronize</source> <target>2. &Synchronizovat</target> +<source>&Global settings</source> +<target>&Nastavenà programu</target> + <source>&Language</source> <target>&Jazyk</target> +<source>&Find...</source> +<target>&NajÃt...</target> + <source>&Export file list...</source> <target>&Exportovat seznam souborů...</target> -<source>&Global settings</source> -<target>&Nastavenà programu</target> - <source>&Tools</source> <target>&UpÅ™esnit</target> @@ -702,7 +731,7 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Check &automatically once a week</source> <target>Kontrolovat &automaticky jednou týdnÄ›</target> -<source>Check for new &version</source> +<source>&Check for new version</source> <target>&Zkontrolovat aktualizace</target> <source>Compare</source> @@ -720,6 +749,15 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Swap sides</source> <target>ZmÄ›na stran</target> +<source>Close search bar</source> +<target>ZavÅ™Ãt hledánÃ</target> + +<source>Find:</source> +<target>NajÃt:</target> + +<source>Match case</source> +<target>RozliÅ¡ovat malá a velká pÃsmena</target> + <source>Save as batch job</source> <target>Uložit jako dávku</target> @@ -741,74 +779,20 @@ PÅ™Ãkaz je spuÅ¡tÄ›n když: <source>Total bytes to copy</source> <target>Celkový objem dat</target> -<source>Items found:</source> -<target>Nalezeno položek:</target> - -<source>Speed:</source> -<target>Rychlost:</target> - -<source>Time remaining:</source> -<target>ZbývajÃcà Äas:</target> - -<source>Time elapsed:</source> -<target>Uplynulý Äas:</target> - -<source>Synchronizing...</source> -<target>Synchronizuji...</target> - -<source>Minimize to notification area</source> -<target>Minimalizovat do oznamovacà oblasti</target> +<source>Select a variant:</source> +<target>VýbÄ›r varianty:</target> -<source>On completion</source> -<target>Po dokonÄenÃ</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Rozpoznat shodné soubory porovnánÃm jejich data zmÄ›ny a velikosti.</target> -<source>Close</source> -<target>ZavÅ™Ãt</target> - -<source>&Pause</source> -<target>&Pauza</target> - -<source>Variant</source> -<target>Varianta</target> - -<source>Statistics</source> -<target>Statistika</target> - -<source>&Don't show this dialog again</source> -<target>Tento dialog již &nezobrazovat</target> +<source>Identify equal files by comparing the file content.</source> +<target>Rozpoznat shodné soubory porovnánÃm jejich obsahu.</target> -<source>Select a variant</source> -<target>VýbÄ›r možnosti</target> +<source>Symbolic links:</source> +<target>Symbolickéh odkazy:</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Soubory jsou shodné jestliže - - datum i Äas poslednà zmÄ›ny - - velikost souboru -jsou stejné -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Soubory jsou shodné jestliže - - obsah souboru -je stejný -</target> - -<source>Symbolic Link handling</source> -<target>Zpracovánà symbolických odkazů</target> - -<source>Help</source> -<target>NápovÄ›da</target> +<source>More information</source> +<target>VÃce informacÃ</target> <source>OK</source> <target>OK</target> @@ -816,11 +800,11 @@ je stejný <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Rozpoznat a provést zmÄ›ny na obou stranách. OdstranÄ›né, pÅ™esunuté nebo pÅ™ejmenované soubory a konflikty budou detekovány automaticky pomocà databáze.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Zrcadlenà levého adresáře. Pravý adresář bude zmÄ›nÄ›n tak, aby po synchronizaci byl totožný s levým.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>VytvoÅ™it zrcadlovou kopii levé složky tak, aby po synchronizci pravá složka pÅ™esnÄ› odpovÃdala levé.</target> -<source>Copy new or updated files to right folder.</source> -<target>KopÃrovat nové nebo aktualizované soubory do adresáře vpravo.</target> +<source>Copy new and updated files to the right folder.</source> +<target>KopÃrovat nové a aktualizované soubory do pravé složky.</target> <source>Configure your own synchronization rules.</source> <target>Nastavenà vlastnÃch pravidel synchronizace.</target> @@ -831,23 +815,8 @@ je stejný <source>Requires database files. Not supported by all file systems.</source> <target>Je nutný soubor databáze. Toto nenà dostupné na vÅ¡ech systémech.</target> -<source>Error handling</source> -<target>Zpracovánà chyb</target> - -<source>Ignore</source> -<target>PÅ™eskoÄit</target> - -<source>Hide all error and warning messages</source> -<target>Skrýt vÅ¡echny chyby a varovánÃ</target> - -<source>Pop-up</source> -<target>HlášenÃ</target> - -<source>Show pop-up on errors or warnings</source> -<target>Zobrazit hlášenà pÅ™i chybÄ› nebo varovánÃ</target> - -<source>Deletion handling</source> -<target>Nastavenà mazánÃ</target> +<source>Delete files:</source> +<target>Mazánà souborů:</target> <source>Permanent</source> <target>Trvale</target> @@ -870,56 +839,89 @@ je stejný <source>Naming convention:</source> <target>PojmenovánÃ:</target> -<source>Batch job</source> -<target>Dávkový soubor</target> +<source>Show examples</source> +<target>Ukázat pÅ™Ãklady</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Vytvořà dávkový souboru pro automatickou synchronizaci. Ke spuÅ¡tÄ›nà dávky jednoduÅ¡e poklikejte na vytvoÅ™ený soubor nebo využijte plánovaÄ Ãºloh vaÅ¡eho systému: %x</target> +<source>Handle errors:</source> +<target>Zpracovánà chyb:</target> -<source>Exit</source> -<target>Konec</target> +<source>Ignore</source> +<target>PÅ™eskoÄit</target> -<source>Abort synchronization on first error</source> -<target>UkonÄit synchronizaci pÅ™i prvnà chybÄ›</target> +<source>Hide all error and warning messages</source> +<target>Skrýt vÅ¡echny chyby a varovánÃ</target> -<source>Show progress dialog</source> -<target>Zobrazit průbÄ›h zpracovánÃ</target> +<source>Pop-up</source> +<target>HlášenÃ</target> -<source>Save log</source> -<target>Uložit žurnál</target> +<source>Show pop-up on errors or warnings</source> +<target>Zobrazit hlášenà pÅ™i chybÄ› nebo varovánÃ</target> -<source>Select folder to save log files</source> -<target>Vyberte složku pro žurnály</target> +<source>On completion:</source> +<target>Po dokonÄenÃ:</target> -<source>Limit</source> -<target>OmezenÃ</target> +<source>Start synchronization now?</source> +<target>ZaÄÃt synchronizovat nynÃ?</target> -<source>Limit maximum number of log files</source> -<target>Omezenà maximálnÃho poÄtu žurnálů</target> +<source>Variant:</source> +<target>Varianta:</target> -<source>Source code written in C++ using:</source> -<target>Zdrojový kód byl napsán kompletnÄ› v C++ pomocÃ:</target> +<source>Statistics</source> +<target>Statistika</target> -<source>If you like FreeFileSync</source> -<target>Pokud se Vám FreeFileSync lÃbÃ</target> +<source>&Don't show this dialog again</source> +<target>Tento dialog již &nezobrazovat</target> -<source>Donate with PayPal</source> -<target>PÅ™ispÄ›t pomocà PayPal</target> +<source>Items found:</source> +<target>Nalezeno položek:</target> -<source>Feedback and suggestions are welcome</source> -<target>Komentáře a námÄ›ty jsou vždy vÃtány</target> +<source>Speed:</source> +<target>Rychlost:</target> -<source>Homepage</source> -<target>NavÅ¡tivte</target> +<source>Time remaining:</source> +<target>ZbývajÃcà Äas:</target> -<source>Email</source> -<target>NapiÅ¡te</target> +<source>Time elapsed:</source> +<target>Uplynulý Äas:</target> -<source>Published under the GNU General Public License</source> -<target>Vydáno pod GNU General Public License (GPL)</target> +<source>Synchronizing...</source> +<target>Synchronizuji...</target> -<source>Many thanks for localization:</source> -<target>PodÄ›kovánà za pÅ™eklad FreeFileSync:</target> +<source>Minimize to notification area</source> +<target>Minimalizovat do oznamovacà oblasti</target> + +<source>Close</source> +<target>ZavÅ™Ãt</target> + +<source>&Pause</source> +<target>&Pauza</target> + +<source>Stop</source> +<target>UkonÄit</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Vytvořà dávkový souboru pro automatickou synchronizaci. Ke spuÅ¡tÄ›nà dávky jednoduÅ¡e poklikejte na vytvoÅ™ený soubor nebo využijte plánovaÄ Ãºloh vaÅ¡eho systému: %x</target> + +<source>Stop synchronization at first error</source> +<target>UkonÄit synchronizaci pÅ™i prvnà chybÄ›</target> + +<source>Show progress dialog</source> +<target>Zobrazit průbÄ›h zpracovánÃ</target> + +<source>Save log:</source> +<target>Uložit žurnál:</target> + +<source>Limit:</source> +<target>OmezenÃ:</target> + +<source>Limit maximum number of log files</source> +<target>Omezenà maximálnÃho poÄtu žurnálů</target> + +<source>How can I schedule a batch job?</source> +<target>Jak nastavit spouÅ¡tÄ›nà dávky?</target> + +<source>&Recycle bin</source> +<target>&KoÅ¡</target> <source>Delete on both sides</source> <target>Smazat z obou stran</target> @@ -927,116 +929,137 @@ je stejný <source>Delete on both sides even if the file is selected on one side only</source> <target>Smazat na obou stranách i když je soubor vybrán pouze na jedné z nich</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Pouze soubory odpovÃdajÃcà nastavenému filtru budou vybrány pro synchronizaci. -Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Nastavte pravidla filtru pro vynechánà nÄ›kterých souborů ze synchronizace. Zadávajte cesty relativnÄ› k odpovÃdajÃcà složce.</target> -<source>Include</source> -<target>PÅ™idat</target> +<source>Include:</source> +<target>Zahrnout:</target> -<source>Exclude</source> -<target>Vynechat</target> +<source>Exclude:</source> +<target>Vynechat:</target> -<source>Time span</source> -<target>ÄŒasové rozmezÃ</target> +<source>Time span:</source> +<target>ÄŒasové rozmezÃ:</target> -<source>File size</source> -<target>Velikost souboru</target> +<source>File size:</source> +<target>Velikost soubor:</target> -<source>Minimum</source> -<target>Od</target> +<source>Minimum:</source> +<target>Od:</target> -<source>Maximum</source> -<target>Do</target> +<source>Maximum:</source> +<target>Do:</target> <source>&Clear</source> <target>&Smazat</target> -<source>Global settings</source> -<target>Nastavenà programu</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Toto nastavenà je platné pro vÅ¡echny synchronizaÄnà úlohy.</target> <source>Fail-safe file copy</source> <target>BezpeÄné kopÃrovánà souborů</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>KopÃrovat nejprve do pomocného souboru (*.ffs_tmp) a teprve poté soubor pÅ™ejmenovat. Tento postup zajiÅ¡Å¥uje bezpeÄné chovánà i v pÅ™ÃpadÄ› chyby bÄ›hem pÅ™enosu</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target>KopÃrovat nejprve do pomocného souboru (*.ffs_tmp) pÅ™ed pÅ™episem cÃle. Tento postup zajiÅ¡Å¥uje bezpeÄné chovánà i v pÅ™ÃpadÄ› závažné chyby.</target> + +<source>(recommended)</source> +<target>(doporuÄeno)</target> <source>Copy locked files</source> <target>KopÃrovat zamÄené soubory</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>KopÃrovat sdÃlené nebo zamÄené soubory pomocà služby StÃnové kopie (Vyžaduje administrátorské oprávnÄ›nÃ)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>KopÃrovat sdÃlené nebo zamÄené soubory pomocà služby StÃnové kopie</target> + +<source>(requires administrator rights)</source> +<target>(vyžaduje administrátorská oprávnÄ›nÃ)</target> <source>Copy file access permissions</source> <target>KopÃrovat pÅ™Ãstupová oprávnÄ›nà k souborům</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>PÅ™enést pÅ™Ãstupová oprávnÄ›nà souborů a složek (Vyžaduje administrátorské oprávnÄ›nÃ)</target> +<source>Transfer file and folder permissions.</source> +<target>PÅ™enést pÅ™Ãstupová oprávnÄ›nà souborů a složek</target> -<source>Restore hidden dialogs</source> -<target>Obnovit skryté dialogy</target> +<source>Automatic retry on error:</source> +<target>Automaticky opakovat pÅ™i chybÄ›:</target> + +<source>Retry count:</source> +<target>PoÄet opakovánÃ:</target> -<source>External applications</source> -<target>Externà aplikace</target> +<source>Delay (in seconds):</source> +<target>Prodleva (v sekundách):</target> + +<source>Customize context menu:</source> +<target>PÅ™izpůsobit kontextovou nabÃdku:</target> <source>Description</source> <target>Popis</target> +<source>Restore hidden windows</source> +<target>Obnovit skryté dialogy</target> + <source>&Default</source> <target>&PÅ™eddefinované</target> -<source>Find what:</source> -<target>NajÃt:</target> +<source>Source code written in C++ using:</source> +<target>Zdrojový kód byl napsán kompletnÄ› v C++ pomocÃ:</target> -<source>Match case</source> -<target>RozliÅ¡ovat malá a velká pÃsmena</target> +<source>If you like FreeFileSync</source> +<target>Pokud se Vám FreeFileSync lÃbÃ</target> -<source>&Find next</source> -<target>&NajÃt dalÅ¡Ã</target> +<source>Donate with PayPal</source> +<target>PÅ™ispÄ›t pomocà PayPal</target> -<source>Start synchronization</source> -<target>Start synchronizace</target> +<source>Feedback and suggestions are welcome</source> +<target>Komentáře a námÄ›ty jsou vždy vÃtány</target> -<source>Comparison settings</source> -<target>Nastavenà porovnánÃ</target> +<source>Homepage</source> +<target>NavÅ¡tivte</target> -<source>Synchronization settings</source> -<target>Nastavenà synchronizace</target> +<source>Email</source> +<target>NapiÅ¡te</target> -<source>Delete</source> -<target>Smazat</target> +<source>Published under the GNU General Public License</source> +<target>Vydáno pod GNU General Public License (GPL)</target> + +<source>Many thanks for localization:</source> +<target>PodÄ›kovánà za pÅ™eklad FreeFileSync:</target> -<source>Configure filter</source> -<target>Nastavenà filtru</target> +<source>Save as Batch Job</source> +<target>Uložit jako dávku</target> -<source>Find</source> -<target>NajÃt</target> +<source>Delete Items</source> +<target>Smazané položky</target> -<source>Select time span</source> +<source>Global Settings</source> +<target>Nastavenà programu</target> + +<source>Select Time Span</source> <target>ÄŒasové rozmezÃ</target> -<source>Folder pairs</source> +<source>Folder Pairs</source> <target>Adresářové páry</target> +<source>Find</source> +<target>NajÃt</target> + <source>Overview</source> <target>PÅ™ehled</target> <source>Configuration</source> <target>Konfigurace</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Hlavnà liÅ¡ta</target> -<source>Filter files</source> +<source>Filter Files</source> <target>Filtr souborů</target> -<source>Select view</source> -<target>Vyberte zobrazenÃ</target> +<source>Select View</source> +<target>ZobrazenÃ</target> <source>Open...</source> <target>OtevÅ™Ãt...</target> @@ -1047,15 +1070,14 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Compare both sides</source> <target>Porovnat obÄ› strany</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Opravdu chcete provést pÅ™Ãkaz %y pro 1 položku?</pluralform> -<pluralform>Opravdu chcete provést pÅ™Ãkaz %y pro %x položky?</pluralform> -<pluralform>Opravdu chcete provést pÅ™Ãkaz %y pro %x položek?</pluralform> -</target> +<source>Comparison settings</source> +<target>Nastavenà porovnánÃ</target> + +<source>Synchronization settings</source> +<target>Nastavenà synchronizace</target> + +<source>Start synchronization</source> +<target>Start synchronizace</target> <source>Confirm</source> <target>Potvrdit</target> @@ -1096,12 +1118,6 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Set direction:</source> <target>Nastavit adresář:</target> -<source>Exclude temporarily</source> -<target>Vynechat doÄasnÄ›</target> - -<source>Include temporarily</source> -<target>PÅ™idat doÄasnÄ›</target> - <source>multiple selection</source> <target>vÃcenásobný výbÄ›r</target> @@ -1111,6 +1127,15 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Exclude via filter:</source> <target>Vynechat pomocà filtru:</target> +<source>Exclude temporarily</source> +<target>Vynechat doÄasnÄ›</target> + +<source>Include temporarily</source> +<target>PÅ™idat doÄasnÄ›</target> + +<source>Delete</source> +<target>Smazat</target> + <source>Include all</source> <target>Zahrnout vÅ¡e</target> @@ -1142,7 +1167,7 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <target>Poslednà sezenÃ</target> <source>Folder Comparison and Synchronization</source> -<target>Porovnánà a Synchronizace adresářů</target> +<target>porovnánà a synchronizace složek</target> <source>Configuration saved</source> <target>Konfigurace uložena</target> @@ -1159,6 +1184,9 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Never save &changes</source> <target>Nikdy &neukládat zmÄ›ny</target> +<source>Filter</source> +<target>Filtr</target> + <source>Show files that exist on left side only</source> <target>Zobrazit soubory existujÃcà pouze vlevo</target> @@ -1204,12 +1232,18 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Set as default</source> <target>Nastavit jako výchozÃ</target> -<source>Operation aborted</source> -<target>Operace zruÅ¡ena</target> - <source>All folders are in sync</source> <target>VÅ¡echny složky jsou synchronizovány</target> +<source>Synchronization Settings</source> +<target>Nastavenà synchronizace</target> + +<source>Comparison Settings</source> +<target>Nastavenà porovnánÃ</target> + +<source>Cannot find %x</source> +<target>Nelze najÃt %x</target> + <source>Comma-separated values</source> <target>Text oddÄ›lený Äárkami</target> @@ -1225,7 +1259,7 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>&Ignore</source> <target>&PokraÄovat</target> -<source>Fatal Error</source> +<source>Serious Error</source> <target>Závažná chyba</target> <source>&Don't show this warning again</source> @@ -1234,9 +1268,6 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>&Switch</source> <target>&PÅ™epnout</target> -<source>Question</source> -<target>Dotaz</target> - <source>&Yes</source> <target>&Ano</target> @@ -1258,8 +1289,8 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Initializing...</source> <target>Inicializace...</target> -<source>Aborted</source> -<target>PÅ™eruÅ¡eno</target> +<source>Stopped</source> +<target>Zastaveno</target> <source>Completed</source> <target>Hotovo</target> @@ -1270,12 +1301,6 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>Log</source> <target>Záznam zpracovánÃ</target> -<source>Cannot find %x</source> -<target>Nelze najÃt %x</target> - -<source>Inactive</source> -<target>Vypnuto</target> - <source>Today</source> <target>Dnes</target> @@ -1300,9 +1325,6 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filtr</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1313,6 +1335,9 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <pluralform>Opravdu chcete pÅ™esunout následujÃcÃch %x položek do KoÅ¡e?</pluralform> </target> +<source>Move</source> +<target>PÅ™esunout</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1323,6 +1348,9 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <pluralform>Opravdu chcete smazat následujÃcÃch %x položek?</pluralform> </target> +<source>Exclude</source> +<target>Vynechat</target> + <source>Direct</source> <target>Zachovat</target> @@ -1347,8 +1375,8 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <source>- Other side's counterpart to %item_folder%</source> <target>- pouze cesta z opaÄného panelu pro %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Povolit opÄ›t zobrazovánà skrytých dialogů a hlášenÃ?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Obnovit vÅ¡echny skryté dialogy a varovánÃ?</target> <source>Leave as unresolved conflict</source> <target>Ponechat jako nevyÅ™eÅ¡ený konflikt</target> @@ -1476,14 +1504,14 @@ Poznámka: Filtr je aplikován relativnÄ› k základnÃm adresářům. <pluralform>%x dnů</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>NepodaÅ™ilo se zaregistrovat pro pÅ™Ãjem systémových zpráv.</target> +<source>Unable to register to receive system messages.</source> +<target>NepodaÅ™ilo se zaregistrovat k odbÄ›ru systémových zpráv.</target> <source>Cannot set privilege %x.</source> <target>Nelze nastavit práva pro %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>NepodaÅ™ilo se uspat systém</target> +<source>Unable to suspend system sleep mode.</source> +<target>Nelze pozastavit Režim spánku.</target> <source>Cannot change process I/O priorities.</source> <target>Nelze nastavit priority procesu.</target> diff --git a/BUILD/Languages/danish.lng b/BUILD/Languages/danish.lng index a835f88c..423b649c 100644 --- a/BUILD/Languages/danish.lng +++ b/BUILD/Languages/danish.lng @@ -2,11 +2,28 @@ <language>Dansk</language> <translator>Regmos</translator> <locale>da_DK</locale> - <flag_image>flag_denmark.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_denmark.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>Retrying operation</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>Begge sider ændret siden sidste synkronisering.</target> @@ -292,8 +309,8 @@ <source>/sec</source> <target>/sek</target> -<source>%x items</source> -<target>%x emner</target> +<source>%x items/sec</source> +<target>%x emner/sek</target> <source>Configuration file %x loaded partially only.</source> <target>Indstillingsfilen %x er kun delvist indlæst.</target> @@ -322,10 +339,10 @@ <source>Volume name %x is not part of file path %y.</source> <target>Volumennavnet %x er ikke del af filstien %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> +<source>Stop requested: Waiting for current operation to finish...</source> <target>Afbrydelse: Venter pÃ¥ aktuel opgave afsluttes...</target> -<source>Failure to create timestamp for versioning:</source> +<source>Unable to create timestamp for versioning:</source> <target>Kunne ikke oprette versioneringstid:</target> <source>Cannot read the following XML elements:</source> @@ -343,7 +360,7 @@ <source>&Program</source> <target>&Filer</target> -<source>&Content</source> +<source>&View help</source> <target>&Ã…ben hjælp</target> <source>&About</source> @@ -367,8 +384,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Importer en .ffs_batchfil (Filer > Ã…ben...) for at komme igang.</target> -<source>Folders to watch</source> -<target>Jobbets mapper</target> +<source>Folders to watch:</source> +<target>Jobbets mapper:</target> <source>Add folder</source> <target>Tilføj mappe</target> @@ -382,12 +399,15 @@ <source>Select a folder</source> <target>Vælg en mappe</target> -<source>Idle time [seconds]</source> -<target>Køres nÃ¥r computeren har ledige resourcer i [sek.]</target> +<source>Idle time (in seconds):</source> +<target>Efter PC tomgang i (sek)</target> <source>Idle time between last detected change and execution of command</source> <target>Tid imellem sidst fundne ændring og udførsel</target> +<source>Command line:</source> +<target>Kommando:</target> + <source> The command is triggered if: - files or subfolders change @@ -399,8 +419,8 @@ Kommandoen udføres hvis: - nye mapper findes (f.eks USB nøgle) </target> -<source>Start</source> -<target>Start</target> +<source>&Start</source> +<target>&Start</target> <source>&Retry</source> <target>&Prøv igen</target> @@ -408,9 +428,6 @@ Kommandoen udføres hvis: <source>Cancel</source> <target>Annuller</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>Realtids synk - automatisk synkronisering</target> - <source>Build: %x</source> <target>Udgivet: %x</target> @@ -420,6 +437,9 @@ Kommandoen udføres hvis: <source>All files</source> <target>Alle filer</target> +<source>Automated Synchronization</source> +<target>Automatisk synkronisering</target> + <source>Directory monitoring active</source> <target>MappeovervÃ¥gning aktiv</target> @@ -435,7 +455,7 @@ Kommandoen udføres hvis: <source>&Exit</source> <target>&Luk</target> -<source>Invalid command line:</source> +<source>Incorrect command line:</source> <target>Ugyldig kommando:</target> <source>File content</source> @@ -498,8 +518,8 @@ Kommandoen udføres hvis: <source>Target folder input field must not be empty.</source> <target>Destinationsmappen skal angives.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Mappe til versionering skal angives.</target> +<source>Please enter a target folder for versioning.</source> +<target>Angiv mappe til versionering.</target> <source>Source folder %x not found.</source> <target>Kildemappen %x blev ikke fundet.</target> @@ -537,7 +557,7 @@ Kommandoen udføres hvis: <source>job name</source> <target>Jobnavn</target> -<source>Synchronization aborted</source> +<source>Synchronization stopped</source> <target>Synkronisering afbrudt</target> <source>Synchronization completed with errors</source> @@ -555,23 +575,20 @@ Kommandoen udføres hvis: <source>Saving log file %x...</source> <target>Gemmer rapport %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Klik "Skift" for at løse problemerne fra hovedvinduet.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Skift til FreeFileSyncs hovedvindue for at løse problemet.</target> -<source>Switching to FreeFileSync main dialog</source> +<source>Switching to FreeFileSync's main window</source> <target>Skifter til hovedvinduet</target> -<source>Retrying operation after error:</source> -<target>Prøver igen efter fejl:</target> - <source>A new version of FreeFileSync is available:</source> <target>Opdatering tilgængelig:</target> <source>Download now?</source> <target>Download nu?</target> -<source>New version found</source> -<target>Opdatering fundet</target> +<source>Check for Program Updates</source> +<target>Søg efter opdatering</target> <source>&Download</source> <target>&Download</target> @@ -639,20 +656,20 @@ Kommandoen udføres hvis: <source>Hibernate</source> <target>Dvale</target> -<source>Selected variant:</source> -<target>Valgt variant:</target> - -<source>Select alternate comparison settings</source> +<source>Alternate comparison settings</source> <target>Tilpas analyse</target> -<source>Select alternate synchronization settings</source> +<source>Alternate synchronization settings</source> <target>Tilpas synkronisering</target> -<source>Filter is active</source> -<target>Aktivt filter</target> +<source>Local filter</source> +<target>Lokalt filter</target> -<source>No filter selected</source> -<target>Intet filter valgt</target> +<source>Active</source> +<target>Aktiv</target> + +<source>None</source> +<target>Ingen</target> <source>Remove alternate settings</source> <target>Fjern tilpassede indstillinger</target> @@ -666,6 +683,15 @@ Kommandoen udføres hvis: <source>Paste</source> <target>Indsæt</target> +<source>Alternate Comparison Settings</source> +<target>Tilpas analyse</target> + +<source>Alternate Synchronization Settings</source> +<target>Tilpas synkronisering</target> + +<source>Local Filter</source> +<target>Lokalt filter</target> + <source>&New</source> <target>&Ny</target> @@ -681,15 +707,18 @@ Kommandoen udføres hvis: <source>2. &Synchronize</source> <target>2. &Synkroniser</target> +<source>&Global settings</source> +<target>&Programindstillinger</target> + <source>&Language</source> <target>&Sprog</target> +<source>&Find...</source> +<target>S&øg</target> + <source>&Export file list...</source> <target>&Eksporter filliste...</target> -<source>&Global settings</source> -<target>&Programindstillinger</target> - <source>&Tools</source> <target>&Værktøj</target> @@ -699,20 +728,14 @@ Kommandoen udføres hvis: <source>Check &automatically once a week</source> <target>Søg &automatisk en gang om ugen</target> -<source>Check for new &version</source> -<target>&Søg efter opdatering</target> +<source>&Check for new version</source> +<target>Søg &efter opdatering</target> <source>Compare</source> -<target>Analyser</target> - -<source>Comparison settings</source> -<target>Analyseindstillinger</target> - -<source>Synchronization settings</source> -<target>Synkroniseringsindstillinger</target> +<target>Analysér</target> <source>Synchronize</source> -<target>Synkroniser</target> +<target>Synkronisér</target> <source>Add folder pair</source> <target>Tilføj mappepar</target> @@ -723,6 +746,15 @@ Kommandoen udføres hvis: <source>Swap sides</source> <target>Byt side</target> +<source>Close search bar</source> +<target>Luk søgelinie</target> + +<source>Find:</source> +<target>Søg:</target> + +<source>Match case</source> +<target>Versalfølsom (a/A)</target> + <source>Save as batch job</source> <target>Gem som batchfil</target> @@ -744,74 +776,20 @@ Kommandoen udføres hvis: <source>Total bytes to copy</source> <target>Antal bytes der kopieres</target> -<source>Items found:</source> -<target>Emner fundet:</target> - -<source>Speed:</source> -<target>Hastighed:</target> - -<source>Time remaining:</source> -<target>Resterende tid:</target> - -<source>Time elapsed:</source> -<target>Brugt tid:</target> - -<source>Synchronizing...</source> -<target>Synkroniserer...</target> - -<source>Minimize to notification area</source> -<target>Minimér til uret</target> - -<source>On completion</source> -<target>Ved gennemført</target> - -<source>Close</source> -<target>Luk</target> - -<source>&Pause</source> -<target>&Pause</target> - -<source>Variant</source> -<target>Jobtype</target> +<source>Select a variant:</source> +<target>Vælg metode:</target> -<source>Statistics</source> -<target>Statistik</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Genkend ens filer efter filtid og størrelse.</target> -<source>&Don't show this dialog again</source> -<target>&Vis ikke igen</target> +<source>Identify equal files by comparing the file content.</source> +<target>Genkend ens filer efter indhold.</target> -<source>Select a variant</source> -<target>Vælg metode</target> +<source>Symbolic links:</source> +<target>Symbolske link:</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Filer betragtes som ens hvis - - senest ændret - - filstørrelse -er identisk -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Filer betragtes som ens hvis - - filindhold -er identisk -</target> - -<source>Symbolic Link handling</source> -<target>Symlink hÃ¥ndtering</target> - -<source>Help</source> -<target>Hjælp</target> +<source>More information</source> +<target>Mere information</target> <source>OK</source> <target>OK</target> @@ -819,10 +797,10 @@ er identisk <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Find og udbred ændringer pÃ¥ begge sider. Sletninger, omdøbninger og konflikter findes automatisk i en database.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> <target>Spejl venstre mappe. Efter synkronisering er højre mappe en kopi af venstre.</target> -<source>Copy new or updated files to right folder.</source> +<source>Copy new and updated files to the right folder.</source> <target>Kopier nye og opdaterede filer til højre mappe.</target> <source>Configure your own synchronization rules.</source> @@ -834,23 +812,8 @@ er identisk <source>Requires database files. Not supported by all file systems.</source> <target>Kræver databasefiler. Ikke understøttet i alle filsystemer</target> -<source>Error handling</source> -<target>FejlhÃ¥ndtering</target> - -<source>Ignore</source> -<target>Ignorer</target> - -<source>Hide all error and warning messages</source> -<target>Skjul fejlbeskeder og advarsler</target> - -<source>Pop-up</source> -<target>Besked</target> - -<source>Show pop-up on errors or warnings</source> -<target>Vis fejlbeskeder og advarsler</target> - -<source>Deletion handling</source> -<target>Sletning</target> +<source>Delete files:</source> +<target>Filsletning:</target> <source>Permanent</source> <target>Permanent</target> @@ -873,56 +836,89 @@ er identisk <source>Naming convention:</source> <target>Navneregler:</target> -<source>Batch job</source> -<target>Batchfil</target> +<source>Show examples</source> +<target>Vis eksempler</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Opret batchfil til automatisk synkronisering. Start ved at dobbeltklikke pÃ¥ filen eller planlæg via opgavestyring: %x</target> +<source>Handle errors:</source> +<target>FejlhÃ¥ndtering:</target> -<source>Exit</source> -<target>Luk</target> +<source>Ignore</source> +<target>Ignorer</target> -<source>Abort synchronization on first error</source> -<target>Stop synkronisering ved første fejl</target> +<source>Hide all error and warning messages</source> +<target>Skjul fejlbeskeder og advarsler</target> -<source>Show progress dialog</source> -<target>Vis fremskridt</target> +<source>Pop-up</source> +<target>Besked</target> -<source>Save log</source> -<target>Gem rapport</target> +<source>Show pop-up on errors or warnings</source> +<target>Vis fejlbeskeder og advarsler</target> -<source>Select folder to save log files</source> -<target>Vælg mappe til rapporter</target> +<source>On completion:</source> +<target>Ved gennemført:</target> -<source>Limit</source> -<target>Antal</target> +<source>Start synchronization now?</source> +<target>Synkroniser nu?</target> -<source>Limit maximum number of log files</source> -<target>Begræns antal rapporter</target> +<source>Variant:</source> +<target>Jobtype:</target> -<source>Source code written in C++ using:</source> -<target>Kildekoden er skrevet i C++ med hjælp fra:</target> +<source>Statistics</source> +<target>Statistik</target> -<source>If you like FreeFileSync</source> -<target>Er du glad for FreeFileSync</target> +<source>&Don't show this dialog again</source> +<target>&Vis ikke igen</target> -<source>Donate with PayPal</source> -<target>Donér med PayPal</target> +<source>Items found:</source> +<target>Emner fundet:</target> -<source>Many thanks for localization:</source> -<target>Tak for oversættelse:</target> +<source>Speed:</source> +<target>Hastighed:</target> -<source>Feedback and suggestions are welcome</source> -<target>Kritik og forslag er meget velkomne</target> +<source>Time remaining:</source> +<target>Resterende tid:</target> -<source>Homepage</source> -<target>Hjemmeside</target> +<source>Time elapsed:</source> +<target>Brugt tid:</target> -<source>Email</source> -<target>Email</target> +<source>Synchronizing...</source> +<target>Synkroniserer...</target> -<source>Published under the GNU General Public License</source> -<target>Udgivet under GNU General Public Licence</target> +<source>Minimize to notification area</source> +<target>Minimér til uret</target> + +<source>Close</source> +<target>Luk</target> + +<source>&Pause</source> +<target>&Pause</target> + +<source>Stop</source> +<target>Stop</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Opret batchfil til automatisk synkronisering. Start ved at dobbeltklikke pÃ¥ filen eller planlæg via opgavestyring: %x</target> + +<source>Stop synchronization at first error</source> +<target>Stop synkronisering ved første fejl</target> + +<source>Show progress dialog</source> +<target>Vis fremskridt</target> + +<source>Save log:</source> +<target>Gem log:</target> + +<source>Limit:</source> +<target>Højst:</target> + +<source>Limit maximum number of log files</source> +<target>Begræns antal rapporter</target> + +<source>How can I schedule a batch job?</source> +<target>Hvordan oprettes en batchfil?</target> + +<source>&Recycle bin</source> +<target>&Papirkurv</target> <source>Delete on both sides</source> <target>Slet pÃ¥ begge sider</target> @@ -930,109 +926,136 @@ er identisk <source>Delete on both sides even if the file is selected on one side only</source> <target>Slet pÃ¥ begge sider selvom selvom filen kun er valgt pÃ¥ en side</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Filer synkroniseres kun hvis de opfyldet alle filterregler. -Bemærk: Filstier skal relatere til kildemappen. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Angiv filterregler til ekskludering af bestemte filer fra synkroniseringen. Filstier skal relatere til kildemapperne.</target> -<source>Include</source> -<target>Inkluder</target> +<source>Include:</source> +<target>Inkludér:</target> -<source>Exclude</source> -<target>Ekskluder</target> +<source>Exclude:</source> +<target>Ekskludér:</target> -<source>Time span</source> -<target>Tidsinterval</target> +<source>Time span:</source> +<target>Interval:</target> -<source>File size</source> -<target>Filstørrelse</target> +<source>File size:</source> +<target>Filstørrelse:</target> -<source>Minimum</source> -<target>Minimum</target> +<source>Minimum:</source> +<target>Minimum:</target> -<source>Maximum</source> -<target>Maksimum</target> +<source>Maximum:</source> +<target>Maksimum:</target> <source>&Clear</source> <target>&Ryd</target> -<source>Global settings</source> -<target>Programindstillinger</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Disse indstillinger gælder alle synkroniseringer.</target> <source>Fail-safe file copy</source> <target>Sikker filkopiering</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Kopiér til midlertidig fil (*.ffs_tmp) før omdøbning. Sikrer processen ved alvorlige fejl.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target>Kopiér til midlertidig fil (*.ffs_tmp) før overskrivning. Sikrer processen ved alvorlige fejl.</target> + +<source>(recommended)</source> +<target>(anbefalet)</target> <source>Copy locked files</source> <target>Kopier lÃ¥ste filer</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Kopiér delte eller lÃ¥ste filer med VSS kopiering (administrator)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Kopiér delte eller lÃ¥ste filer med VSS kopiering.</target> + +<source>(requires administrator rights)</source> +<target>(administrator)</target> <source>Copy file access permissions</source> <target>Kopier adgangstilladelser</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Overfør fil og mappetilladelser (administrator)</target> +<source>Transfer file and folder permissions.</source> +<target>Overfør fil og mappetilladelser.</target> + +<source>Automatic retry on error:</source> +<target>Antal forsøg ved fejl:</target> -<source>Restore hidden dialogs</source> -<target>Gendan skjulte dialoger</target> +<source>Retry count:</source> +<target>Antal forsøg:</target> -<source>External applications</source> -<target>Eksterne programmer</target> +<source>Delay (in seconds):</source> +<target>Forsinkelse (sek):</target> + +<source>Customize context menu:</source> +<target>Tilpas kontekstmenu:</target> <source>Description</source> <target>Beskrivelse</target> +<source>Restore hidden windows</source> +<target>Gendan skjulte vinduer</target> + <source>&Default</source> <target>S&tandard</target> -<source>Find what:</source> -<target>Søg efter:</target> +<source>Source code written in C++ using:</source> +<target>Kildekoden er skrevet i C++ med hjælp fra:</target> + +<source>If you like FreeFileSync</source> +<target>Er du glad for FreeFileSync</target> -<source>Match case</source> -<target>Versalfølsom (a/A)</target> +<source>Donate with PayPal</source> +<target>Donér med PayPal</target> -<source>&Find next</source> -<target>&Find næste</target> +<source>Feedback and suggestions are welcome</source> +<target>Kritik og forslag er meget velkomne</target> -<source>Start synchronization</source> -<target>Start synkronisering</target> +<source>Homepage</source> +<target>Hjemmeside</target> -<source>Delete</source> -<target>Slet</target> +<source>Email</source> +<target>Email</target> -<source>Configure filter</source> -<target>Indstil filter</target> +<source>Published under the GNU General Public License</source> +<target>Udgivet under GNU General Public Licence</target> -<source>Find</source> -<target>Søg</target> +<source>Many thanks for localization:</source> +<target>Tak for oversættelse:</target> + +<source>Save as Batch Job</source> +<target>Gem som batchfil</target> -<source>Select time span</source> +<source>Delete Items</source> +<target>Slet emner</target> + +<source>Global Settings</source> +<target>Programindstillinger</target> + +<source>Select Time Span</source> <target>Vælg tidsinterval</target> -<source>Folder pairs</source> +<source>Folder Pairs</source> <target>Mappepar</target> +<source>Find</source> +<target>Søg</target> + <source>Overview</source> <target>Oversigt</target> <source>Configuration</source> <target>Indstilling</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Hovedlinie</target> -<source>Filter files</source> +<source>Filter Files</source> <target>Filtrer filer</target> -<source>Select view</source> +<source>Select View</source> <target>Tilpas visning</target> <source>Open...</source> @@ -1044,14 +1067,14 @@ Bemærk: Filstier skal relatere til kildemappen. <source>Compare both sides</source> <target>Analyser begge sider</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Vil du køre kommandoen %y for 1 emne?</pluralform> -<pluralform>Vil du køre kommandoen %y for %x emner?</pluralform> -</target> +<source>Comparison settings</source> +<target>Analyseindstillinger</target> + +<source>Synchronization settings</source> +<target>Synkroniseringsindstillinger</target> + +<source>Start synchronization</source> +<target>Start synkronisering</target> <source>Confirm</source> <target>Bekræft</target> @@ -1089,12 +1112,6 @@ Bemærk: Filstier skal relatere til kildemappen. <source>Set direction:</source> <target>Retning:</target> -<source>Exclude temporarily</source> -<target>Ekskluder midlertidigt</target> - -<source>Include temporarily</source> -<target>Inkluder midlertidigt</target> - <source>multiple selection</source> <target>vælg flere</target> @@ -1104,6 +1121,15 @@ Bemærk: Filstier skal relatere til kildemappen. <source>Exclude via filter:</source> <target>Ekskluder m. filter:</target> +<source>Exclude temporarily</source> +<target>Ekskluder midlertidigt</target> + +<source>Include temporarily</source> +<target>Inkluder midlertidigt</target> + +<source>Delete</source> +<target>Slet</target> + <source>Include all</source> <target>Vælg alle</target> @@ -1152,6 +1178,9 @@ Bemærk: Filstier skal relatere til kildemappen. <source>Never save &changes</source> <target>Gem &aldrig ændringer</target> +<source>Filter</source> +<target>Filter</target> + <source>Show files that exist on left side only</source> <target>Vis filer der kun findes pÃ¥ venstre side</target> @@ -1197,12 +1226,18 @@ Bemærk: Filstier skal relatere til kildemappen. <source>Set as default</source> <target>Sæt som standard</target> -<source>Operation aborted</source> -<target>Handling afbrudt</target> - <source>All folders are in sync</source> <target>Alle mapper er synkrone</target> +<source>Synchronization Settings</source> +<target>Synkroniseringsindstillinger</target> + +<source>Comparison Settings</source> +<target>Analyseindstillinger</target> + +<source>Cannot find %x</source> +<target>Kan ikke finde %x</target> + <source>Comma-separated values</source> <target>Kommaopdelte værdier</target> @@ -1218,8 +1253,8 @@ Bemærk: Filstier skal relatere til kildemappen. <source>&Ignore</source> <target>&Ignorer</target> -<source>Fatal Error</source> -<target>Fatal fejl</target> +<source>Serious Error</source> +<target>Kritisk fejl</target> <source>&Don't show this warning again</source> <target>&Vis ikke igen</target> @@ -1227,9 +1262,6 @@ Bemærk: Filstier skal relatere til kildemappen. <source>&Switch</source> <target>&Skift</target> -<source>Question</source> -<target>SpørgsmÃ¥l</target> - <source>&Yes</source> <target>&Ja</target> @@ -1251,7 +1283,7 @@ Bemærk: Filstier skal relatere til kildemappen. <source>Initializing...</source> <target>Forbereder...</target> -<source>Aborted</source> +<source>Stopped</source> <target>Afbrudt</target> <source>Completed</source> @@ -1263,12 +1295,6 @@ Bemærk: Filstier skal relatere til kildemappen. <source>Log</source> <target>Log</target> -<source>Cannot find %x</source> -<target>Kan ikke finde %x</target> - -<source>Inactive</source> -<target>Inaktiv</target> - <source>Today</source> <target>Idag</target> @@ -1293,9 +1319,6 @@ Bemærk: Filstier skal relatere til kildemappen. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filter</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1328,9 @@ Bemærk: Filstier skal relatere til kildemappen. <pluralform>Vil du flytte følgende %x emner til papirkurven?</pluralform> </target> +<source>Move</source> +<target>Flyt</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1340,9 @@ Bemærk: Filstier skal relatere til kildemappen. <pluralform>Vil du slette følgende %x emner?</pluralform> </target> +<source>Exclude</source> +<target>Ekskludér</target> + <source>Direct</source> <target>Direkte</target> @@ -1338,8 +1367,8 @@ Bemærk: Filstier skal relatere til kildemappen. <source>- Other side's counterpart to %item_folder%</source> <target>Modsat sides pendant til %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Vis skjulte advarsler og dialoger igen?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Gendan skjulte vinduer og advarsler?</target> <source>Leave as unresolved conflict</source> <target>Efterlad som uløst konflikt</target> @@ -1464,14 +1493,14 @@ Bemærk: Filstier skal relatere til kildemappen. <pluralform>%x dage</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Kunne ikke registrere modtagelse af systembeskeder</target> +<source>Unable to register to receive system messages.</source> +<target>Kunne ikke registrere modtagelse af systembeskeder.</target> <source>Cannot set privilege %x.</source> <target>Kan ikke sætte %x privilegier.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Kunne ikke suspendere systemets standby funktion.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Kunne ikke ophæve standby.</target> <source>Cannot change process I/O priorities.</source> <target>Kan ikke ændre I/O prioriteter.</target> diff --git a/BUILD/Languages/dutch.lng b/BUILD/Languages/dutch.lng index dca4af40..cb0656b5 100644 --- a/BUILD/Languages/dutch.lng +++ b/BUILD/Languages/dutch.lng @@ -2,11 +2,271 @@ <language>Nederlands</language> <translator>Edwin Dierssen</translator> <locale>nl_NL</locale> - <flag_image>flag_holland.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_holland.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source>Unable to suspend system sleep mode.</source> +<target></target> + +<source>Unable to register to receive system messages.</source> +<target></target> + +<source>Restore all hidden windows and warnings?</source> +<target></target> + +<source>Move</source> +<target></target> + +<source>Stopped</source> +<target></target> + +<source>Serious Error</source> +<target></target> + +<source>Comparison Settings</source> +<target></target> + +<source>Synchronization Settings</source> +<target></target> + +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>Select View</source> +<target></target> + +<source>Filter Files</source> +<target></target> + +<source>Main Bar</source> +<target></target> + +<source>Folder Pairs</source> +<target></target> + +<source>Select Time Span</source> +<target></target> + +<source>Global Settings</source> +<target></target> + +<source>Delete Items</source> +<target></target> + +<source>Save as Batch Job</source> +<target></target> + +<source>Restore hidden windows</source> +<target></target> + +<source>Customize context menu:</source> +<target></target> + +<source>Delay (in seconds):</source> +<target></target> + +<source>Retry count:</source> +<target></target> + +<source>Automatic retry on error:</source> +<target></target> + +<source>Transfer file and folder permissions.</source> +<target></target> + +<source>(requires administrator rights)</source> +<target></target> + +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target></target> + +<source>(recommended)</source> +<target></target> + +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target></target> + +<source>The following settings are used for all synchronization jobs.</source> +<target></target> + +<source>Maximum:</source> +<target></target> + +<source>Minimum:</source> +<target></target> + +<source>File size:</source> +<target></target> + +<source>Time span:</source> +<target></target> + +<source>Exclude:</source> +<target></target> + +<source>Include:</source> +<target></target> + +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target></target> + +<source>&Recycle bin</source> +<target></target> + +<source>How can I schedule a batch job?</source> +<target></target> + +<source>Limit:</source> +<target></target> + +<source>Save log:</source> +<target></target> + +<source>Stop synchronization at first error</source> +<target></target> + +<source>Stop</source> +<target></target> + +<source>Variant:</source> +<target></target> + +<source>Start synchronization now?</source> +<target></target> + +<source>On completion:</source> +<target></target> + +<source>Handle errors:</source> +<target></target> + +<source>Show examples</source> +<target></target> + +<source>Delete files:</source> +<target></target> + +<source>Copy new and updated files to the right folder.</source> +<target></target> + +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target></target> + +<source>More information</source> +<target></target> + +<source>Symbolic links:</source> +<target></target> + +<source>Identify equal files by comparing the file content.</source> +<target></target> + +<source>Identify equal files by comparing modification time and size.</source> +<target></target> + +<source>Select a variant:</source> +<target></target> + +<source>Find:</source> +<target></target> + +<source>Close search bar</source> +<target></target> + +<source>&Check for new version</source> +<target></target> + +<source>&Find...</source> +<target></target> + +<source>Local Filter</source> +<target></target> + +<source>Alternate Synchronization Settings</source> +<target></target> + +<source>Alternate Comparison Settings</source> +<target></target> + +<source>None</source> +<target></target> + +<source>Active</source> +<target></target> + +<source>Local filter</source> +<target></target> + +<source>Alternate synchronization settings</source> +<target></target> + +<source>Alternate comparison settings</source> +<target></target> + +<source>Check for Program Updates</source> +<target></target> + +<source>Retrying operation</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + +<source>Switching to FreeFileSync's main window</source> +<target></target> + +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target></target> + +<source>Synchronization stopped</source> +<target></target> + +<source>Please enter a target folder for versioning.</source> +<target></target> + +<source>Incorrect command line:</source> +<target></target> + +<source>Automated Synchronization</source> +<target></target> + +<source>&Start</source> +<target></target> + +<source>Command line:</source> +<target></target> + +<source>Idle time (in seconds):</source> +<target></target> + +<source>Folders to watch:</source> +<target></target> + +<source>&View help</source> +<target></target> + +<source>Unable to create timestamp for versioning:</source> +<target></target> + +<source>Stop requested: Waiting for current operation to finish...</source> +<target></target> + +<source>%x items/sec</source> +<target></target> + <source>Both sides have changed since last synchronization.</source> <target>Beide zijdes zijn veranderd sinds de laatste synchronisatie.</target> @@ -292,9 +552,6 @@ <source>/sec</source> <target>/sec</target> -<source>%x items</source> -<target>%x items</target> - <source>Configuration file %x loaded partially only.</source> <target>Configuratiebestand %x alleen deels geladen.</target> @@ -322,12 +579,6 @@ <source>Volume name %x is not part of file path %y.</source> <target>Schijfnaam %x is geen deel van bestandspad %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Bezig met afbreken: Wacht op beëindiging huidige bewerking...</target> - -<source>Failure to create timestamp for versioning:</source> -<target>Het creëren van een tijdsstempen voor versiebeheer is mislukt:</target> - <source>Cannot read the following XML elements:</source> <target>Kan de volgende XML elementen niet lezen:</target> @@ -343,9 +594,6 @@ <source>&Program</source> <target>&Programma</target> -<source>&Content</source> -<target>&Inhoud</target> - <source>&About</source> <target>&Over</target> @@ -367,9 +615,6 @@ <source>To get started just import a .ffs_batch file.</source> <target>Importeer een .ffs_batch bestand om te beginnen.</target> -<source>Folders to watch</source> -<target>Mappen om te bekijken</target> - <source>Add folder</source> <target>Map toevoegen</target> @@ -382,9 +627,6 @@ <source>Select a folder</source> <target>Selecteer een map</target> -<source>Idle time [seconds]</source> -<target>Inactiviteit [seconden]</target> - <source>Idle time between last detected change and execution of command</source> <target>Tijd tussen de laatste gedetecteerde verandering en de uitvoering van het commando</target> @@ -399,18 +641,12 @@ De opdracht word geactiveerd als: - nieuwe folders worden gevonden (bijvoorbeeld bij invoeging van USB stick) </target> -<source>Start</source> -<target>Start</target> - <source>&Retry</source> <target>&Opnieuw proberen</target> <source>Cancel</source> <target>Annuleren</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Geautomatiseerde Synchronisatie</target> - <source>Build: %x</source> <target>Build: %x</target> @@ -435,9 +671,6 @@ De opdracht word geactiveerd als: <source>&Exit</source> <target>&Afsluiten</target> -<source>Invalid command line:</source> -<target>Ongeldige opdrachtregel:</target> - <source>File content</source> <target>Bestandsinhoud</target> @@ -498,9 +731,6 @@ De opdracht word geactiveerd als: <source>Target folder input field must not be empty.</source> <target>Doelmap mag niet leeg zijn.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Bronmap voor versiebeheer mag niet leeg zijn.</target> - <source>Source folder %x not found.</source> <target>Bronmap %x niet gevonden.</target> @@ -537,9 +767,6 @@ De opdracht word geactiveerd als: <source>job name</source> <target>taaknaam</target> -<source>Synchronization aborted</source> -<target>Synchronisatie afgebroken</target> - <source>Synchronization completed with errors</source> <target>Synchronisatie is met fouten afgerond</target> @@ -555,24 +782,12 @@ De opdracht word geactiveerd als: <source>Saving log file %x...</source> <target>Opslaan van logbestand %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Druk op "Omschakelen" om problemen op te lossen in het hoofdscherm van FreeFileSync.</target> - -<source>Switching to FreeFileSync main dialog</source> -<target>Wisselen naar FreeFileSync hoofdscherm</target> - -<source>Retrying operation after error:</source> -<target>Bewerking opnieuw proberen na fout:</target> - <source>A new version of FreeFileSync is available:</source> <target>Er is een nieuwe versie van FreeFileSync beschikbaar:</target> <source>Download now?</source> <target>Nu downloaden?</target> -<source>New version found</source> -<target>Nieuwe versie gevonden</target> - <source>&Download</source> <target>&Download</target> @@ -639,21 +854,6 @@ De opdracht word geactiveerd als: <source>Hibernate</source> <target>Slaapstand</target> -<source>Selected variant:</source> -<target>Selecter variant:</target> - -<source>Select alternate comparison settings</source> -<target>Selecteer alternatieve vergelijkingsinstellingen</target> - -<source>Select alternate synchronization settings</source> -<target>Selecteer alternatieve synchronisatieinstellingen</target> - -<source>Filter is active</source> -<target>Filter is actief</target> - -<source>No filter selected</source> -<target>Geen filter geselecteerd</target> - <source>Remove alternate settings</source> <target>Verwijder alternatieve instellingen</target> @@ -681,15 +881,15 @@ De opdracht word geactiveerd als: <source>2. &Synchronize</source> <target>2. &Synchroniseer</target> +<source>&Global settings</source> +<target>&Algemene instellingen</target> + <source>&Language</source> <target>&Taal</target> <source>&Export file list...</source> <target>&Exporteer bestandslijst...</target> -<source>&Global settings</source> -<target>&Algemene instellingen</target> - <source>&Tools</source> <target>&Gereedschap</target> @@ -699,18 +899,9 @@ De opdracht word geactiveerd als: <source>Check &automatically once a week</source> <target>Controleer &automatisch eens per week</target> -<source>Check for new &version</source> -<target>Kijk voor een nieuwe &versie</target> - <source>Compare</source> <target>Vergelijk</target> -<source>Comparison settings</source> -<target>Vergelijksinstellingen</target> - -<source>Synchronization settings</source> -<target>Synchronisatieinstellingen</target> - <source>Synchronize</source> <target>Synchroniseer</target> @@ -723,6 +914,9 @@ De opdracht word geactiveerd als: <source>Swap sides</source> <target>Wissel zijdes</target> +<source>Match case</source> +<target>Hoofdlettergevoelig</target> + <source>Save as batch job</source> <target>Opslaan als batch opdracht</target> @@ -744,87 +938,12 @@ De opdracht word geactiveerd als: <source>Total bytes to copy</source> <target>Aantal bytes om te kopiëren</target> -<source>Items found:</source> -<target>Onderdelen gevonden:</target> - -<source>Speed:</source> -<target>Snelheid:</target> - -<source>Time remaining:</source> -<target>Resterende tijd:</target> - -<source>Time elapsed:</source> -<target>Verstreken tijd:</target> - -<source>Synchronizing...</source> -<target>Synchroniseert...</target> - -<source>Minimize to notification area</source> -<target>Minimaliseer naar systeemvak</target> - -<source>On completion</source> -<target>Na voltooiing</target> - -<source>Close</source> -<target>Sluiten</target> - -<source>&Pause</source> -<target>&Pauze</target> - -<source>Variant</source> -<target>Variant</target> - -<source>Statistics</source> -<target>Statistieken</target> - -<source>&Don't show this dialog again</source> -<target>Laat deze dialoog &niet meer zien</target> - -<source>Select a variant</source> -<target>Selecteer een variant</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Bestanden worden als gelijk bevonden indien - - de laatste schrijf tijd en datum - - de bestandsgrootte -gelijk zijn -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Bestanden worden als gelijk beschouwd indien - - de bestandsinhoud -overeenkomt -</target> - -<source>Symbolic Link handling</source> -<target>Afhandeling van snelkoppelingen</target> - -<source>Help</source> -<target>Help</target> - <source>OK</source> <target>OK</target> <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identificeer en pas veranderingen toe aan beide kanten. Verwijderingen, verplaatsingen en conflicten worden automatisch gevonden met behulp van een database.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Spiegel backup van linker map. Rechter map is na synchronisatie een exacte kopie van de linker map.</target> - -<source>Copy new or updated files to right folder.</source> -<target>Kopiëer nieuwe of geupdate bestanden naar de rechter map.</target> - <source>Configure your own synchronization rules.</source> <target>Configureer uw eigen synchronisatieregels.</target> @@ -834,24 +953,6 @@ overeenkomt <source>Requires database files. Not supported by all file systems.</source> <target>Heeft database bestanden nodig. Wordt niet ondersteund door alle bestandssystemen</target> -<source>Error handling</source> -<target>Fout afhandeling</target> - -<source>Ignore</source> -<target>Negeer</target> - -<source>Hide all error and warning messages</source> -<target>Verberg alle fout- en waarschuwingsberichten</target> - -<source>Pop-up</source> -<target>Pop-up</target> - -<source>Show pop-up on errors or warnings</source> -<target>Laat pop-up zien bij foutmeldingen of waarschuwingen</target> - -<source>Deletion handling</source> -<target>Verwijder-afhandeling</target> - <source>Permanent</source> <target>Permanent</target> @@ -873,56 +974,56 @@ overeenkomt <source>Naming convention:</source> <target>Naamgevingsconventie</target> -<source>Batch job</source> -<target>Taaklijst</target> +<source>Ignore</source> +<target>Negeer</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Maak een batchbestand voor onbeheerde synchronisatie. Om te starten dubbelklikt u dit bestand of rooster in een taakplanner: %x</target> +<source>Hide all error and warning messages</source> +<target>Verberg alle fout- en waarschuwingsberichten</target> -<source>Exit</source> -<target>Sluiten</target> +<source>Pop-up</source> +<target>Pop-up</target> -<source>Abort synchronization on first error</source> -<target>Synchronisatie stoppen bij eerste foutmelding</target> +<source>Show pop-up on errors or warnings</source> +<target>Laat pop-up zien bij foutmeldingen of waarschuwingen</target> -<source>Show progress dialog</source> -<target>Toon voortgangsdialoogvenster</target> +<source>Statistics</source> +<target>Statistieken</target> -<source>Save log</source> -<target>Logbestand opslaan</target> +<source>&Don't show this dialog again</source> +<target>Laat deze dialoog &niet meer zien</target> -<source>Select folder to save log files</source> -<target>Selecteer map om log bestanden op te slaan</target> +<source>Items found:</source> +<target>Onderdelen gevonden:</target> -<source>Limit</source> -<target>Limiet</target> +<source>Speed:</source> +<target>Snelheid:</target> -<source>Limit maximum number of log files</source> -<target>Limiteer maximaal aantal log bestanden</target> +<source>Time remaining:</source> +<target>Resterende tijd:</target> -<source>Source code written in C++ using:</source> -<target>Broncode geschreven in C++ met behulp van:</target> +<source>Time elapsed:</source> +<target>Verstreken tijd:</target> -<source>If you like FreeFileSync</source> -<target>Indien FreeFileSync u bevalt</target> +<source>Synchronizing...</source> +<target>Synchroniseert...</target> -<source>Donate with PayPal</source> -<target>Doneer met PayPal</target> +<source>Minimize to notification area</source> +<target>Minimaliseer naar systeemvak</target> -<source>Many thanks for localization:</source> -<target>Veel dank voor de vertalingen:</target> +<source>Close</source> +<target>Sluiten</target> -<source>Feedback and suggestions are welcome</source> -<target>Feedback en suggesties zijn welkom</target> +<source>&Pause</source> +<target>&Pauze</target> -<source>Homepage</source> -<target>Homepage</target> +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Maak een batchbestand voor onbeheerde synchronisatie. Om te starten dubbelklikt u dit bestand of rooster in een taakplanner: %x</target> -<source>Email</source> -<target>E-mail</target> +<source>Show progress dialog</source> +<target>Toon voortgangsdialoogvenster</target> -<source>Published under the GNU General Public License</source> -<target>Gepubliceerd onder de GNU General Public License</target> +<source>Limit maximum number of log files</source> +<target>Limiteer maximaal aantal log bestanden</target> <source>Delete on both sides</source> <target>Verwijder aan beide zijdes</target> @@ -930,92 +1031,50 @@ overeenkomt <source>Delete on both sides even if the file is selected on one side only</source> <target>Verwijder aan beide zijdes ook al is het bestand maar aan één zijde geselecteerd</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target>Bestanden zullen alleen gesynchroniseerd worden als ze aan alle filterregels voldoen.</target> - -<source>Include</source> -<target>Opnemen</target> - -<source>Exclude</source> -<target>Uitsluiten</target> - -<source>Time span</source> -<target>Tijdspanne</target> - -<source>File size</source> -<target>Bestandsgrootte</target> - -<source>Minimum</source> -<target>Minimum</target> - -<source>Maximum</source> -<target>Maximum</target> - <source>&Clear</source> <target>&Leegmaken</target> -<source>Global settings</source> -<target>Algemene instellingen</target> - <source>Fail-safe file copy</source> <target>Fail-safe bestandskopie</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Kopiëer eerst naar een tijdelijk bestand (*.ffs_tmp) en hernoem het daarna. Dit garandeert consistentie, zelfs in het geval van een fatale fout.</target> - <source>Copy locked files</source> <target>Kopiëer vergrendelde bestanden</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Kopiëer gedeelde of afgesloten bestanden met behulp van de Volume Shadow Copy Service (vereist administrator rechten)</target> - <source>Copy file access permissions</source> <target>Kopiëer toegangsrechten van bestand.</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Verplaats bestands en map permissies (vereist administrator rechten)</target> - -<source>Restore hidden dialogs</source> -<target>Herstel verborgen dialogen</target> - -<source>External applications</source> -<target>Externe applicaties</target> - <source>Description</source> <target>Omschrijving</target> <source>&Default</source> <target>&Standaard</target> -<source>Find what:</source> -<target>Vind wat:</target> +<source>Source code written in C++ using:</source> +<target>Broncode geschreven in C++ met behulp van:</target> -<source>Match case</source> -<target>Hoofdlettergevoelig</target> +<source>If you like FreeFileSync</source> +<target>Indien FreeFileSync u bevalt</target> -<source>&Find next</source> -<target>&Vind volgende</target> +<source>Donate with PayPal</source> +<target>Doneer met PayPal</target> -<source>Start synchronization</source> -<target>Start synchronisatie</target> +<source>Feedback and suggestions are welcome</source> +<target>Feedback en suggesties zijn welkom</target> -<source>Delete</source> -<target>Verwijderen</target> +<source>Homepage</source> +<target>Homepage</target> -<source>Configure filter</source> -<target>Filterconfiguratie</target> +<source>Email</source> +<target>E-mail</target> -<source>Find</source> -<target>Vind</target> +<source>Published under the GNU General Public License</source> +<target>Gepubliceerd onder de GNU General Public License</target> -<source>Select time span</source> -<target>Selecteer tijdsspanne</target> +<source>Many thanks for localization:</source> +<target>Veel dank voor de vertalingen:</target> -<source>Folder pairs</source> -<target>Map paren</target> +<source>Find</source> +<target>Vind</target> <source>Overview</source> <target>Overzicht</target> @@ -1023,15 +1082,6 @@ Note: File paths must be relative to base directories. <source>Configuration</source> <target>Configuratie</target> -<source>Main bar</source> -<target>Hoofdbalk</target> - -<source>Filter files</source> -<target>Filter bestanden</target> - -<source>Select view</source> -<target>Selecteer weergave</target> - <source>Open...</source> <target>Open...</target> @@ -1041,14 +1091,14 @@ Note: File paths must be relative to base directories. <source>Compare both sides</source> <target>Vergelijk beide zijdes</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Weet u zeker dat u commando %y wilt uitvoeren voor 1 item?</pluralform> -<pluralform>Weet u zeker dat u commando %y wilt uitvoeren voor %x items?</pluralform> -</target> +<source>Comparison settings</source> +<target>Vergelijksinstellingen</target> + +<source>Synchronization settings</source> +<target>Synchronisatieinstellingen</target> + +<source>Start synchronization</source> +<target>Start synchronisatie</target> <source>Confirm</source> <target>Bevestigen</target> @@ -1086,12 +1136,6 @@ Note: File paths must be relative to base directories. <source>Set direction:</source> <target>Stel richting in:</target> -<source>Exclude temporarily</source> -<target>Tijdelijk uitsluiten</target> - -<source>Include temporarily</source> -<target>Tijdelijk opnemen</target> - <source>multiple selection</source> <target>meervoudige selectie</target> @@ -1101,6 +1145,15 @@ Note: File paths must be relative to base directories. <source>Exclude via filter:</source> <target>Sluit via filter uit:</target> +<source>Exclude temporarily</source> +<target>Tijdelijk uitsluiten</target> + +<source>Include temporarily</source> +<target>Tijdelijk opnemen</target> + +<source>Delete</source> +<target>Verwijderen</target> + <source>Include all</source> <target>Alles opnemen</target> @@ -1149,6 +1202,9 @@ Note: File paths must be relative to base directories. <source>Never save &changes</source> <target>Sla &veranderingen nooit op</target> +<source>Filter</source> +<target>Filter</target> + <source>Show files that exist on left side only</source> <target>Toon bestanden die alleen aan de linkerzijde bestaan</target> @@ -1194,12 +1250,12 @@ Note: File paths must be relative to base directories. <source>Set as default</source> <target>Instellen als standaard</target> -<source>Operation aborted</source> -<target>Bewerking afgebroken</target> - <source>All folders are in sync</source> <target>Alle mappen zijn gesynchroniseerd</target> +<source>Cannot find %x</source> +<target>Kan %x niet vinden</target> + <source>Comma-separated values</source> <target>Door komma gescheiden waarden</target> @@ -1215,18 +1271,12 @@ Note: File paths must be relative to base directories. <source>&Ignore</source> <target>&Negeren</target> -<source>Fatal Error</source> -<target>Kritieke fout</target> - <source>&Don't show this warning again</source> <target>Laat deze &waarschuwing niet meer zien</target> <source>&Switch</source> <target>&Omschakelen</target> -<source>Question</source> -<target>Vraag</target> - <source>&Yes</source> <target>&Ja</target> @@ -1248,9 +1298,6 @@ Note: File paths must be relative to base directories. <source>Initializing...</source> <target>Initialiseren...</target> -<source>Aborted</source> -<target>Afgebroken</target> - <source>Completed</source> <target>Voltooid</target> @@ -1260,12 +1307,6 @@ Note: File paths must be relative to base directories. <source>Log</source> <target>Log</target> -<source>Cannot find %x</source> -<target>Kan %x niet vinden</target> - -<source>Inactive</source> -<target>Niet actief</target> - <source>Today</source> <target>Vandaag</target> @@ -1290,9 +1331,6 @@ Note: File paths must be relative to base directories. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filter</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1311,6 +1349,9 @@ Note: File paths must be relative to base directories. <pluralform>Wilt u echt de volgende %x items verwijderen?</pluralform> </target> +<source>Exclude</source> +<target>Uitsluiten</target> + <source>Direct</source> <target>Direct</target> @@ -1335,9 +1376,6 @@ Note: File paths must be relative to base directories. <source>- Other side's counterpart to %item_folder%</source> <target>- Tegenhanger van de andere kant naar %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Verborgen waarschuwingen en dialogen zichtbaar maken?</target> - <source>Leave as unresolved conflict</source> <target>Beschouw als onopgelost conflict</target> @@ -1461,15 +1499,9 @@ Note: File paths must be relative to base directories. <pluralform>%x dagen</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Registreren voor het ontvangen van systeemmeldingen is mislukt.</target> - <source>Cannot set privilege %x.</source> <target>Kan privilege %x niet instellen.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Het opschorten van slaapstand is mislukt.</target> - <source>Cannot change process I/O priorities.</source> <target>Kan de I/O prioriteiten niet aanpassen.</target> diff --git a/BUILD/Languages/english_uk.lng b/BUILD/Languages/english_uk.lng index 69642e78..71e8c67e 100644 --- a/BUILD/Languages/english_uk.lng +++ b/BUILD/Languages/english_uk.lng @@ -2,14 +2,11 @@ <language>English (UK)</language> <translator>Robert Readman</translator> <locale>en_GB</locale> - <flag_image>flag_england.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_england.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> -<source>Close search bar</source> -<target>Close search bar</target> - <source>Both sides have changed since last synchronization.</source> <target>Both sides have changed since last synchronisation.</target> @@ -295,8 +292,8 @@ <source>/sec</source> <target>/sec</target> -<source>%x items</source> -<target>%x items</target> +<source>%x items/sec</source> +<target>%x items/sec</target> <source>Configuration file %x loaded partially only.</source> <target>Configuration file %x loaded partially only.</target> @@ -325,11 +322,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Volume name %x is not part of file path %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Abort requested: Waiting for current operation to finish...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Stop requested: Waiting for current operation to finish...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Failure to create time stamp for versioning:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Unable to create timestamp for versioning:</target> <source>Cannot read the following XML elements:</source> <target>Cannot read the following XML elements:</target> @@ -346,8 +343,8 @@ <source>&Program</source> <target>&Program</target> -<source>&Content</source> -<target>&Content</target> +<source>&View help</source> +<target>&View help</target> <source>&About</source> <target>&About</target> @@ -370,8 +367,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>To get started just import a .ffs_batch file.</target> -<source>Folders to watch</source> -<target>Folders to watch</target> +<source>Folders to watch:</source> +<target>Folders to watch:</target> <source>Add folder</source> <target>Add folder</target> @@ -385,12 +382,15 @@ <source>Select a folder</source> <target>Select a folder</target> -<source>Idle time [seconds]</source> -<target>Idle time [seconds]</target> +<source>Idle time (in seconds):</source> +<target>Idle time (in seconds):</target> <source>Idle time between last detected change and execution of command</source> <target>Idle time between last detected change and execution of command</target> +<source>Command line:</source> +<target>Command line:</target> + <source> The command is triggered if: - files or subfolders change @@ -402,8 +402,8 @@ The command is triggered if: - new folders arrive (e.g. USB stick insert) </target> -<source>Start</source> -<target>Start</target> +<source>&Start</source> +<target>&Start</target> <source>&Retry</source> <target>&Retry</target> @@ -411,9 +411,6 @@ The command is triggered if: <source>Cancel</source> <target>Cancel</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Automated Synchronisation</target> - <source>Build: %x</source> <target>Build: %x</target> @@ -423,6 +420,9 @@ The command is triggered if: <source>All files</source> <target>All files</target> +<source>Automated Synchronization</source> +<target>Automated Synchronisation</target> + <source>Directory monitoring active</source> <target>Directory monitoring active</target> @@ -438,8 +438,8 @@ The command is triggered if: <source>&Exit</source> <target>&Exit</target> -<source>Invalid command line:</source> -<target>Invalid command line:</target> +<source>Incorrect command line:</source> +<target>Incorrect command line:</target> <source>File content</source> <target>File content</target> @@ -501,8 +501,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>Target folder input field must not be empty.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Folder input field for versioning must not be empty.</target> +<source>Please enter a target folder for versioning.</source> +<target>Please enter a target folder for versioning.</target> <source>Source folder %x not found.</source> <target>Source folder %x not found.</target> @@ -540,8 +540,8 @@ The command is triggered if: <source>job name</source> <target>job name</target> -<source>Synchronization aborted</source> -<target>Synchronisation aborted</target> +<source>Synchronization stopped</source> +<target>Synchronisation stopped</target> <source>Synchronization completed with errors</source> <target>Synchronisation completed with errors</target> @@ -558,14 +558,23 @@ The command is triggered if: <source>Saving log file %x...</source> <target>Saving log file %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Press "Switch" to resolve issues in FreeFileSync main dialogue.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>You can switch to FreeFileSync's main window to resolve this issue.</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Switching to FreeFileSync main dialogue</target> +<source>Switching to FreeFileSync's main window</source> +<target>Switching to FreeFileSync's main window</target> -<source>Retrying operation after error:</source> -<target>Retrying operation after error:</target> +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</target> + +<source>Retrying operation</source> +<target>Retrying operation</target> <source>A new version of FreeFileSync is available:</source> <target>A new version of FreeFileSync is available:</target> @@ -573,8 +582,8 @@ The command is triggered if: <source>Download now?</source> <target>Download now?</target> -<source>New version found</source> -<target>New version found</target> +<source>Check for Program Updates</source> +<target>Check for Program Updates</target> <source>&Download</source> <target>&Download</target> @@ -642,20 +651,20 @@ The command is triggered if: <source>Hibernate</source> <target>Hibernate</target> -<source>Selected variant:</source> -<target>Selected variant:</target> +<source>Alternate comparison settings</source> +<target>Alternate comparison settings</target> -<source>Select alternate comparison settings</source> -<target>Select alternate comparison settings</target> +<source>Alternate synchronization settings</source> +<target>Alternate synchronisation settings</target> -<source>Select alternate synchronization settings</source> -<target>Select alternate synchronisation settings</target> +<source>Local filter</source> +<target>Local filter</target> -<source>Filter is active</source> -<target>Filter is active</target> +<source>Active</source> +<target>Active</target> -<source>No filter selected</source> -<target>No filter selected</target> +<source>None</source> +<target>None</target> <source>Remove alternate settings</source> <target>Remove alternate settings</target> @@ -669,6 +678,15 @@ The command is triggered if: <source>Paste</source> <target>Paste</target> +<source>Alternate Comparison Settings</source> +<target>Alternate Comparison Settings</target> + +<source>Alternate Synchronization Settings</source> +<target>Alternate Synchronisation Settings</target> + +<source>Local Filter</source> +<target>Local Filter</target> + <source>&New</source> <target>&New</target> @@ -684,15 +702,18 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. &Synchronise</target> +<source>&Global settings</source> +<target>&Global settings</target> + <source>&Language</source> <target>&Language</target> +<source>&Find...</source> +<target>&Find...</target> + <source>&Export file list...</source> <target>&Export file list...</target> -<source>&Global settings</source> -<target>&Global settings</target> - <source>&Tools</source> <target>&Tools</target> @@ -702,8 +723,8 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>Check &automatically once a week</target> -<source>Check for new &version</source> -<target>Check for new &version</target> +<source>&Check for new version</source> +<target>&Check for new version</target> <source>Compare</source> <target>Compare</target> @@ -720,8 +741,11 @@ The command is triggered if: <source>Swap sides</source> <target>Swap sides</target> -<source>Find what:</source> -<target>Find what:</target> +<source>Close search bar</source> +<target>Close search bar</target> + +<source>Find:</source> +<target>Find:</target> <source>Match case</source> <target>Match case</target> @@ -747,74 +771,20 @@ The command is triggered if: <source>Total bytes to copy</source> <target>Total bytes to copy</target> -<source>Items found:</source> -<target>Elements found:</target> - -<source>Speed:</source> -<target>Speed:</target> - -<source>Time remaining:</source> -<target>Time remaining:</target> - -<source>Time elapsed:</source> -<target>Time elapsed:</target> - -<source>Synchronizing...</source> -<target>Synchronising...</target> - -<source>Minimize to notification area</source> -<target>Minimize to notification area</target> - -<source>On completion</source> -<target>On completion</target> - -<source>Close</source> -<target>Close</target> - -<source>&Pause</source> -<target>&Pause</target> - -<source>Variant</source> -<target>Variant</target> +<source>Select a variant:</source> +<target>Select a variant:</target> -<source>Statistics</source> -<target>Statistics</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Identify equal files by comparing modification time and size.</target> -<source>&Don't show this dialog again</source> -<target>&Don't show this dialogue again</target> +<source>Identify equal files by comparing the file content.</source> +<target>Identify equal files by comparing the file content.</target> -<source>Select a variant</source> -<target>Select a variant</target> +<source>Symbolic links:</source> +<target>Symbolic links:</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Files are found equal if - - last write time and date - - file size -are the same -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Files are found equal if - - file content -is the same -</target> - -<source>Symbolic Link handling</source> -<target>Symbolic Link handling</target> - -<source>Help</source> -<target>Help</target> +<source>More information</source> +<target>More information</target> <source>OK</source> <target>OK</target> @@ -822,11 +792,11 @@ is the same <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronisation.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Create a mirror backup of the left folder which exactly matches the right folder after synchronisation.</target> -<source>Copy new or updated files to right folder.</source> -<target>Copy new or updated files to right folder.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Copy new and updated files to the right folder.</target> <source>Configure your own synchronization rules.</source> <target>Configure your own synchronisation rules.</target> @@ -837,23 +807,8 @@ is the same <source>Requires database files. Not supported by all file systems.</source> <target>Requires database files. Not supported by all file systems.</target> -<source>Error handling</source> -<target>Error handling</target> - -<source>Ignore</source> -<target>Ignore</target> - -<source>Hide all error and warning messages</source> -<target>Hide all error and warning messages</target> - -<source>Pop-up</source> -<target>Pop-up</target> - -<source>Show pop-up on errors or warnings</source> -<target>Show pop-up on errors or warnings</target> - -<source>Deletion handling</source> -<target>Deletion handling</target> +<source>Delete files:</source> +<target>Delete files:</target> <source>Permanent</source> <target>Permanent</target> @@ -876,99 +831,171 @@ is the same <source>Naming convention:</source> <target>Naming convention:</target> -<source>Batch job</source> -<target>Batch job</target> +<source>Show examples</source> +<target>Show examples</target> + +<source>Handle errors:</source> +<target>Handle errors:</target> + +<source>Ignore</source> +<target>Ignore</target> + +<source>Hide all error and warning messages</source> +<target>Hide all error and warning messages</target> + +<source>Pop-up</source> +<target>Pop-up</target> + +<source>Show pop-up on errors or warnings</source> +<target>Show pop-up on errors or warnings</target> + +<source>On completion:</source> +<target>On completion:</target> + +<source>Start synchronization now?</source> +<target>Start synchronisation now?</target> + +<source>Variant:</source> +<target>Variant:</target> + +<source>Statistics</source> +<target>Statistics</target> + +<source>&Don't show this dialog again</source> +<target>&Don't show this dialogue again</target> + +<source>Items found:</source> +<target>Elements found:</target> + +<source>Speed:</source> +<target>Speed:</target> + +<source>Time remaining:</source> +<target>Time remaining:</target> + +<source>Time elapsed:</source> +<target>Time elapsed:</target> + +<source>Synchronizing...</source> +<target>Synchronising...</target> + +<source>Minimize to notification area</source> +<target>Minimize to notification area</target> + +<source>Close</source> +<target>Close</target> + +<source>&Pause</source> +<target>&Pause</target> + +<source>Stop</source> +<target>Stop</target> <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target>Create a batch file for unattended synchronisation. To start, double-click this file or schedule in a task planner: %x</target> -<source>Exit</source> -<target>Exit</target> - -<source>Abort synchronization on first error</source> -<target>Abort synchronisation on first error</target> +<source>Stop synchronization at first error</source> +<target>Stop synchronisation at first error</target> <source>Show progress dialog</source> <target>Show progress dialogue</target> -<source>Save log</source> -<target>Save log</target> - -<source>Select folder to save log files</source> -<target>Select folder to save log files</target> +<source>Save log:</source> +<target>Save log:</target> -<source>Limit</source> -<target>Limit</target> +<source>Limit:</source> +<target>Limit:</target> <source>Limit maximum number of log files</source> <target>Limit maximum number of log files</target> +<source>How can I schedule a batch job?</source> +<target>How can I schedule a batch job?</target> + +<source>&Recycle bin</source> +<target>&Recycle bin</target> + <source>Delete on both sides</source> <target>Delete on both sides</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>Delete on both sides even if the file is selected on one side only</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Files will only be synchronised if they pass all filter rules. -Note: File paths must be relative to base directories. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Select filter rules to exclude certain files from synchronisation. Enter file paths relative to their corresponding folder pair.</target> -<source>Include</source> -<target>Include</target> +<source>Include:</source> +<target>Include:</target> -<source>Exclude</source> -<target>Exclude</target> +<source>Exclude:</source> +<target>Exclude:</target> -<source>Time span</source> -<target>Time span</target> +<source>Time span:</source> +<target>Time span:</target> -<source>File size</source> -<target>File size</target> +<source>File size:</source> +<target>File size:</target> -<source>Minimum</source> -<target>Minimum</target> +<source>Minimum:</source> +<target>Minimum:</target> -<source>Maximum</source> -<target>Maximum</target> +<source>Maximum:</source> +<target>Maximum:</target> <source>&Clear</source> <target>&Clear</target> -<source>Global settings</source> -<target>Global settings</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>The following settings are used for all synchronisation jobs.</target> <source>Fail-safe file copy</source> <target>Fail-safe file copy</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</target> + +<source>(recommended)</source> +<target>(recommended)</target> <source>Copy locked files</source> <target>Copy locked files</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Copy shared or locked files using the Volume Shadow Copy Service.</target> + +<source>(requires administrator rights)</source> +<target>(requires administrator rights)</target> <source>Copy file access permissions</source> <target>Copy file access permissions</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Transfer file and folder permissions (requires administrator rights)</target> +<source>Transfer file and folder permissions.</source> +<target>Transfer file and folder permissions.</target> + +<source>Automatic retry on error:</source> +<target>Automatic retry on error:</target> -<source>Restore hidden dialogs</source> -<target>Restore hidden dialogues</target> +<source>Retry count:</source> +<target>Retry count:</target> -<source>External applications</source> -<target>External applications</target> +<source>Delay (in seconds):</source> +<target>Delay (in seconds):</target> + +<source>Customize context menu:</source> +<target>Customise context menu:</target> <source>Description</source> <target>Description</target> +<source>Restore hidden windows</source> +<target>Restore hidden windows</target> + <source>&Default</source> <target>&Default</target> @@ -996,26 +1023,20 @@ Note: File paths must be relative to base directories. <source>Many thanks for localization:</source> <target>Many thanks for localisation:</target> -<source>Start synchronization</source> -<target>Start synchronisation</target> +<source>Save as Batch Job</source> +<target>Save as Batch Job</target> -<source>Comparison settings</source> -<target>Comparison settings</target> +<source>Delete Items</source> +<target>Delete Items</target> -<source>Synchronization settings</source> -<target>Synchronisation settings</target> - -<source>Delete</source> -<target>Delete</target> - -<source>Configure filter</source> -<target>Configure filter</target> +<source>Global Settings</source> +<target>Global Settings</target> -<source>Select time span</source> -<target>Select time span</target> +<source>Select Time Span</source> +<target>Select Time Span</target> -<source>Folder pairs</source> -<target>Folder pairs</target> +<source>Folder Pairs</source> +<target>Folder Pairs</target> <source>Find</source> <target>Find</target> @@ -1026,14 +1047,14 @@ Note: File paths must be relative to base directories. <source>Configuration</source> <target>Configuration</target> -<source>Main bar</source> -<target>Main bar</target> +<source>Main Bar</source> +<target>Main Bar</target> -<source>Filter files</source> -<target>Filter files</target> +<source>Filter Files</source> +<target>Filter Files</target> -<source>Select view</source> -<target>Select view</target> +<source>Select View</source> +<target>Select View</target> <source>Open...</source> <target>Open...</target> @@ -1044,12 +1065,21 @@ Note: File paths must be relative to base directories. <source>Compare both sides</source> <target>Compare both sides</target> +<source>Comparison settings</source> +<target>Comparison settings</target> + +<source>Synchronization settings</source> +<target>Synchronisation settings</target> + +<source>Start synchronization</source> +<target>Start synchronisation</target> + <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </target> @@ -1104,6 +1134,9 @@ Note: File paths must be relative to base directories. <source>Include temporarily</source> <target>Include temporarily</target> +<source>Delete</source> +<target>Delete</target> + <source>Include all</source> <target>Include all</target> @@ -1152,6 +1185,9 @@ Note: File paths must be relative to base directories. <source>Never save &changes</source> <target>Never save &changes</target> +<source>Filter</source> +<target>Filter</target> + <source>Show files that exist on left side only</source> <target>Show files that exist on left side only</target> @@ -1197,12 +1233,15 @@ Note: File paths must be relative to base directories. <source>Set as default</source> <target>Set as default</target> -<source>Operation aborted</source> -<target>Operation aborted</target> - <source>All folders are in sync</source> <target>All folders are in sync</target> +<source>Synchronization Settings</source> +<target>Synchronisation Settings</target> + +<source>Comparison Settings</source> +<target>Comparison Settings</target> + <source>Cannot find %x</source> <target>Cannot find %x</target> @@ -1221,8 +1260,8 @@ Note: File paths must be relative to base directories. <source>&Ignore</source> <target>&Ignore</target> -<source>Fatal Error</source> -<target>Fatal Error</target> +<source>Serious Error</source> +<target>Serious Error</target> <source>&Don't show this warning again</source> <target>&Don't show this warning again</target> @@ -1230,9 +1269,6 @@ Note: File paths must be relative to base directories. <source>&Switch</source> <target>&Switch</target> -<source>Question</source> -<target>Question</target> - <source>&Yes</source> <target>&Yes</target> @@ -1254,8 +1290,8 @@ Note: File paths must be relative to base directories. <source>Initializing...</source> <target>Initialising...</target> -<source>Aborted</source> -<target>Aborted</target> +<source>Stopped</source> +<target>Stopped</target> <source>Completed</source> <target>Completed</target> @@ -1266,9 +1302,6 @@ Note: File paths must be relative to base directories. <source>Log</source> <target>Log</target> -<source>Inactive</source> -<target>Inactive</target> - <source>Today</source> <target>Today</target> @@ -1293,9 +1326,6 @@ Note: File paths must be relative to base directories. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filter</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1335,9 @@ Note: File paths must be relative to base directories. <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> </target> +<source>Move</source> +<target>Move</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1347,9 @@ Note: File paths must be relative to base directories. <pluralform>Do you really want to delete the following %x items?</pluralform> </target> +<source>Exclude</source> +<target>Exclude</target> + <source>Direct</source> <target>Direct</target> @@ -1338,8 +1374,8 @@ Note: File paths must be relative to base directories. <source>- Other side's counterpart to %item_folder%</source> <target>- Other side's counterpart to %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Make hidden warnings and dialogues visible again?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Restore all hidden windows and warnings?</target> <source>Leave as unresolved conflict</source> <target>Leave as unresolved conflict</target> @@ -1464,14 +1500,14 @@ Note: File paths must be relative to base directories. <pluralform>%x days</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Failed to register to receive system messages.</target> +<source>Unable to register to receive system messages.</source> +<target>Unable to register to receive system messages.</target> <source>Cannot set privilege %x.</source> <target>Cannot set privilege %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Failed to suspend system sleep mode.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Unable to suspend system sleep mode.</target> <source>Cannot change process I/O priorities.</source> <target>Cannot change process I/O priorities.</target> diff --git a/BUILD/Languages/finnish.lng b/BUILD/Languages/finnish.lng index 54b8c2c7..45b3b9fc 100644 --- a/BUILD/Languages/finnish.lng +++ b/BUILD/Languages/finnish.lng @@ -2,11 +2,31 @@ <language>Suomi</language> <translator>Nalle Juslén</translator> <locale>fi_FI</locale> - <flag_image>flag_finland.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_finland.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>Molemmat puolet muuttuneet edellisestä täsmäyksestä.</target> @@ -58,9 +78,6 @@ <source>Cannot open file %x.</source> <target>Tiedosto %x ei aukea.</target> -<source>Error</source> -<target>Virhe</target> - <source>File %x does not contain a valid configuration.</source> <target>Tiedosto %x ei sisällä kelvollista kokoonpanoa.</target> @@ -70,12 +87,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>Määrittelyssä on oltava viittaukset hakemistopareista, jos hakemistot kutsutaam komentoriviltä.</target> -<source>Warning</source> -<target>Varoitus</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>Hakemisto määriteltävä vain yhteen määrittelyyn.</target> +<source>Command line</source> +<target>Komentokehote</target> + <source>Syntax:</source> <target>Syntaksi:</target> @@ -91,9 +108,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>Vapaa määrä eri hakemistoja yhdessä määrittelytiedostossa.</target> -<source>Command line</source> -<target>Komentokehote</target> - <source>A folder input field is empty.</source> <target>Hakemiston syöte on tyhjä.</target> @@ -292,8 +306,8 @@ <source>/sec</source> <target>/s</target> -<source>%x items</source> -<target>%x kpl</target> +<source>%x items/sec</source> +<target>%x olioo/s</target> <source>Configuration file %x loaded partially only.</source> <target>Kokoonpanotiedosto %x ladattu vain osittain.</target> @@ -322,11 +336,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Nimi %x ei esiinny tiedostopolussa %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Keskeytys pyydetty: Odotetaan toiminnon loppumista...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Keskeytyspyyntö: Odotetaan tehtävän valmistumista...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Ongelma luoda aikaleimaa versionnissa:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Versiohallinan aikaleimaa ei voida luoda:</target> <source>Cannot read the following XML elements:</source> <target>XML elementit lukukelvottimia:</target> @@ -343,8 +357,8 @@ <source>&Program</source> <target>&Ohjelma</target> -<source>&Content</source> -<target>&Sisältö</target> +<source>&View help</source> +<target>&Näytä ohje</target> <source>&About</source> <target>&Ohje</target> @@ -367,8 +381,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Aloita lataamalla joku .ffs_batch -tiedosto.</target> -<source>Folders to watch</source> -<target>Tarkkailtavat hakemistot</target> +<source>Folders to watch:</source> +<target>Seurattavat hakemistot:</target> <source>Add folder</source> <target>Lisää hakemisto</target> @@ -382,12 +396,15 @@ <source>Select a folder</source> <target>Valitse hakemisto</target> -<source>Idle time [seconds]</source> -<target>Jouto aika [sekunttia]</target> +<source>Idle time (in seconds):</source> +<target>Jouten (s)</target> <source>Idle time between last detected change and execution of command</source> <target>Joutoaika edellisen muutoksen ja käskyn suorittamisen välillä</target> +<source>Command line:</source> +<target>Komentokehoite</target> + <source> The command is triggered if: - files or subfolders change @@ -399,33 +416,30 @@ Käsky suoritetaan jos: - uusi hakemisto ilmestyy (esim. USB tikku) </target> -<source>Start</source> -<target>Käynnistä</target> - -<source>&Retry</source> -<target>&Uudestaan</target> - -<source>Cancel</source> -<target>Lopeta</target> +<source>&Start</source> +<target>&Käynnistä</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Automaattisoitu täsmäytys</target> +<source>About</source> +<target>Ohje</target> <source>Build: %x</source> <target>Versio: %x</target> -<source>About</source> -<target>Ohje</target> - <source>All files</source> <target>Kaikki tiedostot</target> +<source>Automated Synchronization</source> +<target>Automaattinen täsmäytys</target> + <source>Directory monitoring active</source> <target>Hakemistovalvonta päällä</target> <source>Waiting until all directories are available...</source> <target>Odota kunnes kaikki hakemistot on saatavilla...</target> +<source>Error</source> +<target>Virhe</target> + <source>&Restore</source> <target>&Palauta</target> @@ -435,8 +449,11 @@ Käsky suoritetaan jos: <source>&Exit</source> <target>&Poistu</target> -<source>Invalid command line:</source> -<target>Virheellinen komentokehote:</target> +<source>Incorrect command line:</source> +<target>Virheellinen komento:</target> + +<source>&Retry</source> +<target>&Uudestaan</target> <source>File content</source> <target>Tiedoston sisältö</target> @@ -498,8 +515,8 @@ Käsky suoritetaan jos: <source>Target folder input field must not be empty.</source> <target>Kohde hakemiston kenttä on annettava.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Kohde hakemiston version syötettävä.</target> +<source>Please enter a target folder for versioning.</source> +<target>Anna versioinnin kohdehakemisto.</target> <source>Source folder %x not found.</source> <target>Lähdehakemisto %x ei löydy.</target> @@ -537,8 +554,8 @@ Käsky suoritetaan jos: <source>job name</source> <target>työnimi</target> -<source>Synchronization aborted</source> -<target>Täsmäytys lopetettiin</target> +<source>Synchronization stopped</source> +<target>Täsmäytys on pysäytetty</target> <source>Synchronization completed with errors</source> <target>Täsmäytys päättyi virheisiin</target> @@ -555,14 +572,29 @@ Käsky suoritetaan jos: <source>Saving log file %x...</source> <target>Lokitiedosto: tallennetaan %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Paina "Vaihda" ja korjaa virheet FreeFileSync päävalintaikkunassa</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Siirry FreeFileSync -pääikkunaan korjataksesi virheen.</target> + +<source>&Don't show this warning again</source> +<target>&Älä enää näytä tätä varoitusta</target> + +<source>&Ignore</source> +<target>&Unohda</target> + +<source>&Switch</source> +<target>&Vaihda</target> + +<source>Switching to FreeFileSync's main window</source> +<target>Vaihdä FreeFileSync -pääikkunaan</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Siirry FreeFileSync perusikkunaan</target> +<source>&Ignore subsequent errors</source> +<target>&Hylkää toistuvat virheet</target> + +<source>Serious Error</source> +<target>Vakava virhe</target> -<source>Retrying operation after error:</source> -<target>Yritä virheen jälkeen uudestaan:</target> +<source>Check for Program Updates</source> +<target>Etsi ohjelmaan päivitystä</target> <source>A new version of FreeFileSync is available:</source> <target>FreeFileSync:n uusi verio on saatavilla:</target> @@ -570,18 +602,12 @@ Käsky suoritetaan jos: <source>Download now?</source> <target>Lataa nyt?</target> -<source>New version found</source> -<target>Uusi versio saatavilla</target> - <source>&Download</source> <target>&Lataa</target> <source>FreeFileSync is up to date.</source> <target>FreeFileSync on ajan tasalla.</target> -<source>Information</source> -<target>Tietoja</target> - <source>Unable to connect to sourceforge.net.</source> <target>Yhteys sourceforge.net:n ei onnistu.</target> @@ -639,20 +665,20 @@ Käsky suoritetaan jos: <source>Hibernate</source> <target>Horrostila</target> -<source>Selected variant:</source> -<target>Valitse tyyppi:</target> +<source>Alternate comparison settings</source> +<target>Vaihtoehtoinen asetus vertailulle</target> -<source>Select alternate comparison settings</source> -<target>Muuta vertailun asetusta</target> +<source>Alternate synchronization settings</source> +<target>Vaihtoehtoinen asetus täsmäytykselle</target> -<source>Select alternate synchronization settings</source> -<target>Muuta täsmäytyksen asetus</target> +<source>Local filter</source> +<target>Paikallinen suodin</target> -<source>Filter is active</source> -<target>Suodin aktivoitu</target> +<source>Active</source> +<target>Aktiivinen</target> -<source>No filter selected</source> -<target>Suodin valitsematta</target> +<source>None</source> +<target>Ei yhtään</target> <source>Remove alternate settings</source> <target>Poista muut asetukset</target> @@ -666,6 +692,15 @@ Käsky suoritetaan jos: <source>Paste</source> <target>Liitä</target> +<source>Alternate Comparison Settings</source> +<target>Vaihtoehtoinen asetus vertailulle</target> + +<source>Alternate Synchronization Settings</source> +<target>Vaihtoehtoinen asetus täsmäytykselle</target> + +<source>Local Filter</source> +<target>Paikallinen suodin</target> + <source>&New</source> <target>&Uusi</target> @@ -681,15 +716,18 @@ Käsky suoritetaan jos: <source>2. &Synchronize</source> <target>2. &Täsmäytä</target> +<source>&Global settings</source> +<target>&Yleiset asetukset</target> + <source>&Language</source> <target>&Kieli</target> +<source>&Find...</source> +<target>&Etsi...</target> + <source>&Export file list...</source> <target>&Vie tiedostojoukko...</target> -<source>&Global settings</source> -<target>&Yleiset asetukset</target> - <source>&Tools</source> <target>&Asetukset</target> @@ -699,12 +737,15 @@ Käsky suoritetaan jos: <source>Check &automatically once a week</source> <target>Tarkista &viikoittain</target> -<source>Check for new &version</source> -<target>Onko uusi &versio saatavilla</target> +<source>&Check for new version</source> +<target>&Hae uusi versio</target> <source>Compare</source> <target>Vertaile</target> +<source>Cancel</source> +<target>Lopeta</target> + <source>Synchronize</source> <target>Täsmäytä</target> @@ -717,6 +758,15 @@ Käsky suoritetaan jos: <source>Swap sides</source> <target>Puolten vaihto</target> +<source>Close search bar</source> +<target>Sulje hakukenttä</target> + +<source>Find:</source> +<target>Etsi</target> + +<source>Match case</source> +<target>Täsmää kirjainkoko</target> + <source>Save as batch job</source> <target>Tallenna eräajona</target> @@ -738,74 +788,20 @@ Käsky suoritetaan jos: <source>Total bytes to copy</source> <target>Kopioitava määrä tavuja</target> -<source>Items found:</source> -<target>Osia löytyi:</target> - -<source>Speed:</source> -<target>Nopeus:</target> - -<source>Time remaining:</source> -<target>Aikaa jäljellä:</target> - -<source>Time elapsed:</source> -<target>Aikaa kulunut:</target> - -<source>Synchronizing...</source> -<target>Täsmäytetään...</target> - -<source>Minimize to notification area</source> -<target>Pienennä huomiokenttään</target> - -<source>On completion</source> -<target>Valmistuttua</target> - -<source>Close</source> -<target>Sulje</target> +<source>Select a variant:</source> +<target>Valitse vaihtoehto:</target> -<source>&Pause</source> -<target>&Keskeytä</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Tunnista tiedostojen vastaavuus ajan ja koon mukaan.</target> -<source>Variant</source> -<target>Vaihtoehto</target> +<source>Identify equal files by comparing the file content.</source> +<target>Tunnista tiedostojen vastaavuus sisällöstä.</target> -<source>Statistics</source> -<target>Tilastot</target> +<source>Symbolic links:</source> +<target>Pikakuvike:</target> -<source>&Don't show this dialog again</source> -<target>&Älä näytä valitaa uudestaan</target> - -<source>Select a variant</source> -<target>Valitse tyyppi</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Tiedostot samat jos - - viimeinen kirjoitusaika ja pvm - - tiedostokoko -ovat samat -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Tiedostot samat jos, - - tiedoston sisältö -on sama -</target> - -<source>Symbolic Link handling</source> -<target>Pikakuvakkeiden hallinta</target> - -<source>Help</source> -<target>Ohje</target> +<source>More information</source> +<target>Lisää tietoa</target> <source>OK</source> <target>OK</target> @@ -813,11 +809,11 @@ on sama <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Löydä ja suorita muutokset molemmilla puolilla. Poistot, siirrot ja eroavuudet tunnistetaan tietokannan avulla.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Vasemman peilaava varmuuskopio. Oikeanpuoleinen hakemisto muutetaan täsmäytyksessä vastaamaan tarkasti vasenta.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Tee tarkka kopio vasemmasta oikealle.</target> -<source>Copy new or updated files to right folder.</source> -<target>Kopioi uudet tai päivitetyt tiedostot oikeaan kansioon.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Monista muuttuneet ja uudet oikealle.</target> <source>Configure your own synchronization rules.</source> <target>Määritä omat täsmäytyssäännöt.</target> @@ -828,8 +824,35 @@ on sama <source>Requires database files. Not supported by all file systems.</source> <target>Vaatii tietokantaa. Ei toimi kaikissa käyttöjärjestelmissä.</target> -<source>Error handling</source> -<target>Virheiden käsittely</target> +<source>Delete files:</source> +<target>Poista tiedosto:</target> + +<source>Permanent</source> +<target>Pysyvä</target> + +<source>Delete or overwrite files permanently</source> +<target>Poista tai korvaa tiedostoja pysyvästi</target> + +<source>&Recycle bin</source> +<target>&Roskakori</target> + +<source>Back up deleted and overwritten files in the recycle bin</source> +<target>Tallenna poistetut/ylikirjoitetut tiedostot Roskakoriin</target> + +<source>Versioning</source> +<target>Versiointi</target> + +<source>Move files to a user-defined folder</source> +<target>Siirrä tiedostot määrättyyn hakemistoon</target> + +<source>Naming convention:</source> +<target>Nimeämis käytäntö:</target> + +<source>Show examples</source> +<target>Näytä esimerkki</target> + +<source>Handle errors:</source> +<target>Hoida virheet:</target> <source>Ignore</source> <target>Ohita</target> @@ -843,135 +866,153 @@ on sama <source>Show pop-up on errors or warnings</source> <target>Näytä Pop-Up (virheet/varoitukset)</target> -<source>Deletion handling</source> -<target>Poistotapa</target> +<source>On completion:</source> +<target>Kun valmis:</target> -<source>Permanent</source> -<target>Pysyvä</target> +<source>Start synchronization now?</source> +<target>Kännistetäänkö täsmäyts?</target> -<source>Delete or overwrite files permanently</source> -<target>Poista tai korvaa tiedostoja pysyvästi</target> +<source>Variant:</source> +<target>Vaihtoehto</target> -<source>Recycle bin</source> -<target>Roskakori</target> +<source>Statistics</source> +<target>Tilastot</target> -<source>Back up deleted and overwritten files in the recycle bin</source> -<target>Tallenna poistetut/ylikirjoitetut tiedostot Roskakoriin</target> +<source>&Don't show this dialog again</source> +<target>&Älä näytä valitaa uudestaan</target> -<source>Versioning</source> -<target>Versiointi</target> +<source>Items found:</source> +<target>Osia löytyi:</target> -<source>Move files to a user-defined folder</source> -<target>Siirrä tiedostot määrättyyn hakemistoon</target> +<source>Speed:</source> +<target>Nopeus:</target> -<source>Naming convention:</source> -<target>Nimeämis käytäntö:</target> +<source>Time remaining:</source> +<target>Aikaa jäljellä:</target> + +<source>Time elapsed:</source> +<target>Aikaa kulunut:</target> + +<source>Synchronizing...</source> +<target>Täsmäytetään...</target> + +<source>Minimize to notification area</source> +<target>Pienennä huomiokenttään</target> + +<source>Close</source> +<target>Sulje</target> + +<source>&Pause</source> +<target>&Keskeytä</target> -<source>Batch job</source> -<target>Eräajo</target> +<source>Stop</source> +<target>Keskeytä</target> <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target>Luo eräajo-tiedosto automaattiseen täsmäytykseen. Käynnista tuplaklickillä tai ajasta: %x</target> -<source>Exit</source> -<target>Poistu</target> - -<source>Abort synchronization on first error</source> -<target>Keskeytä täsmäytys ensimmäisestä virheestä</target> +<source>Stop synchronization at first error</source> +<target>Keskeytä täsmäytys ensimmäiseen virheeseen</target> <source>Show progress dialog</source> <target>Näytä etenemä ikkuna</target> -<source>Save log</source> -<target>Tallenna loki</target> - -<source>Select folder to save log files</source> -<target>Valitse tallennushakemisto lokeille</target> +<source>Save log:</source> +<target>Tallenna loki:</target> -<source>Limit</source> -<target>Raja</target> +<source>Limit:</source> +<target>Raja:</target> <source>Limit maximum number of log files</source> <target>Lokeja enintäin</target> +<source>How can I schedule a batch job?</source> +<target>Miten ajastan eräajon?</target> + <source>Delete on both sides</source> <target>Poista molemmilta puolilta</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>Poista molemmin puolin, vaikka tiedosto on valittu vain toisella puolella</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Tiedostot synkronoidaan vain jos kaikki ehdot täyttyy. -HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Ohitettavien tiedostojen ehdot täsmäytysessä. Anna hakemistopariin nähden suhteellinen osoite.</target> -<source>Include</source> -<target>Sisällytä</target> +<source>Include:</source> +<target>Sisällytä:</target> -<source>Exclude</source> -<target>Sulje pois</target> +<source>Exclude:</source> +<target>Sulje pois:</target> -<source>Time span</source> -<target>Aikajana</target> +<source>Time span:</source> +<target>Aikajakso:</target> -<source>File size</source> -<target>Tiedosto koko</target> +<source>File size:</source> +<target>Tiedosto koko:</target> -<source>Minimum</source> -<target>Pienin</target> +<source>Minimum:</source> +<target>Vähintäin:</target> -<source>Maximum</source> -<target>Enintäin</target> +<source>Maximum:</source> +<target>Enintäin:</target> <source>&Clear</source> <target>&Pyyhi</target> -<source>Global settings</source> -<target>Yleiset asetukset</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Nämä asetukset käytetään kaikkiin täsmäytyksiin.</target> <source>Fail-safe file copy</source> <target>Varmennettu tiedostokopiointi</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Kopio ensin välitiedostoon (*.ffs_tmp) ja nimeä sitten uudestaan. Varmistaa toimivuudet vakavan virheen tapahtuessa.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Kopioi väliaikaistiedostoon (*.ffs_tmp) ennen kohteen ylikirjoitusta. +Tällä varmistetaa eheys vaikka vakava virhe tapahtuisi. +</target> + +<source>(recommended)</source> +<target>(suositus)</target> <source>Copy locked files</source> <target>Kopioi lukitut tiedostot</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Kopioi jaetut/lukitut tiedostot Volume Shadow Copy Service:lla (vaatii pääkäyttäjän oikeudet)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Jaettujen tai lukittujen tiedostojen kopiointi käyttäen Volume Shadow Copy Service</target> + +<source>(requires administrator rights)</source> +<target>(edellyttää pääkäyttäjän oikeuksia)</target> <source>Copy file access permissions</source> <target>Kopioi tiedoston käyttöoikeuksia</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Vie tiedosto ja hakemisto ominaisuudet(vaatii pääkäyttäjän oikeudet)</target> +<source>Transfer file and folder permissions.</source> +<target>Tiedosto ja hakemisto määreet siirretään.</target> + +<source>Automatic retry on error:</source> +<target>Automaattinen uusintayritys virheestä:</target> -<source>Restore hidden dialogs</source> -<target>Palauta piiloitetut ikkunat</target> +<source>Retry count:</source> +<target>Uusintayrityksiä:</target> -<source>External applications</source> -<target>Ulkopuolinen sovellus</target> +<source>Delay (in seconds):</source> +<target>Viive (s):</target> + +<source>Customize context menu:</source> +<target>Yksilöi valikko:</target> <source>Description</source> <target>Seloste</target> +<source>Restore hidden windows</source> +<target>Palauta piiloitettu ikkuna</target> + <source>&Default</source> <target>&Vakio</target> -<source>Find what:</source> -<target>Etsi:</target> - -<source>Match case</source> -<target>Täsmää kirjainkoko</target> - -<source>&Find next</source> -<target>&Etsi seuraava</target> - <source>Source code written in C++ using:</source> <target>Koodikieli on C++ käyttäen:</target> @@ -996,43 +1037,37 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>Many thanks for localization:</source> <target>Paljon kiitoksia kääntäjille:</target> -<source>Start synchronization</source> -<target>Käynnistä täsmäytys</target> +<source>Save as Batch Job</source> +<target>Tallenna eräajona</target> -<source>Comparison settings</source> -<target>Vertailun asetukset</target> +<source>Delete Items</source> +<target>Poista kohteet</target> -<source>Synchronization settings</source> -<target>Täsmäytyksen asetukset</target> +<source>Global Settings</source> +<target>Yleinen asetus</target> -<source>Delete</source> -<target>Poista</target> +<source>Select Time Span</source> +<target>Valitse aikajakso</target> -<source>Configure filter</source> -<target>Määritä suodin</target> +<source>Folder Pairs</source> +<target>Hakemisto parit</target> <source>Find</source> <target>Etsi</target> -<source>Select time span</source> -<target>Valitse aikajana</target> - -<source>Folder pairs</source> -<target>Hakemistoparit</target> - <source>Overview</source> <target>Yleiskatsaus</target> <source>Configuration</source> <target>Asetukset</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Pääpalkki</target> -<source>Filter files</source> +<source>Filter Files</source> <target>Suodata tiedostot</target> -<source>Select view</source> +<source>Select View</source> <target>Valitse näkymä</target> <source>Open...</source> @@ -1044,14 +1079,14 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>Compare both sides</source> <target>Vertaile molemmat puolet</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Haluatko varmasti suorittaa komentoa %y yhteen?</pluralform> -<pluralform>Haluatko varmasti suorittaa komentoa %y %x:n?</pluralform> -</target> +<source>Comparison settings</source> +<target>Vertailun asetukset</target> + +<source>Synchronization settings</source> +<target>Täsmäytyksen asetukset</target> + +<source>Start synchronization</source> +<target>Käynnistä täsmäytys</target> <source>Confirm</source> <target>Vahvista</target> @@ -1089,12 +1124,6 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>Set direction:</source> <target>Aseta suunta:</target> -<source>Exclude temporarily</source> -<target>Sulje pois, tilapäisesti</target> - -<source>Include temporarily</source> -<target>Sisällytä, tilapäisesti</target> - <source>multiple selection</source> <target>monivalinta</target> @@ -1104,6 +1133,15 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>Exclude via filter:</source> <target>Sulje pois suotimella:</target> +<source>Exclude temporarily</source> +<target>Sulje pois, tilapäisesti</target> + +<source>Include temporarily</source> +<target>Sisällytä, tilapäisesti</target> + +<source>Delete</source> +<target>Poista</target> + <source>Include all</source> <target>Valitse kaikki</target> @@ -1146,11 +1184,14 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>Do you want to save changes to %x?</source> <target>Haluatko tallentaa muutokset: %x?</target> +<source>Never save &changes</source> +<target>Älä tallenna &muutoksia</target> + <source>Do&n't save</source> <target>Äl&ä tallenna</target> -<source>Never save &changes</source> -<target>Älä tallenna &muutoksia</target> +<source>Filter</source> +<target>Suodin</target> <source>Show files that exist on left side only</source> <target>Näytä vain vasemmalla esiintyvät tiedostot</target> @@ -1197,12 +1238,18 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>Set as default</source> <target>Aseta oletukseksi</target> -<source>Operation aborted</source> -<target>Toiminto lopetettiin</target> - <source>All folders are in sync</source> <target>Kaikki hakemistot täsmäytetty</target> +<source>Synchronization Settings</source> +<target>Täsmäytyksen asetukset</target> + +<source>Comparison Settings</source> +<target>Vertailun asetukset</target> + +<source>Cannot find %x</source> +<target>En löydä %x</target> + <source>Comma-separated values</source> <target>Pilkulla erotetut arvot</target> @@ -1212,30 +1259,6 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>Searching for program updates...</source> <target>Ohjelmapäivytys haetaa...</target> -<source>&Ignore subsequent errors</source> -<target>&Hylkää toistuvat virheet</target> - -<source>&Ignore</source> -<target>&Unohda</target> - -<source>Fatal Error</source> -<target>Kohtalokas virhe</target> - -<source>&Don't show this warning again</source> -<target>&Älä enää näytä tätä varoitusta</target> - -<source>&Switch</source> -<target>&Vaihda</target> - -<source>Question</source> -<target>Kysymys</target> - -<source>&Yes</source> -<target>&Kyllä</target> - -<source>&No</source> -<target>&Ei</target> - <source>Scanning...</source> <target>Tiedostoja haetaan...</target> @@ -1245,14 +1268,17 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>Info</source> <target>Info</target> +<source>Warning</source> +<target>Varoitus</target> + <source>Paused</source> <target>Pysäytetty</target> <source>Initializing...</source> <target>Alustus...</target> -<source>Aborted</source> -<target>Keskeytetty</target> +<source>Stopped</source> +<target>Keskeytys</target> <source>Completed</source> <target>Valmis</target> @@ -1263,12 +1289,6 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>Log</source> <target>Loki</target> -<source>Cannot find %x</source> -<target>En löydä %x</target> - -<source>Inactive</source> -<target>Lepotilassa</target> - <source>Today</source> <target>Tänään</target> @@ -1293,9 +1313,6 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Suodin</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1322,9 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <pluralform>Haluatko varmasti siirtää nämä %x kohteet Roskakoriin?</pluralform> </target> +<source>Move</source> +<target>Siirrä</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1334,9 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <pluralform>Haluatko todella poistaa nämä %x kohdetta?</pluralform> </target> +<source>Exclude</source> +<target>Sulje pois</target> + <source>Direct</source> <target>Suoraan</target> @@ -1338,8 +1361,8 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <source>- Other side's counterpart to %item_folder%</source> <target>- Toisen puolen osa liittyy %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Näytä piiloitetut varoitukset/ikkunnat uudestaan?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Palauta kaikki piiloitetut ikkunat ja varoitukset?</target> <source>Leave as unresolved conflict</source> <target>Jätä ratkaisemattomana virheenä</target> @@ -1464,14 +1487,14 @@ HUOM: Tiedostopolku oltava suhteessa juurihakemistoon. <pluralform>%x päivää</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Järjestelmäviestien vastaanottoa ei voitu aktivoida.</target> +<source>Unable to register to receive system messages.</source> +<target>Virheviestien vastaanotto ei onnistu.</target> <source>Cannot set privilege %x.</source> <target>Oikeuksia %x ei voitu asettaa.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Lepotilan keskeytys epäonnistui.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Lepotilan katkaisu ei onnistu.</target> <source>Cannot change process I/O priorities.</source> <target>Prosessin I/O -pririteetin muutos ei onnistu.</target> diff --git a/BUILD/Languages/french.lng b/BUILD/Languages/french.lng index ece832e9..d040b728 100644 --- a/BUILD/Languages/french.lng +++ b/BUILD/Languages/french.lng @@ -2,16 +2,33 @@ <language>Français</language> <translator>Jean-François Hartmann</translator> <locale>fr_FR</locale> - <flag_image>flag_france.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_france.png</image> + <plural_count>2</plural_count> <plural_definition>n <= 1 ? 0 : 1</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>Retrying operation...</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>Les deux côtés ont changé depuis la dernière synchronisation.</target> <source>Cannot determine sync-direction:</source> -<target>Impossible de déterminer le sens de la synchro :</target> +<target>Impossible de déterminer le sens de la synchronisation :</target> <source>No change since last synchronization.</source> <target>Aucun changement depuis la dernière synchronisation.</target> @@ -44,7 +61,7 @@ <target>Suppression du lien symbolique %x</target> <source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source> -<target>La Corbeille n'est pas disponible por les dossiers suivants. Les fichiers seront détruits définitivement /</target> +<target>La Corbeille n'est pas disponible por les dossiers suivants. Les fichiers seront détruits définitivement :</target> <source>An exception occurred</source> <target>Une erreur s'est produite</target> @@ -65,7 +82,7 @@ <target>Le fichier %x ne contient pas une configuration valide.</target> <source>Unequal number of left and right directories specified.</source> -<target>Nombre incorrect de répertoires à gauche et à droite.</target> +<target>Le nombre de répertoires à gauche et à droite n'est pas identique.</target> <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>Le fichier de configuration ne peut pas contenir de paramètres au niveau de paires de répertoires quand ceux-ci sont définis par une ligne de commande.</target> @@ -242,10 +259,10 @@ <target>Création du fichier %x</target> <source>Items processed:</source> -<target>Elements traités :</target> +<target>Élements traités :</target> <source>Items remaining:</source> -<target>Elements restants :</target> +<target>Élements restants :</target> <source>Total time:</source> <target>Durée totale :</target> @@ -292,8 +309,8 @@ <source>/sec</source> <target>/sec</target> -<source>%x items</source> -<target>%x éléments</target> +<source>%x items/sec</source> +<target>%x éléments/sec</target> <source>Configuration file %x loaded partially only.</source> <target>Le fichier de configuration %x a été chargé seulement partiellement.</target> @@ -322,11 +339,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Le nom de volume %x ne fait pas partie du chemin %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Abandon demandé : En attente de la fin de l'opération en cours...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Arrêt demandé : En attente de la fin de l'opération en cours...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Impossible de créer l'horodatage des versions</target> +<source>Unable to create timestamp for versioning:</source> +<target>Impossible de créer l'horodatage des versions :</target> <source>Cannot read the following XML elements:</source> <target>Impossible de lire les données XML suivantes :</target> @@ -343,8 +360,8 @@ <source>&Program</source> <target>&Programme</target> -<source>&Content</source> -<target>&Contenu</target> +<source>&View help</source> +<target>&Afficher l'aide</target> <source>&About</source> <target>A &Propos de</target> @@ -367,8 +384,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Pour démarrer, il faut importer un fichier .ffs_batch.</target> -<source>Folders to watch</source> -<target>Dossiers à examiner</target> +<source>Folders to watch:</source> +<target>Dossiers à surveiller :</target> <source>Add folder</source> <target>Ajout d'un dossier</target> @@ -382,12 +399,15 @@ <source>Select a folder</source> <target>Choisissez un dossier</target> -<source>Idle time [seconds]</source> -<target>Pause [secondes]</target> +<source>Idle time (in seconds):</source> +<target>Durée d'inactivité (en secondes) :</target> <source>Idle time between last detected change and execution of command</source> <target>Délai entre le dernier changement détecté et la dernière exécution de la commande</target> +<source>Command line:</source> +<target>Ligne de commande :</target> + <source> The command is triggered if: - files or subfolders change @@ -399,8 +419,8 @@ La commande est déclenchée si : - un nouveau dossier apparait (par exemple : insertion d'une clé USB) </target> -<source>Start</source> -<target>Démarrer</target> +<source>&Start</source> +<target>&Démarrer</target> <source>&Retry</source> <target>&Réessayer</target> @@ -408,9 +428,6 @@ La commande est déclenchée si : <source>Cancel</source> <target>Annuler</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Synchronisation Automatisée</target> - <source>Build: %x</source> <target>Généré : %x</target> @@ -420,6 +437,9 @@ La commande est déclenchée si : <source>All files</source> <target>Tous les fichiers</target> +<source>Automated Synchronization</source> +<target>Synchronisation Automatique</target> + <source>Directory monitoring active</source> <target>Gestion des répertoires active</target> @@ -435,7 +455,7 @@ La commande est déclenchée si : <source>&Exit</source> <target>&Quitter</target> -<source>Invalid command line:</source> +<source>Incorrect command line:</source> <target>Ligne de commande incorrecte :</target> <source>File content</source> @@ -498,8 +518,8 @@ La commande est déclenchée si : <source>Target folder input field must not be empty.</source> <target>L'entrée dossier de destination ne doit pas être vide.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>L'entrée dossier de gestion des versions ne doit pas être vide.</target> +<source>Please enter a target folder for versioning.</source> +<target>Veuillez entrer le dossier destinataire pour la gestion des versions.</target> <source>Source folder %x not found.</source> <target>Dossier source %x non trouvé.</target> @@ -537,8 +557,8 @@ La commande est déclenchée si : <source>job name</source> <target>nom du job</target> -<source>Synchronization aborted</source> -<target>Synchronisation abandonnée</target> +<source>Synchronization stopped</source> +<target>Synchronisation arrêtée</target> <source>Synchronization completed with errors</source> <target>Synchronisation terminée avec des erreurs</target> @@ -555,14 +575,11 @@ La commande est déclenchée si : <source>Saving log file %x...</source> <target>Enregistrement du fichier log %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Cliquez sur "Permuter" pour résoudre les problèmes dans l'écran principal de FreeFileSync.</target> - -<source>Switching to FreeFileSync main dialog</source> -<target>Passage à la fenêtre principale de FreeFileSync</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Vous pouvez basculer vers la fenêtre principale de FreeFileSync pour résoudre ce problème.</target> -<source>Retrying operation after error:</source> -<target>Réessauer l'opération après erreur :</target> +<source>Switching to FreeFileSync's main window</source> +<target>Basculer vers la fenêtre principale de FreeFileSync</target> <source>A new version of FreeFileSync is available:</source> <target>Une nouvelle version de FreeFileSync est disponible</target> @@ -570,8 +587,8 @@ La commande est déclenchée si : <source>Download now?</source> <target>Télécharger maintenant ?</target> -<source>New version found</source> -<target>Une nouvelle version a été trouvée</target> +<source>Check for Program Updates</source> +<target>Recherche des Mises à Jour</target> <source>&Download</source> <target>&Télécharger</target> @@ -639,20 +656,20 @@ La commande est déclenchée si : <source>Hibernate</source> <target>Figer</target> -<source>Selected variant:</source> -<target>Variante choisie :</target> +<source>Alternate comparison settings</source> +<target>configuration distincte de la comparaison</target> -<source>Select alternate comparison settings</source> -<target>Choisir d'autres paramètres de comparaison</target> +<source>Alternate synchronization settings</source> +<target>configuration distincte de la synchronisation</target> -<source>Select alternate synchronization settings</source> -<target>Sélectionner une autre configuration de la synchronisation</target> +<source>Local filter</source> +<target>Filtre local</target> -<source>Filter is active</source> -<target>Le filtre est actif</target> +<source>Active</source> +<target>Actif</target> -<source>No filter selected</source> -<target>Aucun filtre sélectionné</target> +<source>None</source> +<target>Aucun</target> <source>Remove alternate settings</source> <target>Supprimer les paramètres de rechange</target> @@ -666,6 +683,15 @@ La commande est déclenchée si : <source>Paste</source> <target>Coller</target> +<source>Alternate Comparison Settings</source> +<target>Configuration Distincte de la Comparaison</target> + +<source>Alternate Synchronization Settings</source> +<target>Configuration Distincte de la Synchronisation</target> + +<source>Local Filter</source> +<target>Filtre Local</target> + <source>&New</source> <target>&Nouveau</target> @@ -681,15 +707,18 @@ La commande est déclenchée si : <source>2. &Synchronize</source> <target>2. &Synchroniser</target> +<source>&Global settings</source> +<target>&Paramètres généraux</target> + <source>&Language</source> <target>&Langue</target> +<source>&Find...</source> +<target>&Rechercher...</target> + <source>&Export file list...</source> <target>&Exportation de la liste des fichiers...</target> -<source>&Global settings</source> -<target>&Paramètres généraux</target> - <source>&Tools</source> <target>Ou&tils</target> @@ -699,18 +728,12 @@ La commande est déclenchée si : <source>Check &automatically once a week</source> <target>Contrôler &automatiquement une fois par semaine</target> -<source>Check for new &version</source> -<target>Existence d'une nouvelle &version</target> +<source>&Check for new version</source> +<target>&Vérifier les nouvelles versions</target> <source>Compare</source> <target>Comparer</target> -<source>Comparison settings</source> -<target>Paramètres de comparaison</target> - -<source>Synchronization settings</source> -<target>Paramétrage de la synchronisation</target> - <source>Synchronize</source> <target>Synchroniser</target> @@ -723,6 +746,15 @@ La commande est déclenchée si : <source>Swap sides</source> <target>Permuter les côtés</target> +<source>Close search bar</source> +<target>Fermer la barre de recherche</target> + +<source>Find:</source> +<target>Rechercher :</target> + +<source>Match case</source> +<target>Respecter la casse</target> + <source>Save as batch job</source> <target>Enrgistrer en temps que fichier batch</target> @@ -744,74 +776,20 @@ La commande est déclenchée si : <source>Total bytes to copy</source> <target>Nombre total d'octets à copier</target> -<source>Items found:</source> -<target>Elements trouvés :</target> - -<source>Speed:</source> -<target>Vitesse :</target> +<source>Select a variant:</source> +<target>Choisir une variante :</target> -<source>Time remaining:</source> -<target>Temps restant :</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Reconnaître les fichiers identiques à l'aide de leur taille et de leur date.</target> -<source>Time elapsed:</source> -<target>Temps écoulé :</target> +<source>Identify equal files by comparing the file content.</source> +<target>Reconnaître les fichiers identiques à l'aide de leur contenu.</target> -<source>Synchronizing...</source> -<target>Synchronisation en cours...</target> +<source>Symbolic links:</source> +<target>Liens symboliques</target> -<source>Minimize to notification area</source> -<target>Réduction à la zone de notification</target> - -<source>On completion</source> -<target>À la fin</target> - -<source>Close</source> -<target>Fermer</target> - -<source>&Pause</source> -<target>&Pause</target> - -<source>Variant</source> -<target>Variante</target> - -<source>Statistics</source> -<target>Statistiques</target> - -<source>&Don't show this dialog again</source> -<target>&Ne plus afficher cette boîte de dialogue</target> - -<source>Select a variant</source> -<target>Choisir une variante</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Les fichiers sont considérés comme identiques si - - la date et l'heure de modification - - la taille des fichiers -sont les mêmes -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Les fichiers sont considérés comme identiques si - - leur contenu -est identique -</target> - -<source>Symbolic Link handling</source> -<target>Gestion des Liens Symboliques</target> - -<source>Help</source> -<target>Aide</target> +<source>More information</source> +<target>Plus d'informations</target> <source>OK</source> <target>OK</target> @@ -819,11 +797,11 @@ est identique <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identifier et propager les modifications des deux côtés. Suppressions, déplacements et conflits sont détectés automatiquement en utilisant une base de données.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Copie miroir du dossier de gauche. Le dossier de droite est modifié pour être strictement identique après la synchronisation.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Créer une copie miroir du dossier de gauche qui correspondra exactement à celui de droite après la synchronisation.</target> -<source>Copy new or updated files to right folder.</source> -<target>Copie les fichiers nouveaux ou modifiés dans le dossier de droite.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Copier les fichiers nouveaux ou mis à jour dans le dossier de droite.</target> <source>Configure your own synchronization rules.</source> <target>Paramétrage de vos règles de synchronisation.</target> @@ -834,23 +812,8 @@ est identique <source>Requires database files. Not supported by all file systems.</source> <target>Exige les fichiers de la base de données. Non supporté par tous les systèmes de fichiers.</target> -<source>Error handling</source> -<target>Erreur de gestion de fichiers</target> - -<source>Ignore</source> -<target>Ignorer</target> - -<source>Hide all error and warning messages</source> -<target>Masquer tous les messages d'erreurs et les avertissements</target> - -<source>Pop-up</source> -<target>Pop-up</target> - -<source>Show pop-up on errors or warnings</source> -<target>Montrer les messages d'avertissement ou d'erreur</target> - -<source>Deletion handling</source> -<target>Gestion des suppressions</target> +<source>Delete files:</source> +<target>Supprimer les fichiers :</target> <source>Permanent</source> <target>Permanent</target> @@ -873,56 +836,89 @@ est identique <source>Naming convention:</source> <target>Convention de nommage :</target> -<source>Batch job</source> -<target>Traitement batch</target> +<source>Show examples</source> +<target>Afficher les exemples</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Créer un fichier batch pour une synchronisation non assitée. Pour démarrer, double-cliquez sur ce fichier ou planifiez-le dans le gestionnaire des tâches : %x</target> +<source>Handle errors:</source> +<target>Gestion des erreurs :</target> -<source>Exit</source> -<target>Quitter</target> +<source>Ignore</source> +<target>Ignorer</target> -<source>Abort synchronization on first error</source> -<target>Abandonner la synchronisation dès la première erreur</target> +<source>Hide all error and warning messages</source> +<target>Masquer tous les messages d'erreurs et les avertissements</target> -<source>Show progress dialog</source> -<target>Montrer la fenêtre de progression</target> +<source>Pop-up</source> +<target>Pop-up</target> -<source>Save log</source> -<target>Sauvegarder le fichier log</target> +<source>Show pop-up on errors or warnings</source> +<target>Montrer les messages d'avertissement ou d'erreur</target> -<source>Select folder to save log files</source> -<target>Choisir le dossier de sauvegarde des fichiers log</target> +<source>On completion:</source> +<target>A la fin :</target> -<source>Limit</source> -<target>Limite</target> +<source>Start synchronization now?</source> +<target>Démarrer la synchronisation maintenant ?</target> -<source>Limit maximum number of log files</source> -<target>Nombre maximal de fichiers log</target> +<source>Variant:</source> +<target>Variante :</target> -<source>Source code written in C++ using:</source> -<target>Code source écrit en C++ utilisant :</target> +<source>Statistics</source> +<target>Statistiques</target> -<source>If you like FreeFileSync</source> -<target>Si vous aimez FreeFileSync</target> +<source>&Don't show this dialog again</source> +<target>&Ne plus afficher cette boîte de dialogue</target> -<source>Donate with PayPal</source> -<target>Faites un don avec PayPal</target> +<source>Items found:</source> +<target>Élements trouvés :</target> -<source>Many thanks for localization:</source> -<target>Un grand merci pour la traduction à :</target> +<source>Speed:</source> +<target>Vitesse :</target> -<source>Feedback and suggestions are welcome</source> -<target>Vos commentaires et vos suggestions sont les bienvenus</target> +<source>Time remaining:</source> +<target>Temps restant :</target> -<source>Homepage</source> -<target>Accueil</target> +<source>Time elapsed:</source> +<target>Temps écoulé :</target> -<source>Email</source> -<target>Email</target> +<source>Synchronizing...</source> +<target>Synchronisation en cours...</target> -<source>Published under the GNU General Public License</source> -<target>Publié sous licence GNU General Public License</target> +<source>Minimize to notification area</source> +<target>Réduction à la zone de notification</target> + +<source>Close</source> +<target>Fermer</target> + +<source>&Pause</source> +<target>&Pause</target> + +<source>Stop</source> +<target>Arrêt</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Créer un fichier batch pour une synchronisation non assitée. Pour démarrer, double-cliquez sur ce fichier ou planifiez-le dans le gestionnaire des tâches : %x</target> + +<source>Stop synchronization at first error</source> +<target>Arrêter la synchronisation à la première erreur</target> + +<source>Show progress dialog</source> +<target>Montrer la fenêtre de progression</target> + +<source>Save log:</source> +<target>Sauvegarder le fichier log :</target> + +<source>Limit:</source> +<target>Mimite :</target> + +<source>Limit maximum number of log files</source> +<target>Nombre maximal de fichiers log</target> + +<source>How can I schedule a batch job?</source> +<target>Comment plannifier un job batch ?</target> + +<source>&Recycle bin</source> +<target>&Corbeille</target> <source>Delete on both sides</source> <target>Suppression des deux côtés</target> @@ -930,95 +926,125 @@ est identique <source>Delete on both sides even if the file is selected on one side only</source> <target>Suppression des deux côtés même si le fichier n'est sélectionné que d'un seul côté</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Les fichiers ne seront synchronisés que s'ils satisfont aux règles de filtrage. -Note : Les chemins doivent être relatifs aux répertoires de base. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Sélectionnez les règles de filtrage pour exclure certains fichiers de la synchronisation. Entrez les chemins des fichiers par rapport à leur paire de dossiers.</target> -<source>Include</source> -<target>Inclure</target> +<source>Include:</source> +<target>Inclure :</target> -<source>Exclude</source> -<target>Exclure</target> +<source>Exclude:</source> +<target>Exclure :</target> -<source>Time span</source> -<target>Durée</target> +<source>Time span:</source> +<target>Intervalle de temps :</target> -<source>File size</source> -<target>Taille du fichier</target> +<source>File size:</source> +<target>Taille du fichier :</target> -<source>Minimum</source> -<target>Minimum</target> +<source>Minimum:</source> +<target>Minimum :</target> -<source>Maximum</source> -<target>Maximum</target> +<source>Maximum:</source> +<target>Maximum :</target> <source>&Clear</source> <target>&Effacer</target> -<source>Global settings</source> -<target>Paramètres généraux</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Les paramètres suivants sont utilisés lors de toutes les synchronisations.</target> <source>Fail-safe file copy</source> <target>Copie de fichiers sécurisé</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Copie d'abord vers un fichier temporaire (*.ffs_tmp) puis le renomme. Cela garantit un état cohérent même en cas d'erreur fatale.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Copie vers un fichier temporaire (*.ffs_tmp) avant le remplacement de la cible. +Cela garantit la cohérence du système de fichiers en cas d'erreur grave. +</target> + +<source>(recommended)</source> +<target>(recommandé)</target> <source>Copy locked files</source> <target>Copier les fichiers verrouillés</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Copie de fichiers partagés ou verrouillés à l'aide du service Volume Shadow Copy (exige les droits d'administrateur)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Copie les fichiers partagés ou verrouillés à l'aide du Service Volume Shadow Copy.</target> + +<source>(requires administrator rights)</source> +<target>(nécessite les droits administrateur)</target> <source>Copy file access permissions</source> <target>Copie des droits d'accès aux fichiers</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Transfert des autorisations de fichier et de dossier (exige les droits d'administrateur)</target> +<source>Transfer file and folder permissions.</source> +<target>Transfert des autorisations des fichiers et dossiers.</target> -<source>Restore hidden dialogs</source> -<target>Afficher les boîtes de dialogue masquées</target> +<source>Automatic retry on error:</source> +<target>Nouvelle tentative automatique en cas d'erreur :</target> -<source>External applications</source> -<target>Applications externes</target> +<source>Retry count:</source> +<target>Nombre de tentatives :</target> + +<source>Delay (in seconds):</source> +<target>Délai (en secondes) :</target> + +<source>Customize context menu:</source> +<target>Personnaliser le menu contextuel :</target> <source>Description</source> <target>Description</target> +<source>Restore hidden windows</source> +<target>Restaurer les fenêtres masquées</target> + <source>&Default</source> <target>&Défaut</target> -<source>Find what:</source> -<target>Chercher cela :</target> +<source>Source code written in C++ using:</source> +<target>Code source écrit en C++ utilisant :</target> -<source>Match case</source> -<target>Respecter la casse</target> +<source>If you like FreeFileSync</source> +<target>Si vous aimez FreeFileSync</target> -<source>&Find next</source> -<target>&Chercher le suivant</target> +<source>Donate with PayPal</source> +<target>Faites un don avec PayPal</target> -<source>Start synchronization</source> -<target>Démarrer la synchronisation</target> +<source>Feedback and suggestions are welcome</source> +<target>Vos commentaires et vos suggestions sont les bienvenus</target> -<source>Delete</source> -<target>Supprimer</target> +<source>Homepage</source> +<target>Accueil</target> -<source>Configure filter</source> -<target>Configuration des filtres</target> +<source>Email</source> +<target>Email</target> -<source>Find</source> -<target>Chercher</target> +<source>Published under the GNU General Public License</source> +<target>Publié sous licence GNU General Public License</target> + +<source>Many thanks for localization:</source> +<target>Un grand merci pour la traduction à :</target> -<source>Select time span</source> -<target>Choisir un intervalle de temps</target> +<source>Save as Batch Job</source> +<target>Sauvegarder comme Job Batch</target> -<source>Folder pairs</source> -<target>Paires de dossiers</target> +<source>Delete Items</source> +<target>Supprimer les Éléments</target> + +<source>Global Settings</source> +<target>Configuration Générale</target> + +<source>Select Time Span</source> +<target>Sélection de l'Intervalle de Temps</target> + +<source>Folder Pairs</source> +<target>Paires de Dossiers</target> + +<source>Find</source> +<target>Rechercher</target> <source>Overview</source> <target>Présentation</target> @@ -1026,14 +1052,14 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>Configuration</source> <target>Configuration</target> -<source>Main bar</source> -<target>Barre principale</target> +<source>Main Bar</source> +<target>Barre Principale</target> -<source>Filter files</source> -<target>Filtrage des fichiers</target> +<source>Filter Files</source> +<target>Filtrage des Fichiers</target> -<source>Select view</source> -<target>Choisissez une vue</target> +<source>Select View</source> +<target>Sélection de l'Affichage</target> <source>Open...</source> <target>Ouvrir ...</target> @@ -1044,14 +1070,14 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>Compare both sides</source> <target>Comparer les deux listes</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Etes-vous sûr de vouloir exécuter la commande %y pour %x élément ?</pluralform> -<pluralform>Etes-vous sûr de vouloir exécuter la commande %y pour %x éléments ?</pluralform> -</target> +<source>Comparison settings</source> +<target>Paramètres de comparaison</target> + +<source>Synchronization settings</source> +<target>Paramétrage de la synchronisation</target> + +<source>Start synchronization</source> +<target>Démarrer la synchronisation</target> <source>Confirm</source> <target>Confirmer</target> @@ -1089,12 +1115,6 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>Set direction:</source> <target>Choix de la direction :</target> -<source>Exclude temporarily</source> -<target>Exclure temporairement</target> - -<source>Include temporarily</source> -<target>Inclure temporairement</target> - <source>multiple selection</source> <target>sélection multiple</target> @@ -1104,6 +1124,15 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>Exclude via filter:</source> <target>Exclure à l'aide du filtre :</target> +<source>Exclude temporarily</source> +<target>Exclure temporairement</target> + +<source>Include temporarily</source> +<target>Inclure temporairement</target> + +<source>Delete</source> +<target>Supprimer</target> + <source>Include all</source> <target>Inclure tout</target> @@ -1123,7 +1152,7 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <target>Grand</target> <source>Select time span...</source> -<target>choisir un intervalle de temps...</target> +<target>Choisir un intervalle de temps...</target> <source>Default view</source> <target>Vue par défaut</target> @@ -1152,6 +1181,9 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>Never save &changes</source> <target>Ne jamais sauvegarder les &modifications</target> +<source>Filter</source> +<target>Filtre</target> + <source>Show files that exist on left side only</source> <target>Afficher les fichiers existant seulement à gauche</target> @@ -1197,12 +1229,18 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>Set as default</source> <target>Définir par défaut</target> -<source>Operation aborted</source> -<target>Opération abandonnée</target> - <source>All folders are in sync</source> <target>Tous les dossiers sont synchronisés</target> +<source>Synchronization Settings</source> +<target>Configuration de la Synchronisation</target> + +<source>Comparison Settings</source> +<target>Configuration de la Comparaison</target> + +<source>Cannot find %x</source> +<target>Impossible de trouver %x</target> + <source>Comma-separated values</source> <target>Valeurs séparées par une virgule</target> @@ -1218,8 +1256,8 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>&Ignore</source> <target>&Ignorer</target> -<source>Fatal Error</source> -<target>Erreur Fatale</target> +<source>Serious Error</source> +<target>Erreur Grave</target> <source>&Don't show this warning again</source> <target>&Ne plus afficher cet avertissement</target> @@ -1227,9 +1265,6 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>&Switch</source> <target>&Changer</target> -<source>Question</source> -<target>Question</target> - <source>&Yes</source> <target>&Oui</target> @@ -1251,8 +1286,8 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>Initializing...</source> <target>Initialisation...</target> -<source>Aborted</source> -<target>Abandonné</target> +<source>Stopped</source> +<target>Arrêté</target> <source>Completed</source> <target>Terminé</target> @@ -1263,12 +1298,6 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>Log</source> <target>Log</target> -<source>Cannot find %x</source> -<target>Impossible de trouver %x</target> - -<source>Inactive</source> -<target>Inactif</target> - <source>Today</source> <target>Aujourd'hui</target> @@ -1293,9 +1322,6 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>MB</source> <target>Mo</target> -<source>Filter</source> -<target>Filtre</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1331,9 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <pluralform>Etes-vous sûr de vouloir mettre à la Corbeille les %x éléments suivants ?</pluralform> </target> +<source>Move</source> +<target>Déplacer</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1343,9 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <pluralform>Voulez-vous vraiment supprimer ces %x éléments ?</pluralform> </target> +<source>Exclude</source> +<target>Exclure</target> + <source>Direct</source> <target>Direct</target> @@ -1338,8 +1370,8 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <source>- Other side's counterpart to %item_folder%</source> <target>- Duplication vers %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Voulez-vous réafficher les avertissements et les boîtes de dialogue ?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Reataurer toutes les fenêtres masquées et les avertissements ?</target> <source>Leave as unresolved conflict</source> <target>Abandonner en tant que conflit non résolu</target> @@ -1464,13 +1496,13 @@ Note : Les chemins doivent être relatifs aux répertoires de base. <pluralform>%x jours</pluralform> </target> -<source>Failed to register to receive system messages.</source> +<source>Unable to register to receive system messages.</source> <target>Impossible d'enregistrer la réception des messages système.</target> <source>Cannot set privilege %x.</source> <target>Impossible de fixer le privilège %x.</target> -<source>Failed to suspend system sleep mode.</source> +<source>Unable to suspend system sleep mode.</source> <target>Impossible de suspendre le mode veille du système.</target> <source>Cannot change process I/O priorities.</source> diff --git a/BUILD/Languages/german.lng b/BUILD/Languages/german.lng index cd78dc28..ca271765 100644 --- a/BUILD/Languages/german.lng +++ b/BUILD/Languages/german.lng @@ -2,16 +2,22 @@ <language>Deutsch</language> <translator>Zenju</translator> <locale>de_DE</locale> - <flag_image>flag_germany.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_germany.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source>&Check</source> +<target>&Prüfen</target> + +<source>Syntax error</source> +<target>Syntaxfehler</target> + <source>Both sides have changed since last synchronization.</source> <target>Beide Seiten wurden seit der letzten Synchronisation verändert.</target> <source>Cannot determine sync-direction:</source> -<target>Die Synchronisationsrichtung konnte nicht bestimmt werden:</target> +<target>Die Synchronisationsrichtung kann nicht bestimmt werden:</target> <source>No change since last synchronization.</source> <target>Keine Änderungen seit der letzten Synchronisation.</target> @@ -52,15 +58,9 @@ <source>A directory path is expected after %x.</source> <target>Ein Verzeichnispfad wird nach %x erwartet.</target> -<source>Syntax error</source> -<target>Syntaxfehler</target> - <source>Cannot open file %x.</source> <target>Die Datei %x kann nicht geöffnet werden.</target> -<source>Error</source> -<target>Fehler</target> - <source>File %x does not contain a valid configuration.</source> <target>Die Datei %x enthält keine gültige Konfiguration.</target> @@ -70,12 +70,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>Die Konfigurationsdatei darf keine Einstellungen auf Verzeichnispaarebene enthalten, wenn Verzeichnisse über die Befehlszeile gesetzt werden.</target> -<source>Warning</source> -<target>Warnung</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>Verzeichnisse können nicht für mehr als eine Konfigurationsdatei gesetzt werden.</target> +<source>Command line</source> +<target>Kommandozeile</target> + <source>Syntax:</source> <target>Syntax:</target> @@ -91,9 +91,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>Beliebige Anzahl von alternativen Verzeichnissen für höchstens eine Konfigurationsdatei.</target> -<source>Command line</source> -<target>Befehlszeile</target> - <source>A folder input field is empty.</source> <target>Ein Ordnereingabefeld ist leer.</target> @@ -292,8 +289,8 @@ <source>/sec</source> <target>/sek</target> -<source>%x items</source> -<target>%x Elemente</target> +<source>%x items/sec</source> +<target>%x Elemente/sek</target> <source>Configuration file %x loaded partially only.</source> <target>Die Konfigurationsdatei %x wurde nur teilweise geladen.</target> @@ -317,15 +314,15 @@ <target>Die Datei %x kann nicht geladen werden.</target> <source>Cannot determine volume name for %x.</source> -<target>Der Laufwerksname für %x konnte nicht bestimmt werden.</target> +<target>Der Laufwerksname für %x kann nicht bestimmt werden.</target> <source>Volume name %x is not part of file path %y.</source> <target>Laufwerksname %x ist kein Teil des Dateipfades %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Abbruch initiiert: Warte bis die aktuelle Operation beendet ist...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Stop wurde eingeleitet: Warte bis die aktuelle Operation beendet ist...</target> -<source>Failure to create timestamp for versioning:</source> +<source>Unable to create timestamp for versioning:</source> <target>Der Zeitstempel für die Versionierung kann nicht erstellt werden:</target> <source>Cannot read the following XML elements:</source> @@ -343,8 +340,8 @@ <source>&Program</source> <target>&Programm</target> -<source>&Content</source> -<target>&Inhalt</target> +<source>&View help</source> +<target>&Hilfe anzeigen</target> <source>&About</source> <target>&Ãœber</target> @@ -367,8 +364,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Zum Schnelleinstieg einfach eine .ffs_batch Datei importieren.</target> -<source>Folders to watch</source> -<target>Zu überwachende Ordner</target> +<source>Folders to watch:</source> +<target>Zu überwachende Ordner:</target> <source>Add folder</source> <target>Ordner hinzufügen</target> @@ -382,12 +379,15 @@ <source>Select a folder</source> <target>Ordner auswählen</target> -<source>Idle time [seconds]</source> -<target>Ruhezeit [Sekunden]</target> +<source>Idle time (in seconds):</source> +<target>Ruhezeit (in Sekunden):</target> <source>Idle time between last detected change and execution of command</source> <target>Ruhezeit zwischen der letzten erkannten Änderung und dem Aufruf der Befehlszeile</target> +<source>Command line:</source> +<target>Befehlszeile:</target> + <source> The command is triggered if: - files or subfolders change @@ -399,8 +399,8 @@ Die Befehlszeile wird ausgelöst, wenn: - neue Ordner erscheinen (z.B. Anschluss eines USB Sticks) </target> -<source>Start</source> -<target>Start</target> +<source>&Start</source> +<target>&Start</target> <source>&Retry</source> <target>&Wiederholen</target> @@ -408,24 +408,27 @@ Die Befehlszeile wird ausgelöst, wenn: <source>Cancel</source> <target>Abbrechen</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Automatisierte Synchronisation</target> +<source>About</source> +<target>Ãœber</target> <source>Build: %x</source> <target>Build: %x</target> -<source>About</source> -<target>Ãœber</target> - <source>All files</source> <target>Alle Dateien</target> +<source>Automated Synchronization</source> +<target>Automatisierte Synchronisation</target> + <source>Directory monitoring active</source> <target>Verzeichnisüberwachung ist aktiv</target> <source>Waiting until all directories are available...</source> <target>Warte bis alle Verzeichnisse verfügbar sind...</target> +<source>Error</source> +<target>Fehler</target> + <source>&Restore</source> <target>&Wiederherstellen</target> @@ -435,7 +438,7 @@ Die Befehlszeile wird ausgelöst, wenn: <source>&Exit</source> <target>&Beenden</target> -<source>Invalid command line:</source> +<source>Incorrect command line:</source> <target>Ungültige Befehlszeile:</target> <source>File content</source> @@ -498,8 +501,8 @@ Die Befehlszeile wird ausgelöst, wenn: <source>Target folder input field must not be empty.</source> <target>Das Eingabefeld für den Zielordner darf nicht leer sein.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Das Eingabefeld für den Ordner für die Versionierung darf nicht leer sein.</target> +<source>Please enter a target folder for versioning.</source> +<target>Bitte geben Sie einen Zielorder für die Versionierung ein.</target> <source>Source folder %x not found.</source> <target>Der Quellordner %x wurde nicht gefunden.</target> @@ -537,8 +540,8 @@ Die Befehlszeile wird ausgelöst, wenn: <source>job name</source> <target>Auftragsname</target> -<source>Synchronization aborted</source> -<target>Synchronisation abgebrochen</target> +<source>Synchronization stopped</source> +<target>Synchronisation gestoppt</target> <source>Synchronization completed with errors</source> <target>Synchronisation mit Fehlern abgeschlossen</target> @@ -555,14 +558,26 @@ Die Befehlszeile wird ausgelöst, wenn: <source>Saving log file %x...</source> <target>Speichere Logdatei %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Drücken Sie "Wechseln", um die Probleme in FreeFileSyncs Hauptdialog zu beheben.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Sie können auf FreeFileSyncs Hauptfenster wechseln, um das Problem zu beheben.</target> + +<source>Switching to FreeFileSync's main window</source> +<target>Wechsle auf FreeFileSyncs Hauptfenster</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Wechsle in FreeFileSyncs Hauptdialog</target> +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>Automatische Wiederholung in 1 Sekunde...</pluralform> +<pluralform>Automatische Wiederholung in %x Sekunden...</pluralform> +</target> -<source>Retrying operation after error:</source> -<target>Wiederhole Operation nach Fehler:</target> +<source>Retrying operation...</source> +<target>Wiederhole Operation...</target> + +<source>Check for Program Updates</source> +<target>Suche nach neuer Programmversion</target> <source>A new version of FreeFileSync is available:</source> <target>Eine neue Version von FreeFileSync ist verfügbar:</target> @@ -570,20 +585,14 @@ Die Befehlszeile wird ausgelöst, wenn: <source>Download now?</source> <target>Jetzt herunterladen?</target> -<source>New version found</source> -<target>Neue Version gefunden</target> - <source>&Download</source> <target>&Download</target> <source>FreeFileSync is up to date.</source> <target>FreeFileSync ist auf dem neuesten Stand.</target> -<source>Information</source> -<target>Information</target> - <source>Unable to connect to sourceforge.net.</source> -<target>Es konnte keine Verbindung zu Sourceforge.net aufgebaut werden.</target> +<target>Es kann keine Verbindung zu Sourceforge.net aufgebaut werden.</target> <source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source> <target>Die aktuelle FreeFileSync Versionsnummer wurde online nicht gefunden. Möchten Sie manuell prüfen?</target> @@ -639,20 +648,20 @@ Die Befehlszeile wird ausgelöst, wenn: <source>Hibernate</source> <target>Ruhezustand</target> -<source>Selected variant:</source> -<target>Ausgewählte Variante:</target> +<source>Alternate comparison settings</source> +<target>Alternative Vergleichseinstellungen</target> -<source>Select alternate comparison settings</source> -<target>Alternative Vergleichseinstellungen auswählen</target> +<source>Alternate synchronization settings</source> +<target>Alternative Synchronisationseinstellungen</target> -<source>Select alternate synchronization settings</source> -<target>Alternative Synchronisationseinstellungen auswählen</target> +<source>Local filter</source> +<target>Lokaler Filter</target> -<source>Filter is active</source> -<target>Filter ist aktiv</target> +<source>Active</source> +<target>Aktiv</target> -<source>No filter selected</source> -<target>Kein Filter gesetzt</target> +<source>None</source> +<target>Ohne</target> <source>Remove alternate settings</source> <target>Alternative Einstellungen entfernen</target> @@ -666,6 +675,15 @@ Die Befehlszeile wird ausgelöst, wenn: <source>Paste</source> <target>Einfügen</target> +<source>Alternate Comparison Settings</source> +<target>Alternative Vergleichseinstellungen</target> + +<source>Alternate Synchronization Settings</source> +<target>Alternative Synchronisationseinstellungen</target> + +<source>Local Filter</source> +<target>Lokaler Filter</target> + <source>&New</source> <target>&Neu</target> @@ -673,7 +691,7 @@ Die Befehlszeile wird ausgelöst, wenn: <target>&Speichern</target> <source>Save as &batch job...</source> -<target>Speichern als &Batch-Auftrag...</target> +<target>Speichern als Batch-&Auftrag...</target> <source>1. &Compare</source> <target>1. &Vergleichen</target> @@ -681,15 +699,18 @@ Die Befehlszeile wird ausgelöst, wenn: <source>2. &Synchronize</source> <target>2. &Synchronisieren</target> +<source>&Global settings</source> +<target>&Globale Einstellungen</target> + <source>&Language</source> <target>&Sprache</target> +<source>&Find...</source> +<target>S&uchen...</target> + <source>&Export file list...</source> <target>Dateiliste e&xportieren...</target> -<source>&Global settings</source> -<target>&Globale Einstellungen</target> - <source>&Tools</source> <target>E&xtras</target> @@ -699,8 +720,8 @@ Die Befehlszeile wird ausgelöst, wenn: <source>Check &automatically once a week</source> <target>&Automatisch wöchentlich prüfen</target> -<source>Check for new &version</source> -<target>Auf neue &Version prüfen</target> +<source>&Check for new version</source> +<target>&Auf neue Version prüfen</target> <source>Compare</source> <target>Vergleichen</target> @@ -720,8 +741,8 @@ Die Befehlszeile wird ausgelöst, wenn: <source>Close search bar</source> <target>Suchleiste schließen</target> -<source>Find what:</source> -<target>Suchen nach:</target> +<source>Find:</source> +<target>Suchen:</target> <source>Match case</source> <target>Groß-/Kleinschreibung</target> @@ -747,74 +768,20 @@ Die Befehlszeile wird ausgelöst, wenn: <source>Total bytes to copy</source> <target>Gesamtmenge der zu kopierenden Daten</target> -<source>Items found:</source> -<target>Gefundene Elemente:</target> +<source>Select a variant:</source> +<target>Variante wählen:</target> -<source>Speed:</source> -<target>Geschwindigkeit:</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Erkenne gleiche Dateien anhand der Änderungszeit und Größe.</target> -<source>Time remaining:</source> -<target>Verbleibende Zeit:</target> +<source>Identify equal files by comparing the file content.</source> +<target>Erkenne gleiche Dateien durch Vergleich des Dateiinhaltes.</target> -<source>Time elapsed:</source> -<target>Vergangene Zeit:</target> +<source>Symbolic links:</source> +<target>Symbolische Links:</target> -<source>Synchronizing...</source> -<target>Synchronisiere...</target> - -<source>Minimize to notification area</source> -<target>In das Benachrichtigungsfeld minimieren</target> - -<source>On completion</source> -<target>Nach Abschluss</target> - -<source>Close</source> -<target>Schließen</target> - -<source>&Pause</source> -<target>&Pause</target> - -<source>Variant</source> -<target>Variante</target> - -<source>Statistics</source> -<target>Statistiken</target> - -<source>&Don't show this dialog again</source> -<target>&Diesen Dialog nicht mehr anzeigen</target> - -<source>Select a variant</source> -<target>Variante auswählen</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Dateien gelten als gleich, wenn - - Datum und Uhrzeit der letzten Änderung - - die Größe -gleich sind -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Dateien gelten als gleich, wenn - - der Inhalt -gleich ist -</target> - -<source>Symbolic Link handling</source> -<target>Symbolische Links</target> - -<source>Help</source> -<target>Hilfe</target> +<source>More information</source> +<target>Mehr Information</target> <source>OK</source> <target>OK</target> @@ -822,11 +789,11 @@ gleich ist <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identifiziere und propagiere Änderungen auf beiden Seiten. Löschungen, Verschiebungen und Konflikte werden automatisch mit Hilfe einer Datenbank erkannt.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Spiegelkopie des linken Ordners erstellen. Der rechte Ordner wird dem linken exakt angeglichen.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Eine Spiegelkopie des linken Ordners erstellen, die dem rechten Ordner genau entspricht.</target> -<source>Copy new or updated files to right folder.</source> -<target>Neue oder aktualisierte Dateien in den rechten Ordner kopieren.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Neue und aktualisierte Dateien in den rechten Ordner kopieren.</target> <source>Configure your own synchronization rules.</source> <target>Eigene Synchronisationsregeln definieren.</target> @@ -837,23 +804,8 @@ gleich ist <source>Requires database files. Not supported by all file systems.</source> <target>Benötigt Datenbankdateien. Wird nicht von allen Dateisystemen unterstützt.</target> -<source>Error handling</source> -<target>Fehlerbehandlung</target> - -<source>Ignore</source> -<target>Ignorieren</target> - -<source>Hide all error and warning messages</source> -<target>Alle Fehler- und Warnmeldungen unterdrücken</target> - -<source>Pop-up</source> -<target>Nachfragen</target> - -<source>Show pop-up on errors or warnings</source> -<target>Ein Auswahlfenster bei Fehlern oder Warnungen anzeigen</target> - -<source>Deletion handling</source> -<target>Behandlung von Löschungen</target> +<source>Delete files:</source> +<target>Dateien löschen:</target> <source>Permanent</source> <target>Permanent</target> @@ -876,104 +828,176 @@ gleich ist <source>Naming convention:</source> <target>Namenskonvention:</target> -<source>Batch job</source> -<target>Batch-Auftrag</target> +<source>Show examples</source> +<target>Zeige Beispiele</target> + +<source>Handle errors:</source> +<target>Fehlerbehandlung:</target> + +<source>Ignore</source> +<target>Ignorieren</target> + +<source>Hide all error and warning messages</source> +<target>Alle Fehler- und Warnmeldungen unterdrücken</target> + +<source>Pop-up</source> +<target>Nachfragen</target> + +<source>Show pop-up on errors or warnings</source> +<target>Ein Auswahlfenster bei Fehlern oder Warnungen anzeigen</target> + +<source>On completion:</source> +<target>Nach Abschluss:</target> + +<source>Start synchronization now?</source> +<target>Synchronisation jetzt starten?</target> + +<source>Variant:</source> +<target>Variante:</target> + +<source>Statistics</source> +<target>Statistiken</target> + +<source>&Don't show this dialog again</source> +<target>&Diesen Dialog nicht mehr anzeigen</target> + +<source>Items found:</source> +<target>Gefundene Elemente:</target> + +<source>Speed:</source> +<target>Geschwindigkeit:</target> + +<source>Time remaining:</source> +<target>Verbleibende Zeit:</target> + +<source>Time elapsed:</source> +<target>Vergangene Zeit:</target> + +<source>Synchronizing...</source> +<target>Synchronisiere...</target> + +<source>Minimize to notification area</source> +<target>In das Benachrichtigungsfeld minimieren</target> + +<source>Close</source> +<target>Schließen</target> + +<source>&Pause</source> +<target>&Pause</target> + +<source>Stop</source> +<target>Stop</target> <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target>Erstellt eine Batchdatei für die unbeaufsichtigte Synchronisation. Zum Starten die Datei doppelklicken oder in einen Taskplaner eintragen: %x</target> -<source>Exit</source> -<target>Beenden</target> - -<source>Abort synchronization on first error</source> -<target>Synchronisation beim ersten Fehler abbrechen</target> +<source>Stop synchronization at first error</source> +<target>Synchronisation beim ersten Fehler anhalten</target> <source>Show progress dialog</source> <target>Fortschrittsdialog zeigen</target> -<source>Save log</source> -<target>Log speichern</target> - -<source>Select folder to save log files</source> -<target>Ordner zum Speichern der Logdateien wählen</target> +<source>Save log:</source> +<target>Log speichern:</target> -<source>Limit</source> -<target>Limit</target> +<source>Limit:</source> +<target>Limit:</target> <source>Limit maximum number of log files</source> <target>Maximale Anzahl der Logdateien begrenzen</target> +<source>How can I schedule a batch job?</source> +<target>Wie können Batch-Aufträge in den Taskplaner eingetragen werden?</target> + +<source>&Recycle bin</source> +<target>&Papierkorb</target> + <source>Delete on both sides</source> <target>Auf beiden Seiten löschen</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>Lösche auf beiden Seiten, auch wenn die Datei nur auf einer Seite markiert ist</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Es werden nur Dateien synchronisiert, die zu allen Filterregeln passen. -Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Wählen Sie Filterregeln aus, um einzelne Dateien von der Synchronisation auszuschließen. Geben Sie Dateipfade relativ zu ihrem zugehörigen Ordnerpaar an.</target> -<source>Include</source> -<target>Einschließen</target> +<source>Include:</source> +<target>Einschließen:</target> -<source>Exclude</source> -<target>Ausschließen</target> +<source>Exclude:</source> +<target>Ausschließen:</target> -<source>Time span</source> -<target>Zeitspanne</target> +<source>Time span:</source> +<target>Zeitspanne:</target> -<source>File size</source> -<target>Dateigröße</target> +<source>File size:</source> +<target>Dateigröße:</target> -<source>Minimum</source> -<target>Minimum</target> +<source>Minimum:</source> +<target>Minimum:</target> -<source>Maximum</source> -<target>Maximum</target> +<source>Maximum:</source> +<target>Maximum:</target> <source>&Clear</source> <target>&Löschen</target> -<source>Global settings</source> -<target>Globale Einstellungen</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Die folgenden Einstellungen werden für alle Synchronisationsaufgaben verwendet.</target> <source>Fail-safe file copy</source> <target>Dateien ausfallsicher kopieren</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Kopiere zunächst in eine temporäre Datei (*.ffs_tmp) und benenne diese anschließend um. Dadurch wird ein konsistenter Datenstand auch im größten Fehlerfall garantiert.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Kopiere in eine temporäre Datei (*.ffs_tmp) bevor das Ziel überschrieben wird. +Dadurch wird ein konsistenter Datenstand auch im schweren Fehlerfall garantiert. +</target> + +<source>(recommended)</source> +<target>(Empfohlen)</target> <source>Copy locked files</source> <target>Gesperrte Dateien kopieren</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Kopiere gesperrte Dateien mit Hilfe des Volumenschattenkopie-Dienstes (benötigt Administratorrechte)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Kopiere gesperrte Dateien mit Hilfe des Volumenschattenkopie-Dienstes.</target> + +<source>(requires administrator rights)</source> +<target>(Benötigt Administratorrechte)</target> <source>Copy file access permissions</source> <target>Dateizugriffsberechtigungen kopieren</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Ãœbertrage Datei- und Ordnerberechtigungen (benötigt Administratorrechte)</target> +<source>Transfer file and folder permissions.</source> +<target>Ãœbertrage Datei- und Ordnerberechtigungen.</target> + +<source>Automatic retry on error:</source> +<target>Automatische Wiederholung bei Fehlern:</target> -<source>Restore hidden dialogs</source> -<target>Versteckte Dialoge wiederherstellen</target> +<source>Retry count:</source> +<target>Wiederholungen:</target> -<source>External applications</source> -<target>Externe Anwendungen</target> +<source>Delay (in seconds):</source> +<target>Verzögerung (in Sekunden):</target> + +<source>Customize context menu:</source> +<target>Kontextmenü anpassen:</target> <source>Description</source> <target>Beschreibung</target> +<source>Restore hidden windows</source> +<target>Versteckte Fenster wiederherstellen</target> + <source>&Default</source> <target>&Standard</target> <source>Source code written in C++ using:</source> -<target>Sourcecode in C++ geschrieben mit Hilfe von:</target> +<target>Der Quellcode wurde in C++ geschrieben mit:</target> <source>If you like FreeFileSync</source> <target>Wenn Sie FreeFileSync mögen</target> @@ -996,25 +1020,22 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>Many thanks for localization:</source> <target>Vielen Dank für die Lokalisation:</target> -<source>Start synchronization</source> -<target>Synchronisation starten</target> - -<source>Comparison settings</source> -<target>Vergleichseinstellungen</target> - -<source>Synchronization settings</source> -<target>Synchronisationseinstellungen</target> +<source>Save as Batch Job</source> +<target>Als Batch-Auftrag speichern</target> -<source>Delete</source> -<target>Löschen</target> +<source>Delete Items</source> +<target>Elemente löschen</target> -<source>Configure filter</source> -<target>Filter konfigurieren</target> +<source>Global Settings</source> +<target>Globale Einstellungen</target> -<source>Select time span</source> +<source>Select Time Span</source> <target>Zeitspanne auswählen</target> -<source>Folder pairs</source> +<source>Serious Error</source> +<target>Schwerer Fehler</target> + +<source>Folder Pairs</source> <target>Ordnerpaare</target> <source>Find</source> @@ -1026,13 +1047,13 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>Configuration</source> <target>Konfiguration</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Hauptleiste</target> -<source>Filter files</source> +<source>Filter Files</source> <target>Dateien filtern</target> -<source>Select view</source> +<source>Select View</source> <target>Ansicht auswählen</target> <source>Open...</source> @@ -1044,12 +1065,21 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>Compare both sides</source> <target>Beide Seiten vergleichen</target> +<source>Comparison settings</source> +<target>Vergleichseinstellungen</target> + +<source>Synchronization settings</source> +<target>Synchronisationseinstellungen</target> + +<source>Start synchronization</source> +<target>Synchronisation starten</target> + <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> -<pluralform>Soll der Befehl %y wirklich für 1 Element ausgeführt werden?</pluralform> +<pluralform>Soll der Befehl %y wirklich für ein Element ausgeführt werden?</pluralform> <pluralform>Soll der Befehl %y wirklich für %x Elemente ausgeführt werden?</pluralform> </target> @@ -1104,6 +1134,9 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>Include temporarily</source> <target>Temporär einschließen</target> +<source>Delete</source> +<target>Löschen</target> + <source>Include all</source> <target>Alle einschließen</target> @@ -1152,6 +1185,9 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>Never save &changes</source> <target>Änderungen nie &speichern</target> +<source>Filter</source> +<target>Filter</target> + <source>Show files that exist on left side only</source> <target>Nur links existierende Dateien anzeigen</target> @@ -1197,12 +1233,15 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>Set as default</source> <target>Als Standard festlegen</target> -<source>Operation aborted</source> -<target>Vorgang abgebrochen</target> - <source>All folders are in sync</source> <target>Alle Ordner sind synchron</target> +<source>Synchronization Settings</source> +<target>Synchronisationseinstellungen</target> + +<source>Comparison Settings</source> +<target>Vergleichseinstellungen</target> + <source>Cannot find %x</source> <target>%x wurde nicht gefunden.</target> @@ -1215,30 +1254,6 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>Searching for program updates...</source> <target>Suche nach aktualisierten Programmversionen...</target> -<source>&Ignore subsequent errors</source> -<target>&Nachfolgende Fehler ignorieren</target> - -<source>&Ignore</source> -<target>&Ignorieren</target> - -<source>Fatal Error</source> -<target>Schwerer Fehler</target> - -<source>&Don't show this warning again</source> -<target>&Diese Warnung nicht mehr anzeigen</target> - -<source>&Switch</source> -<target>&Wechseln</target> - -<source>Question</source> -<target>Frage</target> - -<source>&Yes</source> -<target>&Ja</target> - -<source>&No</source> -<target>&Nein</target> - <source>Scanning...</source> <target>Suche Dateien...</target> @@ -1248,14 +1263,17 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>Info</source> <target>Info</target> +<source>Warning</source> +<target>Warnung</target> + <source>Paused</source> <target>Angehalten</target> <source>Initializing...</source> <target>Initialisiere...</target> -<source>Aborted</source> -<target>Abgebrochen</target> +<source>Stopped</source> +<target>Angehalten</target> <source>Completed</source> <target>Fertig</target> @@ -1266,9 +1284,6 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>Log</source> <target>Protokoll</target> -<source>Inactive</source> -<target>Inaktiv</target> - <source>Today</source> <target>Heute</target> @@ -1293,9 +1308,6 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filter</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1317,9 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <pluralform>Sollen die folgenden %x Elemente wirklich in den Papierkorb verschoben werden?</pluralform> </target> +<source>Move</source> +<target>Verschieben</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1329,9 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <pluralform>Sollen die folgenden %x Elemente wirklich gelöscht werden?</pluralform> </target> +<source>Exclude</source> +<target>Ausschließen</target> + <source>Direct</source> <target>Direkt</target> @@ -1338,8 +1356,8 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>- Other side's counterpart to %item_folder%</source> <target>- Entsprechung der anderen Seite zu %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Sollen versteckte Warnungen und Dialoge wieder sichtbar gemacht werden?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Sollen alle versteckten Fenster und Warnungen wiederhergestellt werden?</target> <source>Leave as unresolved conflict</source> <target>Als unbehandelten Konflikt belassen</target> @@ -1371,6 +1389,24 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <source>Percentage</source> <target>Prozent</target> +<source>&Ignore subsequent errors</source> +<target>&Nachfolgende Fehler ignorieren</target> + +<source>&Ignore</source> +<target>&Ignorieren</target> + +<source>&Don't show this warning again</source> +<target>&Diese Warnung nicht mehr anzeigen</target> + +<source>&Switch</source> +<target>&Wechseln</target> + +<source>&Yes</source> +<target>&Ja</target> + +<source>&No</source> +<target>&Nein</target> + <source>Cannot monitor directory %x.</source> <target>Das Verzeichnis %x kann nicht überwacht werden.</target> @@ -1464,17 +1500,17 @@ Achtung: Dateipfade müssen relativ zu den Basisverzeichnissen sein. <pluralform>%x Tage</pluralform> </target> -<source>Failed to register to receive system messages.</source> +<source>Unable to register to receive system messages.</source> <target>Die Registrierung zum Empfang von Systemmeldungen ist fehlgeschlagen.</target> <source>Cannot set privilege %x.</source> <target>Das Privileg %x kann nicht gesetzt werden.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Der Schlafmodus des Betriebssystems konnte nicht ausgesetzt werden.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Der Schlafmodus des Betriebssystems kann nicht ausgesetzt werden.</target> <source>Cannot change process I/O priorities.</source> -<target>Die Eingabe/Ausgabe Prioritäten für den Prozess konnten nicht geändert werden.</target> +<target>Die Eingabe/Ausgabe Prioritäten für den Prozess kann nicht geändert werden.</target> <source>Unable to move %x to the recycle bin.</source> <target>%x kann nicht in den Papierkorb verschoben werden.</target> diff --git a/BUILD/Languages/greek.lng b/BUILD/Languages/greek.lng index 96df2f6b..4b74807f 100644 --- a/BUILD/Languages/greek.lng +++ b/BUILD/Languages/greek.lng @@ -2,11 +2,24 @@ <language>Eλληνικά</language> <translator>ΓιώÏγος Δ. Γιαγλής</translator> <locale>el_GR</locale> - <flag_image>flag_greece.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_greece.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> +<target></target> + <source>Both sides have changed since last synchronization.</source> <target>Και οι δυο πλευÏÎÏ‚ Îχουν αλλάξει από τον τελευταίο συγχÏονισμό.</target> @@ -58,9 +71,6 @@ <source>Cannot open file %x.</source> <target>Δεν είναι δυνατό το άνοιγμα του αÏχείου %x.</target> -<source>Error</source> -<target>Σφάλματα</target> - <source>File %x does not contain a valid configuration.</source> <target>Το αÏχείο %x δεν πεÏιÎχει μια ÎγκυÏη διάταξη.</target> @@ -70,12 +80,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>Το αÏχείο διάταξης δεν Ï€ÏÎπει να πεÏιλαμβάνει Ïυθμίσεις στο επίπεδο του ζεÏγους των υποκαταλόγων, όταν οι υποκατάλογοι οÏίζονται μÎσω της γÏαμμής εÏγασιών.</target> -<source>Warning</source> -<target>Î Ïοειδοποίηση</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>Δεν μποÏοÏν να οÏιστοÏν υποκατάλογοι για πεÏισσότεÏα από Îνα αÏχεία διάταξης.</target> +<source>Command line</source> +<target>ΓÏαμμή εντολών</target> + <source>Syntax:</source> <target>ΣÏνταξη:</target> @@ -91,9 +101,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>Οποιοσδήποτε αÏιθμός εναλλακτικών υποκαταλόγων για το Ï€Î¿Î»Ï Îνα αÏχείο διάταξης.</target> -<source>Command line</source> -<target>ΓÏαμμή εντολών</target> - <source>A folder input field is empty.</source> <target>Ένα πεδίο εισαγωγής υποκαταλόγων είναι άδειο.</target> @@ -292,8 +299,8 @@ <source>/sec</source> <target>/δευτεÏόλεπτο</target> -<source>%x items</source> -<target>%x αντικείμενα</target> +<source>%x items/sec</source> +<target>%x στοιχεία</target> <source>Configuration file %x loaded partially only.</source> <target>Το αÏχείο διάταξης %x Îχει φοÏτωθεί μόνο κατά Îνα μÎÏος.</target> @@ -322,11 +329,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Το όνομα τόμου %x δεν είναι μÎÏος της διαδÏομής %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Ζητήθηκε ματαίωση: Αναμονή για την λήξη της Ï„ÏÎχουσας εÏγασίας...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Αίτημα διακοπής: Αναμονή για την ολοκλήÏωση της Ï„ÏÎχουσας εÏγασίας...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Αποτυχία να δημιουÏγηθεί χÏονική σήμανση για τη διατήÏηση παλιών εκδόσεων:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Αδυναμία δημιουÏγίας χÏονικής σήμανσης για διατήÏηση εκδόσεων:</target> <source>Cannot read the following XML elements:</source> <target>Δεν ήταν δυνατό να αναγνωσθοÏν τα ακόλουθα στοιχεία XML:</target> @@ -343,8 +350,8 @@ <source>&Program</source> <target>&Î ÏόγÏαμμα</target> -<source>&Content</source> -<target>&ΠεÏιεχόμενα</target> +<source>&View help</source> +<target>&Î Ïοβολή βοήθειας</target> <source>&About</source> <target>&Σχετικά</target> @@ -367,8 +374,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Για να ξεκινήσετε μποÏείτε απλά να εισάγετε Îνα αÏχείο .ffs_batch.</target> -<source>Folders to watch</source> -<target>Υποκατάλογοι που θα παÏακολουθοÏνται</target> +<source>Folders to watch:</source> +<target>Υποκατάλογοι για παÏακολοÏθηση:</target> <source>Add folder</source> <target>Î Ïοσθήκη υποκαταλόγου</target> @@ -382,12 +389,15 @@ <source>Select a folder</source> <target>Επιλογή υποκαταλόγου</target> -<source>Idle time [seconds]</source> -<target>Λανθάνων χÏόνος [δευτεÏόλεπτα]</target> +<source>Idle time (in seconds):</source> +<target>Λανθάνων χÏόνος (σε δευτεÏόλεπτα):</target> <source>Idle time between last detected change and execution of command</source> <target>Λανθάνων χÏόνος Î¼ÎµÏ„Î±Î¾Ï Ï„ÎµÎ»ÎµÏ…Ï„Î±Î¯Î±Ï‚ αλλαγής που ανιχνεÏθηκε και εκτÎλεσης της εντολής</target> +<source>Command line:</source> +<target>ΓÏαμμή εντολών</target> + <source> The command is triggered if: - files or subfolders change @@ -399,33 +409,30 @@ The command is triggered if: -παÏουσιαστοÏν νÎοι υποκατάλογοι (Ï€.χ. εισαχθεί Îνα φλασάκι USB) </target> -<source>Start</source> -<target>ΈναÏξη</target> - -<source>&Retry</source> -<target>&Επανάληψη</target> - -<source>Cancel</source> -<target>ΆκυÏο</target> +<source>&Start</source> +<target>Έ&ναÏξη</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - ΑυτοματοποιημÎνος ΣυγχÏονισμός</target> +<source>About</source> +<target>Σχετικά με το...</target> <source>Build: %x</source> <target>ΔημιουÏγήθηκε : %x</target> -<source>About</source> -<target>Σχετικά με το...</target> - <source>All files</source> <target>Όλα τα αÏχεία</target> +<source>Automated Synchronization</source> +<target>ΑυτοματοποιημÎνος ΣυγχÏονισμός</target> + <source>Directory monitoring active</source> <target>Η παÏακολοÏθηση των υποκαταλόγων είναι ενεÏγή</target> <source>Waiting until all directories are available...</source> <target>Αναμονή μÎχÏι να είναι διαθÎσιμοι όλοι οι υποκατάλογοι...</target> +<source>Error</source> +<target>Σφάλματα</target> + <source>&Restore</source> <target>&ΕπαναφοÏά</target> @@ -435,8 +442,11 @@ The command is triggered if: <source>&Exit</source> <target>Έ&ξοδος</target> -<source>Invalid command line:</source> -<target>Σφάλμα στη γÏαμμή εντολών:</target> +<source>Incorrect command line:</source> +<target>ΕσφαλμÎνη γÏαμμή εντολών:</target> + +<source>&Retry</source> +<target>&Επανάληψη</target> <source>File content</source> <target>ΠεÏιεχόμενο αÏχείων</target> @@ -498,8 +508,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>Το πεδίο εισαγωγής του υποκαταλόγου-στόχου Ï€ÏÎπει να μην είναι κενό.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Το πεδίο εισαγωγής του υποκαταλόγου για διατήÏηση παλιών εκδόσεων Ï€ÏÎπει να μην είναι κενό.</target> +<source>Please enter a target folder for versioning.</source> +<target>ΠαÏακαλώ εισάγετε Îναν υποκατάλογο για αποθήκευση εκδόσεων.</target> <source>Source folder %x not found.</source> <target>Ο υποκατάλογος %x δε βÏÎθηκε.</target> @@ -537,8 +547,8 @@ The command is triggered if: <source>job name</source> <target>όνομα ενÎÏγειας</target> -<source>Synchronization aborted</source> -<target>Ο συγχÏονισμός ματαιώθηκε</target> +<source>Synchronization stopped</source> +<target>Ο συγχÏονισμός διακόπηκε</target> <source>Synchronization completed with errors</source> <target>Ο συγχÏονισμός ολοκληÏώθηκε με σφάλματα</target> @@ -555,14 +565,38 @@ The command is triggered if: <source>Saving log file %x...</source> <target>Αποθήκευση του αÏχείου καταγÏαφής %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Πατήστε "Εναλλαγή" για να επιλÏσετε τα θÎματα στο κεντÏικό παÏάθυÏο του FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>ΜποÏείτε να επιστÏÎψετε στο κÏÏιο παÏάθυÏο του FreeFileSync για να επιλÏσετε αυτό το θÎμα.</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Εναλλαγή στο βασικό παÏάθυÏο του FreeFileSync</target> +<source>&Don't show this warning again</source> +<target>&Îα μην εμφανιστεί ξανά αυτή η Ï€Ïοειδοποίηση</target> + +<source>&Ignore</source> +<target>&ΠαÏάβλεψη</target> + +<source>&Switch</source> +<target>&Εναλλαγή</target> + +<source>Switching to FreeFileSync's main window</source> +<target>ΕπιστÏοφή στο κÏÏιο παÏάθυÏο του FreeFileSync</target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>Αυτόματη επανάληψη σε 1 δευτεÏόλεπτο...</pluralform> +<pluralform>Αυτόματη επανάληψη σε %x δευτεÏόλεπτα...</pluralform> +</target> + +<source>&Ignore subsequent errors</source> +<target>&Αγνόηση επόμενων σφαλμάτων</target> + +<source>Serious Error</source> +<target>ΣοβαÏÏŒ Σφάλμα</target> -<source>Retrying operation after error:</source> -<target>Επανάληψη της Ï€Ïοσπάθειας μετά από σφάλμα:</target> +<source>Check for Program Updates</source> +<target>Έλεγχος για ΕνημεÏώσεις του Î ÏογÏάμματος</target> <source>A new version of FreeFileSync is available:</source> <target>Μια νÎα Îκδοση του FreeFileSync είναι διαθÎσιμη:</target> @@ -570,18 +604,12 @@ The command is triggered if: <source>Download now?</source> <target>Λήψη Ï„ÏŽÏα;</target> -<source>New version found</source> -<target>Î’ÏÎθηκε νÎα Îκδοση</target> - <source>&Download</source> <target>&Λήψη</target> <source>FreeFileSync is up to date.</source> <target>Το FreeFileSync είναι ενημεÏωμÎνο.</target> -<source>Information</source> -<target>ΠληÏοφοÏία</target> - <source>Unable to connect to sourceforge.net.</source> <target>Δεν είναι δυνατή η σÏνδεση με το sourceforge.net.</target> @@ -639,20 +667,20 @@ The command is triggered if: <source>Hibernate</source> <target>ΑδÏανοποίηση</target> -<source>Selected variant:</source> -<target>ÎœÎθοδος που επιλÎχθηκε:</target> +<source>Alternate comparison settings</source> +<target>ΔιαφοÏοποιημÎνες Ïυθμίσεις σÏγκÏισης</target> -<source>Select alternate comparison settings</source> -<target>Επιλογή διαφοÏοποιημÎνων Ïυθμίσεων σÏγκÏισης</target> +<source>Alternate synchronization settings</source> +<target>ΔιαφοÏοποιημÎνες Ïυθμίσεις συγχÏονισμοÏ</target> -<source>Select alternate synchronization settings</source> -<target>Επιλογή διαφοÏοποιημÎνων Ïυθμίσεων συγχÏονισμοÏ</target> +<source>Local filter</source> +<target>Τοπικό φίλτÏο</target> -<source>Filter is active</source> -<target>Το φίλτÏο είναι ενεÏγό</target> +<source>Active</source> +<target>ΕνεÏγό</target> -<source>No filter selected</source> -<target>Δεν Îχει επιλεχθεί φίλτÏο</target> +<source>None</source> +<target>Καθόλου</target> <source>Remove alternate settings</source> <target>ΔιαγÏαφή των διαφοÏοποιημÎνων Ïυθμίσεων</target> @@ -666,6 +694,15 @@ The command is triggered if: <source>Paste</source> <target>Επικόλληση</target> +<source>Alternate Comparison Settings</source> +<target>ΔιαφοÏοποιημÎνες Ρυθμίσεις ΣÏγκÏισης</target> + +<source>Alternate Synchronization Settings</source> +<target>ΔιαφοÏοποιημÎνες Ρυθμίσεις ΣυγχÏονισμοÏ</target> + +<source>Local Filter</source> +<target>Τοπικό ΦίλτÏο</target> + <source>&New</source> <target>&ΔημιουÏγία</target> @@ -681,15 +718,18 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. Συ&γχÏονισμός</target> +<source>&Global settings</source> +<target>ΓενικÎÏ‚ &Ïυθμίσεις</target> + <source>&Language</source> <target>&Γλώσσα</target> +<source>&Find...</source> +<target>&ΕÏÏεση</target> + <source>&Export file list...</source> <target>Ε&ξαγωγή καταλόγου αÏχείων...</target> -<source>&Global settings</source> -<target>ΓενικÎÏ‚ &Ïυθμίσεις</target> - <source>&Tools</source> <target>&ΕÏγαλεία</target> @@ -699,17 +739,14 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>&Aυτόματος Îλεγχος μια φοÏά την εβδομάδα</target> -<source>Check for new &version</source> +<source>&Check for new version</source> <target>Έλεγχος για &νÎα Îκδοση</target> <source>Compare</source> <target>ΣÏγκÏιση</target> -<source>Comparison settings</source> -<target>Ρυθμίσεις σÏγκÏισης</target> - -<source>Synchronization settings</source> -<target>Ρυθμίσεις συγχÏονισμοÏ</target> +<source>Cancel</source> +<target>ΆκυÏο</target> <source>Synchronize</source> <target>ΣυγχÏονισμός</target> @@ -723,6 +760,15 @@ The command is triggered if: <source>Swap sides</source> <target>Ανταλλαγή πλευÏών</target> +<source>Close search bar</source> +<target>Κλείσιμο γÏαμμής εÏÏεσης</target> + +<source>Find:</source> +<target>ΕÏÏεση:</target> + +<source>Match case</source> +<target>Αντιστοίχιση πεζών-κεφαλαίων</target> + <source>Save as batch job</source> <target>Αποθήκευση ως δÎσμη ενεÏγειών</target> @@ -744,74 +790,20 @@ The command is triggered if: <source>Total bytes to copy</source> <target>Συνολικός αÏιθμός bytes Ï€Ïος αντιγÏαφή</target> -<source>Items found:</source> -<target>Î’ÏÎθηκαν στοιχεία:</target> - -<source>Speed:</source> -<target>ΤαχÏτητα:</target> - -<source>Time remaining:</source> -<target>ΑπομÎνει χÏόνος:</target> - -<source>Time elapsed:</source> -<target>Î ÎÏασε χÏόνος:</target> - -<source>Synchronizing...</source> -<target>Γίνεται συγχÏονισμός...</target> - -<source>Minimize to notification area</source> -<target>Ελαχιστοποίηση στην πεÏιοχή ειδοποιήσεων</target> - -<source>On completion</source> -<target>Μετά την ολοκλήÏωση</target> +<source>Select a variant:</source> +<target>Επιλογή μεθόδου:</target> -<source>Close</source> -<target>Κλείσιμο</target> - -<source>&Pause</source> -<target>&ΠαÏση</target> - -<source>Variant</source> -<target>ÎœÎθοδος</target> - -<source>Statistics</source> -<target>Στατιστικά</target> - -<source>&Don't show this dialog again</source> -<target>&Îα μην εμφανιστεί ξανά αυτό το μήνυμα</target> - -<source>Select a variant</source> -<target>ΕπιλÎξτε μια μÎθοδο</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Τα αÏχεία θεωÏοÏνται ίδια εάν - - η ημεÏομηνία και ÏŽÏα τελευταίας Ï„Ïοποποίησης - - το μÎγεθός τους -είναι ίδια -</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>ΑναγνώÏιση των ταυτόσημων αÏχείων με σÏγκÏιση του χÏόνου Ï„Ïοποποίησης και του μεγÎθους.</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Τα αÏχεία θεωÏοÏνται ίδια, εάν - - το πεÏιεχόμενό τους -είναι ίδιο -</target> +<source>Identify equal files by comparing the file content.</source> +<target>ΑναγνώÏιση των ταυτόσημων αÏχείων με σÏγκÏιση του πεÏιεχομÎνου τους.</target> -<source>Symbolic Link handling</source> -<target>ΤÏόπος διαχείÏισης των συμβολικών δεσμών</target> +<source>Symbolic links:</source> +<target>Συμβολικοί δεσμοί:</target> -<source>Help</source> -<target>Βοήθεια</target> +<source>More information</source> +<target>ΠεÏισσότεÏες πληÏοφοÏίες</target> <source>OK</source> <target>OK</target> @@ -819,11 +811,11 @@ is the same <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>ΑναγνώÏιση και εφαÏμογή αλλαγών και στις δυο πλευÏÎÏ‚. Οι διαγÏαφÎÏ‚, οι μεταφοÏÎÏ‚ και οι διενÎξεις αναγνωÏίζονται αυτόματα με τη βοήθεια μιας βάσης δεδομÎνων.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>ΚατοπτÏικό αντίγÏαφο του αÏιστεÏÎ¿Ï Ï…Ï€Î¿ÎºÎ±Ï„Î±Î»ÏŒÎ³Î¿Ï…. Ο υποκατάλογος δεξιά θα Ï„Ïοποποιηθεί και θα αντιστοιχεί εξολοκλήÏου στον αÏιστεÏÏŒ μετά το συγχÏονισμό</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>ΔημιουÏγία ενός κατοπτÏÎ¹ÎºÎ¿Ï Î±Î½Ï„Î¹Î³Ïάφου του υποκαταλόγου αÏιστεÏά, ώστε μετά το συγχÏονισμό ο υποκατάλογος δεξιά να είναι Îνα ακÏιβÎÏ‚ αντίγÏαφό του.</target> -<source>Copy new or updated files to right folder.</source> -<target>ΑντιγÏαφή των νÎων ή πιο Ï€Ïόσφατων αÏχείων στον υποκατάλογο δεξιά.</target> +<source>Copy new and updated files to the right folder.</source> +<target>ΑντιγÏαφή των νÎων και των Ï„ÏοποποιημÎνων αÏχείων στον υποκατάλογο δεξιά.</target> <source>Configure your own synchronization rules.</source> <target>ΟÏίστε τους δικοÏÏ‚ σας κανόνες συγχÏονισμοÏ.</target> @@ -834,23 +826,8 @@ is the same <source>Requires database files. Not supported by all file systems.</source> <target>Απαιτεί αÏχεία βάσης δεδομÎνων. Δεν υποστηÏίζεται από όλα τα συστήματα αÏχείων.</target> -<source>Error handling</source> -<target>ΔιαχείÏιση σφαλμάτων</target> - -<source>Ignore</source> -<target>ΠαÏάβλεψη</target> - -<source>Hide all error and warning messages</source> -<target>ΑπόκÏυψη όλων των σφαλμάτων και Ï€Ïοειδοποιήσεων</target> - -<source>Pop-up</source> -<target>Αναδυόμενο μήνυμα</target> - -<source>Show pop-up on errors or warnings</source> -<target>Εμφάνιση αναδυόμενου παÏάθυÏου σε σφάλματα ή Ï€Ïοειδοποιήσεις</target> - -<source>Deletion handling</source> -<target>ΔιαγÏαφή των αÏχείων</target> +<source>Delete files:</source> +<target>ΔιαγÏαφή αÏχείων:</target> <source>Permanent</source> <target>Μόνιμα</target> @@ -873,56 +850,89 @@ is the same <source>Naming convention:</source> <target>ΤÏόπος ονομασίας:</target> -<source>Batch job</source> -<target>ΔÎσμη ενεÏγειών</target> +<source>Show examples</source> +<target>Εμφάνιση παÏαδειγμάτων</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>ΔημιουÏγία ενός αÏχείου δÎσμης για αυτόματο συγχÏονισμό. Για να ξεκινήσετε, κάντε διπλό κλικ σε αυτό το αÏχείο ή ενσωματώστε το σε Îνα χÏονοδιάγÏαμμα εÏγασιών: %x</target> +<source>Handle errors:</source> +<target>ΧειÏισμός σφαλμάτων:</target> -<source>Exit</source> -<target>Έξοδος</target> +<source>Ignore</source> +<target>ΠαÏάβλεψη</target> -<source>Abort synchronization on first error</source> -<target>Ματαίωση του συγχÏÎ¿Î½Î¹ÏƒÎ¼Î¿Ï Î¼Îµ το Ï€Ïώτο σφάλμα</target> +<source>Hide all error and warning messages</source> +<target>ΑπόκÏυψη όλων των σφαλμάτων και Ï€Ïοειδοποιήσεων</target> -<source>Show progress dialog</source> -<target>Εμφάνιση της αναφοÏάς Ï€Ïοόδου</target> +<source>Pop-up</source> +<target>Αναδυόμενο μήνυμα</target> -<source>Save log</source> -<target>Αποθήκευση αÏχείου καταγÏαφής</target> +<source>Show pop-up on errors or warnings</source> +<target>Εμφάνιση αναδυόμενου παÏάθυÏου σε σφάλματα ή Ï€Ïοειδοποιήσεις</target> -<source>Select folder to save log files</source> -<target>Επιλογή υποκαταλόγου για την αποθήκευση των αÏχείων καταγÏαφής</target> +<source>On completion:</source> +<target>Μετά την ολοκλήÏωση:</target> -<source>Limit</source> -<target>ÎœÎγιστος αÏιθμός</target> +<source>Start synchronization now?</source> +<target>Îα ξεκινήσει ο συγχÏονισμός Ï„ÏŽÏα;</target> -<source>Limit maximum number of log files</source> -<target>ÎœÎγιστος αÏιθμός αÏχείων καταγÏαφής</target> +<source>Variant:</source> +<target>ÎœÎθοδος:</target> -<source>Source code written in C++ using:</source> -<target>Ο πηγαίος κώδικας γÏάφτηκε σε C++ χÏησιμοποιώντας τα:</target> +<source>Statistics</source> +<target>Στατιστικά</target> -<source>If you like FreeFileSync</source> -<target>Αν σας αÏÎσει το FreeFileSync</target> +<source>&Don't show this dialog again</source> +<target>&Îα μην εμφανιστεί ξανά αυτό το μήνυμα</target> -<source>Donate with PayPal</source> -<target>Κάντε μια δωÏεά μÎσω PayPal</target> +<source>Items found:</source> +<target>Î’ÏÎθηκαν στοιχεία:</target> -<source>Many thanks for localization:</source> -<target>ΠολλÎÏ‚ ευχαÏιστίες για τις μεταφÏάσεις:</target> +<source>Speed:</source> +<target>ΤαχÏτητα:</target> -<source>Feedback and suggestions are welcome</source> -<target>Τα σχόλια και οι Ï€Ïοτάσεις σας είναι ευπÏόσδεκτα</target> +<source>Time remaining:</source> +<target>ΑπομÎνει χÏόνος:</target> -<source>Homepage</source> -<target>Ιστοσελίδα</target> +<source>Time elapsed:</source> +<target>Î ÎÏασε χÏόνος:</target> -<source>Email</source> -<target>Email</target> +<source>Synchronizing...</source> +<target>Γίνεται συγχÏονισμός...</target> -<source>Published under the GNU General Public License</source> -<target>ΔιανÎμεται υπό την Γενική Άδεια Δημόσιας ΧÏήσης GNU</target> +<source>Minimize to notification area</source> +<target>Ελαχιστοποίηση στην πεÏιοχή ειδοποιήσεων</target> + +<source>Close</source> +<target>Κλείσιμο</target> + +<source>&Pause</source> +<target>&ΠαÏση</target> + +<source>Stop</source> +<target>Διακοπή</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>ΔημιουÏγία ενός αÏχείου δÎσμης για αυτόματο συγχÏονισμό. Για να ξεκινήσετε, κάντε διπλό κλικ σε αυτό το αÏχείο ή ενσωματώστε το σε Îνα χÏονοδιάγÏαμμα εÏγασιών: %x</target> + +<source>Stop synchronization at first error</source> +<target>Διακοπή του συγχÏÎ¿Î½Î¹ÏƒÎ¼Î¿Ï Î¼Îµ το Ï€Ïώτο σφάλμα</target> + +<source>Show progress dialog</source> +<target>Εμφάνιση της αναφοÏάς Ï€Ïοόδου</target> + +<source>Save log:</source> +<target>Αποθήκευση αÏχείου καταγÏαφής:</target> + +<source>Limit:</source> +<target>ÎŒÏιο:</target> + +<source>Limit maximum number of log files</source> +<target>ÎœÎγιστος αÏιθμός αÏχείων καταγÏαφής</target> + +<source>How can I schedule a batch job?</source> +<target>Î ÏŽÏ‚ μποÏÏŽ να Ï€ÏογÏαμματίσω μια εÏγασία με δÎσμη ενεÏγειών;</target> + +<source>&Recycle bin</source> +<target>&Κάδος ανακÏκλωσης</target> <source>Delete on both sides</source> <target>ΔιαγÏαφή και στις δυο πλευÏÎÏ‚</target> @@ -930,95 +940,125 @@ is the same <source>Delete on both sides even if the file is selected on one side only</source> <target>ΔιαγÏαφή και στις δυο πλευÏÎÏ‚, ακόμα κι αν το αÏχείο Îχει επιλεχθεί μόνο στη μια πλευÏά</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Θα συγχÏονιστοÏν τα αÏχεία που ικανοποιοÏν όλους τους κανόνες των φίλτÏων. -Σημείωση: Οι διαδÏομÎÏ‚ των αÏχείων Ï€ÏÎπει να είναι σχετικÎÏ‚ ως Ï€Ïος τους βασικοÏÏ‚ υποκαταλόγους. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Επιλογή κανόνων φιλτÏαÏίσματος, ώστε να αποκλειστοÏν οÏισμÎνα αÏχεία από το συγχÏονισμό. Εισάγετε τις διαδÏομÎÏ‚ των αÏχείων σχετικά με το αντίστοιχο ζεÏγος υποκαταλόγων.</target> -<source>Include</source> -<target>ΣυμπεÏίληψη</target> +<source>Include:</source> +<target>ΣυμπεÏίληψη:</target> -<source>Exclude</source> -<target>ΕξαίÏεση</target> +<source>Exclude:</source> +<target>Αποκλεισμός:</target> -<source>Time span</source> -<target>ΕÏÏος χÏόνου</target> +<source>Time span:</source> +<target>ΧÏονικό εÏÏος:</target> -<source>File size</source> -<target>ÎœÎγεθος αÏχείου</target> +<source>File size:</source> +<target>ÎœÎγεθος αÏχείου:</target> -<source>Minimum</source> -<target>Ελάχιστο</target> +<source>Minimum:</source> +<target>Ελάχιστο:</target> -<source>Maximum</source> +<source>Maximum:</source> <target>ÎœÎγιστο</target> <source>&Clear</source> <target>&ΚαθαÏισμός</target> -<source>Global settings</source> -<target>ΓενικÎÏ‚ Ïυθμίσεις</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Οι ακόλουθες Ïυθμίσεις χÏησιμοποιοÏνται για όλες τις εÏγασίες συγχÏονισμοÏ.</target> <source>Fail-safe file copy</source> <target>Ασφαλής αντιγÏαφή αÏχείων</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>ΑντιγÏαφή αÏχικά σε Îνα Ï€ÏοσωÏινό αÏχείο (*.ffs_tmp) και στη συνÎχεια μετονομασία του. Αυτό εγγυάται μια συνεπή κατάσταση ακόμα και σε πεÏίπτωση μοιÏαίου σφάλματος.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +ΑντιγÏαφή σε Îνα Ï€ÏοσωÏινό αÏχείο (*.ffs_tmp) Ï€Ïιν την αντικατάσταση του Ï€ÏοοÏισμοÏ. +Αυτό εγγυάται μια συνεπή κατάσταση ακόμα και στην πεÏίπτωση σοβαÏÎ¿Ï ÏƒÏ†Î¬Î»Î¼Î±Ï„Î¿Ï‚. +</target> + +<source>(recommended)</source> +<target>(Ï€Ïοτεινόμενο)</target> <source>Copy locked files</source> <target>ΑντιγÏαφή κλειδωμÎνων αÏχείων</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>ΑντιγÏαφή των κοινόχÏηστων ή κλειδωμÎνων αÏχείων με τη χÏήση της ΥπηÏεσίας Σκιώδους ΑντίγÏαφου Τόμου (απαιτεί δικαιώματα διαχειÏιστή)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>ΑντιγÏαφή των κοινών ή κλειδωμÎνων αÏχείων με τη χÏήση της ΥπηÏεσίας Σκιωδών ΑντιγÏάφων Τόμου.</target> + +<source>(requires administrator rights)</source> +<target>(απαιτεί δικαιώματα διαχειÏιστή)</target> <source>Copy file access permissions</source> <target>ΑντιγÏαφή των αδειών Ï€ÏοσπÎλασης των αÏχείων</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>ΜεταφοÏά των αδειών Ï€ÏοσπÎλασης των αÏχείων και των υποκαταλόγων(απαιτεί δικαιώματα διαχειÏιστή)</target> +<source>Transfer file and folder permissions.</source> +<target>ΜεταφοÏά των αδειών Ï€ÏοσπÎλασης αÏχείων και υποκαταλόγων.</target> + +<source>Automatic retry on error:</source> +<target>Αυτόματη επανάληψη σε πεÏίπτωση σφάλματος:</target> -<source>Restore hidden dialogs</source> -<target>Επανεμφάνιση κÏυμμÎνων μηνυμάτων</target> +<source>Retry count:</source> +<target>ΑÏιθμός Ï€Ïοσπαθειών:</target> -<source>External applications</source> -<target>ΕξωτεÏικÎÏ‚ εφαÏμογÎÏ‚</target> +<source>Delay (in seconds):</source> +<target>ΚαθυστÎÏηση (σε δευτεÏόλεπτα):</target> + +<source>Customize context menu:</source> +<target>Î ÏοσαÏμογή Î¼ÎµÎ½Î¿Ï ÎµÏ€Î¹Î»Î¿Î³ÏŽÎ½:</target> <source>Description</source> <target>ΠεÏιγÏαφή</target> +<source>Restore hidden windows</source> +<target>ΕπαναφοÏά των κÏυμμÎνων διαλόγων</target> + <source>&Default</source> <target>&Î Ïοεπιλογή</target> -<source>Find what:</source> -<target>Αναζήτηση του:</target> +<source>Source code written in C++ using:</source> +<target>Ο πηγαίος κώδικας γÏάφτηκε σε C++ χÏησιμοποιώντας τα:</target> -<source>Match case</source> -<target>Αντιστοίχιση πεζών-κεφαλαίων</target> +<source>If you like FreeFileSync</source> +<target>Αν σας αÏÎσει το FreeFileSync</target> -<source>&Find next</source> -<target>&ΕÏÏεση επομÎνου</target> +<source>Donate with PayPal</source> +<target>Κάντε μια δωÏεά μÎσω PayPal</target> -<source>Start synchronization</source> -<target>ΈναÏξη του συγχÏονισμοÏ</target> +<source>Feedback and suggestions are welcome</source> +<target>Τα σχόλια και οι Ï€Ïοτάσεις σας είναι ευπÏόσδεκτα</target> -<source>Delete</source> -<target>ΔιαγÏαφή</target> +<source>Homepage</source> +<target>Ιστοσελίδα</target> + +<source>Email</source> +<target>Email</target> -<source>Configure filter</source> -<target>ΡÏθμιση του φίλτÏου</target> +<source>Published under the GNU General Public License</source> +<target>ΔιανÎμεται υπό την Γενική Άδεια Δημόσιας ΧÏήσης GNU</target> -<source>Find</source> -<target>Αναζήτηση</target> +<source>Many thanks for localization:</source> +<target>ΠολλÎÏ‚ ευχαÏιστίες για τις μεταφÏάσεις:</target> + +<source>Save as Batch Job</source> +<target>Αποθήκευση ως ΔÎσμη ΕÏγασιών</target> + +<source>Delete Items</source> +<target>ΔιαγÏαφή Στοιχείων</target> + +<source>Global Settings</source> +<target>ΓενικÎÏ‚ Ρυθμίσεις</target> -<source>Select time span</source> -<target>Επιλογή χÏÎ¿Î½Î¹ÎºÎ¿Ï Î´Î¹Î±ÏƒÏ„Î®Î¼Î±Ï„Î¿Ï‚</target> +<source>Select Time Span</source> +<target>Επιλογή ΧÏÎ¿Î½Î¹ÎºÎ¿Ï Î•ÏÏους</target> -<source>Folder pairs</source> -<target>ΖεÏγη υποκαταλόγων</target> +<source>Folder Pairs</source> +<target>ΖεÏγη Υποκαταλόγων</target> + +<source>Find</source> +<target>Αναζήτηση</target> <source>Overview</source> <target>ΣÏνοψη</target> @@ -1026,14 +1066,14 @@ Note: File paths must be relative to base directories. <source>Configuration</source> <target>Διάταξη</target> -<source>Main bar</source> -<target>ΓÏαμμή εÏγαλείων</target> +<source>Main Bar</source> +<target>ΚÏÏια ΓÏαμμή</target> -<source>Filter files</source> -<target>ΦιλτÏάÏισμα</target> +<source>Filter Files</source> +<target>ΦιλτÏάÏισμα ΑÏχείων</target> -<source>Select view</source> -<target>Επιλογή εμφάνισης</target> +<source>Select View</source> +<target>Επιλογή Εμφάνισης</target> <source>Open...</source> <target>Άνοιγμα...</target> @@ -1044,14 +1084,14 @@ Note: File paths must be relative to base directories. <source>Compare both sides</source> <target>ΣÏγκÏιση των δÏο πλευÏών</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Είστε σίγουÏοι ότι θÎλετε να εκτελÎσετε την εντολή %y για 1 αντικείμενο;</pluralform> -<pluralform>Είστε σίγουÏοι ότι θÎλετε να εκτελÎσετε την εντολή %y για %x αντικείμενα;</pluralform> -</target> +<source>Comparison settings</source> +<target>Ρυθμίσεις σÏγκÏισης</target> + +<source>Synchronization settings</source> +<target>Ρυθμίσεις συγχÏονισμοÏ</target> + +<source>Start synchronization</source> +<target>ΈναÏξη του συγχÏονισμοÏ</target> <source>Confirm</source> <target>Επιβεβαίωση</target> @@ -1089,12 +1129,6 @@ Note: File paths must be relative to base directories. <source>Set direction:</source> <target>Επιλογή κατεÏθυνσης:</target> -<source>Exclude temporarily</source> -<target>Î ÏοσωÏινή εξαίÏεση</target> - -<source>Include temporarily</source> -<target>Î ÏοσωÏινή συμπεÏίληψη</target> - <source>multiple selection</source> <target>πολλαπλή επιλογή</target> @@ -1104,6 +1138,15 @@ Note: File paths must be relative to base directories. <source>Exclude via filter:</source> <target>ΕξαίÏεση με βάση το φίλτÏο:</target> +<source>Exclude temporarily</source> +<target>Î ÏοσωÏινή εξαίÏεση</target> + +<source>Include temporarily</source> +<target>Î ÏοσωÏινή συμπεÏίληψη</target> + +<source>Delete</source> +<target>ΔιαγÏαφή</target> + <source>Include all</source> <target>ΣυμπεÏίληψη όλων</target> @@ -1146,11 +1189,14 @@ Note: File paths must be relative to base directories. <source>Do you want to save changes to %x?</source> <target>ΘÎλετε να αποθηκεÏσετε τις αλλαγÎÏ‚ στο %x;</target> +<source>Never save &changes</source> +<target>Îα &μην αποθηκεÏονται οι αλλαγÎÏ‚</target> + <source>Do&n't save</source> <target>Îα &μην αποθηκευθοÏν</target> -<source>Never save &changes</source> -<target>Îα &μην αποθηκεÏονται οι αλλαγÎÏ‚</target> +<source>Filter</source> +<target>ΦίλτÏο</target> <source>Show files that exist on left side only</source> <target>Εμφάνιση των αÏχείων που υπάÏχουν μόνο στα αÏιστεÏά</target> @@ -1197,12 +1243,18 @@ Note: File paths must be relative to base directories. <source>Set as default</source> <target>ΟÏισμός ως Ï€Ïοεπιλογής</target> -<source>Operation aborted</source> -<target>Η λειτουÏγία ματαιώθηκε</target> - <source>All folders are in sync</source> <target>Όλοι οι υποκατάλογοι είναι συγχÏονισμÎνοι</target> +<source>Synchronization Settings</source> +<target>Ρυθμίσεις συγχÏονισμοÏ</target> + +<source>Comparison Settings</source> +<target>Ρυθμίσεις ΣÏγκÏισης</target> + +<source>Cannot find %x</source> +<target>Δεν μποÏεί να βÏεθεί το %x</target> + <source>Comma-separated values</source> <target>ΑÏχείο χωÏισμÎνο με κόμματα</target> @@ -1212,30 +1264,6 @@ Note: File paths must be relative to base directories. <source>Searching for program updates...</source> <target>Αναζήτηση καινοÏÏιας Îκδοσης...</target> -<source>&Ignore subsequent errors</source> -<target>&Αγνόηση επόμενων σφαλμάτων</target> - -<source>&Ignore</source> -<target>&ΠαÏάβλεψη</target> - -<source>Fatal Error</source> -<target>Σημαντικό Σφάλμα</target> - -<source>&Don't show this warning again</source> -<target>&Îα μην εμφανιστεί ξανά αυτή η Ï€Ïοειδοποίηση</target> - -<source>&Switch</source> -<target>&Εναλλαγή</target> - -<source>Question</source> -<target>ΕÏώτηση</target> - -<source>&Yes</source> -<target>&Îαι</target> - -<source>&No</source> -<target>ÎŒ&χι</target> - <source>Scanning...</source> <target>Ανίχνευση...</target> @@ -1245,14 +1273,17 @@ Note: File paths must be relative to base directories. <source>Info</source> <target>ΠληÏοφοÏίες</target> +<source>Warning</source> +<target>Î Ïοειδοποίηση</target> + <source>Paused</source> <target>Σε παÏση</target> <source>Initializing...</source> <target>ΑÏχικοποίηση...</target> -<source>Aborted</source> -<target>Ματαιώθηκε</target> +<source>Stopped</source> +<target>Διεκόπη</target> <source>Completed</source> <target>ΟλοκληÏώθηκε</target> @@ -1263,12 +1294,6 @@ Note: File paths must be relative to base directories. <source>Log</source> <target>ΚαταγÏαφή</target> -<source>Cannot find %x</source> -<target>Δεν μποÏεί να βÏεθεί το %x</target> - -<source>Inactive</source> -<target>ΑνενεÏγό</target> - <source>Today</source> <target>ΣήμεÏα</target> @@ -1293,9 +1318,6 @@ Note: File paths must be relative to base directories. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>ΦίλτÏο</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1327,9 @@ Note: File paths must be relative to base directories. <pluralform>Είστε σίγουÏοι ότι θÎλετε να μετακινήσετε τα ακόλουθα %x αντικείμενα στον κάδο ανακÏκλωσης;</pluralform> </target> +<source>Move</source> +<target>ΜεταφοÏά</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,11 +1339,14 @@ Note: File paths must be relative to base directories. <pluralform>Είσαι σίγουÏος ότι θÎλεις να διαγÏαφοÏν τα ακόλουθα %x αντικείμενα;</pluralform> </target> +<source>Exclude</source> +<target>ΕξαίÏεση</target> + <source>Direct</source> -<target>Ως δεσμοÏ</target> +<target>Ως δεσμοί</target> <source>Follow</source> -<target>Ως πεÏιεχομÎνου</target> +<target>Ως πεÏιεχόμενο</target> <source>Copy NTFS permissions</source> <target>ΑντιγÏαφή αδειών Ï€ÏοσπÎλασης NTFS</target> @@ -1338,8 +1366,8 @@ Note: File paths must be relative to base directories. <source>- Other side's counterpart to %item_folder%</source> <target>- Το αντίστοιχο του %item_folder% της άλλης πλευÏάς</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Îα επανεμφανιστοÏν τα κÏυμμÎνα μηνÏματα και Ï€Ïοειδοποιήσεις;</target> +<source>Restore all hidden windows and warnings?</source> +<target>Îα γίνει επαναφοÏά όλων των κÏυμμÎνων μηνυμάτων και Ï€Ïοειδοποιήσεων;</target> <source>Leave as unresolved conflict</source> <target>ΠαÏάβλεψη ως ανεπίλυτη διÎνεξη</target> @@ -1464,14 +1492,14 @@ Note: File paths must be relative to base directories. <pluralform>%x μÎÏες</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Αποτυχία στην καταχώÏηση για τη λήψη μηνυμάτων του συστήματος.</target> +<source>Unable to register to receive system messages.</source> +<target>Δεν μποÏεί να καταχωÏηθεί η λήψη μηνυμάτων συστήματος.</target> <source>Cannot set privilege %x.</source> <target>Τα δικαιώματα %x δεν μποÏοÏν να οÏιστοÏν.</target> -<source>Failed to suspend system sleep mode.</source> -<target>ΑπÎτυχε η αναβολή της αναστολής λειτουÏγίας του υπολογιστή.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Δεν μποÏεί να διακοπεί η αναστολή του συστήματος.</target> <source>Cannot change process I/O priorities.</source> <target>Δεν μποÏοÏν να αλλάξουν οι Ï€ÏοτεÏαιότητες I/O της διεÏγασίας.</target> diff --git a/BUILD/Languages/hebrew.lng b/BUILD/Languages/hebrew.lng index ede03515..210efe49 100644 --- a/BUILD/Languages/hebrew.lng +++ b/BUILD/Languages/hebrew.lng @@ -2,16 +2,20 @@ <language>עברית</language> <translator>nitnit</translator> <locale>he_IL</locale> - <flag_image>flag_israel.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_israel.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> +<source>Retrying operation...</source> <target></target> -<source>Close search bar</source> -<target></target> +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> <source>Both sides have changed since last synchronization.</source> <target>×©× ×™ ×”×¦×“×“×™× ×©×•× ×• מ××– ×”×¡× ×›×¨×•×Ÿ ×”×חרון.</target> @@ -64,9 +68,6 @@ <source>Cannot open file %x.</source> <target>×œ× ×™×›×•×œ לפתוח קובץ %x.</target> -<source>Error</source> -<target>שגי××”</target> - <source>File %x does not contain a valid configuration.</source> <target>קובץ %x ××™× ×• כולל תצורה ×ª×§×™× ×”.</target> @@ -76,9 +77,6 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>קבצי ×”×§×•× ×¤×™×’×•×¨×¦×™×” ××™× × ×™×›×•×œ×™× ×œ×›×œ×•×œ הגדרות של זוגות מחיצות ×›×שר מחיצות מוגדרות ב×מצעות שורת הפקודה</target> -<source>Warning</source> -<target>×זהרה</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>מחיצות ××™× ×• יכולות להיות מוגדרות עבור יותר מקובץ ×§×•× ×¤×™×’×•×¨×¦×™×” ×חד.</target> @@ -298,8 +296,8 @@ <source>/sec</source> <target>/×©× </target> -<source>%x items</source> -<target>%x פריטי×</target> +<source>%x items/sec</source> +<target>%x ×¤×¨×™×˜×™× ×œ×©× ×™×”</target> <source>Configuration file %x loaded partially only.</source> <target>קובץ תצורה %x × ×˜×¢×Ÿ חלקית בלבד.</target> @@ -328,11 +326,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>כרך ×‘×©× %x ××™× ×• חלק של × ×ª×™×‘ קובץ %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>התקבלה בקשת ביטול: מחכה לפעולה ×”× ×•×›×—×™×ª להסתיי×...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>עצירה התבקשה: מחכה שפעולה × ×•×›×—×™×ª תסתיי×...</target> -<source>Failure to create timestamp for versioning:</source> -<target>× ×›×©×œ ייצור תג זמן עבור עדכון גרס×ות</target> +<source>Unable to create timestamp for versioning:</source> +<target>×œ× × ×™×ª×Ÿ ליצור תג זמן לגרס×ות:</target> <source>Cannot read the following XML elements:</source> <target>×œ× ×™×›×•×œ ×œ×§×¨×•× ×ת שמות צמתי XML:</target> @@ -349,8 +347,8 @@ <source>&Program</source> <target>&×ª×•×›× ×”</target> -<source>&Content</source> -<target>&תוכן</target> +<source>&View help</source> +<target>&הר××” עזרה</target> <source>&About</source> <target>&×ודות</target> @@ -373,8 +371,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>בכדי להתחיל ×™×‘× ×§×•×‘×¥ .ffs_batch</target> -<source>Folders to watch</source> -<target>תיקיות לצפייה</target> +<source>Folders to watch:</source> +<target>תיקיות לצפייה:</target> <source>Add folder</source> <target>הוסף מחיצה</target> @@ -388,12 +386,15 @@ <source>Select a folder</source> <target>בחר מחיצה</target> -<source>Idle time [seconds]</source> -<target>זמן סרק [×©× ×™×•×ª]</target> +<source>Idle time (in seconds):</source> +<target>זמן ×”×ž×ª× ×” (×‘×©× ×™×•×ª):</target> <source>Idle time between last detected change and execution of command</source> <target>זמן ×”×ž×ª× ×” בין ×©×™× ×•×™×™ מ×ובחן ×חרון לבין ביצוע של פקודה</target> +<source>Command line:</source> +<target>שורת פקודה:</target> + <source> The command is triggered if: - files or subfolders change @@ -405,8 +406,8 @@ The command is triggered if: - תיקיות חדשות מופיעות (לדוגמה התקן USB ×ž×•×›× ×¡) </target> -<source>Start</source> -<target>התחל</target> +<source>&Start</source> +<target>&התחל</target> <source>&Retry</source> <target>&× ×¡×” ×©× ×™×ª</target> @@ -414,9 +415,6 @@ The command is triggered if: <source>Cancel</source> <target>בטל</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - ×¡×™× ×›×¨×•×Ÿ ×וטומטי</target> - <source>Build: %x</source> <target>×ž×‘× ×”: %x</target> @@ -426,12 +424,18 @@ The command is triggered if: <source>All files</source> <target>כל הקבצי×</target> +<source>Automated Synchronization</source> +<target>×¡× ×›×¨×•×Ÿ ×וטומטי</target> + <source>Directory monitoring active</source> <target>× ×™×˜×•×¨ מחיצות פעיל</target> <source>Waiting until all directories are available...</source> <target>מחכה עד שכל המחיצות יהיו ×–×ž×™× ×•×ª...</target> +<source>Error</source> +<target>שגי××”</target> + <source>&Restore</source> <target>&טען מחדש</target> @@ -441,8 +445,8 @@ The command is triggered if: <source>&Exit</source> <target>&יצי××”</target> -<source>Invalid command line:</source> -<target>שורת פקודה בלתי חוקית:</target> +<source>Incorrect command line:</source> +<target>שורת פקודה ×œ× ×ª×§×™× ×”:</target> <source>File content</source> <target>תכולת הקובץ</target> @@ -504,8 +508,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>קלט תיקיית מטרה ××™× ×” יכול להיות ריק.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>קלט שדה תיקייה עבור גירס×ות ××™× ×• יכול להיות ריק.</target> +<source>Please enter a target folder for versioning.</source> +<target>בבקשה הזן תיקיית יעד עבור גרס×ות.</target> <source>Source folder %x not found.</source> <target>תיקיית מקור %x ×œ× × ×ž×¦×ת.</target> @@ -543,8 +547,8 @@ The command is triggered if: <source>job name</source> <target>×©× ×ž×©×™×ž×”</target> -<source>Synchronization aborted</source> -<target>×¡×™× ×›×¨×•×Ÿ בוטל</target> +<source>Synchronization stopped</source> +<target>×¡× ×›×¨×•×Ÿ הופסק</target> <source>Synchronization completed with errors</source> <target>×¡× ×›×¨×•×Ÿ ×”×•×©×œ× ×¢× ×©×’×™×ות</target> @@ -561,14 +565,11 @@ The command is triggered if: <source>Saving log file %x...</source> <target>שומר קובץ יומן %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>לחץ על "החלפה" בכדי לפתור בעיות בדי×לוג הר×שי.</target> - -<source>Switching to FreeFileSync main dialog</source> -<target>מחליף לתיבת דו שיח ר×שית של FreeFileSync</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>× ×™×ª×Ÿ לעבור לחלון הר×שי של FreeFileSybc כדי לפתור ×ת הסוגיה הזו.</target> -<source>Retrying operation after error:</source> -<target>×ž× ×¡×” ×©× ×™×ª ל×חר שגי××”:</target> +<source>Switching to FreeFileSync's main window</source> +<target>מעבר ×ל החלון הר×שי של FreeFileSybc</target> <source>A new version of FreeFileSync is available:</source> <target>גירסה חדשה של FreeFileSync ×–×ž×™× ×”:</target> @@ -576,8 +577,8 @@ The command is triggered if: <source>Download now?</source> <target>הורד עכשיו?</target> -<source>New version found</source> -<target>גרסה חדשה × ×ž×¦××”</target> +<source>Check for Program Updates</source> +<target>בדוק ×§×™×•× ×¢×“×›×•× ×™ ×ª×•×›× ×”</target> <source>&Download</source> <target>&הורד</target> @@ -585,9 +586,6 @@ The command is triggered if: <source>FreeFileSync is up to date.</source> <target>FreeFileSync מעודכן לגירסה ×”××—×¨×•× ×”.</target> -<source>Information</source> -<target>מידע</target> - <source>Unable to connect to sourceforge.net.</source> <target>×ין תקשורת ל sourceforge.net.</target> @@ -645,20 +643,20 @@ The command is triggered if: <source>Hibernate</source> <target>עבור למצב ×©×™× ×”</target> -<source>Selected variant:</source> -<target>גירסה ×©× ×‘×—×¨×”:</target> +<source>Alternate comparison settings</source> +<target>הגדרות השוו××” חלופיות</target> -<source>Select alternate comparison settings</source> -<target>בחר הגדרות השוו××” חליפיות</target> +<source>Alternate synchronization settings</source> +<target>הגדרות ×¡× ×›×¨×•×Ÿ חלופיות</target> -<source>Select alternate synchronization settings</source> -<target>בחר הגדרות ×¡× ×›×¨×•×Ÿ חליפיות</target> +<source>Local filter</source> +<target>×ž×¡× ×Ÿ מקומי</target> -<source>Filter is active</source> -<target>×ž×¡× ×Ÿ פעיל</target> +<source>Active</source> +<target>פעיל</target> -<source>No filter selected</source> -<target>×œ× × ×‘×—×¨ ×ž×¡× ×Ÿ פעיל</target> +<source>None</source> +<target>×ין</target> <source>Remove alternate settings</source> <target>הסר הגדרות תצורה חליפיות</target> @@ -672,6 +670,15 @@ The command is triggered if: <source>Paste</source> <target>הדבק</target> +<source>Alternate Comparison Settings</source> +<target>הגדרות השוו××” חלופיות</target> + +<source>Alternate Synchronization Settings</source> +<target>הגדרות ×¡× ×›×¨×•×Ÿ חלופיות</target> + +<source>Local Filter</source> +<target>×ž×¡× ×Ÿ מקומי</target> + <source>&New</source> <target>&חדש</target> @@ -687,15 +694,18 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. &×¡× ×›×¨×Ÿ</target> +<source>&Global settings</source> +<target>&×ž×©×ª× ×™× ×’×œ×•×‘×œ×™×™×</target> + <source>&Language</source> <target>&שפה</target> +<source>&Find...</source> +<target>&מצ×</target> + <source>&Export file list...</source> <target>&×™×¦× ×¨×©×™×ž×ª קבצי×...</target> -<source>&Global settings</source> -<target>&×ž×©×ª× ×™× ×’×œ×•×‘×œ×™×™×</target> - <source>&Tools</source> <target>&כלי×</target> @@ -705,8 +715,8 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>בדוק &×וטומטית ×חת לשבוע</target> -<source>Check for new &version</source> -<target>בדוק גרסה &חדשה</target> +<source>&Check for new version</source> +<target>&בדוק ×§×™×•× ×’×™×¨×¡×” חדשה</target> <source>Compare</source> <target>השוו××”</target> @@ -723,8 +733,11 @@ The command is triggered if: <source>Swap sides</source> <target>החלף צדדי×</target> -<source>Find what:</source> -<target>חפש מה:</target> +<source>Close search bar</source> +<target>סגור סרגל חיפוש</target> + +<source>Find:</source> +<target>מצ×:</target> <source>Match case</source> <target>הת×× ×¨×™×©×™×•×ª</target> @@ -750,74 +763,20 @@ The command is triggered if: <source>Total bytes to copy</source> <target>סה"×› ×‘×ª×™× ×œ×”×¢×ª×™×§</target> -<source>Items found:</source> -<target>××œ×ž× ×˜×™× × ×ž×¦×ו:</target> +<source>Select a variant:</source> +<target>בחר גירסה:</target> -<source>Speed:</source> -<target>מהירות:</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>×–×”×” ×§×‘×¦×™× ×–×”×™× ×‘×מצעות השוו×ת תג הזמן והגודל.</target> -<source>Time remaining:</source> -<target>זמן ×©× ×©×ר:</target> +<source>Identify equal files by comparing the file content.</source> +<target>×–×”×” ×§×‘×¦×™× ×–×”×™× ×‘×מצעות השוו×ת תוכן.</target> -<source>Time elapsed:</source> -<target>זמן שעבר:</target> +<source>Symbolic links:</source> +<target>×§×™×©×•×¨×™× ×¡×™×ž×‘×•×œ×™×™×:</target> -<source>Synchronizing...</source> -<target>×ž×¡× ×›×¨×Ÿ...</target> - -<source>Minimize to notification area</source> -<target>הקטן ל×יזור ההתרעות</target> - -<source>On completion</source> -<target>ל×חר סיו×:</target> - -<source>Close</source> -<target>סגור</target> - -<source>&Pause</source> -<target>&עצור</target> - -<source>Variant</source> -<target>×ž×©×ª× ×”</target> - -<source>Statistics</source> -<target>סטטיסטיקה</target> - -<source>&Don't show this dialog again</source> -<target>&×ל תר××” דושיח ×–×” ×©× ×™×ª</target> - -<source>Select a variant</source> -<target>בחר גירסה</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -×”×§×‘×¦×™× ×™×™×ž×¦×ו ×›×–×”×™× ×× - - זמן ות×ריך שמירה ××—×¨×•× ×™× - - גודל קובץ -×”× ×–×”×™× -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -×§×‘×¦×™× ×ž×•×’×“×¨×™× ×›×–×”×™× ×× - - תכולת הקובץ -×”×™× ×–×”×” -</target> - -<source>Symbolic Link handling</source> -<target>טיפול בקישור סימבולי</target> - -<source>Help</source> -<target>עזרה</target> +<source>More information</source> +<target>מידע × ×•×¡×£</target> <source>OK</source> <target>×שר</target> @@ -825,11 +784,11 @@ is the same <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>×–×”×” והפץ ×©×™× ×•×™×™× ×‘×©× ×™ הצדדי×. מחיקות העברות וסתירות ×ž×ª×’×œ×™× ×‘×ופן ×וטומטי ב×מצעות מסד × ×ª×•× ×™×.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>גיבוי מר××” של מחיצה ×™×ž× ×™×ª. מחיצה שמ×לית תתעדכן ותהיה ×–×”×” ×œ×™×ž× ×™×ª ל×חר ×”×¡×™× ×›×¨×•×Ÿ.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>צור גבוי מר××” של התיקייה השמ×לית ×שר ×™×”×™×” ×–×”×” לתיקייה ×”×™×ž× ×™×ª ל×חר ×”×¡× ×›×¨×•×Ÿ.</target> -<source>Copy new or updated files to right folder.</source> -<target>העתק ×§×‘×¦×™× ×—×“×©×™× ×ו ×ž×¢×•×“×›× ×™× ×œ×ž×—×™×¦×” השמ×לית.</target> +<source>Copy new and updated files to the right folder.</source> +<target>העתק ×§×‘×¦×™× ×—×“×©×™× ×•×ž×¢×•×“×›× ×™× ×œ×ª×™×§×™×™×” ×”×™×ž× ×™×ª.</target> <source>Configure your own synchronization rules.</source> <target>סדר ×ת כללי ×”×¡× ×›×¨×•×Ÿ שלך.</target> @@ -840,23 +799,8 @@ is the same <source>Requires database files. Not supported by all file systems.</source> <target>דורש קבצי בסיס × ×ª×•× ×™×. ×œ× × ×ª×ž×š ×¢"×™ כל מערכות הקבצי×.</target> -<source>Error handling</source> -<target>טיפול בשגי×ות</target> - -<source>Ignore</source> -<target>התעל×</target> - -<source>Hide all error and warning messages</source> -<target>הסתר ×ת כל הודעות ההזהרה והשגי××”</target> - -<source>Pop-up</source> -<target>מוקפץ</target> - -<source>Show pop-up on errors or warnings</source> -<target>הר××” ×—×œ×•× ×•×ª ×ž×•×§×¤×¦×™× ×¢×‘×•×¨ שגי×ות ×ו ×זהרות</target> - -<source>Deletion handling</source> -<target>טיפול במחיקות</target> +<source>Delete files:</source> +<target>מחק קבצי×:</target> <source>Permanent</source> <target>קבוע</target> @@ -879,96 +823,171 @@ is the same <source>Naming convention:</source> <target>מוסכמות לקביעת שמות:</target> -<source>Batch job</source> -<target>עבודת ×צווה</target> +<source>Show examples</source> +<target>הר××” דוגמ×ות</target> + +<source>Handle errors:</source> +<target>טפל בשגי×ות:</target> + +<source>Ignore</source> +<target>התעל×</target> + +<source>Hide all error and warning messages</source> +<target>הסתר ×ת כל הודעות ההזהרה והשגי××”</target> + +<source>Pop-up</source> +<target>מוקפץ</target> + +<source>Show pop-up on errors or warnings</source> +<target>הר××” ×—×œ×•× ×•×ª ×ž×•×§×¤×¦×™× ×¢×‘×•×¨ שגי×ות ×ו ×זהרות</target> + +<source>On completion:</source> +<target>×¢× ×”×¡×™×•×:</target> + +<source>Start synchronization now?</source> +<target>×”×× ×œ×”×ª×—×™×œ ×¡× ×›×¨×•×Ÿ עכשיו?</target> + +<source>Variant:</source> +<target>גרסה ×חרת:</target> + +<source>Statistics</source> +<target>סטטיסטיקה</target> + +<source>&Don't show this dialog again</source> +<target>&×ל תר××” דושיח ×–×” ×©× ×™×ª</target> + +<source>Items found:</source> +<target>××œ×ž× ×˜×™× × ×ž×¦×ו:</target> + +<source>Speed:</source> +<target>מהירות:</target> + +<source>Time remaining:</source> +<target>זמן ×©× ×©×ר:</target> + +<source>Time elapsed:</source> +<target>זמן שעבר:</target> + +<source>Synchronizing...</source> +<target>×ž×¡× ×›×¨×Ÿ...</target> + +<source>Minimize to notification area</source> +<target>הקטן ל×יזור ההתרעות</target> + +<source>Close</source> +<target>סגור</target> + +<source>&Pause</source> +<target>&עצור</target> + +<source>Stop</source> +<target>עצור</target> <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target>צור קובץ ×צווה ×œ×¡×™× ×›×¨×•×Ÿ ×œ×œ× ×”×ª×¢×¨×‘×•×ª מפעיל. כדי להפעיל, הקלק הקלקה כפולה על הקובץ ×ו תזמן ×‘×ž×ª×›× ×Ÿ המשימות: %x</target> -<source>Exit</source> -<target>יצי××”</target> - -<source>Abort synchronization on first error</source> -<target>הפסק פעולת ×¡×™× ×›×¨×•×Ÿ בשגי××” ר××©×•× ×”</target> +<source>Stop synchronization at first error</source> +<target>עצור ×¡× ×›×¨×•×Ÿ ×¢× ×”×•×¤×¢×ª שגי××” ר××©×•× ×”</target> <source>Show progress dialog</source> <target>הר××” שיח התקדמות</target> -<source>Save log</source> -<target>שמור קובץ יומן</target> - -<source>Select folder to save log files</source> -<target>בחר תיקיה לשמירת קובץ יומן</target> +<source>Save log:</source> +<target>שמור יומן:</target> -<source>Limit</source> -<target>הגבלה</target> +<source>Limit:</source> +<target>מגבלה:</target> <source>Limit maximum number of log files</source> <target>הגבל מספר מכסימלי של קבצי יומן</target> +<source>How can I schedule a batch job?</source> +<target>כיצד לתזמן משימת ×צווה?</target> + +<source>&Recycle bin</source> +<target>&סל מחזור</target> + <source>Delete on both sides</source> <target>מחק ×‘×©× ×™ הצדדי×</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>מחק ×‘×©× ×™ ×”×¦×“×“×™× ××£ ×× ×”×§×•×‘×¥ × ×‘×—×¨ בצד ×חד בלבד</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -×§×‘×¦×™× ×™×¡×•× ×›×¨× ×• רק ×× ×™×§×™×™×ž×• ×ת כל חוקי ×”×ž×¡× ×Ÿ. -הערה: × ×ª×™×‘×™ ×§×‘×¦×™× ×—×™×™×‘×™× ×œ×”×™×•×ª ×™×—×¡×™×™× ×œ×ž×—×™×¦×•×ª הבסיס. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>בחר כללי ×¡×™× ×•×Ÿ כדי ×œ× ×œ×›×œ×•×œ ×§×‘×¦×™× ×ž×¡×•×™×ž×™× ×‘×¡× ×›×¨×•×Ÿ. הזן ×ת × ×ª×™×‘×™ ×”×§×‘×¦×™× ×‘×™×—×¡ לזוג התיקיות בהת×מה.</target> -<source>Include</source> -<target>כלול</target> +<source>Include:</source> +<target>כלול:</target> -<source>Exclude</source> -<target>×ל תכלול</target> +<source>Exclude:</source> +<target>×œ× ×œ×›×œ×•×œ:</target> -<source>Time span</source> -<target>×ª×—×•× ×–×ž×Ÿ</target> +<source>Time span:</source> +<target>טווח זמן:</target> -<source>File size</source> -<target>גודל קובץ</target> +<source>File size:</source> +<target>גודל קובץ:</target> -<source>Minimum</source> -<target>×ž×™× ×™×ž×•×</target> +<source>Minimum:</source> +<target>×ž×™× ×™×ž×•×:</target> -<source>Maximum</source> -<target>מקסימו×</target> +<source>Maximum:</source> +<target>מקסימו×:</target> <source>&Clear</source> <target>&× ×§×”</target> -<source>Global settings</source> -<target>×ž×©×ª× ×™× ×’×œ×•×‘×œ×™×™×</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>ההגדרות הב×ות משמשות לכל משימות ×”×¡× ×›×¨×•×Ÿ.</target> <source>Fail-safe file copy</source> <target>כשלון ב×בטחת העתקת קובץ</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>העתק לקובץ ×–×ž× ×™ (*.ffs_tmp) ר×שית ו××– ×©× ×” ×ת שמו. ×–×” מבטיח במצ עיקבי במקרה של שגי××” חמורה.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +העתק לקובץ ×–×ž× ×™ (*.ffs_tmp) ×œ×¤× ×™ כתיבה מחדש על היעד. +×–×” מבטיח מצב עקבי ×’× ×‘×ž×§×¨×” של שגי××” חמורה. +</target> + +<source>(recommended)</source> +<target>(מומלץ)</target> <source>Copy locked files</source> <target>העתק ×§×‘×¦×™× × ×¢×•×œ×™×</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>העתק ×§×‘×¦×™× ×‘×©×™×ª×•×£ ×ו ×‘× ×¢×™×œ×” ב×מצעות שרות Volume Shadow Copy.</target> + +<source>(requires administrator rights)</source> +<target>(× ×“×¨×©×•×ª זכויות ×ž× ×”×œ)</target> + <source>Copy file access permissions</source> <target>העתק הרש×ות גישה של הקובץ</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>העבר הרש×ות של קובץ ותיקיה (דורש זכויות ×ž× ×”×œ)</target> +<source>Transfer file and folder permissions.</source> +<target>הרש×ות העברת קובץ ומחיצה.</target> -<source>Restore hidden dialogs</source> -<target>שחזר די××œ×•×’×™× ×ž×•×¡×ª×¨×™×</target> +<source>Automatic retry on error:</source> +<target>× ×¡×™×•×Ÿ חוזר ×וטומטי במקרה שגי××”:</target> -<source>External applications</source> -<target>×ª×•×›× ×” ×—×™×¦×•× ×™×ª</target> +<source>Retry count:</source> +<target>×ž×•× ×” × ×¡×™×•× ×•×ª חוזרי×:</target> + +<source>Delay (in seconds):</source> +<target>השהייה (×‘×©× ×™×•×ª):</target> + +<source>Customize context menu:</source> +<target>הת×מה ×ישית של תפריט הקשר:</target> <source>Description</source> <target>ת×ור</target> +<source>Restore hidden windows</source> +<target>שחזר ×—×œ×•× ×•×ª × ×™×¡×ª×¨×™×</target> + <source>&Default</source> <target>&ברירת מחדל</target> @@ -996,26 +1015,20 @@ Note: File paths must be relative to base directories. <source>Many thanks for localization:</source> <target>תודות עבור ×ª×¨×’×•× ×©×¤×•×ª:</target> -<source>Start synchronization</source> -<target>התחל ×¡× ×›×¨×•×Ÿ</target> +<source>Save as Batch Job</source> +<target>שמור כמשימת ×צווה</target> -<source>Comparison settings</source> -<target>הגדרות השוו××”</target> +<source>Delete Items</source> +<target>מחק פריטי×</target> -<source>Synchronization settings</source> -<target>הגדרות ×¡× ×›×¨×•×Ÿ</target> +<source>Global Settings</source> +<target>הגדרות גלובליות</target> -<source>Delete</source> -<target>מחק</target> +<source>Select Time Span</source> +<target>בחר טווח זמן</target> -<source>Configure filter</source> -<target>תצורת ×ž×¡× ×Ÿ</target> - -<source>Select time span</source> -<target>בחר ×ª×—×•× ×–×ž×Ÿ</target> - -<source>Folder pairs</source> -<target>זוגות מחיצות</target> +<source>Folder Pairs</source> +<target>זוגות תיקיות</target> <source>Find</source> <target>חפש</target> @@ -1026,14 +1039,14 @@ Note: File paths must be relative to base directories. <source>Configuration</source> <target>תצורה</target> -<source>Main bar</source> +<source>Main Bar</source> <target>סרגל ר×שי</target> -<source>Filter files</source> -<target>קבצי ×”×ž×¡× ×Ÿ</target> +<source>Filter Files</source> +<target>×¡× ×Ÿ קבצי×</target> -<source>Select view</source> -<target>בחר תצוגה</target> +<source>Select View</source> +<target>בחר מבט</target> <source>Open...</source> <target>פתח...</target> @@ -1044,8 +1057,17 @@ Note: File paths must be relative to base directories. <source>Compare both sides</source> <target>השווה בין ×©× ×™ הצדדי×</target> +<source>Comparison settings</source> +<target>הגדרות השוו××”</target> + +<source>Synchronization settings</source> +<target>הגדרות ×¡× ×›×¨×•×Ÿ</target> + +<source>Start synchronization</source> +<target>התחל ×¡× ×›×¨×•×Ÿ</target> + <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> @@ -1104,6 +1126,9 @@ Note: File paths must be relative to base directories. <source>Include temporarily</source> <target>כלול ×–×ž× ×™×ª</target> +<source>Delete</source> +<target>מחק</target> + <source>Include all</source> <target>הכלל הכל</target> @@ -1152,6 +1177,9 @@ Note: File paths must be relative to base directories. <source>Never save &changes</source> <target>×œ× ×œ×©×ž×•×¨ ×©×™× ×•×™×™× ×œ&עול×</target> +<source>Filter</source> +<target>×ž×¡× ×Ÿ</target> + <source>Show files that exist on left side only</source> <target>הר××” ×§×‘×¦×™× ×”× ×ž×¦××™× ×ך ורק בצד ימין</target> @@ -1197,12 +1225,15 @@ Note: File paths must be relative to base directories. <source>Set as default</source> <target>הגדר כברירת מחדל</target> -<source>Operation aborted</source> -<target>הפעולה בוטלה</target> - <source>All folders are in sync</source> <target>כל התיקיות ×ž×¡×•× ×›×¨× ×•×ª</target> +<source>Synchronization Settings</source> +<target>הגדרות ×¡× ×›×¨×•×Ÿ</target> + +<source>Comparison Settings</source> +<target>הגדרות השוו××”</target> + <source>Cannot find %x</source> <target>×œ× ×ž×•×¦× %x</target> @@ -1215,30 +1246,6 @@ Note: File paths must be relative to base directories. <source>Searching for program updates...</source> <target>מחפש ×¢×™×“×›×•× ×™ ×ª×•×›× ×”...</target> -<source>&Ignore subsequent errors</source> -<target>&×”×ª×¢×œ× ×ž×זהרות × ×•×¡×¤×•×ª</target> - -<source>&Ignore</source> -<target>&התעל×</target> - -<source>Fatal Error</source> -<target>שגי××” פטלית</target> - -<source>&Don't show this warning again</source> -<target>&×œ× ×œ×”×¨×ות ×זהרה זו שוב</target> - -<source>&Switch</source> -<target>&החלפה</target> - -<source>Question</source> -<target>ש×לה</target> - -<source>&Yes</source> -<target>&כן</target> - -<source>&No</source> -<target>&ל×</target> - <source>Scanning...</source> <target>סורק...</target> @@ -1248,14 +1255,20 @@ Note: File paths must be relative to base directories. <source>Info</source> <target>מידע</target> +<source>Warning</source> +<target>×זהרה</target> + +<source>Serious Error</source> +<target>שגי××” חמורה</target> + <source>Paused</source> <target>עצור</target> <source>Initializing...</source> <target>מ×תחל ...</target> -<source>Aborted</source> -<target>הופסק</target> +<source>Stopped</source> +<target>× ×¢×¦×¨</target> <source>Completed</source> <target>הושל×</target> @@ -1266,9 +1279,6 @@ Note: File paths must be relative to base directories. <source>Log</source> <target>יומן</target> -<source>Inactive</source> -<target>בלתי פעיל</target> - <source>Today</source> <target>היו×</target> @@ -1293,9 +1303,6 @@ Note: File paths must be relative to base directories. <source>MB</source> <target>מגה-בייט</target> -<source>Filter</source> -<target>×ž×¡× ×Ÿ</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1312,9 @@ Note: File paths must be relative to base directories. <pluralform>×”×× ×‘×מת ×‘×¨×¦×•× ×š להעביר ×ת ×”×¤×¨×™×˜×™× ×”×‘××™× %x לסל המחזור?</pluralform> </target> +<source>Move</source> +<target>העבר</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1324,9 @@ Note: File paths must be relative to base directories. <pluralform>×”×× ×‘×¨×¦×•× ×š למחוק ×ת ×”×¤×¨×™×˜×™× %x הב××™×?</pluralform> </target> +<source>Exclude</source> +<target>×ל תכלול</target> + <source>Direct</source> <target>כוון</target> @@ -1338,8 +1351,8 @@ Note: File paths must be relative to base directories. <source>- Other side's counterpart to %item_folder%</source> <target>הצד ×”×©× ×™ המקביל ל %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>להפוך די××œ×•×’×™× ×ž×•×¡×ª×¨×™× ×•×זהרות ×œ×’×œ×•×™×™× ×©×•×‘?</target> +<source>Restore all hidden windows and warnings?</source> +<target>×”×× ×œ×©×—×–×¨ ×ת כל ×”×—×œ×•× ×•×ª וההודעות ×”× ×¡×ª×¨×•×ª?</target> <source>Leave as unresolved conflict</source> <target>הש×ר ×›×§×•× ×¤×œ×™×§×˜ ×œ× ×ž×˜×•×¤×œ</target> @@ -1371,6 +1384,24 @@ Note: File paths must be relative to base directories. <source>Percentage</source> <target>×חוז</target> +<source>&Ignore subsequent errors</source> +<target>&×”×ª×¢×œ× ×ž×זהרות × ×•×¡×¤×•×ª</target> + +<source>&Ignore</source> +<target>&התעל×</target> + +<source>&Don't show this warning again</source> +<target>&×œ× ×œ×”×¨×ות ×זהרה זו שוב</target> + +<source>&Switch</source> +<target>&החלפה</target> + +<source>&Yes</source> +<target>&כן</target> + +<source>&No</source> +<target>&ל×</target> + <source>Cannot monitor directory %x.</source> <target>×œ× ×™×›×•×œ ×œ× ×˜×¨ מחיצה %x.</target> @@ -1464,14 +1495,14 @@ Note: File paths must be relative to base directories. <pluralform>%x ימי×</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>× ×›×©×œ × ×¡×™×•×Ÿ ×œ×”×§×©× ×œ×§×‘×œ×ª הודעות מערכת.</target> +<source>Unable to register to receive system messages.</source> +<target>×œ× × ×™×ª×Ÿ ×œ×”×¨×©× ×œ×§×‘×œ×ª הודעות מערכת.</target> <source>Cannot set privilege %x.</source> <target>×œ× ×™×›×•×œ להגדיר זבות %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>× ×›×©×œ × ×¡×™×•×Ÿ להשעות מצב ×©×™× ×” של המערכת.</target> +<source>Unable to suspend system sleep mode.</source> +<target>×œ× × ×™×ª×Ÿ להשעות מצב ×©×™× ×” של המערכת.</target> <source>Cannot change process I/O priorities.</source> <target>×œ× ×™×›×•×œ ×œ×©× ×•×ª קדימויות של תהליך קלט פלט.</target> diff --git a/BUILD/Languages/hungarian.lng b/BUILD/Languages/hungarian.lng index 8061b8bf..f7057811 100644 --- a/BUILD/Languages/hungarian.lng +++ b/BUILD/Languages/hungarian.lng @@ -2,13 +2,26 @@ <language>Magyar</language> <translator>szittner</translator> <locale>hu_HU</locale> - <flag_image>flag_hungary.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_hungary.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> -<target>Mindkét oldal megváltozott az utolsó szikronizálás óta.</target> +<target>Mindkét oldal megváltozott az utolsó szinkronizálás óta.</target> <source>Cannot determine sync-direction:</source> <target>Nem meghatározható a szinkronizálás iránya:</target> @@ -44,10 +57,10 @@ <target>%x szimbolikus hivatkozás törlése</target> <source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source> -<target>A Lomtár nem elérhetÅ‘ a következÅ‘ könytárak esetében. A fájlok ezért véglegesen törlÅ‘dnek:</target> +<target>A Lomtár nem elérhetÅ‘ a következÅ‘ könyvtárak esetében. A fájlok ezért véglegesen törlÅ‘dnek:</target> <source>An exception occurred</source> -<target>Kivétel történt</target> +<target>Kivétel lépett fel</target> <source>A directory path is expected after %x.</source> <target>%x után egy könyvtár elérési útvonalának kell következnie.</target> @@ -58,9 +71,6 @@ <source>Cannot open file %x.</source> <target>%x fájl nem nyitható.</target> -<source>Error</source> -<target>Hiba</target> - <source>File %x does not contain a valid configuration.</source> <target>%x fájl nem tartalmaz érvényes beállÃtásokat.</target> @@ -70,12 +80,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>A konfigurációs fájl nem tartalmazhat beállÃtásokat könyvár-pár szinten, ha a könyvtárakat parancssorban állÃtjuk be.</target> -<source>Warning</source> -<target>Figyelmeztetés</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>A könyvtárakat nem lehet egynél több konfigurációs fájlra beállÃtani</target> +<source>Command line</source> +<target>Parancssor</target> + <source>Syntax:</source> <target>Szintaxis:</target> @@ -91,9 +101,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>TetszÅ‘leges számú alternatÃv könyvtár legfeljebb egy konfigurációs fájlhoz</target> -<source>Command line</source> -<target>Parancssor</target> - <source>A folder input field is empty.</source> <target>A könyvtár beviteli mezÅ‘ üres.</target> @@ -107,7 +114,7 @@ <target>Figyelmen kÃvül hagyhatod ezt a hibát, ezzel üresnek tekintve minden egyes könyvtárat. A könytárak ekkor automatikusan létrejönnek a szinkronizálás folyamán.</target> <source>The following folders have dependent paths. Be careful when setting up synchronization rules:</source> -<target>A következÅ‘ könytárak egymástól függÅ‘ útvonalat tartalmaznak. Légy óvatos a szinkronizálás szabályainak meghatározásánál!</target> +<target>A következÅ‘ könyvtárak egymástól függÅ‘ útvonalat tartalmaznak. Légy óvatos a szinkronizálás szabályainak meghatározásánál!</target> <source>File %x has an invalid date.</source> <target>%x fájl dátuma érvénytelen.</target> @@ -292,8 +299,8 @@ <source>/sec</source> <target>/másodperc</target> -<source>%x items</source> -<target>%x elem</target> +<source>%x items/sec</source> +<target>%x elem/másodperc</target> <source>Configuration file %x loaded partially only.</source> <target>%x konfigurációs fájl csak részlegesen töltÅ‘dött be: .</target> @@ -322,11 +329,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>%x kötet név nem része a(z) %y fájl elérési útvonalnak</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>MegszakÃtást igényelt: Várakozás a folyamatban lévÅ‘ művelet befejezésére...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Megállás szükséges: várakozás a jelenlegi művelet befejezésére...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Nem sikerült a verziókövetéshez szükséges idÅ‘bélyeg létrehozása:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Nem sikerült idÅ‘bélyeget generálni a verziókövetéshez</target> <source>Cannot read the following XML elements:</source> <target>Nem sikerült a következÅ‘ XML elemek olvasása:</target> @@ -343,8 +350,8 @@ <source>&Program</source> <target>&Program</target> -<source>&Content</source> -<target>&Tartalom</target> +<source>&View help</source> +<target>&Nézd meg a súgót</target> <source>&About</source> <target>&A programról</target> @@ -365,10 +372,10 @@ <target>3. Nyomd meg a Start gombot.</target> <source>To get started just import a .ffs_batch file.</source> -<target>Az induláshoz importálj be egy .ffs_batch fájlt.</target> +<target>Az induláshoz importálj egy .ffs_batch fájlt.</target> -<source>Folders to watch</source> -<target>FigyelendÅ‘ könyvtárak</target> +<source>Folders to watch:</source> +<target>FigyelendÅ‘ könyvtárak:</target> <source>Add folder</source> <target>Könyvtárat hozzáad</target> @@ -382,12 +389,15 @@ <source>Select a folder</source> <target>Könyvtárat kiválaszt</target> -<source>Idle time [seconds]</source> -<target>Ãœresjárat (másodpercben)</target> +<source>Idle time (in seconds):</source> +<target>Ãœresjárat idÅ‘tartama (másodperc):</target> <source>Idle time between last detected change and execution of command</source> <target>Ãœresjárat idÅ‘tartama az utolsó változás észlelése és a parancs végrehajtása között</target> +<source>Command line:</source> +<target>Parancssor:</target> + <source> The command is triggered if: - files or subfolders change @@ -399,8 +409,8 @@ A parancs végrehajtódik, ha: - új könyvtárak jelennek meg (pl. USB-kulcs csatlakoztatása) </target> -<source>Start</source> -<target>IndÃtás</target> +<source>&Start</source> +<target>&Start</target> <source>&Retry</source> <target>&Ismét</target> @@ -408,24 +418,27 @@ A parancs végrehajtódik, ha: <source>Cancel</source> <target>Mégsem</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>Valós idejű - Automatikus szinkronizálás</target> +<source>About</source> +<target>A programról</target> <source>Build: %x</source> <target>Build: %x</target> -<source>About</source> -<target>A programról</target> - <source>All files</source> <target>Összes fájl</target> +<source>Automated Synchronization</source> +<target>Automatizált szinkronizálás</target> + <source>Directory monitoring active</source> -<target>A könytár figyelés aktÃv</target> +<target>A könyvtár figyelés aktÃv</target> <source>Waiting until all directories are available...</source> <target>Várakozik, amÃg az összes könyvtár elérhetÅ‘vé válik...</target> +<source>Error</source> +<target>Hiba</target> + <source>&Restore</source> <target>&VisszaállÃt</target> @@ -435,8 +448,8 @@ A parancs végrehajtódik, ha: <source>&Exit</source> <target>&Kilép</target> -<source>Invalid command line:</source> -<target>Érvénytelen parancssor:</target> +<source>Incorrect command line:</source> +<target>Hibás parancssor:</target> <source>File content</source> <target>Fájl tartalma</target> @@ -496,10 +509,10 @@ A parancs végrehajtódik, ha: <target>%x célkönyvtár már létezik.</target> <source>Target folder input field must not be empty.</source> -<target>A célkönytárat meghatározó beviteli mezÅ‘ nem lehet üres.</target> +<target>A célkönyvtárat meghatározó beviteli mezÅ‘ nem lehet üres.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>A verziókövetéshez a könytárat meghatározó beviteli mezÅ‘ nem lehet üres.</target> +<source>Please enter a target folder for versioning.</source> +<target>Adja meg a célkönyvtárat a verziókövetéshez.</target> <source>Source folder %x not found.</source> <target>%x forráskönyvtár nem található .</target> @@ -523,13 +536,13 @@ A parancs végrehajtódik, ha: <target>Egy olyan könyvtár kerül módosÃtásra, amely több könyvtár-pár része. Kérjük, ellenÅ‘rizze a szinkronizálási beállÃtásokat.</target> <source>Synchronizing folder pair:</source> -<target>A szinkronizált könytár-pár:</target> +<target>A szinkronizált könyvtár-pár:</target> <source>Generating database...</source> <target>Adatbázis generálása...</target> <source>Creating a Volume Shadow Copy for %x...</source> -<target>KészÃt egy ányékmásolat-kötetet %x számára</target> +<target>KészÃt egy árnyékmásolat-kötetet %x számára</target> <source>Data verification error: %x and %y have different content.</source> <target>Adat-ellenÅ‘rzési hiba: %x és %y tartalma különbözÅ‘.</target> @@ -537,8 +550,8 @@ A parancs végrehajtódik, ha: <source>job name</source> <target>feladat neve</target> -<source>Synchronization aborted</source> -<target>A szinkronizálás megszakÃtva</target> +<source>Synchronization stopped</source> +<target>Szinkronizálás leállÃtva</target> <source>Synchronization completed with errors</source> <target>A szinkronizálás befejezÅ‘dött, de történtek hibák</target> @@ -555,14 +568,14 @@ A parancs végrehajtódik, ha: <source>Saving log file %x...</source> <target>Naplófájl mentése a következÅ‘ fájlba: %x.</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Nyomd meg az "Váltás" gombot az események kezeléséhez a FreeFileSync fÅ‘ párbeszédablakában.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>E jelenség megoldásához kapcsoljon át a FreeFileSync fÅ‘ ablakába.</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Váltás a FreeFileSync fÅ‘ párbeszéd-ablakára</target> +<source>Switching to FreeFileSync's main window</source> +<target>Ãtkapcsolás a FreeFileSync fÅ‘ ablakába</target> -<source>Retrying operation after error:</source> -<target>Újrapróbálja a műveletet a hiba után:</target> +<source>Check for Program Updates</source> +<target>Program-frissÃtések ellenÅ‘rzése</target> <source>A new version of FreeFileSync is available:</source> <target>ElérhetÅ‘ a FreeFileSync új verziója:</target> @@ -570,18 +583,12 @@ A parancs végrehajtódik, ha: <source>Download now?</source> <target>Letöltsem most?</target> -<source>New version found</source> -<target>Új verziót találtam</target> - <source>&Download</source> <target>&Letölt</target> <source>FreeFileSync is up to date.</source> <target>A FreeFileSync naprakész.</target> -<source>Information</source> -<target>Információ</target> - <source>Unable to connect to sourceforge.net.</source> <target>Nem sikerült a csatlakozás a sourceforge.net-hez.</target> @@ -639,20 +646,20 @@ A parancs végrehajtódik, ha: <source>Hibernate</source> <target>Hibernál</target> -<source>Selected variant:</source> -<target>Kiválasztott változat:</target> +<source>Alternate comparison settings</source> +<target>Megváltoztatja az összehasonlÃtási beállÃtásokat</target> -<source>Select alternate comparison settings</source> -<target>Válassz más összehasonlÃtási beállÃtásokat</target> +<source>Alternate synchronization settings</source> +<target>Megváltoztatja a szinkronizálási beállÃtásokat</target> -<source>Select alternate synchronization settings</source> -<target>Válassz más szinkronizálási beállÃtásokat</target> +<source>Local filter</source> +<target>Helyi szűrÅ‘</target> -<source>Filter is active</source> -<target>A szűrÅ‘ aktÃv</target> +<source>Active</source> +<target>AktÃv</target> -<source>No filter selected</source> -<target>Nincs kiválasztott szűrÅ‘</target> +<source>None</source> +<target>Egyik sem</target> <source>Remove alternate settings</source> <target>Törölje a módosÃtott beállÃtásokat</target> @@ -666,6 +673,15 @@ A parancs végrehajtódik, ha: <source>Paste</source> <target>Beilleszt</target> +<source>Alternate Comparison Settings</source> +<target>Megváltoztatja az összehasonlÃtási beállÃtásokat</target> + +<source>Alternate Synchronization Settings</source> +<target>Megváltoztatja a szinkronizálási beállÃtásokat</target> + +<source>Local Filter</source> +<target>Helyi szűrÅ‘</target> + <source>&New</source> <target>&Új</target> @@ -681,15 +697,18 @@ A parancs végrehajtódik, ha: <source>2. &Synchronize</source> <target>2. &Szinkronizál</target> +<source>&Global settings</source> +<target>&Globális beállÃtások</target> + <source>&Language</source> <target>&Nyelv</target> +<source>&Find...</source> +<target>Ke&res...</target> + <source>&Export file list...</source> <target>&Exportálja a fájllistát...</target> -<source>&Global settings</source> -<target>&Globális beállÃtások</target> - <source>&Tools</source> <target>Es&zközök</target> @@ -699,18 +718,12 @@ A parancs végrehajtódik, ha: <source>Check &automatically once a week</source> <target>&Automatikus ellenÅ‘rzés hetente</target> -<source>Check for new &version</source> -<target>Vizsgál&ja meg, létezik-e új verzió</target> +<source>&Check for new version</source> +<target>&Új verzió keresése</target> <source>Compare</source> <target>ÖsszehasonlÃt</target> -<source>Comparison settings</source> -<target>ÖsszehasonlÃtási beállÃtások</target> - -<source>Synchronization settings</source> -<target>Szinkronizálási beállÃtások</target> - <source>Synchronize</source> <target>Szinkronizál</target> @@ -723,6 +736,15 @@ A parancs végrehajtódik, ha: <source>Swap sides</source> <target>Cserélje fel az oldalakat</target> +<source>Close search bar</source> +<target>Zárja be a keresési sávot</target> + +<source>Find:</source> +<target>Keres:</target> + +<source>Match case</source> +<target>Kis-/nagybetű megkülönböztetése</target> + <source>Save as batch job</source> <target>Mentse kötegelt feladatként</target> @@ -744,74 +766,20 @@ A parancs végrehajtódik, ha: <source>Total bytes to copy</source> <target>Összesen másolandó bájtok</target> -<source>Items found:</source> -<target>Talált elemek száma:</target> +<source>Select a variant:</source> +<target>Válasszon egy változatot:</target> -<source>Speed:</source> -<target>Sebesség:</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>MódosÃtási idÅ‘ és méret összehasonlÃtása alapján azonosÃtsa az azonos fájlokat.</target> -<source>Time remaining:</source> -<target>HátralévÅ‘ idÅ‘:</target> +<source>Identify equal files by comparing the file content.</source> +<target>Tartalom összehasonlÃtása alapján azonosÃtsa az azonos fájlokat.</target> -<source>Time elapsed:</source> -<target>Eltelt idÅ‘:</target> - -<source>Synchronizing...</source> -<target>Szinkronizálás folyamatban...</target> +<source>Symbolic links:</source> +<target>Szimbolikus linkek:</target> -<source>Minimize to notification area</source> -<target>Minimalizálja a figyelmeztetési területre</target> - -<source>On completion</source> -<target>Befejezés esetén</target> - -<source>Close</source> -<target>Bezár</target> - -<source>&Pause</source> -<target>&Várakozás</target> - -<source>Variant</source> -<target>Variáns</target> - -<source>Statistics</source> -<target>Statisztika</target> - -<source>&Don't show this dialog again</source> -<target>&Ne mutassa ismételten ezt a párbeszédablakot</target> - -<source>Select a variant</source> -<target>Válassz egy variánst</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -A fájlokat egyezÅ‘nek tekintjük, ha - - az utolsó módosÃtásuk (Ãrásuk) dátuma és idÅ‘pontja, valamint - - a fájlméret -megegyezik -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -A fájlokat egyezÅ‘nek tekintjük, ha - - a fájlok tartalma -megegyezik -</target> - -<source>Symbolic Link handling</source> -<target>Szimbolikus hivatkozás kezelése</target> - -<source>Help</source> -<target>Súgó</target> +<source>More information</source> +<target>További információ</target> <source>OK</source> <target>OK</target> @@ -819,11 +787,11 @@ megegyezik <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Változások keresése és bemutatása mindkét oldalon. A törléseket, mozgatásokat és ütközéseket automatikusan ismeri fel egy adatbázis segÃtségével.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>A bal oldali könyvtár tükörmásolata. A jobb oldali könyvtárat úgy változtatja meg, hogy a szinkronizálás után pontosan egyezzen a bal oldalival.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>KészÃtse el a bal oldali könyvtár egy tükör-másolatát, amely pontosan megegyezik a jobb oldali könyvtárral a szinkronizálás után.</target> -<source>Copy new or updated files to right folder.</source> -<target>Másolja az új vagy frissÃtett fájlokat a jobb oldali könyvtárba.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Másolja az új és módosult fájlokat a jobb oldali könyvtárba.</target> <source>Configure your own synchronization rules.</source> <target>ÃllÃtsd be a saját szinkronizálási szabályaidat</target> @@ -834,23 +802,8 @@ megegyezik <source>Requires database files. Not supported by all file systems.</source> <target>Adatbázis fájlok szükségesek. Nem minden fájlrendszer támogatja.</target> -<source>Error handling</source> -<target>Hibakezelés</target> - -<source>Ignore</source> -<target>Figyelmen kÃvül hagy</target> - -<source>Hide all error and warning messages</source> -<target>Rejtse el az összes hibaüzenetet és figyelmeztetést</target> - -<source>Pop-up</source> -<target>Párbeszédablak</target> - -<source>Show pop-up on errors or warnings</source> -<target>Hiba vagy figyelmeztetés esetén mutasson párbeszédablakot</target> - -<source>Deletion handling</source> -<target>Törlés kezelése</target> +<source>Delete files:</source> +<target>Törölje a következÅ‘ fájlokat:</target> <source>Permanent</source> <target>Ãllandó</target> @@ -873,56 +826,89 @@ megegyezik <source>Naming convention:</source> <target>Elnevezési konvenció:</target> -<source>Batch job</source> -<target>Kötegelt feladat</target> +<source>Show examples</source> +<target>Mutasson példákat</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Készitsen egy parancsfájlt a felügyelet nélküli szinkronizáláshoz. Az indÃtáshoz kattintson kétszer erre a fájlra vagy ütemezze a feladat-tervezÅ‘ben: %x</target> +<source>Handle errors:</source> +<target>A következÅ‘ hibák kezelése:</target> -<source>Exit</source> -<target>Kilép</target> +<source>Ignore</source> +<target>Figyelmen kÃvül hagy</target> -<source>Abort synchronization on first error</source> -<target>ÃllÃtsa le a szinkronizálást az elsÅ‘ hibánál</target> +<source>Hide all error and warning messages</source> +<target>Rejtse el az összes hibaüzenetet és figyelmeztetést</target> -<source>Show progress dialog</source> -<target>Mutassa a folyamatjelzÅ‘ párbeszédablakot</target> +<source>Pop-up</source> +<target>Párbeszédablak</target> + +<source>Show pop-up on errors or warnings</source> +<target>Hiba vagy figyelmeztetés esetén mutasson párbeszédablakot</target> -<source>Save log</source> -<target>Mentssa a naplófájlt</target> +<source>On completion:</source> +<target>Végrehajtás alatt:</target> -<source>Select folder to save log files</source> -<target>Válaszd ki a naplófájlok mentésére szolgáló könytárat</target> +<source>Start synchronization now?</source> +<target>Megkezdje a szinkronizálást?</target> -<source>Limit</source> -<target>Korlát</target> +<source>Variant:</source> +<target>Variáns:</target> -<source>Limit maximum number of log files</source> -<target>Naplófájlok maximális számának korlátja</target> +<source>Statistics</source> +<target>Statisztika</target> -<source>Source code written in C++ using:</source> -<target>A programot C++-ban fejlesztették a következÅ‘k felhasználásával:</target> +<source>&Don't show this dialog again</source> +<target>&Ne mutassa ismételten ezt a párbeszédablakot</target> -<source>If you like FreeFileSync</source> -<target>Ha szereted a FreeFileSync-et</target> +<source>Items found:</source> +<target>Talált elemek száma:</target> -<source>Donate with PayPal</source> -<target>Támogasd a PayPal segÃtségével</target> +<source>Speed:</source> +<target>Sebesség:</target> -<source>Many thanks for localization:</source> -<target>Köszönet a lokalizációért:</target> +<source>Time remaining:</source> +<target>HátralévÅ‘ idÅ‘:</target> -<source>Feedback and suggestions are welcome</source> -<target>Várjuk a visszajelzéseket és az ötleteket</target> +<source>Time elapsed:</source> +<target>Eltelt idÅ‘:</target> -<source>Homepage</source> -<target>Honlap</target> +<source>Synchronizing...</source> +<target>Szinkronizálás folyamatban...</target> -<source>Email</source> -<target>E-mail</target> +<source>Minimize to notification area</source> +<target>Minimalizálja a figyelmeztetési területre</target> -<source>Published under the GNU General Public License</source> -<target>Közzétéve a GNU General Public License alatt</target> +<source>Close</source> +<target>Bezár</target> + +<source>&Pause</source> +<target>&Várakozás</target> + +<source>Stop</source> +<target>LeállÃt</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>KészÃtsen egy parancsfájlt a felügyelet nélküli szinkronizáláshoz. Az indÃtáshoz kattintson kétszer erre a fájlra vagy ütemezze a feladat-tervezÅ‘ben: %x</target> + +<source>Stop synchronization at first error</source> +<target>ÃllÃtsa le a szinkronizálást az elsÅ‘ hibánál</target> + +<source>Show progress dialog</source> +<target>Mutassa a folyamatjelzÅ‘ párbeszédablakot</target> + +<source>Save log:</source> +<target>Mentse a következÅ‘ napló-fájlt:</target> + +<source>Limit:</source> +<target>Határérték:</target> + +<source>Limit maximum number of log files</source> +<target>Naplófájlok maximális számának korlátja</target> + +<source>How can I schedule a batch job?</source> +<target>Hogyan tudok kötegelt feldolgozást ütemezni?</target> + +<source>&Recycle bin</source> +<target>Lomtá&r</target> <source>Delete on both sides</source> <target>Törlés mindkét oldalon</target> @@ -930,109 +916,142 @@ megegyezik <source>Delete on both sides even if the file is selected on one side only</source> <target>Törlés mindkét oldalon, még akkor is, ha a fájl csak az egyik oldalon lett kijelölve</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -A fájlokat csak akkor szinkronizálja, ha azok valamennyi szűrÅ‘feltételnek megfelelnek. -Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Meghatározott fájlok szinkronizálásból történÅ‘ kizárásához válasszon szűrÅ‘t. Az útvonalakat a megfelelÅ‘ könyvtár-párjaikhoz viszonyÃtva adja meg.</target> -<source>Include</source> -<target>Csatol</target> +<source>Include:</source> +<target>Bevonva:</target> -<source>Exclude</source> -<target>Kizár</target> +<source>Exclude:</source> +<target>Kizárva:</target> -<source>Time span</source> -<target>IdÅ‘tartam</target> +<source>Time span:</source> +<target>IdÅ‘sáv (idÅ‘tartam):</target> -<source>File size</source> -<target>Fájlméret</target> +<source>File size:</source> +<target>Fájl méret:</target> -<source>Minimum</source> -<target>Minimum</target> +<source>Minimum:</source> +<target>Minimum:</target> -<source>Maximum</source> -<target>Maximum</target> +<source>Maximum:</source> +<target>Maximum:</target> <source>&Clear</source> <target>&Töröl</target> -<source>Global settings</source> -<target>Globális beállÃtások</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>A következÅ‘ beállÃtások minden szinkronizálási feladatnál használja.</target> <source>Fail-safe file copy</source> <target>Hibamentes fájlmásolás</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Másolja elÅ‘ször egy ideiglenes fájlba (*.ffs_tmp) aztán nevezze át. Ez garantálja a konzisztents állapotot végzetes hibák esetén is.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Másolja elÅ‘ször egy ideiglenes fájlba (*.ffs_tmp) mielÅ‘tt felülÃrja a célállományt. +Ez garantálja a konzisztens állapotot egy komoly hiba esetén is. +</target> + +<source>(recommended)</source> +<target>(ajánlott)</target> <source>Copy locked files</source> <target>Másolja a zárolt fájlokat</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>A megosztott és zárolt fájlokat a kötet-árnyékmásolat szolgáltatás használatával másolja(adminisztrátori jogosultság szükséges)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Megosztott vagy zárolt fájlok másolása a Kötet-árnyékmásolat szolgáltatás használatával.</target> + +<source>(requires administrator rights)</source> +<target>(rendszergazdai jogosultság szükséges)</target> <source>Copy file access permissions</source> <target>Másolja a fájl hozzáférési jogosultságokat</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>ÖrökÃtse át a fájl és könyvtár jogosultságokat (adminisztrátori jogosultság szükséges)</target> +<source>Transfer file and folder permissions.</source> +<target>Vigye át a fájl és könyvtár jogosultságokat.</target> -<source>Restore hidden dialogs</source> -<target>ÃllÃtsa vissza a rejtett párbeszédablakokat</target> +<source>Automatic retry on error:</source> +<target>Automatikus visszatérés a következÅ‘ hibánál:</target> -<source>External applications</source> -<target>KülsÅ‘ alkalmazások</target> +<source>Retry count:</source> +<target>Visszatérések száma:</target> + +<source>Delay (in seconds):</source> +<target>Késedelem (másodpercben):</target> + +<source>Customize context menu:</source> +<target>Környezeti menü testreszabása:</target> <source>Description</source> <target>LeÃrás</target> +<source>Restore hidden windows</source> +<target>ÃllÃtsa vissza a rejtett ablakokat</target> + <source>&Default</source> <target>&Alapértelmezett</target> -<source>Find what:</source> -<target>Mit keres:</target> +<source>Source code written in C++ using:</source> +<target>A programot C++-ban fejlesztették a következÅ‘k felhasználásával:</target> -<source>Match case</source> -<target>Kis-/nagybetű megkülönböztetése</target> +<source>If you like FreeFileSync</source> +<target>Ha szereted a FreeFileSync-et</target> -<source>&Find next</source> -<target>&Keresse a következÅ‘t</target> +<source>Donate with PayPal</source> +<target>Támogasd a PayPal segÃtségével</target> -<source>Start synchronization</source> -<target>IndÃtja a szinkronizálást</target> +<source>Feedback and suggestions are welcome</source> +<target>Várjuk a visszajelzéseket és az ötleteket</target> -<source>Delete</source> -<target>Töröl</target> +<source>Homepage</source> +<target>Honlap</target> + +<source>Email</source> +<target>E-mail</target> -<source>Configure filter</source> -<target>BeállÃtja a szűrÅ‘t</target> +<source>Published under the GNU General Public License</source> +<target>Közzétéve a GNU General Public License alatt</target> -<source>Find</source> -<target>Keres:</target> +<source>Many thanks for localization:</source> +<target>Köszönet a lokalizációért:</target> + +<source>Save as Batch Job</source> +<target>Mentse kötegelt feladatként</target> -<source>Select time span</source> -<target>Kiválasztja az idÅ‘intervallumot</target> +<source>Delete Items</source> +<target>Törölje az elemeket</target> -<source>Folder pairs</source> +<source>Global Settings</source> +<target>Globális beállÃtások</target> + +<source>Select Time Span</source> +<target>Válassza ki az idÅ‘sávot (idÅ‘tartamot)</target> + +<source>Serious Error</source> +<target>Komoly hiba</target> + +<source>Folder Pairs</source> <target>Könyvtár-párok</target> +<source>Find</source> +<target>Keres</target> + <source>Overview</source> <target>Ãttekintés</target> <source>Configuration</source> <target>BeállÃtás</target> -<source>Main bar</source> +<source>Main Bar</source> <target>FÅ‘ sáv</target> -<source>Filter files</source> +<source>Filter Files</source> <target>Szűrje a fájlokat</target> -<source>Select view</source> +<source>Select View</source> <target>Válasszon nézetet</target> <source>Open...</source> @@ -1044,8 +1063,20 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>Compare both sides</source> <target>Vesse össze mindkét oldalt</target> +<source>Comparison settings</source> +<target>ÖsszehasonlÃtási beállÃtások</target> + +<source>Synchronization settings</source> +<target>Szinkronizálási beállÃtások</target> + +<source>Start synchronization</source> +<target>IndÃtja a szinkronizálást</target> + +<source>Confirm</source> +<target>Jóváhagy</target> + <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> @@ -1053,8 +1084,8 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <pluralform>Tényleg a végre akarja hajtani a(z) %y parancsot a következÅ‘ %x elemen?</pluralform> </target> -<source>Confirm</source> -<target>Jóváhagy</target> +<source>&Don't show this warning again</source> +<target>&Ne mutassa ismételten ezt a figyelmeztetést</target> <source>&Execute</source> <target>Vé&grehajt</target> @@ -1089,12 +1120,6 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>Set direction:</source> <target>ÃllÃtsa be az irányt:</target> -<source>Exclude temporarily</source> -<target>Zárja ki ideiglenesen</target> - -<source>Include temporarily</source> -<target>Csatolja ideiglenesen</target> - <source>multiple selection</source> <target>többszörös kijelölés</target> @@ -1104,6 +1129,15 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>Exclude via filter:</source> <target>Zárja ki szűrÅ‘ segÃtségével:</target> +<source>Exclude temporarily</source> +<target>Zárja ki ideiglenesen</target> + +<source>Include temporarily</source> +<target>Csatolja ideiglenesen</target> + +<source>Delete</source> +<target>Töröl</target> + <source>Include all</source> <target>Csatolja az összest</target> @@ -1152,6 +1186,9 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>Never save &changes</source> <target>N&e mentse a változásokat</target> +<source>Filter</source> +<target>SzűrÅ‘</target> + <source>Show files that exist on left side only</source> <target>Mutassa a csak a bal oldalon létezÅ‘ fájlokat</target> @@ -1197,12 +1234,18 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>Set as default</source> <target>BeállÃtás alapértelmezettként</target> -<source>Operation aborted</source> -<target>Művelet megszakÃtva</target> - <source>All folders are in sync</source> <target>Minden könyvtár szinkronban</target> +<source>Synchronization Settings</source> +<target>Szinkronizálási beállÃtások</target> + +<source>Comparison Settings</source> +<target>ÖsszehasonlÃtási beállÃtások</target> + +<source>Cannot find %x</source> +<target>Nem található: %x</target> + <source>Comma-separated values</source> <target>VesszÅ‘vel elválasztott értékek (CSV)</target> @@ -1212,30 +1255,6 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>Searching for program updates...</source> <target>ProgramfrissÃtés keresése...</target> -<source>&Ignore subsequent errors</source> -<target>F&igyelmen kÃvül hagyja az utána következÅ‘ hibákat</target> - -<source>&Ignore</source> -<target>&Kihagy</target> - -<source>Fatal Error</source> -<target>Kritikus hiba</target> - -<source>&Don't show this warning again</source> -<target>&Ne mutassa ismételten ezt a figyelmeztetést</target> - -<source>&Switch</source> -<target>&Váltás</target> - -<source>Question</source> -<target>Kérdés</target> - -<source>&Yes</source> -<target>&Igen</target> - -<source>&No</source> -<target>&Nem</target> - <source>Scanning...</source> <target>Vizsgálat folyamatban...</target> @@ -1245,14 +1264,17 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>Info</source> <target>Információ</target> +<source>Warning</source> +<target>Figyelmeztetés</target> + <source>Paused</source> <target>MegállÃtva</target> <source>Initializing...</source> <target>Inicializálás...</target> -<source>Aborted</source> -<target>MegszakÃtva</target> +<source>Stopped</source> +<target>LeállÃtva</target> <source>Completed</source> <target>BefejezÅ‘dött</target> @@ -1263,23 +1285,17 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>Log</source> <target>Napló</target> -<source>Cannot find %x</source> -<target>Nem található: %x</target> - -<source>Inactive</source> -<target>InaktÃv</target> - <source>Today</source> <target>Mai</target> <source>This week</source> -<target>Eheti</target> +<target>E heti</target> <source>This month</source> -<target>Ehavi</target> +<target>E havi</target> <source>This year</source> -<target>Ezévi</target> +<target>Ez évi</target> <source>Last x days</source> <target>Utolsó x nap</target> @@ -1293,9 +1309,6 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>SzűrÅ‘</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1318,9 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <pluralform>Tényleg a Lomtárba akarja áthelyezni a következÅ‘ %x elemet?</pluralform> </target> +<source>Move</source> +<target>Mozgat</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1330,9 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <pluralform>Valóban törölni akarod a következÅ‘ %x elemet?</pluralform> </target> +<source>Exclude</source> +<target>Kizár</target> + <source>Direct</source> <target>Közvetlen</target> @@ -1324,7 +1343,7 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <target>Másolja az NTFS jogosultságokat</target> <source>Integrate external applications into context menu. The following macros are available:</source> -<target>Integráljon a helyi menübe külsÅ‘ alkalmazásokat. A következÅ‘ makrók érhetÅ‘k et:</target> +<target>Integráljon a helyi menübe külsÅ‘ alkalmazásokat. A következÅ‘ makrók érhetÅ‘k el:</target> <source>- full file or folder name</source> <target>- teljes fájl- vagy könyvtárnév</target> @@ -1338,8 +1357,8 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>- Other side's counterpart to %item_folder%</source> <target>- A másik oldali megfelelÅ‘jét a következÅ‘ könyvtárba: %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Tegye újra láthatóvá a rejtett figyelmeztetéseket és párbeszédablakokat?</target> +<source>Restore all hidden windows and warnings?</source> +<target>VisszaállÃtsa az összes rejtett ablakot és figyelmeztetést?</target> <source>Leave as unresolved conflict</source> <target>Hagyja feloldatlan ütközésként</target> @@ -1371,6 +1390,21 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <source>Percentage</source> <target>Százalék</target> +<source>&Ignore subsequent errors</source> +<target>F&igyelmen kÃvül hagyja az utána következÅ‘ hibákat</target> + +<source>&Ignore</source> +<target>&Kihagy</target> + +<source>&Switch</source> +<target>&Váltás</target> + +<source>&Yes</source> +<target>&Igen</target> + +<source>&No</source> +<target>&Nem</target> + <source>Cannot monitor directory %x.</source> <target>Nem sikerült monitorozni a(z) %x könyvtárat.</target> @@ -1464,14 +1498,14 @@ Megjegyzés: Az útvonalakat az alapkönyvtárakhoz képest kell megadni. <pluralform>%x nap</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Nem sikerült regisztrálni, hogy megkaphassa a rendszer-üzeneteket</target> +<source>Unable to register to receive system messages.</source> +<target>Nem tud regisztrálni hogy megkapja a rendszerüzeneteket.</target> <source>Cannot set privilege %x.</source> <target>A következÅ‘ privilégium beállÃtása sikertelen: %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Nem sikerült a rendszer alvó üzemmódját felfüggeszteni.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Nem tudta felfüggeszteni a rendszer alvó üzemmódját.</target> <source>Cannot change process I/O priorities.</source> <target>Nem sikerült a folyamatok I/O prioritását megváltoztatni.</target> diff --git a/BUILD/Languages/italian.lng b/BUILD/Languages/italian.lng index 3a3f8e3d..c18c6d30 100644 --- a/BUILD/Languages/italian.lng +++ b/BUILD/Languages/italian.lng @@ -2,11 +2,28 @@ <language>Italiano</language> <translator>Luciano Paravella</translator> <locale>it_IT</locale> - <flag_image>flag_italy.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_italy.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>Retrying operation</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>Entrambi i lati sono cambiati dall'ultima sincronizzazione.</target> @@ -143,10 +160,10 @@ <target>Memoria insufficiente.</target> <source>Item exists on left side only</source> -<target>L'elemento esiste solo sul lato sinistro</target> +<target>L'oggetto esiste solo sul lato sinistro</target> <source>Item exists on right side only</source> -<target>L'elemento esiste solo sul lato destro</target> +<target>L'oggetto esiste solo sul lato destro</target> <source>Left side is newer</source> <target>Il più recente è sul lato sinistro</target> @@ -155,25 +172,25 @@ <target>Il più recente è sul lato destro</target> <source>Items have different content</source> -<target>Gli elementi hanno contenuto differente</target> +<target>Gli oggetti hanno contenuto differente</target> <source>Both sides are equal</source> <target>Entrambi i lati sono uguali</target> <source>Conflict/item cannot be categorized</source> -<target>Conflitto/elemento non categorizzabile</target> +<target>Conflitto/oggetto non categorizzabile</target> <source>Copy new item to left</source> -<target>Copia nuovo elemento a sinistra</target> +<target>Copia nuovo oggetto a sinistra</target> <source>Copy new item to right</source> -<target>Copia nuovo elemento a destra</target> +<target>Copia nuovo oggetto a destra</target> <source>Delete left item</source> -<target>Elimina elemento di sinistra</target> +<target>Elimina oggetto di sinistra</target> <source>Delete right item</source> -<target>Elimina elemento di destra</target> +<target>Elimina oggetto di destra</target> <source>Move file on left</source> <target>Sposta il file a sinistra</target> @@ -182,10 +199,10 @@ <target>Sposta il file a destra</target> <source>Overwrite left item</source> -<target>Sovrascrivi elemento di sinistra</target> +<target>Sovrascrivi oggetto di sinistra</target> <source>Overwrite right item</source> -<target>Sovrascrivi elemento di destra</target> +<target>Sovrascrivi oggetto di destra</target> <source>Do nothing</source> <target>Non fare nulla</target> @@ -242,10 +259,10 @@ <target>Creazione file %x</target> <source>Items processed:</source> -<target>Elementi processati:</target> +<target>Oggetti processati:</target> <source>Items remaining:</source> -<target>Elementi rimanenti:</target> +<target>Oggetti rimanenti:</target> <source>Total time:</source> <target>Tempo totale:</target> @@ -292,8 +309,8 @@ <source>/sec</source> <target>/sec</target> -<source>%x items</source> -<target>%x articoli</target> +<source>%x items/sec</source> +<target>%x elementi/sec</target> <source>Configuration file %x loaded partially only.</source> <target>File di configurazione %x caricato solo parzialmente.</target> @@ -322,11 +339,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Nome volume %x non fa parte del percorso del file %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Richiesta interruazione: attendere conclusione dell'operazione...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Bloccata richiesta: Aspettare la fine dell'operazione in corso ...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Errore nella creazione di data e ora per il controllo delle versioni:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Impossibile creare l'ora per la versione:</target> <source>Cannot read the following XML elements:</source> <target>Impossibile leggere i seguenti elementi XML:</target> @@ -343,8 +360,8 @@ <source>&Program</source> <target>&Programma</target> -<source>&Content</source> -<target>&Contenuto</target> +<source>&View help</source> +<target>&Vedere aiuto</target> <source>&About</source> <target>&Informazioni</target> @@ -367,8 +384,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Per iniziare è sufficiente importare un file con estensione .ffs_batch</target> -<source>Folders to watch</source> -<target>Cartelle da controllare</target> +<source>Folders to watch:</source> +<target>Cartelle da guardare:</target> <source>Add folder</source> <target>Aggiungi cartella</target> @@ -382,12 +399,15 @@ <source>Select a folder</source> <target>Seleziona una cartella</target> -<source>Idle time [seconds]</source> -<target>Tempo di attesa [secondi]</target> +<source>Idle time (in seconds):</source> +<target>Tempo di inattività (in secondi):</target> <source>Idle time between last detected change and execution of command</source> <target>Tempo di attesa tra ultimo cambiamento rilevato ed l'esecuzione del comando</target> +<source>Command line:</source> +<target>Riga di comando:</target> + <source> The command is triggered if: - files or subfolders change @@ -399,8 +419,8 @@ Il comando è attivato se: - nuove cartelle vengono aggiunte (es. inserimento di memoria USB) </target> -<source>Start</source> -<target>Avvia</target> +<source>&Start</source> +<target>&Start</target> <source>&Retry</source> <target>&Riprova</target> @@ -408,9 +428,6 @@ Il comando è attivato se: <source>Cancel</source> <target>Annulla</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>SyncTempoReale - Sincronizzazione automatizzata</target> - <source>Build: %x</source> <target>Versione: %x</target> @@ -420,6 +437,9 @@ Il comando è attivato se: <source>All files</source> <target>Tutti i file</target> +<source>Automated Synchronization</source> +<target>Sincronizzazione automatizzata</target> + <source>Directory monitoring active</source> <target>Directory di monitoraggio attiva</target> @@ -435,8 +455,8 @@ Il comando è attivato se: <source>&Exit</source> <target>&Esci</target> -<source>Invalid command line:</source> -<target>Linea di comando non valida:</target> +<source>Incorrect command line:</source> +<target>Linea di comando non corretta:</target> <source>File content</source> <target>Contenuto del file</target> @@ -498,8 +518,8 @@ Il comando è attivato se: <source>Target folder input field must not be empty.</source> <target>Il campo per la cartella di destinazione non può essere vuoto.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Il campo per la cartella di versione non può essere vuoto.</target> +<source>Please enter a target folder for versioning.</source> +<target>Inserisci una cartella di destinazione per il controllo delle versioni.</target> <source>Source folder %x not found.</source> <target>Cartella sorgente %x non trovata.</target> @@ -537,8 +557,8 @@ Il comando è attivato se: <source>job name</source> <target>nome del lavoro</target> -<source>Synchronization aborted</source> -<target>Sincronizzazione abortita</target> +<source>Synchronization stopped</source> +<target>Sincronizzazione fermata</target> <source>Synchronization completed with errors</source> <target>Sincronizzazione completata con errori</target> @@ -555,14 +575,11 @@ Il comando è attivato se: <source>Saving log file %x...</source> <target>Salvataggio file di log %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Premere "Passa" per risolvere i problemi nella finestra principale di FreeFileSync.</target> - -<source>Switching to FreeFileSync main dialog</source> -<target>Passaggio alla finestra di dialogo principale FreeFileSync</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>È possibile passare alla finestra principale di FreeFileSync per risolvere questo problema.</target> -<source>Retrying operation after error:</source> -<target>Ripetere l'operazione dopo l'errore:</target> +<source>Switching to FreeFileSync's main window</source> +<target>Passaggio alla finestra principale di FreeFileSync</target> <source>A new version of FreeFileSync is available:</source> <target>E' disponibile una nuova versione di FreeFileSync:</target> @@ -570,8 +587,8 @@ Il comando è attivato se: <source>Download now?</source> <target>Scaricarla ora?</target> -<source>New version found</source> -<target>Nuova versione trovata</target> +<source>Check for Program Updates</source> +<target>Controlla Aggiornamenti del Programma</target> <source>&Download</source> <target>&Scaricare</target> @@ -639,20 +656,20 @@ Il comando è attivato se: <source>Hibernate</source> <target>Iberna</target> -<source>Selected variant:</source> -<target>Variante selezionata:</target> +<source>Alternate comparison settings</source> +<target>Impostazioni di Confronto Alternativi</target> -<source>Select alternate comparison settings</source> -<target>Seleziona impostazioni di comparazione alternative</target> +<source>Alternate synchronization settings</source> +<target>Impostazioni di Sincronizzazione Alternativi</target> -<source>Select alternate synchronization settings</source> -<target>Seleziona impostazioni di sincronizzazione alternative</target> +<source>Local filter</source> +<target>Filtro Locale</target> -<source>Filter is active</source> -<target>Il filtro e' attivo</target> +<source>Active</source> +<target>Attivo</target> -<source>No filter selected</source> -<target>Nessun filtro selezionato</target> +<source>None</source> +<target>Nessuno</target> <source>Remove alternate settings</source> <target>Rimuovi impostazioni alternative</target> @@ -666,6 +683,15 @@ Il comando è attivato se: <source>Paste</source> <target>Incolla</target> +<source>Alternate Comparison Settings</source> +<target>Impostazioni di Confronto Alternativi</target> + +<source>Alternate Synchronization Settings</source> +<target>Impostazioni di Sincronizzazione Alternativi</target> + +<source>Local Filter</source> +<target>Filtro Locale</target> + <source>&New</source> <target>&Nuovo</target> @@ -681,15 +707,18 @@ Il comando è attivato se: <source>2. &Synchronize</source> <target>2. &Sincronizza</target> +<source>&Global settings</source> +<target>&Preferenze</target> + <source>&Language</source> <target>&Lingua</target> +<source>&Find...</source> +<target>&Trova ...</target> + <source>&Export file list...</source> <target>&Esporta l'elenco dei file...</target> -<source>&Global settings</source> -<target>&Preferenze</target> - <source>&Tools</source> <target>&Strumenti</target> @@ -699,18 +728,12 @@ Il comando è attivato se: <source>Check &automatically once a week</source> <target>Controlla &automaticamente una volta a settimana</target> -<source>Check for new &version</source> -<target>Verificare presenza nuove &versione</target> +<source>&Check for new version</source> +<target>&Controlla nuova versione</target> <source>Compare</source> <target>Compara</target> -<source>Comparison settings</source> -<target>Impostazioni di comparazione</target> - -<source>Synchronization settings</source> -<target>Parametri di sincronizzazione</target> - <source>Synchronize</source> <target>Sincronizza</target> @@ -723,6 +746,15 @@ Il comando è attivato se: <source>Swap sides</source> <target>Inverti i lati</target> +<source>Close search bar</source> +<target>Chiudi barra di ricerca</target> + +<source>Find:</source> +<target>Trova:</target> + +<source>Match case</source> +<target>Corrispondenza</target> + <source>Save as batch job</source> <target>Salva come processo batch</target> @@ -744,74 +776,20 @@ Il comando è attivato se: <source>Total bytes to copy</source> <target>Bytes totali da copiare</target> -<source>Items found:</source> -<target>Elementi trovati:</target> - -<source>Speed:</source> -<target>Velocita':</target> +<source>Select a variant:</source> +<target>Scegli una variante:</target> -<source>Time remaining:</source> -<target>Tempo rimanente:</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Identificare i file uguali confrontando data di modifica e dimensione.</target> -<source>Time elapsed:</source> -<target>Tempo trascorso:</target> +<source>Identify equal files by comparing the file content.</source> +<target>Identificare i file uguali confrontando il contenuto del file.</target> -<source>Synchronizing...</source> -<target>Sincronizzazione...</target> +<source>Symbolic links:</source> +<target>Link simbolici:</target> -<source>Minimize to notification area</source> -<target>Ridurre al minimo l'area di notifica</target> - -<source>On completion</source> -<target>In completamento</target> - -<source>Close</source> -<target>Chiudi</target> - -<source>&Pause</source> -<target>&Pausa</target> - -<source>Variant</source> -<target>Variante</target> - -<source>Statistics</source> -<target>Statistiche</target> - -<source>&Don't show this dialog again</source> -<target>&Non mostrare più questo avviso</target> - -<source>Select a variant</source> -<target>Seleziona una variante</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -I file sono considerati identici se - - data e ora di ultima modifica - - dimensione -sono identici -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -I file sono considerati identici se - - il contenuto -è identico -</target> - -<source>Symbolic Link handling</source> -<target>Gestione Collegamenti</target> - -<source>Help</source> -<target>Aiuto</target> +<source>More information</source> +<target>Maggiori informazioni</target> <source>OK</source> <target>OK</target> @@ -819,11 +797,11 @@ I file sono considerati identici se <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identifica e propaga cambiamenti su entrambi i lati. Cancellazioni, spostamenti e conflitti sono identificati automaticamente usando un database.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Backup a Specchio della cartella di sinistra. La cartella di destra verrà modificata per corrispondere esattamente alla cartella di sinistra dopo la sincronizzazione.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Creare un backup specchio della cartella di sinistra, che corrisponde esattamente alla cartella giusta dopo la sincronizzazione.</target> -<source>Copy new or updated files to right folder.</source> -<target>Copia file nuovi o aggiornati nella cartella di destra.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Copiare i file nuovi e aggiornati nella cartella giusta.</target> <source>Configure your own synchronization rules.</source> <target>Configura le tue regole di sincronizzazione.</target> @@ -834,23 +812,8 @@ I file sono considerati identici se <source>Requires database files. Not supported by all file systems.</source> <target>Richiede il file di database. Non è supportato da tutti i sistemi di file.</target> -<source>Error handling</source> -<target>Gestione degli errori</target> - -<source>Ignore</source> -<target>Ignora</target> - -<source>Hide all error and warning messages</source> -<target>Nascondi tutti gli errori e i messaggi d'avviso</target> - -<source>Pop-up</source> -<target>Pop-up</target> - -<source>Show pop-up on errors or warnings</source> -<target>Mostra popup di errore o avviso</target> - -<source>Deletion handling</source> -<target>Gestione cancellazione</target> +<source>Delete files:</source> +<target>Eliminare i file:</target> <source>Permanent</source> <target>Permanente</target> @@ -873,56 +836,89 @@ I file sono considerati identici se <source>Naming convention:</source> <target>Modalità di rinomina:</target> -<source>Batch job</source> -<target>Attività batch</target> +<source>Show examples</source> +<target>Mostra esempi</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Creare un file batch per la sincronizzazione automatica. Per iniziare, fare doppio clic su questo file o programmarlo in un pianificatore di compiti: %x</target> +<source>Handle errors:</source> +<target>Gestire gli errori:</target> -<source>Exit</source> -<target>Esci</target> +<source>Ignore</source> +<target>Ignora</target> -<source>Abort synchronization on first error</source> -<target>Interrompi sincronizzazione al primo errore</target> +<source>Hide all error and warning messages</source> +<target>Nascondi tutti gli errori e i messaggi d'avviso</target> -<source>Show progress dialog</source> -<target>Mostra stato di avanzamento</target> +<source>Pop-up</source> +<target>Pop-up</target> -<source>Save log</source> -<target>Salva log</target> +<source>Show pop-up on errors or warnings</source> +<target>Mostra popup di errore o avviso</target> -<source>Select folder to save log files</source> -<target>Seleziona cartella dove salvare i file log</target> +<source>On completion:</source> +<target>Al termine:</target> -<source>Limit</source> -<target>Limita</target> +<source>Start synchronization now?</source> +<target>Avviare la sincronizzazione ora?</target> -<source>Limit maximum number of log files</source> -<target>Limita il numero massimo di file log</target> +<source>Variant:</source> +<target>Variante:</target> -<source>Source code written in C++ using:</source> -<target>Codice sorgente scritto in C++ utilizzando:</target> +<source>Statistics</source> +<target>Statistiche</target> -<source>If you like FreeFileSync</source> -<target>Se ti piace FreeFileSync</target> +<source>&Don't show this dialog again</source> +<target>&Non mostrare più questo avviso</target> -<source>Donate with PayPal</source> -<target>Fai una donazione con PayPal</target> +<source>Items found:</source> +<target>Oggetti trovati:</target> -<source>Many thanks for localization:</source> -<target>Ringraziamenti per la localizzazione:</target> +<source>Speed:</source> +<target>Velocita':</target> -<source>Feedback and suggestions are welcome</source> -<target>Ogni commento o suggerimento è ben accetto</target> +<source>Time remaining:</source> +<target>Tempo rimanente:</target> -<source>Homepage</source> -<target>Homepage</target> +<source>Time elapsed:</source> +<target>Tempo trascorso:</target> -<source>Email</source> -<target>Email</target> +<source>Synchronizing...</source> +<target>Sincronizzazione...</target> -<source>Published under the GNU General Public License</source> -<target>Pubblicato sotto licenza GNU General Public</target> +<source>Minimize to notification area</source> +<target>Ridurre al minimo l'area di notifica</target> + +<source>Close</source> +<target>Chiudi</target> + +<source>&Pause</source> +<target>&Pausa</target> + +<source>Stop</source> +<target>Arresto</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Creare un file batch per la sincronizzazione automatica. Per iniziare, fare doppio clic su questo file o programmarlo in un pianificatore di compiti: %x</target> + +<source>Stop synchronization at first error</source> +<target>Interrompere la sincronizzazione al primo errore</target> + +<source>Show progress dialog</source> +<target>Mostra stato di avanzamento</target> + +<source>Save log:</source> +<target>Salva log:</target> + +<source>Limit:</source> +<target>Limite:</target> + +<source>Limit maximum number of log files</source> +<target>Limita il numero massimo di file log</target> + +<source>How can I schedule a batch job?</source> +<target>Come posso programmare un lavoro batch?</target> + +<source>&Recycle bin</source> +<target>&Cestino</target> <source>Delete on both sides</source> <target>Elimina su entrambi i lati</target> @@ -930,95 +926,125 @@ I file sono considerati identici se <source>Delete on both sides even if the file is selected on one side only</source> <target>Elimina su entrambi i lati anche se il file è selezionato su un solo lato.</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -I file verranno sincronizzati solo se passano tutte le regole di filtraggio. -Nota: percorso dei file deve essere relativo alla directory di base. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Selezionare le regole del filtro per escludere alcuni file dalla sincronizzazione. Immettere i percorsi dei file relativi alla loro corrispondente coppia di cartelle.</target> -<source>Include</source> -<target>Includi</target> +<source>Include:</source> +<target>Includi:</target> -<source>Exclude</source> -<target>Escludi</target> +<source>Exclude:</source> +<target>Escludi:</target> -<source>Time span</source> -<target>Intervallo di tempo</target> +<source>Time span:</source> +<target>Intervallo di tempo:</target> -<source>File size</source> -<target>Dimensione file</target> +<source>File size:</source> +<target>Dimensione del file:</target> -<source>Minimum</source> -<target>Minimo</target> +<source>Minimum:</source> +<target>Minimo:</target> -<source>Maximum</source> -<target>Massimo</target> +<source>Maximum:</source> +<target>Massimo:</target> <source>&Clear</source> <target>&Pulisci</target> -<source>Global settings</source> -<target>Preferenze</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Le seguenti impostazioni vengono utilizzate per tutti i processi di sincronizzazione.</target> <source>Fail-safe file copy</source> <target>Copia file di fail-safe</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Copiare prima in un file temporaneo (*.ffs_tmp) poi rinominarlo. Questo garantisce uno stato costante anche in caso di un errore fatale.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Copiare in un file temporaneo ( *.ffs_tmp ) prima di sovrascrivere il bersaglio. +Questo garantisce uno stato costante anche in caso di un errore grave. +</target> + +<source>(recommended)</source> +<target>(consigliato)</target> <source>Copy locked files</source> <target>Copia file bloccati</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Copiare i file condivisi o bloccati usando il Volume Shadow Copy Service (richiede i diritti di amministratore)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Copiare file condivisi o bloccati con il Volume Shadow Copy Service.</target> + +<source>(requires administrator rights)</source> +<target>(richiede i diritti di amministratore)</target> <source>Copy file access permissions</source> <target>Copia permessi di accesso file</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Trasferimento di file e autorizzazioni cartelle (richiede i diritti di amministratore)</target> +<source>Transfer file and folder permissions.</source> +<target>Trasferimento file e autorizzazioni delle cartelle.</target> + +<source>Automatic retry on error:</source> +<target>Tentativo Automaticoin caso di errore:</target> + +<source>Retry count:</source> +<target>Riprova conta:</target> -<source>Restore hidden dialogs</source> -<target>Ripristina i messaggi nascosti</target> +<source>Delay (in seconds):</source> +<target>Ritardo (in secondi):</target> -<source>External applications</source> -<target>Applicazioni esterne</target> +<source>Customize context menu:</source> +<target>Personalizzare menu contestuale:</target> <source>Description</source> <target>Descrizione</target> +<source>Restore hidden windows</source> +<target>Ripristina le finestre nascoste</target> + <source>&Default</source> <target>&Predefinito</target> -<source>Find what:</source> -<target>Trova questo:</target> +<source>Source code written in C++ using:</source> +<target>Codice sorgente scritto in C++ utilizzando:</target> -<source>Match case</source> -<target>Corrispondenza</target> +<source>If you like FreeFileSync</source> +<target>Se ti piace FreeFileSync</target> -<source>&Find next</source> -<target>&Trova successivo</target> +<source>Donate with PayPal</source> +<target>Fai una donazione con PayPal</target> -<source>Start synchronization</source> -<target>Avvia sincronizzazione</target> +<source>Feedback and suggestions are welcome</source> +<target>Ogni commento o suggerimento è ben accetto</target> -<source>Delete</source> -<target>Elimina</target> +<source>Homepage</source> +<target>Homepage</target> -<source>Configure filter</source> -<target>Configurazione dei filtri</target> +<source>Email</source> +<target>Email</target> -<source>Find</source> -<target>Trova</target> +<source>Published under the GNU General Public License</source> +<target>Pubblicato sotto licenza GNU General Public</target> + +<source>Many thanks for localization:</source> +<target>Ringraziamenti per la localizzazione:</target> + +<source>Save as Batch Job</source> +<target>Salva come Processo Batch</target> -<source>Select time span</source> -<target>Seleziona intervallo di tempo</target> +<source>Delete Items</source> +<target>Elimina Elementi</target> -<source>Folder pairs</source> -<target>Coppia di cartelle</target> +<source>Global Settings</source> +<target>Impostazioni Globali</target> + +<source>Select Time Span</source> +<target>Selezionare Intervallo di Tempo</target> + +<source>Folder Pairs</source> +<target>Coppie di Cartelle</target> + +<source>Find</source> +<target>Trova</target> <source>Overview</source> <target>Anteprima</target> @@ -1026,14 +1052,14 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>Configuration</source> <target>Configurazione</target> -<source>Main bar</source> -<target>Barra principale</target> +<source>Main Bar</source> +<target>Barra Principale</target> -<source>Filter files</source> -<target>Filtro dei file</target> +<source>Filter Files</source> +<target>Filtrare i file</target> -<source>Select view</source> -<target>Seleziona vista</target> +<source>Select View</source> +<target>Selezionare Visualizza</target> <source>Open...</source> <target>Apri...</target> @@ -1044,14 +1070,14 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>Compare both sides</source> <target>Confronta entrambi i lati</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Vuoi veramente eseguire il comando %y per 1 articolo?</pluralform> -<pluralform>Vuoi veramente eseguire %y comando per %x articoli?</pluralform> -</target> +<source>Comparison settings</source> +<target>Impostazioni di comparazione</target> + +<source>Synchronization settings</source> +<target>Parametri di sincronizzazione</target> + +<source>Start synchronization</source> +<target>Avvia sincronizzazione</target> <source>Confirm</source> <target>Confermare</target> @@ -1089,12 +1115,6 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>Set direction:</source> <target>Imposta direzione:</target> -<source>Exclude temporarily</source> -<target>Escludi temporaneamente</target> - -<source>Include temporarily</source> -<target>Includi temporaneamente</target> - <source>multiple selection</source> <target>selezione multipla</target> @@ -1104,6 +1124,15 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>Exclude via filter:</source> <target>Escludi tramite filtro:</target> +<source>Exclude temporarily</source> +<target>Escludi temporaneamente</target> + +<source>Include temporarily</source> +<target>Includi temporaneamente</target> + +<source>Delete</source> +<target>Elimina</target> + <source>Include all</source> <target>Includi tutto</target> @@ -1152,6 +1181,9 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>Never save &changes</source> <target>Non salvare mai &modifiche</target> +<source>Filter</source> +<target>Filtro</target> + <source>Show files that exist on left side only</source> <target>Mostra file esistenti solo a sinistra</target> @@ -1197,12 +1229,18 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>Set as default</source> <target>Imposta come predefinito</target> -<source>Operation aborted</source> -<target>Operazione abortita</target> - <source>All folders are in sync</source> <target>Tutte le cartelle sono sincronizzate</target> +<source>Synchronization Settings</source> +<target>Impostazioni di Sincronizzazione</target> + +<source>Comparison Settings</source> +<target>Impostazioni di Confronto</target> + +<source>Cannot find %x</source> +<target>Impossibile trovare %x</target> + <source>Comma-separated values</source> <target>Valori separati da virgole</target> @@ -1218,8 +1256,8 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>&Ignore</source> <target>&Ignora</target> -<source>Fatal Error</source> -<target>Errore fatale</target> +<source>Serious Error</source> +<target>Errore Grave</target> <source>&Don't show this warning again</source> <target>&Non mostrare più questo avviso</target> @@ -1227,9 +1265,6 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>&Switch</source> <target>&Passa</target> -<source>Question</source> -<target>Domanda</target> - <source>&Yes</source> <target>&Si</target> @@ -1251,8 +1286,8 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>Initializing...</source> <target>Inizializzazione...</target> -<source>Aborted</source> -<target>Interrotto</target> +<source>Stopped</source> +<target>Arrestato</target> <source>Completed</source> <target>Completato</target> @@ -1263,12 +1298,6 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>Log</source> <target>Log</target> -<source>Cannot find %x</source> -<target>Impossibile trovare %x</target> - -<source>Inactive</source> -<target>Inattivo</target> - <source>Today</source> <target>Oggi</target> @@ -1293,18 +1322,18 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filtro</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> </source> <target> -<pluralform>Vuoi davvero spostare la seguente voce nel cestino?</pluralform> -<pluralform>Vuoi davvero spostare i seguenti %x articoli nel cestino?</pluralform> +<pluralform>Vuoi davvero spostare il seguente oggetto nel cestino?</pluralform> +<pluralform>Vuoi davvero spostare i seguenti %x oggetti nel cestino?</pluralform> </target> +<source>Move</source> +<target>Spostare</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1343,9 @@ Nota: percorso dei file deve essere relativo alla directory di base. <pluralform>Vuoi veramente eliminare i seguenti %x oggetti?</pluralform> </target> +<source>Exclude</source> +<target>Escludi</target> + <source>Direct</source> <target>Diretto</target> @@ -1338,8 +1370,8 @@ Nota: percorso dei file deve essere relativo alla directory di base. <source>- Other side's counterpart to %item_folder%</source> <target>- Omologo dell'altro lato a %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Vuoi visualizzare nuovamente i dialoghi e gli avvisi nascosti?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Ripristina tutte le finestre nascoste e gli avvisi?</target> <source>Leave as unresolved conflict</source> <target>Lascia come conflitti irrisolti</target> @@ -1366,7 +1398,7 @@ Nota: percorso dei file deve essere relativo alla directory di base. <target>File</target> <source>Items</source> -<target>Articoli</target> +<target>Oggetti</target> <source>Percentage</source> <target>Percentuale</target> @@ -1464,14 +1496,14 @@ Nota: percorso dei file deve essere relativo alla directory di base. <pluralform>%x giorni</pluralform> </target> -<source>Failed to register to receive system messages.</source> +<source>Unable to register to receive system messages.</source> <target>Impossibile registrarsi per ricevere i messaggi di sistema.</target> <source>Cannot set privilege %x.</source> <target>Impossibile impostare privilegi %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Sospensione sistema fallita.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Impossibile sospendere la modalità di sonno del sistema.</target> <source>Cannot change process I/O priorities.</source> <target>Impossibile modificare le priorità I/O del processo.</target> diff --git a/BUILD/Languages/japanese.lng b/BUILD/Languages/japanese.lng index d27d0ff2..d47a75fc 100644 --- a/BUILD/Languages/japanese.lng +++ b/BUILD/Languages/japanese.lng @@ -2,11 +2,28 @@ <language>日本語</language> <translator>Tilt</translator> <locale>ja_JP</locale> - <flag_image>flag_japan.png</flag_image> - <plural_form_count>1</plural_form_count> + <image>flag_japan.png</image> + <plural_count>1</plural_count> <plural_definition>0</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>Retrying operation</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>å‰å›žæœ€å¾Œã®åŒæœŸå‡¦ç†ä»¥é™ã€ä¸¡å´ã¨ã‚‚変更ãŒã‚ã‚Šã¾ã™.</target> @@ -289,8 +306,8 @@ <source>/sec</source> <target>/秒</target> -<source>%x items</source> -<target>%x 個ã®é …ç›®</target> +<source>%x items/sec</source> +<target>%x é …ç›®/秒</target> <source>Configuration file %x loaded partially only.</source> <target>構æˆãƒ•ã‚¡ã‚¤ãƒ« %x ã¯éƒ¨åˆ†çš„ã®ã¿èªã¿è¾¼ã¾ã‚Œã¾ã™.</target> @@ -319,11 +336,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>ボリュームå %x ã¯ã€ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ス %y ã®ä¸€éƒ¨ã§ã¯ã‚ã‚Šã¾ã›ã‚“.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>ユーザã«ã‚ˆã‚‹ä¸æ–: ç¾åœ¨ã®å‡¦ç†ã‚’終了ã—ã¦ã„ã¾ã™.. ãŠå¾…ã¡ãã ã•ã„...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>åœæ¢ã®è¦æ±‚: ç¾åœ¨ã®æ“作ãŒå®Œäº†ã™ã‚‹ã®ã‚’å¾…æ©Ÿã—ã¦ã„ã¾ã™...</target> -<source>Failure to create timestamp for versioning:</source> -<target>ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»˜ã‘ã®ã‚¿ã‚¤ãƒ スタンプ作æˆã«å¤±æ•—:</target> +<source>Unable to create timestamp for versioning:</source> +<target>ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»˜ã‘ã®ã‚¿ã‚¤ãƒ スタンプを作æˆå‡ºæ¥ã¾ã›ã‚“:</target> <source>Cannot read the following XML elements:</source> <target>次㮠XMLè¦ç´ ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“:</target> @@ -340,8 +357,8 @@ <source>&Program</source> <target>プãƒã‚°ãƒ©ãƒ (&P)</target> -<source>&Content</source> -<target>トピック(&C)</target> +<source>&View help</source> +<target>ヘルプを表示(&V)</target> <source>&About</source> <target>æƒ…å ±(&A)</target> @@ -364,8 +381,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>一括ファイル(.ffs)ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¦é–‹å§‹</target> -<source>Folders to watch</source> -<target>監視ã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€</target> +<source>Folders to watch:</source> +<target>監視ã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€:</target> <source>Add folder</source> <target>ãƒ•ã‚©ãƒ«ãƒ€ã‚’è¿½åŠ </target> @@ -379,12 +396,15 @@ <source>Select a folder</source> <target>フォルダをé¸æŠž</target> -<source>Idle time [seconds]</source> -<target>待機時間 [秒]</target> +<source>Idle time (in seconds):</source> +<target>待機時間(秒ã§æŒ‡å®š):</target> <source>Idle time between last detected change and execution of command</source> <target>最後ã«ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ã‹ã‚‰ã€æ¬¡ã«å¤‰æ›´ã‚’検出ã™ã‚‹ã¾ã§ã®å¾…機時間</target> +<source>Command line:</source> +<target>コマンドライン:</target> + <source> The command is triggered if: - files or subfolders change @@ -396,8 +416,8 @@ The command is triggered if: - æ–°è¦ãƒ•ã‚©ãƒ«ãƒ€ã®è¿½åŠ (例. USB ã®æŒ¿å…¥) </target> -<source>Start</source> -<target>開始</target> +<source>&Start</source> +<target>開始(&S)</target> <source>&Retry</source> <target>å†è©¦è¡Œ(&R)</target> @@ -405,9 +425,6 @@ The command is triggered if: <source>Cancel</source> <target>ã‚ャンセル</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>リアルタイムåŒæœŸ - 自動åŒæœŸ</target> - <source>Build: %x</source> <target>ビルド: %x</target> @@ -417,6 +434,9 @@ The command is triggered if: <source>All files</source> <target>ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«</target> +<source>Automated Synchronization</source> +<target>自動åŒæœŸ</target> + <source>Directory monitoring active</source> <target>ディレクトリã®ç›£è¦–アクティブ</target> @@ -432,8 +452,8 @@ The command is triggered if: <source>&Exit</source> <target>終了(&E)</target> -<source>Invalid command line:</source> -<target>無効ãªã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³:</target> +<source>Incorrect command line:</source> +<target>ä¸æ£ãªã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³:</target> <source>File content</source> <target>ファイルã®å†…容</target> @@ -495,8 +515,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>対象フォルダ入力欄ãŒç©ºç™½ã«ãªã£ã¦ã„ã¾ã™.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã®ãŸã‚フォルダ入力欄ã«ç©ºç™½ã¯ä½¿ãˆã¾ã›ã‚“.</target> +<source>Please enter a target folder for versioning.</source> +<target>ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»˜ã‘ã‚’ã™ã‚‹å¯¾è±¡ãƒ•ã‚©ãƒ«ãƒ€ã‚’入力</target> <source>Source folder %x not found.</source> <target>ソースフォルダ %x ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“</target> @@ -520,7 +540,7 @@ The command is triggered if: <target>複数フォルダペアã®ä¸€éƒ¨ã§ã‚るフォルダãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™. åŒæœŸè¨å®šã‚’確èªã—ã¦ãã ã•ã„.</target> <source>Synchronizing folder pair:</source> -<target>フォルダペアをåŒæœŸå‡¦ç†ä¸:</target> +<target>フォルダペアをåŒæœŸå‡¦ç†:</target> <source>Generating database...</source> <target>データベースを作æˆä¸...</target> @@ -534,8 +554,8 @@ The command is triggered if: <source>job name</source> <target>ジョブå</target> -<source>Synchronization aborted</source> -<target>åŒæœŸå‡¦ç†ã‚’ä¸æ–</target> +<source>Synchronization stopped</source> +<target>åŒæœŸå‡¦ç†ã‚’åœæ¢</target> <source>Synchronization completed with errors</source> <target>åŒæœŸå‡¦ç†ã¯ã‚¨ãƒ©ãƒ¼ã§çµ‚了ã—ã¦ã„ã¾ã™</target> @@ -552,14 +572,11 @@ The command is triggered if: <source>Saving log file %x...</source> <target>ãƒã‚°ãƒ•ã‚¡ã‚¤ãƒ« %x ã‚’ä¿å˜ä¸...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>"切り替ãˆ"を押ã™ã¨ FreeFileSync ダイアãƒã‚°ã®å•é¡Œã‚’解決ã—ã¾ã™.</target> - -<source>Switching to FreeFileSync main dialog</source> -<target>FreeFileSync メインダイアãƒã‚°ã‚’切り替ãˆä¸</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>FreeFileSync ã®ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’切り替ãˆã‚‹ã“ã¨ã§ã“ã®å•é¡Œã‚’解決</target> -<source>Retrying operation after error:</source> -<target>エラーã®å¾Œã§å‡¦ç†ã‚’å†è©¦è¡Œ:</target> +<source>Switching to FreeFileSync's main window</source> +<target>FreeFileSync メインウィンドウã®åˆ‡ã‚Šæ›¿ãˆ</target> <source>A new version of FreeFileSync is available:</source> <target>FreeFileSync ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨ã§ãã¾ã™:</target> @@ -567,8 +584,8 @@ The command is triggered if: <source>Download now?</source> <target>ダウンãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹?</target> -<source>New version found</source> -<target>æ–°ãŸãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚ã‚Šã¾ã™</target> +<source>Check for Program Updates</source> +<target>プãƒã‚°ãƒ©ãƒ ã®ã‚¢ãƒƒãƒ—デートを確èª</target> <source>&Download</source> <target>ダウンãƒãƒ¼ãƒ‰(&D)</target> @@ -636,20 +653,20 @@ The command is triggered if: <source>Hibernate</source> <target>休æ¢çŠ¶æ…‹</target> -<source>Selected variant:</source> -<target>é¸æŠžã•ã‚ŒãŸãƒãƒªã‚¢ãƒ³ãƒˆ:</target> +<source>Alternate comparison settings</source> +<target>代替比較è¨å®š</target> -<source>Select alternate comparison settings</source> -<target>代替比較è¨å®šã‚’é¸æŠž</target> +<source>Alternate synchronization settings</source> +<target>代替åŒæœŸè¨å®š</target> -<source>Select alternate synchronization settings</source> -<target>代替åŒæœŸè¨å®šã‚’é¸æŠž</target> +<source>Local filter</source> +<target>ãƒãƒ¼ã‚«ãƒ« フィルター</target> -<source>Filter is active</source> -<target>フィルターを有効化</target> +<source>Active</source> +<target>アクティブ</target> -<source>No filter selected</source> -<target>フィルターé¸æŠžãªã—</target> +<source>None</source> +<target>ãªã—</target> <source>Remove alternate settings</source> <target>代替è¨å®šã‚’除去</target> @@ -663,6 +680,15 @@ The command is triggered if: <source>Paste</source> <target>貼り付ã‘</target> +<source>Alternate Comparison Settings</source> +<target>代替比較è¨å®š</target> + +<source>Alternate Synchronization Settings</source> +<target>代替åŒæœŸè¨å®š</target> + +<source>Local Filter</source> +<target>ãƒãƒ¼ã‚«ãƒ« フィルター</target> + <source>&New</source> <target>æ–°è¦(&N)</target> @@ -678,15 +704,18 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. åŒæœŸå‡¦ç†(&S)</target> +<source>&Global settings</source> +<target>全般的ãªè¨å®š(&G)</target> + <source>&Language</source> <target>使用言語(&L)</target> +<source>&Find...</source> +<target>検索(&F)...</target> + <source>&Export file list...</source> <target>ファイル一覧をエクスãƒãƒ¼ãƒˆ(&E)...</target> -<source>&Global settings</source> -<target>全般的ãªè¨å®š(&G)</target> - <source>&Tools</source> <target>ツール(&T)</target> @@ -696,18 +725,12 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>週ã«ä¸€å›žã€è‡ªå‹•çš„ã«ç¢ºèªã™ã‚‹(&A)</target> -<source>Check for new &version</source> -<target>æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ç¢ºèª(&V)</target> +<source>&Check for new version</source> +<target>æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ç¢ºèª(&C)</target> <source>Compare</source> <target>比較</target> -<source>Comparison settings</source> -<target>比較è¨å®š</target> - -<source>Synchronization settings</source> -<target>åŒæœŸå‡¦ç†è¨å®š</target> - <source>Synchronize</source> <target>åŒæœŸå‡¦ç†</target> @@ -720,6 +743,15 @@ The command is triggered if: <source>Swap sides</source> <target>パãƒãƒ«ã‚’入れ替ãˆ</target> +<source>Close search bar</source> +<target>検索ãƒãƒ¼ã‚’é–‰ã˜ã‚‹</target> + +<source>Find:</source> +<target>検索:</target> + +<source>Match case</source> +<target>æ–‡å—種を区別</target> + <source>Save as batch job</source> <target>一括ジョブã§ä¿å˜</target> @@ -741,74 +773,20 @@ The command is triggered if: <source>Total bytes to copy</source> <target>コピーã™ã‚‹åˆè¨ˆãƒã‚¤ãƒˆ</target> -<source>Items found:</source> -<target>見ã¤ã‹ã£ãŸè¦ç´ :</target> - -<source>Speed:</source> -<target>速度:</target> - -<source>Time remaining:</source> -<target>残り時間:</target> - -<source>Time elapsed:</source> -<target>経éŽæ™‚é–“</target> - -<source>Synchronizing...</source> -<target>åŒæœŸå‡¦ç†ä¸...</target> - -<source>Minimize to notification area</source> -<target>é€šçŸ¥é ˜åŸŸã«æœ€å°åŒ–</target> - -<source>On completion</source> -<target>完了時ã®å‹•ä½œ</target> - -<source>Close</source> -<target>é–‰ã˜ã‚‹</target> +<source>Select a variant:</source> +<target>メソッドをé¸æŠž:</target> -<source>&Pause</source> -<target>一時åœæ¢(&P)</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>更新時刻ã¨ã‚µã‚¤ã‚ºã‚’比較ã—ã¦ã€åŒä¸€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’è˜åˆ¥ã—ã¾ã™</target> -<source>Variant</source> -<target>変化</target> +<source>Identify equal files by comparing the file content.</source> +<target>ファイルã®å†…容を比較ã—ã¦ã€åŒä¸€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’è˜åˆ¥ã—ã¾ã™</target> -<source>Statistics</source> -<target>統計</target> +<source>Symbolic links:</source> +<target>シンボリック リンク:</target> -<source>&Don't show this dialog again</source> -<target>次回以é™ã‹ã‚‰è¡¨ç¤ºã—ãªã„(&D)</target> - -<source>Select a variant</source> -<target>ãƒãƒªã‚¢ãƒ³ãƒˆã‚’é¸æŠž</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -ファイルãŒåŒæ§˜ã ã£ãŸå ´åˆ - - 最終書ãè¾¼ã¿æ™‚刻ã€æ—¥æ™‚ - - ファイルサイズ -ã§åˆ¤æ–ã™ã‚‹ -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -ファイルãŒåŒæ§˜ã ã£ãŸå ´åˆ - - ファイル内容 -ã§åˆ¤æ–ã™ã‚‹ -</target> - -<source>Symbolic Link handling</source> -<target>ï½¼ï¾ï¾Žï¾žï¾˜ï½¯ï½¸ãƒ»ï¾˜ï¾ï½¸ã®å–り扱ã„</target> - -<source>Help</source> -<target>ヘルプ</target> +<source>More information</source> +<target>æ›´ã«è©³ç´°ãªæƒ…å ±</target> <source>OK</source> <target>OK</target> @@ -816,11 +794,11 @@ is the same <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>変更箇所をè˜åˆ¥ã—ã¦ä¸¡å´ã«å¤‰æ›´ã‚’åæ˜ ã—ã¾ã™ã€‚データベースを使用ã™ã‚‹ã“ã¨ã§ã€å‰Šé™¤ã€ç§»å‹•ãŠã‚ˆã³ç«¶åˆãªã©ãŒè‡ªå‹•çš„ã«æ¤œå‡ºã•ã‚Œã¾ã™ã€‚</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>å·¦å´ã«åˆã‚ã›ã¦ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—. å³å´ã®ãƒ•ã‚©ãƒ«ãƒ€å†…容ãŒåŒæœŸå‡¦ç†å¾Œã«å·¦å´ã¨åŒã˜ã«ãªã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>åŒæ„処ç†å¾Œã€å³å´ãƒ•ã‚©ãƒ«ãƒ€ã¨åŽ³å¯†ã«åˆè‡´ã™ã‚‹å·¦å´ãƒ•ã‚©ãƒ«ãƒ€ã®ãƒŸãƒ©ãƒ¼ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を作æˆ</target> -<source>Copy new or updated files to right folder.</source> -<target>æ–°ã—ã„(æ›´æ–°)ファイルをå³ãƒ•ã‚©ãƒ«ãƒ€ã«ã‚³ãƒ”ー</target> +<source>Copy new and updated files to the right folder.</source> +<target>æ–°ã—ã„ã€ã¾ãŸã¯æ›´æ–°ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’å³ãƒ•ã‚©ãƒ«ãƒ€ã«ã‚³ãƒ”ー</target> <source>Configure your own synchronization rules.</source> <target>ã‚ãªãŸã®è¨å®šã—ãŸåŒæœŸè¦å‰‡ã‚’使用ã—ã¾ã™ã€‚</target> @@ -831,23 +809,8 @@ is the same <source>Requires database files. Not supported by all file systems.</source> <target>データベースファイルãŒå¿…è¦ã§ã™(ã™ã¹ã¦ã®ã‚·ã‚¹ãƒ†ãƒ ã«ã¯æœªå¯¾å¿œ).</target> -<source>Error handling</source> -<target>ãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã®ã‚¨ãƒ©ãƒ¼æ™‚:</target> - -<source>Ignore</source> -<target>無視</target> - -<source>Hide all error and warning messages</source> -<target>ã™ã¹ã¦ã®ã‚¨ãƒ©ãƒ¼ã¨è¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’éžè¡¨ç¤º</target> - -<source>Pop-up</source> -<target>ãƒãƒƒãƒ—アップ</target> - -<source>Show pop-up on errors or warnings</source> -<target>エラーã¨è¦å‘Šã‚’ãƒãƒƒãƒ—アップã§è¡¨ç¤º</target> - -<source>Deletion handling</source> -<target>削除ã®å–り扱ã„</target> +<source>Delete files:</source> +<target>ファイルã®å‰Šé™¤:</target> <source>Permanent</source> <target>完全消去</target> @@ -870,56 +833,89 @@ is the same <source>Naming convention:</source> <target>命åè¦å‰‡:</target> -<source>Batch job</source> -<target>一括処ç†</target> +<source>Show examples</source> +<target>入力例を表示</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>無人ã§åŒæœŸã‚’è¡Œã†ç‚ºã®ãƒãƒƒãƒãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä½œæˆ - ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã€ã‚¿ã‚¹ã‚¯ãƒ—ランナーã‹ã‚‰ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ダブルクリックã™ã‚‹ã“ã¨ã§é–‹å§‹: %x</target> +<source>Handle errors:</source> +<target>エラーã®å–り扱ã„:</target> -<source>Exit</source> -<target>終了</target> +<source>Ignore</source> +<target>無視</target> -<source>Abort synchronization on first error</source> -<target>最åˆã®ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿæ™‚ã«åŒæœŸã‚’ä¸æ–ã™ã‚‹</target> +<source>Hide all error and warning messages</source> +<target>ã™ã¹ã¦ã®ã‚¨ãƒ©ãƒ¼ã¨è¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’éžè¡¨ç¤º</target> -<source>Show progress dialog</source> -<target>進æ—ダイアãƒã‚°ã‚’表示</target> +<source>Pop-up</source> +<target>ãƒãƒƒãƒ—アップ</target> -<source>Save log</source> -<target>ãƒã‚°ã‚’ä¿å˜</target> +<source>Show pop-up on errors or warnings</source> +<target>エラーã¨è¦å‘Šã‚’ãƒãƒƒãƒ—アップã§è¡¨ç¤º</target> -<source>Select folder to save log files</source> -<target>ãƒã‚°ãƒ•ã‚¡ã‚¤ãƒ«ä¿å˜å…ˆãƒ•ã‚©ãƒ«ãƒ€ã‚’é¸æŠž</target> +<source>On completion:</source> +<target>完了時ã®å‹•ä½œ:</target> -<source>Limit</source> -<target>制é™</target> +<source>Start synchronization now?</source> +<target>今ã™ãåŒæœŸã‚’開始ã—ã¾ã™ã‹?</target> -<source>Limit maximum number of log files</source> -<target>ãƒã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã®æœ€å¤§æ•°ã‚’制é™</target> +<source>Variant:</source> +<target>メソッド:</target> -<source>Source code written in C++ using:</source> -<target>ソースコード㯠C++ ã§æ›¸ã‹ã‚Œã¦ã„ã¾ã™</target> +<source>Statistics</source> +<target>統計</target> -<source>If you like FreeFileSync</source> -<target>FreeFileSync ã‚’æ°—ã«å…¥ã£ã¦ãã‚ŒãŸæ–¹ã¸</target> +<source>&Don't show this dialog again</source> +<target>次回以é™ã‹ã‚‰è¡¨ç¤ºã—ãªã„(&D)</target> -<source>Donate with PayPal</source> -<target>PayPal ã‹ã‚‰å¯„付</target> +<source>Items found:</source> +<target>見ã¤ã‹ã£ãŸè¦ç´ :</target> -<source>Many thanks for localization:</source> -<target>ãƒãƒ¼ã‚«ãƒ©ã‚¤ã‚ºã®ã”å”力ã«æ„Ÿè¬ã—ã¾ã™:</target> +<source>Speed:</source> +<target>速度:</target> -<source>Feedback and suggestions are welcome</source> -<target>フィードãƒãƒƒã‚¯ã€æ案ãªã©ã¯ã“ã¡ã‚‰ã‹ã‚‰</target> +<source>Time remaining:</source> +<target>残り時間:</target> -<source>Homepage</source> -<target>ホームページ</target> +<source>Time elapsed:</source> +<target>経éŽæ™‚é–“</target> -<source>Email</source> -<target>E-メール</target> +<source>Synchronizing...</source> +<target>åŒæœŸå‡¦ç†ä¸...</target> -<source>Published under the GNU General Public License</source> -<target>GNU 一般共有使用許諾ã«åŸºã¥ã公開ã•ã‚Œã¦ã„ã¾ã™</target> +<source>Minimize to notification area</source> +<target>é€šçŸ¥é ˜åŸŸã«æœ€å°åŒ–</target> + +<source>Close</source> +<target>é–‰ã˜ã‚‹</target> + +<source>&Pause</source> +<target>一時åœæ¢(&P)</target> + +<source>Stop</source> +<target>åœæ¢</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>無人ã§åŒæœŸã‚’è¡Œã†ç‚ºã®ãƒãƒƒãƒãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä½œæˆ - ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã€ã‚¿ã‚¹ã‚¯ãƒ—ランナーã‹ã‚‰ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ダブルクリックã™ã‚‹ã“ã¨ã§é–‹å§‹: %x</target> + +<source>Stop synchronization at first error</source> +<target>最åˆã®ã‚¨ãƒ©ãƒ¼ã§åŒæœŸå‡¦ç†ã‚’åœæ¢</target> + +<source>Show progress dialog</source> +<target>進æ—ダイアãƒã‚°ã‚’表示</target> + +<source>Save log:</source> +<target>ãƒã‚°ä¿å˜:</target> + +<source>Limit:</source> +<target>制é™:</target> + +<source>Limit maximum number of log files</source> +<target>ãƒã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã®æœ€å¤§æ•°ã‚’制é™</target> + +<source>How can I schedule a batch job?</source> +<target>一括ジョブ スケジュールã®ä½œæˆæ–¹æ³•</target> + +<source>&Recycle bin</source> +<target>ゴミ箱(&R)</target> <source>Delete on both sides</source> <target>両方を削除</target> @@ -927,95 +923,125 @@ is the same <source>Delete on both sides even if the file is selected on one side only</source> <target>片å´ã®ãƒšã‚¤ãƒ³ã®ã¿é¸æŠžã•ã‚Œã¦ã„ã‚‹å ´åˆã§ã‚‚両方を削除ã™ã‚‹</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -ã™ã¹ã¦ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼è¦å‰‡ã«é©åˆã—ãŸå ´åˆã®ã¿ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®åŒæœŸãŒè¡Œã‚ã‚Œã¾ã™. -注æ„: ファイルパスã¯åŸºæº–ディレクトリã‹ã‚‰ã®ç›¸å¯¾ãƒ‘スを使用ã—ã¦ãã ã•ã„. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>åŒæœŸå‡¦ç†ã‹ã‚‰ç‰¹å®šã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’除外ã™ã‚‹ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼è¦å‰‡ã‚’é¸æŠžã—ã¾ã™ã€‚対応ã™ã‚‹ãれらフォルダ ペアã‹ã‚‰ã®ç›¸å¯¾ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘スを入力.</target> -<source>Include</source> -<target>å«ã‚ã‚‹</target> +<source>Include:</source> +<target>å«ã‚ã‚‹:</target> -<source>Exclude</source> -<target>除外</target> +<source>Exclude:</source> +<target>除外:</target> -<source>Time span</source> -<target>時間間隔</target> +<source>Time span:</source> +<target>タイムスパン:</target> -<source>File size</source> -<target>ファイルサイズ</target> +<source>File size:</source> +<target>ファイルサイズ:</target> -<source>Minimum</source> -<target>最å°</target> +<source>Minimum:</source> +<target>最å°:</target> -<source>Maximum</source> -<target>最大</target> +<source>Maximum:</source> +<target>最大:</target> <source>&Clear</source> <target>クリア(&C)</target> -<source>Global settings</source> -<target>全般的ãªè¨å®š</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>以下ã®è¨å®šã¯ã€ã™ã¹ã¦ã®åŒæœŸã‚¸ãƒ§ãƒ–ã§ä½¿ç”¨ã•ã‚Œã¾ã™</target> <source>Fail-safe file copy</source> <target>安全ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーを実施</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>リãƒãƒ¼ãƒ ã™ã‚‹å‰ã«ä¸€æ™‚ファイル(*.ffs_tmp)ã¸ã‚³ãƒ”ーã™ã‚‹ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€äºˆæœŸã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã‚‚一貫性をä¿ã¤ã“ã¨ãŒå¯èƒ½ã§ã™.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +対象を上書ãã™ã‚‹å‰ã«ä¸€æ™‚ファイル (*.ffs_tmp) ã«ã‚³ãƒ”ーã—ã¾ã™. +ã“ã‚Œã«ã‚ˆã‚Šã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã‚‚一貫性ã‚る状態ãŒä¿è¨¼ã•ã‚Œã¾ã™. +</target> + +<source>(recommended)</source> +<target>(推奨)</target> <source>Copy locked files</source> <target>ãƒãƒƒã‚¯ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’コピーã™ã‚‹</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>共有ã®ã‚³ãƒ”ーã¨ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒãƒƒã‚¯ã«ï¾Žï¾žï¾˜ï½ï½°ï¾‘ シャドウ コピーサービスを使用ã™ã‚‹ (管ç†è€…権é™ãŒå¿…è¦)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>共有ã€ãƒãƒƒã‚¯ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’ボリュームシャドウコピーサービスを使用ã—ã¦ã‚³ãƒ”ー</target> + +<source>(requires administrator rights)</source> +<target>(管ç†è€…権é™ãŒå¿…è¦)</target> <source>Copy file access permissions</source> <target>ファイルã®ã‚¢ã‚¯ã‚»ã‚¹ãƒ‘ーミッションをコピーã™ã‚‹</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>ファイル転é€ã¨ãƒ•ã‚©ãƒ«ãƒ€ã®ãƒ‘ーミッション(管ç†è€…権é™ãŒå¿…è¦)</target> +<source>Transfer file and folder permissions.</source> +<target>ファイルã¨ãƒ•ã‚©ãƒ«ãƒ€ã®ãƒ‘ーミッションを転é€ã—ã¾ã™</target> + +<source>Automatic retry on error:</source> +<target>エラー時ã®è‡ªå‹•å†è©¦è¡Œ:</target> -<source>Restore hidden dialogs</source> -<target>éš ã—ãŸãƒ€ã‚¤ã‚¢ãƒã‚°ã‚’復帰</target> +<source>Retry count:</source> +<target>å†è©¦è¡Œå›žæ•°:</target> -<source>External applications</source> -<target>外部アプリケーション</target> +<source>Delay (in seconds):</source> +<target>é…延 (秒ã§æŒ‡å®š):</target> + +<source>Customize context menu:</source> +<target>コンテã‚ストメニューã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚º:</target> <source>Description</source> <target>説明</target> +<source>Restore hidden windows</source> +<target>éžè¡¨ç¤ºã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’復帰</target> + <source>&Default</source> <target>デフォルト(&D)</target> -<source>Find what:</source> -<target>検索語:</target> +<source>Source code written in C++ using:</source> +<target>ソースコード㯠C++ ã§æ›¸ã‹ã‚Œã¦ã„ã¾ã™</target> -<source>Match case</source> -<target>æ–‡å—種を区別</target> +<source>If you like FreeFileSync</source> +<target>FreeFileSync ã‚’æ°—ã«å…¥ã£ã¦ãã‚ŒãŸæ–¹ã¸</target> -<source>&Find next</source> -<target>次を検索(&F)</target> +<source>Donate with PayPal</source> +<target>PayPal ã‹ã‚‰å¯„付</target> -<source>Start synchronization</source> -<target>åŒæœŸã®é–‹å§‹</target> +<source>Feedback and suggestions are welcome</source> +<target>フィードãƒãƒƒã‚¯ã€æ案ãªã©ã¯ã“ã¡ã‚‰ã‹ã‚‰</target> -<source>Delete</source> -<target>削除</target> +<source>Homepage</source> +<target>ホームページ</target> -<source>Configure filter</source> -<target>フィルターè¨å®š</target> +<source>Email</source> +<target>E-メール</target> -<source>Find</source> -<target>検索</target> +<source>Published under the GNU General Public License</source> +<target>GNU 一般共有使用許諾ã«åŸºã¥ã公開ã•ã‚Œã¦ã„ã¾ã™</target> + +<source>Many thanks for localization:</source> +<target>ãƒãƒ¼ã‚«ãƒ©ã‚¤ã‚ºã®ã”å”力ã«æ„Ÿè¬ã—ã¾ã™:</target> + +<source>Save as Batch Job</source> +<target>一括ジョブをä¿å˜</target> -<source>Select time span</source> +<source>Delete Items</source> +<target>é …ç›®ã®å‰Šé™¤</target> + +<source>Global Settings</source> +<target>全般的ãªè¨å®š</target> + +<source>Select Time Span</source> <target>タイムスパンをé¸æŠž</target> -<source>Folder pairs</source> -<target>フォルダ・ペア</target> +<source>Folder Pairs</source> +<target>フォルダ ペア</target> + +<source>Find</source> +<target>検索</target> <source>Overview</source> <target>概è¦</target> @@ -1023,14 +1049,14 @@ Note: File paths must be relative to base directories. <source>Configuration</source> <target>構æˆè¨å®š</target> -<source>Main bar</source> +<source>Main Bar</source> <target>メインãƒãƒ¼</target> -<source>Filter files</source> -<target>ファイルフィルター</target> +<source>Filter Files</source> +<target>ファイルフィルター</target> -<source>Select view</source> -<target>表示é¸æŠž</target> +<source>Select View</source> +<target>表示をé¸æŠž</target> <source>Open...</source> <target>é–‹ã...</target> @@ -1041,13 +1067,14 @@ Note: File paths must be relative to base directories. <source>Compare both sides</source> <target>両方を比較</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>本当ã«åˆè¨ˆ %x ã“ã®é …ç›®ã«å¯¾ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ %y を実行ã—ã¾ã™ã‹?</pluralform> -</target> +<source>Comparison settings</source> +<target>比較è¨å®š</target> + +<source>Synchronization settings</source> +<target>åŒæœŸå‡¦ç†è¨å®š</target> + +<source>Start synchronization</source> +<target>åŒæœŸã®é–‹å§‹</target> <source>Confirm</source> <target>確èª</target> @@ -1082,12 +1109,6 @@ Note: File paths must be relative to base directories. <source>Set direction:</source> <target>æ–¹å‘ã®è¨å®š:</target> -<source>Exclude temporarily</source> -<target>一時的ã«é™¤å¤–</target> - -<source>Include temporarily</source> -<target>一時的ã«å«ã‚ã‚‹</target> - <source>multiple selection</source> <target>複数é¸æŠž</target> @@ -1097,6 +1118,15 @@ Note: File paths must be relative to base directories. <source>Exclude via filter:</source> <target>フィルターを経由ã—ã¦é™¤å¤–</target> +<source>Exclude temporarily</source> +<target>一時的ã«é™¤å¤–</target> + +<source>Include temporarily</source> +<target>一時的ã«å«ã‚ã‚‹</target> + +<source>Delete</source> +<target>削除</target> + <source>Include all</source> <target>ã™ã¹ã¦å«ã‚ã‚‹</target> @@ -1145,6 +1175,9 @@ Note: File paths must be relative to base directories. <source>Never save &changes</source> <target>変更ã®ä¿å˜ã‚’ã—ãªã„(&C)</target> +<source>Filter</source> +<target>フィルター</target> + <source>Show files that exist on left side only</source> <target>å·¦å´ã®ã¿ã«å˜åœ¨ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示</target> @@ -1190,12 +1223,18 @@ Note: File paths must be relative to base directories. <source>Set as default</source> <target>デフォルトã«ã‚»ãƒƒãƒˆ</target> -<source>Operation aborted</source> -<target>æ“作ã®ä¸æ–</target> - <source>All folders are in sync</source> <target>ã™ã¹ã¦ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’åŒæœŸ</target> +<source>Synchronization Settings</source> +<target>åŒæœŸã®è¨å®š</target> + +<source>Comparison Settings</source> +<target>比較ã®è¨å®š</target> + +<source>Cannot find %x</source> +<target>%x ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“</target> + <source>Comma-separated values</source> <target>カンマ区切りã®å€¤</target> @@ -1211,8 +1250,8 @@ Note: File paths must be relative to base directories. <source>&Ignore</source> <target>無視(&I)</target> -<source>Fatal Error</source> -<target>致命的ãªã‚¨ãƒ©ãƒ¼</target> +<source>Serious Error</source> +<target>é‡å¤§ãªã‚¨ãƒ©ãƒ¼</target> <source>&Don't show this warning again</source> <target>次回ã‹ã‚‰ã“ã®è¦å‘Šã‚’表示ã—ãªã„(&D)</target> @@ -1220,9 +1259,6 @@ Note: File paths must be relative to base directories. <source>&Switch</source> <target>切り替ãˆ(&S)</target> -<source>Question</source> -<target>質å•</target> - <source>&Yes</source> <target>ã¯ã„(&Y)</target> @@ -1244,8 +1280,8 @@ Note: File paths must be relative to base directories. <source>Initializing...</source> <target>åˆæœŸåŒ–ä¸...</target> -<source>Aborted</source> -<target>ä¸æ–</target> +<source>Stopped</source> +<target>åœæ¢</target> <source>Completed</source> <target>完了ã—ã¾ã—ãŸ!</target> @@ -1256,12 +1292,6 @@ Note: File paths must be relative to base directories. <source>Log</source> <target>ãƒã‚°</target> -<source>Cannot find %x</source> -<target>%x ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“</target> - -<source>Inactive</source> -<target>éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–</target> - <source>Today</source> <target>今日</target> @@ -1286,9 +1316,6 @@ Note: File paths must be relative to base directories. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>フィルター</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1297,6 +1324,9 @@ Note: File paths must be relative to base directories. <pluralform>本当ã«ä»¥ä¸‹ %x 個ã®é …目をゴミ箱ã«ç§»å‹•ã—ã¾ã™ã‹?</pluralform> </target> +<source>Move</source> +<target>移動</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1305,6 +1335,9 @@ Note: File paths must be relative to base directories. <pluralform>本当ã«ä»¥ä¸‹ã® %x 個ã®é …目を削除ã—ã¾ã™ã‹</pluralform> </target> +<source>Exclude</source> +<target>除外</target> + <source>Direct</source> <target>ダイレクト</target> @@ -1329,8 +1362,8 @@ Note: File paths must be relative to base directories. <source>- Other side's counterpart to %item_folder%</source> <target>- %item_folder% ã®å対å´ã®å¯¾è±¡</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>éžè¡¨ç¤ºã«ã—ãŸè¦å‘Šãƒ€ã‚¤ã‚¢ãƒã‚°ã‚’å†ã³è¡¨ç¤ºã—ã¾ã™ã‹?</target> +<source>Restore all hidden windows and warnings?</source> +<target>ã™ã¹ã¦ã®éžè¡¨ç¤ºã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¨è¦å‘Šã‚’å…ƒã«æˆ»ã—ã¾ã™ã‹?</target> <source>Leave as unresolved conflict</source> <target>未解決ã®ç«¶åˆã¯ãã®ã¾ã¾æ®‹ã™</target> @@ -1452,14 +1485,14 @@ Note: File paths must be relative to base directories. <pluralform>%x æ—¥</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>å—ä¿¡ã—ãŸã‚·ã‚¹ãƒ†ãƒ メッセージã®ç™»éŒ²ã«å¤±æ•—.</target> +<source>Unable to register to receive system messages.</source> +<target>システムå—信メッセージã«ç™»éŒ²ã§ãã¾ã›ã‚“</target> <source>Cannot set privilege %x.</source> <target>%x ã®ç‰¹æ¨©ã‚’セットã§ãã¾ã›ã‚“.</target> -<source>Failed to suspend system sleep mode.</source> -<target>システムスリープモードã®ä¸æ–ã«å¤±æ•—</target> +<source>Unable to suspend system sleep mode.</source> +<target>システムスリープモードをä¸æ–ã§ãã¾ã›ã‚“</target> <source>Cannot change process I/O priorities.</source> <target>プãƒã‚»ã‚¹ã® I/O 優先度を変更ã§ãã¾ã›ã‚“</target> diff --git a/BUILD/Languages/korean.lng b/BUILD/Languages/korean.lng index 01ec80b0..0caaf5a4 100644 --- a/BUILD/Languages/korean.lng +++ b/BUILD/Languages/korean.lng @@ -2,11 +2,17 @@ <language>í•œêµì–´</language> <translator>Simon Park</translator> <locale>ko_KR</locale> - <flag_image>flag_south_korea.png</flag_image> - <plural_form_count>1</plural_form_count> + <image>flag_south_korea.png</image> + <plural_count>1</plural_count> <plural_definition>0</plural_definition> </header> +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> +<target></target> + <source>Both sides have changed since last synchronization.</source> <target>마지막 ë™ê¸°í™” ìž‘ì—… ì´í›„, 양측 ëª¨ë‘ ë³€ê²½ ë˜ì—ˆìŠµë‹ˆë‹¤.</target> @@ -58,9 +64,6 @@ <source>Cannot open file %x.</source> <target>íŒŒì¼ %xì„(를) ì—´ 수 없습니다.</target> -<source>Error</source> -<target>오류</target> - <source>File %x does not contain a valid configuration.</source> <target>íŒŒì¼ %x ì˜ êµ¬ì„±ì´ ìœ íš¨í•˜ì§€ 않습니다.</target> @@ -70,12 +73,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>ëª…ë ¹ì¤„ì„ í†µí•´ ì„¤ì •ëœ ë””ë ‰í† ë¦¬ì˜ ê²½ìš°, ì„¤ì • 파ì¼ì€ ë””ë ‰í† ë¦¬ 페어 ìƒì˜ ì„¤ì •ì„ í¬í•¨í• 수 없습니다.</target> -<source>Warning</source> -<target>ê²½ê³ </target> - <source>Directories cannot be set for more than one configuration file.</source> <target>ë””ë ‰í† ë¦¬ëŠ” 하나 ì´ìƒì˜ ì„¤ì • 파ì¼ì„ 위해 ì„¤ì •ë 수 없습니다.</target> +<source>Command line</source> +<target>ëª…ë ¹ì¤„(커맨드ë¼ì¸)</target> + <source>Syntax:</source> <target>구문(Syntax):</target> @@ -91,9 +94,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>최대 한개 ì„¤ì •íŒŒì¼ì— 대한 대체 ë””ë ‰í† ë¦¬ 개수</target> -<source>Command line</source> -<target>ëª…ë ¹ì¤„(커맨드ë¼ì¸)</target> - <source>A folder input field is empty.</source> <target>í´ë” ìž…ë ¥ í•„ë“œ 하나가 비어 있습니다.</target> @@ -289,7 +289,7 @@ <source>/sec</source> <target>/ì´ˆ</target> -<source>%x items</source> +<source>%x items/sec</source> <target>%x í•ëª©</target> <source>Configuration file %x loaded partially only.</source> @@ -319,11 +319,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>볼륨 ì´ë¦„ %xì€(는) íŒŒì¼ ê²½ë¡œ %yì˜ ì¼ë¶€ê°€ 아닙니다.</target> -<source>Abort requested: Waiting for current operation to finish...</source> +<source>Stop requested: Waiting for current operation to finish...</source> <target>사용ìžì— ì˜í•œ ìž‘ì—… 중단: 현재 ìž‘ì—… 종료 대기 중...</target> -<source>Failure to create timestamp for versioning:</source> -<target>ë²„ì €ë‹ì„ 위한 타임 스탬프 ìƒì„± 실패:</target> +<source>Unable to create timestamp for versioning:</source> +<target>ë²„ì €ë‹ì„ 위한 타임 스탬프 ìƒì„± 불가:</target> <source>Cannot read the following XML elements:</source> <target>ë‹¤ìŒ XML 요소를 ì½ì„ 수 없습니다:</target> @@ -340,8 +340,8 @@ <source>&Program</source> <target>프로그램(&P)</target> -<source>&Content</source> -<target>ë„ì›€ë§ ë‚´ìš©(&C)</target> +<source>&View help</source> +<target>ë„ì›€ë§ ë³´ê¸°(&V)</target> <source>&About</source> <target>ìƒì„¸ ì •ë³´(&A)</target> @@ -364,8 +364,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>ì‹œìž‘í•˜ë ¤ë©´ .ffs_batch file (ì¼ê´„ 파ì¼)ì„ ê°€ì ¸ì˜¤ì‹ì‹œì˜¤.</target> -<source>Folders to watch</source> -<target>ì—´ì–´ ë³¼ í´ë”</target> +<source>Folders to watch:</source> +<target>ì—´ì–´ ë³¼ í´ë”:</target> <source>Add folder</source> <target>í´ë” 추가</target> @@ -379,12 +379,15 @@ <source>Select a folder</source> <target>í´ë” ì„ íƒ</target> -<source>Idle time [seconds]</source> -<target>ìœ íœ´ì‹œê°„ [ì´ˆ]</target> +<source>Idle time (in seconds):</source> +<target>ìœ íœ´ 시간 (ì´ˆ 단위)</target> <source>Idle time between last detected change and execution of command</source> <target>마지막으로 ê°ì§€ëœ 변화와 ëª…ë ¹ 실행 ê°„ì˜ ìœ íœ´ 시간</target> +<source>Command line:</source> +<target>ëª…ë ¹ì¤„(커맨드ë¼ì¸):</target> + <source> The command is triggered if: - files or subfolders change @@ -396,8 +399,8 @@ The command is triggered if: - 새 í´ë”ê°€ ìƒê²¼ì„ ì‹œ (예: USB 스틱 삽입) </target> -<source>Start</source> -<target>시작</target> +<source>&Start</source> +<target>시작(&S)</target> <source>&Retry</source> <target>다시 ì‹œë„(&R)</target> @@ -405,24 +408,27 @@ The command is triggered if: <source>Cancel</source> <target>취소</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>실시간 ë™ê¸°í™” - ìžë™ ë™ê¸°í™”</target> +<source>About</source> +<target>ìƒì„¸ ì •ë³´</target> <source>Build: %x</source> <target>빌드: %x</target> -<source>About</source> -<target>ìƒì„¸ ì •ë³´</target> - <source>All files</source> <target>ëª¨ë“ íŒŒì¼</target> +<source>Automated Synchronization</source> +<target>ìžë™ ë™ê¸°í™”</target> + <source>Directory monitoring active</source> <target>ë””ë ‰í† ë¦¬ ëª¨ë‹ˆí„°ë§ í™œì„±í™”</target> <source>Waiting until all directories are available...</source> <target>ëª¨ë“ ë””ë ‰í† ë¦¬ê°€ 사용 ê°€ëŠ¥í• ë•Œê¹Œì§€ 대기 중...</target> +<source>Error</source> +<target>오류</target> + <source>&Restore</source> <target>ë³µì›(&R)</target> @@ -432,8 +438,8 @@ The command is triggered if: <source>&Exit</source> <target>나가기(&E)</target> -<source>Invalid command line:</source> -<target>ìž˜ëª»ëœ ëª…ë ¹ì¤„:</target> +<source>Incorrect command line:</source> +<target>ë¶€ì •í™•í•œ ëª…ë ¹ì¤„:</target> <source>File content</source> <target>íŒŒì¼ ë‚´ìš©</target> @@ -495,8 +501,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>ëŒ€ìƒ í´ë” ìž…ë ¥ 필드가 비어 있어서는 안 ë©ë‹ˆë‹¤.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>ë²„ì €ë‹ì„ 위한 í´ë” ìž…ë ¥ 필드가 비어 있어서는 안 ë©ë‹ˆë‹¤.</target> +<source>Please enter a target folder for versioning.</source> +<target>ë²„ì €ë‹ì„ 위한 ëŒ€ìƒ í´ë”를 ìž…ë ¥í•˜ì„¸ìš”.</target> <source>Source folder %x not found.</source> <target>소스 í´ë” %xì„(를) ì°¾ì„ ìˆ˜ ì—†ìŒ.</target> @@ -505,7 +511,7 @@ The command is triggered if: <target>ì•„ëž˜ì˜ í•ëª©ë“¤ì€ 해결치 못 í•œ 충ëŒë¡œ ì¸í•´ ë™ê¸°í™”í• ìˆ˜ 없습니다:</target> <source>The following folders are significantly different. Make sure you are matching the correct folders for synchronization.</source> -<target>ë‹¤ìŒ í´ë”ë“¤ì˜ ì°¨ì´ê°€ ìƒë‹¹í•©ë‹ˆë‹¤. ë™ê¸°í™”를 위해 올바른 í´ë”ë“¤ì´ ë§¤ì¹˜ë˜ì—ˆëŠ”지 확ì¸í•´ ë³´ì‹ì‹œì˜¤.</target> +<target>ë‹¤ìŒ í´ë”ë“¤ì€ ì°¨ì´ê°€ ìƒë‹¹í•©ë‹ˆë‹¤. ë™ê¸°í™”를 위해 올바른 í´ë”ë“¤ì´ ë§¤ì¹˜ë˜ì—ˆëŠ”지 확ì¸í•´ ë³´ì‹ì‹œì˜¤.</target> <source>Not enough free disk space available in:</source> <target>사용 가능한 ë””ìŠ¤í¬ ì—¬ìœ ê³µê°„ì´ ë¶€ì¡±í•©ë‹ˆë‹¤:</target> @@ -534,7 +540,7 @@ The command is triggered if: <source>job name</source> <target>ìž‘ì—… ì´ë¦„</target> -<source>Synchronization aborted</source> +<source>Synchronization stopped</source> <target>ë™ê¸°í™” 중단</target> <source>Synchronization completed with errors</source> @@ -552,14 +558,37 @@ The command is triggered if: <source>Saving log file %x...</source> <target>로그 íŒŒì¼ %x ì €ìž¥ 중...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>FreeFileSync 기본 대화 ì°½ì—ì„œ ë¬¸ì œ í•´ê²°ì„ í•˜ë ¤ë©´ "Switch" [ì „í™˜]ì„ ëˆ„ë¥´ì‹ì‹œì˜¤.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>ì´ ë¬¸ì œëŠ” FreeFileSync 기본 창으로 ì „í™˜í•´ì„œ í•´ê²° 가능합니다.</target> + +<source>&Don't show this warning again</source> +<target>ì´ ê²½ê³ ë¥¼ 다시 표시하지 ì•ŠìŒ(&D)</target> -<source>Switching to FreeFileSync main dialog</source> -<target>FreeFileSync 기본 대화 창으로 ì „í™˜</target> +<source>&Ignore</source> +<target>무시(&I)</target> -<source>Retrying operation after error:</source> -<target>오류 ë°œìƒ í›„, ìž‘ì—… ìž¬ì‹œë„ ì¤‘:</target> +<source>&Switch</source> +<target>ì „í™˜(&S)</target> + +<source>Switching to FreeFileSync's main window</source> +<target>FreeFileSync 기본 창으로 ì „í™˜ 중</target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>%xì´ˆ ì´ë‚´ì— ìžë™ 재시ë„...</pluralform> +</target> + +<source>Serious Error</source> +<target>심ê°í•œ 오류</target> + +<source>&Ignore subsequent errors</source> +<target>ì´í›„ 오류 무시(&I)</target> + +<source>Check for Program Updates</source> +<target>프로그램 ì—…ë°ì´íŠ¸ 확ì¸</target> <source>A new version of FreeFileSync is available:</source> <target>새로운 ë²„ì „ì˜ FreeFileSyncê°€ 나왔습니다:</target> @@ -567,18 +596,12 @@ The command is triggered if: <source>Download now?</source> <target>지금 다운로드 í•˜ì‹œê² ìŠµë‹ˆê¹Œ?</target> -<source>New version found</source> -<target>새로운 ë²„ì „ì´ ë°œê²¬ë˜ì—ˆìŠµë‹ˆë‹¤.</target> - <source>&Download</source> <target>다운로드(&D)</target> <source>FreeFileSync is up to date.</source> <target>FreeFileSync는 현재 ìµœì‹ ë²„ì „ ìƒíƒœìž…니다.</target> -<source>Information</source> -<target>ì¸í¬ë©”ì´ì…˜ (ì •ë³´)</target> - <source>Unable to connect to sourceforge.net.</source> <target>Sourceforge.netì— ì ‘ì†í• 수 없습니다.</target> @@ -636,20 +659,20 @@ The command is triggered if: <source>Hibernate</source> <target>ìµœëŒ€ì ˆì „ëª¨ë“œ</target> -<source>Selected variant:</source> -<target>ì„ íƒí•œ ë² ì–´ë¦¬ì–¸íŠ¸</target> +<source>Alternate comparison settings</source> +<target>ë¹„êµ ì„¤ì • 변경</target> -<source>Select alternate comparison settings</source> -<target>대체 ë¹„êµ ì„¤ì • ì„ íƒ</target> +<source>Alternate synchronization settings</source> +<target>ë™ê¸°í™” ì„¤ì • 변경</target> -<source>Select alternate synchronization settings</source> -<target>대체 ë™ê¸°í™” ì„¤ì • ì„ íƒ</target> +<source>Local filter</source> +<target>로컬 í•„í„°</target> -<source>Filter is active</source> -<target>í•„í„° 활성화</target> +<source>Active</source> +<target>활성화</target> -<source>No filter selected</source> -<target>ì„ íƒí•œ í•„í„°ê°€ ì—†ìŒ</target> +<source>None</source> +<target>ì•„ë¬´ê²ƒë„ ì•ˆ 함</target> <source>Remove alternate settings</source> <target>ëŒ€ì²´ì„¤ì • ì œê±°</target> @@ -663,8 +686,17 @@ The command is triggered if: <source>Paste</source> <target>붙여넣기</target> +<source>Alternate Comparison Settings</source> +<target>ë¹„êµ ì„¤ì • 변경</target> + +<source>Alternate Synchronization Settings</source> +<target>ë™ê¸°í™” ì„¤ì • 변경</target> + +<source>Local Filter</source> +<target>로컬 í•„í„°</target> + <source>&New</source> -<target>ì‹ ê·œ ìž‘ì—… (&N)</target> +<target>ì‹ ê·œ ìž‘ì—…(&N)</target> <source>&Save</source> <target>ì €ìž¥(&S)</target> @@ -678,15 +710,18 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. ë™ê¸°í™”(&S)</target> +<source>&Global settings</source> +<target>ì „ì²´ ì„¤ì •(&G)</target> + <source>&Language</source> <target>언어 ì„ íƒ(&L)</target> +<source>&Find...</source> +<target>찾기(&F)</target> + <source>&Export file list...</source> <target>íŒŒì¼ ë¦¬ìŠ¤íŠ¸ 내보내기(&E)</target> -<source>&Global settings</source> -<target>ì „ì²´ ì„¤ì •(&G)</target> - <source>&Tools</source> <target>ë„구(&T)</target> @@ -696,18 +731,12 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>ìžë™ìœ¼ë¡œ 주당 1회 확ì¸(&a)</target> -<source>Check for new &version</source> -<target>ì‹ ê·œ ë²„ì „ 확ì¸(&v)</target> +<source>&Check for new version</source> +<target>ì‹ ê·œ ë²„ì „ 확ì¸(&C)</target> <source>Compare</source> <target>비 êµ</target> -<source>Comparison settings</source> -<target>ë¹„êµ ì„¤ì •</target> - -<source>Synchronization settings</source> -<target>ë™ê¸°í™” ì„¤ì •</target> - <source>Synchronize</source> <target>ë™ ê¸° í™”</target> @@ -720,6 +749,15 @@ The command is triggered if: <source>Swap sides</source> <target>양측 위치 바꾸기</target> +<source>Close search bar</source> +<target>검색 ì°½ 닫기</target> + +<source>Find:</source> +<target>찾기:</target> + +<source>Match case</source> +<target>대문ìž/ì†Œë¬¸ìž êµ¬ë¶„</target> + <source>Save as batch job</source> <target>ì¼ê´„ 작업으로 ì €ìž¥</target> @@ -741,74 +779,20 @@ The command is triggered if: <source>Total bytes to copy</source> <target>ë³µì‚¬í• ì „ì²´ ë°”ì´íŠ¸ í¬ê¸°</target> -<source>Items found:</source> -<target>ë°œê²¬ëœ í•ëª©:</target> +<source>Select a variant:</source> +<target>ë² ì–´ë¦¬ì–¸íŠ¸ ì„ íƒ:</target> -<source>Speed:</source> -<target>ì†ë„:</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>ìˆ˜ì • 시간 ë° í¬ê¸°ë¥¼ 비êµí•˜ì—¬ ë™ì¼í•œ 파ì¼ì„ ì‹ë³„</target> -<source>Time remaining:</source> -<target>ë‚¨ì€ ì‹œê°„:</target> +<source>Identify equal files by comparing the file content.</source> +<target>íŒŒì¼ ë‚´ìš©ì„ ë¹„êµí•˜ì—¬ ë™ì¼í•œ 파ì¼ì„ ì‹ë³„</target> -<source>Time elapsed:</source> -<target>경과 시간:</target> +<source>Symbolic links:</source> +<target>ì‹¬ë³¼ë§ ë§í¬:</target> -<source>Synchronizing...</source> -<target>ë™ê¸°í™” ìž‘ì—… 중...</target> - -<source>Minimize to notification area</source> -<target>알림 ì˜ì—으로 최소화</target> - -<source>On completion</source> -<target>완료 ì‹œ</target> - -<source>Close</source> -<target>닫기</target> - -<source>&Pause</source> -<target>ì¼ì‹œì •ì§€(&P)</target> - -<source>Variant</source> -<target>ë² ì–´ë¦¬ì–¸íŠ¸</target> - -<source>Statistics</source> -<target>통계</target> - -<source>&Don't show this dialog again</source> -<target>ì´ ëŒ€í™” ì°½ì„ ë‹¤ì‹œ 표시 안 함 (&D)</target> - -<source>Select a variant</source> -<target>ë² ì–´ë¦¬ì–¸íŠ¸ ì„ íƒ</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -비êµëœ 양쪽 파ì¼ì€ -마지막 쓰기 시간과 ë‚ ì§œ, -ê·¸ë¦¬ê³ íŒŒì¼ í¬ê¸°ê°€ ëª¨ë‘ ê°™ì„ ê²½ìš°, -ë™ì¼í•œ 파ì¼ë¡œ 간주ë©ë‹ˆë‹¤. -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -비êµëœ 양쪽 파ì¼ì€ -íŒŒì¼ ë‚´ìš©ì´ ê°™ì„ ê²½ìš°, -ë™ì¼í•œ 파ì¼ë¡œ 간주ë©ë‹ˆë‹¤. -</target> - -<source>Symbolic Link handling</source> -<target>ì‹¬ë³¼ë¦ ë§í¬ 처리</target> - -<source>Help</source> -<target>ë„움ë§</target> +<source>More information</source> +<target>ìƒì„¸ ì •ë³´</target> <source>OK</source> <target>OK</target> @@ -816,10 +800,10 @@ is the same <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>양측 변경사í•ì„ 확ì¸í•˜ê³ ì „ë‹¬. ì‚ì œ, ì´ë™ ë° ì¶©ëŒì€ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 통해 ìžë™ìœ¼ë¡œ ê°ì§€ë©ë‹ˆë‹¤.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>좌측 í´ë” 백업 미러. ë™ê¸°í™” ì´í›„ 우측 í´ë”는 좌측 í´ë”와 ì™„ì „ížˆ ë˜‘ê°™ì´ ë§¤ì¹˜ ë˜ë„ë¡ ë³€ê²½ ë©ë‹ˆë‹¤.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>좌측 í´ë” 백업 미러 ìƒì„±: ë™ê¸°í™” ì´í›„ 좌측 ë° ìš°ì¸¡ í´ë”는 ì™„ì „ížˆ ë˜‘ê°™ì´ ë§¤ì¹˜ ë©ë‹ˆë‹¤.</target> -<source>Copy new or updated files to right folder.</source> +<source>Copy new and updated files to the right folder.</source> <target>ì‹ ê·œ ë˜ëŠ” ì—…ë°ì´íŠ¸ ëœ íŒŒì¼ì„ 우측 í´ë”ë¡œ 복사</target> <source>Configure your own synchronization rules.</source> @@ -831,23 +815,8 @@ is the same <source>Requires database files. Not supported by all file systems.</source> <target>ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì´ 필요합니다. ëª¨ë“ íŒŒì¼ ì‹œìŠ¤í…œì—ì„œ 지ì›ë˜ì§€ëŠ” 않습니다.</target> -<source>Error handling</source> -<target>오류 ë°œìƒì‹œ:</target> - -<source>Ignore</source> -<target>무시</target> - -<source>Hide all error and warning messages</source> -<target>ëª¨ë“ ì˜¤ë¥˜/ê²½ê³ ë©”ì„¸ì§€ 숨기기</target> - -<source>Pop-up</source> -<target>íŒì—…</target> - -<source>Show pop-up on errors or warnings</source> -<target>오류 ë˜ëŠ” ê²½ê³ ì— ëŒ€í•œ íŒì—… ë³´ì´ê¸°</target> - -<source>Deletion handling</source> -<target>ì‚ì œ 처리 옵션</target> +<source>Delete files:</source> +<target>íŒŒì¼ ì‚ì œ:</target> <source>Permanent</source> <target>ì˜êµ¬</target> @@ -855,8 +824,8 @@ is the same <source>Delete or overwrite files permanently</source> <target>íŒŒì¼ ì˜êµ¬ ì‚ì œ ë˜ëŠ” ë®ì–´ì“°ê¸°</target> -<source>Recycle bin</source> -<target>휴지통</target> +<source>&Recycle bin</source> +<target>휴지통(&R)</target> <source>Back up deleted and overwritten files in the recycle bin</source> <target>íœ´ì§€í†µì— ì‚ì œë˜ê³ ë®ì–´ 씌어진 íŒŒì¼ ë°±ì—…</target> @@ -870,56 +839,86 @@ is the same <source>Naming convention:</source> <target>ì´ë¦„ ì§€ì •:</target> -<source>Batch job</source> -<target>ì¼ê´„ ìž‘ì—…</target> +<source>Show examples</source> +<target>예 ë³´ì´ê¸°</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>ì§ì ‘ 지켜보지 않는 ìžë™ ë™ê¸°í™”ì˜ ê²½ìš°, 배치 파ì¼ì„ 만ë“니다. ì‹œìž‘í•˜ë ¤ë©´ 파ì¼ì„ ë”블 í´ë¦í•˜ê±°ë‚˜ ìž‘ì—… 플래너ì—ì„œ ì¼ì •ì„ 만ë“니다: %x</target> +<source>Handle errors:</source> +<target>오류 ë°œìƒì‹œ:</target> -<source>Exit</source> -<target>종료</target> +<source>Ignore</source> +<target>무시</target> -<source>Abort synchronization on first error</source> -<target>첫 번째 오류 ì‹œ ë™ê¸°í™” 중지</target> +<source>Hide all error and warning messages</source> +<target>ëª¨ë“ ì˜¤ë¥˜/ê²½ê³ ë©”ì„¸ì§€ 숨기기</target> -<source>Show progress dialog</source> -<target>진행 표시 ì°½ 보기</target> +<source>Pop-up</source> +<target>íŒì—…</target> -<source>Save log</source> -<target>로그 ì €ìž¥</target> +<source>Show pop-up on errors or warnings</source> +<target>오류 ë˜ëŠ” ê²½ê³ ì— ëŒ€í•œ íŒì—… ë³´ì´ê¸°</target> -<source>Select folder to save log files</source> -<target>로그 파ì¼ì„ ì €ìž¥í• í´ë” ì„ íƒ</target> +<source>On completion:</source> +<target>완료 ì‹œ:</target> -<source>Limit</source> -<target>ì œí•œ</target> +<source>Start synchronization now?</source> +<target>지금 ë™ê¸°í™”를 ì‹œìž‘í•˜ì‹œê² ìŠµë‹ˆê¹Œ?</target> -<source>Limit maximum number of log files</source> -<target>로그 파ì¼ì˜ 최대 개수 ì œí•œ</target> +<source>Variant:</source> +<target>ë² ì–´ë¦¬ì–¸íŠ¸:</target> -<source>Source code written in C++ using:</source> -<target>소스코드는 C++ 언어로 아래 íˆ´ì„ ì‚¬ìš©í•˜ì—¬ 작성ë˜ì—ˆìŠµë‹ˆë‹¤:</target> +<source>Statistics</source> +<target>통 계</target> -<source>If you like FreeFileSync</source> -<target>FreeFileSync를 위한 기부</target> +<source>&Don't show this dialog again</source> +<target>ì´ ëŒ€í™” ì°½ì„ ë‹¤ì‹œ 표시 안 함(&D)</target> -<source>Donate with PayPal</source> -<target>PayPalë¡œ 기부하기</target> +<source>Items found:</source> +<target>ë°œê²¬ëœ í•ëª©:</target> -<source>Many thanks for localization:</source> -<target>현지화 ìž‘ì—…ì— ê¹Šì€ ê°ì‚¬ 드립니다:</target> +<source>Speed:</source> +<target>ì†ë„:</target> -<source>Feedback and suggestions are welcome</source> -<target>ëª¨ë“ ì˜ê²¬ ë° ê±´ì˜/ì œì•ˆì„ í™˜ì˜í•©ë‹ˆë‹¤</target> +<source>Time remaining:</source> +<target>ë‚¨ì€ ì‹œê°„:</target> -<source>Homepage</source> -<target>홈페ì´ì§€</target> +<source>Time elapsed:</source> +<target>경과 시간:</target> -<source>Email</source> -<target>ì´ë©”ì¼</target> +<source>Synchronizing...</source> +<target>ë™ê¸°í™” ìž‘ì—… 중...</target> -<source>Published under the GNU General Public License</source> -<target>GNU ì¼ë°˜ 공용 ë¼ì´ì„¼ìŠ¤ì— ì˜í•œ 출시</target> +<source>Minimize to notification area</source> +<target>알림 ì˜ì—으로 최소화</target> + +<source>Close</source> +<target>닫기</target> + +<source>&Pause</source> +<target>ì¼ì‹œì •ì§€(&P)</target> + +<source>Stop</source> +<target>중지</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>ì§ì ‘ 지켜보지 않는 ìžë™ ë™ê¸°í™”ì˜ ê²½ìš°, 배치 파ì¼ì„ 만ë“니다. ì‹œìž‘í•˜ë ¤ë©´ 파ì¼ì„ ë”블 í´ë¦í•˜ê±°ë‚˜ ìž‘ì—… 플래너ì—ì„œ ì¼ì •ì„ 만ë“니다: %x</target> + +<source>Stop synchronization at first error</source> +<target>첫 오류 ë°œìƒ ì‹œ ë™ê¸°í™” 중지</target> + +<source>Show progress dialog</source> +<target>진행 표시 ì°½ 보기</target> + +<source>Save log:</source> +<target>로그 ì €ìž¥:</target> + +<source>Limit:</source> +<target>ì œí•œ:</target> + +<source>Limit maximum number of log files</source> +<target>로그 파ì¼ì˜ 최대 개수 ì œí•œ</target> + +<source>How can I schedule a batch job?</source> +<target>ì¼ê´„ ìž‘ì—… 예약 방법ì€?</target> <source>Delete on both sides</source> <target>양측 ëª¨ë‘ ì‚ì œ</target> @@ -927,109 +926,139 @@ is the same <source>Delete on both sides even if the file is selected on one side only</source> <target>ì–´ëŠ í•œìª½ì˜ íŒŒì¼ë§Œ ì„ íƒí•˜ë”ë¼ë„ 양측 ëª¨ë‘ ì‚ì œ</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -ëª¨ë“ í•„í„° ê·œì¹™ì— ì¤€í• ê²½ìš°ì—만 파ì¼ì„ ë™ê¸°í™” 시킵니다. -ì°¸ê³ : íŒŒì¼ ê²½ë¡œê°€ 기본 ë””ë ‰í† ë¦¬ì— ì—°ê²°ë¼ ìžˆì–´ì•¼ 합니다. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>ë™ê¸°í™”ì—ì„œ íŠ¹ì • 파ì¼ì„ ì œì™¸ì‹œí‚¤ëŠ” í•„í„° ê·œì¹™ì„ ì„ íƒí•©ë‹ˆë‹¤. 해당 í´ë” 페어(ì§)ì— ëŒ€í•œ ìƒëŒ€ íŒŒì¼ ê²½ë¡œë¥¼ ìž…ë ¥í•˜ì„¸ìš”.</target> -<source>Include</source> -<target>í¬í•¨</target> +<source>Include:</source> +<target>í¬í•¨:</target> -<source>Exclude</source> -<target>ì œì™¸</target> +<source>Exclude:</source> +<target>ì œì™¸:</target> -<source>Time span</source> -<target>시간간격(타임스팬)</target> +<source>Time span:</source> +<target>시간 간격:</target> -<source>File size</source> -<target>íŒŒì¼ í¬ê¸°</target> +<source>File size:</source> +<target>íŒŒì¼ í¬ê¸°:</target> -<source>Minimum</source> -<target>최소</target> +<source>Minimum:</source> +<target>최소:</target> -<source>Maximum</source> -<target>최대</target> +<source>Maximum:</source> +<target>최대:</target> <source>&Clear</source> <target>지우기(&C)</target> -<source>Global settings</source> -<target>ì „ì²´ ì„¤ì •</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>ë‹¤ìŒ ì„¤ì •ì€ ëª¨ë“ ë™ê¸°í™” ìž‘ì—…ì— ì‚¬ìš©ë©ë‹ˆë‹¤.</target> <source>Fail-safe file copy</source> <target>실패 - ì•ˆì „ íŒŒì¼ ë³µì‚¬</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>ì¼ë‹¨ 임시파ì¼(*.ffs_tmp)ë¡œ 복사한 후 ì´ë¦„ 바꾸기. ì´ ê°™ì´ í•¨ìœ¼ë¡œì¨ ì¹˜ëª…ì ì¸ ì˜¤ë¥˜ ë°œìƒì‹œì—ë„ ì¼ê´€ëœ ìƒíƒœ ìœ ì§€ë¥¼ 보장합니다.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +대ìƒì„ ë®ì–´ì“°ê¸° ì „ì— ìž„ì‹œíŒŒì¼(*.ffs_tmp)ë¡œ 복사. +ì´ëŠ” 심ê°í•œ 오류 ë°œìƒì‹œì—ë„ ì¼ê´€ëœ ìƒíƒœ ìœ ì§€ë¥¼ 보장합니다. +</target> + +<source>(recommended)</source> +<target>(권장)</target> <source>Copy locked files</source> <target>ë½ ê±¸ë¦° íŒŒì¼ ë³µì‚¬</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Volume Shadow Copy Service를 사용하여 ê³µìœ ë˜ëŠ” ìž ê¸´ íŒŒì¼ ë³µì‚¬ (ê´€ë¦¬ìž ê¶Œí•œ í•„ìš”)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Volume Shadow Copy Service를 사용하여 ê³µìœ ë˜ëŠ” ìž ê¸´ íŒŒì¼ ë³µì‚¬</target> + +<source>(requires administrator rights)</source> +<target>(ê´€ë¦¬ìž ê¶Œí•œ í•„ìš”)</target> <source>Copy file access permissions</source> <target>íŒŒì¼ ì ‘ê·¼ 권한 복사</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>íŒŒì¼ ë° í´ë” 권한 ì „ì†¡ (ê´€ë¦¬ìž ê¶Œí•œ í•„ìš”)</target> +<source>Transfer file and folder permissions.</source> +<target>íŒŒì¼ ë° í´ë” 권한 ì „ì†¡</target> + +<source>Automatic retry on error:</source> +<target>오류 ë°œìƒ ì‹œ ìžë™ 재시ë„:</target> -<source>Restore hidden dialogs</source> -<target>숨겨진 대화 ì°½ ë³µì›</target> +<source>Retry count:</source> +<target>ìž¬ì‹œë„ íšŸìˆ˜:</target> -<source>External applications</source> -<target>외부 ì‘ìš© 프로그램</target> +<source>Delay (in seconds):</source> +<target>지연 (ì´ˆ 단위):</target> + +<source>Customize context menu:</source> +<target>컨í…스트 메뉴 커스터마ì´ì¦ˆ (ì‚¬ìš©ìž ì •ì˜):</target> <source>Description</source> <target>설명</target> +<source>Restore hidden windows</source> +<target>숨겨진 ì°½ ë³µì›</target> + <source>&Default</source> <target>기본 ì„¤ì •/ê°’(&D)</target> -<source>Find what:</source> -<target>검색어:</target> +<source>Source code written in C++ using:</source> +<target>소스코드는 C++ 언어로 아래 íˆ´ì„ ì‚¬ìš©í•˜ì—¬ 작성ë˜ì—ˆìŠµë‹ˆë‹¤:</target> -<source>Match case</source> -<target>대문ìž/ì†Œë¬¸ìž êµ¬ë¶„</target> +<source>If you like FreeFileSync</source> +<target>FreeFileSync를 위한 기부</target> -<source>&Find next</source> -<target>ë‹¤ìŒ ê²€ìƒ‰(&F)</target> +<source>Donate with PayPal</source> +<target>PayPalë¡œ 기부하기</target> -<source>Start synchronization</source> -<target>ë™ê¸°í™” 시작</target> +<source>Feedback and suggestions are welcome</source> +<target>ëª¨ë“ ì˜ê²¬ ë° ê±´ì˜/ì œì•ˆì„ í™˜ì˜í•©ë‹ˆë‹¤</target> -<source>Delete</source> -<target>ì‚ì œ</target> +<source>Homepage</source> +<target>홈페ì´ì§€</target> -<source>Configure filter</source> -<target>í•„í„° ì„¤ì •</target> +<source>Email</source> +<target>ì´ë©”ì¼</target> -<source>Find</source> -<target>검색</target> +<source>Published under the GNU General Public License</source> +<target>GNU ì¼ë°˜ 공용 ë¼ì´ì„¼ìŠ¤ì— ì˜í•œ 출시</target> -<source>Select time span</source> +<source>Many thanks for localization:</source> +<target>현지화 ìž‘ì—…ì— ê¹Šì€ ê°ì‚¬ 드립니다:</target> + +<source>Save as Batch Job</source> +<target>ì¼ê´„ 작업으로 ì €ìž¥</target> + +<source>Delete Items</source> +<target>í•ëª© ì‚ì œ</target> + +<source>Global Settings</source> +<target>ì „ì²´ ì„¤ì •</target> + +<source>Select Time Span</source> <target>시간간격(타임스팬) ì„ íƒ</target> -<source>Folder pairs</source> +<source>Folder Pairs</source> <target>í´ë” 페어(ì§)</target> +<source>Find</source> +<target>검색</target> + <source>Overview</source> <target>개요</target> <source>Configuration</source> <target>구성 ì„¤ì •</target> -<source>Main bar</source> +<source>Main Bar</source> <target>ë©”ì¸ ë°”</target> -<source>Filter files</source> +<source>Filter Files</source> <target>íŒŒì¼ í•„í„°</target> -<source>Select view</source> +<source>Select View</source> <target>보기 ì„ íƒ</target> <source>Open...</source> @@ -1041,17 +1070,26 @@ Note: File paths must be relative to base directories. <source>Compare both sides</source> <target>양측 비êµ</target> +<source>Comparison settings</source> +<target>ë¹„êµ ì„¤ì •</target> + +<source>Synchronization settings</source> +<target>ë™ê¸°í™” ì„¤ì •</target> + +<source>Start synchronization</source> +<target>ë™ê¸°í™” 시작</target> + +<source>Confirm</source> +<target>확ì¸</target> + <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> <pluralform>ì •ë§ë¡œ %x í•ëª©ì„ 위해 %y ëª…ë ¹ì„ ì‹¤í–‰í•˜ê¸°ë¥¼ ì›í•˜ì‹ë‹ˆê¹Œ?</pluralform> </target> -<source>Confirm</source> -<target>확ì¸</target> - <source>&Execute</source> <target>실행(&E)</target> @@ -1082,12 +1120,6 @@ Note: File paths must be relative to base directories. <source>Set direction:</source> <target>ë°©í–¥ ì„¤ì •:</target> -<source>Exclude temporarily</source> -<target>ìž„ì‹œ ì œì™¸</target> - -<source>Include temporarily</source> -<target>ìž„ì‹œ í¬í•¨</target> - <source>multiple selection</source> <target>복수 ì„ íƒ</target> @@ -1095,7 +1127,16 @@ Note: File paths must be relative to base directories. <target>필터를 통해 다ìŒì„ í¬í•¨:</target> <source>Exclude via filter:</source> -<target>필터를 통하여 ì œì™¸</target> +<target>필터를 통해 다ìŒì„ ì œì™¸:</target> + +<source>Exclude temporarily</source> +<target>ìž„ì‹œ ì œì™¸</target> + +<source>Include temporarily</source> +<target>ìž„ì‹œ í¬í•¨</target> + +<source>Delete</source> +<target>ì‚ì œ</target> <source>Include all</source> <target>ëª¨ë‘ í¬í•¨</target> @@ -1139,11 +1180,14 @@ Note: File paths must be relative to base directories. <source>Do you want to save changes to %x?</source> <target>%xì˜ ë³€ê²½ì‚¬í•ì„ ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ?</target> +<source>Never save &changes</source> +<target>변경사í•ì„ ì ˆëŒ€ ì €ìž¥í•˜ê¸° 않기(&c)</target> + <source>Do&n't save</source> <target>ì €ìž¥í•˜ê¸° 않기(&n)</target> -<source>Never save &changes</source> -<target>변경사í•ì„ ì ˆëŒ€ ì €ìž¥í•˜ê¸° 않기(&c)</target> +<source>Filter</source> +<target>í•„í„°</target> <source>Show files that exist on left side only</source> <target>좌측ì—만 존재하는 íŒŒì¼ í‘œì‹œ</target> @@ -1190,12 +1234,18 @@ Note: File paths must be relative to base directories. <source>Set as default</source> <target>기본 값으로 ì„¤ì •</target> -<source>Operation aborted</source> -<target>ìž‘ì—… 중단</target> - <source>All folders are in sync</source> <target>ëª¨ë“ í´ë”ê°€ ë™ê¸°í™” ë˜ì—ˆìŒ</target> +<source>Synchronization Settings</source> +<target>ë™ê¸°í™” ì„¤ì •</target> + +<source>Comparison Settings</source> +<target>ë¹„êµ ì„¤ì •</target> + +<source>Cannot find %x</source> +<target>%xì„(를) ì°¾ì„ ìˆ˜ 없습니다.</target> + <source>Comma-separated values</source> <target>쉼표로 êµ¬ë¶„ëœ ê°’</target> @@ -1205,30 +1255,6 @@ Note: File paths must be relative to base directories. <source>Searching for program updates...</source> <target>프로그램 ì—…ë°ì´íŠ¸ 검색 중...</target> -<source>&Ignore subsequent errors</source> -<target>ì´í›„ 오류 무시(&I)</target> - -<source>&Ignore</source> -<target>무시(&I)</target> - -<source>Fatal Error</source> -<target>치명ì 오류</target> - -<source>&Don't show this warning again</source> -<target>ì´ ê²½ê³ ë¥¼ 다시 표시하지 ì•ŠìŒ(&D)</target> - -<source>&Switch</source> -<target>스위치[ì „í™˜](&S)</target> - -<source>Question</source> -<target>질문</target> - -<source>&Yes</source> -<target>예(&Y)</target> - -<source>&No</source> -<target>아니오(&N)</target> - <source>Scanning...</source> <target>스캔 중...</target> @@ -1238,14 +1264,17 @@ Note: File paths must be relative to base directories. <source>Info</source> <target>ì •ë³´</target> +<source>Warning</source> +<target>ê²½ê³ </target> + <source>Paused</source> <target>ì¼ì‹œì •ì§€ 중</target> <source>Initializing...</source> <target>초기화 ìž‘ì—… 중...</target> -<source>Aborted</source> -<target>중단ë¨</target> +<source>Stopped</source> +<target>중단</target> <source>Completed</source> <target>완료</target> @@ -1256,12 +1285,6 @@ Note: File paths must be relative to base directories. <source>Log</source> <target>로그</target> -<source>Cannot find %x</source> -<target>%xì„(를) ì°¾ì„ ìˆ˜ 없습니다.</target> - -<source>Inactive</source> -<target>비활성화</target> - <source>Today</source> <target>오늘</target> @@ -1286,9 +1309,6 @@ Note: File paths must be relative to base directories. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>í•„í„°</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1297,6 +1317,9 @@ Note: File paths must be relative to base directories. <pluralform>ë‹¤ìŒ %x í•ëª©ì„ ì •ë§ë¡œ 휴지통으로 ì´ë™í•˜ê¸°ë¥¼ ì›í•˜ì‹ë‹ˆê¹Œ?</pluralform> </target> +<source>Move</source> +<target>ì´ë™</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1305,6 +1328,9 @@ Note: File paths must be relative to base directories. <pluralform>ì •ë§ë¡œ ë‹¤ìŒ %x í•ëª©(들)ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?</pluralform> </target> +<source>Exclude</source> +<target>ì œì™¸</target> + <source>Direct</source> <target>다ì´ë ‰íŠ¸</target> @@ -1329,8 +1355,8 @@ Note: File paths must be relative to base directories. <source>- Other side's counterpart to %item_folder%</source> <target>% í•ëª©_í´ë” %ì˜ ë°˜ëŒ€íŽ¸ 대ì‘부(카운터파트)</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>숨겨진 ê²½ê³ ì°½ ë˜ëŠ” 대화 ì°½ì„ ë‹¤ì‹œ ë³´ì´ê²Œ í•˜ì‹œê² ìŠµë‹ˆê¹Œ?</target> +<source>Restore all hidden windows and warnings?</source> +<target>ëª¨ë“ ìˆ¨ê²¨ì§„ ì°½ ë° ê²½ê³ ë¥¼ ë³µì›í•˜ì‹œê² 습니까?</target> <source>Leave as unresolved conflict</source> <target>미해결 충ëŒë¡œ 놔ë‘기</target> @@ -1452,17 +1478,17 @@ Note: File paths must be relative to base directories. <pluralform>%xì¼</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>시스템 메시지를 받기 위한 등ë¡ì— 실패하였습니다.</target> +<source>Unable to register to receive system messages.</source> +<target>시스템 메시지 ìˆ˜ì‹ ì„ ìœ„í•œ 등ë¡ì„ í• ìˆ˜ 없습니다.</target> <source>Cannot set privilege %x.</source> <target>권한 %xì„(를) ì„¤ì •í• ìˆ˜ 없습니다.</target> -<source>Failed to suspend system sleep mode.</source> -<target>시스템 ì ˆì „ëª¨ë“œ 중지 실패</target> +<source>Unable to suspend system sleep mode.</source> +<target>시스템 ì ˆì „ëª¨ë“œ 중지를 í• ìˆ˜ 없습니다.</target> <source>Cannot change process I/O priorities.</source> -<target>I/O ìš°ì„ ìˆœìœ„ 프로세스 변경 불가</target> +<target>프로세스 I/O ìš°ì„ ìˆœìœ„ ë³€ê²½ì„ í• ìˆ˜ 없습니다.</target> <source>Unable to move %x to the recycle bin.</source> <target>휴지통으로 %xì„(를) ì´ë™í• 수 없습니다.</target> diff --git a/BUILD/Languages/lithuanian.lng b/BUILD/Languages/outdated/lithuanian.lng index 032b8ee6..d503fa7e 100644 --- a/BUILD/Languages/lithuanian.lng +++ b/BUILD/Languages/outdated/lithuanian.lng @@ -2,20 +2,44 @@ <language>Lietuvių</language> <translator>Tadas Norbutas</translator> <locale>lt_LT</locale> - <flag_image>flag_lithuania.png</flag_image> - <plural_form_count>4</plural_form_count> + <image>flag_lithuania.png</image> + <plural_count>4</plural_count> <plural_definition>n==1 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3</plural_definition> </header> +<source>Unable to suspend system sleep mode.</source> +<target></target> + +<source>Unable to register to receive system messages.</source> +<target></target> + +<source>Restore all hidden windows and warnings?</source> +<target></target> + +<source>Move</source> +<target></target> + <source>&Continue</source> <target></target> +<source>Stopped</source> +<target></target> + <source>&Don't show this warning again</source> <target></target> +<source>Serious Error</source> +<target></target> + <source>&Ignore subsequent errors</source> <target></target> +<source>Comparison Settings</source> +<target></target> + +<source>Synchronization Settings</source> +<target></target> + <source>Never save &changes</source> <target></target> @@ -29,24 +53,254 @@ <source>&Execute</source> <target></target> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>Select View</source> +<target></target> + +<source>Filter Files</source> +<target></target> + +<source>Main Bar</source> +<target></target> + +<source>Folder Pairs</source> +<target></target> + +<source>Select Time Span</source> +<target></target> + +<source>Global Settings</source> +<target></target> + +<source>Delete Items</source> +<target></target> + +<source>Save as Batch Job</source> +<target></target> + +<source>Restore hidden windows</source> +<target></target> + +<source>Customize context menu:</source> +<target></target> + +<source>Delay (in seconds):</source> +<target></target> + +<source>Retry count:</source> +<target></target> + +<source>Automatic retry on error:</source> +<target></target> + +<source>Transfer file and folder permissions.</source> +<target></target> + +<source>(requires administrator rights)</source> +<target></target> + +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target></target> + +<source>(recommended)</source> +<target></target> + +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target></target> + +<source>The following settings are used for all synchronization jobs.</source> +<target></target> + +<source>Maximum:</source> +<target></target> + +<source>Minimum:</source> +<target></target> + +<source>File size:</source> +<target></target> + +<source>Time span:</source> +<target></target> + +<source>Exclude:</source> +<target></target> + +<source>Include:</source> +<target></target> + +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target></target> + +<source>&Recycle bin</source> +<target></target> + +<source>How can I schedule a batch job?</source> +<target></target> + +<source>Limit:</source> +<target></target> + +<source>Save log:</source> +<target></target> + +<source>Stop synchronization at first error</source> +<target></target> + +<source>Stop</source> +<target></target> + <source>&Don't show this dialog again</source> <target></target> +<source>Variant:</source> +<target></target> + +<source>Start synchronization now?</source> +<target></target> + +<source>On completion:</source> +<target></target> + +<source>Handle errors:</source> +<target></target> + +<source>Show examples</source> +<target></target> + +<source>Delete files:</source> +<target></target> + +<source>Copy new and updated files to the right folder.</source> +<target></target> + +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target></target> + +<source>More information</source> +<target></target> + +<source>Symbolic links:</source> +<target></target> + +<source>Identify equal files by comparing the file content.</source> +<target></target> + +<source>Identify equal files by comparing modification time and size.</source> +<target></target> + +<source>Select a variant:</source> +<target></target> + +<source>Find:</source> +<target></target> + <source>Close search bar</source> <target></target> -<source>Check for new &version</source> +<source>&Check for new version</source> <target></target> <source>&Tools</source> <target></target> +<source>&Find...</source> +<target></target> + +<source>Local Filter</source> +<target></target> + +<source>Alternate Synchronization Settings</source> +<target></target> + +<source>Alternate Comparison Settings</source> +<target></target> + +<source>None</source> +<target></target> + +<source>Active</source> +<target></target> + +<source>Local filter</source> +<target></target> + +<source>Alternate synchronization settings</source> +<target></target> + +<source>Alternate comparison settings</source> +<target></target> + <source>&Download</source> <target></target> +<source>Check for Program Updates</source> +<target></target> + +<source>Retrying operation</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + +<source>Switching to FreeFileSync's main window</source> +<target></target> + +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target></target> + +<source>Synchronization stopped</source> +<target></target> + +<source>Please enter a target folder for versioning.</source> +<target></target> + +<source>Incorrect command line:</source> +<target></target> + <source>&Show error</source> <target></target> +<source>Automated Synchronization</source> +<target></target> + +<source>&Start</source> +<target></target> + +<source>Command line:</source> +<target></target> + +<source>Idle time (in seconds):</source> +<target></target> + +<source>Folders to watch:</source> +<target></target> + +<source>&View help</source> +<target></target> + +<source>Unable to create timestamp for versioning:</source> +<target></target> + +<source>Stop requested: Waiting for current operation to finish...</source> +<target></target> + +<source>%x items/sec</source> +<target></target> + <source> <pluralform>1 thread</pluralform> <pluralform>%x threads</pluralform> @@ -330,9 +584,6 @@ <source>/sec</source> <target>/sek.</target> -<source>%x items</source> -<target>%x pozicijos</target> - <source>Configuration file %x loaded partially only.</source> <target>Nustatymų failas %x įkeltas tik dalinai.</target> @@ -360,12 +611,6 @@ <source>Volume name %x is not part of file path %y.</source> <target>Vietos vardas %x nÄ—ra failo kelio %y dalis.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Nutraukti: laukiama kol baigsis esama operacija...</target> - -<source>Failure to create timestamp for versioning:</source> -<target>Nepavyo sukurti laiko žymÄ—s versijavimui:</target> - <source>Cannot read the following XML elements:</source> <target>Nepavyksta perskaityti sekanÄių XML elementų:</target> @@ -381,9 +626,6 @@ <source>&Program</source> <target>&Programa</target> -<source>&Content</source> -<target>&Turinys</target> - <source>&About</source> <target>&Apie</target> @@ -405,9 +647,6 @@ <source>To get started just import a .ffs_batch file.</source> <target>Kad pradÄ—ti tiesiog importuokite .ffs_batch failÄ….</target> -<source>Folders to watch</source> -<target>Stebimi aplankai</target> - <source>Add folder</source> <target>PridÄ—ti aplankÄ…</target> @@ -420,9 +659,6 @@ <source>Select a folder</source> <target>PažymÄ—ti aplankÄ…</target> -<source>Idle time [seconds]</source> -<target>Neveiklus laikas [sek.]</target> - <source>Idle time between last detected change and execution of command</source> <target>Neveiklus laikas tarp paskutinio aptikto pokyÄio ir komandos įvykdymo</target> @@ -437,18 +673,12 @@ Komanda inicijuojama jei: - atsiranda nauji aplankai (pvz.: įkiÅ¡amas USB raktas) </target> -<source>Start</source> -<target>PradÄ—ti</target> - <source>&Retry</source> <target>&Bandyti vÄ—l</target> <source>Cancel</source> <target>AtÅ¡aukti</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Automatizuotas sinchronizavimas</target> - <source>Build: %x</source> <target>Versija: %x</target> @@ -470,9 +700,6 @@ Komanda inicijuojama jei: <source>&Exit</source> <target>&IÅ¡eiti</target> -<source>Invalid command line:</source> -<target>Netinkama komandinÄ— eilutÄ—:</target> - <source>File content</source> <target>Failo turinį</target> @@ -533,9 +760,6 @@ Komanda inicijuojama jei: <source>Target folder input field must not be empty.</source> <target>Tikslo aplanko įvesties laukas negali bÅ«ti tuÅ¡Äias.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Aplanko įvesties laukas versijavimui negali bÅ«ti tuÅ¡Äias.</target> - <source>Source folder %x not found.</source> <target>Å altinio aplankas %x nerastas.</target> @@ -572,9 +796,6 @@ Komanda inicijuojama jei: <source>job name</source> <target>Užduoties pavadinimas</target> -<source>Synchronization aborted</source> -<target>Synchronizavimas nutrauktas</target> - <source>Synchronization completed with errors</source> <target>Synchronizavimas baigtas su klaidomis</target> @@ -590,24 +811,12 @@ Komanda inicijuojama jei: <source>Saving log file %x...</source> <target>Saugmas žurnalo failas %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Spauskite „Perjungti“, kad iÅ¡sprÄ™sti problemas pagrindiniame FreeFileSync lange.</target> - -<source>Switching to FreeFileSync main dialog</source> -<target>KeiÄiama į pagrindinį FreeFileSync langÄ…</target> - -<source>Retrying operation after error:</source> -<target>Po klaidos kartojama operacija:</target> - <source>A new version of FreeFileSync is available:</source> <target>Yra nauja FreeFileSync versija:</target> <source>Download now?</source> <target>Atsiųsti dabar?</target> -<source>New version found</source> -<target>Rasta nauja versija</target> - <source>FreeFileSync is up to date.</source> <target>FreeFileSync yra naujausia.</target> @@ -671,21 +880,6 @@ Komanda inicijuojama jei: <source>Hibernate</source> <target>Stabdyti į operatyviÄ…jÄ… atmintį</target> -<source>Selected variant:</source> -<target>Pasirinktas variantas:</target> - -<source>Select alternate comparison settings</source> -<target>Pasirinkite alternatyvius sulyginimo nustatymus</target> - -<source>Select alternate synchronization settings</source> -<target>Pasirinkite alternatyvius sinchronizavimo nustatymus</target> - -<source>Filter is active</source> -<target>Filtas yra aktyvus</target> - -<source>No filter selected</source> -<target>NepažymÄ—ti jokie filtrai</target> - <source>Remove alternate settings</source> <target>PaÅ¡alinti alternatyvius nustatymus</target> @@ -713,15 +907,15 @@ Komanda inicijuojama jei: <source>2. &Synchronize</source> <target>2. &Sinchronizuoti</target> +<source>&Global settings</source> +<target>&Bendri nustatymai</target> + <source>&Language</source> <target>&Kalba</target> <source>&Export file list...</source> <target>&Eksportuoti failų sÄ…raÅ¡Ä…...</target> -<source>&Global settings</source> -<target>&Bendri nustatymai</target> - <source>&Check now</source> <target>&Tikrinti dabar</target> @@ -743,9 +937,6 @@ Komanda inicijuojama jei: <source>Swap sides</source> <target>Sukeisti puses</target> -<source>Find what:</source> -<target>Rasti kas:</target> - <source>Match case</source> <target>Atitikti atvejÄ…</target> @@ -770,84 +961,12 @@ Komanda inicijuojama jei: <source>Total bytes to copy</source> <target>Viso baitų kopijuoti</target> -<source>Items found:</source> -<target>Rasta elementų:</target> - -<source>Speed:</source> -<target>Greitis:</target> - -<source>Time remaining:</source> -<target>LikÄ™s laikas:</target> - -<source>Time elapsed:</source> -<target>PraÄ—jÄ™s laikas:</target> - -<source>Synchronizing...</source> -<target>Sinchronizuojama...</target> - -<source>Minimize to notification area</source> -<target>Nuleisti į apaÄiÄ… deÅ¡inÄ—je</target> - -<source>On completion</source> -<target>Baigus</target> - -<source>Close</source> -<target>Uždaryti</target> - -<source>&Pause</source> -<target>&PauzÄ—</target> - -<source>Variant</source> -<target>Variantas</target> - -<source>Statistics</source> -<target>Statistika</target> - -<source>Select a variant</source> -<target>Pasirinkti</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Failai laikomi lygiais jei - - paskutinis raÅ¡ymo laikas ir data - - failo dydis -yra tokie patys -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Failai laikomi lygiais jei - - failo turinys -yra toks pats -</target> - -<source>Symbolic Link handling</source> -<target>Simbolinių nuorodų valdymas</target> - -<source>Help</source> -<target>Pagalba</target> - <source>OK</source> <target>Gerai</target> <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Nustatyti ir skatinti pokyÄius apbiejose pusÄ—se. Trinimai, perkÄ—limai ir konfliktai yra aptinkami automatiÅ¡kai naudojant duomenų bazÄ™.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>VeidrodinÄ— kairiojo aplanko kopija. DeÅ¡inysis aplankas yra pakeiÄiamas taip, kad po sinchronizavimo tiksliai atitiktų kairyjį aplankÄ….</target> - -<source>Copy new or updated files to right folder.</source> -<target>Kopijuoti naujus ar atnaujintus failus į deÅ¡inyjį aplankÄ….</target> - <source>Configure your own synchronization rules.</source> <target>Nustatyti JÅ«sų paÄių sinchronizavimo taisykles.</target> @@ -857,24 +976,6 @@ yra toks pats <source>Requires database files. Not supported by all file systems.</source> <target>Reikalauja duomenų bazÄ—s failų. Visų failų sistemų nÄ—ra palaikoma.</target> -<source>Error handling</source> -<target>Klaidų valdymas</target> - -<source>Ignore</source> -<target>Ignoruoti</target> - -<source>Hide all error and warning messages</source> -<target>SlÄ—pti visus klaidų ir perspÄ—jimų praneÅ¡imus</target> - -<source>Pop-up</source> -<target>IÅ¡Å¡okti</target> - -<source>Show pop-up on errors or warnings</source> -<target>Rodyti praneÅ¡imÄ… esant klaidoms ar perspÄ—jimams</target> - -<source>Deletion handling</source> -<target>Trinimo valdymas</target> - <source>Permanent</source> <target>VisiÅ¡kai</target> @@ -896,96 +997,72 @@ yra toks pats <source>Naming convention:</source> <target>Pavadinimų taisyklÄ—s:</target> -<source>Batch job</source> -<target>PaketinÄ— užduotis</target> +<source>Ignore</source> +<target>Ignoruoti</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Sukurti paleidimo failÄ… sinchronizacijai be priežiÅ«ros. Norint jį paleisti reikia paspausti and failo du kartus pele arba nustatyti su užduoÄių planuotoju: %x</target> +<source>Hide all error and warning messages</source> +<target>SlÄ—pti visus klaidų ir perspÄ—jimų praneÅ¡imus</target> -<source>Exit</source> -<target>IÅ¡eiti</target> +<source>Pop-up</source> +<target>IÅ¡Å¡okti</target> -<source>Abort synchronization on first error</source> -<target>Nutraukti sinchronizavimÄ… su pirma klaida</target> +<source>Show pop-up on errors or warnings</source> +<target>Rodyti praneÅ¡imÄ… esant klaidoms ar perspÄ—jimams</target> -<source>Show progress dialog</source> -<target>Rodyti eigos langÄ…</target> +<source>Statistics</source> +<target>Statistika</target> -<source>Save log</source> -<target>Saugoti žurnalus</target> +<source>Items found:</source> +<target>Rasta elementų:</target> -<source>Select folder to save log files</source> -<target>Pasirinkite aplankÄ… ataskaitos failų saugojimui</target> +<source>Speed:</source> +<target>Greitis:</target> -<source>Limit</source> -<target>Riba</target> +<source>Time remaining:</source> +<target>LikÄ™s laikas:</target> -<source>Limit maximum number of log files</source> -<target>Apriboti ataskaitų failų skaiÄių</target> +<source>Time elapsed:</source> +<target>PraÄ—jÄ™s laikas:</target> -<source>Delete on both sides</source> -<target>IÅ¡trinti abiejose pusÄ—se</target> +<source>Synchronizing...</source> +<target>Sinchronizuojama...</target> -<source>Delete on both sides even if the file is selected on one side only</source> -<target>IÅ¡trinti abiejose pusÄ—se net jei failas yra pažymÄ—tas tik vienoje pusÄ—je</target> +<source>Minimize to notification area</source> +<target>Nuleisti į apaÄiÄ… deÅ¡inÄ—je</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Failai gali bÅ«ti sinchronizuoti tik tada, kai atitinka filtrų taisykles -Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų -</target> +<source>Close</source> +<target>Uždaryti</target> -<source>Include</source> -<target>Ä®traukti</target> +<source>&Pause</source> +<target>&PauzÄ—</target> -<source>Exclude</source> -<target>Neįtraukti</target> +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Sukurti paleidimo failÄ… sinchronizacijai be priežiÅ«ros. Norint jį paleisti reikia paspausti and failo du kartus pele arba nustatyti su užduoÄių planuotoju: %x</target> -<source>Time span</source> -<target>Laiko tarpas</target> +<source>Show progress dialog</source> +<target>Rodyti eigos langÄ…</target> -<source>File size</source> -<target>Failo dydis</target> +<source>Limit maximum number of log files</source> +<target>Apriboti ataskaitų failų skaiÄių</target> -<source>Minimum</source> -<target>Mažiausiai</target> +<source>Delete on both sides</source> +<target>IÅ¡trinti abiejose pusÄ—se</target> -<source>Maximum</source> -<target>Daugiausiai</target> +<source>Delete on both sides even if the file is selected on one side only</source> +<target>IÅ¡trinti abiejose pusÄ—se net jei failas yra pažymÄ—tas tik vienoje pusÄ—je</target> <source>&Clear</source> <target>&IÅ¡valyti</target> -<source>Global settings</source> -<target>Bendri nustatymai</target> - <source>Fail-safe file copy</source> <target>ApsauginÄ— failo kopija</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Kopijuoti į laikinÄ… failÄ… (*.ffs_tmp), o tik po to pervadinti. Tai garantuojÄ… stabiliÄ… bÅ«senÄ… net įvykus nepataisomai klaidai.</target> - <source>Copy locked files</source> <target>Kopijuoti užrakintus failus</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Kopijuoti bendrintus ar užrakintus failus naudojant Volume Shadow Copy paslaugÄ… (administratoriaus teisÄ—s privalomos)</target> - <source>Copy file access permissions</source> <target>Kopijuoti failo leidimus</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>IÅ¡saugoti failų ir katalogų teises (administratoriaus teisÄ—s privalomos)</target> - -<source>Restore hidden dialogs</source> -<target>Atstatyti paslÄ—ptus langus</target> - -<source>External applications</source> -<target>IÅ¡orinÄ—s programos</target> - <source>Description</source> <target>ApibÅ«dinimas</target> @@ -1016,27 +1093,6 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <source>Many thanks for localization:</source> <target>Labai dÄ—kojame už vertimÄ…:</target> -<source>Start synchronization</source> -<target>PradÄ—ti sinchronizavimÄ…</target> - -<source>Comparison settings</source> -<target>Sulyginimo nustatymai</target> - -<source>Synchronization settings</source> -<target>Sinchronizavimo nustatymai</target> - -<source>Delete</source> -<target>Trinti</target> - -<source>Configure filter</source> -<target>Nustatyti filtrÄ…</target> - -<source>Select time span</source> -<target>PažymÄ—ti laiko trukmÄ™</target> - -<source>Folder pairs</source> -<target>Aplankų poros</target> - <source>Find</source> <target>Rasti</target> @@ -1046,15 +1102,6 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <source>Configuration</source> <target>Nustatymai</target> -<source>Main bar</source> -<target>PagrindinÄ— juosta</target> - -<source>Filter files</source> -<target>Filtruoti failus</target> - -<source>Select view</source> -<target>Pasirinkti rodomus</target> - <source>Open...</source> <target>Atverti...</target> @@ -1064,16 +1111,14 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <source>Compare both sides</source> <target>Sulyginti abi puses</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Ar tikrai norite paleisti %y komandÄ… 1-ai pozicijai?</pluralform> -<pluralform>Ar tikrai norite paleisti %y komandÄ… %x pozicijoms?</pluralform> -<pluralform>Ar tikrai norite paleisti %y komandÄ… %x pozicijų?</pluralform> -<pluralform>Ar tikrai norite paleisti %y komandÄ… %x pozicijai?</pluralform> -</target> +<source>Comparison settings</source> +<target>Sulyginimo nustatymai</target> + +<source>Synchronization settings</source> +<target>Sinchronizavimo nustatymai</target> + +<source>Start synchronization</source> +<target>PradÄ—ti sinchronizavimÄ…</target> <source>Confirm</source> <target>Patvirtinti</target> @@ -1118,6 +1163,9 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <source>Include temporarily</source> <target>Ä®traukti laikinai</target> +<source>Delete</source> +<target>Trinti</target> + <source>Include all</source> <target>Ä®traukti visus</target> @@ -1163,6 +1211,9 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <source>Do&n't save</source> <target>&Nesaugoti</target> +<source>Filter</source> +<target>Filtras</target> + <source>Show files that exist on left side only</source> <target>Rodyti failus, kurie egzistuoja tik kairÄ—je pusÄ—je</target> @@ -1208,9 +1259,6 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <source>Set as default</source> <target>Nustatyti kaip numatytÄ…</target> -<source>Operation aborted</source> -<target>Operacija nutraukta</target> - <source>All folders are in sync</source> <target>Visi aplankai susinchronizuoti</target> @@ -1229,15 +1277,9 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <source>&Ignore</source> <target>&Ignoruoti</target> -<source>Fatal Error</source> -<target>KritinÄ— klaida</target> - <source>&Switch</source> <target>&Perjungti</target> -<source>Question</source> -<target>Klausimas</target> - <source>&Yes</source> <target>&Taip</target> @@ -1259,18 +1301,12 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <source>Initializing...</source> <target>Pradedama...</target> -<source>Aborted</source> -<target>Nutraukta</target> - <source>Completed</source> <target>Baigta</target> <source>Log</source> <target>Archyvas</target> -<source>Inactive</source> -<target>Neaktyvus</target> - <source>Today</source> <target>Å iandien</target> @@ -1295,9 +1331,6 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filtras</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1320,6 +1353,9 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <pluralform>Ar tikrai norite iÅ¡trinti šį %x elementÄ…?</pluralform> </target> +<source>Exclude</source> +<target>Neįtraukti</target> + <source>Direct</source> <target>Tiesiogiai</target> @@ -1344,9 +1380,6 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <source>- Other side's counterpart to %item_folder%</source> <target>- Kitos pusÄ—s atitikmuo %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Ar vÄ—l rodyti paslÄ—ptus perspÄ—jimus ir langus?</target> - <source>Leave as unresolved conflict</source> <target>Palikti kaip neiÅ¡prÄ™stÄ… konfliktÄ…</target> @@ -1476,15 +1509,9 @@ Pastaba: Failų keliai turi bÅ«ti nurodyti tik iki pagrindinių katalogų <pluralform>%x diena</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Užregistruoti sistemos praneÅ¡imų gavimui nepavyko</target> - <source>Cannot set privilege %x.</source> <target>Nepavyksta nustatyti privilegijos %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Nepavyko sustabdyti sistemos į miegojimo veiksenÄ….</target> - <source>Cannot change process I/O priorities.</source> <target>Nepavyksta pakeisti proceso I/O prioritetų.</target> diff --git a/BUILD/Languages/outdated/norwegian.lng b/BUILD/Languages/outdated/norwegian.lng index 2e50c49d..e965718f 100644 --- a/BUILD/Languages/outdated/norwegian.lng +++ b/BUILD/Languages/outdated/norwegian.lng @@ -2,8 +2,8 @@ <language>Norsk</language> <translator>Bjørn Snoen</translator> <locale>nb_NO</locale> - <flag_image>flag_norway.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_norway.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> @@ -13,7 +13,10 @@ <source>Unable to move %x to the recycle bin.</source> <target></target> -<source>Failed to register to receive system messages.</source> +<source>Unable to suspend system sleep mode.</source> +<target></target> + +<source>Unable to register to receive system messages.</source> <target></target> <source>Cannot create symbolic link %x.</source> @@ -25,6 +28,9 @@ <source>Time stamp</source> <target></target> +<source>Restore all hidden windows and warnings?</source> +<target></target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -32,6 +38,9 @@ <target> </target> +<source>Move</source> +<target></target> + <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -45,9 +54,15 @@ <source>&Continue</source> <target></target> +<source>Stopped</source> +<target></target> + <source>&Don't show this warning again</source> <target></target> +<source>Serious Error</source> +<target></target> + <source>&Ignore subsequent errors</source> <target></target> @@ -57,6 +72,12 @@ <source>Comma-separated values</source> <target></target> +<source>Comparison Settings</source> +<target></target> + +<source>Synchronization Settings</source> +<target></target> + <source>Never save &changes</source> <target></target> @@ -77,33 +98,138 @@ <target></target> <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> </target> -<source>Transfer file and folder permissions (requires administrator rights)</source> +<source>Select View</source> <target></target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> +<source>Filter Files</source> <target></target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> +<source>Main Bar</source> <target></target> -<source>&Clear</source> +<source>Folder Pairs</source> +<target></target> + +<source>Select Time Span</source> +<target></target> + +<source>Global Settings</source> +<target></target> + +<source>Delete Items</source> +<target></target> + +<source>Save as Batch Job</source> +<target></target> + +<source>Restore hidden windows</source> +<target></target> + +<source>Customize context menu:</source> +<target></target> + +<source>Delay (in seconds):</source> +<target></target> + +<source>Retry count:</source> +<target></target> + +<source>Automatic retry on error:</source> +<target></target> + +<source>Transfer file and folder permissions.</source> +<target></target> + +<source>(requires administrator rights)</source> +<target></target> + +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target></target> + +<source>(recommended)</source> <target></target> <source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. </source> <target></target> +<source>The following settings are used for all synchronization jobs.</source> +<target></target> + +<source>&Clear</source> +<target></target> + +<source>Maximum:</source> +<target></target> + +<source>Minimum:</source> +<target></target> + +<source>File size:</source> +<target></target> + +<source>Time span:</source> +<target></target> + +<source>Exclude:</source> +<target></target> + +<source>Include:</source> +<target></target> + +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target></target> + +<source>&Recycle bin</source> +<target></target> + +<source>How can I schedule a batch job?</source> +<target></target> + +<source>Limit:</source> +<target></target> + +<source>Save log:</source> +<target></target> + +<source>Stop synchronization at first error</source> +<target></target> + <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target></target> +<source>Stop</source> +<target></target> + +<source>Minimize to notification area</source> +<target></target> + +<source>&Don't show this dialog again</source> +<target></target> + +<source>Variant:</source> +<target></target> + +<source>Start synchronization now?</source> +<target></target> + +<source>On completion:</source> +<target></target> + +<source>Handle errors:</source> +<target></target> + +<source>Show examples</source> +<target></target> + <source>Move files to a user-defined folder</source> <target></target> @@ -113,25 +239,46 @@ Note: File paths must be relative to base directories. <source>Recycle bin</source> <target></target> +<source>Delete files:</source> +<target></target> + <source>Requires database files. Not supported by all file systems.</source> <target></target> <source>Detect moved files</source> <target></target> +<source>Copy new and updated files to the right folder.</source> +<target></target> + +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target></target> + <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target></target> -<source>Select a variant</source> +<source>More information</source> <target></target> -<source>&Don't show this dialog again</source> +<source>Symbolic links:</source> <target></target> -<source>Minimize to notification area</source> +<source>Identify equal files by comparing the file content.</source> +<target></target> + +<source>Identify equal files by comparing modification time and size.</source> +<target></target> + +<source>Select a variant:</source> +<target></target> + +<source>Find:</source> +<target></target> + +<source>Close search bar</source> <target></target> -<source>Check for new &version</source> +<source>&Check for new version</source> <target></target> <source>Check &automatically once a week</source> @@ -143,22 +290,62 @@ Note: File paths must be relative to base directories. <source>&Tools</source> <target></target> +<source>&Find...</source> +<target></target> + +<source>Local Filter</source> +<target></target> + +<source>Alternate Synchronization Settings</source> +<target></target> + +<source>Alternate Comparison Settings</source> +<target></target> + <source>Paste</source> <target></target> +<source>None</source> +<target></target> + +<source>Active</source> +<target></target> + +<source>Local filter</source> +<target></target> + +<source>Alternate synchronization settings</source> +<target></target> + +<source>Alternate comparison settings</source> +<target></target> + <source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source> <target></target> <source>&Download</source> <target></target> -<source>New version found</source> +<source>Check for Program Updates</source> <target></target> -<source>Retrying operation after error:</source> +<source>Retrying operation</source> <target></target> -<source>Switching to FreeFileSync main dialog</source> +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + +<source>Switching to FreeFileSync's main window</source> +<target></target> + +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target></target> + +<source>Synchronization stopped</source> <target></target> <source>job name</source> @@ -173,6 +360,12 @@ Note: File paths must be relative to base directories. <source>The following folders are significantly different. Make sure you are matching the correct folders for synchronization.</source> <target></target> +<source>Please enter a target folder for versioning.</source> +<target></target> + +<source>Incorrect command line:</source> +<target></target> + <source>&Show error</source> <target></target> @@ -182,6 +375,30 @@ Note: File paths must be relative to base directories. <source>Directory monitoring active</source> <target></target> +<source>Automated Synchronization</source> +<target></target> + +<source>&Start</source> +<target></target> + +<source>Command line:</source> +<target></target> + +<source>Idle time (in seconds):</source> +<target></target> + +<source>Folders to watch:</source> +<target></target> + +<source>&View help</source> +<target></target> + +<source>Unable to create timestamp for versioning:</source> +<target></target> + +<source>Stop requested: Waiting for current operation to finish...</source> +<target></target> + <source>Volume name %x is not part of file path %y.</source> <target></target> @@ -191,7 +408,7 @@ Note: File paths must be relative to base directories. <source>Cannot access the Volume Shadow Copy Service.</source> <target></target> -<source>%x items</source> +<source>%x items/sec</source> <target></target> <source> @@ -493,12 +710,6 @@ Note: File paths must be relative to base directories. <source>Cannot load file %x.</source> <target>Kan ikke laste filen %x.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Handling avbrutt: Venter pÃ¥ at nÃ¥værende handling fullføres...</target> - -<source>Failure to create timestamp for versioning:</source> -<target>Feil ved opprettelse av tidsstempel for versjon:</target> - <source>Cannot read the following XML elements:</source> <target>Kan ikke lese følgende XML-elementer:</target> @@ -514,9 +725,6 @@ Note: File paths must be relative to base directories. <source>&Program</source> <target>&Program</target> -<source>&Content</source> -<target>&Innhold</target> - <source>&About</source> <target>&Om programmet</target> @@ -538,9 +746,6 @@ Note: File paths must be relative to base directories. <source>To get started just import a .ffs_batch file.</source> <target>Importer en .ffs_batch-fil for Ã¥ komme i gang</target> -<source>Folders to watch</source> -<target>Mapper Ã¥ overvÃ¥ke</target> - <source>Add folder</source> <target>Legg til mappe</target> @@ -553,9 +758,6 @@ Note: File paths must be relative to base directories. <source>Select a folder</source> <target>Velg en mappe</target> -<source>Idle time [seconds]</source> -<target>Inaktiv tid [sekunder]</target> - <source>Idle time between last detected change and execution of command</source> <target>Inaktiv tid mellom forrige endring og utførelse av kommando</target> @@ -570,18 +772,12 @@ Kommandoen utløses hvis: - nye mapper legges til (f.eks. en USB-pinne kobles til) </target> -<source>Start</source> -<target>Start</target> - <source>&Retry</source> <target>&Prøv igjen</target> <source>Cancel</source> <target>Avbryt</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Automatisk synkronisering</target> - <source>Build: %x</source> <target>Build: %x</target> @@ -597,9 +793,6 @@ Kommandoen utløses hvis: <source>&Exit</source> <target>&Avslutt</target> -<source>Invalid command line:</source> -<target>Ugyldig kommando:</target> - <source>File content</source> <target>Filinnhold</target> @@ -660,9 +853,6 @@ Kommandoen utløses hvis: <source>Target folder input field must not be empty.</source> <target>Feltet for mÃ¥lmappe kan ikke være tomt.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Mappefeltet for versjon kan ikke være tomt.</target> - <source>Source folder %x not found.</source> <target>Kildemappe %x finnes ikke.</target> @@ -687,9 +877,6 @@ Kommandoen utløses hvis: <source>Generating database...</source> <target>Oppretter database...</target> -<source>Synchronization aborted</source> -<target>Synkronisering avbrutt</target> - <source>Synchronization completed with errors</source> <target>Synkronisering fullført med feil</target> @@ -705,9 +892,6 @@ Kommandoen utløses hvis: <source>Saving log file %x...</source> <target>Lagrer loggfil %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Trykk "Skift" for Ã¥ løse problemer i FreeFileSync hovedvindu.</target> - <source>A new version of FreeFileSync is available:</source> <target>En ny versjon av FreeFileSync er tilgjengelig</target> @@ -774,21 +958,6 @@ Kommandoen utløses hvis: <source>Hibernate</source> <target>Sett i dvalemodus</target> -<source>Selected variant:</source> -<target>Valgt variant:</target> - -<source>Select alternate comparison settings</source> -<target>Velg alternative innstillinger for sammenligning</target> - -<source>Select alternate synchronization settings</source> -<target>Velg alternative innstillinger for synkronisering</target> - -<source>Filter is active</source> -<target>Filter er aktivt</target> - -<source>No filter selected</source> -<target>Ingen filter valgt</target> - <source>Remove alternate settings</source> <target>Fjern alternative innstillinger</target> @@ -813,24 +982,18 @@ Kommandoen utløses hvis: <source>2. &Synchronize</source> <target>2. &Synkroniser</target> +<source>&Global settings</source> +<target>&Felles innstillinger</target> + <source>&Language</source> <target>&SprÃ¥k</target> <source>&Export file list...</source> <target>&Eksporter filliste...</target> -<source>&Global settings</source> -<target>&Felles innstillinger</target> - <source>Compare</source> <target>Sammenlign</target> -<source>Comparison settings</source> -<target>Innstillinger for sammenligning</target> - -<source>Synchronization settings</source> -<target>Innstillinger for synkronisering</target> - <source>Synchronize</source> <target>Synkroniser</target> @@ -843,6 +1006,9 @@ Kommandoen utløses hvis: <source>Swap sides</source> <target>Bytt sider</target> +<source>Match case</source> +<target>Skill mellom store og smÃ¥ bokstaver</target> + <source>Save as batch job</source> <target>Lagre som sammensatt oppgave</target> @@ -864,80 +1030,23 @@ Kommandoen utløses hvis: <source>Total bytes to copy</source> <target>Mengde bytes Ã¥ kopiere</target> -<source>Items found:</source> -<target>Elementer funnet:</target> - -<source>Speed:</source> -<target>Hastighet:</target> - -<source>Time remaining:</source> -<target>GjenstÃ¥ende tid:</target> - -<source>Time elapsed:</source> -<target>Tid gÃ¥tt:</target> - -<source>Synchronizing...</source> -<target>Synkroniserer...</target> - -<source>On completion</source> -<target>Ved fullføring</target> - -<source>Close</source> -<target>Lukk</target> - -<source>&Pause</source> -<target>&Pause</target> - -<source>Variant</source> -<target>Variant</target> - -<source>Statistics</source> -<target>Statistikk</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Filer blir funnet like hvis - - sist skrevne tid og dato - - filstørrelse -er den samme -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Filer blir funnet like hvis - - filinnhold -er det samme -</target> - -<source>Symbolic Link handling</source> -<target>Symbolsk lenkehÃ¥ndtering</target> - -<source>Help</source> -<target>Hjelp</target> - <source>OK</source> <target>OK</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Speilings-sikkerhetskopi av venstre mappe. Høyre mappe endres slik at den blir helt lik venstre mappe etter synkronisering.</target> - -<source>Copy new or updated files to right folder.</source> -<target>Kopier nye og endrede filer til høyre mappe.</target> - <source>Configure your own synchronization rules.</source> <target>Still inn dine egne synkroniseringsregler.</target> -<source>Error handling</source> -<target>FeilhÃ¥ndtering</target> +<source>Permanent</source> +<target>Permanent</target> + +<source>Delete or overwrite files permanently</source> +<target>Slett eller overskriv filer permanent</target> + +<source>Versioning</source> +<target>VersjonshÃ¥ndtering</target> + +<source>Naming convention:</source> +<target>Navnekonvensjon:</target> <source>Ignore</source> <target>Ignorer</target> @@ -951,96 +1060,42 @@ er det samme <source>Show pop-up on errors or warnings</source> <target>Vis pop-upvindu ved feil eller advarsler</target> -<source>Deletion handling</source> -<target>Slette-hÃ¥ndtering</target> +<source>Statistics</source> +<target>Statistikk</target> -<source>Permanent</source> -<target>Permanent</target> +<source>Items found:</source> +<target>Elementer funnet:</target> -<source>Delete or overwrite files permanently</source> -<target>Slett eller overskriv filer permanent</target> +<source>Speed:</source> +<target>Hastighet:</target> -<source>Versioning</source> -<target>VersjonshÃ¥ndtering</target> +<source>Time remaining:</source> +<target>GjenstÃ¥ende tid:</target> -<source>Naming convention:</source> -<target>Navnekonvensjon:</target> +<source>Time elapsed:</source> +<target>Tid gÃ¥tt:</target> -<source>Batch job</source> -<target>Batch-jobb</target> +<source>Synchronizing...</source> +<target>Synkroniserer...</target> -<source>Exit</source> -<target>Avslutt</target> +<source>Close</source> +<target>Lukk</target> -<source>Abort synchronization on first error</source> -<target>Stopp synkronisering ved første feil</target> +<source>&Pause</source> +<target>&Pause</target> <source>Show progress dialog</source> <target>Vis statuslinje</target> -<source>Save log</source> -<target>Lagre logg</target> - -<source>Select folder to save log files</source> -<target>Velg mappe for lagring av loggfiler</target> - -<source>Limit</source> -<target>Grense</target> - <source>Limit maximum number of log files</source> <target>Begrens maks antall loggfiler</target> -<source>Source code written in C++ using:</source> -<target>Kildekode skrevet i C++ med hjelp fra:</target> - -<source>If you like FreeFileSync</source> -<target>Hvis du liker FreeFileSync</target> - -<source>Donate with PayPal</source> -<target>Doner med PayPal</target> - -<source>Many thanks for localization:</source> -<target>Mange takk for lokalisering:</target> - -<source>Feedback and suggestions are welcome</source> -<target>Tilbakemelding og forslag er velkomne</target> - -<source>Homepage</source> -<target>Hjemmeside</target> - -<source>Email</source> -<target>E-post</target> - -<source>Published under the GNU General Public License</source> -<target>Utgitt under GNU General Public Licence</target> - <source>Delete on both sides</source> <target>Slett pÃ¥ begge sider</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>Slett pÃ¥ begge sider selv om filen bare er valgt pÃ¥ en side</target> -<source>Include</source> -<target>Inkluder</target> - -<source>Exclude</source> -<target>Ekskluder</target> - -<source>Time span</source> -<target>Tidsrom</target> - -<source>File size</source> -<target>Filstørrelse</target> - -<source>Minimum</source> -<target>Minimum</target> - -<source>Maximum</source> -<target>Maksimum</target> - -<source>Global settings</source> -<target>Globale innstillinger</target> - <source>Fail-safe file copy</source> <target>Trygg filkopi</target> @@ -1050,44 +1105,38 @@ er det samme <source>Copy file access permissions</source> <target>Kopier filadgangstillatelser</target> -<source>Restore hidden dialogs</source> -<target>Gjenopprett skjulte dialoger</target> - -<source>External applications</source> -<target>Eksterne programmer</target> - <source>Description</source> <target>Beskrivelse</target> <source>&Default</source> <target>&Standard</target> -<source>Find what:</source> -<target>Søk hva:</target> +<source>Source code written in C++ using:</source> +<target>Kildekode skrevet i C++ med hjelp fra:</target> -<source>Match case</source> -<target>Skill mellom store og smÃ¥ bokstaver</target> +<source>If you like FreeFileSync</source> +<target>Hvis du liker FreeFileSync</target> -<source>&Find next</source> -<target>&Søk neste</target> +<source>Donate with PayPal</source> +<target>Doner med PayPal</target> -<source>Start synchronization</source> -<target>Start synkronisering</target> +<source>Feedback and suggestions are welcome</source> +<target>Tilbakemelding og forslag er velkomne</target> -<source>Delete</source> -<target>Slett</target> +<source>Homepage</source> +<target>Hjemmeside</target> -<source>Configure filter</source> -<target>Still inn filter</target> +<source>Email</source> +<target>E-post</target> -<source>Find</source> -<target>Søk</target> +<source>Published under the GNU General Public License</source> +<target>Utgitt under GNU General Public Licence</target> -<source>Select time span</source> -<target>Velg tidsrom</target> +<source>Many thanks for localization:</source> +<target>Mange takk for lokalisering:</target> -<source>Folder pairs</source> -<target>Mappepar</target> +<source>Find</source> +<target>Søk</target> <source>Overview</source> <target>Oversikt</target> @@ -1095,15 +1144,6 @@ er det samme <source>Configuration</source> <target>Innstilling</target> -<source>Main bar</source> -<target>Hovedverktøylinje</target> - -<source>Filter files</source> -<target>Filtrer filer</target> - -<source>Select view</source> -<target>Velg visning</target> - <source>Open...</source> <target>Ã…pne...</target> @@ -1113,6 +1153,15 @@ er det samme <source>Compare both sides</source> <target>Sammenlign begge sider</target> +<source>Comparison settings</source> +<target>Innstillinger for sammenligning</target> + +<source>Synchronization settings</source> +<target>Innstillinger for synkronisering</target> + +<source>Start synchronization</source> +<target>Start synkronisering</target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1134,17 +1183,20 @@ er det samme <source>Set direction:</source> <target>Still inn retningen:</target> +<source>multiple selection</source> +<target>flervalg</target> + +<source>Exclude via filter:</source> +<target>Ekskluder via filter:</target> + <source>Exclude temporarily</source> <target>Ekskluder midlertidig</target> <source>Include temporarily</source> <target>Inkluder midlertidig</target> -<source>multiple selection</source> -<target>flervalg</target> - -<source>Exclude via filter:</source> -<target>Ekskluder via filter:</target> +<source>Delete</source> +<target>Slett</target> <source>Include all</source> <target>Inkluder alle</target> @@ -1191,6 +1243,9 @@ er det samme <source>Do&n't save</source> <target>&Ikke lagre</target> +<source>Filter</source> +<target>Filter</target> + <source>Show files that exist on left side only</source> <target>Vis filer som bare finnes pÃ¥ venstre side</target> @@ -1236,27 +1291,21 @@ er det samme <source>Set as default</source> <target>Set som standard</target> -<source>Operation aborted</source> -<target>Handling avbrutt</target> - <source>All folders are in sync</source> <target>Alle mapper er synkroniserte</target> +<source>Cannot find %x</source> +<target>Kan ikke finne %x</target> + <source>File list exported</source> <target>Filliste eksportert</target> <source>&Ignore</source> <target>&Ignorer</target> -<source>Fatal Error</source> -<target>Fatal feil</target> - <source>&Switch</source> <target>&Skift</target> -<source>Question</source> -<target>SpørsmÃ¥l</target> - <source>&Yes</source> <target>&Ja</target> @@ -1278,18 +1327,9 @@ er det samme <source>Initializing...</source> <target>Initialiserer...</target> -<source>Aborted</source> -<target>Avbrutt</target> - <source>Completed</source> <target>Fullført</target> -<source>Cannot find %x</source> -<target>Kan ikke finne %x</target> - -<source>Inactive</source> -<target>Inaktiv</target> - <source>Today</source> <target>Idag</target> @@ -1314,8 +1354,8 @@ er det samme <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filter</target> +<source>Exclude</source> +<target>Ekskluder</target> <source>Direct</source> <target>Direkte</target> @@ -1341,9 +1381,6 @@ er det samme <source>- Other side's counterpart to %item_folder%</source> <target>- Den andre sidens motpart til %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Gjør skjylte advarsler og dialoger synlige igjen?</target> - <source>Leave as unresolved conflict</source> <target>Etterlat som uløste konflikter</target> @@ -1461,9 +1498,6 @@ er det samme <source>Cannot set privilege %x.</source> <target>Kan ikke sette privilegie %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Kan ikke sette systemet i hvilemodus</target> - <source>Cannot change process I/O priorities.</source> <target>Kan ikke endre I/O prioriet pÃ¥ prosess</target> diff --git a/BUILD/Languages/polish.lng b/BUILD/Languages/polish.lng index 8e0ead7f..32b40d31 100644 --- a/BUILD/Languages/polish.lng +++ b/BUILD/Languages/polish.lng @@ -2,14 +2,31 @@ <language>Polski</language> <translator>Wojciech Pietruszewski</translator> <locale>pl_PL</locale> - <flag_image>flag_poland.png</flag_image> - <plural_form_count>3</plural_form_count> + <image>flag_poland.png</image> + <plural_count>3</plural_count> <plural_definition>n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2</plural_definition> </header> -<source>Close search bar</source> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> <target></target> +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>Obie strony ulegÅ‚y zmianie od ostatniej synchronizacji.</target> @@ -61,9 +78,6 @@ <source>Cannot open file %x.</source> <target>Nie można otworzyć pliku %x.</target> -<source>Error</source> -<target>BÅ‚Ä…d</target> - <source>File %x does not contain a valid configuration.</source> <target>Plik %x nie zawiera prawidÅ‚owej konfiguracji</target> @@ -73,12 +87,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>Plik konfiguracyjny nie może zawierać informacji o synchronizowanych katalogach gdy nazwy Å›cieżek przekazywane sÄ… w linii poleceÅ„.</target> -<source>Warning</source> -<target>Ostrzeżenie</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>Dla wiÄ™cej niż jednego pliku konfiguracyjnego, nie można ustawić wielu katalogów.</target> +<source>Command line</source> +<target>Linia komend</target> + <source>Syntax:</source> <target>SkÅ‚adnia:</target> @@ -94,9 +108,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>Dowolna liczba katalogów w przypadku użycia jednego pliku konfiguracyjnego.</target> -<source>Command line</source> -<target>Linia komend</target> - <source>A folder input field is empty.</source> <target>Pole katalog źródÅ‚owy jest puste.</target> @@ -298,8 +309,8 @@ <source>/sec</source> <target>/sekundÄ™</target> -<source>%x items</source> -<target>%x elementy</target> +<source>%x items/sec</source> +<target>%x elementów/sek</target> <source>Configuration file %x loaded partially only.</source> <target>Plik konfiguracyjny %x zostaÅ‚ wczytany tylko częściowo.</target> @@ -328,11 +339,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Nazwa zasobu %x ni jest częściÄ… Å›cieżki %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Żądanie przerwania: Oczekiwanie na koniec aktualnie wykonywanego zadania...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Przerwanie: Oczekiwanie na zakoÅ„czenie aktualnej operacji...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Nie można utworzyć sygnatury czasu na potrzeby wersjonowania:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Nie można utowrzyć znacznika czasu dla wersjonowania:</target> <source>Cannot read the following XML elements:</source> <target>Nie można odczytać elementu XML:</target> @@ -349,8 +360,8 @@ <source>&Program</source> <target>&Program</target> -<source>&Content</source> -<target>Za&wartość</target> +<source>&View help</source> +<target>&Pomoc</target> <source>&About</source> <target>O Program&ie</target> @@ -373,8 +384,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Aby rozpocząć po zaimportuj plik .ffs_batch.</target> -<source>Folders to watch</source> -<target>Obserwowane katalogi</target> +<source>Folders to watch:</source> +<target>Katalogi do obserwowania:</target> <source>Add folder</source> <target>Dodaj katalog</target> @@ -388,12 +399,15 @@ <source>Select a folder</source> <target>Wybierz katalog</target> -<source>Idle time [seconds]</source> -<target>Bezczynność [sekundy]</target> +<source>Idle time (in seconds):</source> +<target>Czas bezczynnoÅ›ci (w sekundach):</target> <source>Idle time between last detected change and execution of command</source> <target>Czas pomiÄ™dzy ostatniÄ… wykrytÄ… zmianÄ…, a uruchomieniem komendy</target> +<source>Command line:</source> +<target>Linia komend:</target> + <source> The command is triggered if: - files or subfolders change @@ -405,33 +419,30 @@ Komenda jest wykonywana gdy: - zostanÄ… utworzony nowe katalogi (n.p wÅ‚ożenie pamiÄ™ci USB) </target> -<source>Start</source> -<target>Rozpocznij</target> - -<source>&Retry</source> -<target>&Powtórz</target> - -<source>Cancel</source> -<target>Anuluj</target> +<source>&Start</source> +<target>&Rozpocznij</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Automatyczna Synchronizacja</target> +<source>About</source> +<target>O Programie</target> <source>Build: %x</source> <target>Zbudowano: %x</target> -<source>About</source> -<target>O Programie</target> - <source>All files</source> <target>Wszystkie pliki</target> +<source>Automated Synchronization</source> +<target>Automatyczna synchronizacja</target> + <source>Directory monitoring active</source> <target>Monitorowanie katalogów aktywne</target> <source>Waiting until all directories are available...</source> <target>Oczekiwanie na dostÄ™pność wszystkich katalogów...</target> +<source>Error</source> +<target>BÅ‚Ä…d</target> + <source>&Restore</source> <target>&Przywróć</target> @@ -441,8 +452,11 @@ Komenda jest wykonywana gdy: <source>&Exit</source> <target>&WyjÅ›cie</target> -<source>Invalid command line:</source> -<target>NieprawidÅ‚owa komenda:</target> +<source>Incorrect command line:</source> +<target>Niepoprawne polecenie:</target> + +<source>&Retry</source> +<target>&Powtórz</target> <source>File content</source> <target>Zawartość pliku</target> @@ -504,8 +518,8 @@ Komenda jest wykonywana gdy: <source>Target folder input field must not be empty.</source> <target>Pole katalog docelowy nie może być puste.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>OkreÅ›l katalog do przechowywania wersjonowanych plików.</target> +<source>Please enter a target folder for versioning.</source> +<target>OkreÅ›l katalog do wersjonowania.</target> <source>Source folder %x not found.</source> <target>Nie znaleziono katalogu docelowego %x.</target> @@ -543,8 +557,8 @@ Komenda jest wykonywana gdy: <source>job name</source> <target>nazwa zadania</target> -<source>Synchronization aborted</source> -<target>Synchronizacja przerwana</target> +<source>Synchronization stopped</source> +<target>Synchronizacja zatrzymana</target> <source>Synchronization completed with errors</source> <target>Synchronizacja zakoÅ„czona z bÅ‚Ä™dami</target> @@ -561,14 +575,29 @@ Komenda jest wykonywana gdy: <source>Saving log file %x...</source> <target>Zapisywanie pliku logów %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Kliknij "PrzeÅ‚Ä…cz" aby rozwiÄ…zać wszystkie problemy w głównym oknie FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Możesz przejść do głównego okna FreeFileSync abe rozwiÄ…zać ten problem.</target> -<source>Switching to FreeFileSync main dialog</source> -<target>PrzeÅ‚Ä…czanie do głównego okna FreeFileSync</target> +<source>&Don't show this warning again</source> +<target>&Nie pokazuj ponownie tego ostrzeżenia</target> -<source>Retrying operation after error:</source> -<target>Ponawianie czynnoÅ›ci po bÅ‚Ä™dzie:</target> +<source>&Ignore</source> +<target>&Ignoruj</target> + +<source>&Switch</source> +<target>&ZamieÅ„</target> + +<source>Switching to FreeFileSync's main window</source> +<target>Przejdź do głównego okna FreeFileSync.</target> + +<source>&Ignore subsequent errors</source> +<target>&Ignoruj kolejne bÅ‚Ä™dy</target> + +<source>Serious Error</source> +<target>Poważny bÅ‚Ä…d</target> + +<source>Check for Program Updates</source> +<target>Sprawdź dostÄ™pne aktualizacje.</target> <source>A new version of FreeFileSync is available:</source> <target>DostÄ™pna jest nowa wersja FreeFileSync:</target> @@ -576,18 +605,12 @@ Komenda jest wykonywana gdy: <source>Download now?</source> <target>Pobrać teraz?</target> -<source>New version found</source> -<target>DostÄ™pna jest nowa wersja programu</target> - <source>&Download</source> <target>&Pobierz</target> <source>FreeFileSync is up to date.</source> <target>Posiadasz aktualnÄ… wersjÄ™ FreeFileSync.</target> -<source>Information</source> -<target>Informacja</target> - <source>Unable to connect to sourceforge.net.</source> <target>Nie można siÄ™ poÅ‚Ä…czyć z sourceforge.net.</target> @@ -645,20 +668,20 @@ Komenda jest wykonywana gdy: <source>Hibernate</source> <target>Przejdź w stan hibernacji</target> -<source>Selected variant:</source> -<target>OkreÅ›l wariant:</target> +<source>Alternate comparison settings</source> +<target>Alternatywne ustawienia porównywania</target> -<source>Select alternate comparison settings</source> -<target>OkreÅ›l alternatywne ustawienia porównywania</target> +<source>Alternate synchronization settings</source> +<target>Alternatywne ustawienia synchronizacji</target> -<source>Select alternate synchronization settings</source> -<target>OkreÅ›l alternatywne reguÅ‚y synchronizacji</target> +<source>Local filter</source> +<target>Filtr lokalny</target> -<source>Filter is active</source> -<target>Filtr jest aktywny</target> +<source>Active</source> +<target>Aktywny</target> -<source>No filter selected</source> -<target>Nie wybrano żadnego filtra</target> +<source>None</source> +<target>Å»aden</target> <source>Remove alternate settings</source> <target>UsuÅ„ alternatywne ustawienia</target> @@ -672,6 +695,15 @@ Komenda jest wykonywana gdy: <source>Paste</source> <target>Wklej</target> +<source>Alternate Comparison Settings</source> +<target>Alternatywne ustawienia porównywania</target> + +<source>Alternate Synchronization Settings</source> +<target>Alternatywne ustawienia synchronizacji</target> + +<source>Local Filter</source> +<target>Filtr lokalny</target> + <source>&New</source> <target>&Nowy</target> @@ -687,15 +719,18 @@ Komenda jest wykonywana gdy: <source>2. &Synchronize</source> <target>2. &Synchronizuj</target> +<source>&Global settings</source> +<target>&Ustawienia programu</target> + <source>&Language</source> <target>&JÄ™zyk</target> +<source>&Find...</source> +<target>&Szukaj...</target> + <source>&Export file list...</source> <target>&Eksportuj listÄ™ plików...</target> -<source>&Global settings</source> -<target>&Ustawienia programu</target> - <source>&Tools</source> <target>&NarzÄ™dzia</target> @@ -705,12 +740,15 @@ Komenda jest wykonywana gdy: <source>Check &automatically once a week</source> <target>Sprawdzaj &automatycznie raz w tygodniu</target> -<source>Check for new &version</source> -<target>&Sprawdź aktualizacje</target> +<source>&Check for new version</source> +<target>Sprawdź &nowÄ… wersjÄ™</target> <source>Compare</source> <target>Porównaj</target> +<source>Cancel</source> +<target>Anuluj</target> + <source>Synchronize</source> <target>Synchronizuj</target> @@ -723,8 +761,11 @@ Komenda jest wykonywana gdy: <source>Swap sides</source> <target>ZamieÅ„ stronami</target> -<source>Find what:</source> -<target>Co:</target> +<source>Close search bar</source> +<target>Zamknij pasek wyszukiwania</target> + +<source>Find:</source> +<target>Szukaj:</target> <source>Match case</source> <target>UwzglÄ™dnij wielkość liter</target> @@ -750,74 +791,20 @@ Komenda jest wykonywana gdy: <source>Total bytes to copy</source> <target>CaÅ‚kowity rozmiar do skopiowania</target> -<source>Items found:</source> -<target>Znalezione elementy:</target> - -<source>Speed:</source> -<target>PrÄ™dkość:</target> - -<source>Time remaining:</source> -<target>Do ukoÅ„czenia:</target> - -<source>Time elapsed:</source> -<target>Szacowany czas:</target> - -<source>Synchronizing...</source> -<target>SynchronizujÄ™...</target> - -<source>Minimize to notification area</source> -<target>Minimalizuj do obszaru powiadomiÅ„</target> - -<source>On completion</source> -<target>Po zakoÅ„czeniu</target> - -<source>Close</source> -<target>Zamknij</target> - -<source>&Pause</source> -<target>&Pauza</target> - -<source>Variant</source> -<target>Wariant</target> - -<source>Statistics</source> -<target>Statystyki</target> +<source>Select a variant:</source> +<target>OkreÅ›l wariant:</target> -<source>&Don't show this dialog again</source> -<target>&Nie pokazuj wiÄ™cej tego okna</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>OkreÅ›l różnice w plikach na podstawie czasu modyfikacji i rozmiaru.</target> -<source>Select a variant</source> -<target>OkreÅ›l wariant</target> +<source>Identify equal files by comparing the file content.</source> +<target>OkreÅ›l różnice w plikach na podstawie ich zawartoÅ›ci.</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Pliki sÄ… równe jeżeli - - ostatni czas zapisu - - rozmiar pliku -sÄ… równe -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Pliki sÄ… jednakowe jeżeli - - zawartość pliku -jest identyczna -</target> +<source>Symbolic links:</source> +<target>DowiÄ…zania symboliczne:</target> -<source>Symbolic Link handling</source> -<target>ObsÅ‚uga dowiÄ…zaÅ„ symbolicznych</target> - -<source>Help</source> -<target>Pomoc</target> +<source>More information</source> +<target>WiÄ™cej informacji</target> <source>OK</source> <target>OK</target> @@ -825,11 +812,11 @@ jest identyczna <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Wyszukaj oraz zastosuj zmiany po obu stronach. Wszystkie operacje na plikach takie jak usuniÄ™cia, zmiany oraz konflikty wykrywane sÄ… automatycznie przy użyciu bazy danych.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Lustrzana kopia lewego folderu. Prawy folder po synchronizacji jest lustrzanÄ… kopiÄ… lewego folderu.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Kopia lustrzana lewego katalogu. Po synchronizacji, zawartość prawego katalogu bÄ™dzie bÄ™dzie identyczna jak w lewym katalogu.</target> -<source>Copy new or updated files to right folder.</source> -<target>Kopiuj nowe lub aktualniejsze pliki na prawÄ… stronÄ™.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Kopiuj nowe i zmodyfikowane pliki do prawego katalogu.</target> <source>Configure your own synchronization rules.</source> <target>Skonfiguruj swoje wÅ‚asne reguÅ‚y synchronizacji.</target> @@ -840,26 +827,11 @@ jest identyczna <source>Requires database files. Not supported by all file systems.</source> <target>Wymaga plików bazy danych. Nie wspierane przez wszystkie systemy plików.</target> -<source>Error handling</source> -<target>ObsÅ‚uga bÅ‚Ä™dów</target> - -<source>Ignore</source> -<target>Ignoruj</target> - -<source>Hide all error and warning messages</source> -<target>Ukryj wszystkie informacje bÅ‚Ä™dach i ostrzeżeniach</target> - -<source>Pop-up</source> -<target>Pop-up</target> - -<source>Show pop-up on errors or warnings</source> -<target>Pokazuj okna pop-up dla bÅ‚Ä™dów i ostrzeżeÅ„</target> - -<source>Deletion handling</source> -<target>Usuwanie</target> +<source>Delete files:</source> +<target>Usuwanie plików:</target> <source>Permanent</source> -<target>TrwaÅ‚y</target> +<target>Trwale</target> <source>Delete or overwrite files permanently</source> <target>UsuÅ„ lub nadpisz pliki na staÅ‚e</target> @@ -879,99 +851,171 @@ jest identyczna <source>Naming convention:</source> <target>Konwencja nazewnictwa:</target> -<source>Batch job</source> -<target>Plik wsadowy</target> +<source>Show examples</source> +<target>PrzykÅ‚ad</target> + +<source>Handle errors:</source> +<target>ObsÅ‚uga bÅ‚Ä™dów:</target> + +<source>Ignore</source> +<target>Ignoruj</target> + +<source>Hide all error and warning messages</source> +<target>Ukryj wszystkie informacje bÅ‚Ä™dach i ostrzeżeniach</target> + +<source>Pop-up</source> +<target>Pop-up</target> + +<source>Show pop-up on errors or warnings</source> +<target>Pokazuj okna pop-up dla bÅ‚Ä™dów i ostrzeżeÅ„</target> + +<source>On completion:</source> +<target>Po zakoÅ„czeniu:</target> + +<source>Start synchronization now?</source> +<target>Rozpocząć teraz synchronizacjÄ™?</target> + +<source>Variant:</source> +<target>Wariant:</target> + +<source>Statistics</source> +<target>Statystyki</target> + +<source>&Don't show this dialog again</source> +<target>&Nie pokazuj wiÄ™cej tego okna</target> + +<source>Items found:</source> +<target>Znalezione elementy:</target> + +<source>Speed:</source> +<target>PrÄ™dkość:</target> + +<source>Time remaining:</source> +<target>Do ukoÅ„czenia:</target> + +<source>Time elapsed:</source> +<target>Szacowany czas:</target> + +<source>Synchronizing...</source> +<target>SynchronizujÄ™...</target> + +<source>Minimize to notification area</source> +<target>Minimalizuj do obszaru powiadomiÅ„</target> + +<source>Close</source> +<target>Zamknij</target> + +<source>&Pause</source> +<target>&Pauza</target> + +<source>Stop</source> +<target>Przerwij</target> <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target>Utwórz plik wsadowy do zautomatyzowania procesu synchronizacji. Aby rozpocząć, klknij dwa razy plik lub zaplanuj zadanie w: %x</target> -<source>Exit</source> -<target>WyjÅ›cie</target> - -<source>Abort synchronization on first error</source> -<target>ZakoÅ„cz synchronizacjÄ™ przy pierwszym bÅ‚Ä™dzie</target> +<source>Stop synchronization at first error</source> +<target>Przerwij synchronizacjÄ™ przy pierwszym bÅ‚Ä™dzie</target> <source>Show progress dialog</source> <target>Pokaż okno postÄ™pu</target> -<source>Save log</source> -<target>Zapisz logi</target> +<source>Save log:</source> +<target>Zapisz logi:</target> -<source>Select folder to save log files</source> -<target>OkreÅ›l katalog z logami</target> - -<source>Limit</source> -<target>Limit</target> +<source>Limit:</source> +<target>Limit:</target> <source>Limit maximum number of log files</source> <target>OkreÅ›l maksymalnÄ… liczbÄ™ plików z logami</target> +<source>How can I schedule a batch job?</source> +<target>Jak zaplanować zadanie w trybie wsadowym?</target> + +<source>&Recycle bin</source> +<target>&Kosz systemowy</target> + <source>Delete on both sides</source> <target>UsuÅ„ po obu stronach</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>UsuÅ„ po obu stronach nawet jeżeli plik zaznaczony jest tylko po jednej stronie</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Pliki zostanÄ… zsynchronizowane tylko w przypadku przejÅ›cia przez wszystkie regóły filtra. -Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>OkreÅ›l reguÅ‚y filtrowania w celu wykluczenia niektórych plików z synchronizacji. Åšcieżki plików muszÄ… być relatywne do podanych par katalogów.</target> -<source>Include</source> -<target>DoÅ‚Ä…cz</target> +<source>Include:</source> +<target>DoÅ‚Ä…cz:</target> -<source>Exclude</source> -<target>Wyklucz</target> +<source>Exclude:</source> +<target>Wyklucz:</target> -<source>Time span</source> -<target>PrzedziaÅ‚ czasowy</target> +<source>Time span:</source> +<target>PrzedziaÅ‚ czasu:</target> -<source>File size</source> -<target>Rozmiar pliku</target> +<source>File size:</source> +<target>Rozmiar pliku:</target> -<source>Minimum</source> -<target>Minimum</target> +<source>Minimum:</source> +<target>Minimalny:</target> -<source>Maximum</source> -<target>Maksimum</target> +<source>Maximum:</source> +<target>Maksymalny:</target> <source>&Clear</source> <target>W&yczyść</target> -<source>Global settings</source> -<target>Ustawienia programu</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>NastÄ™pujÄ…ce ustawienia stosowane sÄ… do wszystkich zadaÅ„ synchronizacji.</target> <source>Fail-safe file copy</source> <target>Bezpieczne kopiowanie</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Aby zagwarantować spójność synchronizacji nawet podczas bÅ‚Ä™du, program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp) po czym zmienia nazwÄ™ pliku na docelowÄ….</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Aby zagwarantować spójność synchronizacji nawet podczas bÅ‚Ä™du, +program kopiuje zawartość do pliku tymczasowego (*.ffs_tmp), a nastÄ™pnie nadpisuje plik docelowy. +</target> + +<source>(recommended)</source> +<target>(rekomendowane)</target> <source>Copy locked files</source> <target>Kopiuj zablokowane pliki</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Kopiuj współdzielone lub zablokowane pliki używajÄ…c Volume Shadow Copy Service (wymaga uprawnieÅ„ administratora)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Kopiuj pliki współdzielone lub zablokowane używajÄ…c usÅ‚ugi Volume Shadow Copy.</target> + +<source>(requires administrator rights)</source> +<target>(wymagane uprawnienia administratora)</target> <source>Copy file access permissions</source> <target>Kopiuj uprawnienia plików</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Kopiuj uprawnienia plików i katalogów (wymaga uprawnieÅ„ administratora)</target> +<source>Transfer file and folder permissions.</source> +<target>kopiuj uprawnienia plików i katalogów.</target> + +<source>Automatic retry on error:</source> +<target>Automatyczne ponowienie operacji podczas bÅ‚Ä™du:</target> -<source>Restore hidden dialogs</source> -<target>Przywróc ukryte dialogi</target> +<source>Retry count:</source> +<target>Liczba prób:</target> -<source>External applications</source> -<target>Aplikacje zewnÄ™trzne</target> +<source>Delay (in seconds):</source> +<target>Opóźnienie (w sekundach):</target> + +<source>Customize context menu:</source> +<target>Dostosuj menu kontekstowe:</target> <source>Description</source> <target>Opis</target> +<source>Restore hidden windows</source> +<target>Przywróć ukryte dialogi</target> + <source>&Default</source> <target>&DomyÅ›lne</target> @@ -999,26 +1043,20 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>Many thanks for localization:</source> <target>PodziÄ™kowania za tÅ‚umaczenia:</target> -<source>Start synchronization</source> -<target>Rozpocznij synchronizacjÄ™</target> - -<source>Comparison settings</source> -<target>Ustawienia porównywania</target> - -<source>Synchronization settings</source> -<target>Ustawienia synchronizacji</target> +<source>Save as Batch Job</source> +<target>Zapisz w trybie wsadowym</target> -<source>Delete</source> -<target>UsuÅ„</target> +<source>Delete Items</source> +<target>UsuÅ„ elementy</target> -<source>Configure filter</source> -<target>Konfiguruj filtr</target> +<source>Global Settings</source> +<target>Ustawienia ogólne</target> -<source>Select time span</source> -<target>OkreÅ›l przedziaÅ‚ czasowy</target> +<source>Select Time Span</source> +<target>OkreÅ›l</target> -<source>Folder pairs</source> -<target>Pary folderów</target> +<source>Folder Pairs</source> +<target>Pary katalogów</target> <source>Find</source> <target>Znajdź</target> @@ -1029,14 +1067,14 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>Configuration</source> <target>Konfiguracja</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Główny pasek</target> -<source>Filter files</source> -<target>Filtruj pliki</target> +<source>Filter Files</source> +<target>Filtr</target> -<source>Select view</source> -<target>OkreÅ›l widok</target> +<source>Select View</source> +<target>Widok</target> <source>Open...</source> <target>Otwórz...</target> @@ -1047,15 +1085,14 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>Compare both sides</source> <target>Porównaj foldery</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Czy na pewno chcesz wykonać polecenie %y dla 1 elementu?</pluralform> -<pluralform>Czy na pewno chcesz wykonać polecenie %y dla %x elementów?</pluralform> -<pluralform>Czy na pewno chcesz wykonać polecenie %y dla %x elementów?</pluralform> -</target> +<source>Comparison settings</source> +<target>Ustawienia porównywania</target> + +<source>Synchronization settings</source> +<target>Ustawienia synchronizacji</target> + +<source>Start synchronization</source> +<target>Rozpocznij synchronizacjÄ™</target> <source>Confirm</source> <target>Potwierdź</target> @@ -1111,6 +1148,9 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>Include temporarily</source> <target>DoÅ‚Ä…cz tymczasowo</target> +<source>Delete</source> +<target>UsuÅ„</target> + <source>Include all</source> <target>Zaznacz wszystko</target> @@ -1153,11 +1193,14 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>Do you want to save changes to %x?</source> <target>Czy chcesz zapisać zmiany w %x?</target> +<source>Never save &changes</source> +<target>Nigdy nie zapisuj &zmian</target> + <source>Do&n't save</source> <target>&Nie zapisuj</target> -<source>Never save &changes</source> -<target>Nigdy nie zapisuj &zmian</target> +<source>Filter</source> +<target>Filtr</target> <source>Show files that exist on left side only</source> <target>Pokaż pliki istniejÄ…ce tylko po lewej stronie</target> @@ -1204,12 +1247,15 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>Set as default</source> <target>Zapisz jako domyÅ›lne</target> -<source>Operation aborted</source> -<target>Operacja przerwana</target> - <source>All folders are in sync</source> <target>Wszystkie katalogi sÄ… zsynchronizowane</target> +<source>Synchronization Settings</source> +<target>Ustawienia synchronizacji</target> + +<source>Comparison Settings</source> +<target>Ustawienia porównywania</target> + <source>Cannot find %x</source> <target>Nie można znaleźć %x</target> @@ -1222,30 +1268,6 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>Searching for program updates...</source> <target>Wyszukiwanie aktualizacji...</target> -<source>&Ignore subsequent errors</source> -<target>&Ignoruj kolejne bÅ‚Ä™dy</target> - -<source>&Ignore</source> -<target>&Ignoruj</target> - -<source>Fatal Error</source> -<target>BÅ‚Ä…d krytyczny</target> - -<source>&Don't show this warning again</source> -<target>&Nie pokazuj ponownie tego ostrzeżenia</target> - -<source>&Switch</source> -<target>&ZamieÅ„</target> - -<source>Question</source> -<target>Pytanie</target> - -<source>&Yes</source> -<target>&Tak</target> - -<source>&No</source> -<target>&Nie</target> - <source>Scanning...</source> <target>Skanowanie...</target> @@ -1255,14 +1277,17 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>Info</source> <target>Info</target> +<source>Warning</source> +<target>Ostrzeżenie</target> + <source>Paused</source> <target>Pauza</target> <source>Initializing...</source> <target>Inicjalizacja...</target> -<source>Aborted</source> -<target>Przerwana</target> +<source>Stopped</source> +<target>Zatrzymana</target> <source>Completed</source> <target>ZakoÅ„czono</target> @@ -1273,9 +1298,6 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>Log</source> <target>Log</target> -<source>Inactive</source> -<target>Nieaktywny</target> - <source>Today</source> <target>Dzisiaj</target> @@ -1300,9 +1322,6 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filtr</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1313,6 +1332,9 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <pluralform>Czy na pewno chcesz przenieść te %x elemntów do kosza?</pluralform> </target> +<source>Move</source> +<target>PrzenieÅ›</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1323,6 +1345,9 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <pluralform>Czy na pewno chcesz usunąć %x nastÄ™pujÄ…cych elementów?</pluralform> </target> +<source>Exclude</source> +<target>Wyklucz</target> + <source>Direct</source> <target>BezpoÅ›rednio</target> @@ -1347,8 +1372,8 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <source>- Other side's counterpart to %item_folder%</source> <target>- Odpowiednik %item_folder% po drugiej stronie</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Przywrócić ukryte powiadomienia i dialogi?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Przywrócić wszystkie ukryte dialogi?</target> <source>Leave as unresolved conflict</source> <target>Zostaw jako nierozwiÄ…zany konflikt</target> @@ -1476,14 +1501,14 @@ Uwaga: Åšcieżki plików muszÄ… być wzglÄ™dne do katalogów bazowych. <pluralform>%x dni</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>BÅ‚Ä…d podczas rejestracji odbioru komunikatów systemowych.</target> +<source>Unable to register to receive system messages.</source> +<target>BÅ‚Ä…d podczas rejestrowania do odbioru komunikatów systemowych.</target> <source>Cannot set privilege %x.</source> <target>Nie można ustawić uprawnieÅ„ %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Program nie mógÅ‚ wyÅ‚Ä…czyć trybu uÅ›pienia systemu.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Nie można przerwać trybu uÅ›pienia.</target> <source>Cannot change process I/O priorities.</source> <target>Nie można zmienić priorytetu I/O procesu.</target> diff --git a/BUILD/Languages/portuguese.lng b/BUILD/Languages/portuguese.lng index 5557ada4..66105d0a 100644 --- a/BUILD/Languages/portuguese.lng +++ b/BUILD/Languages/portuguese.lng @@ -2,11 +2,17 @@ <language>Português</language> <translator>Carlos Balseiro</translator> <locale>pt_PT</locale> - <flag_image>flag_portugal.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_portugal.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> +<target></target> + <source>Both sides have changed since last synchronization.</source> <target>Ambos os lados tiveram alterações desde a última sincronização.</target> @@ -58,9 +64,6 @@ <source>Cannot open file %x.</source> <target>Não é possÃvel abrir o ficheiro %x.</target> -<source>Error</source> -<target>Erro</target> - <source>File %x does not contain a valid configuration.</source> <target>Ficheiro %x não tem uma configuração válida.</target> @@ -70,12 +73,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>O ficheiro de configuração não deve conter configurações ao nÃvel de par-directório quando os directórios são definidos pela linha de comandos.</target> -<source>Warning</source> -<target>Atenção</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>Os directórios não podem ser definidos em mais do que um ficheiro de configuração.</target> +<source>Command line</source> +<target>Linha de comandos</target> + <source>Syntax:</source> <target>Sintaxe:</target> @@ -91,9 +94,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>Qualquer número de directórios alternativos para apenas um ficheiro de configuração.</target> -<source>Command line</source> -<target>Linha de comandos</target> - <source>A folder input field is empty.</source> <target>Um dos campos de directório para comparar está vazio.</target> @@ -292,8 +292,8 @@ <source>/sec</source> <target>/seg</target> -<source>%x items</source> -<target>%x itens</target> +<source>%x items/sec</source> +<target>%x itens/seg</target> <source>Configuration file %x loaded partially only.</source> <target>Ficheiro de configuração %x carregado parcialmente.</target> @@ -322,11 +322,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Nome de volume %x não faz parte do caminho do ficheiro %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Abortar pedido: À espera do fim da operação atual...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Paragem solicitada: À espera que termine a operação actual...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Falha ao criar selo temporal para versões anteriores:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Não é possÃvel criar timestamp para controle de versões:</target> <source>Cannot read the following XML elements:</source> <target>Não é possÃvel ler os elementos XML:</target> @@ -343,8 +343,8 @@ <source>&Program</source> <target>&Programa</target> -<source>&Content</source> -<target>C&onteúdo</target> +<source>&View help</source> +<target>&Ver ajuda</target> <source>&About</source> <target>So&bre</target> @@ -367,8 +367,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Para começar basta importar um ficheiro .ffs_batch.</target> -<source>Folders to watch</source> -<target>Pastas a observar</target> +<source>Folders to watch:</source> +<target>Pastas a verificar:</target> <source>Add folder</source> <target>Adicionar pasta</target> @@ -382,12 +382,15 @@ <source>Select a folder</source> <target>Selecione uma pasta</target> -<source>Idle time [seconds]</source> -<target>Tempo de espera [segundos]</target> +<source>Idle time (in seconds):</source> +<target>Tempo de espera (em segundos):</target> <source>Idle time between last detected change and execution of command</source> <target>Tempo de espera entre a última alteração detetada e a execução do comando</target> +<source>Command line:</source> +<target>Linha de comandos:</target> + <source> The command is triggered if: - files or subfolders change @@ -399,33 +402,30 @@ O comando é executado se: - forem detetadas novas pastas (p.e. pen USB) </target> -<source>Start</source> -<target>Iniciar</target> - -<source>&Retry</source> -<target>&Tentar de Novo</target> - -<source>Cancel</source> -<target>Cancelar</target> +<source>&Start</source> +<target>&InÃcio</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Sincronização Automatizada</target> +<source>About</source> +<target>Sobre</target> <source>Build: %x</source> <target>Build: %x</target> -<source>About</source> -<target>Sobre</target> - <source>All files</source> <target>Todos os ficheiros</target> +<source>Automated Synchronization</source> +<target>Sincronização Automática</target> + <source>Directory monitoring active</source> <target>Monitorização de directório activa</target> <source>Waiting until all directories are available...</source> <target>A aguardar que todos os directórios fiquem disponÃveis...</target> +<source>Error</source> +<target>Erro</target> + <source>&Restore</source> <target>&Restaurar</target> @@ -435,8 +435,11 @@ O comando é executado se: <source>&Exit</source> <target>&Sair</target> -<source>Invalid command line:</source> -<target>Linha de comando inválida:</target> +<source>Incorrect command line:</source> +<target>Linha de comandos incorrecta:</target> + +<source>&Retry</source> +<target>&Tentar de Novo</target> <source>File content</source> <target>Conteúdo do ficheiro</target> @@ -498,8 +501,8 @@ O comando é executado se: <source>Target folder input field must not be empty.</source> <target>Campo de directório de destino não deve estar vazio.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Campo do directório para manter versões não deve estar vazio.</target> +<source>Please enter a target folder for versioning.</source> +<target>Introduza uma pasta de destino para o controlo de versões.</target> <source>Source folder %x not found.</source> <target>Directório %x não encontrado.</target> @@ -537,8 +540,8 @@ O comando é executado se: <source>job name</source> <target>nome da tarefa</target> -<source>Synchronization aborted</source> -<target>Sincronização abortada</target> +<source>Synchronization stopped</source> +<target>Sincronização parada</target> <source>Synchronization completed with errors</source> <target>Sincronização completa com erros</target> @@ -555,14 +558,38 @@ O comando é executado se: <source>Saving log file %x...</source> <target>A guardar ficheiro log %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Pressionar "Trocar" para resolver problemas com a interface principal do FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Pode mudar para a janela principal do FreeFileSync para resovler este problema.</target> + +<source>&Don't show this warning again</source> +<target>&Não mostrar este aviso novamente</target> -<source>Switching to FreeFileSync main dialog</source> -<target>A mudar para o diálogo principal do FreeFileSync</target> +<source>&Ignore</source> +<target>&Ignorar</target> -<source>Retrying operation after error:</source> -<target>A tentar novamente a operação após erro:</target> +<source>&Switch</source> +<target>&Trocar</target> + +<source>Switching to FreeFileSync's main window</source> +<target>A mudar para a janela principal do FreeFileSync</target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>Repetir automaticamente dentro de 1 segundo...</pluralform> +<pluralform>Repetir automaticamente dentro de %x segundos...</pluralform> +</target> + +<source>&Ignore subsequent errors</source> +<target>&Ignorar erros subsequentes</target> + +<source>Serious Error</source> +<target>Erro Grave</target> + +<source>Check for Program Updates</source> +<target>Procurar actualizações do programa</target> <source>A new version of FreeFileSync is available:</source> <target>Uma nova versão do FreeFileSync está disponÃvel:</target> @@ -570,18 +597,12 @@ O comando é executado se: <source>Download now?</source> <target>Fazer download agora?</target> -<source>New version found</source> -<target>Nova versão encontrada</target> - <source>&Download</source> <target>&Download</target> <source>FreeFileSync is up to date.</source> <target>FreeFileSync está actualizado.</target> -<source>Information</source> -<target>Informação</target> - <source>Unable to connect to sourceforge.net.</source> <target>Não é possÃvel ligar a sourceforge.net.</target> @@ -639,20 +660,20 @@ O comando é executado se: <source>Hibernate</source> <target>Hibernar</target> -<source>Selected variant:</source> -<target>Variante selecionada:</target> +<source>Alternate comparison settings</source> +<target>Definições de comparação alternativas</target> -<source>Select alternate comparison settings</source> -<target>Selecionar opções alternativas de comparação</target> +<source>Alternate synchronization settings</source> +<target>Definições de sincronização alternativas</target> -<source>Select alternate synchronization settings</source> -<target>Selecionar opções alternativas de sincronização</target> +<source>Local filter</source> +<target>Filtro local</target> -<source>Filter is active</source> -<target>Filtro activo</target> +<source>Active</source> +<target>Activo</target> -<source>No filter selected</source> -<target>Nenhum filtro selecionado</target> +<source>None</source> +<target>Nenhum</target> <source>Remove alternate settings</source> <target>Remover opções alternativas</target> @@ -666,6 +687,15 @@ O comando é executado se: <source>Paste</source> <target>Colar</target> +<source>Alternate Comparison Settings</source> +<target>Definições de comparação alternativas</target> + +<source>Alternate Synchronization Settings</source> +<target>Definições de sincronização alternativas</target> + +<source>Local Filter</source> +<target>Filtro local</target> + <source>&New</source> <target>&Novo</target> @@ -681,15 +711,18 @@ O comando é executado se: <source>2. &Synchronize</source> <target>2. &Sincronizar</target> +<source>&Global settings</source> +<target>&Opções</target> + <source>&Language</source> <target>&LÃngua</target> +<source>&Find...</source> +<target>&Procurar...</target> + <source>&Export file list...</source> <target>&Exportar lista de ficheiros...</target> -<source>&Global settings</source> -<target>&Opções</target> - <source>&Tools</source> <target>&Ferramentas</target> @@ -699,17 +732,14 @@ O comando é executado se: <source>Check &automatically once a week</source> <target>Verificar &automaticamente uma vez por semana</target> -<source>Check for new &version</source> -<target>Verificar nova &versão</target> +<source>&Check for new version</source> +<target>&Procurar por actualizações</target> <source>Compare</source> <target>Comparar</target> -<source>Comparison settings</source> -<target>Opções de comparação</target> - -<source>Synchronization settings</source> -<target>Parametros de sincronização</target> +<source>Cancel</source> +<target>Cancelar</target> <source>Synchronize</source> <target>Sincronizar</target> @@ -723,6 +753,15 @@ O comando é executado se: <source>Swap sides</source> <target>Trocar lados</target> +<source>Close search bar</source> +<target>Fechar barra de pesquisa</target> + +<source>Find:</source> +<target>Procurar:</target> + +<source>Match case</source> +<target>Correspondência</target> + <source>Save as batch job</source> <target>Guardar como batch</target> @@ -744,73 +783,20 @@ O comando é executado se: <source>Total bytes to copy</source> <target>Total em bytes a copiar</target> -<source>Items found:</source> -<target>Elementos encontrados:</target> - -<source>Speed:</source> -<target>Velocidade:</target> - -<source>Time remaining:</source> -<target>Tempo restante:</target> - -<source>Time elapsed:</source> -<target>Tempo decorrido</target> - -<source>Synchronizing...</source> -<target>A sincronizar...</target> - -<source>Minimize to notification area</source> -<target>Minimizar para a área de notificação</target> - -<source>On completion</source> -<target>Ao terminar</target> - -<source>Close</source> -<target>Fechar</target> - -<source>&Pause</source> -<target>&Pausa</target> - -<source>Variant</source> -<target>Variável</target> - -<source>Statistics</source> -<target>EstatÃsticas</target> +<source>Select a variant:</source> +<target>Seleccionar uma variante:</target> -<source>&Don't show this dialog again</source> -<target>&Não mostrar este diálogo novamente</target> - -<source>Select a variant</source> -<target>Seleccione uma variante</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Ficheiros considerados iguais se - - data da última modificação - - tamanho -são iguais -</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Identificar ficheiros iguais ao comparar hora de modificação e tamanho.</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Os ficheiros são considerados iguais se - - o conteúdo é o mesmo -</target> +<source>Identify equal files by comparing the file content.</source> +<target>Identificar ficheiros iguais ao comparar o conteúdo.</target> -<source>Symbolic Link handling</source> -<target>Tratamento de links simbólicos</target> +<source>Symbolic links:</source> +<target>Links simbólicos:</target> -<source>Help</source> -<target>Ajuda</target> +<source>More information</source> +<target>Mais informação</target> <source>OK</source> <target>OK</target> @@ -818,11 +804,11 @@ Os ficheiros são considerados iguais se <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identificar e propagar mudanças nos dois lados. Eliminações, cópias e conflitos são detectados automaticamente usando base de dados.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Cópia de segurança do directório à esquerda. O directório da direita é alterado para ficar igual ao da esquerda após sincronização.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Criar uma cópia exacta da pasta à esquerda, que vai corresponder à pasta da direita após a sincronização.</target> -<source>Copy new or updated files to right folder.</source> -<target>Copiar ficheiros novos ou actualizados para a direita</target> +<source>Copy new and updated files to the right folder.</source> +<target>Copiar ficheiros novos e actualizados para a pasta à direita.</target> <source>Configure your own synchronization rules.</source> <target>Configure as suas regras de sincronização.</target> @@ -833,23 +819,8 @@ Os ficheiros são considerados iguais se <source>Requires database files. Not supported by all file systems.</source> <target>Requer base de dados. Não é suportado por todos os sistemas de ficheiros.</target> -<source>Error handling</source> -<target>Controlador de erros</target> - -<source>Ignore</source> -<target>Ignorar</target> - -<source>Hide all error and warning messages</source> -<target>Ocultar todas as mensagens de erro/aviso</target> - -<source>Pop-up</source> -<target>Pop-up</target> - -<source>Show pop-up on errors or warnings</source> -<target>Mostrar popup em caso de erros ou avisos</target> - -<source>Deletion handling</source> -<target>Controlo eliminação</target> +<source>Delete files:</source> +<target>Eliminar ficheiros:</target> <source>Permanent</source> <target>Permanente</target> @@ -872,56 +843,89 @@ Os ficheiros são considerados iguais se <source>Naming convention:</source> <target>Convenção de nomes:</target> -<source>Batch job</source> -<target>Ficheiro Batch</target> +<source>Show examples</source> +<target>Mostrar exemplos</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Criar ficheiro batch para sincronização automática. Para iniciar, fazer duplo clique no ficheiro ou acrescentar ao planeador de tarefas: %x</target> +<source>Handle errors:</source> +<target>Tratar erros:</target> -<source>Exit</source> -<target>Sair</target> +<source>Ignore</source> +<target>Ignorar</target> -<source>Abort synchronization on first error</source> -<target>Abortar sincronização ao primeiro erro</target> +<source>Hide all error and warning messages</source> +<target>Ocultar todas as mensagens de erro/aviso</target> -<source>Show progress dialog</source> -<target>Mostrar diálogo de progresso</target> +<source>Pop-up</source> +<target>Pop-up</target> -<source>Save log</source> -<target>Guardar log</target> +<source>Show pop-up on errors or warnings</source> +<target>Mostrar popup em caso de erros ou avisos</target> -<source>Select folder to save log files</source> -<target>Seleccionar pasta para guardar ficheiros log</target> +<source>On completion:</source> +<target>Ao completar:</target> -<source>Limit</source> -<target>Limitar</target> +<source>Start synchronization now?</source> +<target>Iniciar sincronização agora?</target> -<source>Limit maximum number of log files</source> -<target>Limitar o número máximo de ficheiros log</target> +<source>Variant:</source> +<target>Variante:</target> -<source>Source code written in C++ using:</source> -<target>Código fonte escrito em C++ utilizando:</target> +<source>Statistics</source> +<target>EstatÃsticas</target> -<source>If you like FreeFileSync</source> -<target>Se gosta do FreeFileSync</target> +<source>&Don't show this dialog again</source> +<target>&Não mostrar este diálogo novamente</target> -<source>Donate with PayPal</source> -<target>Doar usando PayPal</target> +<source>Items found:</source> +<target>Elementos encontrados:</target> -<source>Many thanks for localization:</source> -<target>Muito obrigado pela localização:</target> +<source>Speed:</source> +<target>Velocidade:</target> -<source>Feedback and suggestions are welcome</source> -<target>Comentários e sugestões são apreciados</target> +<source>Time remaining:</source> +<target>Tempo restante:</target> -<source>Homepage</source> -<target>Site</target> +<source>Time elapsed:</source> +<target>Tempo decorrido</target> -<source>Email</source> -<target>Email</target> +<source>Synchronizing...</source> +<target>A sincronizar...</target> -<source>Published under the GNU General Public License</source> -<target>Publicado sobre GNU General Public License</target> +<source>Minimize to notification area</source> +<target>Minimizar para a área de notificação</target> + +<source>Close</source> +<target>Fechar</target> + +<source>&Pause</source> +<target>&Pausa</target> + +<source>Stop</source> +<target>Parar</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Criar ficheiro batch para sincronização automática. Para iniciar, fazer duplo clique no ficheiro ou acrescentar ao planeador de tarefas: %x</target> + +<source>Stop synchronization at first error</source> +<target>Para sincronização ao primeiro erro</target> + +<source>Show progress dialog</source> +<target>Mostrar diálogo de progresso</target> + +<source>Save log:</source> +<target>Guardar registo:</target> + +<source>Limit:</source> +<target>Limitar:</target> + +<source>Limit maximum number of log files</source> +<target>Limitar o número máximo de ficheiros log</target> + +<source>How can I schedule a batch job?</source> +<target>Como posso agendar um trabalho batch?</target> + +<source>&Recycle bin</source> +<target>&Reciclagem</target> <source>Delete on both sides</source> <target>Eliminar em ambos os lados</target> @@ -929,95 +933,125 @@ Os ficheiros são considerados iguais se <source>Delete on both sides even if the file is selected on one side only</source> <target>Eliminar em ambos os lados mesmo se o ficheiro só está seleccionado num lado</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Os ficheiros só serão sincronizados se passarem todos os filtros. -Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Seleccionar regras de filtro para excluir certos ficheiros da sincronização. Insira os caminhos relativos ao par de directórios correspondente.</target> -<source>Include</source> -<target>Incluir</target> +<source>Include:</source> +<target>Incluir:</target> -<source>Exclude</source> -<target>Excluir</target> +<source>Exclude:</source> +<target>Excluir:</target> -<source>Time span</source> -<target>Intervalo de tempo</target> +<source>Time span:</source> +<target>Intervalo de tempo:</target> -<source>File size</source> -<target>Tamanho ficheiro</target> +<source>File size:</source> +<target>Tamanho ficheiro:</target> -<source>Minimum</source> -<target>MÃnimo</target> +<source>Minimum:</source> +<target>MÃnimo:</target> -<source>Maximum</source> +<source>Maximum:</source> <target>Máximo</target> <source>&Clear</source> <target>&Limpar</target> -<source>Global settings</source> -<target>Opções</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>As seguintes definições são usadas para todas as sincronizações.</target> <source>Fail-safe file copy</source> <target>Cópia à prova de falhas</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Copiar para um ficheiro temporário (*.ffs_tmp) e depois renomear. Isto garante consistência mesmo em caso de erro fatal.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Copiar para um ficheiro temporário (*.ffs_tmp) antes de substituir. +Isto garante um estado consistente mesmo em caso de falha grave. +</target> + +<source>(recommended)</source> +<target>(recomendado)</target> <source>Copy locked files</source> <target>Copiar ficheiros bloqueados</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Copiar ficheiros partilhados ou bloqueados usando o serviço Volume Shadow Copy(necessita direitos de administrador)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Copiar ficheiros partilhados ou bloqueados usando o serviço Volume Shadow Copy.</target> + +<source>(requires administrator rights)</source> +<target>(requer permissões de administrador)</target> <source>Copy file access permissions</source> <target>Copiar permissões de acesso do ficheiro</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Transferir permissões de ficheiros e pastas (necessita direitos de administrador)</target> +<source>Transfer file and folder permissions.</source> +<target>Transferir permissões de pasta e ficheiro.</target> -<source>Restore hidden dialogs</source> -<target>Restaurar diálogos escondidos</target> +<source>Automatic retry on error:</source> +<target>Retentar automaticamente em caso de erro:</target> -<source>External applications</source> -<target>Aplicações externas</target> +<source>Retry count:</source> +<target>Nº de tentativas:</target> + +<source>Delay (in seconds):</source> +<target>Atraso (em segundos):</target> + +<source>Customize context menu:</source> +<target>Personalizar menu de contexto:</target> <source>Description</source> <target>Descrição</target> +<source>Restore hidden windows</source> +<target>Restaurar janelas escondidas</target> + <source>&Default</source> <target>&Config. Iniciais</target> -<source>Find what:</source> -<target>Procurar:</target> +<source>Source code written in C++ using:</source> +<target>Código fonte escrito em C++ utilizando:</target> -<source>Match case</source> -<target>Correspondência</target> +<source>If you like FreeFileSync</source> +<target>Se gosta do FreeFileSync</target> -<source>&Find next</source> -<target>&Procurar seguinte</target> +<source>Donate with PayPal</source> +<target>Doar usando PayPal</target> -<source>Start synchronization</source> -<target>Iniciar a sincronização</target> +<source>Feedback and suggestions are welcome</source> +<target>Comentários e sugestões são apreciados</target> -<source>Delete</source> -<target>Eliminar</target> +<source>Homepage</source> +<target>Site</target> -<source>Configure filter</source> -<target>Configurar filtros</target> +<source>Email</source> +<target>Email</target> -<source>Find</source> -<target>Procurar</target> +<source>Published under the GNU General Public License</source> +<target>Publicado sobre GNU General Public License</target> + +<source>Many thanks for localization:</source> +<target>Muito obrigado pela localização:</target> -<source>Select time span</source> -<target>Selecionar intervalo de tempo</target> +<source>Save as Batch Job</source> +<target>Guardar como Ficheiro Batch</target> -<source>Folder pairs</source> -<target>Par de directório</target> +<source>Delete Items</source> +<target>Eliminar Itens</target> + +<source>Global Settings</source> +<target>Opções Globais</target> + +<source>Select Time Span</source> +<target>Seleccionar Intervalo de Tempo</target> + +<source>Folder Pairs</source> +<target>Par de Pastas</target> + +<source>Find</source> +<target>Procurar</target> <source>Overview</source> <target>Vista</target> @@ -1025,14 +1059,14 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>Configuration</source> <target>Configuração</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Barra principal</target> -<source>Filter files</source> -<target>Filtrar ficheiros</target> +<source>Filter Files</source> +<target>Filtrar Ficheiros</target> -<source>Select view</source> -<target>Selecionar vista</target> +<source>Select View</source> +<target>Seleccionar Vista</target> <source>Open...</source> <target>Abrir...</target> @@ -1043,18 +1077,27 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>Compare both sides</source> <target>Comparar listas</target> +<source>Comparison settings</source> +<target>Opções de comparação</target> + +<source>Synchronization settings</source> +<target>Parametros de sincronização</target> + +<source>Start synchronization</source> +<target>Iniciar a sincronização</target> + +<source>Confirm</source> +<target>Confirmar</target> + <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> -<pluralform>Deseja mesmo executar o comando %y para 1 item?</pluralform> +<pluralform>Deseja mesmo executar o comando %y para um item?</pluralform> <pluralform>Deseja mesmo executar o comando %y para %x itens?</pluralform> </target> -<source>Confirm</source> -<target>Confirmar</target> - <source>&Execute</source> <target>&Executar</target> @@ -1088,12 +1131,6 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>Set direction:</source> <target>Escolher direcção:</target> -<source>Exclude temporarily</source> -<target>Excluir temporariamente</target> - -<source>Include temporarily</source> -<target>Incluir temporariamente</target> - <source>multiple selection</source> <target>seleção múltipla</target> @@ -1103,6 +1140,15 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>Exclude via filter:</source> <target>Excluir por filtro:</target> +<source>Exclude temporarily</source> +<target>Excluir temporariamente</target> + +<source>Include temporarily</source> +<target>Incluir temporariamente</target> + +<source>Delete</source> +<target>Eliminar</target> + <source>Include all</source> <target>Incluir tudo</target> @@ -1145,11 +1191,14 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>Do you want to save changes to %x?</source> <target>Deseja guardar as alterações a %x?</target> +<source>Never save &changes</source> +<target>Nunca guardar &alterações</target> + <source>Do&n't save</source> <target>Não g&uardar</target> -<source>Never save &changes</source> -<target>Nunca guardar &alterações</target> +<source>Filter</source> +<target>Filtro</target> <source>Show files that exist on left side only</source> <target>Mostrar ficheiros existentes somente à esquerda</target> @@ -1196,12 +1245,18 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>Set as default</source> <target>Definir como padrão</target> -<source>Operation aborted</source> -<target>Operação abortada</target> - <source>All folders are in sync</source> <target>Todas as pastas estão sincronizadas</target> +<source>Synchronization Settings</source> +<target>Definições de Sincronização</target> + +<source>Comparison Settings</source> +<target>Definições de Comparação</target> + +<source>Cannot find %x</source> +<target>Não é possÃvel descobrir %x</target> + <source>Comma-separated values</source> <target>Valores separados por virgula</target> @@ -1211,30 +1266,6 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>Searching for program updates...</source> <target>A procurar actualizações do programa...</target> -<source>&Ignore subsequent errors</source> -<target>&Ignorar erros subsequentes</target> - -<source>&Ignore</source> -<target>&Ignorar</target> - -<source>Fatal Error</source> -<target>Erro crÃtico</target> - -<source>&Don't show this warning again</source> -<target>&Não mostrar este aviso novamente</target> - -<source>&Switch</source> -<target>&Trocar</target> - -<source>Question</source> -<target>Questão</target> - -<source>&Yes</source> -<target>&Sim</target> - -<source>&No</source> -<target>&Não</target> - <source>Scanning...</source> <target>A pesquisar...</target> @@ -1244,14 +1275,17 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>Info</source> <target>Info</target> +<source>Warning</source> +<target>Atenção</target> + <source>Paused</source> <target>Em pausa</target> <source>Initializing...</source> <target>A iniciar...</target> -<source>Aborted</source> -<target>Abortado</target> +<source>Stopped</source> +<target>Parado</target> <source>Completed</source> <target>Terminado</target> @@ -1262,12 +1296,6 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>Log</source> <target>Registo</target> -<source>Cannot find %x</source> -<target>Não é possÃvel descobrir %x</target> - -<source>Inactive</source> -<target>Inactivo</target> - <source>Today</source> <target>Hoje</target> @@ -1292,9 +1320,6 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filtro</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1304,6 +1329,9 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <pluralform>Deseja mesmo mover os seguintes %x itens para a reciclagem?</pluralform> </target> +<source>Move</source> +<target>Mover</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1313,6 +1341,9 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <pluralform>Deseja mesmo eliminar os seguintes %x itens?</pluralform> </target> +<source>Exclude</source> +<target>Excluir</target> + <source>Direct</source> <target>Direto</target> @@ -1337,8 +1368,8 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <source>- Other side's counterpart to %item_folder%</source> <target>- Contrapartida de %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Tornar visiveis os diálogos e avisos escondidos novamente?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Restaurar todas as janelas e avisos escondidos?</target> <source>Leave as unresolved conflict</source> <target>Deixar como conflito</target> @@ -1463,14 +1494,14 @@ Nota: O caminho dos ficheiros deve ser relativo ao directório raiz. <pluralform>%x dias</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Falhou o registo para receber mensagens de sistema.</target> +<source>Unable to register to receive system messages.</source> +<target>Não foi possÃvel registar para receber mensagens do sistema.</target> <source>Cannot set privilege %x.</source> <target>Não é possÃvel definir o privilégio %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Falha ao suspender o modo de hibernação do sistema.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Não é possÃvel retornar do modo de suspensão do sistema.</target> <source>Cannot change process I/O priorities.</source> <target>Não é possÃvel alterar as prioridades de E / S do processo.</target> diff --git a/BUILD/Languages/portuguese_br.lng b/BUILD/Languages/portuguese_br.lng index 1c503315..56a5cb8d 100644 --- a/BUILD/Languages/portuguese_br.lng +++ b/BUILD/Languages/portuguese_br.lng @@ -2,11 +2,14 @@ <language>Português (BR)</language> <translator>Edison Aranha</translator> <locale>pt_BR</locale> - <flag_image>flag_brazil.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_brazil.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source>Retrying operation...</source> +<target></target> + <source>Both sides have changed since last synchronization.</source> <target>Ambos os lados foram alterados desde a última sincronização.</target> @@ -98,7 +101,7 @@ <target>Um campo de entrada de pasta está vazio.</target> <source>The corresponding folder will be considered as empty.</source> -<target>A pasta correspondente será considerar como vazia.</target> +<target>A pasta correspondente será considerada como vazia.</target> <source>Cannot find the following folders:</source> <target>Não foi possÃvel localizar as seguintes pastas:</target> @@ -292,8 +295,8 @@ <source>/sec</source> <target>/seg</target> -<source>%x items</source> -<target>%x itens</target> +<source>%x items/sec</source> +<target>%x itens/seg</target> <source>Configuration file %x loaded partially only.</source> <target>O arquivo de configuração %x foi carregado parcialmente.</target> @@ -322,10 +325,10 @@ <source>Volume name %x is not part of file path %y.</source> <target>O nome do volume %x não faz parte do caminho do arquivo %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Cancelar solicitado: Esperando fim da operação...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Interromper solicitado: Aguardando operação ser finalizada...</target> -<source>Failure to create timestamp for versioning:</source> +<source>Unable to create timestamp for versioning:</source> <target>Erro ao criar estampa de tempo para controle de versão:</target> <source>Cannot read the following XML elements:</source> @@ -343,8 +346,8 @@ <source>&Program</source> <target>&Programa</target> -<source>&Content</source> -<target>&Conteúdo</target> +<source>&View help</source> +<target>&Ver ajuda</target> <source>&About</source> <target>&Sobre</target> @@ -367,7 +370,7 @@ <source>To get started just import a .ffs_batch file.</source> <target>Para iniciar importe um arquivo .ffs_batch.</target> -<source>Folders to watch</source> +<source>Folders to watch:</source> <target>Pastas para comparar</target> <source>Add folder</source> @@ -382,12 +385,15 @@ <source>Select a folder</source> <target>Selecionar uma pasta</target> -<source>Idle time [seconds]</source> -<target>Tempo de espera [segundos]</target> +<source>Idle time (in seconds):</source> +<target>Tempo de espera (em segundos):</target> <source>Idle time between last detected change and execution of command</source> <target>Tempo de espera entre última mudança detectada e execução do comando</target> +<source>Command line:</source> +<target>Linha de comando:</target> + <source> The command is triggered if: - files or subfolders change @@ -399,8 +405,8 @@ O comando é disparado se: - novas pastas aparecem (p. ex. Uma pendrive é inserida) </target> -<source>Start</source> -<target>Iniciar</target> +<source>&Start</source> +<target>&Iniciar</target> <source>&Retry</source> <target>&Tentar Novamente</target> @@ -408,9 +414,6 @@ O comando é disparado se: <source>Cancel</source> <target>Cancelar</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Sincronização Automatizada</target> - <source>Build: %x</source> <target>Versão: %x</target> @@ -420,6 +423,9 @@ O comando é disparado se: <source>All files</source> <target>Todos os arquivos</target> +<source>Automated Synchronization</source> +<target>Sincronização Automatizada</target> + <source>Directory monitoring active</source> <target>Monitoramento de diretórios ativado</target> @@ -435,8 +441,8 @@ O comando é disparado se: <source>&Exit</source> <target>&Sair</target> -<source>Invalid command line:</source> -<target>Linha de comando inválida:</target> +<source>Incorrect command line:</source> +<target>Linha de comando incorreta:</target> <source>File content</source> <target>Conteúdo do arquivo</target> @@ -498,8 +504,8 @@ O comando é disparado se: <source>Target folder input field must not be empty.</source> <target>Campo de entrada da pasta de destino não pode ficar vazio.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Campo de entrada da pasta para controle de versão não pode ficar vazio.</target> +<source>Please enter a target folder for versioning.</source> +<target>Por favor, entre com uma pasta destino para controle de versões.</target> <source>Source folder %x not found.</source> <target>Pasta de origem %x não foi encontrada.</target> @@ -537,8 +543,8 @@ O comando é disparado se: <source>job name</source> <target>nome da tarefa</target> -<source>Synchronization aborted</source> -<target>Sincronização cancelada</target> +<source>Synchronization stopped</source> +<target>Sincronização interrompida</target> <source>Synchronization completed with errors</source> <target>Sincronização finalizada com erros</target> @@ -555,14 +561,20 @@ O comando é disparado se: <source>Saving log file %x...</source> <target>Salvando arquivo de log %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Pressione "Alterar" para resolver os conflitos na tela principal do FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Você pode alternar para a janela principal do FreeFileSync para resolver este problema.</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Mudando para a caixa de diálogo principal do FreeFileSync</target> +<source>Switching to FreeFileSync's main window</source> +<target>Mudando para a janela principal do FreeFileSync</target> -<source>Retrying operation after error:</source> -<target>Tentando operação novamente após erro:</target> +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>Nova tentativa autompatica em 1 segundo...</pluralform> +<pluralform>Nova tentativa autompatica em %x segundos...</pluralform> +</target> <source>A new version of FreeFileSync is available:</source> <target>Uma nova versão do FreeFileSync está disponÃvel:</target> @@ -570,8 +582,8 @@ O comando é disparado se: <source>Download now?</source> <target>Baixar agora?</target> -<source>New version found</source> -<target>Nova versão encontrada</target> +<source>Check for Program Updates</source> +<target>Verificar se existem atualizações</target> <source>&Download</source> <target>&Baixar</target> @@ -639,20 +651,20 @@ O comando é disparado se: <source>Hibernate</source> <target>Hibernar</target> -<source>Selected variant:</source> -<target>Modo selecionado:</target> +<source>Alternate comparison settings</source> +<target>Configurações alternativas de comparação</target> -<source>Select alternate comparison settings</source> -<target>Selecionar configurações alternativas de comparação</target> +<source>Alternate synchronization settings</source> +<target>Configurações alternativas de sincronização</target> -<source>Select alternate synchronization settings</source> -<target>Selecionar configurações alternativas de sincronização</target> +<source>Local filter</source> +<target>Filtro local</target> -<source>Filter is active</source> -<target>Filtro está ativo</target> +<source>Active</source> +<target>Ativo</target> -<source>No filter selected</source> -<target>Nenhum filtro selecionado</target> +<source>None</source> +<target>Nenhum</target> <source>Remove alternate settings</source> <target>Remover configurações alternativas</target> @@ -666,6 +678,15 @@ O comando é disparado se: <source>Paste</source> <target>Colar</target> +<source>Alternate Comparison Settings</source> +<target>Configurações Alternativas de Comparação</target> + +<source>Alternate Synchronization Settings</source> +<target>Configurações Alternativas de Sincronização</target> + +<source>Local Filter</source> +<target>Filtro Local</target> + <source>&New</source> <target>&Novo</target> @@ -681,15 +702,18 @@ O comando é disparado se: <source>2. &Synchronize</source> <target>2. S&incronizar</target> +<source>&Global settings</source> +<target>&Configurações</target> + <source>&Language</source> <target>&Idioma</target> +<source>&Find...</source> +<target>&Localizar...</target> + <source>&Export file list...</source> <target>&Exportar lista de arquivos...</target> -<source>&Global settings</source> -<target>&Configurações</target> - <source>&Tools</source> <target>&Ferramentas</target> @@ -699,8 +723,8 @@ O comando é disparado se: <source>Check &automatically once a week</source> <target>Verificar &automaticamente uma vez por semana</target> -<source>Check for new &version</source> -<target>Verificar se existe nova &versão</target> +<source>&Check for new version</source> +<target>&Verificar se existe nova versão</target> <source>Compare</source> <target>Comparar</target> @@ -717,6 +741,15 @@ O comando é disparado se: <source>Swap sides</source> <target>Inverter lados</target> +<source>Close search bar</source> +<target>Fechar barra de localização</target> + +<source>Find:</source> +<target>Localizar:</target> + +<source>Match case</source> +<target>Diferenciar maiúsculas e minúsculas</target> + <source>Save as batch job</source> <target>Salvar como tarefa em lote</target> @@ -738,74 +771,20 @@ O comando é disparado se: <source>Total bytes to copy</source> <target>Bytes totais a serem copiados</target> -<source>Items found:</source> -<target>Elementos encontrados:</target> - -<source>Speed:</source> -<target>Velocidade:</target> - -<source>Time remaining:</source> -<target>Tempo restante:</target> - -<source>Time elapsed:</source> -<target>Tempo decorrido:</target> - -<source>Synchronizing...</source> -<target>Sincronizando...</target> - -<source>Minimize to notification area</source> -<target>Minimizar para a área de notificação</target> - -<source>On completion</source> -<target>Ao finalizar</target> - -<source>Close</source> -<target>Fechar</target> - -<source>&Pause</source> -<target>&Pausar</target> - -<source>Variant</source> -<target>Modo</target> - -<source>Statistics</source> -<target>EstatÃsticas</target> - -<source>&Don't show this dialog again</source> -<target>&Não mostrar este diálogo novamente</target> +<source>Select a variant:</source> +<target>Selecione uma variante:</target> -<source>Select a variant</source> -<target>Selecione uma variante</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Identifica arquivos iguais comparando modificações na data e no tamanho.</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Os arquivos são considerados iguais se - - data e hora de modificação e - - tamanho do arquivo -são os mesmos -</target> +<source>Identify equal files by comparing the file content.</source> +<target>Identifica arquivos iguais comparando o conteúdo do arquivo.</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Os arquivos são considerados iguais se - - o conteúdo do arquivo -é o mesmo -</target> - -<source>Symbolic Link handling</source> -<target>Tratamento de Links Simbólicos</target> +<source>Symbolic links:</source> +<target>Links simbólicos:</target> -<source>Help</source> -<target>Ajuda</target> +<source>More information</source> +<target>Mais informação</target> <source>OK</source> <target>OK</target> @@ -813,10 +792,10 @@ Os arquivos são considerados iguais se <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identifica e propaga as mudanças em ambos os lados. Arquivos e pastas apagados e/ou movidos e conflitos são detectados automaticamente usando um banco de dados.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Cópia espelho da pasta da esquerda. A pasta da direita será modificada para ficar exatamente igual à pasta da esquerda após a sincronização.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Cria uma cópia espelho da pasta da esquerda que é exatamente igual à pasta da esquerda após a sincronização.</target> -<source>Copy new or updated files to right folder.</source> +<source>Copy new and updated files to the right folder.</source> <target>Copia arquivos novos ou atualizados para a pasta da direita.</target> <source>Configure your own synchronization rules.</source> @@ -828,23 +807,8 @@ Os arquivos são considerados iguais se <source>Requires database files. Not supported by all file systems.</source> <target>Requer um arquivo de banco de dados. Não é suportado por todos os sistemas de arquivos.</target> -<source>Error handling</source> -<target>Tratamento de erros</target> - -<source>Ignore</source> -<target>Ignorar</target> - -<source>Hide all error and warning messages</source> -<target>Oculta todas as mensagens de erros e avisos</target> - -<source>Pop-up</source> -<target>Pop-up</target> - -<source>Show pop-up on errors or warnings</source> -<target>Mostra pop-up em caso de erros ou avisos</target> - -<source>Deletion handling</source> -<target>Tratamento da exclusão</target> +<source>Delete files:</source> +<target>Apagar arquivos:</target> <source>Permanent</source> <target>Permanente</target> @@ -867,111 +831,174 @@ Os arquivos são considerados iguais se <source>Naming convention:</source> <target>Convenção de nomenclatura:</target> -<source>Batch job</source> -<target>Tarefa em lote</target> +<source>Show examples</source> +<target>Mostrar exemplos</target> + +<source>Handle errors:</source> +<target>Tratamento de erros:</target> + +<source>Ignore</source> +<target>Ignorar</target> + +<source>Hide all error and warning messages</source> +<target>Oculta todas as mensagens de erros e avisos</target> + +<source>Pop-up</source> +<target>Pop-up</target> + +<source>Show pop-up on errors or warnings</source> +<target>Mostra pop-up em caso de erros ou avisos</target> + +<source>On completion:</source> +<target>Ao finalizar:</target> + +<source>Start synchronization now?</source> +<target>Iniciar sincronização agora?</target> + +<source>Variant:</source> +<target>Variante:</target> + +<source>Statistics</source> +<target>EstatÃsticas</target> + +<source>&Don't show this dialog again</source> +<target>&Não mostrar este diálogo novamente</target> + +<source>Items found:</source> +<target>Elementos encontrados:</target> + +<source>Speed:</source> +<target>Velocidade:</target> + +<source>Time remaining:</source> +<target>Tempo restante:</target> + +<source>Time elapsed:</source> +<target>Tempo decorrido:</target> + +<source>Synchronizing...</source> +<target>Sincronizando...</target> + +<source>Minimize to notification area</source> +<target>Minimizar para a área de notificação</target> + +<source>Close</source> +<target>Fechar</target> + +<source>&Pause</source> +<target>&Pausar</target> + +<source>Stop</source> +<target>Interromper</target> <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target>Cria um arquivo de tarefa em lote para sincronização desatendida. Para iniciar, dê um clique duplo neste arquivo ou agende no agendador de tarefas: %x</target> -<source>Exit</source> -<target>Sair</target> - -<source>Abort synchronization on first error</source> -<target>Cancela sincronização no primeiro erro</target> +<source>Stop synchronization at first error</source> +<target>Interromper sincronização ao primeiro erro</target> <source>Show progress dialog</source> <target>Mostrar indicador de progresso</target> -<source>Save log</source> -<target>Salvar log</target> - -<source>Select folder to save log files</source> -<target>Seleciona pasta para salvar arquivos de log</target> +<source>Save log:</source> +<target>Salvar arquivo de log:</target> -<source>Limit</source> -<target>Limite</target> +<source>Limit:</source> +<target>Limite:</target> <source>Limit maximum number of log files</source> <target>Limita número máximo de arquivos de log</target> +<source>How can I schedule a batch job?</source> +<target>Como posso agendar uma tarefa em lote?</target> + +<source>&Recycle bin</source> +<target>&Lixeira</target> + <source>Delete on both sides</source> <target>Apagar em ambos os lados</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>Apaga em ambos os lados mesmo se o arquivo está selecionado só em um lado</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Os arquivos só serão sincronizados se passarem por todas as regras do filtro. -Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Selecione regras de filtro para exlcuir certos arquivos da sincrinização. Entre com os caminhos relativos dos pares de pastas correspondentes.</target> -<source>Include</source> -<target>Incluir</target> +<source>Include:</source> +<target>Incluir:</target> -<source>Exclude</source> -<target>Excluir</target> +<source>Exclude:</source> +<target>Excluir:</target> -<source>Time span</source> -<target>Intervalo de tempo</target> +<source>Time span:</source> +<target>Intervalo de tempo:</target> -<source>File size</source> -<target>Tamanho do arquivo</target> +<source>File size:</source> +<target>Tamanho do arquivo:</target> -<source>Minimum</source> -<target>MÃnimo</target> +<source>Minimum:</source> +<target>MÃnimo:</target> -<source>Maximum</source> -<target>Máximo</target> +<source>Maximum:</source> +<target>Máximo:</target> <source>&Clear</source> <target>&Limpar</target> -<source>Global settings</source> -<target>Configurações</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>As seguintes configurações são utilizadas para todas as tarefas de sincronização.</target> <source>Fail-safe file copy</source> <target>Cópia de arquivos a prova de falhas</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Copia primeiro para um arquivo temporário (*.ffs_tmp) e depois o renomeia. Isto garante um estado consistente mesmo em caso de erro fatal.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Copia para um arquivo temporário (*.ffs_tmp) antes de substituir o destino. +Isto garante um estado consistente mesmo em caso de erro grave. +</target> + +<source>(recommended)</source> +<target>(recomendado)</target> <source>Copy locked files</source> <target>Copiar arquivos bloqueados (em uso)</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Copia arquivos compartilhados ou bloqueados usando o Serviço de Cópia de Sombra de Volume (requer direitos de administrador.</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Copia arquivos compartilhados ou bloqueados usando o Serviço de Cópia de Sombra de Volume.</target> + +<source>(requires administrator rights)</source> +<target>(requer direitos de administrador)</target> <source>Copy file access permissions</source> <target>Copiar permissões de acesso aos arquivos</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Transfere permissões de arquivos e pastas (requer direitos de administrador).</target> +<source>Transfer file and folder permissions.</source> +<target>Transfere permissões de arquivos e pastas.</target> + +<source>Automatic retry on error:</source> +<target>Nova tentativa automática em caso de erro:</target> -<source>Restore hidden dialogs</source> -<target>Restaurar diálogos ocultados</target> +<source>Retry count:</source> +<target>Número de tentativas:</target> -<source>External applications</source> -<target>Aplicações externas</target> +<source>Delay (in seconds):</source> +<target>Atraso (em segundos):</target> + +<source>Customize context menu:</source> +<target>Personalizar menu de contexto:</target> <source>Description</source> <target>Descrição</target> +<source>Restore hidden windows</source> +<target>Restaurar janelas ocultadas</target> + <source>&Default</source> <target>&Config. Padrão</target> -<source>Find what:</source> -<target>Localizar o que:</target> - -<source>Match case</source> -<target>Diferenciar maiúsculas e minúsculas</target> - -<source>&Find next</source> -<target>&Localizar próxima</target> - <source>Source code written in C++ using:</source> <target>Código-fonte escrito em C++ utilizando:</target> @@ -996,44 +1023,38 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>Many thanks for localization:</source> <target>Pela tradução, um agradecimento a:</target> -<source>Start synchronization</source> -<target>Iniciar a sincronização</target> +<source>Save as Batch Job</source> +<target>Salvar como Tarefa em Lote</target> -<source>Comparison settings</source> -<target>Parâmetros de comparação</target> +<source>Delete Items</source> +<target>Apagar Itens</target> -<source>Synchronization settings</source> -<target>Parâmetros de sincronização</target> +<source>Global Settings</source> +<target>Configurações</target> -<source>Delete</source> -<target>Apagar</target> +<source>Select Time Span</source> +<target>Selecionar Intervalo de Tempo</target> -<source>Configure filter</source> -<target>Configurar filtros</target> +<source>Folder Pairs</source> +<target>Pares de Pastas</target> <source>Find</source> <target>Localizar</target> -<source>Select time span</source> -<target>Selecionar intervalo de tempo</target> - -<source>Folder pairs</source> -<target>Pares de pastas</target> - <source>Overview</source> <target>Parâmetros</target> <source>Configuration</source> <target>Configuração</target> -<source>Main bar</source> -<target>Barra principal</target> +<source>Main Bar</source> +<target>Barra Principal</target> -<source>Filter files</source> -<target>Filtrar arquivos</target> +<source>Filter Files</source> +<target>Filtrar Arquivos</target> -<source>Select view</source> -<target>Selecionar visualização</target> +<source>Select View</source> +<target>Selecionar Visualização</target> <source>Open...</source> <target>Abrir...</target> @@ -1044,12 +1065,21 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>Compare both sides</source> <target>Comparar os dois lados</target> +<source>Comparison settings</source> +<target>Parâmetros de comparação</target> + +<source>Synchronization settings</source> +<target>Parâmetros de sincronização</target> + +<source>Start synchronization</source> +<target>Iniciar a sincronização</target> + <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> -<pluralform>Você realmente deseja executar o comando %y para 1 item?</pluralform> +<pluralform>Você realmente deseja executar o comando %y para um item?</pluralform> <pluralform>Você realmente deseja executar o comando %y para %x itens?</pluralform> </target> @@ -1089,12 +1119,6 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>Set direction:</source> <target>Configurar direção</target> -<source>Exclude temporarily</source> -<target>Excluir temporariamente</target> - -<source>Include temporarily</source> -<target>Incluir temporariamente</target> - <source>multiple selection</source> <target>seleção múltipla</target> @@ -1104,6 +1128,15 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>Exclude via filter:</source> <target>Excluir via filtro:</target> +<source>Exclude temporarily</source> +<target>Excluir temporariamente</target> + +<source>Include temporarily</source> +<target>Incluir temporariamente</target> + +<source>Delete</source> +<target>Apagar</target> + <source>Include all</source> <target>Incluir todos</target> @@ -1152,6 +1185,9 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>Never save &changes</source> <target>Nunca salvar as &modificações</target> +<source>Filter</source> +<target>Filtro</target> + <source>Show files that exist on left side only</source> <target>Mostrar arquivos que existem somente à esquerda</target> @@ -1197,12 +1233,18 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>Set as default</source> <target>Definir como padrão</target> -<source>Operation aborted</source> -<target>Operação cancelada</target> - <source>All folders are in sync</source> <target>Todas as pastas estão sincronizadas</target> +<source>Synchronization Settings</source> +<target>Configurações de Sincronização</target> + +<source>Comparison Settings</source> +<target>Configurações de Comparação</target> + +<source>Cannot find %x</source> +<target>Não foi possÃvel localizar %x</target> + <source>Comma-separated values</source> <target>Valores separados por vÃrgula</target> @@ -1218,8 +1260,8 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>&Ignore</source> <target>&Ignorar</target> -<source>Fatal Error</source> -<target>Erro fatal</target> +<source>Serious Error</source> +<target>Erro Grave</target> <source>&Don't show this warning again</source> <target>&Não mostrar este aviso novamente</target> @@ -1227,9 +1269,6 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>&Switch</source> <target>&Alterar</target> -<source>Question</source> -<target>Questão</target> - <source>&Yes</source> <target>&Sim</target> @@ -1251,8 +1290,8 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>Initializing...</source> <target>Inicializando...</target> -<source>Aborted</source> -<target>Cancelado</target> +<source>Stopped</source> +<target>Interrompido</target> <source>Completed</source> <target>Finalizado</target> @@ -1263,12 +1302,6 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>Log</source> <target>Log</target> -<source>Cannot find %x</source> -<target>Não foi possÃvel localizar %x</target> - -<source>Inactive</source> -<target>Inativo</target> - <source>Today</source> <target>Hoje</target> @@ -1293,9 +1326,6 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filtro</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1335,9 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <pluralform>Você realmente deseja mover os seguintes %x itens para a Lixeira?</pluralform> </target> +<source>Move</source> +<target>Mover</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1347,9 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <pluralform>Você realmente deseja apagar os seguintes %x itens?</pluralform> </target> +<source>Exclude</source> +<target>Excluir</target> + <source>Direct</source> <target>Direto</target> @@ -1338,8 +1374,8 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <source>- Other side's counterpart to %item_folder%</source> <target>- Contrapartida do outro lado para %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Tornar avisar e diálogos ocultados visÃveis outra vez?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Restaurar todos as janelas e avisos ocultados?</target> <source>Leave as unresolved conflict</source> <target>Deixar como conflito não resolvido</target> @@ -1464,14 +1500,14 @@ Nota: os caminhos dos arquivos devem ser relativos aos diretórios base. <pluralform>%x dias</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Falha ao registrar para receber mensagens do sistema.</target> +<source>Unable to register to receive system messages.</source> +<target>Não foi possÃvel registrar para receber mensagens do sistema.</target> <source>Cannot set privilege %x.</source> <target>Não foi possÃvel estabelecer o privilégio %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Falha ao suspender o modo de espera do sistema.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Não foi possÃvel suspender o modo de espera do sistema.</target> <source>Cannot change process I/O priorities.</source> <target>Não foi possÃvel mudar a prioridade de E/S do processo.</target> diff --git a/BUILD/Languages/romanian.lng b/BUILD/Languages/romanian.lng index dd30e917..b16b7db7 100644 --- a/BUILD/Languages/romanian.lng +++ b/BUILD/Languages/romanian.lng @@ -2,11 +2,31 @@ <language>Română</language> <translator>Alexandru Bogdan Munteanu</translator> <locale>ro_RO</locale> - <flag_image>flag_romania.png</flag_image> - <plural_form_count>3</plural_form_count> + <image>flag_romania.png</image> + <plural_count>3</plural_count> <plural_definition>n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>Ambele părÈ›i s-au modificat de la ultima sincronizare.</target> @@ -58,9 +78,6 @@ <source>Cannot open file %x.</source> <target>Nu pot deschide fila %x.</target> -<source>Error</source> -<target>Eroare</target> - <source>File %x does not contain a valid configuration.</source> <target>Fila %x nu conÈ›ine o configuraÈ›ie validă.</target> @@ -70,12 +87,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>Fila de configurare nu trebuie să conÈ›ină setări la nivelul perechii de dosare, cînd dosarele sînt setate prin linia de comandă.</target> -<source>Warning</source> -<target>AtenÈ›ie</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>Dosarele nu pot fi setate pentru mai mult de o singură filă de configurare.</target> +<source>Command line</source> +<target>Linie de comandă</target> + <source>Syntax:</source> <target>Sintaxă:</target> @@ -91,9 +108,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>Orice număr de dosare alternative pentru cel mult o filă de configurare.</target> -<source>Command line</source> -<target>Linie de comandă</target> - <source>A folder input field is empty.</source> <target>Un cîmp de introducere a dosarului este gol.</target> @@ -295,8 +309,8 @@ <source>/sec</source> <target>/sec</target> -<source>%x items</source> -<target>%x itemuri</target> +<source>%x items/sec</source> +<target>%x itemuri/sec</target> <source>Configuration file %x loaded partially only.</source> <target>Fila de configuraÈ›ie %x a fost deschisă doar parÈ›ial.</target> @@ -325,11 +339,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Numele volumului %x nu face parte din calea filei %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Abandonare solicitată: Se aÈ™teaptă terminarea operaÈ›iei în curs...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Oprire solicitată: AÈ™tept terminarea operaÈ›iei în curs...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Crearea marcajului temporal pentru versionare a eÈ™uat</target> +<source>Unable to create timestamp for versioning:</source> +<target>Nu pot crea marcajul de timp pentru versionare:</target> <source>Cannot read the following XML elements:</source> <target>Nu pot citi următoarele elemente XML:</target> @@ -346,8 +360,8 @@ <source>&Program</source> <target>&Program</target> -<source>&Content</source> -<target>&ConÈ›inut</target> +<source>&View help</source> +<target>&Cuprins</target> <source>&About</source> <target>&Despre</target> @@ -370,8 +384,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Pentru a începe, importă o filă de tipul .ffs_batch.</target> -<source>Folders to watch</source> -<target>Dosare de Monitorizat</target> +<source>Folders to watch:</source> +<target>Dosare de Monitorizat:</target> <source>Add folder</source> <target>Adaugă Dosar</target> @@ -385,12 +399,15 @@ <source>Select a folder</source> <target>Selectează un Dosar</target> -<source>Idle time [seconds]</source> -<target>Timp de inactivitate [secunde]</target> +<source>Idle time (in seconds):</source> +<target>Timp de inactivitate (în secunde):</target> <source>Idle time between last detected change and execution of command</source> <target>Timpul de inactivitate între ultima schimbare detectată È™i executarea comenzii</target> +<source>Command line:</source> +<target>Linie de comandă:</target> + <source> The command is triggered if: - files or subfolders change @@ -402,8 +419,8 @@ Comanda este declanÈ™ată dacă: - apar dosare noi (de ex. prin ataÈ™area unui dispozitiv USB) </target> -<source>Start</source> -<target>PorneÈ™te</target> +<source>&Start</source> +<target>&PorneÈ™te</target> <source>&Retry</source> <target>&Reîncearcă</target> @@ -411,24 +428,27 @@ Comanda este declanÈ™ată dacă: <source>Cancel</source> <target>Anulează</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Sincronizare Inteligentă</target> +<source>About</source> +<target>Despre</target> <source>Build: %x</source> <target>CompilaÈ›ia: %x</target> -<source>About</source> -<target>Despre</target> - <source>All files</source> <target>Toate Filele</target> +<source>Automated Synchronization</source> +<target>Sincronizare Automată</target> + <source>Directory monitoring active</source> <target>Monitorizarea dosarelor este activă</target> <source>Waiting until all directories are available...</source> <target>AÈ™tept pînă cînd toate dosarele vor fi disponibile...</target> +<source>Error</source> +<target>Eroare</target> + <source>&Restore</source> <target>&Restaurează</target> @@ -438,8 +458,8 @@ Comanda este declanÈ™ată dacă: <source>&Exit</source> <target>&IeÈ™i</target> -<source>Invalid command line:</source> -<target>Linie de comandă nevalidă:</target> +<source>Incorrect command line:</source> +<target>Linie de comandă incorectă:</target> <source>File content</source> <target>ConÈ›inutul Filelor</target> @@ -448,7 +468,7 @@ Comanda este declanÈ™ată dacă: <target>Timpul È™i Mărimea Filelor</target> <source>Two way</source> -<target>BidirecÈ›ională</target> +<target>Ambele Sensuri</target> <source>Mirror</source> <target>Clonare</target> @@ -457,7 +477,7 @@ Comanda este declanÈ™ată dacă: <target>Actualizare</target> <source>Custom</source> -<target>Sincronizare Personalizată</target> +<target>Personalizat</target> <source>Multiple...</source> <target>Multiplu...</target> @@ -501,8 +521,8 @@ Comanda este declanÈ™ată dacă: <source>Target folder input field must not be empty.</source> <target>Cîmpul de introducere a dosarului È›intă nu trebuie să fie gol.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Cîmpul de introducere a dosarului pentru versionare nu trebuie să fie gol.</target> +<source>Please enter a target folder for versioning.</source> +<target>Introdu dosarul È›intă pentru versionare.</target> <source>Source folder %x not found.</source> <target>Dosarul sursă %x nu a fost găsit.</target> @@ -540,8 +560,8 @@ Comanda este declanÈ™ată dacă: <source>job name</source> <target>numele sarcinii</target> -<source>Synchronization aborted</source> -<target>Sincronizare abandonată</target> +<source>Synchronization stopped</source> +<target>Sincronizare oprită</target> <source>Synchronization completed with errors</source> <target>Sincronizare terminată cu erori</target> @@ -558,14 +578,29 @@ Comanda este declanÈ™ată dacă: <source>Saving log file %x...</source> <target>Salvez fila jurnal %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Apasă "Comută" pentru a rezolva problemele din dialogul principal FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>PoÈ›i comuta la fereastra principală FreeFileSync pentru a rezolva această problemă.</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Comut la dialogul principal FreeFileSync</target> +<source>&Don't show this warning again</source> +<target>&Nu arăta din nou această atenÈ›ionare</target> -<source>Retrying operation after error:</source> -<target>Reîncerc operaÈ›ia după eroare:</target> +<source>&Ignore</source> +<target>&OK</target> + +<source>&Switch</source> +<target>&Comută</target> + +<source>Switching to FreeFileSync's main window</source> +<target>Comut la fereastra principală FreeFileSync</target> + +<source>Serious Error</source> +<target>Eroare Serioasă</target> + +<source>&Ignore subsequent errors</source> +<target>&Ignoră erorile ulterioare</target> + +<source>Check for Program Updates</source> +<target>Caută Actualizări ale Programului</target> <source>A new version of FreeFileSync is available:</source> <target>Este disponibilă o versiune nouă a softului:</target> @@ -573,18 +608,12 @@ Comanda este declanÈ™ată dacă: <source>Download now?</source> <target>Vrei s-o descarci acum ?</target> -<source>New version found</source> -<target>A fost găsită o versiune nouă</target> - <source>&Download</source> <target>&Descarcă</target> <source>FreeFileSync is up to date.</source> <target>Ai deja ultima versiune a softului.</target> -<source>Information</source> -<target>InformaÈ›ii</target> - <source>Unable to connect to sourceforge.net.</source> <target>Conectarea la situl sourceforge.net nu poate fi realizată.</target> @@ -642,20 +671,20 @@ Comanda este declanÈ™ată dacă: <source>Hibernate</source> <target>Pune Calculatorul în Hibernare</target> -<source>Selected variant:</source> -<target>Varianta selectată:</target> +<source>Alternate comparison settings</source> +<target>Setări alternative de comparare</target> -<source>Select alternate comparison settings</source> -<target>Selectează setările alternative de comparare</target> +<source>Alternate synchronization settings</source> +<target>Setări alternative de sincronizare</target> -<source>Select alternate synchronization settings</source> -<target>Selectează o altă configuraÈ›ie a sincronizării</target> +<source>Local filter</source> +<target>Filtru local</target> -<source>Filter is active</source> -<target>Filtrul de elemente este activ</target> +<source>Active</source> +<target>Activ</target> -<source>No filter selected</source> -<target>Nu a fost selectat nici un filtru</target> +<source>None</source> +<target>Nimic</target> <source>Remove alternate settings</source> <target>ÃŽnlătură setările alternative</target> @@ -669,6 +698,15 @@ Comanda este declanÈ™ată dacă: <source>Paste</source> <target>LipeÈ™te</target> +<source>Alternate Comparison Settings</source> +<target>Setări Alternative de Comparare</target> + +<source>Alternate Synchronization Settings</source> +<target>Setări Alternative de Sincronizare</target> + +<source>Local Filter</source> +<target>Filtru Local</target> + <source>&New</source> <target>ConfiguraÈ›ie &Nouă</target> @@ -684,15 +722,18 @@ Comanda este declanÈ™ată dacă: <source>2. &Synchronize</source> <target>2. &Sincronizează</target> +<source>&Global settings</source> +<target>&Setări Globale</target> + <source>&Language</source> <target>&Limbă</target> +<source>&Find...</source> +<target>&GăseÈ™te...</target> + <source>&Export file list...</source> <target>&Exportă Lista de File...</target> -<source>&Global settings</source> -<target>&Setări Globale</target> - <source>&Tools</source> <target>&Unelte</target> @@ -702,7 +743,7 @@ Comanda este declanÈ™ată dacă: <source>Check &automatically once a week</source> <target>Caută &Automat în Fiecare Săptămînă</target> -<source>Check for new &version</source> +<source>&Check for new version</source> <target>Caută &Versiune Nouă</target> <source>Compare</source> @@ -720,6 +761,15 @@ Comanda este declanÈ™ată dacă: <source>Swap sides</source> <target>Schimbă compartimentele stîng È™i drept între ele</target> +<source>Close search bar</source> +<target>ÃŽnchide bara de căutare</target> + +<source>Find:</source> +<target>GăseÈ™te:</target> + +<source>Match case</source> +<target>PotriveÈ™te cu caseta literelor (MAJ/min)</target> + <source>Save as batch job</source> <target>Salvează ca Sarcină Set</target> @@ -741,74 +791,20 @@ Comanda este declanÈ™ată dacă: <source>Total bytes to copy</source> <target>Numărul total de baiÈ›i copiaÈ›i</target> -<source>Items found:</source> -<target>Elemente Găsite:</target> +<source>Select a variant:</source> +<target>Selectează o variantă:</target> -<source>Speed:</source> -<target>Viteză:</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Filele identice sînt descoperite prin compararea timpului modificării È™i a mărimii.</target> -<source>Time remaining:</source> -<target>Timp Rămas:</target> +<source>Identify equal files by comparing the file content.</source> +<target>Filele identice sînt descoperite prin compararea conÈ›inutului filelor.</target> -<source>Time elapsed:</source> -<target>Timp Scurs:</target> +<source>Symbolic links:</source> +<target>Legături Simbolice:</target> -<source>Synchronizing...</source> -<target>Sincronizare Aflată în Curs...</target> - -<source>Minimize to notification area</source> -<target>Minimizează în aria de notificare (sertar)</target> - -<source>On completion</source> -<target>La Terminare</target> - -<source>Close</source> -<target>ÃŽnchide</target> - -<source>&Pause</source> -<target>&Pauzează</target> - -<source>Variant</source> -<target>Varianta Sincronizării</target> - -<source>Statistics</source> -<target>Statistici</target> - -<source>&Don't show this dialog again</source> -<target>Nu arăta acest &dialog din nou</target> - -<source>Select a variant</source> -<target>Selectează o variantă</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Filele sînt considerate identice dacă - - data È™i ora ultimei scrieri - - mărimea filelor -sînt aceleaÈ™i -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Filele sînt considerate identice dacă - - conÈ›inutul filelor -este acelaÈ™i -</target> - -<source>Symbolic Link handling</source> -<target>Gestionarea Legăturilor Simbolice</target> - -<source>Help</source> -<target>Ajutor</target> +<source>More information</source> +<target>Mai multe informaÈ›ii</target> <source>OK</source> <target>OK</target> @@ -816,11 +812,11 @@ este acelaÈ™i <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identificare È™i propagare a modificărilor din ambele părÈ›i. Ștergerile, renumirile È™i conflictele sînt detectate automat, folosind o bază de date.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Conservare [backup] în oglindă a dosarului stîng. Dosarul drept e modificat pentru a fi identic după sincronizare cu cel stîng.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Creează o conservare [backup] în oglindă a dosarului stîng care se potriveÈ™te exact cu dosarul drept după sincronizare.</target> -<source>Copy new or updated files to right folder.</source> -<target>Copiere în dosarul din dreapta a filelor actualizate sau noi.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Copiază filele noi È™i cele actualizate în dosarul drept.</target> <source>Configure your own synchronization rules.</source> <target>Reguli de sincronizare definite de utilizator pentru fiecare situaÈ›ie.</target> @@ -831,23 +827,8 @@ este acelaÈ™i <source>Requires database files. Not supported by all file systems.</source> <target>Necesită file cu baze de date. Nu e suportat de toate sistemele de file.</target> -<source>Error handling</source> -<target>Gestionarea Erorilor</target> - -<source>Ignore</source> -<target>Ignorare</target> - -<source>Hide all error and warning messages</source> -<target>Mesajele de eroare È™i de avertizare nu sînt arătate</target> - -<source>Pop-up</source> -<target>Popîc</target> - -<source>Show pop-up on errors or warnings</source> -<target>ÃŽn caz de erori sau avertizări este arătată o fereastră popîc [popup]</target> - -<source>Deletion handling</source> -<target>Gestionarea Ștergerii</target> +<source>Delete files:</source> +<target>Ștergerea Filelor:</target> <source>Permanent</source> <target>Definitivă</target> @@ -855,8 +836,8 @@ este acelaÈ™i <source>Delete or overwrite files permanently</source> <target>Filele sînt È™terse sau suprascrise în mod definitiv, fără a mai putea fi recuperate</target> -<source>Recycle bin</source> -<target>Reciclator</target> +<source>&Recycle bin</source> +<target>&Reciclator</target> <source>Back up deleted and overwritten files in the recycle bin</source> <target>Conservă [back up] în Reciclator filele È™terse sau suprascrise</target> @@ -870,56 +851,86 @@ este acelaÈ™i <source>Naming convention:</source> <target>ConvenÈ›ie de numire:</target> -<source>Batch job</source> -<target>Sarcină Set</target> +<source>Show examples</source> +<target>Arată exemple</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Creează o filă set [batch file] pentru sincronizarea neasistată. Pentru efectuarea sincronizării, dublu-clichează această filă sau programează rularea ei folosind un Planificator de Sarcini [Task Scheduler]: %x</target> +<source>Handle errors:</source> +<target>Gestionarea Erorilor:</target> -<source>Exit</source> -<target>IeÈ™ire</target> +<source>Ignore</source> +<target>Ignorare</target> -<source>Abort synchronization on first error</source> -<target>Sincronizarea e abandonată la prima eroare</target> +<source>Hide all error and warning messages</source> +<target>Mesajele de eroare È™i de avertizare nu sînt arătate</target> -<source>Show progress dialog</source> -<target>Arată progresul sincronizării</target> +<source>Pop-up</source> +<target>Popîc</target> -<source>Save log</source> -<target>Salvează jurnalul acÈ›iunilor</target> +<source>Show pop-up on errors or warnings</source> +<target>ÃŽn caz de erori sau avertizări este arătată o fereastră popîc [popup]</target> -<source>Select folder to save log files</source> -<target>Selectează dosarul cu filele jurnal</target> +<source>On completion:</source> +<target>La terminare:</target> -<source>Limit</source> -<target>Limită</target> +<source>Start synchronization now?</source> +<target>Pornesc sincronizarea acum?</target> -<source>Limit maximum number of log files</source> -<target>Limitează numărul maxim de file jurnal</target> +<source>Variant:</source> +<target>Variantă:</target> -<source>Source code written in C++ using:</source> -<target>Cod sursă scris în C++ folosind:</target> +<source>Statistics</source> +<target>Statistici</target> -<source>If you like FreeFileSync</source> -<target>Donează pentru FreeFileSync</target> +<source>&Don't show this dialog again</source> +<target>Nu arăta acest &dialog din nou</target> -<source>Donate with PayPal</source> -<target>Donează prin PayPal</target> +<source>Items found:</source> +<target>Elemente Găsite:</target> -<source>Feedback and suggestions are welcome</source> -<target>Opiniile È™i sugestiile despre program sînt binevenite.</target> +<source>Speed:</source> +<target>Viteză:</target> -<source>Homepage</source> -<target>Situl Softului</target> +<source>Time remaining:</source> +<target>Timp Rămas:</target> -<source>Email</source> -<target>Adresa Autorului</target> +<source>Time elapsed:</source> +<target>Timp Scurs:</target> -<source>Published under the GNU General Public License</source> -<target>Publicat sub licenÈ›a GNU GPL</target> +<source>Synchronizing...</source> +<target>Sincronizare Aflată în Curs...</target> -<source>Many thanks for localization:</source> -<target>Multe mulÈ›umiri pentru localizare:</target> +<source>Minimize to notification area</source> +<target>Minimizează în aria de notificare (sertar)</target> + +<source>Close</source> +<target>ÃŽnchide</target> + +<source>&Pause</source> +<target>&Pauzează</target> + +<source>Stop</source> +<target>OpreÈ™te</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Creează o filă set [batch file] pentru sincronizarea neasistată. Pentru efectuarea sincronizării, dublu-clichează această filă sau programează rularea ei folosind un Planificator de Sarcini [Task Scheduler]: %x</target> + +<source>Stop synchronization at first error</source> +<target>OpreÈ™te sincronizarea la prima eroare întîlnită</target> + +<source>Show progress dialog</source> +<target>Arată progresul sincronizării</target> + +<source>Save log:</source> +<target>Salvează jurnalul:</target> + +<source>Limit:</source> +<target>Limitare:</target> + +<source>Limit maximum number of log files</source> +<target>Limitează numărul maxim de file jurnal</target> + +<source>How can I schedule a batch job?</source> +<target>Cum pot planifica o sarcină set?</target> <source>Delete on both sides</source> <target>Șterge din ambele părÈ›i</target> @@ -927,115 +938,139 @@ este acelaÈ™i <source>Delete on both sides even if the file is selected on one side only</source> <target>Șterge din ambele părÈ›i, chiar dacă fila e selecÈ›ionată într-o singură parte</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Filele vor fi sincronizate doar dacă îndeplinesc toate regulile filtrului. -Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Selectează regulile filtrului pentru a exclude anumite file de la sincronizare. Introdu căile filelor relative la perechea lor de dosare corespondentă.</target> -<source>Include</source> -<target>Incluse</target> +<source>Include:</source> +<target>Incluse:</target> -<source>Exclude</source> -<target>Excluse</target> +<source>Exclude:</source> +<target>Excluse:</target> -<source>Time span</source> -<target>Intervalul de Timp</target> +<source>Time span:</source> +<target>Intervalul de Timp:</target> -<source>File size</source> -<target>Mărimea Filei</target> +<source>File size:</source> +<target>Mărimea Filei:</target> -<source>Minimum</source> -<target>Minim</target> +<source>Minimum:</source> +<target>Minim:</target> -<source>Maximum</source> -<target>Maxim</target> +<source>Maximum:</source> +<target>Maxim:</target> <source>&Clear</source> <target>&Curăță</target> -<source>Global settings</source> -<target>Setări Globale</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Setările următoare sînt folosite pentru toate sarcinile de sincronizare.</target> <source>Fail-safe file copy</source> <target>Copiază filele în modul protejat la eÈ™ec [fail-safe]</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Copierea se face mai întîi într-o filă temporară (*.ffs_tmp), care e apoi renumită. Se garantează astfel consecvenÈ›a stării filelor chiar È™i în cazul apariÈ›iei de erori fatale.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Copiază într-o filă temporară (*.ffs_tmp) înainte de suprascrierea filei È›intă. +Aceasta garantează consecvenÈ›a stării filelor chiar È™i în cazul apariÈ›iei de erori serioase. +</target> + +<source>(recommended)</source> +<target>(recomandat)</target> <source>Copy locked files</source> <target>Copiază filele partajate [shared] sau zăvorîte [locked]</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Filele partajate sau zăvorîte sînt copiate folosind Serviciul de Conservare a Volumelor din Windows [Volume Shadow Copy] (necesită drepturi de Administrator)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Filele partajate sau zăvorîte sînt copiate folosind Serviciul de Conservare a Volumelor din Windows [Volume Shadow Copy].</target> + +<source>(requires administrator rights)</source> +<target>(necesită drepturi de Administrator)</target> <source>Copy file access permissions</source> <target>Copiază permisiunile de acces ale filelor</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Permisiunile filelor È™i dosarelor sînt È™i ele transferate (necesită drepturi de Administrator)</target> +<source>Transfer file and folder permissions.</source> +<target>Permisiunile filelor È™i dosarelor sînt È™i ele transferate.</target> + +<source>Automatic retry on error:</source> +<target>Reîncearcă automat în caz de eroare:</target> -<source>Restore hidden dialogs</source> -<target>Restaurează Dialogurile Ascunse</target> +<source>Retry count:</source> +<target>Numărul reîncercărilor:</target> -<source>External applications</source> -<target>AplicaÈ›ii Externe</target> +<source>Delay (in seconds):</source> +<target>ÃŽntîrziere (în secunde):</target> + +<source>Customize context menu:</source> +<target>Personalizează meniul contextual:</target> <source>Description</source> <target>Descriere</target> +<source>Restore hidden windows</source> +<target>Restaurează ferestrele ascunse</target> + <source>&Default</source> <target>Coloanele &Implicite</target> -<source>Find what:</source> -<target>GăseÈ™te Asta:</target> +<source>Source code written in C++ using:</source> +<target>Cod sursă scris în C++ folosind:</target> -<source>Match case</source> -<target>PotriveÈ™te MAJ/min</target> +<source>If you like FreeFileSync</source> +<target>Donează pentru FreeFileSync</target> -<source>&Find next</source> -<target>&GăseÈ™te Următorul</target> +<source>Donate with PayPal</source> +<target>Donează prin PayPal</target> -<source>Start synchronization</source> -<target>PorneÈ™te Sincronizarea</target> +<source>Feedback and suggestions are welcome</source> +<target>Opiniile È™i sugestiile despre program sînt binevenite.</target> -<source>Comparison settings</source> -<target>Setările Comparării</target> +<source>Homepage</source> +<target>Situl Softului</target> -<source>Synchronization settings</source> -<target>Setările Sincronizării</target> +<source>Email</source> +<target>Adresa Autorului</target> -<source>Delete</source> -<target>Șterge</target> +<source>Published under the GNU General Public License</source> +<target>Publicat sub licenÈ›a GNU GPL</target> -<source>Configure filter</source> -<target>Configurează Filtrul</target> +<source>Many thanks for localization:</source> +<target>Multe mulÈ›umiri pentru localizare:</target> -<source>Find</source> -<target>GăseÈ™te</target> +<source>Save as Batch Job</source> +<target>Salvează ca Sarcină Set</target> + +<source>Delete Items</source> +<target>Șterge Elementele</target> + +<source>Global Settings</source> +<target>Setări Globale</target> -<source>Select time span</source> -<target>Selectează intervalul de timp</target> +<source>Select Time Span</source> +<target>Selectează Intervalul de Timp</target> -<source>Folder pairs</source> +<source>Folder Pairs</source> <target>Perechi de Dosare</target> +<source>Find</source> +<target>GăseÈ™te</target> + <source>Overview</source> <target>Panoramă</target> <source>Configuration</source> <target>ConfiguraÈ›ie</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Bara Principală</target> -<source>Filter files</source> -<target>Filtru</target> +<source>Filter Files</source> +<target>Filtrează Filele</target> -<source>Select view</source> +<source>Select View</source> <target>Selectează Vederea</target> <source>Open...</source> @@ -1047,15 +1082,14 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <source>Compare both sides</source> <target>Compară PărÈ›ile Stîngă È™i Dreaptă</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Sigur vrei să execuÈ›i comanda %y pentru 1 element?</pluralform> -<pluralform>Sigur vrei să execuÈ›i comanda %y pentru %x elemente?</pluralform> -<pluralform>Sigur vrei să execuÈ›i comanda %y pentru %x de elemente?</pluralform> -</target> +<source>Comparison settings</source> +<target>Setările Comparării</target> + +<source>Synchronization settings</source> +<target>Setările Sincronizării</target> + +<source>Start synchronization</source> +<target>PorneÈ™te Sincronizarea</target> <source>Confirm</source> <target>Confirmă</target> @@ -1096,12 +1130,6 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <source>Set direction:</source> <target>Setează AcÈ›iunea ca în Icoana Alăturată:</target> -<source>Exclude temporarily</source> -<target>Exclude Temporar</target> - -<source>Include temporarily</source> -<target>Include Temporar</target> - <source>multiple selection</source> <target>selectare multiplă</target> @@ -1111,6 +1139,15 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <source>Exclude via filter:</source> <target>Exclude prin Filtrul:</target> +<source>Exclude temporarily</source> +<target>Exclude Temporar</target> + +<source>Include temporarily</source> +<target>Include Temporar</target> + +<source>Delete</source> +<target>Șterge</target> + <source>Include all</source> <target>Include Tot</target> @@ -1153,11 +1190,14 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <source>Do you want to save changes to %x?</source> <target>Vrei să salvezi modificările făcute la %x?</target> +<source>Never save &changes</source> +<target>Nu salva ni&ciodată modificările</target> + <source>Do&n't save</source> <target>&Nu salva</target> -<source>Never save &changes</source> -<target>Nu salva ni&ciodată modificările</target> +<source>Filter</source> +<target>Filtru</target> <source>Show files that exist on left side only</source> <target>Arată filele care există doar în stînga</target> @@ -1204,12 +1244,18 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <source>Set as default</source> <target>Setează ca implicit</target> -<source>Operation aborted</source> -<target>OperaÈ›ie abandonată</target> - <source>All folders are in sync</source> <target>Toate dosarele sînt sincronizate</target> +<source>Synchronization Settings</source> +<target>Setările Sincronizării</target> + +<source>Comparison Settings</source> +<target>Setările Comparării</target> + +<source>Cannot find %x</source> +<target>Nu pot găsi %x</target> + <source>Comma-separated values</source> <target>Valori separate prin virgulă</target> @@ -1219,30 +1265,6 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <source>Searching for program updates...</source> <target>Caut actualizări ale programului...</target> -<source>&Ignore subsequent errors</source> -<target>&Ignoră erorile ulterioare</target> - -<source>&Ignore</source> -<target>&OK</target> - -<source>Fatal Error</source> -<target>Eroare Fatală</target> - -<source>&Don't show this warning again</source> -<target>&Nu arăta din nou această atenÈ›ionare</target> - -<source>&Switch</source> -<target>&Comută</target> - -<source>Question</source> -<target>ÃŽntrebare</target> - -<source>&Yes</source> -<target>&Da</target> - -<source>&No</source> -<target>&Nu</target> - <source>Scanning...</source> <target>Scanez...</target> @@ -1252,14 +1274,17 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <source>Info</source> <target>InformaÈ›ii</target> +<source>Warning</source> +<target>AtenÈ›ie</target> + <source>Paused</source> <target>Sincronizare Pauzată</target> <source>Initializing...</source> <target>IniÈ›ializez...</target> -<source>Aborted</source> -<target>Sincronizare Abandonată</target> +<source>Stopped</source> +<target>Oprită</target> <source>Completed</source> <target>Sincronizare Terminată</target> @@ -1270,12 +1295,6 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <source>Log</source> <target>Jurnal</target> -<source>Cannot find %x</source> -<target>Nu pot găsi %x</target> - -<source>Inactive</source> -<target>Dezactivat</target> - <source>Today</source> <target>Azi</target> @@ -1300,9 +1319,6 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filtru</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1313,6 +1329,9 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <pluralform>Sigur vrei să muÈ›i în Reciclator următoarele %x de elemente?</pluralform> </target> +<source>Move</source> +<target>Mută</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1323,6 +1342,9 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <pluralform>Sigur vrei să È™tergi definitiv următoarele %x de elemente?</pluralform> </target> +<source>Exclude</source> +<target>Exclude</target> + <source>Direct</source> <target>DirecÈ›ionează</target> @@ -1347,8 +1369,8 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <source>- Other side's counterpart to %item_folder%</source> <target>- corespondentul din partea opusă al lui %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Vrei ca dialogurile ascunse È™i mesajele de avertizare să fie vizibile din nou?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Restaurezi toate ferestrele È™i avertismentele ascunse?</target> <source>Leave as unresolved conflict</source> <target>Lasă ca conflict nerezolvat</target> @@ -1476,14 +1498,14 @@ Notă: Căile filelor trebuie să fie relative la dosarele bază (rădăcină). <pluralform>%x de zile</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>EÈ™ec al înregistrării pentru primirea mesajelor de sistem.</target> +<source>Unable to register to receive system messages.</source> +<target>Nu pot înregistra softul pentru a primi mesaje de la sistemul de operare.</target> <source>Cannot set privilege %x.</source> <target>Nu pot seta privilegiul %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Nu pot suspenda intrarea sistemului în adormire (repaus).</target> +<source>Unable to suspend system sleep mode.</source> +<target>Nu pot suspenda modul de intrare în repaus [sleep] al sistemului.</target> <source>Cannot change process I/O priorities.</source> <target>Nu pot schimba prioritățile I/O ale procesului.</target> diff --git a/BUILD/Languages/russian.lng b/BUILD/Languages/russian.lng index 8ef22f8c..5735f4f3 100644 --- a/BUILD/Languages/russian.lng +++ b/BUILD/Languages/russian.lng @@ -2,183 +2,31 @@ <language>PуÑÑкий</language> <translator>Fayzullin T.N. aka Svobodniy</translator> <locale>ru_RU</locale> - <flag_image>flag_russia.png</flag_image> - <plural_form_count>3</plural_form_count> + <image>flag_russia.png</image> + <plural_count>3</plural_count> <plural_definition>n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<11 || n%100>14) ? 1 : 2</plural_definition> </header> -<source>Unable to move %x to the recycle bin.</source> -<target></target> - <source> -<pluralform>Do you really want to move the following item to the recycle bin?</pluralform> -<pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> -</source> -<target> -</target> - -<source>Log</source> -<target></target> - -<source>&Continue</source> -<target></target> - -<source>&Don't show this warning again</source> -<target></target> - -<source>&Ignore subsequent errors</source> -<target></target> - -<source>Comma-separated values</source> -<target></target> - -<source>Never save &changes</source> -<target></target> - -<source>Include via filter:</source> -<target></target> - -<source>&Execute</source> -<target></target> - -<source>Confirm</source> -<target></target> - -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> </target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target></target> - -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> +<source>&Check</source> <target></target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> +<source>Retrying operation...</source> <target></target> <source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target></target> - -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target></target> - -<source>Move files to a user-defined folder</source> -<target></target> - -<source>Back up deleted and overwritten files in the recycle bin</source> -<target></target> - -<source>Recycle bin</source> -<target></target> - -<source>Requires database files. Not supported by all file systems.</source> -<target></target> - -<source>Detect moved files</source> -<target></target> - -<source>&Don't show this dialog again</source> -<target></target> - -<source>Minimize to notification area</source> -<target></target> - -<source>Retrying operation after error:</source> -<target></target> - -<source>job name</source> -<target></target> - -<source>Creating a Volume Shadow Copy for %x...</source> -<target></target> - -<source>The following folders are significantly different. Make sure you are matching the correct folders for synchronization.</source> -<target></target> - -<source>&Show error</source> -<target></target> - -<source>Waiting until all directories are available...</source> -<target></target> - -<source>Directory monitoring active</source> -<target></target> - -<source>Volume name %x is not part of file path %y.</source> -<target></target> - -<source>Cannot access the Volume Shadow Copy Service.</source> -<target></target> - -<source>%x items</source> -<target></target> - -<source> -<pluralform>1 thread</pluralform> -<pluralform>%x threads</pluralform> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> </source> <target> </target> -<source> -<pluralform>1 byte</pluralform> -<pluralform>%x bytes</pluralform> -</source> -<target> -</target> - -<source>Any number of alternative directories for at most one config file.</source> -<target></target> - -<source>Any number of FreeFileSync .ffs_gui and/or .ffs_batch configuration files.</source> -<target></target> - -<source>directory</source> -<target></target> - -<source>config files</source> -<target></target> - -<source>Syntax:</source> -<target></target> - -<source>Directories cannot be set for more than one configuration file.</source> -<target></target> - -<source>The config file must not contain settings at directory pair level when directories are set via command line.</source> -<target></target> - -<source>Unequal number of left and right directories specified.</source> -<target></target> - -<source>Cannot open file %x.</source> -<target></target> - -<source>Syntax error</source> -<target></target> - -<source>A directory path is expected after %x.</source> -<target></target> - -<source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source> -<target></target> - -<source>Moving symbolic link %x to the recycle bin</source> -<target></target> - -<source>Moving folder %x to the recycle bin</source> -<target></target> - -<source>Moving file %x to the recycle bin</source> -<target></target> - <source>Both sides have changed since last synchronization.</source> <target>Со времени поÑледней Ñинхронизации Ñ Ð¾Ð±ÐµÐ¸Ñ… Ñторон произошли изменениÑ.</target> @@ -200,6 +48,15 @@ Note: File paths must be relative to base directories. <source>Checking recycle bin availability for folder %x...</source> <target>Проверка доÑтупноÑти "Корзины" Ð´Ð»Ñ Ð¿Ð°Ð¿ÐºÐ¸ %x...</target> +<source>Moving file %x to the recycle bin</source> +<target>Перемещение файла %x в "Корзину"</target> + +<source>Moving folder %x to the recycle bin</source> +<target>Перемещение папки %x в "Корзину"</target> + +<source>Moving symbolic link %x to the recycle bin</source> +<target>Перемещение Ñимвольной ÑÑылки %x в "Корзину"</target> + <source>Deleting file %x</source> <target>Удаление файла %x</target> @@ -209,21 +66,51 @@ Note: File paths must be relative to base directories. <source>Deleting symbolic link %x</source> <target>Удаление Ñимвольной ÑÑылки %x</target> +<source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source> +<target>Ð”Ð»Ñ Ñтого пути "Корзина" недоÑтупна! Файлы будут удалены безвозвратно:</target> + <source>An exception occurred</source> <target>ИÑключение произошло</target> -<source>Error</source> -<target>Ошибка</target> +<source>A directory path is expected after %x.</source> +<target>ОжидаетÑÑ Ð¿ÑƒÑ‚ÑŒ папки поÑле %x.</target> + +<source>Syntax error</source> +<target>СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°</target> + +<source>Cannot open file %x.</source> +<target>Ðевозможно открыть файл %x.</target> <source>File %x does not contain a valid configuration.</source> <target>Файл %x не Ñодержит дейÑтвительной конфигурации.</target> -<source>Warning</source> -<target>Внимание</target> +<source>Unequal number of left and right directories specified.</source> +<target>Указано неравное чиÑло папок Ñлева и Ñправа.</target> + +<source>The config file must not contain settings at directory pair level when directories are set via command line.</source> +<target>Конфигурационный файл не должен Ñодержать наÑтройки на уровне пар папок, когда папки задаютÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ командной Ñтроки.</target> + +<source>Directories cannot be set for more than one configuration file.</source> +<target>Папки не могут быть уÑтановлены более чем в одном конфигурационном файле.</target> <source>Command line</source> <target>ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока</target> +<source>Syntax:</source> +<target>СинтакÑиÑ:</target> + +<source>config files</source> +<target>конфигурационные файлы</target> + +<source>directory</source> +<target>папка</target> + +<source>Any number of FreeFileSync .ffs_gui and/or .ffs_batch configuration files.</source> +<target>Любое количеÑтво FreeFileSync .ffs_gui и/или .ffs_batch конфигурационных файлов.</target> + +<source>Any number of alternative directories for at most one config file.</source> +<target>Любое количеÑтво альтернативных папок Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ конфигурационного файла.</target> + <source>A folder input field is empty.</source> <target>Поле ввода папки пуÑтое.</target> @@ -381,6 +268,16 @@ Note: File paths must be relative to base directories. <source>Total time:</source> <target>Общее времÑ:</target> +<source> +<pluralform>1 byte</pluralform> +<pluralform>%x bytes</pluralform> +</source> +<target> +<pluralform>%x байт</pluralform> +<pluralform>%x байта</pluralform> +<pluralform>%x байт</pluralform> +</target> + <source>%x MB</source> <target>%x МБ</target> @@ -399,12 +296,25 @@ Note: File paths must be relative to base directories. <source>Scanning:</source> <target>Сканирую:</target> +<source> +<pluralform>1 thread</pluralform> +<pluralform>%x threads</pluralform> +</source> +<target> +<pluralform>%x поток</pluralform> +<pluralform>%x потока</pluralform> +<pluralform>%x потоков</pluralform> +</target> + <source>Encoding extended time information: %x</source> <target>Кодирование раÑширенной информации о времени: %x</target> <source>/sec</source> <target>/Ñ</target> +<source>%x items/sec</source> +<target>%x Ñлементов/Ñ</target> + <source>Configuration file %x loaded partially only.</source> <target>Файл конфигурации %x загрузилÑÑ Ñ‡Ð°Ñтично.</target> @@ -417,6 +327,9 @@ Note: File paths must be relative to base directories. <source>Browse directory</source> <target>Обзор папок</target> +<source>Cannot access the Volume Shadow Copy Service.</source> +<target>Ðевозможно получить доÑтуп к Ñлужбе Теневого ÐšÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¢Ð¾Ð¼Ð°.</target> + <source>Please use FreeFileSync 64-bit version to create shadow copies on this system.</source> <target>ПожалуйÑта, иÑпользуйте 64-разрÑдную верÑию FreeFileSync Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ‚ÐµÐ½ÐµÐ²Ñ‹Ñ… копий на Ñтой ÑиÑтеме.</target> @@ -426,10 +339,13 @@ Note: File paths must be relative to base directories. <source>Cannot determine volume name for %x.</source> <target>Ðевозможно определить Ð¸Ð¼Ñ Ñ‚Ð¾Ð¼Ð° Ð´Ð»Ñ %x.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹: Ожидайте, пока Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑÑ...</target> +<source>Volume name %x is not part of file path %y.</source> +<target>Ð˜Ð¼Ñ Ñ‚Ð¾Ð¼Ð° %x не ÑвлÑетÑÑ Ñ‡Ð°Ñтью имени файла %y.</target> + +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Запрошена оÑтановка: Ожидайте, пока Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑÑ...</target> -<source>Failure to create timestamp for versioning:</source> +<source>Unable to create timestamp for versioning:</source> <target>ÐеÑпоÑобноÑÑ‚ÑŒ Ñоздать отметку времени Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ†Ð¸Ð¸ файлов:</target> <source>Cannot read the following XML elements:</source> @@ -445,16 +361,16 @@ Note: File paths must be relative to base directories. <target>&Выход</target> <source>&Program</source> -<target>&Программа</target> +<target>&Файл</target> -<source>&Content</source> +<source>&View help</source> <target>&Справка</target> <source>&About</source> <target>&О программе</target> <source>&Help</source> -<target>П&омощь</target> +<target>&Помощь</target> <source>Usage:</source> <target>ИнÑтрукциÑ:</target> @@ -471,8 +387,8 @@ Note: File paths must be relative to base directories. <source>To get started just import a .ffs_batch file.</source> <target>Ð”Ð»Ñ Ð·Ð°Ð¿ÑƒÑка проÑто импортируйте файл .ffs_batch.</target> -<source>Folders to watch</source> -<target>Папки Ð´Ð»Ñ Ð½Ð°Ð±Ð»ÑŽÐ´ÐµÐ½Ð¸Ñ</target> +<source>Folders to watch:</source> +<target>Папки Ð´Ð»Ñ Ð½Ð°Ð±Ð»ÑŽÐ´ÐµÐ½Ð¸Ñ:</target> <source>Add folder</source> <target>Добавить папку</target> @@ -486,11 +402,14 @@ Note: File paths must be relative to base directories. <source>Select a folder</source> <target>Выбрать папку</target> -<source>Idle time [seconds]</source> -<target>Ð’Ñ€ÐµÐ¼Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ¸ [Ñекунды]</target> +<source>Idle time (in seconds):</source> +<target>Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ (в Ñекундах):</target> <source>Idle time between last detected change and execution of command</source> -<target>Ð’Ñ€ÐµÐ¼Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ¸ между поÑледним обнаруженным изменением и выполнением командной Ñтроки в Ñекундах</target> +<target>Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ поÑледним обнаруженным изменением и выполнением командной Ñтроки в Ñекундах</target> + +<source>Command line:</source> +<target>ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока:</target> <source> The command is triggered if: @@ -503,36 +422,45 @@ The command is triggered if: - поÑвилиÑÑŒ новые папки (например, подключение переноÑного ноÑителÑ) </target> -<source>Start</source> -<target>Старт</target> - -<source>&Retry</source> -<target>&Повторить</target> +<source>&Start</source> +<target>&Старт</target> -<source>Cancel</source> -<target>Отмена</target> - -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - ÐвтоматичеÑÐºÐ°Ñ ÑинхронизациÑ</target> +<source>About</source> +<target>О программе</target> <source>Build: %x</source> <target>Ñборка %x</target> -<source>About</source> -<target>О программе</target> - <source>All files</source> <target>Ð’Ñе файлы</target> +<source>Automated Synchronization</source> +<target>ÐвтоматичеÑÐºÐ°Ñ ÑинхронизациÑ</target> + +<source>Directory monitoring active</source> +<target>Слежение за папками активировано</target> + +<source>Waiting until all directories are available...</source> +<target>Ожидать, пока вÑе папки Ñтанут доÑтупны...</target> + +<source>Error</source> +<target>Ошибка</target> + <source>&Restore</source> <target>&ВоÑÑтановить</target> +<source>&Show error</source> +<target>&Показать ошибку</target> + <source>&Exit</source> <target>&Выход</target> -<source>Invalid command line:</source> +<source>Incorrect command line:</source> <target>ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока:</target> +<source>&Retry</source> +<target>&Повторить</target> + <source>File content</source> <target>Содержимое файла</target> @@ -593,8 +521,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>Поле ввода целевой папки не должно быть пуÑтым.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Поле ввода папки Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ†Ð¸Ð¸ файлов не должно быть пуÑтым.</target> +<source>Please enter a target folder for versioning.</source> +<target>ПожалуйÑта, введите целевую папку Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ†Ð¸Ð¸ файлов.</target> <source>Source folder %x not found.</source> <target>ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° %x не найдена.</target> @@ -602,6 +530,12 @@ The command is triggered if: <source>The following items have unresolved conflicts and will not be synchronized:</source> <target>Следующие Ñлементы имеют неурегулированные конфликты и не будут Ñинхронизированы:</target> +<source>The following folders are significantly different. Make sure you are matching the correct folders for synchronization.</source> +<target> +Следующие папки ÑущеÑтвенно различаютÑÑ. +УбедитеÑÑŒ, что вы указали ÑоответÑтвующие папки Ð´Ð»Ñ Ñинхронизации. +</target> + <source>Not enough free disk space available in:</source> <target>Ðе доÑтаточно Ñвободного меÑта в:</target> @@ -620,11 +554,17 @@ The command is triggered if: <source>Generating database...</source> <target>Создание базы данных...</target> +<source>Creating a Volume Shadow Copy for %x...</source> +<target>Создание Тома Теневого ÐšÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ %x...</target> + <source>Data verification error: %x and %y have different content.</source> <target>Ошибка проверки данных: %x и %y имеют разное Ñодержание!</target> -<source>Synchronization aborted</source> -<target>Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð¼ÐµÐ½ÐµÐ½Ð°</target> +<source>job name</source> +<target>название</target> + +<source>Synchronization stopped</source> +<target>Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñтановлена</target> <source>Synchronization completed with errors</source> <target>Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð°. Ð’ процеÑÑе Ñинхронизации возникли ошибки</target> @@ -641,30 +581,42 @@ The command is triggered if: <source>Saving log file %x...</source> <target>Сохранение лог-файла %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Ðажмите "Переключить" Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ в главном окне FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Ð’Ñ‹ можете переключитьÑÑ Ð½Ð° главное окно FreeFileSync Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñтой проблемы.</target> + +<source>&Don't show this warning again</source> +<target>Больше &не показывать Ñто предупреждение</target> -<source>Switching to FreeFileSync main dialog</source> +<source>&Ignore</source> +<target>&Игнорировать</target> + +<source>&Switch</source> +<target>&Переключить</target> + +<source>Switching to FreeFileSync's main window</source> <target>Переключение на главное окно FreeFileSync</target> +<source>&Ignore subsequent errors</source> +<target>И&гнорировать поÑледующие ошибки</target> + +<source>Serious Error</source> +<target>Ð¡ÐµÑ€ÑŒÐµÐ·Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°</target> + +<source>Check for Program Updates</source> +<target>Проверка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹</target> + <source>A new version of FreeFileSync is available:</source> <target>ДоÑтупна Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ FreeFileSync:</target> <source>Download now?</source> <target>Загрузить ÑейчаÑ?</target> -<source>New version found</source> -<target>Ðайдена Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑиÑ</target> - <source>&Download</source> <target>&Загрузить</target> <source>FreeFileSync is up to date.</source> <target>У Ð’Ð°Ñ ÑÐ°Ð¼Ð°Ñ Ð¿Ð¾ÑледнÑÑ Ð²ÐµÑ€ÑÐ¸Ñ FreeFileSync.</target> -<source>Information</source> -<target>ИнформациÑ</target> - <source>Unable to connect to sourceforge.net.</source> <target>Ðевозможно ÑоединитьÑÑ Ñ sourceforge.net.</target> @@ -722,20 +674,20 @@ The command is triggered if: <source>Hibernate</source> <target>ГибернациÑ</target> -<source>Selected variant:</source> -<target>Выбранный вариант:</target> +<source>Alternate comparison settings</source> +<target>Ðльтернативные наÑтройки ÑравнениÑ</target> -<source>Select alternate comparison settings</source> -<target>Выбрать альтернативные наÑтройки ÑравнениÑ</target> +<source>Alternate synchronization settings</source> +<target>Ðльтернативные наÑтройки Ñинхронизации</target> -<source>Select alternate synchronization settings</source> -<target>Выбрать альтернативные наÑтройки Ñинхронизации</target> +<source>Local filter</source> +<target>Локальный фильтр</target> -<source>Filter is active</source> -<target>Фильтр активен</target> +<source>Active</source> +<target>активный</target> -<source>No filter selected</source> -<target>Ðи один фильтр не выбран</target> +<source>None</source> +<target>неактивный</target> <source>Remove alternate settings</source> <target>Удалить альтернативные наÑтройки</target> @@ -749,6 +701,15 @@ The command is triggered if: <source>Paste</source> <target>Ð’Ñтавить</target> +<source>Alternate Comparison Settings</source> +<target>Ðльтернативные наÑтройки ÑравнениÑ</target> + +<source>Alternate Synchronization Settings</source> +<target>Ðльтернативные наÑтройки Ñинхронизации</target> + +<source>Local Filter</source> +<target>Локальный фильтр</target> + <source>&New</source> <target>&ÐоваÑ</target> @@ -764,17 +725,20 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. С&инхронизировать</target> +<source>&Global settings</source> +<target>&Глобальные наÑтройки</target> + <source>&Language</source> <target>&Язык</target> +<source>&Find...</source> +<target>&Ðайти...</target> + <source>&Export file list...</source> <target>&ÐкÑпортировать ÑпиÑок файлов...</target> -<source>&Global settings</source> -<target>&Глобальные наÑтройки</target> - <source>&Tools</source> -<target>&Опции</target> +<target>&ИнÑтрументы</target> <source>&Check now</source> <target>&Проверить ÑейчаÑ</target> @@ -782,17 +746,14 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>ПроверÑÑ‚ÑŒ &автоматичеÑки раз в неделю</target> -<source>Check for new &version</source> +<source>&Check for new version</source> <target>&Проверка обновлений</target> <source>Compare</source> <target>Сравнить</target> -<source>Comparison settings</source> -<target>ÐаÑтройки ÑравнениÑ</target> - -<source>Synchronization settings</source> -<target>ÐаÑтройки Ñинхронизации</target> +<source>Cancel</source> +<target>Отмена</target> <source>Synchronize</source> <target>Синхронизировать</target> @@ -806,6 +767,15 @@ The command is triggered if: <source>Swap sides</source> <target>ПоменÑÑ‚ÑŒ направление</target> +<source>Close search bar</source> +<target>Закрыть Ñтроку поиÑка</target> + +<source>Find:</source> +<target>Ðайти:</target> + +<source>Match case</source> +<target>Учитывать региÑÑ‚Ñ€</target> + <source>Save as batch job</source> <target>Сохранить как пакетное задание</target> @@ -827,81 +797,71 @@ The command is triggered if: <source>Total bytes to copy</source> <target>Ð’Ñего байт Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ</target> -<source>Items found:</source> -<target>Ðлементов найдено:</target> +<source>Select a variant:</source> +<target>Выберите вариант:</target> -<source>Speed:</source> -<target>СкороÑÑ‚ÑŒ:</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>ОпределÑÑ‚ÑŒ одинаковые файлы путем ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ размера.</target> -<source>Time remaining:</source> -<target>Времени оÑталоÑÑŒ:</target> +<source>Identify equal files by comparing the file content.</source> +<target>ОпределÑÑ‚ÑŒ одинаковые файлы путем ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ ÑÐ¾Ð´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°.</target> -<source>Time elapsed:</source> -<target>Времени прошло:</target> +<source>Symbolic links:</source> +<target>Символьные ÑÑылки:</target> -<source>Synchronizing...</source> -<target>СинхронизациÑ...</target> +<source>More information</source> +<target>Подробнее</target> -<source>On completion</source> -<target>По завершению</target> +<source>OK</source> +<target>OK</target> -<source>Close</source> -<target>Закрыть</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Ð’Ñ‹ÑвÑÑ‚ÑŒ и раÑпроÑтранÑÑ‚ÑŒ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° обе Ñтороны. Удаленные, перемещенные и конфликтующие файлы определÑÑŽÑ‚ÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки Ñ Ð¸Ñпользованием базы данных.</target> -<source>&Pause</source> -<target>&Пауза</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Создавать зеркальную копию левой чаÑти. ПоÑле Ñинхронизации Ð¿Ñ€Ð°Ð²Ð°Ñ Ñ‡Ð°ÑÑ‚ÑŒ будет полноÑтью ÑоответÑтвовать левой.</target> -<source>Variant</source> -<target>Вариант</target> +<source>Copy new and updated files to the right folder.</source> +<target>Копировать новые или обновленные файлы на правую Ñторону.</target> -<source>Statistics</source> -<target>СтатиÑтика</target> +<source>Configure your own synchronization rules.</source> +<target>ÐаÑтроить Ñвои ÑобÑтвенные правила Ñинхронизации.</target> -<source>Select a variant</source> -<target>Выберите вариант</target> +<source>Detect moved files</source> +<target>Обнаруживать перемещенные файлы</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Файлы ÑчитаютÑÑ Ñ€Ð°Ð²Ð½Ñ‹Ð¼Ð¸, еÑли одинаковые - - дата и Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ - - размер файла -</target> +<source>Requires database files. Not supported by all file systems.</source> +<target>ТребуютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ баз данных. ПоддерживаетÑÑ Ð½Ðµ вÑеми файловыми ÑиÑтемами.</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target>Файлы ÑчитаютÑÑ Ñ€Ð°Ð²Ð½Ñ‹Ð¼Ð¸, еÑли Ñодержание файлов одинаковое</target> +<source>Delete files:</source> +<target>Удаление файлов:</target> -<source>Symbolic Link handling</source> -<target>Обращение к Ñимвольной ÑÑылке</target> +<source>Permanent</source> +<target>УдалÑÑ‚ÑŒ безвозвратно</target> -<source>Help</source> -<target>Помощь</target> +<source>Delete or overwrite files permanently</source> +<target>УдалÑÑ‚ÑŒ или перезапиÑывать файлы, не Ð¿Ð¾Ð¼ÐµÑ‰Ð°Ñ Ð² "Корзину"</target> -<source>OK</source> -<target>OK</target> +<source>&Recycle bin</source> +<target>Ð’ "&Корзину"</target> -<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> -<target>Ð’Ñ‹Ñвление и раÑпроÑтранение изменений на обе Ñтороны. Удаленные, перемещенные и конфликтующие файлы определÑÑŽÑ‚ÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки Ñ Ð¸Ñпользованием базы данных.</target> +<source>Back up deleted and overwritten files in the recycle bin</source> +<target>Делать резервную копию удаленных и перезапиÑанных файлов в "Корзине"</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Ð—ÐµÑ€ÐºÐ°Ð»ÑŒÐ½Ð°Ñ (резервнаÑ) ÐºÐ¾Ð¿Ð¸Ñ Ð»ÐµÐ²Ð¾Ð¹ чаÑти. Ð’ результате Ñинхронизации Ð¿Ñ€Ð°Ð²Ð°Ñ Ñторона будет изменена до полного ÑоответÑÑ‚Ð²Ð¸Ñ Ñ Ð»ÐµÐ²Ð¾Ð¹.</target> +<source>Versioning</source> +<target>Ðрхивировать</target> -<source>Copy new or updated files to right folder.</source> -<target>Копировать новые или обновлÑÑ‚ÑŒ файлы на правой Ñтороне.</target> +<source>Move files to a user-defined folder</source> +<target>Перемещать файлы в пользовательÑкую папку</target> -<source>Configure your own synchronization rules.</source> -<target>ÐаÑтроить Ñвои ÑобÑтвенные правила Ñинхронизации.</target> +<source>Naming convention:</source> +<target>УÑловие переименованиÑ:</target> + +<source>Show examples</source> +<target>Подробнее</target> -<source>Error handling</source> -<target>Обработка ошибок</target> +<source>Handle errors:</source> +<target>Обработка ошибкок:</target> <source>Ignore</source> <target>Игнорировать</target> @@ -910,73 +870,77 @@ is the same <target>Скрывать вÑе ошибки и ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñми</target> <source>Pop-up</source> -<target>Ð’Ñплывающие окна</target> +<target>Показывать вÑплывающие окна</target> <source>Show pop-up on errors or warnings</source> <target>Показывать вÑплывающие окна при ошибках и предупреждениÑÑ…</target> -<source>Deletion handling</source> -<target>ÐаÑтройки удалениÑ</target> +<source>On completion:</source> +<target>По завершению:</target> -<source>Permanent</source> -<target>Удалить безвозвратно</target> +<source>Start synchronization now?</source> +<target>Ðачать Ñинхронизацию ÑейчаÑ?</target> -<source>Delete or overwrite files permanently</source> -<target>Удалить или перезапиÑать файлы, не Ð¿Ð¾Ð¼ÐµÑ‰Ð°Ñ Ð² "Корзину"</target> +<source>Variant:</source> +<target>Вариант:</target> -<source>Versioning</source> -<target>Ðрхивировать</target> +<source>Statistics</source> +<target>СтатиÑтика</target> -<source>Naming convention:</source> -<target>УÑловие переименованиÑ:</target> +<source>&Don't show this dialog again</source> +<target>Больше &не показывать Ñто окно</target> -<source>Batch job</source> -<target>Пакетное задание</target> +<source>Items found:</source> +<target>Ðлементов найдено:</target> -<source>Exit</source> -<target>Выход</target> +<source>Speed:</source> +<target>СкороÑÑ‚ÑŒ:</target> -<source>Abort synchronization on first error</source> -<target>Отменить Ñинхронизацию при первой ошибке</target> +<source>Time remaining:</source> +<target>Времени оÑталоÑÑŒ:</target> -<source>Show progress dialog</source> -<target>Показать окно прогреÑÑа</target> +<source>Time elapsed:</source> +<target>Времени прошло:</target> -<source>Save log</source> -<target>Сохранить лог-файл</target> +<source>Synchronizing...</source> +<target>СинхронизациÑ...</target> -<source>Select folder to save log files</source> -<target>Выберите папку Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð»Ð¾Ð³-файлов</target> +<source>Minimize to notification area</source> +<target>Свернуть в облаÑÑ‚ÑŒ уведомлений</target> -<source>Limit</source> -<target>Ограничение</target> +<source>Close</source> +<target>Закрыть</target> -<source>Limit maximum number of log files</source> -<target>Ограничить макÑимальное количеÑтво лог-файлов</target> +<source>&Pause</source> +<target>&Пауза</target> -<source>Source code written in C++ using:</source> -<target>ИÑходный код напиÑан на C++ Ñ Ð¸Ñпользованием:</target> +<source>Stop</source> +<target>ОÑтановить</target> -<source>If you like FreeFileSync</source> -<target>ЕÑли Вам понравилÑÑ FreeFileSync</target> +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target> +Создать файл пакетного Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкой Ñинхронизации. +Ð”Ð»Ñ Ð·Ð°Ð¿ÑƒÑка дважды кликните Ñтот файл или запланируйте +в планировщике задач: %x +</target> -<source>Donate with PayPal</source> -<target>Отправить деньги через PayPal</target> +<source>Stop synchronization at first error</source> +<target>ОÑтановить Ñинхронизацию при первой ошибке</target> -<source>Many thanks for localization:</source> -<target>Большое ÑпаÑибо за перевод:</target> +<source>Show progress dialog</source> +<target>Показать окно прогреÑÑа</target> -<source>Feedback and suggestions are welcome</source> -<target>Ð—Ð°Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð¸ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²ÐµÑ‚ÑтвуютÑÑ</target> +<source>Save log:</source> +<target>Сохранить лог-файл:</target> -<source>Homepage</source> -<target>Оф.Ñайт</target> +<source>Limit:</source> +<target>Ограничение:</target> -<source>Email</source> -<target>Почта</target> +<source>Limit maximum number of log files</source> +<target>Ограничить макÑимальное количеÑтво лог-файлов</target> -<source>Published under the GNU General Public License</source> -<target>ИздаетÑÑ Ð¿Ð¾Ð´ лицензией GNU General Public License</target> +<source>How can I schedule a batch job?</source> +<target>Как запланировать пакетное задание?</target> <source>Delete on both sides</source> <target>Удалить Ñ Ð¾Ð±ÐµÐ¸Ñ… Ñторон</target> @@ -984,91 +948,139 @@ is the same <source>Delete on both sides even if the file is selected on one side only</source> <target>Удалить Ñ Ð¾Ð±ÐµÐ¸Ñ… Ñторон, даже еÑли файл выделен только на одной Ñтороне</target> -<source>Include</source> -<target>Включить</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Выберите правила фильтрации Ð´Ð»Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ñ… файлов из Ñинхронизации. Введите пути файлов отноÑÑщиеÑÑ Ðº ÑоответÑтвующим парам папок.</target> -<source>Exclude</source> -<target>ИÑключить</target> +<source>Include:</source> +<target>Включить:</target> + +<source>Exclude:</source> +<target>ИÑключить:</target> -<source>Time span</source> -<target>Промежуток времени</target> +<source>Time span:</source> +<target>Промежуток времени:</target> -<source>File size</source> -<target>Размер файла</target> +<source>File size:</source> +<target>Размер файла:</target> -<source>Minimum</source> -<target>минимум</target> +<source>Minimum:</source> +<target>минимум:</target> -<source>Maximum</source> -<target>макÑимум</target> +<source>Maximum:</source> +<target>макÑимум:</target> <source>&Clear</source> <target>&ОчиÑтить</target> -<source>Global settings</source> -<target>Глобальные наÑтройки</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Следующие наÑтройки иÑпользуютÑÑ Ð´Ð»Ñ Ð²Ñех заданий Ñинхронизации.</target> <source>Fail-safe file copy</source> <target>ОтказоуÑтойчивое копирование файла</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Копирование во временный файл (*.ffs_tmp) перед перезапиÑью целевого файла. +Ðто гарантирует целоÑтноÑÑ‚ÑŒ заменÑемых файлов даже в Ñлучае Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ñерьезной ошибки. +</target> + +<source>(recommended)</source> +<target>(рекомендовано)</target> + <source>Copy locked files</source> <target>Копирование заблокированных файлов</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Копирование общих или заблокированных файлов Ñ Ð¸Ñпользованием Ñлужбы Теневого ÐšÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¢Ð¾Ð¼Ð°</target> + +<source>(requires administrator rights)</source> +<target>(требуютÑÑ Ð¿Ñ€Ð°Ð²Ð° ÐдминиÑтратора)</target> + <source>Copy file access permissions</source> <target>Копирование прав доÑтупа к файлам</target> -<source>Restore hidden dialogs</source> -<target>ВоÑÑтановить Ñкрытые диалоговые окна?</target> +<source>Transfer file and folder permissions.</source> +<target>Передача прав доÑтупа к файлам/папкам</target> + +<source>Automatic retry on error:</source> +<target>ÐвтоматичеÑкое повторение при ошибках:</target> + +<source>Retry count:</source> +<target>ЧиÑло повторений:</target> -<source>External applications</source> -<target>Внешние приложениÑ</target> +<source>Delay (in seconds):</source> +<target>Задержка (в Ñекундах):</target> + +<source>Customize context menu:</source> +<target>КаÑÑ‚Ð¾Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтного меню:</target> <source>Description</source> <target>ОпиÑание</target> +<source>Restore hidden windows</source> +<target>ВоÑÑтановить Ñкрытые окна</target> + <source>&Default</source> <target>&По умолчанию</target> -<source>Find what:</source> -<target>Ðайти:</target> +<source>Source code written in C++ using:</source> +<target>ИÑходный код напиÑан на C++ Ñ Ð¸Ñпользованием:</target> -<source>Match case</source> -<target>Учитывать региÑÑ‚Ñ€</target> +<source>If you like FreeFileSync</source> +<target>ЕÑли Вам понравилÑÑ FreeFileSync</target> -<source>&Find next</source> -<target>&Ðайти далее</target> +<source>Donate with PayPal</source> +<target>Отправить деньги через PayPal</target> -<source>Start synchronization</source> -<target>Ðачать Ñинхронизацию</target> +<source>Feedback and suggestions are welcome</source> +<target>Ð—Ð°Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð¸ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²ÐµÑ‚ÑтвуютÑÑ</target> -<source>Delete</source> -<target>Удалить</target> +<source>Homepage</source> +<target>Оф.Ñайт</target> -<source>Configure filter</source> -<target>ÐаÑтройки фильтра</target> +<source>Email</source> +<target>Почта</target> -<source>Find</source> -<target>Ðайти</target> +<source>Published under the GNU General Public License</source> +<target>ИздаетÑÑ Ð¿Ð¾Ð´ лицензией GNU General Public License</target> + +<source>Many thanks for localization:</source> +<target>Большое ÑпаÑибо за перевод:</target> + +<source>Save as Batch Job</source> +<target>Сохранение пакетного заданиÑ</target> + +<source>Delete Items</source> +<target>Удаление Ñлементов</target> + +<source>Global Settings</source> +<target>Глобальные наÑтройки</target> -<source>Select time span</source> -<target>Выберите промежуток времени</target> +<source>Select Time Span</source> +<target>Выбор промежутка времени</target> -<source>Folder pairs</source> +<source>Folder Pairs</source> <target>Пары папок Ð´Ð»Ñ Ñинхронизации</target> +<source>Find</source> +<target>ПоиÑк</target> + <source>Overview</source> <target>ГлавнаÑ</target> <source>Configuration</source> <target>ÐаÑтройки</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ</target> -<source>Filter files</source> +<source>Filter Files</source> <target>Фильтр</target> -<source>Select view</source> +<source>Select View</source> <target>Вид ÑпиÑка файлов</target> <source>Open...</source> @@ -1080,6 +1092,21 @@ is the same <source>Compare both sides</source> <target>Сравнить обе Ñтороны</target> +<source>Comparison settings</source> +<target>ÐаÑтройки ÑравнениÑ</target> + +<source>Synchronization settings</source> +<target>ÐаÑтройки Ñинхронизации</target> + +<source>Start synchronization</source> +<target>Ðачать Ñинхронизацию</target> + +<source>Confirm</source> +<target>Подтвердить</target> + +<source>&Execute</source> +<target>&Выполнить</target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1113,17 +1140,23 @@ is the same <source>Set direction:</source> <target>Выберите направление:</target> +<source>multiple selection</source> +<target>групповое выделение</target> + +<source>Include via filter:</source> +<target>Включить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ фильтра:</target> + +<source>Exclude via filter:</source> +<target>ИÑключить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ фильтра:</target> + <source>Exclude temporarily</source> <target>Временно иÑключить</target> <source>Include temporarily</source> <target>Временно включить</target> -<source>multiple selection</source> -<target>групповое выделение</target> - -<source>Exclude via filter:</source> -<target>ИÑключить через фильтр:</target> +<source>Delete</source> +<target>Удалить</target> <source>Include all</source> <target>Включить вÑе</target> @@ -1167,9 +1200,15 @@ is the same <source>Do you want to save changes to %x?</source> <target>Ð’Ñ‹ хотите Ñохранить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² %x?</target> +<source>Never save &changes</source> +<target>Ðикогда не ÑохранÑÑ‚ÑŒ &изменениÑ</target> + <source>Do&n't save</source> <target>&Ðе ÑохранÑÑ‚ÑŒ</target> +<source>Filter</source> +<target>Фильтр</target> + <source>Show files that exist on left side only</source> <target>Показать файлы, ÑущеÑтвующие только Ñлева</target> @@ -1215,35 +1254,26 @@ is the same <source>Set as default</source> <target>УÑтановить по умолчанию</target> -<source>Operation aborted</source> -<target>ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð¼ÐµÐ½ÐµÐ½Ð°</target> - <source>All folders are in sync</source> <target>Ð’Ñе папки Ñинхронизированы</target> -<source>File list exported</source> -<target>СпиÑок файлов ÑкÑпортирован</target> - -<source>Searching for program updates...</source> -<target>Проверка обновлений программы...</target> - -<source>&Ignore</source> -<target>&Игнорировать</target> +<source>Synchronization Settings</source> +<target>ÐаÑтройки Ñинхронизации</target> -<source>Fatal Error</source> -<target>КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°</target> +<source>Comparison Settings</source> +<target>ÐаÑтройки ÑравнениÑ</target> -<source>&Switch</source> -<target>&Переключить</target> +<source>Cannot find %x</source> +<target>Ðевозможно найти %x</target> -<source>Question</source> -<target>ВопроÑ</target> +<source>Comma-separated values</source> +<target>ЗначениÑ, разделенные запÑтыми</target> -<source>&Yes</source> -<target>&Да</target> +<source>File list exported</source> +<target>СпиÑок файлов ÑкÑпортирован</target> -<source>&No</source> -<target>&Ðет</target> +<source>Searching for program updates...</source> +<target>Проверка обновлений программы...</target> <source>Scanning...</source> <target>Сканирование...</target> @@ -1254,23 +1284,26 @@ is the same <source>Info</source> <target>ИнформациÑ</target> +<source>Warning</source> +<target>Внимание</target> + <source>Paused</source> <target>Пауза</target> <source>Initializing...</source> <target>ИнициализациÑ...</target> -<source>Aborted</source> -<target>Отменено</target> +<source>Stopped</source> +<target>ОÑтановлено</target> <source>Completed</source> <target>Завершено</target> -<source>Cannot find %x</source> -<target>Ðевозможно найти %x</target> +<source>&Continue</source> +<target>&Продолжить</target> -<source>Inactive</source> -<target>---</target> +<source>Log</source> +<target>Лог (журнал)</target> <source>Today</source> <target>ÑегоднÑ</target> @@ -1296,8 +1329,18 @@ is the same <source>MB</source> <target>МБ</target> -<source>Filter</source> -<target>Фильтр</target> +<source> +<pluralform>Do you really want to move the following item to the recycle bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> +</source> +<target> +<pluralform>Ð’Ñ‹ точно хотите перемеÑтить Ñледующий %x Ñлемент в "Корзину"?</pluralform> +<pluralform>Ð’Ñ‹ точно хотите перемеÑтить Ñледующие %x Ñлемента в "Корзину"?</pluralform> +<pluralform>Ð’Ñ‹ точно хотите перемеÑтить Ñледующие %x Ñлементов в "Корзину"?</pluralform> +</target> + +<source>Move</source> +<target>ПеремеÑтить</target> <source> <pluralform>Do you really want to delete the following item?</pluralform> @@ -1309,6 +1352,9 @@ is the same <pluralform>Ð’Ñ‹ точно хотите удалить Ñледующие %x Ñлементов?</pluralform> </target> +<source>Exclude</source> +<target>ИÑключить</target> + <source>Direct</source> <target>ПрÑмое</target> @@ -1336,8 +1382,8 @@ is the same <source>- Other side's counterpart to %item_folder%</source> <target>- аналог %item_folder% Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñтороны</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Сделать Ñкрытые Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸ диалоги видимыми Ñнова?</target> +<source>Restore all hidden windows and warnings?</source> +<target>ВоÑÑтановить вÑе Ñкрытые окна и предупреждениÑ?</target> <source>Leave as unresolved conflict</source> <target>ОÑтавить как нерешенный конфликт</target> @@ -1391,7 +1437,7 @@ is the same <target>Ðевозможно запиÑать атрибуты файла %x.</target> <source>Cannot write modification time of %x.</source> -<target>Ðевозможно запиÑать Ð²Ñ€ÐµÐ¼Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ файла %x.</target> +<target>Ðевозможно запиÑать Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° %x.</target> <source>Cannot read security context of %x.</source> <target>Ðевозможно прочитать контекÑÑ‚ безобаÑноÑти %x.</target> @@ -1465,18 +1511,21 @@ is the same <pluralform>%x дней</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Ðе удалоÑÑŒ зарегиÑтрироватьÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑиÑтемных Ñообщений.</target> +<source>Unable to register to receive system messages.</source> +<target>Ðевозможно зарегиÑтрироватьÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑиÑтемных Ñообщений.</target> <source>Cannot set privilege %x.</source> <target>Ðевозможно уÑтановить привелегии %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Ðе удалоÑÑŒ приоÑтановить режим Ñна ÑиÑтемы.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Ðевозможно приоÑтановить режим Ñна ÑиÑтемы.</target> <source>Cannot change process I/O priorities.</source> <target>Ðевозможно изменить приоритет процеÑÑа.</target> +<source>Unable to move %x to the recycle bin.</source> +<target>Ðевозможно перемеÑтить %x в "Корзину".</target> + <source>Cannot determine final path for %x.</source> <target>Ðевозможно определить конечный путь Ð´Ð»Ñ %x.</target> diff --git a/BUILD/Languages/scottish_gaelic.lng b/BUILD/Languages/scottish_gaelic.lng index a68e9d6a..e7ded4f7 100644 --- a/BUILD/Languages/scottish_gaelic.lng +++ b/BUILD/Languages/scottish_gaelic.lng @@ -2,11 +2,17 @@ <language>Gà idhlig</language> <translator>Michael Bauer aka Akerbeltz</translator> <locale>gd</locale> - <flag_image>flag_scotland.png</flag_image> - <plural_form_count>4</plural_form_count> + <image>flag_scotland.png</image> + <plural_count>4</plural_count> <plural_definition>(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3</plural_definition> </header> +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> +<target></target> + <source>Both sides have changed since last synchronization.</source> <target>Chaidh an dà thaobh atharrachadh on t-sioncronachadh mu dheireadh.</target> @@ -58,9 +64,6 @@ <source>Cannot open file %x.</source> <target>Cha ghabh am faidhle %x fhosgladh.</target> -<source>Error</source> -<target>Mearachd</target> - <source>File %x does not contain a valid configuration.</source> <target>Chan eil rèiteachadh dligheach san fhaidhle %x.</target> @@ -70,12 +73,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>Chan fhaod roghainnean aig ìre paidhrichean nam pasganan a bhith san fhaidhle rèiteachaidh nuair a thathar a' cur pasganan slighe na loidhne-à ithne.</target> -<source>Warning</source> -<target>Rabhadh</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>Cha ghabh pasganan a shuidheachadh airson barrachd air aon fhaidhle rèiteachaidh.</target> +<source>Command line</source> +<target>Loidhne-à ithne</target> + <source>Syntax:</source> <target>Co-chà radh:</target> @@ -91,9 +94,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>Àireamh sam bith de phasganan eile airson aon fhaidhle rèiteachaidh air a' char as fhaide.</target> -<source>Command line</source> -<target>Loidhne-à ithne</target> - <source>A folder input field is empty.</source> <target>Tha co-dhiù aon raon pasgain ann a tha falamh.</target> @@ -298,8 +298,8 @@ <source>/sec</source> <target>/diog</target> -<source>%x items</source> -<target>%x nithean</target> +<source>%x items/sec</source> +<target>%x nithean/diog</target> <source>Configuration file %x loaded partially only.</source> <target>Cha deach faidhle an rèiteachaidh %x a luchdadh gu tur.</target> @@ -328,11 +328,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Chan eil ainm an draibh %x 'na phà irt de shlighe an fhaodhle %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Tha thu airson sgur dheth: A' feitheamh gus an crìochnaich an gnìomh là ithreach...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Dh'iarr thu oirnn sgur: A' feitheamh ri crìoch na h-obrach là ithreach...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Cha b' urrainn dhuinn stampa-ama a chruthachadh airson versioning:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Chan urrainn dhuinn stampa-ama a chruthachadh airson versioning:</target> <source>Cannot read the following XML elements:</source> <target>Chan urrainn dhuinn na h-eileamaidean XML a leanas a leughadh:</target> @@ -349,8 +349,8 @@ <source>&Program</source> <target>&Prògram</target> -<source>&Content</source> -<target>S&usbaint</target> +<source>&View help</source> +<target>&Faic a' chobhair</target> <source>&About</source> <target>&Mu dheidhinn</target> @@ -373,8 +373,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Cha leig thu leas ach faidhle .ffs_batch ion-phortadh airson toiseach tòiseachaidh.</target> -<source>Folders to watch</source> -<target>Na pasgain air an cumar sùil</target> +<source>Folders to watch:</source> +<target>Pasganan air an cumar sùil:</target> <source>Add folder</source> <target>Cuir pasgan ris</target> @@ -388,12 +388,15 @@ <source>Select a folder</source> <target>Tagh pasgan</target> -<source>Idle time [seconds]</source> -<target>Ùine 'na thà mh [seconds]</target> +<source>Idle time (in seconds):</source> +<target>Ùine 'na thà mh (ann an diogan):</target> <source>Idle time between last detected change and execution of command</source> <target>An tà mh eadar an t-atharrachadh mu dheireadh agus gnìomhachadh na h-à ithne</target> +<source>Command line:</source> +<target>Loidhne-à ithne:</target> + <source> The command is triggered if: - files or subfolders change @@ -405,33 +408,30 @@ Thèid an loidhne-à ithne a chur gu dol: - ma nochdas pasgain ùra (m.e. ma chuireas tu a-steach bioran USB) </target> -<source>Start</source> -<target>Tòisich</target> - -<source>&Retry</source> -<target>&Feuch ris a-rithist</target> - -<source>Cancel</source> -<target>Sguir dheth</target> +<source>&Start</source> +<target>Tòi&sich</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Sioncronachadh fèin-obrachail</target> +<source>About</source> +<target>Mu dheidhinn</target> <source>Build: %x</source> <target>Build: %x</target> -<source>About</source> -<target>Mu dheidhinn</target> - <source>All files</source> <target>Gach faidhle</target> +<source>Automated Synchronization</source> +<target>Sioncronachadh fèin-obrachail</target> + <source>Directory monitoring active</source> <target>Tha na pasganan 'gam marasgladh</target> <source>Waiting until all directories are available...</source> <target>A' feitheamh gus am bi gach pasgan ri là imh...</target> +<source>Error</source> +<target>Mearachd</target> + <source>&Restore</source> <target>&Aisig</target> @@ -441,8 +441,11 @@ Thèid an loidhne-à ithne a chur gu dol: <source>&Exit</source> <target>&Fà g an-seo</target> -<source>Invalid command line:</source> -<target>Loidhne-à ithne mhì-dhligheach:</target> +<source>Incorrect command line:</source> +<target>Loidhne-à ithne chearr:</target> + +<source>&Retry</source> +<target>&Feuch ris a-rithist</target> <source>File content</source> <target>Susbaint an fhaidhle</target> @@ -504,8 +507,8 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Target folder input field must not be empty.</source> <target>Chan fhaod raon a' phasgain a bhith falamh.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Chan fhaod raon a' pasgain airson versioning a bhith falamh.</target> +<source>Please enter a target folder for versioning.</source> +<target>Cuir a-steach pasgan-targaide a chum versioning.</target> <source>Source folder %x not found.</source> <target>Cha deach am pasgan tùsail %x a lorg.</target> @@ -543,7 +546,7 @@ Thèid an loidhne-à ithne a chur gu dol: <source>job name</source> <target>ainm na h-obrach</target> -<source>Synchronization aborted</source> +<source>Synchronization stopped</source> <target>Sguireadh dhen t-sioncronachadh</target> <source>Synchronization completed with errors</source> @@ -561,14 +564,40 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Saving log file %x...</source> <target>A' sà bhaladh faidhle an loga %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Briog air "Gearr leum" gus duilgheadasan a rèiteachadh sa phrìomh-chòmhradh aig FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>'S urrainn dhut leum a ghearradh gu prìomh-uinneag FreeFileSync gus an duilgheadas seo fhuasgladh.</target> + +<source>&Don't show this warning again</source> +<target>Na seall an rabha&dh seo a-rithist</target> + +<source>&Ignore</source> +<target>&Leig seachad</target> + +<source>&Switch</source> +<target>&Dèan suids</target> + +<source>Switching to FreeFileSync's main window</source> +<target>A' gearradh leum gu prìomh-uinneag FreeFileSync</target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>A' feuchainn ris à s ùr gu fèin-obrachail ann an %x diog...</pluralform> +<pluralform>A' feuchainn ris à s ùr gu fèin-obrachail ann an %x dhiog...</pluralform> +<pluralform>A' feuchainn ris à s ùr gu fèin-obrachail ann an %x diogan...</pluralform> +<pluralform>A' feuchainn ris à s ùr gu fèin-obrachail ann an %x diog...</pluralform> +</target> + +<source>&Ignore subsequent errors</source> +<target>Le&ig seachad mearachdan à s a dhèidh seo</target> -<source>Switching to FreeFileSync main dialog</source> -<target>A' gearradh leum gu FreeFileSync sa phrìomh-chòmhradh</target> +<source>Serious Error</source> +<target>Mearachd mhòr</target> -<source>Retrying operation after error:</source> -<target>A' feuchainn ris an dèidh na mearachd:</target> +<source>Check for Program Updates</source> +<target>Thoir sùil ach a bheil ùrachadh ann airson a' phrògraim</target> <source>A new version of FreeFileSync is available:</source> <target>Tha tionndadh ùr de FreeFileSync ann:</target> @@ -576,18 +605,12 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Download now?</source> <target>A bheil thu airson a luchdadh a-nuas an-drà sta?</target> -<source>New version found</source> -<target>Chaidh tionndadh ùr a lorg</target> - <source>&Download</source> <target>&Luchdaich a-nuas</target> <source>FreeFileSync is up to date.</source> <target>Tha FreeFileSync cho ùr 's a ghabhas.</target> -<source>Information</source> -<target>Fiosrachadh</target> - <source>Unable to connect to sourceforge.net.</source> <target>Cha b' urrainn dhuinn ceangal a dhèanamh ri Sourceforge.net.</target> @@ -645,20 +668,20 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Hibernate</source> <target>Geamhraich</target> -<source>Selected variant:</source> -<target>An t-eug-samhail a thagh thu:</target> +<source>Alternate comparison settings</source> +<target>Roghainnean eile airson coimeasadh</target> -<source>Select alternate comparison settings</source> -<target>Tagh roghainnean coimeasaidh eile</target> +<source>Alternate synchronization settings</source> +<target>Roghainnean eile airson sioncronachadh</target> -<source>Select alternate synchronization settings</source> -<target>Tagh roghainnean sioncronachaidh eile</target> +<source>Local filter</source> +<target>Criathrag ionadail</target> -<source>Filter is active</source> -<target>Tha a' chriathrag gnìomhach</target> +<source>Active</source> +<target>Gnìomhach</target> -<source>No filter selected</source> -<target>Cha deach criathrag a thaghadh</target> +<source>None</source> +<target>Chan eil gin</target> <source>Remove alternate settings</source> <target>Thoir air falbh na roghainnean eile</target> @@ -672,6 +695,15 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Paste</source> <target>Cuir ann</target> +<source>Alternate Comparison Settings</source> +<target>Roghainnean eile airson coimeasadh</target> + +<source>Alternate Synchronization Settings</source> +<target>Roghainnean eile airson sioncronachadh</target> + +<source>Local Filter</source> +<target>Criathrag ionadail</target> + <source>&New</source> <target>Ù&r</target> @@ -687,15 +719,18 @@ Thèid an loidhne-à ithne a chur gu dol: <source>2. &Synchronize</source> <target>2. &Dèan sioncronachadh</target> +<source>&Global settings</source> +<target>&Na roghainnean uile-choitcheann</target> + <source>&Language</source> <target>&Cà nan</target> +<source>&Find...</source> +<target>L&org...</target> + <source>&Export file list...</source> <target>Às-p&hortaich liosta nam faidhle...</target> -<source>&Global settings</source> -<target>&Na roghainnean uile-choitcheann</target> - <source>&Tools</source> <target>&Innealan</target> @@ -705,12 +740,15 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Check &automatically once a week</source> <target>Thoir sùil gu &fèin-obrachail turas san t-seachdain</target> -<source>Check for new &version</source> -<target>Thoir sùil a bheil &tionndadh ùr ann</target> +<source>&Check for new version</source> +<target>Thoir sùil a&ch a bheil tionndadh ùr ann</target> <source>Compare</source> <target>Dèan coimeas</target> +<source>Cancel</source> +<target>Sguir dheth</target> + <source>Synchronize</source> <target>Dèan sioncronachadh</target> @@ -723,6 +761,15 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Swap sides</source> <target>Cuir an dà thaobh an à ite a chèile</target> +<source>Close search bar</source> +<target>Dùin bà r an luirg</target> + +<source>Find:</source> +<target>Lorg:</target> + +<source>Match case</source> +<target>An aire do litrichean mòra 's beaga</target> + <source>Save as batch job</source> <target>Sà bhail mar obair baidse</target> @@ -744,73 +791,20 @@ Thèid an loidhne-à ithne a chur gu dol: <source>Total bytes to copy</source> <target>Co mheud baidht a thèid lethbhreac a dhèanamh dhiubh</target> -<source>Items found:</source> -<target>Rudan a chaidh a lorg:</target> - -<source>Speed:</source> -<target>Astar:</target> - -<source>Time remaining:</source> -<target>An ùine a tha air fhà gail:</target> - -<source>Time elapsed:</source> -<target>An ùine a dh'fhalbh:</target> - -<source>Synchronizing...</source> -<target>A' sioncronachadh...</target> - -<source>Minimize to notification area</source> -<target>Lùghdach 's gluais gu raon nam brathan</target> - -<source>On completion</source> -<target>Nuair a bhios e deiseil</target> +<source>Select a variant:</source> +<target>Tagh eug-samhail:</target> -<source>Close</source> -<target>Dùin</target> - -<source>&Pause</source> -<target>&Cuir 'na stad</target> - -<source>Variant</source> -<target>Eugsamhail</target> - -<source>Statistics</source> -<target>Stats</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Lorg faidhlichean a tha co-ionnann le bhith a' dèanamh coimeas eadar an cuid meud is ama.</target> -<source>&Don't show this dialog again</source> -<target>&Na seall an còmhradh seo a-rithist</target> +<source>Identify equal files by comparing the file content.</source> +<target>Lorg faidhlichean a tha co-ionnann le bhith a' dèanamh coimeas eadar susbaint nam faidhlichean.</target> -<source>Select a variant</source> -<target>Tagh eug-samhail</target> +<source>Symbolic links:</source> +<target>Ceanglaichean samhlachail:</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Bidh dà fhaidhle co-ionnann 'nar beachd-sa - - ma tha à m is ceann-là an sgrìobhaidh mu dheireadh - - ma tha am meud -co-ionnann -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Bidh dà fhaidhle co-ionnann 'nar beachd-sa - - susbaint an dà fhaidhle co-ionnann -</target> - -<source>Symbolic Link handling</source> -<target>Là imhseachadh nan symbolic links</target> - -<source>Help</source> -<target>Cobhair</target> +<source>More information</source> +<target>Barrachd fiosrachaidh</target> <source>OK</source> <target>Ceart ma-thà </target> @@ -818,11 +812,11 @@ Bidh dà fhaidhle co-ionnann 'nar beachd-sa <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Lorg is sìolaich na h-atharraichean air an dà thaobh. Mothaichidh sinn do rudan a chaidh a sguabadh à s, a ghluasad no còmhstrithean gu fèin-obrachail le stòr-dà ta.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Dèan lethbhreac-glèidhidh 's tu a' sgà thanadh a' phasgain air an taobh chlì. Thèid am pasgan air an taobh deas a chur air gleus ach am bi e gu tur co-ionnann ris a' phasgan air an taobh chlì as dèidh dha sioncronachadh.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Cruthaich lethbhreac-glèidhidh sgà thanaichte dhen phasgan air an taobh chlì a bhios gu tur co-ionnann ris a' phasgan air an taobh deas an dèidh sioncronachaidh.</target> -<source>Copy new or updated files to right folder.</source> -<target>Cuir lethbhreac de dh'fhaidhlichean a tha ùr no ùraichte dhan phasgan air an taobh deas.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Cuir lethbhreac de dh'fhaidhlichean ùra 's ùraichte dhan phasgan air an taobh deas.</target> <source>Configure your own synchronization rules.</source> <target>Sònraich riaghailtean sioncronachaidh thu fhèin.</target> @@ -833,23 +827,8 @@ Bidh dà fhaidhle co-ionnann 'nar beachd-sa <source>Requires database files. Not supported by all file systems.</source> <target>Feumaidh seo faidhlichean stòir-dhà ta. Chan eil gach siostam fhaidhlichean a' cur taic ri seo.</target> -<source>Error handling</source> -<target>Là imhseachadh mhearachdan</target> - -<source>Ignore</source> -<target>Leig seachad</target> - -<source>Hide all error and warning messages</source> -<target>Falaich gach teachdaireachd mu mhearachdan no rabhaidhean</target> - -<source>Pop-up</source> -<target>Priob-uinneag</target> - -<source>Show pop-up on errors or warnings</source> -<target>Seall priob-uinneagan a thaobh mhearachdan no rabhaidhean</target> - -<source>Deletion handling</source> -<target>Mar a dhèiligear ri sguabadh à s</target> +<source>Delete files:</source> +<target>Sguab à s na faidhlichean:</target> <source>Permanent</source> <target>Buan</target> @@ -872,111 +851,174 @@ Bidh dà fhaidhle co-ionnann 'nar beachd-sa <source>Naming convention:</source> <target>Gnà thas nan ainmean:</target> -<source>Batch job</source> -<target>Obair baidse</target> +<source>Show examples</source> +<target>Seall buill-eisimpleir</target> + +<source>Handle errors:</source> +<target>Mearachdan là imhseachaidh:</target> + +<source>Ignore</source> +<target>Leig seachad</target> + +<source>Hide all error and warning messages</source> +<target>Falaich gach teachdaireachd mu mhearachdan no rabhaidhean</target> + +<source>Pop-up</source> +<target>Priob-uinneag</target> + +<source>Show pop-up on errors or warnings</source> +<target>Seall priob-uinneagan a thaobh mhearachdan no rabhaidhean</target> + +<source>On completion:</source> +<target>An dèidh coileanaidh:</target> + +<source>Start synchronization now?</source> +<target>A bheil thu airson tòiseachadh air an t-sioncronachadh an-drà sta?</target> + +<source>Variant:</source> +<target>Eug-samhail:</target> + +<source>Statistics</source> +<target>Stats</target> + +<source>&Don't show this dialog again</source> +<target>&Na seall an còmhradh seo a-rithist</target> + +<source>Items found:</source> +<target>Rudan a chaidh a lorg:</target> + +<source>Speed:</source> +<target>Astar:</target> + +<source>Time remaining:</source> +<target>An ùine a tha air fhà gail:</target> + +<source>Time elapsed:</source> +<target>An ùine a dh'fhalbh:</target> + +<source>Synchronizing...</source> +<target>A' sioncronachadh...</target> + +<source>Minimize to notification area</source> +<target>Lùghdach 's gluais gu raon nam brathan</target> + +<source>Close</source> +<target>Dùin</target> + +<source>&Pause</source> +<target>&Cuir 'na stad</target> + +<source>Stop</source> +<target>Sguir dheth</target> <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target>Cruthaich faidhle batch airson sioncronachadh a dh'obraicheas gun thusa a bhith an là thair. Gus a thòiseachadh, dèan briogadh dùbailte air an fhaidhle seo ann am planadair shaothraichean: %x</target> -<source>Exit</source> -<target>Fà g an-seo</target> - -<source>Abort synchronization on first error</source> -<target>Sguir dhen t-sioncronachadh nuair a thachras a' chiad mhearachd</target> +<source>Stop synchronization at first error</source> +<target>Sguir dhen t-sioncronachadh aig a' chiad mhearachd</target> <source>Show progress dialog</source> <target>Seall còmhradh an adhartais</target> -<source>Save log</source> -<target>Sà bhail an loga</target> - -<source>Select folder to save log files</source> -<target>Tagh pasgan far an dèid faidhlichean an loga a shà bhaladh</target> +<source>Save log:</source> +<target>Sà bhail an loga:</target> -<source>Limit</source> -<target>Cuingich</target> +<source>Limit:</source> +<target>Crìoch:</target> <source>Limit maximum number of log files</source> <target>Cuingich an à ireamh as motha de dh'fhaidhlichean an loga</target> +<source>How can I schedule a batch job?</source> +<target>Ciamar a chuireas mi obair baidse air an sgeideal?</target> + +<source>&Recycle bin</source> +<target>A&m biona</target> + <source>Delete on both sides</source> <target>Sguab à s air an dà thaobh</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>Sguab à s air an dà thaobh fiù mur an deach am faidhle a thaghadh ach air aon taobh</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Cha dèidh faidhlichean a shioncronachadh ach ma choileanas iad gach riaghailte na criathraige. -An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasganan. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Tagh riaghailteach criathraidh gus seòrsachan à raidh de dh'fhaidhlichean fhà gail à s an t-sioncronachadh. Cuir a-steach slighean fhaidhlichean a-rèir paidhir an dà phasgan aca.</target> -<source>Include</source> -<target>Gabh a-steach</target> +<source>Include:</source> +<target>Gabh a-staigh:</target> -<source>Exclude</source> -<target>Dùin a-mach</target> +<source>Exclude:</source> +<target>Dùin a-mach:</target> -<source>Time span</source> -<target>Raon-ama</target> +<source>Time span:</source> +<target>An rainse ama:</target> -<source>File size</source> -<target>Meudh an fhaidhle</target> +<source>File size:</source> +<target>Meud an fhaidhle:</target> -<source>Minimum</source> -<target>Air a' char as lugha</target> +<source>Minimum:</source> +<target>Air a' char as lugha:</target> -<source>Maximum</source> -<target>Air a' char as motha</target> +<source>Maximum:</source> +<target>Air a' char as motha:</target> <source>&Clear</source> <target>Fala&mhaich</target> -<source>Global settings</source> -<target>Na roghainnean uile-choitcheann</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Thèid na roghainnean a leanas a chleachdadh airson a h-uile obair sioncronachaidh.</target> <source>Fail-safe file copy</source> <target>Dèan lethbhreac nach gabh fà illigeadh</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Cuir lethbhreac dheth ann am faidhle sealach (*.ffs_tmp) an toiseach is thoir ainm ùr air an uairsin. Leis a seo, bidh staid sheasmhach agad fiù ma thachras mearachd mharbhtach.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Cuir lethbhreac dheth ann am faidhle sealach (*.ffs_tmp) mus sgrìobhar thairis air an targaid. +Nì seo cinnteach gum bi fuasgladh ann ma thachras mearachd mhòr. +</target> + +<source>(recommended)</source> +<target>(mholamaid seo)</target> <source>Copy locked files</source> <target>Dèan lethbhreac de dh'fhaidhlichean glaiste</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Dèan lethbhreac de dh'fhaidhlichean co-roinnte no glaiste le seirbheis lethbhreacan sgà il an draibh (feumaidh seo còraichean rianaire)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Dèan lethbhreac de dh'fhaidhlichean co-roinnte no glaiste le seirbheis lethbhreacan sgà il an draibh.</target> + +<source>(requires administrator rights)</source> +<target>(feumaidh seo còraichean rianadair)</target> <source>Copy file access permissions</source> <target>Dèan lethbhreac de cheadan-inntrigidh nam faidhle</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Tar-chuir ceadan nam faidhlichean 's nam pasganan (feumaidh seo còraichean rianaire)</target> +<source>Transfer file and folder permissions.</source> +<target>Tar-chuir am faidhle 's ceadan a' phasgain</target> + +<source>Automatic retry on error:</source> +<target>Feuch ris a-rithist gu fèin-obrachail ri linn mearachd:</target> -<source>Restore hidden dialogs</source> -<target>Aisig na còmhraidhean falaichte</target> +<source>Retry count:</source> +<target>Co mheud turas a dh'fheudadh ris a-rithist:</target> -<source>External applications</source> -<target>Aplacaidean air an taobh a-muigh</target> +<source>Delay (in seconds):</source> +<target>An dà il (ann an diogan):</target> + +<source>Customize context menu:</source> +<target>Gnà thaich an clà r-taice co-theacsail</target> <source>Description</source> <target>Tuairisgeul</target> +<source>Restore hidden windows</source> +<target>Aisig na h-uinneagan falaichte</target> + <source>&Default</source> <target>&Bun-roghainn</target> -<source>Find what:</source> -<target>Lorg na leanas:</target> - -<source>Match case</source> -<target>An aire do litrichean mòra 's beaga</target> - -<source>&Find next</source> -<target>&Lorg an ath-fhear</target> - <source>Source code written in C++ using:</source> <target>Chaidh an còd tùsail a sgrìobhadh ann an C++ le taic:</target> @@ -1001,43 +1043,37 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>Many thanks for localization:</source> <target>Tha sinn fada an comain nan daoine a leanas airson eadar-theangachadh:</target> -<source>Start synchronization</source> -<target>Tòisich air an t-sioncronachadh</target> +<source>Save as Batch Job</source> +<target>Sà bhail mar obair baidse</target> -<source>Comparison settings</source> -<target>Roghainnean a' choimeasaidh</target> +<source>Delete Items</source> +<target>Sguab à s na nithean</target> -<source>Synchronization settings</source> -<target>Roghainnean an t-sioncronachaidh</target> +<source>Global Settings</source> +<target>Na roghainnean uile-choitcheann</target> -<source>Delete</source> -<target>Sguab à s</target> +<source>Select Time Span</source> +<target>Tagh an rainse ama</target> -<source>Configure filter</source> -<target>Rèitich a' chriathrag</target> +<source>Folder Pairs</source> +<target>Paidhrichean nam pasganan</target> <source>Find</source> <target>Lorg</target> -<source>Select time span</source> -<target>Tagh an raon-ama</target> - -<source>Folder pairs</source> -<target>Paidhrichean phasgan</target> - <source>Overview</source> <target>Foir-shealladh</target> <source>Configuration</source> <target>Rèiteachadh</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Am prìomh-bhà r</target> -<source>Filter files</source> +<source>Filter Files</source> <target>Criathraich na faidhlichean</target> -<source>Select view</source> +<source>Select View</source> <target>Tagh sealladh</target> <source>Open...</source> @@ -1049,20 +1085,29 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>Compare both sides</source> <target>Dèan coimeas air an dà thaobh</target> +<source>Comparison settings</source> +<target>Roghainnean a' choimeasaidh</target> + +<source>Synchronization settings</source> +<target>Roghainnean an t-sioncronachaidh</target> + +<source>Start synchronization</source> +<target>Tòisich air an t-sioncronachadh</target> + +<source>Confirm</source> +<target>Dearbh</target> + <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> -<pluralform>A bheil thu cinnteach gu bheil thu airson an à ithne %y a ruith air %x nì?</pluralform> -<pluralform>A bheil thu cinnteach gu bheil thu airson an à ithne %y a ruith air %x nì?</pluralform> -<pluralform>A bheil thu cinnteach gu bheil thu airson an à ithne %y a ruith air %x nithean?</pluralform> -<pluralform>A bheil thu cinnteach gu bheil thu airson an à ithne %y a ruith air %x nì?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airson an à ithne seo (%y) a ruith air %x nì?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airson an à ithne seo (%y) a ruith air %x nì?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airson an à ithne seo (%y) a ruith air %x nithean?</pluralform> +<pluralform>A bheil thu cinnteach gu bheil thu airson an à ithne seo (%y) a ruith air %x nì?</pluralform> </target> -<source>Confirm</source> -<target>Dearbh</target> - <source>&Execute</source> <target>&Cuir an gnìomh</target> @@ -1102,12 +1147,6 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>Set direction:</source> <target>Suidhich a' chomhair:</target> -<source>Exclude temporarily</source> -<target>Dùin a-mach gu sealach</target> - -<source>Include temporarily</source> -<target>Gabh a-steach gu sealach</target> - <source>multiple selection</source> <target>Ioma-thaghadh</target> @@ -1117,6 +1156,15 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>Exclude via filter:</source> <target>Dùin a-mach le criathrag:</target> +<source>Exclude temporarily</source> +<target>Dùin a-mach gu sealach</target> + +<source>Include temporarily</source> +<target>Gabh a-steach gu sealach</target> + +<source>Delete</source> +<target>Sguab à s</target> + <source>Include all</source> <target>Gabh a-steach na h-uile</target> @@ -1159,11 +1207,14 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>Do you want to save changes to %x?</source> <target>An sà bhail sinn dhut na h-atharraichean air %x?</target> +<source>Never save &changes</source> +<target>Na sà bhail atharrai&chean idir</target> + <source>Do&n't save</source> <target>&Na sà bhail</target> -<source>Never save &changes</source> -<target>Na sà bhail atharrai&chean idir</target> +<source>Filter</source> +<target>Criathrag</target> <source>Show files that exist on left side only</source> <target>Na seall ach faidhlichean a tha air an taobh chlì a-mhà in</target> @@ -1210,12 +1261,18 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>Set as default</source> <target>Suidhich mar a' bhun-roghainn</target> -<source>Operation aborted</source> -<target>Sguireadh dhen ghnìomh</target> - <source>All folders are in sync</source> <target>Tha gach pasgan air a shioncronachadh</target> +<source>Synchronization Settings</source> +<target>Roghainnean an t-sioncronachaidh</target> + +<source>Comparison Settings</source> +<target>Roghainnean a' choimeasaidh</target> + +<source>Cannot find %x</source> +<target>Chan urrainn dhuinn %x a lorg.</target> + <source>Comma-separated values</source> <target>Luachan le cromagan eatarra</target> @@ -1225,30 +1282,6 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>Searching for program updates...</source> <target>A' lorg ùrachaidhean a' phrògraim...</target> -<source>&Ignore subsequent errors</source> -<target>Le&ig seachad mearachdan à s a dhèidh seo</target> - -<source>&Ignore</source> -<target>&Leig seachad</target> - -<source>Fatal Error</source> -<target>Mearachd mharbhtach</target> - -<source>&Don't show this warning again</source> -<target>Na seall an rabha&dh seo a-rithist</target> - -<source>&Switch</source> -<target>&Dèan suids</target> - -<source>Question</source> -<target>Ceist</target> - -<source>&Yes</source> -<target>&Tha</target> - -<source>&No</source> -<target>&Chan eil</target> - <source>Scanning...</source> <target>'Ga sganadh...</target> @@ -1258,14 +1291,17 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>Info</source> <target>Fiosrachadh</target> +<source>Warning</source> +<target>Rabhadh</target> + <source>Paused</source> <target>'Na stad</target> <source>Initializing...</source> <target>A' tòiseachadh...</target> -<source>Aborted</source> -<target>Air sgur dheth</target> +<source>Stopped</source> +<target>Chaidh stad a chur air</target> <source>Completed</source> <target>Deiseil</target> @@ -1276,12 +1312,6 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>Log</source> <target>Logaich</target> -<source>Cannot find %x</source> -<target>Chan urrainn dhuinn %x a lorg.</target> - -<source>Inactive</source> -<target>Neo-ghnìomhach</target> - <source>Today</source> <target>An-diugh</target> @@ -1306,9 +1336,6 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Criathrag</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1320,6 +1347,9 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <pluralform>A bheil thu cinnteach gu bheil thu airson an %x nì seo a chur dhan bhiona?</pluralform> </target> +<source>Move</source> +<target>Gluais</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1331,6 +1361,9 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <pluralform>A bheil thu cinnteach gu bheil thu airson na %x nì seo a sguabadh à s?</pluralform> </target> +<source>Exclude</source> +<target>Dùin a-mach</target> + <source>Direct</source> <target>Dìreach</target> @@ -1355,8 +1388,8 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <source>- Other side's counterpart to %item_folder%</source> <target>- Seise %item_folder% aig a' choimpiutair eile</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>A bheil thus airson na rabhaidhean 's còmraidhean falaichte fhaicinn a-rithist?</target> +<source>Restore all hidden windows and warnings?</source> +<target>A bheil thu airson gach uinneag is rabhadh falaichte aiseaga?</target> <source>Leave as unresolved conflict</source> <target>Fà g mar còmhstri gun rèiteachadh</target> @@ -1487,14 +1520,14 @@ An aire: Feumaidh slighean nam faidhlichean a bhith dà imheach ris na bun-phasga <pluralform>%x latha</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Cha b' urrainn dhuinn clà raidh airson teachdaireachdan an t-siostaim.</target> +<source>Unable to register to receive system messages.</source> +<target>Chan urrainn dhuinn clà radh gus teachdaireachdan an t-siostaim fhaighinn.</target> <source>Cannot set privilege %x.</source> <target>Cha ghabh a' phribhleid %x a shuidheachadh.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Cha b' urrainn dhuinn modh cadal an t-siostaim a chur dheth.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Chan urrainn dhuinn modh cadal an t-siostaim a chur dheth.</target> <source>Cannot change process I/O priorities.</source> <target>Chan urrainn dhuinn na prìomhachasan I/O atharrachadh.</target> diff --git a/BUILD/Languages/serbian.lng b/BUILD/Languages/serbian.lng index 9af8b193..679cfbe1 100644 --- a/BUILD/Languages/serbian.lng +++ b/BUILD/Languages/serbian.lng @@ -2,181 +2,15 @@ <language>CрпÑки</language> <translator>БалканÑки Шпијун</translator> <locale>sr_RS</locale> - <flag_image>flag_serbia.png</flag_image> - <plural_form_count>3</plural_form_count> + <image>flag_serbia.png</image> + <plural_count>3</plural_count> <plural_definition>n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2</plural_definition> </header> -<source>Unable to move %x to the recycle bin.</source> -<target></target> - -<source> -<pluralform>Do you really want to move the following item to the recycle bin?</pluralform> -<pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> -</source> -<target> -</target> - -<source>Log</source> -<target></target> - -<source>&Continue</source> -<target></target> - -<source>&Don't show this warning again</source> -<target></target> - -<source>&Ignore subsequent errors</source> -<target></target> - -<source>Comma-separated values</source> -<target></target> - -<source>Never save &changes</source> -<target></target> - -<source>Include via filter:</source> -<target></target> - -<source>&Execute</source> -<target></target> - -<source>Confirm</source> -<target></target> - -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -</target> - -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target></target> - -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target></target> - -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target></target> - -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target></target> - -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target></target> - -<source>Move files to a user-defined folder</source> -<target></target> - -<source>Back up deleted and overwritten files in the recycle bin</source> -<target></target> - -<source>Recycle bin</source> -<target></target> - -<source>Requires database files. Not supported by all file systems.</source> -<target></target> - -<source>Detect moved files</source> -<target></target> - -<source>&Don't show this dialog again</source> -<target></target> - -<source>Minimize to notification area</source> -<target></target> - -<source>Retrying operation after error:</source> -<target></target> - -<source>job name</source> -<target></target> - -<source>Creating a Volume Shadow Copy for %x...</source> -<target></target> - -<source>The following folders are significantly different. Make sure you are matching the correct folders for synchronization.</source> -<target></target> - -<source>&Show error</source> -<target></target> - -<source>Waiting until all directories are available...</source> -<target></target> - -<source>Directory monitoring active</source> -<target></target> - -<source>Volume name %x is not part of file path %y.</source> -<target></target> - -<source>Cannot access the Volume Shadow Copy Service.</source> -<target></target> - -<source>%x items</source> -<target></target> - -<source> -<pluralform>1 thread</pluralform> -<pluralform>%x threads</pluralform> -</source> -<target> -</target> - -<source> -<pluralform>1 byte</pluralform> -<pluralform>%x bytes</pluralform> -</source> -<target> -</target> - -<source>Any number of alternative directories for at most one config file.</source> -<target></target> - -<source>Any number of FreeFileSync .ffs_gui and/or .ffs_batch configuration files.</source> -<target></target> - -<source>directory</source> -<target></target> - -<source>config files</source> -<target></target> - -<source>Syntax:</source> -<target></target> - -<source>Directories cannot be set for more than one configuration file.</source> +<source>&Check</source> <target></target> -<source>The config file must not contain settings at directory pair level when directories are set via command line.</source> -<target></target> - -<source>Unequal number of left and right directories specified.</source> -<target></target> - -<source>Cannot open file %x.</source> -<target></target> - -<source>Syntax error</source> -<target></target> - -<source>A directory path is expected after %x.</source> -<target></target> - -<source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source> -<target></target> - -<source>Moving symbolic link %x to the recycle bin</source> -<target></target> - -<source>Moving folder %x to the recycle bin</source> -<target></target> - -<source>Moving file %x to the recycle bin</source> +<source>Retrying operation...</source> <target></target> <source>Both sides have changed since last synchronization.</source> @@ -197,6 +31,15 @@ Note: File paths must be relative to base directories. <source>Checking recycle bin availability for folder %x...</source> <target>Проверавам доÑтупноÑÑ‚ Корпе за Ñмеће за фолдер %x...</target> +<source>Moving file %x to the recycle bin</source> +<target>Премештам датотеку %x у Корпи за Ñмеће</target> + +<source>Moving folder %x to the recycle bin</source> +<target>Премештам фолдер %x у Корпи за Ñмеће</target> + +<source>Moving symbolic link %x to the recycle bin</source> +<target>Премештам Ñимболичну везу %x у Корпи за Ñмеће</target> + <source>Deleting file %x</source> <target>БриÑање датотеке %x</target> @@ -206,21 +49,51 @@ Note: File paths must be relative to base directories. <source>Deleting symbolic link %x</source> <target>БриÑање Ñимболичне везе %x</target> +<source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source> +<target>Корпа за Ñмеће није доÑтупна за Ñледеће фолдере. УмеÑто тога датотеке биће обриÑане трајно:</target> + <source>An exception occurred</source> <target>Догодило Ñе изузеће</target> -<source>Error</source> -<target>Грешка</target> +<source>A directory path is expected after %x.</source> +<target>Путања фолдера Ñе очекује поÑле %x.</target> + +<source>Syntax error</source> +<target>СинтакÑичка грешка</target> + +<source>Cannot open file %x.</source> +<target>Ðе могу отворити датотеку %x.</target> <source>File %x does not contain a valid configuration.</source> <target>Датотека %x не Ñадржи валидну конфигурацију.</target> -<source>Warning</source> -<target>Упозорење</target> +<source>Unequal number of left and right directories specified.</source> +<target>Ðеједнак број левих и деÑних фолдера је дефиниÑан.</target> + +<source>The config file must not contain settings at directory pair level when directories are set via command line.</source> +<target>Конфигурациона датотека не Ñме Ñадржавати подешавања на нивоу фолдерÑког пара када Ñу фолдери подешени по командној линији.</target> + +<source>Directories cannot be set for more than one configuration file.</source> +<target>Фолдери не могу бити подешени за више од једне конфигурационе датотеке.</target> <source>Command line</source> <target>Командна линија</target> +<source>Syntax:</source> +<target>СинтакÑа:</target> + +<source>config files</source> +<target>конфигурационе датотеке</target> + +<source>directory</source> +<target>фолдер</target> + +<source>Any number of FreeFileSync .ffs_gui and/or .ffs_batch configuration files.</source> +<target>Било који број FreeFileSync .ffs_gui и/или .ffs_batch конфигурационих датотека.</target> + +<source>Any number of alternative directories for at most one config file.</source> +<target>Било који број алтернативних фолдера за најмање једну конфигурациону датотеку.</target> + <source>A folder input field is empty.</source> <target>Поље за одабир фолдера је празно.</target> @@ -378,6 +251,16 @@ Note: File paths must be relative to base directories. <source>Total time:</source> <target>Укупно време:</target> +<source> +<pluralform>1 byte</pluralform> +<pluralform>%x bytes</pluralform> +</source> +<target> +<pluralform>%x бајт</pluralform> +<pluralform>%x бајта</pluralform> +<pluralform>%x бајтова</pluralform> +</target> + <source>%x MB</source> <target>%x MB</target> @@ -396,12 +279,25 @@ Note: File paths must be relative to base directories. <source>Scanning:</source> <target>Претражујем:</target> +<source> +<pluralform>1 thread</pluralform> +<pluralform>%x threads</pluralform> +</source> +<target> +<pluralform>%x нит</pluralform> +<pluralform>%x нити</pluralform> +<pluralform>%x нити</pluralform> +</target> + <source>Encoding extended time information: %x</source> <target>Кодирам проширене информације о времену: %x</target> <source>/sec</source> <target>/Ñек</target> +<source>%x items/sec</source> +<target>%x Ñтавки/Ñекунди</target> + <source>Configuration file %x loaded partially only.</source> <target>Датотека подешавања %x учитана Ñамо делимично.</target> @@ -414,6 +310,9 @@ Note: File paths must be relative to base directories. <source>Browse directory</source> <target>Одабери фолдер</target> +<source>Cannot access the Volume Shadow Copy Service.</source> +<target>Ðе могу приÑтупити Volume Shadow Copy ÑервиÑу.</target> + <source>Please use FreeFileSync 64-bit version to create shadow copies on this system.</source> <target>Молимо кориÑтите FreeFileSync 64-битну верзију за израду shadow копија на овом ÑиÑтему.</target> @@ -423,11 +322,14 @@ Note: File paths must be relative to base directories. <source>Cannot determine volume name for %x.</source> <target>Ðе могу утврдити назив партиције за %x.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Прекид захтеван: Чека Ñе да Ñе тренутна акција заврши...</target> +<source>Volume name %x is not part of file path %y.</source> +<target>Ðазив партиције %x није део путање датотеке %y.</target> + +<source>Stop requested: Waiting for current operation to finish...</source> +<target>ЗауÑтављање захтевано: Чека Ñе да Ñе тренутна акција заврши...</target> -<source>Failure to create timestamp for versioning:</source> -<target>ÐеуÑпело Ñтварање временÑке ознаке за верзију:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Ðије могуће Ñтварање временÑке ознаке за верзију:</target> <source>Cannot read the following XML elements:</source> <target>Ðе могу прочитати Ñледеће XML елементе:</target> @@ -444,8 +346,8 @@ Note: File paths must be relative to base directories. <source>&Program</source> <target>&Програм</target> -<source>&Content</source> -<target>&Садржај</target> +<source>&View help</source> +<target>&Погледај помоћ</target> <source>&About</source> <target>&О програму</target> @@ -468,8 +370,8 @@ Note: File paths must be relative to base directories. <source>To get started just import a .ffs_batch file.</source> <target>Да би почели увезите .ffs_batch датотеку.</target> -<source>Folders to watch</source> -<target>Фолдери за надгледање</target> +<source>Folders to watch:</source> +<target>Фолдери за надгледање:</target> <source>Add folder</source> <target>Додај фолдер</target> @@ -483,12 +385,15 @@ Note: File paths must be relative to base directories. <source>Select a folder</source> <target>Одаберите фолдер</target> -<source>Idle time [seconds]</source> -<target>Време мировања [Ñекунди]</target> +<source>Idle time (in seconds):</source> +<target>Време мировања (у Ñекундама):</target> <source>Idle time between last detected change and execution of command</source> <target>Време мировања између задње препознате промене и извршења наредбе</target> +<source>Command line:</source> +<target>Командна линија:</target> + <source> The command is triggered if: - files or subfolders change @@ -500,36 +405,45 @@ The command is triggered if: - нови фолдери појаве (нпр. укључење USB Ñтика) </target> -<source>Start</source> -<target>Старт</target> +<source>&Start</source> +<target>&Покрени</target> -<source>&Retry</source> -<target>&Понови</target> - -<source>Cancel</source> -<target>ОдуÑтани</target> - -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - ÐутоматÑка Синхронизација</target> +<source>About</source> +<target>О програму</target> <source>Build: %x</source> <target>Подверзија: %x</target> -<source>About</source> -<target>О програму</target> - <source>All files</source> <target>Све датотеке</target> +<source>Automated Synchronization</source> +<target>ÐутоматÑка Ñинхронизација</target> + +<source>Directory monitoring active</source> +<target>Ðктивно надгледање фолдера</target> + +<source>Waiting until all directories are available...</source> +<target>Чекање да Ñви фолдери буду доÑтупни...</target> + +<source>Error</source> +<target>Грешка</target> + <source>&Restore</source> <target>&Врати</target> +<source>&Show error</source> +<target>&Прикажи грешку</target> + <source>&Exit</source> <target>&Излаз</target> -<source>Invalid command line:</source> +<source>Incorrect command line:</source> <target>Ðетачна командна линија:</target> +<source>&Retry</source> +<target>&Понови</target> + <source>File content</source> <target>Садржај датотеке</target> @@ -590,8 +504,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>Поље за одабир одредишног фолдера не може бити празно.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Поље за одабир фолдера за верзионирање не може бити празно.</target> +<source>Please enter a target folder for versioning.</source> +<target>Молим унеÑите одредишни фолдер за верзионирање.</target> <source>Source folder %x not found.</source> <target>Изворни фолдер %x није пронађен.</target> @@ -599,6 +513,9 @@ The command is triggered if: <source>The following items have unresolved conflicts and will not be synchronized:</source> <target>Следеће Ñтавке имају неразрешених конфликата и неће бити Ñинхронизоване:</target> +<source>The following folders are significantly different. Make sure you are matching the correct folders for synchronization.</source> +<target>Следећи фолдери Ñу значајно различити. Обезбедите да Ñигурно упарујете праве фолдере за Ñинхронизацију.</target> + <source>Not enough free disk space available in:</source> <target>Ðедовољно проÑтора на диÑку у:</target> @@ -617,11 +534,17 @@ The command is triggered if: <source>Generating database...</source> <target>ГенериÑање базе података...</target> +<source>Creating a Volume Shadow Copy for %x...</source> +<target>Креирање Volume Shadow Copy за %x...</target> + <source>Data verification error: %x and %y have different content.</source> <target>Грешка при провери података: %x и %y имају различит Ñадржај.</target> -<source>Synchronization aborted</source> -<target>Синхронизација прекинута</target> +<source>job name</source> +<target>име задатка</target> + +<source>Synchronization stopped</source> +<target>Синхронизација зауÑтављена</target> <source>Synchronization completed with errors</source> <target>Синхронизација завршена Ñ Ð³Ñ€ÐµÑˆÐºÐ°Ð¼Ð°</target> @@ -638,11 +561,39 @@ The command is triggered if: <source>Saving log file %x...</source> <target>УпиÑујем лог датотеку %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>ПритиÑни "Замени" за решавање проблема у FreeFileSync главном оквиру дијалога.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Можете Ñе пребацити на главни прозор FreeFileSync-а да би разрешили ову Ñтвар.</target> + +<source>&Don't show this warning again</source> +<target>&Ðе приказуј ово упозорење поновно</target> + +<source>&Ignore</source> +<target>&Игнориши</target> + +<source>&Switch</source> +<target>&Замени</target> + +<source>Switching to FreeFileSync's main window</source> +<target>Пребацујем Ñе на главни прозор FreeFileSync-а</target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>ÐутоматÑки покушај за %x Ñекунду...</pluralform> +<pluralform>ÐутоматÑки покушај за %x Ñекунде...</pluralform> +<pluralform>ÐутоматÑки покушај за %x Ñекунди...</pluralform> +</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Пребацујем Ñе на главни оквир диалога FreeFileSync-а</target> +<source>&Ignore subsequent errors</source> +<target>&Занемари грешке које даље Ñледе</target> + +<source>Serious Error</source> +<target>Озбиљна грешка</target> + +<source>Check for Program Updates</source> +<target>Провери поÑтојање надоградње програма</target> <source>A new version of FreeFileSync is available:</source> <target>Ðова верзија FreeFileSync је доÑтупна:</target> @@ -650,24 +601,21 @@ The command is triggered if: <source>Download now?</source> <target>Преузети Ñада?</target> -<source>New version found</source> -<target>Пронађена нова верзија</target> - <source>&Download</source> <target>&Преузми</target> <source>FreeFileSync is up to date.</source> <target>FreeFileSync је ажуриран.</target> -<source>Information</source> -<target>Информација</target> - <source>Unable to connect to sourceforge.net.</source> <target>Ðе могу Ñе повезати на sourceforge.net.</target> <source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source> <target>Ðе могу на мрежи пронаћи тренутни број верзије FreeFileSync-а. Да ли желите да проверите ручно?</target> +<source>Copy</source> +<target>Копирај</target> + <source>Symlink</source> <target>Сим-веза</target> @@ -719,20 +667,20 @@ The command is triggered if: <source>Hibernate</source> <target>Хибернација</target> -<source>Selected variant:</source> -<target>Одабрана варијанта:</target> +<source>Alternate comparison settings</source> +<target>Ðлтернативна подешавања упоређивања</target> -<source>Select alternate comparison settings</source> -<target>Изаберите алтернативна подешавања упоређивања</target> +<source>Alternate synchronization settings</source> +<target>Ðлтернативна подешавања Ñинхронизације</target> -<source>Select alternate synchronization settings</source> -<target>Изаберите алтернативна подешавања Ñинхронизације</target> +<source>Local filter</source> +<target>Локални филтер</target> -<source>Filter is active</source> -<target>Филтер је активан</target> +<source>Active</source> +<target>Ðктиван</target> -<source>No filter selected</source> -<target>Ðиједан филтер није одабран</target> +<source>None</source> +<target>Ðиједан</target> <source>Remove alternate settings</source> <target>Уклони алтернативна подешавања</target> @@ -740,12 +688,18 @@ The command is triggered if: <source>Clear filter settings</source> <target>Уклони подешавања филтера</target> -<source>Copy</source> -<target>Копирај</target> - <source>Paste</source> <target>Залепи</target> +<source>Alternate Comparison Settings</source> +<target>Ðлтернативна подешавања упоређивања</target> + +<source>Alternate Synchronization Settings</source> +<target>Ðлтернативна подешавања Ñинхронизације</target> + +<source>Local Filter</source> +<target>Локални филтер</target> + <source>&New</source> <target>&Ðово</target> @@ -761,15 +715,18 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. &Синхронизуј</target> +<source>&Global settings</source> +<target>&Глобална подешавања</target> + <source>&Language</source> <target>&Језик</target> +<source>&Find...</source> +<target>&Ðађи...</target> + <source>&Export file list...</source> <target>&Извоз лиÑте датотека...</target> -<source>&Global settings</source> -<target>&Глобална подешавања</target> - <source>&Tools</source> <target>&Ðлати</target> @@ -779,17 +736,14 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>Провери &аутоматÑки једном недељно</target> -<source>Check for new &version</source> -<target>Провери поÑтојање нове &верзије</target> +<source>&Check for new version</source> +<target>&Провери поÑтојање нове верзије</target> <source>Compare</source> <target>Упореди</target> -<source>Comparison settings</source> -<target>Подешавања упоређивања</target> - -<source>Synchronization settings</source> -<target>Подешавања Ñинхронизације</target> +<source>Cancel</source> +<target>ОдуÑтани</target> <source>Synchronize</source> <target>Синхронизуј</target> @@ -803,6 +757,15 @@ The command is triggered if: <source>Swap sides</source> <target>Замени Ñтране</target> +<source>Close search bar</source> +<target>Затвори траку за претраживање</target> + +<source>Find:</source> +<target>Ðађи:</target> + +<source>Match case</source> +<target>По величини Ñлова</target> + <source>Save as batch job</source> <target>Сачувај као беч задатак</target> @@ -824,86 +787,71 @@ The command is triggered if: <source>Total bytes to copy</source> <target>Укупно бајтова за копирање</target> -<source>Items found:</source> -<target>Пронађене Ñтавке:</target> +<source>Select a variant:</source> +<target>Одаберите варијанту:</target> -<source>Speed:</source> -<target>Брзина:</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Идентификуј једнаке датотеке упоређивањем времена промена и величина.</target> -<source>Time remaining:</source> -<target>ПреоÑтало време:</target> +<source>Identify equal files by comparing the file content.</source> +<target>Идентификуј једнаке датотеке упоређивањем Ñадржаја датотека.</target> -<source>Time elapsed:</source> -<target>Протекло време:</target> +<source>Symbolic links:</source> +<target>Симболичне везе:</target> -<source>Synchronizing...</source> -<target>Синхронизујем...</target> +<source>More information</source> +<target>Више информација</target> -<source>On completion</source> -<target>При завршетку</target> +<source>OK</source> +<target>У реду</target> -<source>Close</source> -<target>Затвори</target> +<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> +<target>Пронађи и изврши промене на обе Ñтране. БриÑања, премештања и конфликти Ñе откривају аутоматÑки употребом базе података.</target> -<source>&Pause</source> -<target>&Пауза</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Креирај огледални бекап левог фолдера који ће Ñе тачно подударати Ñа деÑним фолдером након Ñинхронизације.</target> -<source>Variant</source> -<target>Варијанта</target> +<source>Copy new and updated files to the right folder.</source> +<target>Копирај нове и ажуриране датотеке у деÑни фолдер.</target> -<source>Statistics</source> -<target>СтатиÑтика</target> +<source>Configure your own synchronization rules.</source> +<target>Конфигуришите ваша влаÑтита Ñинхронизациона правила.</target> -<source>Select a variant</source> -<target>Одаберите варијанту</target> +<source>Detect moved files</source> +<target>Уочи премештене датотеке</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Датотеке Ñе Ñматрају једнаке ако Ñу им - - време задње промене и датум - - величине датотека -једнаки -</target> +<source>Requires database files. Not supported by all file systems.</source> +<target>Потребне датотеке базе. Ðије подржано за Ñве ÑиÑтеме датотека.</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Датотеке Ñе Ñматрају једнаке ако им је - - Ñадржај датотеке -једнак -</target> +<source>Delete files:</source> +<target>Обриши датотеке:</target> -<source>Symbolic Link handling</source> -<target>Управљање Ñимболичним везама</target> +<source>Permanent</source> +<target>Трајно</target> + +<source>Delete or overwrite files permanently</source> +<target>Трајно избриши или замени датотеке</target> -<source>Help</source> -<target>Помоћ</target> +<source>Recycle bin</source> +<target>Корпа за Ñмеће</target> -<source>OK</source> -<target>У реду</target> +<source>Back up deleted and overwritten files in the recycle bin</source> +<target>Ðаправи резервне копије обриÑаних и замењених датотека у Корпи за Ñмеће</target> -<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> -<target>Пронађи и изврши промене на обе Ñтране. БриÑања, премештања и конфликти Ñе откривају аутоматÑки употребом базе података.</target> +<source>Versioning</source> +<target>Верзионирање</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Огледални бекап левог фолдера. ДеÑни фолдер Ñе модификује да би био једнак левом фолдеру након Ñинхронизације.</target> +<source>Move files to a user-defined folder</source> +<target>ПремеÑти датотеке у кориÑнички одабран фолдер</target> -<source>Copy new or updated files to right folder.</source> -<target>Копирај нове или ажуриране датотеке у деÑни фолдер.</target> +<source>Naming convention:</source> +<target>Правило именовања:</target> -<source>Configure your own synchronization rules.</source> -<target>Конфигуришите ваша влаÑтита Ñинхронизациона правила.</target> +<source>Show examples</source> +<target>Прикажи примере</target> -<source>Error handling</source> -<target>Грешка при обради</target> +<source>Handle errors:</source> +<target>Обрада грешака:</target> <source>Ignore</source> <target>Игнориши</target> @@ -917,68 +865,71 @@ is the same <source>Show pop-up on errors or warnings</source> <target>Прикажи иÑкачући прозор при грешкама и упозорењима</target> -<source>Deletion handling</source> -<target>Управљање при бриÑању</target> +<source>On completion:</source> +<target>При завршетку:</target> -<source>Permanent</source> -<target>Трајно</target> +<source>Start synchronization now?</source> +<target>Почни Ñинхронизацију Ñада?</target> -<source>Delete or overwrite files permanently</source> -<target>Трајно избриши или замени датотеке</target> +<source>Variant:</source> +<target>Варијанта:</target> -<source>Versioning</source> -<target>Верзионирање</target> +<source>Statistics</source> +<target>СтатиÑтика</target> -<source>Naming convention:</source> -<target>Правило именовања:</target> +<source>&Don't show this dialog again</source> +<target>&Ðе приказуј овај диалог поновно</target> -<source>Batch job</source> -<target>Беч задатак</target> +<source>Items found:</source> +<target>Пронађене Ñтавке:</target> -<source>Exit</source> -<target>Изађи</target> +<source>Speed:</source> +<target>Брзина:</target> -<source>Abort synchronization on first error</source> -<target>Прекини Ñинхронизацију при првој грешци</target> +<source>Time remaining:</source> +<target>ПреоÑтало време:</target> -<source>Show progress dialog</source> -<target>Прикажи дијалог прогреÑа</target> +<source>Time elapsed:</source> +<target>Протекло време:</target> -<source>Save log</source> -<target>Сачувај лог</target> +<source>Synchronizing...</source> +<target>Синхронизујем...</target> -<source>Select folder to save log files</source> -<target>Одабери фолдер за чување лог датотека</target> +<source>Minimize to notification area</source> +<target>Минимизирај у облаÑти за обавештења</target> -<source>Limit</source> -<target>Ограничи</target> +<source>Close</source> +<target>Затвори</target> -<source>Limit maximum number of log files</source> -<target>Ограничи макÑималан број лог датотека</target> +<source>&Pause</source> +<target>&Пауза</target> -<source>Source code written in C++ using:</source> -<target>Изворни код напиÑан у C++ уз коришћење:</target> +<source>Stop</source> +<target>ЗауÑтави</target> -<source>If you like FreeFileSync</source> -<target>Ðко вам Ñе Ñвиђа FreeFileSync</target> +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Креирај беч датотеку за ненадзирану Ñинхронизацију. Да би почели, кликните дуплим кликом ову датотеку или додајте задатак у таÑк менаџеру: %x</target> -<source>Donate with PayPal</source> -<target>Донација Ñа PayPal-ом</target> +<source>Stop synchronization at first error</source> +<target>ЗауÑтави Ñинхронизацију при првој грешци</target> -<source>Many thanks for localization:</source> -<target>Велике похвале за локализацију:</target> +<source>Show progress dialog</source> +<target>Прикажи дијалог прогреÑа</target> -<source>Feedback and suggestions are welcome</source> -<target>Повратне информације и предлози Ñу добродошли</target> +<source>Save log:</source> +<target>Сачувај лог:</target> -<source>Homepage</source> -<target>Веб Ñтраница</target> +<source>Limit:</source> +<target>Ограничи:</target> -<source>Email</source> -<target>И-меил</target> +<source>Limit maximum number of log files</source> +<target>Ограничи макÑималан број лог датотека</target> -<source>Published under the GNU General Public License</source> -<target>Објављено под ГÐУ Општом јавном лиценцом</target> +<source>How can I schedule a batch job?</source> +<target>Како могу заказати беч задатак?</target> + +<source>&Recycle bin</source> +<target>&Корпа за Ñмеће</target> <source>Delete on both sides</source> <target>Избриши на обе Ñтране</target> @@ -986,91 +937,139 @@ is the same <source>Delete on both sides even if the file is selected on one side only</source> <target>Избриши на обе Ñтране чак иако је датотека Ñелектована Ñамо на једној Ñтрани</target> -<source>Include</source> -<target>Укључи</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Одаберите филтерÑка подешавања да би иÑкључили одређене датотеке из Ñинхронизације. УнеÑите путање датотека релативно према њиховим одговарајућим фолдерÑким паровима.</target> -<source>Exclude</source> -<target>ИÑкључи</target> +<source>Include:</source> +<target>Укључи:</target> -<source>Time span</source> -<target>ВременÑко ограничење</target> +<source>Exclude:</source> +<target>ИÑкључи:</target> -<source>File size</source> -<target>Величина датотеке</target> +<source>Time span:</source> +<target>ВременÑко ограничење:</target> -<source>Minimum</source> -<target>Минимум</target> +<source>File size:</source> +<target>Величина датотеке:</target> -<source>Maximum</source> -<target>МакÑимум</target> +<source>Minimum:</source> +<target>Минимум:</target> + +<source>Maximum:</source> +<target>МакÑимум:</target> <source>&Clear</source> <target>&Уклони</target> -<source>Global settings</source> -<target>Глобална подешавања</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Следећа подешавања Ñе кориÑте за Ñве ÑинхронизацијÑке задатке.</target> <source>Fail-safe file copy</source> <target>Копирање заштићено од грешака</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Копирај у привремену датотеку (*.ffs_tmp) пре уклањања циљане Ñтавке. +Ово гарантује непромењивоÑÑ‚ чак и у Ñлучају озбиљне грешке. +</target> + +<source>(recommended)</source> +<target>(препоручено)</target> + <source>Copy locked files</source> <target>Копирај закључане датотеке</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Копирај дељене или закључане датотеке кориÑтећи Volume Shadow Copy ÑервиÑ.</target> + +<source>(requires administrator rights)</source> +<target>(потребна админиÑтраторÑка права)</target> + <source>Copy file access permissions</source> <target>Копирај овлашћења приÑтупа датотекама</target> -<source>Restore hidden dialogs</source> -<target>Прикажи Ñкривене диалоге</target> +<source>Transfer file and folder permissions.</source> +<target>ПремеÑти овлашћења приÑтупа датотека и фолдера.</target> -<source>External applications</source> -<target>Спољне апликације</target> +<source>Automatic retry on error:</source> +<target>ÐутоматÑки покушај при грешци:</target> + +<source>Retry count:</source> +<target>Број покушаја:</target> + +<source>Delay (in seconds):</source> +<target>Паузирање (у Ñекундама):</target> + +<source>Customize context menu:</source> +<target>Прилагоди контекÑтни мени:</target> <source>Description</source> <target>ОпиÑ</target> +<source>Restore hidden windows</source> +<target>Прикажи Ñкривене прозоре</target> + <source>&Default</source> <target>&Подразумевано</target> -<source>Find what:</source> -<target>Ðађи шта:</target> +<source>Source code written in C++ using:</source> +<target>Изворни код напиÑан у C++ уз коришћење:</target> -<source>Match case</source> -<target>По величини Ñлова</target> +<source>If you like FreeFileSync</source> +<target>Ðко вам Ñе Ñвиђа FreeFileSync</target> -<source>&Find next</source> -<target>&Ðађи Ñледеће</target> +<source>Donate with PayPal</source> +<target>Донација Ñа PayPal-ом</target> -<source>Start synchronization</source> -<target>Почни Ñинхронизацију</target> +<source>Feedback and suggestions are welcome</source> +<target>Повратне информације и предлози Ñу добродошли</target> -<source>Delete</source> -<target>Избриши</target> +<source>Homepage</source> +<target>Веб Ñтраница</target> -<source>Configure filter</source> -<target>Конфигуриши филтер</target> +<source>Email</source> +<target>И-меил</target> -<source>Find</source> -<target>Пронађи</target> +<source>Published under the GNU General Public License</source> +<target>Објављено под ГÐУ Општом јавном лиценцом</target> + +<source>Many thanks for localization:</source> +<target>Велике похвале за локализацију:</target> + +<source>Save as Batch Job</source> +<target>Сачувај као беч задатак</target> + +<source>Delete Items</source> +<target>Избриши Ñтавке</target> -<source>Select time span</source> +<source>Global Settings</source> +<target>Глобална подешавања</target> + +<source>Select Time Span</source> <target>Изаберите временÑки раÑпон</target> -<source>Folder pairs</source> +<source>Folder Pairs</source> <target>ФолдерÑки парови</target> +<source>Find</source> +<target>Пронађи</target> + <source>Overview</source> <target>Преглед</target> <source>Configuration</source> <target>Подешавања</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Главна трака</target> -<source>Filter files</source> -<target>Филтрирај датотеке</target> +<source>Filter Files</source> +<target>Филтрирање датотека</target> -<source>Select view</source> +<source>Select View</source> <target>Изаберите приказ</target> <source>Open...</source> @@ -1082,6 +1081,31 @@ is the same <source>Compare both sides</source> <target>Упореди обе Ñтране</target> +<source>Comparison settings</source> +<target>Подешавања упоређивања</target> + +<source>Synchronization settings</source> +<target>Подешавања Ñинхронизације</target> + +<source>Start synchronization</source> +<target>Почни Ñинхронизацију</target> + +<source>Confirm</source> +<target>Потврди</target> + +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +<pluralform>Да ли Ñтварно желите да извршите команду %y за %x Ñтавку?</pluralform> +<pluralform>Да ли Ñтварно желите да извршите команду %y за %x Ñтавке?</pluralform> +<pluralform>Да ли Ñтварно желите да извршите команду %y за %x Ñтавки?</pluralform> +</target> + +<source>&Execute</source> +<target>&Изврши</target> + <source> <pluralform>1 directory</pluralform> <pluralform>%x directories</pluralform> @@ -1115,17 +1139,23 @@ is the same <source>Set direction:</source> <target>Одабери Ñмер:</target> +<source>multiple selection</source> +<target>вишеÑтруки одабир</target> + +<source>Include via filter:</source> +<target>Укључи по филтеру:</target> + +<source>Exclude via filter:</source> +<target>ИÑкључи преко филтера:</target> + <source>Exclude temporarily</source> <target>Тренутно иÑкључи</target> <source>Include temporarily</source> <target>Тренутно укључи</target> -<source>multiple selection</source> -<target>вишеÑтруки одабир</target> - -<source>Exclude via filter:</source> -<target>ИÑкључи преко филтера:</target> +<source>Delete</source> +<target>Избриши</target> <source>Include all</source> <target>Укључи Ñве</target> @@ -1169,9 +1199,15 @@ is the same <source>Do you want to save changes to %x?</source> <target>Да ли желите Ñачувати промене за %x?</target> +<source>Never save &changes</source> +<target>Ðикад не Ñачувај &промене</target> + <source>Do&n't save</source> <target>Ðе&мој Ñачувати</target> +<source>Filter</source> +<target>Филтрирање</target> + <source>Show files that exist on left side only</source> <target>Прикажи датотеке које поÑтоје Ñамо на левој Ñтрани</target> @@ -1217,35 +1253,26 @@ is the same <source>Set as default</source> <target>ПоÑтави као подразумевано</target> -<source>Operation aborted</source> -<target>Операција отказана</target> - <source>All folders are in sync</source> <target>Сви фолдери Ñу Ñинхронизовани</target> -<source>File list exported</source> -<target>ЛиÑта датотека екÑпортована</target> - -<source>Searching for program updates...</source> -<target>Претражујем ажурирање за програм...</target> - -<source>&Ignore</source> -<target>&Игнориши</target> +<source>Synchronization Settings</source> +<target>Подешавања Ñинхронизације</target> -<source>Fatal Error</source> -<target>Критична грешка</target> +<source>Comparison Settings</source> +<target>Подешавања упоређивања</target> -<source>&Switch</source> -<target>&Замени</target> +<source>Cannot find %x</source> +<target>Ðемогу пронаћи %x</target> -<source>Question</source> -<target>Питање</target> +<source>Comma-separated values</source> +<target>Зарезом одвојене вредноÑти</target> -<source>&Yes</source> -<target>&Да</target> +<source>File list exported</source> +<target>ЛиÑта датотека екÑпортована</target> -<source>&No</source> -<target>&Ðе</target> +<source>Searching for program updates...</source> +<target>Претражујем ажурирање за програм...</target> <source>Scanning...</source> <target>Прегледавање...</target> @@ -1256,23 +1283,26 @@ is the same <source>Info</source> <target>Инфо</target> +<source>Warning</source> +<target>Упозорење</target> + <source>Paused</source> <target>Паузирано</target> <source>Initializing...</source> <target>Покретање...</target> -<source>Aborted</source> -<target>Прекинуто</target> +<source>Stopped</source> +<target>ЗауÑтављено</target> <source>Completed</source> <target>Завршено</target> -<source>Cannot find %x</source> -<target>Ðемогу пронаћи %x</target> +<source>&Continue</source> +<target>&ÐаÑтави</target> -<source>Inactive</source> -<target>Ðеактивно</target> +<source>Log</source> +<target>Лог</target> <source>Today</source> <target>ДанаÑ</target> @@ -1298,8 +1328,18 @@ is the same <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Филтрирање</target> +<source> +<pluralform>Do you really want to move the following item to the recycle bin?</pluralform> +<pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> +</source> +<target> +<pluralform>Да ли Ñтварно желите да премеÑтите Ñледећу %x Ñтавку у Корпи за Ñмеће?</pluralform> +<pluralform>Да ли Ñтварно желите да премеÑтите Ñледеће %x Ñтавке у Корпи за Ñмеће?</pluralform> +<pluralform>Да ли Ñтварно желите да премеÑтите Ñледећих %x Ñтавки у Корпи за Ñмеће?</pluralform> +</target> + +<source>Move</source> +<target>ПремеÑти</target> <source> <pluralform>Do you really want to delete the following item?</pluralform> @@ -1311,6 +1351,9 @@ is the same <pluralform>Да ли Ñтварно желите да обришете Ñледећих %x Ñтавки?</pluralform> </target> +<source>Exclude</source> +<target>ИÑкључи</target> + <source>Direct</source> <target>ÐепоÑредно</target> @@ -1335,8 +1378,8 @@ is the same <source>- Other side's counterpart to %item_folder%</source> <target>- Дупликат Ñ Ð´Ñ€ÑƒÐ³Ðµ Ñтране у %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Врати Ñкривена упозорења и диалоге поновно видљивим?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Прикажи Ñве Ñкривене прозоре и упозорења?</target> <source>Leave as unresolved conflict</source> <target>ОÑтави као неразрешени конфликт</target> @@ -1393,10 +1436,10 @@ is the same <target>Ðе могу упиÑати време промене %x.</target> <source>Cannot read security context of %x.</source> -<target>Ðе могу читати безбедоноÑни Ñадржај %x.</target> +<target>Ðе могу читати безбедноÑни Ñадржај %x.</target> <source>Cannot write security context of %x.</source> -<target>Ðе могу упиÑати безбедоноÑни Ñадржај %x.</target> +<target>Ðе могу упиÑати безбедноÑни Ñадржај %x.</target> <source>Cannot read permissions of %x.</source> <target>Ðе могу читати овлашћења од %x.</target> @@ -1464,18 +1507,21 @@ is the same <pluralform>%x дана</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>ÐеуÑпела региÑтрација намењена пријему ÑиÑтемÑких порука.</target> +<source>Unable to register to receive system messages.</source> +<target>Ðије могућа региÑтрација примања ÑиÑтемÑких порука.</target> <source>Cannot set privilege %x.</source> <target>Ðе могу поÑтавити права за %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>ÐеуÑпео покушај ÑуÑпендовања мода Ñпавања рачунара</target> +<source>Unable to suspend system sleep mode.</source> +<target>Ðије могуће ÑуÑпендовање мода Ñпавања ÑиÑтема.</target> <source>Cannot change process I/O priorities.</source> <target>Ðе може Ñе променити Ð¿Ñ€Ð¾Ñ†ÐµÑ I/O приоритета</target> +<source>Unable to move %x to the recycle bin.</source> +<target>Ðије могуће премеÑтити %x у Корпи за Ñмеће.</target> + <source>Cannot determine final path for %x.</source> <target>Ðе могу утврдити коначну путању за %x.</target> diff --git a/BUILD/Languages/slovenian.lng b/BUILD/Languages/slovenian.lng index 0f83331f..6591bc68 100644 --- a/BUILD/Languages/slovenian.lng +++ b/BUILD/Languages/slovenian.lng @@ -2,11 +2,24 @@ <language>SlovenÅ¡Äina</language> <translator>Matej BadaliÄ, Tine Mlakar</translator> <locale>sl_SI</locale> - <flag_image>flag_slovenia.png</flag_image> - <plural_form_count>4</plural_form_count> + <image>flag_slovenia.png</image> + <plural_count>4</plural_count> <plural_definition>n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> +<target></target> + <source>Both sides have changed since last synchronization.</source> <target>Obe strani sta se spremenili od zadnje sinhronizacije.</target> @@ -58,9 +71,6 @@ <source>Cannot open file %x.</source> <target>Ne morem odpreti datoteke %x.</target> -<source>Error</source> -<target>Napaka</target> - <source>File %x does not contain a valid configuration.</source> <target>Datoteka %x ne vsebuje veljavnih nastavitev</target> @@ -70,12 +80,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>Konfiguracijska datoteka ne sme vsebovati nastavitev na ravni imeniÅ¡kih parov, Äe so imeniki nastavljeni prek ukazne vrstice.</target> -<source>Warning</source> -<target>Pozor</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>Imeniki ne morejo biti nastavljeni za eÄ kot eno konfiguracijsko datoteko.</target> +<source>Command line</source> +<target>Ukazna vrstica</target> + <source>Syntax:</source> <target>Sintaksa:</target> @@ -91,9 +101,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>Poljubno Å¡tevilo alternatvnih imenikov za najveÄ eno konfiguracijsko datoteko.</target> -<source>Command line</source> -<target>Ukazna vrstica</target> - <source>A folder input field is empty.</source> <target>Vnosno polje za mapo je prazno.</target> @@ -298,8 +305,8 @@ <source>/sec</source> <target>/sek</target> -<source>%x items</source> -<target>%x elementov</target> +<source>%x items/sec</source> +<target>%x elementov/s</target> <source>Configuration file %x loaded partially only.</source> <target>Nastavitvena datoteka %x naložena samo delno.</target> @@ -328,11 +335,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Ime nosilca %x ni del poti datoteke %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Zahtevana je bila prekinitev: Äakam, da se zakljuÄi trenutna operacija...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Zahteva za ustavitev: ÄŒakam da se trenutni proces zakljuÄi...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Napaka pri ustvarjanju Äasovne oznake pri ustvarjanju razliÄic:</target> +<source>Unable to create timestamp for versioning:</source> +<target>Ne morem ustvariti Äasovnega žiga za verzioniranje:</target> <source>Cannot read the following XML elements:</source> <target>Ne morem brati naslednje XML elemente:</target> @@ -349,8 +356,8 @@ <source>&Program</source> <target>&Program</target> -<source>&Content</source> -<target>&Vsebina</target> +<source>&View help</source> +<target>&Prikaži pomoÄ</target> <source>&About</source> <target>&O programu</target> @@ -362,7 +369,7 @@ <target>Uporaba:</target> <source>1. Select folders to watch.</source> -<target>1. Izberite mape za opazovanje</target> +<target>1. Izberite imenike za opazovanje</target> <source>2. Enter a command line.</source> <target>2. Vnesite ukazno-vrstico.</target> @@ -373,27 +380,30 @@ <source>To get started just import a .ffs_batch file.</source> <target>Da zaÄnete uvozite datoteko .ffs_batch</target> -<source>Folders to watch</source> -<target>Mape za opazovanje</target> +<source>Folders to watch:</source> +<target>Imeniki za pregled:</target> <source>Add folder</source> -<target>Dodaj mapo</target> +<target>Dodaj imenik</target> <source>Remove folder</source> -<target>Odstrani v mapo</target> +<target>Odstrani v imenik</target> <source>Browse</source> <target>Brskaj</target> <source>Select a folder</source> -<target>Izberite mapo</target> +<target>Izberite imenik</target> -<source>Idle time [seconds]</source> -<target>ÄŒas nedejavnosti [sekunde]</target> +<source>Idle time (in seconds):</source> +<target>Nedejavni Äas (v sekundah):</target> <source>Idle time between last detected change and execution of command</source> <target>ÄŒas nedejavnosti med zadnjo zaznano spremembo in izvrÅ¡itvijo ukaza</target> +<source>Command line:</source> +<target>Ukazna vrstica:</target> + <source> The command is triggered if: - files or subfolders change @@ -405,33 +415,30 @@ Ukaz se sproži Äe: - pridejo nove mape (npr. ob vstavitvi USB kljuÄka) </target> -<source>Start</source> -<target>ZaÄni</target> - -<source>&Retry</source> -<target>&Ponovi</target> - -<source>Cancel</source> -<target>PrekliÄi</target> +<source>&Start</source> +<target>&Zaženi</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Avtomatizirana sinhronizacija</target> +<source>About</source> +<target>O programu(1)</target> <source>Build: %x</source> <target>Izgradnja: %x</target> -<source>About</source> -<target>O programu(1)</target> - <source>All files</source> <target>Vse datoteke</target> +<source>Automated Synchronization</source> +<target>Avtomatska sinhnorizacija</target> + <source>Directory monitoring active</source> <target>Nadzor imenikov je aktven</target> <source>Waiting until all directories are available...</source> <target>ÄŒakam da so vsi imeniki dostopni...</target> +<source>Error</source> +<target>Napaka</target> + <source>&Restore</source> <target>&Obnovi</target> @@ -441,11 +448,14 @@ Ukaz se sproži Äe: <source>&Exit</source> <target>&Izhod</target> -<source>Invalid command line:</source> +<source>Incorrect command line:</source> <target>NapaÄna ukazna vrstica:</target> +<source>&Retry</source> +<target>&Ponovi</target> + <source>File content</source> -<target>Vsebini datoteke</target> +<target>Vsebina datoteke</target> <source>File time and size</source> <target>ÄŒas in velikost datoteke</target> @@ -504,8 +514,8 @@ Ukaz se sproži Äe: <source>Target folder input field must not be empty.</source> <target>Vnosno polje za ciljno mapo ne sme biti prazno.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Vnosno polje za ustvarjanje razliÄic ne sme biti prazno.</target> +<source>Please enter a target folder for versioning.</source> +<target>Prosimo vnesite ciljno mapo za verzioniranje.</target> <source>Source folder %x not found.</source> <target>Izvorna mapa %x se ne najde.</target> @@ -543,8 +553,8 @@ Ukaz se sproži Äe: <source>job name</source> <target>naziv opravila</target> -<source>Synchronization aborted</source> -<target>Sinhronizacija prekinjena</target> +<source>Synchronization stopped</source> +<target>Sinhnorizacija ustavljena</target> <source>Synchronization completed with errors</source> <target>Sinhronizacija se je konÄala z napakami</target> @@ -561,14 +571,40 @@ Ukaz se sproži Äe: <source>Saving log file %x...</source> <target>Shranjujem datoteko beleženja %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Pritisnite "Preklopi", da razreÅ¡ite vpraÅ¡anja v glavnem pogovornem oknu FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Preklopite na FreeFileSync glavno okno za odpravo težave.</target> + +<source>&Don't show this warning again</source> +<target>&Ne pokaži veÄ tega opozorila</target> + +<source>&Ignore</source> +<target>&Ignoriraj</target> + +<source>&Switch</source> +<target>&Preklopi</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Preklapljam na FreeFileSync osrednje pogovorno okno</target> +<source>Switching to FreeFileSync's main window</source> +<target>Preklopi na FreeFileSync glavno okno</target> -<source>Retrying operation after error:</source> -<target>Operacija za ponoven poiskus po napaki:</target> +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>Ponovni poskus Äez %x sekundo...</pluralform> +<pluralform>Ponovni poskus Äez %x sekundi...</pluralform> +<pluralform>Ponovni poskus Äez %x sekunde...</pluralform> +<pluralform>Ponovni poskus Äez %x sekund...</pluralform> +</target> + +<source>&Ignore subsequent errors</source> +<target>&Ignoriraj nadaljnje napake</target> + +<source>Serious Error</source> +<target>Resna napaka</target> + +<source>Check for Program Updates</source> +<target>Prevri obstoj nadgradnje programa</target> <source>A new version of FreeFileSync is available:</source> <target>Nova razliÄica FreeFileSync je na voljo:</target> @@ -576,18 +612,12 @@ Ukaz se sproži Äe: <source>Download now?</source> <target>Prenesem sedaj?</target> -<source>New version found</source> -<target>Najdena nova verzija</target> - <source>&Download</source> <target>&Prenesi</target> <source>FreeFileSync is up to date.</source> <target>FreeFileSync je posodobljen.</target> -<source>Information</source> -<target>Informacije</target> - <source>Unable to connect to sourceforge.net.</source> <target>Ne morem se povezati na sourceforge.net.</target> @@ -645,20 +675,20 @@ Ukaz se sproži Äe: <source>Hibernate</source> <target>Hibernacija</target> -<source>Selected variant:</source> -<target>Izbrana varianta:</target> +<source>Alternate comparison settings</source> +<target>Alternativne nastavitve primerjave</target> -<source>Select alternate comparison settings</source> -<target>Izberite alternativne nastavitve primerjanja</target> +<source>Alternate synchronization settings</source> +<target>Alternativne nastavitve sinhnorizacije</target> -<source>Select alternate synchronization settings</source> -<target>Izberite nadomestne nastavitve sinhronizacije</target> +<source>Local filter</source> +<target>Lokalni filter</target> -<source>Filter is active</source> -<target>Filter je aktiven</target> +<source>Active</source> +<target>Aktivno</target> -<source>No filter selected</source> -<target>Noben filter ni izbran</target> +<source>None</source> +<target>NiÄ</target> <source>Remove alternate settings</source> <target>Odstrani nadomestne nastavitve</target> @@ -672,6 +702,15 @@ Ukaz se sproži Äe: <source>Paste</source> <target>Prilepi</target> +<source>Alternate Comparison Settings</source> +<target>Alternativne nastavitve primerjave</target> + +<source>Alternate Synchronization Settings</source> +<target>Alternativne nastavitve sinhnorizacije</target> + +<source>Local Filter</source> +<target>Lokalni filter</target> + <source>&New</source> <target>&Novo</target> @@ -679,7 +718,7 @@ Ukaz se sproži Äe: <target>&Shrani</target> <source>Save as &batch job...</source> -<target>Shrani kot paketno op&ravilo...</target> +<target>Shrani kot serijsko op&ravilo...</target> <source>1. &Compare</source> <target>1. &Primerjaj</target> @@ -687,15 +726,18 @@ Ukaz se sproži Äe: <source>2. &Synchronize</source> <target>2. &Sinhroniziraj</target> +<source>&Global settings</source> +<target>&Skupne nastavitve</target> + <source>&Language</source> <target>&Jezik</target> +<source>&Find...</source> +<target>&IÅ¡Äi...</target> + <source>&Export file list...</source> <target>&Izvozi seznam datotek...</target> -<source>&Global settings</source> -<target>&Globalne nastavitve</target> - <source>&Tools</source> <target>&Orodja</target> @@ -705,12 +747,15 @@ Ukaz se sproži Äe: <source>Check &automatically once a week</source> <target>S&amodejno preveri enkrat tedensko</target> -<source>Check for new &version</source> -<target>Preveri, Äe obstaja nova &verzija</target> +<source>&Check for new version</source> +<target>&Preveri, Äe obstaja nova verzija</target> <source>Compare</source> <target>Primerjaj</target> +<source>Cancel</source> +<target>PrekliÄi</target> + <source>Synchronize</source> <target>Sinhroniziraj</target> @@ -723,8 +768,17 @@ Ukaz se sproži Äe: <source>Swap sides</source> <target>Zamenjaj strani</target> +<source>Close search bar</source> +<target>Zapri iskalno vrstico</target> + +<source>Find:</source> +<target>IÅ¡Äi:</target> + +<source>Match case</source> +<target>Ujemaj se s primerom</target> + <source>Save as batch job</source> -<target>Shrani kot paketno opravilo</target> +<target>Shrani kot serijsko opravilo</target> <source>Hide excluded items</source> <target>Skrij izkljuÄene elemente</target> @@ -744,74 +798,20 @@ Ukaz se sproži Äe: <source>Total bytes to copy</source> <target>Skupno bajtov za kopiranje</target> -<source>Items found:</source> -<target>Najdenih elementov:</target> - -<source>Speed:</source> -<target>Hitrost:</target> - -<source>Time remaining:</source> -<target>Preostali Äas:</target> - -<source>Time elapsed:</source> -<target>PreteÄeni Äas:</target> - -<source>Synchronizing...</source> -<target>Sinhroniziram...</target> - -<source>Minimize to notification area</source> -<target>PomanjÅ¡aj v obmoÄje obvestil</target> - -<source>On completion</source> -<target>Ob zakljuÄku</target> - -<source>Close</source> -<target>Zapri</target> - -<source>&Pause</source> -<target>&Premor</target> - -<source>Variant</source> -<target>RazliÄica</target> - -<source>Statistics</source> -<target>Statistika</target> - -<source>&Don't show this dialog again</source> -<target>&Ne pokaži veÄ tega sporoÄila</target> - -<source>Select a variant</source> -<target>Izberite spremenljivko</target> +<source>Select a variant:</source> +<target>Izberi možnost:</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Datoteki sta enaki, Äe sta - - zadnji Äas zapisa in datum - - velikost datoteke -enaka -</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>DoloÄi enake datoteke s primerjavo datuma spremembe in velikosti.</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Datoteki sta enaki, Äe - - je vsebina datoteke -enaka -</target> +<source>Identify equal files by comparing the file content.</source> +<target>DoloÄi enake datoteke s primerjavo vsebine.</target> -<source>Symbolic Link handling</source> -<target>Rokovanje s simboliÄnimi povezavami</target> +<source>Symbolic links:</source> +<target>SimboliÄne povezave:</target> -<source>Help</source> -<target>PomoÄ</target> +<source>More information</source> +<target>VeÄ informacij</target> <source>OK</source> <target>V redu</target> @@ -819,11 +819,11 @@ enaka <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identificiraj in razÅ¡irjaj spremembe na obeh straneh. Izbrisi, premiki in spori so samodejno zaznani z uporabo podatkovne baze.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Zrcalna varnostna kopija leve mape. Desna mapa bo spremenjena, da se bo natanÄno ujemala z levo mapo po sinhronizaciji.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Ustvari zrcalno kopijo levega imenika, tako da se bo desni imenik po sinhnorizaciji popolnoma ujemal.</target> -<source>Copy new or updated files to right folder.</source> -<target>Kopiraj nove ali posodobljene datoteke v desno mapo.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Kopiraj nove in posodobljene datoteke v desni imenik.</target> <source>Configure your own synchronization rules.</source> <target>Konfigurirajte vaÅ¡a lastna sinhronizacijska pravila.</target> @@ -834,23 +834,8 @@ enaka <source>Requires database files. Not supported by all file systems.</source> <target>Zahteva podatkovno bazo. Ni podprt s strani vseh datoteÄnih sistemov.</target> -<source>Error handling</source> -<target>Napaka pri obravnavanju</target> - -<source>Ignore</source> -<target>Ignoriraj</target> - -<source>Hide all error and warning messages</source> -<target>Skrij vsa obvestila o napakah in opozorilih</target> - -<source>Pop-up</source> -<target>Pogovorno okno</target> - -<source>Show pop-up on errors or warnings</source> -<target>Prikaži pojavne napaka ali opozorila</target> - -<source>Deletion handling</source> -<target>Ravnanje pri brisanju</target> +<source>Delete files:</source> +<target>IzbriÅ¡i datoteke:</target> <source>Permanent</source> <target>Trajno</target> @@ -873,111 +858,174 @@ enaka <source>Naming convention:</source> <target>Konvencija poimenovanja:</target> -<source>Batch job</source> -<target>Paketno opravilo</target> +<source>Show examples</source> +<target>Pokaži primere</target> + +<source>Handle errors:</source> +<target>Upravljanje napak:</target> + +<source>Ignore</source> +<target>Ignoriraj</target> + +<source>Hide all error and warning messages</source> +<target>Skrij vsa obvestila o napakah in opozorilih</target> + +<source>Pop-up</source> +<target>Pogovorno okno</target> + +<source>Show pop-up on errors or warnings</source> +<target>Prikaži pojavne napaka ali opozorila</target> + +<source>On completion:</source> +<target>Ob zakljuÄku:</target> + +<source>Start synchronization now?</source> +<target>Zaženem sinhnorizacijo takoj?</target> + +<source>Variant:</source> +<target>Možnost:</target> + +<source>Statistics</source> +<target>Statistika</target> + +<source>&Don't show this dialog again</source> +<target>&Ne pokaži veÄ tega sporoÄila</target> + +<source>Items found:</source> +<target>Najdenih elementov:</target> + +<source>Speed:</source> +<target>Hitrost:</target> + +<source>Time remaining:</source> +<target>Preostali Äas:</target> + +<source>Time elapsed:</source> +<target>PreteÄeni Äas:</target> + +<source>Synchronizing...</source> +<target>Sinhroniziram...</target> + +<source>Minimize to notification area</source> +<target>PomanjÅ¡aj v obmoÄje obvestil</target> + +<source>Close</source> +<target>Zapri</target> + +<source>&Pause</source> +<target>&Premor</target> + +<source>Stop</source> +<target>Ustavi</target> <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target>Ustvari skriptno datoteko za samodejno sinhnorizacijo. Za zagon dvojno kliknite to datoteko ali pa jo umestite v razporejevalnik opravil: %x</target> -<source>Exit</source> -<target>Izhod</target> - -<source>Abort synchronization on first error</source> -<target>Prekini sinhronizacijo ob prvi napaki</target> +<source>Stop synchronization at first error</source> +<target>Ustavi sinhnorizacojo ob prvi napaki</target> <source>Show progress dialog</source> <target>Prikazuj pogovorno okno z napredkom</target> -<source>Save log</source> -<target>Shrani beleženje</target> - -<source>Select folder to save log files</source> -<target>Izberite mapo za shranjevanje datotek beleženja</target> +<source>Save log:</source> +<target>Shrani dnevnik:</target> -<source>Limit</source> -<target>Omejitev</target> +<source>Limit:</source> +<target>Omejitev:</target> <source>Limit maximum number of log files</source> <target>Omeji maksimalno Å¡tevilo datotek beleženja</target> +<source>How can I schedule a batch job?</source> +<target>Kako nastavim urnik za serijsko opravilo?</target> + +<source>&Recycle bin</source> +<target>&KoÅ¡</target> + <source>Delete on both sides</source> <target>IzbriÅ¡i na obeh straneh</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>IzbriÅ¡i na obeh straneh, Äetudi je datoteka izbrana na samo eni strani</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Datoteke bodo sinhnorizirane samo, Äe bodo zadoÅ¡Äale vsem filtrirnim pravilom. -Opomba: Poti datotek morajo biti relativne na osnovne imenike. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Izberi filtrirna pravila za izkljuÄitev doloÄenih datotek iz sinhnorizacije. VpiÅ¡i pot datotek relativno na imenik v obdelavi</target> -<source>Include</source> -<target>VkljuÄi</target> +<source>Include:</source> +<target>VkljuÄi:</target> -<source>Exclude</source> -<target>IzkljuÄi</target> +<source>Exclude:</source> +<target>IzkljuÄi:</target> -<source>Time span</source> +<source>Time span:</source> <target>ÄŒasovno obdobje</target> -<source>File size</source> -<target>Velikost datoteke</target> +<source>File size:</source> +<target>Velikost datoteke:</target> -<source>Minimum</source> -<target>Minimum</target> +<source>Minimum:</source> +<target>Minimum:</target> -<source>Maximum</source> -<target>Maksimum</target> +<source>Maximum:</source> +<target>Maksimum:</target> <source>&Clear</source> <target>P&oÄisti</target> -<source>Global settings</source> -<target>Globalne nastavitve</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Naslednje nastavitve se uporabljajo pri vseh sinhronizacijskih opravilih.</target> <source>Fail-safe file copy</source> <target>Kopiranje datotek varno pred odpovedjo</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Najprej kopiraj v zaÄasno datoteko (*.ffs_tmp) nato pa jo preimenuj. To zagotavlja konsistenco podatkov v primeru kritiÄne napake.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Kopiraj v zaÄasno datoteko (*.ffs_tmp) preden prepiÅ¡eÅ¡ cilj. +To zagotavlja konsistenco podatkov v primeru napake. +</target> + +<source>(recommended)</source> +<target>(priporoÄeno)</target> <source>Copy locked files</source> <target>Kopiraj zaklenjene datoteke</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Kopiraj zaklenjene ali imenike v souporabi s pomoÄjo Volume Shadow Copy servisa (zahteva pravice administratorja)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Kopiraj zaklenjene in datoteke v skupni rabi s pomoÄjo Shadow Copy Service.</target> + +<source>(requires administrator rights)</source> +<target>(zahteva pravice administratorja)</target> <source>Copy file access permissions</source> <target>Kopiraj dovoljenja dostopov datoteke</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Prenesi pravice datotek in imenikov (zahteva pravice administratorja)</target> +<source>Transfer file and folder permissions.</source> +<target>Prenesi pravice datotek in map.</target> + +<source>Automatic retry on error:</source> +<target>Ob napaki avtomatsko poskusi znova:</target> + +<source>Retry count:</source> +<target>Å tevilo poiskusov:</target> -<source>Restore hidden dialogs</source> -<target>Obnovi skrite pogovore</target> +<source>Delay (in seconds):</source> +<target>Zakasnitev (v sekundah):</target> -<source>External applications</source> -<target>Zunanje aplikacije</target> +<source>Customize context menu:</source> +<target>Prilagodi vsebinski meni:</target> <source>Description</source> <target>Opis</target> +<source>Restore hidden windows</source> +<target>Obnovi skrita okna</target> + <source>&Default</source> <target>&Privzeto</target> -<source>Find what:</source> -<target>Najdi kaj</target> - -<source>Match case</source> -<target>Ujemaj se s primerom</target> - -<source>&Find next</source> -<target>&Najdi naslednje</target> - <source>Source code written in C++ using:</source> <target>Izvorna koda napisana v C++ z uporabo:</target> @@ -1002,44 +1050,38 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>Many thanks for localization:</source> <target>Zahvale za lokalizacijo:</target> -<source>Start synchronization</source> -<target>ZaÄni sinhronizacijo</target> +<source>Save as Batch Job</source> +<target>Shrani kot serijsko opravilo</target> -<source>Comparison settings</source> -<target>Nastavitve primerjanja</target> +<source>Delete Items</source> +<target>IzbriÅ¡i elemente</target> -<source>Synchronization settings</source> -<target>Nastavitve sinhronizacije</target> +<source>Global Settings</source> +<target>Skupne nastavitve</target> -<source>Delete</source> -<target>IzbriÅ¡i</target> +<source>Select Time Span</source> +<target>Izberi Äasovno obdobje</target> -<source>Configure filter</source> -<target>Konfiguriraj filter</target> +<source>Folder Pairs</source> +<target>Pari imenikov</target> <source>Find</source> <target>Najdi</target> -<source>Select time span</source> -<target>Izberite Äasovni okvir</target> - -<source>Folder pairs</source> -<target>Pari map</target> - <source>Overview</source> <target>Pregled</target> <source>Configuration</source> <target>Konfiguracija</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Glavna vrstica</target> -<source>Filter files</source> +<source>Filter Files</source> <target>Filtriraj datoteke</target> -<source>Select view</source> -<target>Izberite pogled</target> +<source>Select View</source> +<target>Izberi pogled</target> <source>Open...</source> <target>Odpri...</target> @@ -1050,16 +1092,14 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>Compare both sides</source> <target>Primerjaj obe strani</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Ali res želite izvesti ukaz %y za %x element?</pluralform> -<pluralform>Ali res želite izvesti ukaz %y za %x elementa?</pluralform> -<pluralform>Ali res želite izvesti ukaz %y za %x elemente?</pluralform> -<pluralform>Ali res želite izvesti ukaz %y za %x elementov?</pluralform> -</target> +<source>Comparison settings</source> +<target>Nastavitve primerjanja</target> + +<source>Synchronization settings</source> +<target>Nastavitve sinhronizacije</target> + +<source>Start synchronization</source> +<target>ZaÄni sinhronizacijo</target> <source>Confirm</source> <target>Potrdi</target> @@ -1103,12 +1143,6 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>Set direction:</source> <target>Nastavi smer:</target> -<source>Exclude temporarily</source> -<target>ZaÄasno izkljuÄi</target> - -<source>Include temporarily</source> -<target>Trenutno vkljuÄi</target> - <source>multiple selection</source> <target>mnogokratna izbira</target> @@ -1118,6 +1152,15 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>Exclude via filter:</source> <target>IzkljuÄi preko filtra:</target> +<source>Exclude temporarily</source> +<target>ZaÄasno izkljuÄi</target> + +<source>Include temporarily</source> +<target>Trenutno vkljuÄi</target> + +<source>Delete</source> +<target>IzbriÅ¡i</target> + <source>Include all</source> <target>VkljuÄi vse</target> @@ -1160,11 +1203,14 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>Do you want to save changes to %x?</source> <target>Ali želite shraniti spremembe v %x?</target> +<source>Never save &changes</source> +<target>Nikoli ne shrani &sprememb</target> + <source>Do&n't save</source> <target>Ne shra&ni</target> -<source>Never save &changes</source> -<target>Nikoli ne shrani &sprememb</target> +<source>Filter</source> +<target>Filter</target> <source>Show files that exist on left side only</source> <target>Prikaži datoteke, ki obstajajo samo na levi</target> @@ -1211,12 +1257,18 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>Set as default</source> <target>Nastavi kot privzeto</target> -<source>Operation aborted</source> -<target>Operacija prekinjena</target> - <source>All folders are in sync</source> <target>Vse mape so sinhronizirane</target> +<source>Synchronization Settings</source> +<target>Nastavitve sinhnorizacije</target> + +<source>Comparison Settings</source> +<target>Nastavitve primerjave</target> + +<source>Cannot find %x</source> +<target>Ne najdem %x</target> + <source>Comma-separated values</source> <target>Vrednosti loÄene z vejico</target> @@ -1226,30 +1278,6 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>Searching for program updates...</source> <target>IÅ¡Äem posodobitve programa...</target> -<source>&Ignore subsequent errors</source> -<target>&Ignoriraj nadaljnje napake</target> - -<source>&Ignore</source> -<target>&Ignoriraj</target> - -<source>Fatal Error</source> -<target>Usodna napaka</target> - -<source>&Don't show this warning again</source> -<target>&Ne pokaži veÄ tega opozorila</target> - -<source>&Switch</source> -<target>&Preklopi</target> - -<source>Question</source> -<target>VpraÅ¡anje</target> - -<source>&Yes</source> -<target>&Da</target> - -<source>&No</source> -<target>&Ne</target> - <source>Scanning...</source> <target>Pregledujem...</target> @@ -1259,14 +1287,17 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>Info</source> <target>Info</target> +<source>Warning</source> +<target>Pozor</target> + <source>Paused</source> <target>Na premoru</target> <source>Initializing...</source> <target>Inicializiram...</target> -<source>Aborted</source> -<target>Prekinitev uspela</target> +<source>Stopped</source> +<target>Ustavljen</target> <source>Completed</source> <target>ZakljuÄeno</target> @@ -1277,12 +1308,6 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>Log</source> <target>Dnevnik</target> -<source>Cannot find %x</source> -<target>Ne najdem %x</target> - -<source>Inactive</source> -<target>Neaktivno</target> - <source>Today</source> <target>Danes</target> @@ -1307,9 +1332,6 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filter</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1321,6 +1343,9 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <pluralform>Ali res želite premakniti sledeÄih %x elementov v koÅ¡?</pluralform> </target> +<source>Move</source> +<target>Premakni</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1332,6 +1357,9 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <pluralform>Ali resniÄno želite izbrisati naslednjih %x elementov?</pluralform> </target> +<source>Exclude</source> +<target>IzkljuÄi</target> + <source>Direct</source> <target>Neposredno</target> @@ -1356,8 +1384,8 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <source>- Other side's counterpart to %item_folder%</source> <target>- Na drugi strani nasprotno v %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Ponovno prikažem vsa skrita obvestila in pogovore?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Obnovim vsa skrita okna in opozorila?</target> <source>Leave as unresolved conflict</source> <target>Pusti kot nereÅ¡eni spor</target> @@ -1488,14 +1516,14 @@ Opomba: Poti datotek morajo biti relativne na osnovne imenike. <pluralform>%x dni</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>NeuspeÅ¡na registracija za sprejem sistemskih sporoÄil.</target> +<source>Unable to register to receive system messages.</source> +<target>Ne morem se registriratiza prejem sistemskih sporoÄil.</target> <source>Cannot set privilege %x.</source> <target>Ne morem nastaviti privilegija %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>NaÄin spanja ni uspelo prekiniti.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Ne morem prepreÄiti mirovanja sistema.</target> <source>Cannot change process I/O priorities.</source> <target>Ne morem spremeniti V/I prioritet procesa.</target> diff --git a/BUILD/Languages/spanish.lng b/BUILD/Languages/spanish.lng index 507b977a..e5ae052c 100644 --- a/BUILD/Languages/spanish.lng +++ b/BUILD/Languages/spanish.lng @@ -2,11 +2,17 @@ <language>Español</language> <translator>I.R.Maturana (irmlab.com)</translator> <locale>es_ES</locale> - <flag_image>flag_spain.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_spain.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> +<target></target> + <source>Both sides have changed since last synchronization.</source> <target>Ambos lados han cambiado desde la última sincronización.</target> @@ -58,9 +64,6 @@ <source>Cannot open file %x.</source> <target>No se puede abrir el archivo %x.</target> -<source>Error</source> -<target>Error</target> - <source>File %x does not contain a valid configuration.</source> <target>El archivo %x no contiene una configuración válida.</target> @@ -70,12 +73,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>El archivo de configuración no debe incluir parámetros al nivel de un par de directorios cuando éstos se especifican desde la lÃnea de comandos.</target> -<source>Warning</source> -<target>Atención</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>No se pueden definir directorios para más de un archivo de configuración.</target> +<source>Command line</source> +<target>LÃnea de comandos</target> + <source>Syntax:</source> <target>Sintaxis:</target> @@ -91,9 +94,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>Cualquier número de directorios alternativos para un archivo de configuración como máximo.</target> -<source>Command line</source> -<target>LÃnea de comandos</target> - <source>A folder input field is empty.</source> <target>Un campo de entrada de la carpeta está vacÃo.</target> @@ -292,8 +292,8 @@ <source>/sec</source> <target>/seg</target> -<source>%x items</source> -<target>%x elementos</target> +<source>%x items/sec</source> +<target>%x elementos/seg</target> <source>Configuration file %x loaded partially only.</source> <target>Archivo de configuración %x cargado sólo parcialmente.</target> @@ -322,11 +322,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>El nombre de volumen %x no es parte de la ruta de archivo %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Anulación solicitada: esperando a que la operación actual finalice…</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Detención solicitada: esperando a que la operación actual finalice…</target> -<source>Failure to create timestamp for versioning:</source> -<target>Fallo al crear fecha y hora para el versionado:</target> +<source>Unable to create timestamp for versioning:</source> +<target>No es posible crear fecha y hora para la versión:</target> <source>Cannot read the following XML elements:</source> <target>No se pueden leer los siguientes elementos XML:</target> @@ -343,8 +343,8 @@ <source>&Program</source> <target>&Programa</target> -<source>&Content</source> -<target>&Contenido</target> +<source>&View help</source> +<target>&Ver ayuda</target> <source>&About</source> <target>&Acerca de</target> @@ -362,13 +362,13 @@ <target>2. Introduzca una lÃnea de comandos.</target> <source>3. Press 'Start'.</source> -<target>3. Presione ’Inicio’.</target> +<target>3. Presione 'Inicio'.</target> <source>To get started just import a .ffs_batch file.</source> <target>Para comenzar, importe un archivo .ffs_batch.</target> -<source>Folders to watch</source> -<target>Carpetas para ver</target> +<source>Folders to watch:</source> +<target>Carpetas para examinar:</target> <source>Add folder</source> <target>Añadir carpeta</target> @@ -382,12 +382,15 @@ <source>Select a folder</source> <target>Seleccione una carpeta</target> -<source>Idle time [seconds]</source> -<target>Tiempo de espera [segundos]</target> +<source>Idle time (in seconds):</source> +<target>Tiempo de inactividad (en segundos):</target> <source>Idle time between last detected change and execution of command</source> <target>Tiempo ocioso entre el último cambio detectado y la ejecución del comando</target> +<source>Command line:</source> +<target>LÃnea de comandos:</target> + <source> The command is triggered if: - files or subfolders change @@ -399,33 +402,30 @@ El comando es disparado si: - aparecen nuevas carpetas (en una memoria USB, por ejemplo) </target> -<source>Start</source> -<target>Iniciar</target> - -<source>&Retry</source> -<target>&Reintentar</target> - -<source>Cancel</source> -<target>Cancelar</target> +<source>&Start</source> +<target>&Iniciar</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Sincronización Automática</target> +<source>About</source> +<target>Acerca de</target> <source>Build: %x</source> <target>Completado: %x</target> -<source>About</source> -<target>Acerca de</target> - <source>All files</source> <target>Todos los archivos</target> +<source>Automated Synchronization</source> +<target>Sincronización Automática</target> + <source>Directory monitoring active</source> <target>Supervisión de directorios activada</target> <source>Waiting until all directories are available...</source> <target>Esperando que todos los directorios estén disponibles…</target> +<source>Error</source> +<target>Error</target> + <source>&Restore</source> <target>&Restaurar</target> @@ -435,8 +435,11 @@ El comando es disparado si: <source>&Exit</source> <target>&Salir</target> -<source>Invalid command line:</source> -<target>LÃnea de comandos errónea:</target> +<source>Incorrect command line:</source> +<target>LÃnea de comandos incorrecta:</target> + +<source>&Retry</source> +<target>&Reintentar</target> <source>File content</source> <target>Contenido del archivo</target> @@ -498,8 +501,8 @@ El comando es disparado si: <source>Target folder input field must not be empty.</source> <target>El campo de entrada de la carpeta de destino no debe estar vacÃo.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>El campo de entrada de la carpeta para el control de versiones no debe estar vacÃo.</target> +<source>Please enter a target folder for versioning.</source> +<target>Indique una carpeta de destino para la versión.</target> <source>Source folder %x not found.</source> <target>El archivo de origen %x no ha sido encontrado.</target> @@ -537,8 +540,8 @@ El comando es disparado si: <source>job name</source> <target>nombre de tarea</target> -<source>Synchronization aborted</source> -<target>Sincronización anulada</target> +<source>Synchronization stopped</source> +<target>Sincronización detenida</target> <source>Synchronization completed with errors</source> <target>Sincronización completada con errores</target> @@ -555,14 +558,38 @@ El comando es disparado si: <source>Saving log file %x...</source> <target>Guardando registro %x…</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Presione "Cambiar" para resolver los problemas en el diálogo principal de FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Puede cambiar a la ventana principal de FreeFileSync para resolver este problema.</target> + +<source>&Don't show this warning again</source> +<target>&No volver a mostrar este aviso</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Cambiando a la ventana principal de FreeFileSync</target> +<source>&Ignore</source> +<target>&Ignorar</target> -<source>Retrying operation after error:</source> -<target>Reintento de operación después de error:</target> +<source>&Switch</source> +<target>&Cambiar</target> + +<source>Switching to FreeFileSync's main window</source> +<target>Cambiar a la ventana principal de FreeFileSync</target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>Reintento automático en 1 segundo…</pluralform> +<pluralform>Reintento automático en %x segundos…</pluralform> +</target> + +<source>&Ignore subsequent errors</source> +<target>&Ignorar errores posteriores</target> + +<source>Serious Error</source> +<target>Error grave</target> + +<source>Check for Program Updates</source> +<target>Buscar actualizaciones del programa</target> <source>A new version of FreeFileSync is available:</source> <target>Una nueva versión de FreeFileSync está disponible:</target> @@ -570,18 +597,12 @@ El comando es disparado si: <source>Download now?</source> <target>¿Descargar ahora?</target> -<source>New version found</source> -<target>Se encontró una nueva versión</target> - <source>&Download</source> <target>&Descargar</target> <source>FreeFileSync is up to date.</source> <target>FreeFileSync está actualizado.</target> -<source>Information</source> -<target>Información</target> - <source>Unable to connect to sourceforge.net.</source> <target>No se puede conectar con sourceforge.net.</target> @@ -639,23 +660,23 @@ El comando es disparado si: <source>Hibernate</source> <target>Hibernar</target> -<source>Selected variant:</source> -<target>Seleccionar variante:</target> +<source>Alternate comparison settings</source> +<target>Opciones avanzadas de comparación</target> -<source>Select alternate comparison settings</source> -<target>Seleccionar opciones alternativas de comparación</target> +<source>Alternate synchronization settings</source> +<target>Opciones avanzadas de sincronización</target> -<source>Select alternate synchronization settings</source> -<target>Seleccione opciones alternativas de sincronización</target> +<source>Local filter</source> +<target>Filtro local</target> -<source>Filter is active</source> -<target>Filtro activo</target> +<source>Active</source> +<target>Activa</target> -<source>No filter selected</source> -<target>Ningún filtro seleccionado</target> +<source>None</source> +<target>Ninguna</target> <source>Remove alternate settings</source> -<target>Eliminar opciones alternativas</target> +<target>Eliminar opciones avanzadas</target> <source>Clear filter settings</source> <target>Limpiar opciones del filtrado</target> @@ -666,6 +687,15 @@ El comando es disparado si: <source>Paste</source> <target>Pegar</target> +<source>Alternate Comparison Settings</source> +<target>Opciones avanzadas de comparación</target> + +<source>Alternate Synchronization Settings</source> +<target>Opciones avanzadas de sincronización</target> + +<source>Local Filter</source> +<target>Filtro local</target> + <source>&New</source> <target>&Nuevo</target> @@ -673,7 +703,7 @@ El comando es disparado si: <target>&Guardar</target> <source>Save as &batch job...</source> -<target>Guardar como tarea &lote…</target> +<target>Guardar como tarea por &lotes…</target> <source>1. &Compare</source> <target>1. &Comparar</target> @@ -681,15 +711,18 @@ El comando es disparado si: <source>2. &Synchronize</source> <target>2. &Sincronizar</target> +<source>&Global settings</source> +<target>&Opciones globales</target> + <source>&Language</source> <target>&Idioma</target> +<source>&Find...</source> +<target>&Buscar…</target> + <source>&Export file list...</source> <target>&Exportar lista de archivos…</target> -<source>&Global settings</source> -<target>&Opciones globales</target> - <source>&Tools</source> <target>Herramien&tas</target> @@ -699,17 +732,14 @@ El comando es disparado si: <source>Check &automatically once a week</source> <target>Comprobar &automáticamente una vez por semana</target> -<source>Check for new &version</source> -<target>Comprobar si hay una nueva &versión</target> +<source>&Check for new version</source> +<target>&Comprobar si hay una nueva versión</target> <source>Compare</source> <target>Comparar</target> -<source>Comparison settings</source> -<target>Opciones de comparación</target> - -<source>Synchronization settings</source> -<target>Opciones de sincronización</target> +<source>Cancel</source> +<target>Cancelar</target> <source>Synchronize</source> <target>Sincronizar</target> @@ -723,8 +753,17 @@ El comando es disparado si: <source>Swap sides</source> <target>Intercambiar lados</target> +<source>Close search bar</source> +<target>Cerrar la barra de búsqueda</target> + +<source>Find:</source> +<target>Find:</target> + +<source>Match case</source> +<target>Distinción entre mayúsculas y minúsculas</target> + <source>Save as batch job</source> -<target>Salvar como tarea lote</target> +<target>Salvar como tarea por lotes</target> <source>Hide excluded items</source> <target>Ocultar elementos excluidos</target> @@ -744,74 +783,20 @@ El comando es disparado si: <source>Total bytes to copy</source> <target>Total de bytes a copiar</target> -<source>Items found:</source> -<target>Elementos encontrados:</target> - -<source>Speed:</source> -<target>Velocidad:</target> - -<source>Time remaining:</source> -<target>Tiempo restante:</target> - -<source>Time elapsed:</source> -<target>Tiempo transcurrido:</target> - -<source>Synchronizing...</source> -<target>Sincronizando…</target> - -<source>Minimize to notification area</source> -<target>Minimizar en el área de notificación</target> - -<source>On completion</source> -<target>Al completar</target> - -<source>Close</source> -<target>Cerrar</target> - -<source>&Pause</source> -<target>&Pausa</target> - -<source>Variant</source> -<target>Tipo</target> - -<source>Statistics</source> -<target>EstadÃsticas</target> - -<source>&Don't show this dialog again</source> -<target>&No volver a mostrar este diálogo</target> - -<source>Select a variant</source> -<target>Seleccione una variante</target> +<source>Select a variant:</source> +<target>Seleccione una variante:</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Los archivos serán considerados iguales si - - última hora y fecha de escritura - - tamaño del archivo -son iguales -</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Comparar archivos iguales por la hora de modificación y el tamaño.</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Los archivos serán considerados iguales si - - el contenido del archivo -es el mismo -</target> +<source>Identify equal files by comparing the file content.</source> +<target>Comparar archivos iguales por el contenido.</target> -<source>Symbolic Link handling</source> -<target>Gestión de vÃnculos simbólicos</target> +<source>Symbolic links:</source> +<target>VÃnculos simbólicos:</target> -<source>Help</source> -<target>Ayuda</target> +<source>More information</source> +<target>Más información</target> <source>OK</source> <target>OK</target> @@ -819,11 +804,11 @@ es el mismo <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identificar y propagar cambios en ambos lados. Eliminaciones, movimientos y conflictos serán detectados automáticamente usando una base de datos.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Copia de seguridad en espejo de la carpeta izquierda. La carpeta derecha es modificada exactamente como la carpeta izquierda después de la sincronización.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Crear una copia de respaldo reflejo de la carpeta izquierda que corresponda exactamente a la carpeta derecha después de la sincronización.</target> -<source>Copy new or updated files to right folder.</source> -<target>Copiar archivos nuevos o actualizados a la carpeta de la derecha.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Copiar archivos nuevos y actualizados a la carpeta de la derecha.</target> <source>Configure your own synchronization rules.</source> <target>Configuración de sus propias reglas de sincronización.</target> @@ -834,23 +819,8 @@ es el mismo <source>Requires database files. Not supported by all file systems.</source> <target>Archivos de base de datos requeridos. No son compatibles en todos los sistemas de archivos.</target> -<source>Error handling</source> -<target>Gestión de errores</target> - -<source>Ignore</source> -<target>Ignorar</target> - -<source>Hide all error and warning messages</source> -<target>Ocultar todos los mensajes de error y aviso</target> - -<source>Pop-up</source> -<target>Automático</target> - -<source>Show pop-up on errors or warnings</source> -<target>Mostrar ventana emergente de errores o avisos</target> - -<source>Deletion handling</source> -<target>Gestión de borrado</target> +<source>Delete files:</source> +<target>Eliminar archivos:</target> <source>Permanent</source> <target>Permanente</target> @@ -871,58 +841,91 @@ es el mismo <target>Mover archivos a una carpeta del usuario</target> <source>Naming convention:</source> -<target>Convención de nomenclatura:</target> +<target>Convención de nombrado:</target> -<source>Batch job</source> -<target>Tarea lote</target> +<source>Show examples</source> +<target>Mostrar ejemplos</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Crear archivo por lotes para sincronización desatendida. Para iniciar, haga doble clic en este archivo o prográmelo en el planificador de tareas : %x</target> +<source>Handle errors:</source> +<target>Tratar errores:</target> -<source>Exit</source> -<target>Salir</target> +<source>Ignore</source> +<target>Ignorar</target> -<source>Abort synchronization on first error</source> -<target>Anular la sincronización al primer error</target> +<source>Hide all error and warning messages</source> +<target>Ocultar todos los mensajes de error y aviso</target> -<source>Show progress dialog</source> -<target>Mostrar diálogo de progreso</target> +<source>Pop-up</source> +<target>Automático</target> -<source>Save log</source> -<target>Guardar registro</target> +<source>Show pop-up on errors or warnings</source> +<target>Mostrar ventana emergente de errores o avisos</target> -<source>Select folder to save log files</source> -<target>Seleccionar una carpeta para salvar archivos de registro</target> +<source>On completion:</source> +<target>Al completar:</target> -<source>Limit</source> -<target>LÃmite</target> +<source>Start synchronization now?</source> +<target>¿Iniciar la sincronización ahora?</target> -<source>Limit maximum number of log files</source> -<target>Limitar el número máximo de archivos de registro</target> +<source>Variant:</source> +<target>Variante:</target> -<source>Source code written in C++ using:</source> -<target>Código fuente original en C++ con apoyo de:</target> +<source>Statistics</source> +<target>EstadÃsticas</target> -<source>If you like FreeFileSync</source> -<target>¿Te gusta FreeFileSync? :</target> +<source>&Don't show this dialog again</source> +<target>&No volver a mostrar este diálogo</target> -<source>Donate with PayPal</source> -<target>Haz una donación por PayPal</target> +<source>Items found:</source> +<target>Elementos encontrados:</target> -<source>Many thanks for localization:</source> -<target>Agradecimientos por las traducciones a:</target> +<source>Speed:</source> +<target>Velocidad:</target> -<source>Feedback and suggestions are welcome</source> -<target>Comentarios y sugerencias bienvenidos :</target> +<source>Time remaining:</source> +<target>Tiempo restante:</target> -<source>Homepage</source> -<target>Página de inicio</target> +<source>Time elapsed:</source> +<target>Tiempo transcurrido:</target> -<source>Email</source> -<target>Correo electrónico</target> +<source>Synchronizing...</source> +<target>Sincronizando…</target> -<source>Published under the GNU General Public License</source> -<target>Publicado con derechos GNU General Public License :</target> +<source>Minimize to notification area</source> +<target>Minimizar en el área de notificación</target> + +<source>Close</source> +<target>Cerrar</target> + +<source>&Pause</source> +<target>&Pausa</target> + +<source>Stop</source> +<target>Detener</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Crear tarea por lotes para sincronización desatendida. Para iniciar, haga doble clic en este archivo o prográmelo en el planificador de tareas : %x</target> + +<source>Stop synchronization at first error</source> +<target>Detener la sincronización con el primer error</target> + +<source>Show progress dialog</source> +<target>Mostrar diálogo de progreso</target> + +<source>Save log:</source> +<target>Guardar registro:</target> + +<source>Limit:</source> +<target>Limite:</target> + +<source>Limit maximum number of log files</source> +<target>Limitar el número máximo de archivos de registro</target> + +<source>How can I schedule a batch job?</source> +<target>Cómo puedo programar una tarea por lotes?</target> + +<source>&Recycle bin</source> +<target>Papelera de &reciclaje</target> <source>Delete on both sides</source> <target>Borrar en ambos lados</target> @@ -930,109 +933,139 @@ es el mismo <source>Delete on both sides even if the file is selected on one side only</source> <target>Borrar en ambos lados incluso si el archivo está seleccionado en un solo lado</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Sólo se sincronizarán los archivos que cumplan todos los filtros. -Nota: las rutas de archivo deben ser relativas a los directorios base. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Seleccione reglas para excluir archivos durante la sincronización. Indique rutas relativas a la carpeta emparejada correspondiente.</target> -<source>Include</source> -<target>Incluir</target> +<source>Include:</source> +<target>Incluir:</target> -<source>Exclude</source> -<target>Excluir</target> +<source>Exclude:</source> +<target>Excluir:</target> -<source>Time span</source> -<target>Espacio de tiempo</target> +<source>Time span:</source> +<target>Espacio de tiempo:</target> -<source>File size</source> -<target>Tamaño de archivo</target> +<source>File size:</source> +<target>Tamaño de archivo:</target> -<source>Minimum</source> -<target>MÃnimo</target> +<source>Minimum:</source> +<target>MÃnimo:</target> -<source>Maximum</source> -<target>Máximo</target> +<source>Maximum:</source> +<target>Máximo:</target> <source>&Clear</source> <target>&Borrar</target> -<source>Global settings</source> -<target>Opciones globales</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Las opciones siguientes se utilizan para todas las tareas de sincronización.</target> <source>Fail-safe file copy</source> <target>Copia de archivo a prueba de fallos</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Escribir en archivo temporal (*.ffs_tmp) primero y después renombrarlo. Esto garantiza un estado consistente incluso en caso de error fatal.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Copiar a archivo temporal (*.ffs_tmp) antes de sobrescribir en destino. +Se garantiza un estado coherente incluso en caso de error grave. +</target> + +<source>(recommended)</source> +<target>(recomendado)</target> <source>Copy locked files</source> <target>Copiar archivos bloqueados</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Copiar archivos compartidos o bloqueados usando el servicio de Instantánea de volumen (requiere derechos de administrador)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Copiar archivos compartidos o bloqueados usando el servicio de Instantánea de volumen.</target> + +<source>(requires administrator rights)</source> +<target>(requiere derechos de administrador)</target> <source>Copy file access permissions</source> <target>Copiar permisos de acceso al archivo</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Transferir permisos de archivo y carpeta (requiere derechos de administrador)</target> +<source>Transfer file and folder permissions.</source> +<target>Transferir permisos de archivos y carpetas.</target> + +<source>Automatic retry on error:</source> +<target>Retardo automático en caso de error :</target> + +<source>Retry count:</source> +<target>Cuenta de reintentos:</target> -<source>Restore hidden dialogs</source> -<target>Restaurar diálogos ocultos</target> +<source>Delay (in seconds):</source> +<target>Retardo (en segundos):</target> -<source>External applications</source> -<target>Aplicaciones externas</target> +<source>Customize context menu:</source> +<target>Personalizar menú contextual :</target> <source>Description</source> <target>Descripción</target> +<source>Restore hidden windows</source> +<target>Restaurar ventanas ocultas</target> + <source>&Default</source> <target>&Configuración predeterminada</target> -<source>Find what:</source> -<target>Buscar:</target> +<source>Source code written in C++ using:</source> +<target>Código fuente original en C++ con apoyo de:</target> -<source>Match case</source> -<target>Distinción entre mayúsculas y minúsculas</target> +<source>If you like FreeFileSync</source> +<target>¿Te gusta FreeFileSync? :</target> -<source>&Find next</source> -<target>&Buscar siguiente</target> +<source>Donate with PayPal</source> +<target>Haz una donación por PayPal</target> -<source>Start synchronization</source> -<target>Iniciar sincronización</target> +<source>Feedback and suggestions are welcome</source> +<target>Comentarios y sugerencias bienvenidos :</target> -<source>Delete</source> -<target>Eliminar</target> +<source>Homepage</source> +<target>Página de inicio</target> -<source>Configure filter</source> -<target>Configurar filtro</target> +<source>Email</source> +<target>Correo electrónico</target> -<source>Find</source> -<target>Buscar</target> +<source>Published under the GNU General Public License</source> +<target>Publicado con derechos GNU General Public License :</target> + +<source>Many thanks for localization:</source> +<target>Agradecimientos por las traducciones a:</target> + +<source>Save as Batch Job</source> +<target>Guardar como tarea por lotes</target> + +<source>Delete Items</source> +<target>Eliminar elementos</target> + +<source>Global Settings</source> +<target>Opciones globales</target> -<source>Select time span</source> +<source>Select Time Span</source> <target>Seleccionar duración</target> -<source>Folder pairs</source> +<source>Folder Pairs</source> <target>Pares de carpetas</target> +<source>Find</source> +<target>Buscar</target> + <source>Overview</source> <target>Visión global</target> <source>Configuration</source> <target>Configuración</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Barra principal</target> -<source>Filter files</source> +<source>Filter Files</source> <target>Filtrar archivos</target> -<source>Select view</source> +<source>Select View</source> <target>Seleccione vista</target> <source>Open...</source> @@ -1044,18 +1077,27 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <source>Compare both sides</source> <target>Comparar ambos lados</target> +<source>Comparison settings</source> +<target>Opciones de comparación</target> + +<source>Synchronization settings</source> +<target>Opciones de sincronización</target> + +<source>Start synchronization</source> +<target>Iniciar sincronización</target> + +<source>Confirm</source> +<target>Confirmar</target> + <source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> <pluralform>Do you really want to execute the command %y for %x items?</pluralform> </source> <target> -<pluralform>¿Realmente desea ejecutar la orden %y para un elemento?</pluralform> -<pluralform>¿Realmente desea ejecutar la orden %y para %x elementos?</pluralform> +<pluralform>¿Realmente desea ejecutar el comando %y para un elemento?</pluralform> +<pluralform>¿Realmente desea ejecutar el comando %y para %x elementos?</pluralform> </target> -<source>Confirm</source> -<target>Confirmar</target> - <source>&Execute</source> <target>&Ejecutar</target> @@ -1089,12 +1131,6 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <source>Set direction:</source> <target>Indicar dirección:</target> -<source>Exclude temporarily</source> -<target>Excluir temporalmente</target> - -<source>Include temporarily</source> -<target>Incluir temporalmente</target> - <source>multiple selection</source> <target>selección múltiple</target> @@ -1104,6 +1140,15 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <source>Exclude via filter:</source> <target>Excluir a través del filtro:</target> +<source>Exclude temporarily</source> +<target>Excluir temporalmente</target> + +<source>Include temporarily</source> +<target>Incluir temporalmente</target> + +<source>Delete</source> +<target>Eliminar</target> + <source>Include all</source> <target>Incluir todo</target> @@ -1141,16 +1186,19 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <target>Configuración guardada</target> <source>FreeFileSync batch</source> -<target>Lote de FreeFileSync</target> +<target>Tarea por lotes de FreeFileSync</target> <source>Do you want to save changes to %x?</source> <target>¿Quiere guardar los cambios de %x?</target> +<source>Never save &changes</source> +<target>Nunca guardar &cambios</target> + <source>Do&n't save</source> <target>&No guardar</target> -<source>Never save &changes</source> -<target>Nunca guardar &cambios</target> +<source>Filter</source> +<target>Filtro</target> <source>Show files that exist on left side only</source> <target>Mostrar sólo archivos existentes en la izquierda</target> @@ -1197,12 +1245,18 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <source>Set as default</source> <target>Predeterminado</target> -<source>Operation aborted</source> -<target>Operación anulada</target> - <source>All folders are in sync</source> <target>Todas las carpetas están sincronizadas</target> +<source>Synchronization Settings</source> +<target>Opciones de sincronización</target> + +<source>Comparison Settings</source> +<target>Opciones de comparación</target> + +<source>Cannot find %x</source> +<target>No se puede encontrar %x</target> + <source>Comma-separated values</source> <target>Valores separados por comas</target> @@ -1212,30 +1266,6 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <source>Searching for program updates...</source> <target>Buscando actualizaciones del programa…</target> -<source>&Ignore subsequent errors</source> -<target>&Ignorar errores posteriores</target> - -<source>&Ignore</source> -<target>&Ignorar</target> - -<source>Fatal Error</source> -<target>Error fatal</target> - -<source>&Don't show this warning again</source> -<target>&No volver a mostrar este aviso</target> - -<source>&Switch</source> -<target>&Cambiar</target> - -<source>Question</source> -<target>Pregunta</target> - -<source>&Yes</source> -<target>&Si</target> - -<source>&No</source> -<target>&No</target> - <source>Scanning...</source> <target>Escaneando…</target> @@ -1245,14 +1275,17 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <source>Info</source> <target>Info</target> +<source>Warning</source> +<target>Atención</target> + <source>Paused</source> <target>Pausado</target> <source>Initializing...</source> <target>Inicializando…</target> -<source>Aborted</source> -<target>Anulado</target> +<source>Stopped</source> +<target>Detenido</target> <source>Completed</source> <target>Terminado</target> @@ -1263,12 +1296,6 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <source>Log</source> <target>Registro</target> -<source>Cannot find %x</source> -<target>No se puede encontrar %x</target> - -<source>Inactive</source> -<target>Inactivo</target> - <source>Today</source> <target>Hoy</target> @@ -1293,9 +1320,6 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filtro</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1329,9 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <pluralform>¿Realmente desea mover estos %x elementos a la papelera de reciclaje?</pluralform> </target> +<source>Move</source> +<target>Mover</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1341,9 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <pluralform>¿Realmente desea eliminar estos %x elementos?</pluralform> </target> +<source>Exclude</source> +<target>Excluir</target> + <source>Direct</source> <target>Enviar</target> @@ -1338,8 +1368,8 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <source>- Other side's counterpart to %item_folder%</source> <target>- El otro lado de %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>¿Hacer visibles de nuevo los mensajes de alerta y diálogo?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Restaurar todas las ventanas y mensajes de advertencia ocultados ?</target> <source>Leave as unresolved conflict</source> <target>Dejar como conflicto sin resolver</target> @@ -1464,14 +1494,14 @@ Nota: las rutas de archivo deben ser relativas a los directorios base. <pluralform>%x dÃas</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Fallo al registrar la recepción de mensajes sistema.</target> +<source>Unable to register to receive system messages.</source> +<target>No es posible registrar la recepción de mensajes sistema.</target> <source>Cannot set privilege %x.</source> <target>No se puede asignar el privilegio %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Fallo al intentar suspender el sistema.</target> +<source>Unable to suspend system sleep mode.</source> +<target>No es posible suspender el sistema.</target> <source>Cannot change process I/O priorities.</source> <target>No se pudieron cambiar las prioridades de E/S del proceso.</target> diff --git a/BUILD/Languages/swedish.lng b/BUILD/Languages/swedish.lng index f6e3f52b..38c590ff 100644 --- a/BUILD/Languages/swedish.lng +++ b/BUILD/Languages/swedish.lng @@ -2,11 +2,28 @@ <language>Svenska</language> <translator>Ã…ke Engelbrektson</translator> <locale>sv_SE</locale> - <flag_image>flag_sweden.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_sweden.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>Retrying operation</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>Bägge sidor har ändrats sedan senaste synkroniseringen.</target> @@ -292,8 +309,8 @@ <source>/sec</source> <target>/s</target> -<source>%x items</source> -<target>%x objekt</target> +<source>%x items/sec</source> +<target>%x objekt/sek.</target> <source>Configuration file %x loaded partially only.</source> <target>Konfigurationsfilen %x lästes bara delvis in.</target> @@ -322,11 +339,11 @@ <source>Volume name %x is not part of file path %y.</source> <target>Volymnamnet %x är inte en del av sökvägen %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Avbryter: Väntar pÃ¥ att aktuell process skall slutföras...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Stopp begärt: Väntar pÃ¥ att aktuell Ã¥tgärd skall slutföras...</target> -<source>Failure to create timestamp for versioning:</source> -<target>Kunde inte skapa tidsstämpel för versionshantering</target> +<source>Unable to create timestamp for versioning:</source> +<target>Kunde inte skapa tidsstämpel för versionshantering:</target> <source>Cannot read the following XML elements:</source> <target>Kan inte läsa följande XML-element:</target> @@ -343,8 +360,8 @@ <source>&Program</source> <target>&Program</target> -<source>&Content</source> -<target>&InnehÃ¥ll</target> +<source>&View help</source> +<target>&Visa hjälpen</target> <source>&About</source> <target>&Om</target> @@ -367,8 +384,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Importera en .ffs_batch-fil för att komma igÃ¥ng</target> -<source>Folders to watch</source> -<target>Mappar att bevaka</target> +<source>Folders to watch:</source> +<target>Mappar att övervaka:</target> <source>Add folder</source> <target>Lägg till mapp</target> @@ -380,14 +397,17 @@ <target>Bläddra</target> <source>Select a folder</source> -<target>Markera en mapp</target> +<target>Välj en mapp</target> -<source>Idle time [seconds]</source> -<target>Inaktivitet [sekunder]</target> +<source>Idle time (in seconds):</source> +<target>Vilotid (i sekunder)</target> <source>Idle time between last detected change and execution of command</source> <target>Väntetid mellan senast upptäckta förändring och kommandoexekvering</target> +<source>Command line:</source> +<target>Kommandorad:</target> + <source> The command is triggered if: - files or subfolders change @@ -399,8 +419,8 @@ Kommandot triggas om: - nya mappar upptäcks (ex. USB-minne ansluts) </target> -<source>Start</source> -<target>Start</target> +<source>&Start</source> +<target>&Start</target> <source>&Retry</source> <target>&Försök igen</target> @@ -408,9 +428,6 @@ Kommandot triggas om: <source>Cancel</source> <target>Avbryt</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Automatiserad synkronisering</target> - <source>Build: %x</source> <target>Bygge: %x</target> @@ -420,6 +437,9 @@ Kommandot triggas om: <source>All files</source> <target>Alla filer</target> +<source>Automated Synchronization</source> +<target>Automatiserad synkronisering</target> + <source>Directory monitoring active</source> <target>Mappövervakning aktiv</target> @@ -435,8 +455,8 @@ Kommandot triggas om: <source>&Exit</source> <target>&Avsluta</target> -<source>Invalid command line:</source> -<target>Ogiltig kommandorad:</target> +<source>Incorrect command line:</source> +<target>Felaktig kommandorad:</target> <source>File content</source> <target>FilinnehÃ¥ll</target> @@ -498,8 +518,8 @@ Kommandot triggas om: <source>Target folder input field must not be empty.</source> <target>Indatafältet för mÃ¥lmapp fÃ¥r inte vara tomt.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Indatafältet för versionshantering fÃ¥r inte vara tomt.</target> +<source>Please enter a target folder for versioning.</source> +<target>Ange en mÃ¥lmapp för versionshantering.</target> <source>Source folder %x not found.</source> <target>Källmappen %x kan inte hittas.</target> @@ -537,8 +557,8 @@ Kommandot triggas om: <source>job name</source> <target>Ã¥tgärdsnamn</target> -<source>Synchronization aborted</source> -<target>Synkronisering avbruten</target> +<source>Synchronization stopped</source> +<target>Synkroniseringen stoppad</target> <source>Synchronization completed with errors</source> <target>Synkronisering slutförd med fel</target> @@ -555,14 +575,11 @@ Kommandot triggas om: <source>Saving log file %x...</source> <target>Sparar loggfil %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>Tryck "Växla" för att lösa problem i FreeFileSyncs huvudfönster</target> - -<source>Switching to FreeFileSync main dialog</source> -<target>Växlar till FreeFileSyncs huvuddialog</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Du kan växla till FreeFileSyncs programfönster för att lösa problemet.</target> -<source>Retrying operation after error:</source> -<target>Försöker utföra Ã¥tgärden igen, efter fel:</target> +<source>Switching to FreeFileSync's main window</source> +<target>Växla till FreeFileSyncs programfönster</target> <source>A new version of FreeFileSync is available:</source> <target>Det finns en ny version av FreeFileSync</target> @@ -570,8 +587,8 @@ Kommandot triggas om: <source>Download now?</source> <target>Ladda ner nu?</target> -<source>New version found</source> -<target>Ny version hittad</target> +<source>Check for Program Updates</source> +<target>Sök efter programuppdateringar</target> <source>&Download</source> <target>&Ladda ner</target> @@ -639,20 +656,20 @@ Kommandot triggas om: <source>Hibernate</source> <target>Viloläge</target> -<source>Selected variant:</source> -<target>Vald variant:</target> +<source>Alternate comparison settings</source> +<target>Alternativa jämförelseinställningar</target> -<source>Select alternate comparison settings</source> -<target>Välj alternativa jämförelseinställningar</target> +<source>Alternate synchronization settings</source> +<target>Alternativa synkroniseringsinställningar</target> -<source>Select alternate synchronization settings</source> -<target>Välj alternativa synkroniseringsinställningar</target> +<source>Local filter</source> +<target>Lokalt filter</target> -<source>Filter is active</source> -<target>Filter är aktiverat</target> +<source>Active</source> +<target>Aktiv</target> -<source>No filter selected</source> -<target>Inga filter aktiverade</target> +<source>None</source> +<target>Inget</target> <source>Remove alternate settings</source> <target>Ta bort alternativa inställningar</target> @@ -666,6 +683,15 @@ Kommandot triggas om: <source>Paste</source> <target>Klistra in</target> +<source>Alternate Comparison Settings</source> +<target>Alternativa jämförelseinställningar</target> + +<source>Alternate Synchronization Settings</source> +<target>Alternativa synkroniseringsinställningar</target> + +<source>Local Filter</source> +<target>Lokalt filter</target> + <source>&New</source> <target>&Nytt</target> @@ -681,15 +707,18 @@ Kommandot triggas om: <source>2. &Synchronize</source> <target>2. &Synkronisera</target> +<source>&Global settings</source> +<target>&Allmäna inställningar</target> + <source>&Language</source> <target>&SprÃ¥k</target> +<source>&Find...</source> +<target>&Sök...</target> + <source>&Export file list...</source> <target>&Exportera fillista...</target> -<source>&Global settings</source> -<target>&Allmäna inställningar</target> - <source>&Tools</source> <target>&Verktyg</target> @@ -699,18 +728,12 @@ Kommandot triggas om: <source>Check &automatically once a week</source> <target>Sök &automatiskt en gÃ¥ng per vecka</target> -<source>Check for new &version</source> -<target>Sök efter ny &version</target> +<source>&Check for new version</source> +<target>&Sök efter uppdateringar</target> <source>Compare</source> <target>Jämför</target> -<source>Comparison settings</source> -<target>Jämförelseinställningar</target> - -<source>Synchronization settings</source> -<target>Synkroniseringsinställningar</target> - <source>Synchronize</source> <target>Synkronisera</target> @@ -723,6 +746,15 @@ Kommandot triggas om: <source>Swap sides</source> <target>Byt sida</target> +<source>Close search bar</source> +<target>Stäng sökfältet</target> + +<source>Find:</source> +<target>Sök:</target> + +<source>Match case</source> +<target>Matcha gemener/VERSALER</target> + <source>Save as batch job</source> <target>Spara som batch-fil</target> @@ -744,74 +776,20 @@ Kommandot triggas om: <source>Total bytes to copy</source> <target>Byte att kopiera</target> -<source>Items found:</source> -<target>Funna poster:</target> - -<source>Speed:</source> -<target>Hastighet:</target> - -<source>Time remaining:</source> -<target>Ã…terstÃ¥ende tid:</target> - -<source>Time elapsed:</source> -<target>Förfluten tid:</target> - -<source>Synchronizing...</source> -<target>Synkroniserar...</target> - -<source>Minimize to notification area</source> -<target>Minimera till meddelandefältet</target> - -<source>On completion</source> -<target>Vid slutfört</target> - -<source>Close</source> -<target>Stäng</target> - -<source>&Pause</source> -<target>&Paus</target> - -<source>Variant</source> -<target>Variant</target> - -<source>Statistics</source> -<target>Statistik</target> - -<source>&Don't show this dialog again</source> -<target>&Visa inte den här dialogen igen</target> - -<source>Select a variant</source> -<target>Välj en variant</target> +<source>Select a variant:</source> +<target>Välj ett alternativ:</target> -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Filer betraktas som likvärdiga om - - tidsstämpel för 'Senast ändrad' - - filstorlek -är samma. -</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Identifiera likadana filer genom att jämföra tidsstämpling och filstorlek.</target> -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Filerna betecknas som lika om, - - filinnehÃ¥llet -är lika -</target> +<source>Identify equal files by comparing the file content.</source> +<target>Identifiera likadana filer genom att jämföra filinnehÃ¥ll.</target> -<source>Symbolic Link handling</source> -<target>Hantering av Symboliska länkar</target> +<source>Symbolic links:</source> +<target>Symboliska länkar:</target> -<source>Help</source> -<target>Hjälp</target> +<source>More information</source> +<target>Mer information</target> <source>OK</source> <target>OK</target> @@ -819,11 +797,11 @@ Filerna betecknas som lika om, <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Identifierar och sprider förändringar pÃ¥ bÃ¥da sidor. Borttagningar, förflyttningar och konflikter detekteras automatiskt med hjälp av en databas.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Speglar säkerhetskopia av vänster mapp. Höger mapp ändras för att exakt matcha vänster efter synkroniseringen.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Skapar en speglad kopia av vänster mapp, som exakt matchas av höger mapp efter synkronisering.</target> -<source>Copy new or updated files to right folder.</source> -<target>Kopiera nya och uppdaterade filer till höger mapp.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Kopierar nya och uppdaterade filer till höger mapp.</target> <source>Configure your own synchronization rules.</source> <target>Konfigurera dina egna synkroniseringsregler.</target> @@ -834,23 +812,8 @@ Filerna betecknas som lika om, <source>Requires database files. Not supported by all file systems.</source> <target>Kräver databasfiler som inte stöds av alla filsystem</target> -<source>Error handling</source> -<target>Felhantering</target> - -<source>Ignore</source> -<target>Ignorera</target> - -<source>Hide all error and warning messages</source> -<target>Visa inte fel- och varningsmeddelanden</target> - -<source>Pop-up</source> -<target>Popup</target> - -<source>Show pop-up on errors or warnings</source> -<target>Visa popup vid fel och varningar</target> - -<source>Deletion handling</source> -<target>Borttagning</target> +<source>Delete files:</source> +<target>Ta bort filer:</target> <source>Permanent</source> <target>Permanent</target> @@ -873,56 +836,89 @@ Filerna betecknas som lika om, <source>Naming convention:</source> <target>Regler för namngivning</target> -<source>Batch job</source> -<target>Batch-jobb</target> +<source>Show examples</source> +<target>Visa exempel</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Skapa en batch-fil för obevakad synkronisering. Dubbelklicka pÃ¥ filen för att starta den, eller schemalägg i en Ã¥tgärdshanterare: %x</target> +<source>Handle errors:</source> +<target>Felhantering:</target> -<source>Exit</source> -<target>Avsluta</target> +<source>Ignore</source> +<target>Ignorera</target> -<source>Abort synchronization on first error</source> -<target>Avbryt synkronisering vid första felet</target> +<source>Hide all error and warning messages</source> +<target>Visa inte fel- och varningsmeddelanden</target> -<source>Show progress dialog</source> -<target>Visa förloppsindikator</target> +<source>Pop-up</source> +<target>Popup</target> -<source>Save log</source> -<target>Spara logg</target> +<source>Show pop-up on errors or warnings</source> +<target>Visa popup vid fel och varningar</target> -<source>Select folder to save log files</source> -<target>Väl en mapp att spara loggfiler i</target> +<source>On completion:</source> +<target>Vid slutfört:</target> -<source>Limit</source> -<target>Begränsa</target> +<source>Start synchronization now?</source> +<target>Vill du starta synkroniseringen nu?</target> -<source>Limit maximum number of log files</source> -<target>Begränsa antalet loggfiler</target> +<source>Variant:</source> +<target>Alternativ:</target> -<source>Source code written in C++ using:</source> -<target>Källkod skriven i C++ med hjälp av:</target> +<source>Statistics</source> +<target>Statistik</target> -<source>If you like FreeFileSync</source> -<target>Om du gillar FreeFileSync</target> +<source>&Don't show this dialog again</source> +<target>&Visa inte den här dialogen igen</target> -<source>Donate with PayPal</source> -<target>Donera via PayPal</target> +<source>Items found:</source> +<target>Funna poster:</target> -<source>Many thanks for localization:</source> -<target>Tack för översättning:</target> +<source>Speed:</source> +<target>Hastighet:</target> -<source>Feedback and suggestions are welcome</source> -<target>Ã…terkoppling och förslag är välkommna</target> +<source>Time remaining:</source> +<target>Ã…terstÃ¥ende tid:</target> -<source>Homepage</source> -<target>Hemsida</target> +<source>Time elapsed:</source> +<target>Förfluten tid:</target> -<source>Email</source> -<target>E-post</target> +<source>Synchronizing...</source> +<target>Synkroniserar...</target> -<source>Published under the GNU General Public License</source> -<target>Publiserad under GNU General Public License</target> +<source>Minimize to notification area</source> +<target>Minimera till meddelandefältet</target> + +<source>Close</source> +<target>Stäng</target> + +<source>&Pause</source> +<target>&Paus</target> + +<source>Stop</source> +<target>Stoppa</target> + +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Skapa en batch-fil för obevakad synkronisering. Dubbelklicka pÃ¥ filen för att starta den, eller schemalägg i en Ã¥tgärdshanterare: %x</target> + +<source>Stop synchronization at first error</source> +<target>Stoppa synkroniseringen vid första fel som uppstÃ¥r</target> + +<source>Show progress dialog</source> +<target>Visa förloppsindikator</target> + +<source>Save log:</source> +<target>Spara logg:</target> + +<source>Limit:</source> +<target>Gräns:</target> + +<source>Limit maximum number of log files</source> +<target>Begränsa antalet loggfiler</target> + +<source>How can I schedule a batch job?</source> +<target>Hur schemalägger jag en batch-fil?</target> + +<source>&Recycle bin</source> +<target>&Papperskorgen</target> <source>Delete on both sides</source> <target>Ta bort pÃ¥ bÃ¥da sidor</target> @@ -930,109 +926,139 @@ Filerna betecknas som lika om, <source>Delete on both sides even if the file is selected on one side only</source> <target>Ta bort pÃ¥ bÃ¥da sidor, även om filen är markerad pÃ¥ endast en sida</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Filer synkroniseras endast om de klarar alla filterregler. -OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Skapa filtreringsregler för att undanta vissa filer frÃ¥n synkronisering. Sökvägar relateras till motsvarande mapp-par</target> -<source>Include</source> -<target>Inkludera</target> +<source>Include:</source> +<target>Inkludera:</target> -<source>Exclude</source> -<target>Undanta</target> +<source>Exclude:</source> +<target>Undanta:</target> -<source>Time span</source> -<target>Tidsintervall</target> +<source>Time span:</source> +<target>Tidsrymd:</target> -<source>File size</source> -<target>Filstorlek</target> +<source>File size:</source> +<target>Filstorlek:</target> -<source>Minimum</source> -<target>Minimum</target> +<source>Minimum:</source> +<target>Min:</target> -<source>Maximum</source> -<target>Maximum</target> +<source>Maximum:</source> +<target>Max:</target> <source>&Clear</source> <target>&Rensa</target> -<source>Global settings</source> -<target>Allmäna inställningar</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>Följande inställningar används för all synkronisering</target> <source>Fail-safe file copy</source> <target>Felsäker filkopiering</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Kopiera till en temporär fil först (*.ffs_tmp), och byt sedan namn pÃ¥ den. Detta garanterar ett konsekvent tillstÃ¥nd även vid allvarliga fel.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Kopierar till en temporär fil (*.ffs_tmp), före överskrivning av mÃ¥let. +Detta garanterar ett konsekvent tillstÃ¥nd även vid allvarliga fel. +</target> + +<source>(recommended)</source> +<target>(rekommenderas)</target> <source>Copy locked files</source> <target>Kopiera lÃ¥sta filer</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Kopiera delade eller lÃ¥sta filer med tjänsten 'Volume Shadow Copy' (kräver administratörsbehörighet)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Kopierar delade eller lÃ¥sta filer med hjälp av tjänsten 'Volume Shadow Copy'</target> + +<source>(requires administrator rights)</source> +<target>(kräver administratörsbehörighet)</target> <source>Copy file access permissions</source> <target>Kopiera filÃ¥tkomstbehörigheter</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Överför fil- och mappbehörigheter (kräver administratörsbehörighet)</target> +<source>Transfer file and folder permissions.</source> +<target>Överför behörighetsinställningar</target> + +<source>Automatic retry on error:</source> +<target>Automatiska Ã¥terförsök vid fel:</target> -<source>Restore hidden dialogs</source> -<target>Ã…terställ dolda dialoger</target> +<source>Retry count:</source> +<target>Antal försök:</target> -<source>External applications</source> -<target>Externa program</target> +<source>Delay (in seconds):</source> +<target>Fördröjning (i sekunder)</target> + +<source>Customize context menu:</source> +<target>Anpassad kontextmeny:</target> <source>Description</source> <target>Beskrivning</target> +<source>Restore hidden windows</source> +<target>Ã…terställ dolda vyer</target> + <source>&Default</source> <target>&Standard</target> -<source>Find what:</source> -<target>Sök efter:</target> +<source>Source code written in C++ using:</source> +<target>Källkod skriven i C++ med hjälp av:</target> -<source>Match case</source> -<target>Matcha gemener/VERSALER</target> +<source>If you like FreeFileSync</source> +<target>Om du gillar FreeFileSync</target> -<source>&Find next</source> -<target>&Sök nästa</target> +<source>Donate with PayPal</source> +<target>Donera via PayPal</target> -<source>Start synchronization</source> -<target>Starta synkronisering</target> +<source>Feedback and suggestions are welcome</source> +<target>Ã…terkoppling och förslag är välkommna</target> -<source>Delete</source> -<target>Ta bort</target> +<source>Homepage</source> +<target>Hemsida</target> -<source>Configure filter</source> -<target>Filterinställningar</target> +<source>Email</source> +<target>E-post</target> -<source>Find</source> -<target>Sök</target> +<source>Published under the GNU General Public License</source> +<target>Publiserad under GNU General Public License</target> + +<source>Many thanks for localization:</source> +<target>Tack för översättning:</target> + +<source>Save as Batch Job</source> +<target>Spara som batch-fil</target> + +<source>Delete Items</source> +<target>Ta bort objekt</target> -<source>Select time span</source> -<target>Välj tidsintervall</target> +<source>Global Settings</source> +<target>Globala inställningar</target> -<source>Folder pairs</source> +<source>Select Time Span</source> +<target>Välj tidsrymd</target> + +<source>Folder Pairs</source> <target>Mapp-par</target> +<source>Find</source> +<target>Sök</target> + <source>Overview</source> <target>Översikt</target> <source>Configuration</source> <target>Inställningar</target> -<source>Main bar</source> -<target>Huvudfält</target> +<source>Main Bar</source> +<target>Primärt verktygsfält</target> -<source>Filter files</source> -<target>Undantag</target> +<source>Filter Files</source> +<target>Filtrera filer</target> -<source>Select view</source> +<source>Select View</source> <target>Välj vy</target> <source>Open...</source> @@ -1044,14 +1070,14 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>Compare both sides</source> <target>Jämför bÃ¥da sidor</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Vill du verkligen köra kommandot %y för 1 objekt?</pluralform> -<pluralform>Vill du verkligen köra kommandot %y för %x objekt?</pluralform> -</target> +<source>Comparison settings</source> +<target>Jämförelseinställningar</target> + +<source>Synchronization settings</source> +<target>Synkroniseringsinställningar</target> + +<source>Start synchronization</source> +<target>Starta synkronisering</target> <source>Confirm</source> <target>Bekräfta</target> @@ -1089,12 +1115,6 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>Set direction:</source> <target>Ange riktning:</target> -<source>Exclude temporarily</source> -<target>Undanta tillfälligt</target> - -<source>Include temporarily</source> -<target>Inkludera tillfälligt</target> - <source>multiple selection</source> <target>flerval</target> @@ -1104,6 +1124,15 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>Exclude via filter:</source> <target>Lägg till i undantag:</target> +<source>Exclude temporarily</source> +<target>Undanta tillfälligt</target> + +<source>Include temporarily</source> +<target>Inkludera tillfälligt</target> + +<source>Delete</source> +<target>Ta bort</target> + <source>Include all</source> <target>Inkludera alla</target> @@ -1152,6 +1181,9 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>Never save &changes</source> <target>Spara aldrig &ändringar</target> +<source>Filter</source> +<target>Filter</target> + <source>Show files that exist on left side only</source> <target>Visa filer som endast finns till vänster</target> @@ -1197,12 +1229,18 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>Set as default</source> <target>Ange som standard</target> -<source>Operation aborted</source> -<target>Processen avbruten</target> - <source>All folders are in sync</source> <target>Alla mappar är synkroniserade</target> +<source>Synchronization Settings</source> +<target>Synkroniseringsinställningar</target> + +<source>Comparison Settings</source> +<target>Jämförelseinställningar</target> + +<source>Cannot find %x</source> +<target>Kan inte hitta %x</target> + <source>Comma-separated values</source> <target>Kommaseparerade värden</target> @@ -1218,7 +1256,7 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>&Ignore</source> <target>&Ignorera</target> -<source>Fatal Error</source> +<source>Serious Error</source> <target>Allvarligt fel</target> <source>&Don't show this warning again</source> @@ -1227,9 +1265,6 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>&Switch</source> <target>&Växla</target> -<source>Question</source> -<target>FrÃ¥ga</target> - <source>&Yes</source> <target>&Ja</target> @@ -1251,8 +1286,8 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>Initializing...</source> <target>Initierar...</target> -<source>Aborted</source> -<target>Användaren avbröt</target> +<source>Stopped</source> +<target>Stoppad</target> <source>Completed</source> <target>Slutförd</target> @@ -1263,12 +1298,6 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>Log</source> <target>Logg</target> -<source>Cannot find %x</source> -<target>Kan inte hitta %x</target> - -<source>Inactive</source> -<target>Inaktiv</target> - <source>Today</source> <target>Idag</target> @@ -1293,9 +1322,6 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Filter</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1305,6 +1331,9 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <pluralform>Vill du verkligen flytta följande %x objekt till papperskorgen?</pluralform> </target> +<source>Move</source> +<target>Flytta</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1314,6 +1343,9 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <pluralform>Vill du verkligen ta bort följande %x objekt?</pluralform> </target> +<source>Exclude</source> +<target>Undanta</target> + <source>Direct</source> <target>Direkt</target> @@ -1338,8 +1370,8 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <source>- Other side's counterpart to %item_folder%</source> <target>- Andra sidans motsvarighet till %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Vill du göra dolda varningar och dialoger, synliga igen?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Vill du Ã¥terställa alla dolda vyer och varningar</target> <source>Leave as unresolved conflict</source> <target>Ignorera konflikt</target> @@ -1464,14 +1496,14 @@ OBS! Sökvägar mÃ¥ste vara relaterade till ursprungsmappar. <pluralform>%x dagar</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Kunde inte registrera att ta emot systemmeddelanden</target> +<source>Unable to register to receive system messages.</source> +<target>Det gick inte att registrera mottagning av systemmeddelanden</target> <source>Cannot set privilege %x.</source> <target>Kan inte att ange behörigheten %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Kunde inte avbryta systemet vänteläge</target> +<source>Unable to suspend system sleep mode.</source> +<target>Det gÃ¥r inte att avbryta systemets viloläge</target> <source>Cannot change process I/O priorities.</source> <target>Kan inte ändra process I/O-prioritet</target> diff --git a/BUILD/Languages/turkish.lng b/BUILD/Languages/turkish.lng index 870eb214..7ab30b7f 100644 --- a/BUILD/Languages/turkish.lng +++ b/BUILD/Languages/turkish.lng @@ -2,11 +2,271 @@ <language>Türkçe</language> <translator>Kaya Zeren</translator> <locale>tr_TR</locale> - <flag_image>flag_turkey.png</flag_image> - <plural_form_count>2</plural_form_count> + <image>flag_turkey.png</image> + <plural_count>2</plural_count> <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source>Unable to suspend system sleep mode.</source> +<target></target> + +<source>Unable to register to receive system messages.</source> +<target></target> + +<source>Restore all hidden windows and warnings?</source> +<target></target> + +<source>Move</source> +<target></target> + +<source>Stopped</source> +<target></target> + +<source>Serious Error</source> +<target></target> + +<source>Comparison Settings</source> +<target></target> + +<source>Synchronization Settings</source> +<target></target> + +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>Select View</source> +<target></target> + +<source>Filter Files</source> +<target></target> + +<source>Main Bar</source> +<target></target> + +<source>Folder Pairs</source> +<target></target> + +<source>Select Time Span</source> +<target></target> + +<source>Global Settings</source> +<target></target> + +<source>Delete Items</source> +<target></target> + +<source>Save as Batch Job</source> +<target></target> + +<source>Restore hidden windows</source> +<target></target> + +<source>Customize context menu:</source> +<target></target> + +<source>Delay (in seconds):</source> +<target></target> + +<source>Retry count:</source> +<target></target> + +<source>Automatic retry on error:</source> +<target></target> + +<source>Transfer file and folder permissions.</source> +<target></target> + +<source>(requires administrator rights)</source> +<target></target> + +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target></target> + +<source>(recommended)</source> +<target></target> + +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target></target> + +<source>The following settings are used for all synchronization jobs.</source> +<target></target> + +<source>Maximum:</source> +<target></target> + +<source>Minimum:</source> +<target></target> + +<source>File size:</source> +<target></target> + +<source>Time span:</source> +<target></target> + +<source>Exclude:</source> +<target></target> + +<source>Include:</source> +<target></target> + +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target></target> + +<source>&Recycle bin</source> +<target></target> + +<source>How can I schedule a batch job?</source> +<target></target> + +<source>Limit:</source> +<target></target> + +<source>Save log:</source> +<target></target> + +<source>Stop synchronization at first error</source> +<target></target> + +<source>Stop</source> +<target></target> + +<source>Variant:</source> +<target></target> + +<source>Start synchronization now?</source> +<target></target> + +<source>On completion:</source> +<target></target> + +<source>Handle errors:</source> +<target></target> + +<source>Show examples</source> +<target></target> + +<source>Delete files:</source> +<target></target> + +<source>Copy new and updated files to the right folder.</source> +<target></target> + +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target></target> + +<source>More information</source> +<target></target> + +<source>Symbolic links:</source> +<target></target> + +<source>Identify equal files by comparing the file content.</source> +<target></target> + +<source>Identify equal files by comparing modification time and size.</source> +<target></target> + +<source>Select a variant:</source> +<target></target> + +<source>Find:</source> +<target></target> + +<source>Close search bar</source> +<target></target> + +<source>&Check for new version</source> +<target></target> + +<source>&Find...</source> +<target></target> + +<source>Local Filter</source> +<target></target> + +<source>Alternate Synchronization Settings</source> +<target></target> + +<source>Alternate Comparison Settings</source> +<target></target> + +<source>None</source> +<target></target> + +<source>Active</source> +<target></target> + +<source>Local filter</source> +<target></target> + +<source>Alternate synchronization settings</source> +<target></target> + +<source>Alternate comparison settings</source> +<target></target> + +<source>Check for Program Updates</source> +<target></target> + +<source>Retrying operation</source> +<target></target> + +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + +<source>Switching to FreeFileSync's main window</source> +<target></target> + +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target></target> + +<source>Synchronization stopped</source> +<target></target> + +<source>Please enter a target folder for versioning.</source> +<target></target> + +<source>Incorrect command line:</source> +<target></target> + +<source>Automated Synchronization</source> +<target></target> + +<source>&Start</source> +<target></target> + +<source>Command line:</source> +<target></target> + +<source>Idle time (in seconds):</source> +<target></target> + +<source>Folders to watch:</source> +<target></target> + +<source>&View help</source> +<target></target> + +<source>Unable to create timestamp for versioning:</source> +<target></target> + +<source>Stop requested: Waiting for current operation to finish...</source> +<target></target> + +<source>%x items/sec</source> +<target></target> + <source>Both sides have changed since last synchronization.</source> <target>Son eÅŸleÅŸtirmeden bu yana iki tarafın da içeriÄŸi deÄŸiÅŸmiÅŸ.</target> @@ -292,9 +552,6 @@ <source>/sec</source> <target>/saniye</target> -<source>%x items</source> -<target>%x öge</target> - <source>Configuration file %x loaded partially only.</source> <target>%x ayarlar dosyası kısmen yüklendi.</target> @@ -322,12 +579,6 @@ <source>Volume name %x is not part of file path %y.</source> <target>%x birim adı %y dosya yolunun bir parçası deÄŸil.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Vazgeçildi: Yürürlükteki iÅŸlemin bitmesi bekleniyor...</target> - -<source>Failure to create timestamp for versioning:</source> -<target>Eski sürüm için zaman damgası oluÅŸturulamadı:</target> - <source>Cannot read the following XML elements:</source> <target>Åžu XML elemanları okunamadı:</target> @@ -343,9 +594,6 @@ <source>&Program</source> <target>&Dosya</target> -<source>&Content</source> -<target>İçe&rik</target> - <source>&About</source> <target>H&akkında</target> @@ -367,9 +615,6 @@ <source>To get started just import a .ffs_batch file.</source> <target>.ffs_batch dosyasını yükleyerek baÅŸlayabilirsiniz.</target> -<source>Folders to watch</source> -<target>Ä°zlenecek klasörler</target> - <source>Add folder</source> <target>Klasör ekleyin</target> @@ -382,9 +627,6 @@ <source>Select a folder</source> <target>Bir klasör seçin</target> -<source>Idle time [seconds]</source> -<target>BoÅŸta bekleme süresi {saniye]</target> - <source>Idle time between last detected change and execution of command</source> <target>Son algılanan deÄŸiÅŸiklik ile komutun yürütülmesi arasında beklenecek süre</target> @@ -399,18 +641,12 @@ Komut ÅŸu durumlarda yürütülür: - yeni klasörler algılandığında (örneÄŸin bir USB bellek takıldığında) </target> -<source>Start</source> -<target>BaÅŸlayın</target> - <source>&Retry</source> <target>&Yeniden deneyin</target> <source>Cancel</source> <target>Ä°ptal</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - KendiliÄŸinden EÅŸleÅŸtirme</target> - <source>Build: %x</source> <target>Yapım: %x</target> @@ -435,9 +671,6 @@ Komut ÅŸu durumlarda yürütülür: <source>&Exit</source> <target>Çı&kın</target> -<source>Invalid command line:</source> -<target>Geçersiz komut satırı:</target> - <source>File content</source> <target>İçeriÄŸe göre</target> @@ -498,9 +731,6 @@ Komut ÅŸu durumlarda yürütülür: <source>Target folder input field must not be empty.</source> <target>Hedef klasör giriÅŸ alanı boÅŸ olmamalı.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Sürüm için klasör giriÅŸ alanı boÅŸ olmamalı.</target> - <source>Source folder %x not found.</source> <target>%x kaynak klasörü bulunamadı.</target> @@ -537,9 +767,6 @@ Komut ÅŸu durumlarda yürütülür: <source>job name</source> <target>iÅŸ adı</target> -<source>Synchronization aborted</source> -<target>EÅŸleÅŸtirme durduruldu</target> - <source>Synchronization completed with errors</source> <target>EÅŸleÅŸtirme bazı hatalarla tamamlandı</target> @@ -555,24 +782,12 @@ Komut ÅŸu durumlarda yürütülür: <source>Saving log file %x...</source> <target>%x günlük dosyası kaydediliyor...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>FreeFileSync ana penceresindeki sorunları çözmek için "DeÄŸiÅŸtirin" düğmesine tıklayın.</target> - -<source>Switching to FreeFileSync main dialog</source> -<target>FreeFileSync ana penceresine geçiliyor</target> - -<source>Retrying operation after error:</source> -<target>Hatanın ardından iÅŸlem yeniden deneniyor:</target> - <source>A new version of FreeFileSync is available:</source> <target>Yeni bir FreeFileSync sürümü yayınlanmış:</target> <source>Download now?</source> <target>Ä°ndirilsin mi?</target> -<source>New version found</source> -<target>Yeni bir sürüm yayınlanmış</target> - <source>&Download</source> <target>Ä°n&dirin</target> @@ -639,21 +854,6 @@ Komut ÅŸu durumlarda yürütülür: <source>Hibernate</source> <target>Hazırda bekletilsin</target> -<source>Selected variant:</source> -<target>SeçilmiÅŸ çeÅŸit:</target> - -<source>Select alternate comparison settings</source> -<target>Alternatif karşılaÅŸtırma ayarlarını seçin</target> - -<source>Select alternate synchronization settings</source> -<target>Alternatif eÅŸleÅŸtirme ayarlarını seçin</target> - -<source>Filter is active</source> -<target>Süzgeç etkin</target> - -<source>No filter selected</source> -<target>SeçilmiÅŸ süzgeç yok</target> - <source>Remove alternate settings</source> <target>Alternatif ayarları silin</target> @@ -681,15 +881,15 @@ Komut ÅŸu durumlarda yürütülür: <source>2. &Synchronize</source> <target>2. &EÅŸleÅŸtirin</target> +<source>&Global settings</source> +<target>&Genel ayarlar</target> + <source>&Language</source> <target>Di&l</target> <source>&Export file list...</source> <target>Dosya list&esini verin...</target> -<source>&Global settings</source> -<target>&Genel ayarlar</target> - <source>&Tools</source> <target>A&raçlar</target> @@ -699,18 +899,9 @@ Komut ÅŸu durumlarda yürütülür: <source>Check &automatically once a week</source> <target>&Haftada bir kendiliÄŸinden denetlensin</target> -<source>Check for new &version</source> -<target>Yeni &sürümü denetleyin</target> - <source>Compare</source> <target>KarşılaÅŸtırın</target> -<source>Comparison settings</source> -<target>KarşılaÅŸtırma ayarları</target> - -<source>Synchronization settings</source> -<target>EÅŸleÅŸtirme ayarları</target> - <source>Synchronize</source> <target>EÅŸleÅŸtirin</target> @@ -723,6 +914,9 @@ Komut ÅŸu durumlarda yürütülür: <source>Swap sides</source> <target>SaÄŸ ve sol tarafları deÄŸiÅŸtirin</target> +<source>Match case</source> +<target>Büyük/küçük harfe uyulsun</target> + <source>Save as batch job</source> <target>Toplu iÅŸ olarak kaydedin</target> @@ -744,87 +938,12 @@ Komut ÅŸu durumlarda yürütülür: <source>Total bytes to copy</source> <target>Toplam kopyalanacak bayt</target> -<source>Items found:</source> -<target>Bulunan öge:</target> - -<source>Speed:</source> -<target>Hız:</target> - -<source>Time remaining:</source> -<target>Kalan süre:</target> - -<source>Time elapsed:</source> -<target>Geçen süre:</target> - -<source>Synchronizing...</source> -<target>EÅŸleÅŸtiriliyor...</target> - -<source>Minimize to notification area</source> -<target>Bildirim alanına küçültün</target> - -<source>On completion</source> -<target>Ä°ÅŸlem tamamlandığında:</target> - -<source>Close</source> -<target>Kapatın</target> - -<source>&Pause</source> -<target>&Duraklatılsın</target> - -<source>Variant</source> -<target>Ä°ÅŸlem tipi</target> - -<source>Statistics</source> -<target>Ä°statistikler</target> - -<source>&Don't show this dialog again</source> -<target>Bu &pencere bir daha görüntülenmesin</target> - -<source>Select a variant</source> -<target>Ä°ÅŸlem tipini seçin</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Dosyaların aynı sayılması için; - - son yazma tarih ve saatleri - - ve dosya boyutları -aynı olmalıdır -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target> -Dosyaların aynı sayılması için; - - dosya içerikleri -aynı olmalıdır -</target> - -<source>Symbolic Link handling</source> -<target>Sembolik baÄŸlantılar:</target> - -<source>Help</source> -<target>Yardım</target> - <source>OK</source> <target>Tamam</target> <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Ä°ki taraftaki deÄŸiÅŸiklikler belirlenir ve kopyalanır. Silme, taşıma ve çakışmalar, veritabanı kullanılarak kendiliÄŸinden algılanır.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Sol taraftaki klasör saÄŸ tarafa yansıtılır. EÅŸleÅŸtirme sonrası saÄŸ klasör, sol klasörün tamamen aynısı olur.</target> - -<source>Copy new or updated files to right folder.</source> -<target>Sol taraftaki yeni ya da güncellenmiÅŸ dosyalar saÄŸ tarafa kopyalanır.</target> - <source>Configure your own synchronization rules.</source> <target>EÅŸleÅŸtirme kurallarını istediÄŸiniz ÅŸekilde ayarlayabilirsiniz.</target> @@ -834,24 +953,6 @@ aynı olmalıdır <source>Requires database files. Not supported by all file systems.</source> <target>Veritabanı dosyalarına gerek duyar. Tüm dosya sistemleri tarafından desteklenmez.</target> -<source>Error handling</source> -<target>Hata olursa:</target> - -<source>Ignore</source> -<target>Yoksayılsın</target> - -<source>Hide all error and warning messages</source> -<target>Tüm hata ve uyarı iletileri gizlenir</target> - -<source>Pop-up</source> -<target>Görüntülensin</target> - -<source>Show pop-up on errors or warnings</source> -<target>Hata ya da uyarılar açılır pencerede görüntülenir</target> - -<source>Deletion handling</source> -<target>Silinen dosyalar:</target> - <source>Permanent</source> <target>Kalıcı olarak silinsin</target> @@ -873,56 +974,56 @@ aynı olmalıdır <source>Naming convention:</source> <target>Adlandırma kuralı:</target> -<source>Batch job</source> -<target>Toplu iÅŸ</target> +<source>Ignore</source> +<target>Yoksayılsın</target> -<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> -<target>Katılımsız eÅŸleÅŸtirme için bir toplu iÅŸ dosyası oluÅŸturun. Ä°ÅŸlemi baÅŸlatmak için bu dosyaya çift tıklayın ya da görev zamanlayıcı ile programlayın: %x</target> +<source>Hide all error and warning messages</source> +<target>Tüm hata ve uyarı iletileri gizlenir</target> -<source>Exit</source> -<target>Çıkın</target> +<source>Pop-up</source> +<target>Görüntülensin</target> -<source>Abort synchronization on first error</source> -<target>OluÅŸacak ilk hatada eÅŸleÅŸtirme durdurulur</target> +<source>Show pop-up on errors or warnings</source> +<target>Hata ya da uyarılar açılır pencerede görüntülenir</target> -<source>Show progress dialog</source> -<target>Ä°ÅŸlem penceresi görüntülensin</target> +<source>Statistics</source> +<target>Ä°statistikler</target> -<source>Save log</source> -<target>Günlüğe kaydedilsin</target> +<source>&Don't show this dialog again</source> +<target>Bu &pencere bir daha görüntülenmesin</target> -<source>Select folder to save log files</source> -<target>Günlük dosyalarının kaydedileceÄŸi klasörü seçin</target> +<source>Items found:</source> +<target>Bulunan öge:</target> -<source>Limit</source> -<target>Sınırla</target> +<source>Speed:</source> +<target>Hız:</target> -<source>Limit maximum number of log files</source> -<target>Tutulacak en fazla günlük dosyası sayısı</target> +<source>Time remaining:</source> +<target>Kalan süre:</target> -<source>Source code written in C++ using:</source> -<target>Kaynak kodu C++ kullanılarak yazılmıştır:</target> +<source>Time elapsed:</source> +<target>Geçen süre:</target> -<source>If you like FreeFileSync</source> -<target>FreeFileSync’i beÄŸendiyseniz</target> +<source>Synchronizing...</source> +<target>EÅŸleÅŸtiriliyor...</target> -<source>Donate with PayPal</source> -<target>PayPal üzerinden bağış yapın</target> +<source>Minimize to notification area</source> +<target>Bildirim alanına küçültün</target> -<source>Many thanks for localization:</source> -<target>Çeviriler için çok teÅŸekkürler:</target> +<source>Close</source> +<target>Kapatın</target> -<source>Feedback and suggestions are welcome</source> -<target>Öneri ve geri bildirimlerinizi bekleriz</target> +<source>&Pause</source> +<target>&Duraklatılsın</target> -<source>Homepage</source> -<target>Web sitesi</target> +<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> +<target>Katılımsız eÅŸleÅŸtirme için bir toplu iÅŸ dosyası oluÅŸturun. Ä°ÅŸlemi baÅŸlatmak için bu dosyaya çift tıklayın ya da görev zamanlayıcı ile programlayın: %x</target> -<source>Email</source> -<target>E-posta</target> +<source>Show progress dialog</source> +<target>Ä°ÅŸlem penceresi görüntülensin</target> -<source>Published under the GNU General Public License</source> -<target>GNU Genel Kamu Lisansı koÅŸulları altında yayınlanmıştır</target> +<source>Limit maximum number of log files</source> +<target>Tutulacak en fazla günlük dosyası sayısı</target> <source>Delete on both sides</source> <target>Her iki taraftaki de silinsin</target> @@ -930,95 +1031,50 @@ aynı olmalıdır <source>Delete on both sides even if the file is selected on one side only</source> <target>Dosya yalnız bir tarafta seçili olsa bile her iki taraftaki de silinir</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Yalnız tüm süzgeç kurallarına uyan dosyalar eÅŸleÅŸtirilir. -Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. -</target> - -<source>Include</source> -<target>Katılacak ögeler:</target> - -<source>Exclude</source> -<target>Katılmayacak ögeler</target> - -<source>Time span</source> -<target>Zaman aralığı</target> - -<source>File size</source> -<target>Dosya boyutu</target> - -<source>Minimum</source> -<target>En küçük</target> - -<source>Maximum</source> -<target>En büyük</target> - <source>&Clear</source> <target>&Temizleyin</target> -<source>Global settings</source> -<target>Genel ayarlar</target> - <source>Fail-safe file copy</source> <target>Dosyalar hatasız kopyalansın</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Dosyalar önce geçici dosyaya kopyalanıp (*.ffs_tmp) sonra yeniden adlandırılır. Bu yöntem, ciddi bir hata oluÅŸması durumunda bile iÅŸlemin tutarlı yapılmasını saÄŸlar.</target> - <source>Copy locked files</source> <target>Kilitli dosyalar da kopyalansın</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Paylaşılan ya da kilitlenmiÅŸ dosyalar Birim Gölge Hizmetini kullanılarak kopyalanır (yönetici hakları gereklidir)</target> - <source>Copy file access permissions</source> <target>Dosya eriÅŸim izinleri de kopyalansın</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>Dosya ve klasör izinleri de aktarılır (yönetici hakları gereklidir)</target> - -<source>Restore hidden dialogs</source> -<target>GizlenmiÅŸ iletiler yeniden görüntülensin</target> - -<source>External applications</source> -<target>Dış uygulamalar</target> - <source>Description</source> <target>Açıklama</target> <source>&Default</source> <target>&Varsayılan</target> -<source>Find what:</source> -<target>Aranacak:</target> +<source>Source code written in C++ using:</source> +<target>Kaynak kodu C++ kullanılarak yazılmıştır:</target> -<source>Match case</source> -<target>Büyük/küçük harfe uyulsun</target> +<source>If you like FreeFileSync</source> +<target>FreeFileSync’i beÄŸendiyseniz</target> -<source>&Find next</source> -<target>&Sonrakini bulun</target> +<source>Donate with PayPal</source> +<target>PayPal üzerinden bağış yapın</target> -<source>Start synchronization</source> -<target>EÅŸleÅŸtirmeyi baÅŸlatın</target> +<source>Feedback and suggestions are welcome</source> +<target>Öneri ve geri bildirimlerinizi bekleriz</target> -<source>Delete</source> -<target>Silin</target> +<source>Homepage</source> +<target>Web sitesi</target> -<source>Configure filter</source> -<target>Süzgeci ayarlayın</target> +<source>Email</source> +<target>E-posta</target> -<source>Find</source> -<target>Arayın</target> +<source>Published under the GNU General Public License</source> +<target>GNU Genel Kamu Lisansı koÅŸulları altında yayınlanmıştır</target> -<source>Select time span</source> -<target>Zaman aralığı</target> +<source>Many thanks for localization:</source> +<target>Çeviriler için çok teÅŸekkürler:</target> -<source>Folder pairs</source> -<target>Klasör çiftleri</target> +<source>Find</source> +<target>Arayın</target> <source>Overview</source> <target>Genel</target> @@ -1026,15 +1082,6 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>Configuration</source> <target>Ä°ÅŸlemler</target> -<source>Main bar</source> -<target>Ana çubuk</target> - -<source>Filter files</source> -<target>Dosya süzgeci</target> - -<source>Select view</source> -<target>Görünüm</target> - <source>Open...</source> <target>Açın...</target> @@ -1044,14 +1091,14 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>Compare both sides</source> <target>Ä°ki tarafı karşılaÅŸtırır</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>1 öge için %y komutunu çalıştırmak istediÄŸinize emin misiniz?</pluralform> -<pluralform>%x öge için %y komutunu çalıştırmak istediÄŸinize emin misiniz?</pluralform> -</target> +<source>Comparison settings</source> +<target>KarşılaÅŸtırma ayarları</target> + +<source>Synchronization settings</source> +<target>EÅŸleÅŸtirme ayarları</target> + +<source>Start synchronization</source> +<target>EÅŸleÅŸtirmeyi baÅŸlatın</target> <source>Confirm</source> <target>Onaylayın</target> @@ -1089,12 +1136,6 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>Set direction:</source> <target>Yönü seçin:</target> -<source>Exclude temporarily</source> -<target>Geçici olarak katılmasın</target> - -<source>Include temporarily</source> -<target>Geçici olarak katılsın</target> - <source>multiple selection</source> <target>çoklu seçim</target> @@ -1104,6 +1145,15 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>Exclude via filter:</source> <target>Süzerek dışarda bırakılsın:</target> +<source>Exclude temporarily</source> +<target>Geçici olarak katılmasın</target> + +<source>Include temporarily</source> +<target>Geçici olarak katılsın</target> + +<source>Delete</source> +<target>Silin</target> + <source>Include all</source> <target>Tümü katılsın</target> @@ -1152,6 +1202,9 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>Never save &changes</source> <target>DeÄŸiÅŸiklikler asla &kaydedilmesin</target> +<source>Filter</source> +<target>Süzgeç</target> + <source>Show files that exist on left side only</source> <target>Yalnız sol tarafta bulunan dosyaları görüntüler ya da gizler</target> @@ -1197,12 +1250,12 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>Set as default</source> <target>Varsayılan olarak belirleyin</target> -<source>Operation aborted</source> -<target>Ä°ÅŸlemden vazgeçildi</target> - <source>All folders are in sync</source> <target>Tüm klasörler eÅŸleÅŸtirildi</target> +<source>Cannot find %x</source> +<target>%x bulunamadı</target> + <source>Comma-separated values</source> <target>Virgül ile ayrılmış deÄŸerler</target> @@ -1218,18 +1271,12 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>&Ignore</source> <target>&Yoksayın</target> -<source>Fatal Error</source> -<target>Ölümcül Hata</target> - <source>&Don't show this warning again</source> <target>Bu uyarı bir daha &görüntülenmesin</target> <source>&Switch</source> <target>&DeÄŸiÅŸtirin</target> -<source>Question</source> -<target>Soru</target> - <source>&Yes</source> <target>&Evet</target> @@ -1251,9 +1298,6 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>Initializing...</source> <target>BaÅŸlatılıyor...</target> -<source>Aborted</source> -<target>Vazgeçildi</target> - <source>Completed</source> <target>Tamamlandı</target> @@ -1263,12 +1307,6 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>Log</source> <target>Günlük</target> -<source>Cannot find %x</source> -<target>%x bulunamadı</target> - -<source>Inactive</source> -<target>Kullanılmıyor</target> - <source>Today</source> <target>Bugün</target> @@ -1293,9 +1331,6 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>MB</source> <target>MB</target> -<source>Filter</source> -<target>Süzgeç</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1314,6 +1349,9 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <pluralform>AÅŸağıdaki %x ögeyi silmek istediÄŸinize emin misiniz?</pluralform> </target> +<source>Exclude</source> +<target>Katılmayacak ögeler</target> + <source>Direct</source> <target>DoÄŸrudan katılsın</target> @@ -1338,9 +1376,6 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <source>- Other side's counterpart to %item_folder%</source> <target>%item_folder% ögesinin diÄŸer taraftaki karşılığı</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>GizlenmiÅŸ iletiler yeniden görüntülensin mi?</target> - <source>Leave as unresolved conflict</source> <target>UyuÅŸmazlık çözülmeden bırakılsın</target> @@ -1464,15 +1499,9 @@ Not: Dosya yolları seçilmiÅŸ klasörlere göre yazılmalıdır. <pluralform>%x gün</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Sistem iletileri alınacak ÅŸekilde kayıt yapılamadı.</target> - <source>Cannot set privilege %x.</source> <target>%x izni verilemedi.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Sistem uyku kipine geçirilemedi.</target> - <source>Cannot change process I/O priorities.</source> <target>GiriÅŸ/Çıkış iÅŸlemi öncelikleri deÄŸiÅŸtirilemedi</target> diff --git a/BUILD/Languages/ukrainian.lng b/BUILD/Languages/ukrainian.lng index 0b5406b7..539524e0 100644 --- a/BUILD/Languages/ukrainian.lng +++ b/BUILD/Languages/ukrainian.lng @@ -2,14 +2,31 @@ <language>УкраїнÑька</language> <translator>Roman Ardan</translator> <locale>uk_UA</locale> - <flag_image>flag_ukraine.png</flag_image> - <plural_form_count>3</plural_form_count> + <image>flag_ukraine.png</image> + <plural_count>3</plural_count> <plural_definition>n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2</plural_definition> </header> -<source>Close search bar</source> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +</target> + +<source>&Check</source> +<target></target> + +<source>Retrying operation...</source> <target></target> +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +</target> + <source>Both sides have changed since last synchronization.</source> <target>З моменту оÑтанньої Ñинхронізації з обох Ñторін відбулиÑÑ Ð·Ð¼Ñ–Ð½Ð¸.</target> @@ -64,9 +81,6 @@ <source>Cannot open file %x.</source> <target>Ðе вдаєтьÑÑ Ñ„Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %x.</target> -<source>Error</source> -<target>Помилка</target> - <source>File %x does not contain a valid configuration.</source> <target>Файл %x не міÑтить правильної конфігурації.</target> @@ -76,12 +90,12 @@ <source>The config file must not contain settings at directory pair level when directories are set via command line.</source> <target>Конфігураційний файл не повинен міÑтити налаштувань на рівні пар каталогів, Ñкщо каталоги задаютьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ð¼ Ñ€Ñдком.</target> -<source>Warning</source> -<target>Увага</target> - <source>Directories cannot be set for more than one configuration file.</source> <target>Каталоги не можуть бути призначені більш ніж одному файлу конфігурації.</target> +<source>Command line</source> +<target>Командний Ñ€Ñдок</target> + <source>Syntax:</source> <target>СинтакÑиÑ:</target> @@ -97,9 +111,6 @@ <source>Any number of alternative directories for at most one config file.</source> <target>Будь-Ñка кількіÑÑ‚ÑŒ альтернативних каталогів Ð´Ð»Ñ Ñ‰Ð¾Ð½Ð°Ð¹Ð±Ñ–Ð»ÑŒÑˆÐµ одного конфігураційного файлу.</target> -<source>Command line</source> -<target>Командний Ñ€Ñдок</target> - <source>A folder input field is empty.</source> <target>Порожнє поле папки.</target> @@ -301,8 +312,8 @@ <source>/sec</source> <target>/Ñек</target> -<source>%x items</source> -<target>%x елементів</target> +<source>%x items/sec</source> +<target>%x елемента/Ñек</target> <source>Configuration file %x loaded partially only.</source> <target>Файл конфігурації %x завантажено лише чаÑтково.</target> @@ -331,10 +342,10 @@ <source>Volume name %x is not part of file path %y.</source> <target>Ім'Ñ Ñ‚Ð¾Ð¼Ñƒ %x не Ñ” чаÑтиною файловго шлÑху %y.</target> -<source>Abort requested: Waiting for current operation to finish...</source> -<target>Запит перериваннÑ: Ð’ очікуванні Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— операції...</target> +<source>Stop requested: Waiting for current operation to finish...</source> +<target>Запит зупинки: Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— операції...</target> -<source>Failure to create timestamp for versioning:</source> +<source>Unable to create timestamp for versioning:</source> <target>Ðе вдаєтьÑÑ Ñтворити чаÑової мітки Ð´Ð»Ñ Ð²ÐµÑ€Ñій:</target> <source>Cannot read the following XML elements:</source> @@ -352,8 +363,8 @@ <source>&Program</source> <target>&Програма</target> -<source>&Content</source> -<target>&ЗміÑÑ‚</target> +<source>&View help</source> +<target>&ПереглÑд довідки</target> <source>&About</source> <target>&Про програму</target> @@ -376,8 +387,8 @@ <source>To get started just import a .ffs_batch file.</source> <target>Щоб розпочати імпортуйте .ffs_batch файл.</target> -<source>Folders to watch</source> -<target>Папки Ð´Ð»Ñ ÑпоÑтереженнÑ</target> +<source>Folders to watch:</source> +<target>Папки Ð´Ð»Ñ ÑпоÑтеженнÑ</target> <source>Add folder</source> <target>Додати папку</target> @@ -391,12 +402,15 @@ <source>Select a folder</source> <target>Вибрати папку</target> -<source>Idle time [seconds]</source> -<target>Ð§Ð°Ñ Ð¿Ñ€Ð¾Ñтою [Ñекунд]</target> +<source>Idle time (in seconds):</source> +<target>Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ (Ñекунд):</target> <source>Idle time between last detected change and execution of command</source> <target>Ð§Ð°Ñ Ð¿Ñ€Ð¾Ñтою між виÑвленнÑм оÑтанньої зміни та виконаннÑм команди</target> +<source>Command line:</source> +<target>Командний Ñ€Ñдок:</target> + <source> The command is triggered if: - files or subfolders change @@ -408,33 +422,30 @@ The command is triggered if: - поÑвилиÑÑ Ð½Ð¾Ð²Ñ– папки (наприклад, підключена USB-пам'ÑÑ‚ÑŒ) </target> -<source>Start</source> -<target>Старт</target> - -<source>&Retry</source> -<target>&Повторити</target> - -<source>Cancel</source> -<target>Відмінити</target> +<source>&Start</source> +<target>&Старт</target> -<source>RealtimeSync - Automated Synchronization</source> -<target>RealtimeSync - Ðвтоматична ÑинхронізаціÑ</target> +<source>About</source> +<target>Про</target> <source>Build: %x</source> <target>компілÑÑ†Ñ–Ñ %x</target> -<source>About</source> -<target>Про</target> - <source>All files</source> <target>Ð’ÑÑ– файли</target> +<source>Automated Synchronization</source> +<target>Ðвтоматична СинхронізаціÑ</target> + <source>Directory monitoring active</source> <target>Моніторинг каталогів активний</target> <source>Waiting until all directories are available...</source> <target>ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ÑтупноÑÑ‚Ñ– вÑÑ–Ñ… каталогів...</target> +<source>Error</source> +<target>Помилка</target> + <source>&Restore</source> <target>&Відновити</target> @@ -444,9 +455,12 @@ The command is triggered if: <source>&Exit</source> <target>&Вихід</target> -<source>Invalid command line:</source> +<source>Incorrect command line:</source> <target>Ðеправильний командний Ñ€Ñдок:</target> +<source>&Retry</source> +<target>&Повторити</target> + <source>File content</source> <target>ВміÑÑ‚ файлу</target> @@ -507,8 +521,8 @@ The command is triggered if: <source>Target folder input field must not be empty.</source> <target>Поле цільової папки не повинно бути порожнім.</target> -<source>Folder input field for versioning must not be empty.</source> -<target>Ðазва папки Ð´Ð»Ñ Ð²ÐµÑ€Ñій файлів не повинна бути порожньою.</target> +<source>Please enter a target folder for versioning.</source> +<target>Будь лаÑка, введіть цільову папку Ð´Ð»Ñ Ð²ÐµÑ€Ñій.</target> <source>Source folder %x not found.</source> <target>Вихідний каталог %x не знайдено.</target> @@ -546,8 +560,8 @@ The command is triggered if: <source>job name</source> <target>назва завданнÑ</target> -<source>Synchronization aborted</source> -<target>Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð°</target> +<source>Synchronization stopped</source> +<target>Синхронізацію зупинено</target> <source>Synchronization completed with errors</source> <target>Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑ Ð· помилками</target> @@ -564,14 +578,29 @@ The command is triggered if: <source>Saving log file %x...</source> <target>Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° журналу %x...</target> -<source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>ÐатиÑніть "Змінити" Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ð¿Ð¸Ñ‚Ð°Ð½ÑŒ у головному вікні FreeFileSync.</target> +<source>You can switch to FreeFileSync's main window to resolve this issue.</source> +<target>Ви можете перейти до головного вікна FreeFileSync щоб вирішити це питаннÑ.</target> -<source>Switching to FreeFileSync main dialog</source> -<target>Перехід до головного діалогу FreeFileSync</target> +<source>&Don't show this warning again</source> +<target>&Ðадалі не показувати це попередженнÑ</target> -<source>Retrying operation after error:</source> -<target>Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— піÑÐ»Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸:</target> +<source>&Ignore</source> +<target>&Ігнорувати</target> + +<source>&Switch</source> +<target>&Змінити</target> + +<source>Switching to FreeFileSync's main window</source> +<target>Перехід до головного вікна FreeFileSync</target> + +<source>&Ignore subsequent errors</source> +<target>&Ігнорувати наÑтупні помилки</target> + +<source>Serious Error</source> +<target>Серйозна помилка</target> + +<source>Check for Program Updates</source> +<target>Перевірка Оновлень Програми</target> <source>A new version of FreeFileSync is available:</source> <target>ДоÑтупна нова верÑÑ–Ñ FreeFileSync:</target> @@ -579,24 +608,24 @@ The command is triggered if: <source>Download now?</source> <target>Завантажити зараз?</target> -<source>New version found</source> -<target>знайдено нову верÑÑ–ÑŽ</target> - <source>&Download</source> <target>&Завантажити</target> <source>FreeFileSync is up to date.</source> <target>У Ð’Ð°Ñ Ð½Ð°Ð¹Ð½Ð¾Ð²Ñ–ÑˆÐ° верÑÑ–Ñ FreeFileSync.</target> -<source>Information</source> -<target>ІнформаціÑ</target> - <source>Unable to connect to sourceforge.net.</source> <target>Ðе можна з’єднатиÑÑ Ð· sourceforge.net.</target> <source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source> <target>Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ номер поточної верÑÑ–Ñ— FreeFileSync онлайн. Бажаєте перевірити вручну?</target> +<source>Last session</source> +<target>ОÑÑ‚Ð°Ð½Ð½Ñ ÑеÑÑ–Ñ</target> + +<source>Copy</source> +<target>Копіювати</target> + <source>Symlink</source> <target>Символьне поÑиланнÑ</target> @@ -648,20 +677,20 @@ The command is triggered if: <source>Hibernate</source> <target>ГібернаціÑ</target> -<source>Selected variant:</source> -<target>Вибраний варіант:</target> +<source>Alternate comparison settings</source> +<target>Ðльтернативні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑннÑ</target> -<source>Select alternate comparison settings</source> -<target>Вибрати альтернативні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑннÑ</target> +<source>Alternate synchronization settings</source> +<target>Ðльтернативні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñинхронізації</target> -<source>Select alternate synchronization settings</source> -<target>Вибрати альтернативні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñинхронізації</target> +<source>Local filter</source> +<target>Локальний фільтр</target> -<source>Filter is active</source> -<target>Фільтр активний</target> +<source>Active</source> +<target>Ðктивні</target> -<source>No filter selected</source> -<target>Ðе вибрано жодного фільтра</target> +<source>None</source> +<target>ВідÑутні</target> <source>Remove alternate settings</source> <target>Вилучити альтернативні налаштуваннÑ</target> @@ -669,12 +698,18 @@ The command is triggered if: <source>Clear filter settings</source> <target>ОчиÑтити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°</target> -<source>Copy</source> -<target>Копіювати</target> - <source>Paste</source> <target>Вклеїти</target> +<source>Alternate Comparison Settings</source> +<target>Ðльтернативні ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐŸÐ¾Ñ€Ñ–Ð²Ð½ÑннÑ</target> + +<source>Alternate Synchronization Settings</source> +<target>Ðльтернативні ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ—</target> + +<source>Local Filter</source> +<target>Локальний Фільтр</target> + <source>&New</source> <target>&Ðова</target> @@ -690,15 +725,18 @@ The command is triggered if: <source>2. &Synchronize</source> <target>2. &Синхронізувати</target> +<source>&Global settings</source> +<target>&Глобальні налаштуваннÑ</target> + <source>&Language</source> <target>&Мова</target> +<source>&Find...</source> +<target>&Знайти...</target> + <source>&Export file list...</source> <target>&ЕкÑпортувати ÑпиÑок файлів...</target> -<source>&Global settings</source> -<target>&Глобальні налаштуваннÑ</target> - <source>&Tools</source> <target>&ІнÑтрументи</target> @@ -708,12 +746,15 @@ The command is triggered if: <source>Check &automatically once a week</source> <target>ПеревірÑти &автоматично щотижнÑ</target> -<source>Check for new &version</source> -<target>Перевірити наÑвніÑÑ‚ÑŒ нової &верÑÑ–Ñ—</target> +<source>&Check for new version</source> +<target>&Перевірка наÑвноÑÑ‚Ñ– нової верÑÑ–Ñ—</target> <source>Compare</source> <target>ПорівнÑти</target> +<source>Cancel</source> +<target>Відмінити</target> + <source>Synchronize</source> <target>Синхронізувати</target> @@ -726,7 +767,10 @@ The command is triggered if: <source>Swap sides</source> <target>ПомінÑти міÑцÑми</target> -<source>Find what:</source> +<source>Close search bar</source> +<target>Закрити панель пошуку</target> + +<source>Find:</source> <target>Знайти:</target> <source>Match case</source> @@ -753,70 +797,20 @@ The command is triggered if: <source>Total bytes to copy</source> <target>Ð’Ñього зкопіювати байтів</target> -<source>Items found:</source> -<target>Елементів знайдено:</target> +<source>Select a variant:</source> +<target>Виберіть варіант:</target> -<source>Speed:</source> -<target>ШвидкіÑÑ‚ÑŒ:</target> +<source>Identify equal files by comparing modification time and size.</source> +<target>Визначити однакові файли порівнюючи Ñ‡Ð°Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— та розмір.</target> -<source>Time remaining:</source> -<target>ЗалишилоÑÑŒ чаÑу:</target> +<source>Identify equal files by comparing the file content.</source> +<target>Визначити однакові файли порівнюючи Ñ—Ñ… вміÑÑ‚.</target> -<source>Time elapsed:</source> -<target>Пройшло чаÑу:</target> +<source>Symbolic links:</source> +<target>Символьні поÑиланнÑ:</target> -<source>Synchronizing...</source> -<target>СинхронізаціÑ...</target> - -<source>Minimize to notification area</source> -<target>Згорнути в облаÑÑ‚ÑŒ повідомлень</target> - -<source>On completion</source> -<target>ПіÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ</target> - -<source>Close</source> -<target>Замкнути</target> - -<source>&Pause</source> -<target>&Пауза</target> - -<source>Variant</source> -<target>Варіант</target> - -<source>Statistics</source> -<target>СтатиÑтика</target> - -<source>&Don't show this dialog again</source> -<target>Більше &не показувати цей діалог</target> - -<source>Select a variant</source> -<target>Виберіть варіант</target> - -<source> -Files are found equal if - - last write time and date - - file size -are the same -</source> -<target> -Файли вважаютьÑÑ Ð¾Ð´Ð½Ð°ÐºÐ¾Ð²Ð¸Ð¼Ð¸ Ñкщо - - дата Ñ– Ñ‡Ð°Ñ Ð¾Ñтаннього запиÑу - - розмір файлів -Ñпівпадають -</target> - -<source> -Files are found equal if - - file content -is the same -</source> -<target>Файли вважаютьÑÑ Ñ€Ñ–Ð²Ð½Ð¸Ð¼Ð¸, Ñкщо вміÑÑ‚ файлів однаковий</target> - -<source>Symbolic Link handling</source> -<target>Обробка Ñимвольного поÑиланнÑ</target> - -<source>Help</source> -<target>Допомога</target> +<source>More information</source> +<target>Додаткова інформаціÑ</target> <source>OK</source> <target>OK</target> @@ -824,11 +818,11 @@ is the same <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>ВиÑвити та поширити зміни на обидві Ñторони. ВидаленнÑ, Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° конфлікти визначаютьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾ викориÑтовуючи базу даних.</target> -<source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Дзеркальна (резервна) ÐºÐ¾Ð¿Ñ–Ñ Ð»Ñ–Ð²Ð¾Ñ— чаÑтини. Ð’ результаті Ñинхронізації права папка змінюєтьÑÑ Ð´Ð¾ повної відповідноÑÑ‚Ñ– лівій.</target> +<source>Create a mirror backup of the left folder which exactly matches the right folder after synchronization.</source> +<target>Створити дзеркальну копію лівої чаÑтини, піÑÐ»Ñ Ñинхронізації права папка повніÑÑ‚ÑŽ дорівнюватиме лівій.</target> -<source>Copy new or updated files to right folder.</source> -<target>Копіювати нові чи оновлювати файли з правої Ñторони.</target> +<source>Copy new and updated files to the right folder.</source> +<target>Скопіювати нові та оновлені файли в праву папку.</target> <source>Configure your own synchronization rules.</source> <target>Ðалаштувати влаÑні правила Ñинхронізації.</target> @@ -839,23 +833,8 @@ is the same <source>Requires database files. Not supported by all file systems.</source> <target>Потрібні файли бази даних. ПідтримуєтьÑÑ Ð½Ðµ вÑіма файловими ÑиÑтемами.</target> -<source>Error handling</source> -<target>Обробка помилок</target> - -<source>Ignore</source> -<target>Ігнорувати</target> - -<source>Hide all error and warning messages</source> -<target>Приховати вÑÑ– помилки Ñ– Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· попередженнÑми</target> - -<source>Pop-up</source> -<target>Виринаючі вікна</target> - -<source>Show pop-up on errors or warnings</source> -<target>Показувати виринаючі вікна при помилках та попередженнÑÑ…</target> - -<source>Deletion handling</source> -<target>ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ</target> +<source>Delete files:</source> +<target>Вилучити файли:</target> <source>Permanent</source> <target>Ðазавжди</target> @@ -878,99 +857,171 @@ is the same <source>Naming convention:</source> <target>Метод іменуваннÑ:</target> -<source>Batch job</source> -<target>Пакетне завданнÑ</target> +<source>Show examples</source> +<target>Показати приклади</target> + +<source>Handle errors:</source> +<target>Обробка помилок:</target> + +<source>Ignore</source> +<target>Ігнорувати</target> + +<source>Hide all error and warning messages</source> +<target>Приховати вÑÑ– помилки Ñ– Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· попередженнÑми</target> + +<source>Pop-up</source> +<target>Виринаючі вікна</target> + +<source>Show pop-up on errors or warnings</source> +<target>Показувати виринаючі вікна при помилках та попередженнÑÑ…</target> + +<source>On completion:</source> +<target>ПіÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ:</target> + +<source>Start synchronization now?</source> +<target>Розпочати Ñинхронізацію?</target> + +<source>Variant:</source> +<target>Варіант:</target> + +<source>Statistics</source> +<target>СтатиÑтика</target> + +<source>&Don't show this dialog again</source> +<target>Більше &не показувати цей діалог</target> + +<source>Items found:</source> +<target>Елементів знайдено:</target> + +<source>Speed:</source> +<target>ШвидкіÑÑ‚ÑŒ:</target> + +<source>Time remaining:</source> +<target>ЗалишилоÑÑŒ чаÑу:</target> + +<source>Time elapsed:</source> +<target>Пройшло чаÑу:</target> + +<source>Synchronizing...</source> +<target>СинхронізаціÑ...</target> + +<source>Minimize to notification area</source> +<target>Згорнути в облаÑÑ‚ÑŒ повідомлень</target> + +<source>Close</source> +<target>Замкнути</target> + +<source>&Pause</source> +<target>&Пауза</target> + +<source>Stop</source> +<target>Зупинити</target> <source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source> <target>Створити пакетний файл Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾Ñ— Ñинхронізації. Щоб розпочати двічі клацніть цей файл або заплануйте в планувальнику завдань: %x</target> -<source>Exit</source> -<target>Вихід</target> - -<source>Abort synchronization on first error</source> -<target>Перервати Ñинхронізацію при першій помилці</target> +<source>Stop synchronization at first error</source> +<target>Зупинити Ñинхронізацію при першій помилці</target> <source>Show progress dialog</source> <target>Показувати вікно прогреÑу</target> -<source>Save log</source> -<target>Зберегти журнал</target> - -<source>Select folder to save log files</source> -<target>Виберіть папку Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² журналу</target> +<source>Save log:</source> +<target>Зберегти журнал:</target> -<source>Limit</source> -<target>Межа</target> +<source>Limit:</source> +<target>ОбмеженнÑ:</target> <source>Limit maximum number of log files</source> <target>Обмежити макÑимальну кількіÑÑ‚ÑŒ файлів журналу</target> +<source>How can I schedule a batch job?</source> +<target>Як можна запланувати пакетне завданнÑ?</target> + +<source>&Recycle bin</source> +<target>&Корзина</target> + <source>Delete on both sides</source> <target>Вилучити з обох Ñторін</target> <source>Delete on both sides even if the file is selected on one side only</source> <target>Вилучити з обох Ñторін, навіть Ñкщо файл виділений тільки з однієї Ñторони</target> -<source> -Files will only be synchronized if they pass all filter rules. -Note: File paths must be relative to base directories. -</source> -<target> -Файли будуть Ñинхронізовані тільки Ñкщо вони задовільнÑÑŽÑ‚ÑŒ уÑім правилам фільтрації. -Примітка: ШлÑхи до файлів повинні бути відноÑними до базових каталогів. -</target> +<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source> +<target>Виберіть правила фільтрації Ð´Ð»Ñ Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´ÐµÑких файлів із Ñинхронізації. Введіть шлÑхи файлів відноÑно відповідної пари папок.</target> -<source>Include</source> +<source>Include:</source> <target>Включити</target> -<source>Exclude</source> +<source>Exclude:</source> <target>Виключити</target> -<source>Time span</source> +<source>Time span:</source> <target>ЧаÑовий інтервал</target> -<source>File size</source> -<target>Розмір файла</target> +<source>File size:</source> +<target>Розмір Файла</target> -<source>Minimum</source> -<target>Мінімум</target> +<source>Minimum:</source> +<target>Мінімум:</target> -<source>Maximum</source> -<target>МакÑимум</target> +<source>Maximum:</source> +<target>МакÑимум:</target> <source>&Clear</source> <target>&ОчиÑтити</target> -<source>Global settings</source> -<target>Глобальні налаштуваннÑ</target> +<source>The following settings are used for all synchronization jobs.</source> +<target>ÐаÑтупні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтовуютьÑÑ Ð´Ð»Ñ Ð²ÑÑ–Ñ… завдань Ñинхронізації.</target> <source>Fail-safe file copy</source> <target>Безпечне ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²</target> -<source>Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error.</source> -<target>Скопіюйте Ñпочатку в тимчаÑовий файл (*.ffs_tmp), потім перейменуйте його. Це гарантує узгоджений Ñтан навіть у разі Ð²Ð¸Ð½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ñ„Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð¾Ñ— помилки.</target> +<source> +Copy to a temporary file (*.ffs_tmp) before overwriting target. +This guarantees a consistent state even in case of a serious error. +</source> +<target> +Скопіювати в тимчаÑовий файл (*.ffs_tmp) перед перезапиÑом цілі. +Це гарантує узгоджений Ñтан навіть у випадку Ñерйозної помилки. +</target> + +<source>(recommended)</source> +<target>(рекомендовано)</target> <source>Copy locked files</source> <target>Копіювати заблоковані файли</target> -<source>Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)</source> -<target>Копіювати Ñпільні та заблоковані файли за допомогою ÑервіÑу Тіньового ÐšÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð¢Ð¾Ð¼Ñƒ (потрібні права адмініÑтратора)</target> +<source>Copy shared or locked files using the Volume Shadow Copy Service.</source> +<target>Копіювати Ñпільні та заблоковані файли за допомогою ÑервіÑу Тіньового ÐšÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð¢Ð¾Ð¼Ñƒ.</target> + +<source>(requires administrator rights)</source> +<target>(потрібні права адмініÑтратора)</target> <source>Copy file access permissions</source> <target>Копіювати права доÑтупу до файлу</target> -<source>Transfer file and folder permissions (requires administrator rights)</source> -<target>ПеренеÑти права файлів Ñ– папок (потрібні права адмініÑтратора)</target> +<source>Transfer file and folder permissions.</source> +<target>ПеренеÑти права файлів Ñ– папок.</target> + +<source>Automatic retry on error:</source> +<target>Ðвтоматичний повтор при помилці:</target> -<source>Restore hidden dialogs</source> -<target>Відновити Ñховані діалоги</target> +<source>Retry count:</source> +<target>КількіÑÑ‚ÑŒ Ñпроб:</target> -<source>External applications</source> -<target>Зовнішні програми</target> +<source>Delay (in seconds):</source> +<target>Затримка (Ñекунд):</target> + +<source>Customize context menu:</source> +<target>ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтного меню:</target> <source>Description</source> <target>ОпиÑ</target> +<source>Restore hidden windows</source> +<target>Відновити приховані вікна</target> + <source>&Default</source> <target>&За замовчуваннÑм</target> @@ -998,26 +1049,20 @@ Note: File paths must be relative to base directories. <source>Many thanks for localization:</source> <target>ПодÑка за локалізацію:</target> -<source>Start synchronization</source> -<target>Розпочати Ñинхронізацію</target> +<source>Save as Batch Job</source> +<target>Зберегти Ñк пакетне завданнÑ</target> -<source>Comparison settings</source> -<target>ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ</target> +<source>Delete Items</source> +<target>Вилучити Елементи</target> -<source>Synchronization settings</source> -<target>ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñинхронізації</target> +<source>Global Settings</source> +<target>Глобальні ÐалаштуваннÑ</target> -<source>Delete</source> -<target>Видалити</target> +<source>Select Time Span</source> +<target>Виберіть Інтервал ЧаÑу</target> -<source>Configure filter</source> -<target>ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°</target> - -<source>Select time span</source> -<target>Виберіть чаÑовий інтервал</target> - -<source>Folder pairs</source> -<target>Пари папок</target> +<source>Folder Pairs</source> +<target>Пари Папок</target> <source>Find</source> <target>Знайти</target> @@ -1028,14 +1073,14 @@ Note: File paths must be relative to base directories. <source>Configuration</source> <target>ÐалаштуваннÑ</target> -<source>Main bar</source> +<source>Main Bar</source> <target>Головна панель</target> -<source>Filter files</source> -<target>Фільтр файлів</target> +<source>Filter Files</source> +<target>Ð¤Ñ–Ð»ÑŒÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²</target> -<source>Select view</source> -<target>СпиÑок файлів</target> +<source>Select View</source> +<target>Вибрати переглÑд</target> <source>Open...</source> <target>Відкрити...</target> @@ -1046,15 +1091,14 @@ Note: File paths must be relative to base directories. <source>Compare both sides</source> <target>ПорівнÑти обидві Ñторони</target> -<source> -<pluralform>Do you really want to execute the command %y for 1 item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target> -<pluralform>Ви дійÑно хочете виконати команду %y Ð´Ð»Ñ %x елемента?</pluralform> -<pluralform>Ви дійÑно хочете виконати команду %y Ð´Ð»Ñ %x елементів?</pluralform> -<pluralform>Ви дійÑно хочете виконати команду %y Ð´Ð»Ñ %x елементів?</pluralform> -</target> +<source>Comparison settings</source> +<target>ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ</target> + +<source>Synchronization settings</source> +<target>ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñинхронізації</target> + +<source>Start synchronization</source> +<target>Розпочати Ñинхронізацію</target> <source>Confirm</source> <target>Підтвердити</target> @@ -1110,6 +1154,9 @@ Note: File paths must be relative to base directories. <source>Include temporarily</source> <target>Включити</target> +<source>Delete</source> +<target>Видалити</target> + <source>Include all</source> <target>Включити вÑе</target> @@ -1137,9 +1184,6 @@ Note: File paths must be relative to base directories. <source>Show "%x"</source> <target>Показати "%x"</target> -<source>Last session</source> -<target>ОÑÑ‚Ð°Ð½Ð½Ñ ÑеÑÑ–Ñ</target> - <source>Folder Comparison and Synchronization</source> <target>ÐŸÐ¾Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð¿Ð°Ð¿Ð¾Ðº</target> @@ -1152,11 +1196,14 @@ Note: File paths must be relative to base directories. <source>Do you want to save changes to %x?</source> <target>Зберегти зміни в %x?</target> +<source>Never save &changes</source> +<target>Ðіколи не зберігати &зміни</target> + <source>Do&n't save</source> <target>&Ðе зберігати</target> -<source>Never save &changes</source> -<target>Ðіколи не зберігати &зміни</target> +<source>Filter</source> +<target>Фільтр</target> <source>Show files that exist on left side only</source> <target>Показати файли, Ñкі Ñ” тільки ліворуч</target> @@ -1203,12 +1250,15 @@ Note: File paths must be relative to base directories. <source>Set as default</source> <target>Ð’Ñтановити за замовчуваннÑм</target> -<source>Operation aborted</source> -<target>ÐžÐ¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð²Ñ–Ð´Ð¼Ñ–Ð½ÐµÐ½Ð°</target> - <source>All folders are in sync</source> <target>Ð’ÑÑ– папки Ñинхронізовано</target> +<source>Synchronization Settings</source> +<target>ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ—</target> + +<source>Comparison Settings</source> +<target>Параметри ПорівнÑннÑ</target> + <source>Cannot find %x</source> <target>Ðе можна знайти %x</target> @@ -1221,30 +1271,6 @@ Note: File paths must be relative to base directories. <source>Searching for program updates...</source> <target>Пошук оновлень програми ...</target> -<source>&Ignore subsequent errors</source> -<target>&Ігнорувати наÑтупні помилки</target> - -<source>&Ignore</source> -<target>&Ігнорувати</target> - -<source>Fatal Error</source> -<target>Критична помилка</target> - -<source>&Don't show this warning again</source> -<target>&Ðадалі не показувати це попередженнÑ</target> - -<source>&Switch</source> -<target>&Змінити</target> - -<source>Question</source> -<target>ПитаннÑ</target> - -<source>&Yes</source> -<target>&Так</target> - -<source>&No</source> -<target>&ÐÑ–</target> - <source>Scanning...</source> <target>СкануваннÑ...</target> @@ -1254,14 +1280,17 @@ Note: File paths must be relative to base directories. <source>Info</source> <target>ІнформаціÑ</target> +<source>Warning</source> +<target>Увага</target> + <source>Paused</source> <target>Призупинено</target> <source>Initializing...</source> <target>ІніціалізаціÑ...</target> -<source>Aborted</source> -<target>Перервано</target> +<source>Stopped</source> +<target>Зупинено</target> <source>Completed</source> <target>Завершено</target> @@ -1272,9 +1301,6 @@ Note: File paths must be relative to base directories. <source>Log</source> <target>Лог</target> -<source>Inactive</source> -<target>Ðеактивний</target> - <source>Today</source> <target>Сьогодні</target> @@ -1299,9 +1325,6 @@ Note: File paths must be relative to base directories. <source>MB</source> <target>МБ</target> -<source>Filter</source> -<target>Фільтр</target> - <source> <pluralform>Do you really want to move the following item to the recycle bin?</pluralform> <pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform> @@ -1312,6 +1335,9 @@ Note: File paths must be relative to base directories. <pluralform>Ви дійÑно хочете переміÑтити ці %x елементів у Корзину?</pluralform> </target> +<source>Move</source> +<target>ПереміÑтити</target> + <source> <pluralform>Do you really want to delete the following item?</pluralform> <pluralform>Do you really want to delete the following %x items?</pluralform> @@ -1322,6 +1348,9 @@ Note: File paths must be relative to base directories. <pluralform>Ви дійÑно хочете вилучити ці %x елементів?</pluralform> </target> +<source>Exclude</source> +<target>Виключити</target> + <source>Direct</source> <target>ПрÑмо</target> @@ -1346,8 +1375,8 @@ Note: File paths must be relative to base directories. <source>- Other side's counterpart to %item_folder%</source> <target>- Елемент з протилежної Ñторони до %item_folder%</target> -<source>Make hidden warnings and dialogs visible again?</source> -<target>Зробити приховані Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° діалоги ​​знову видимими?</target> +<source>Restore all hidden windows and warnings?</source> +<target>Відновити вÑÑ– приховані вікна та попередженнÑ?</target> <source>Leave as unresolved conflict</source> <target>Залишити Ñк невирішений конфлікт</target> @@ -1475,14 +1504,14 @@ Note: File paths must be relative to base directories. <pluralform>%x днів</pluralform> </target> -<source>Failed to register to receive system messages.</source> -<target>Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÑ”ÑтруватиÑÑ Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÑиÑтемних повідомлень.</target> +<source>Unable to register to receive system messages.</source> +<target>Ðе вдаєтьÑÑ Ð·Ð°Ñ€ÐµÑ”ÑтруватиÑÑ Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÑиÑтемних повідомлень.</target> <source>Cannot set privilege %x.</source> <target>Ðе вдаєтьÑÑ Ð²Ñтановити привілеї %x.</target> -<source>Failed to suspend system sleep mode.</source> -<target>Ðе вдалоÑÑ Ð¿Ñ€Ð¸Ð·ÑƒÐ¿Ð¸Ð½Ð¸Ñ‚Ð¸ режим Ñну ÑиÑтеми.</target> +<source>Unable to suspend system sleep mode.</source> +<target>Ðе вдаєтьÑÑ Ð¿Ñ€Ð¸Ð·ÑƒÐ¿Ð¸Ð½bnb режим Ñну ÑиÑтеми.</target> <source>Cannot change process I/O priorities.</source> <target>Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ пріоритетів Ð’Ñ…/Вих процеÑу.</target> diff --git a/BUILD/Resources.zip b/BUILD/Resources.zip Binary files differindex cf73407d..f5e1c651 100644 --- a/BUILD/Resources.zip +++ b/BUILD/Resources.zip diff --git a/FreeFileSync.vcxproj b/FreeFileSync.vcxproj index ed3a8a34..abe818b1 100644 --- a/FreeFileSync.vcxproj +++ b/FreeFileSync.vcxproj @@ -100,7 +100,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;wxUSE_UNICODE;__WXMSW__;ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;__WXDEBUG__;WXUSINGDLL;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>C:\Program Files\C++\Boost;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc12_x86_debug_dll\mswud;.</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\Boost;C:\Data\C++\wxWidgets\include;C:\Data\C++\wxWidgets\lib\vc12_x86_debug_dll\mswud;.</AdditionalIncludeDirectories> <PrecompiledHeaderFile>wx+/pch.h</PrecompiledHeaderFile> <DisableSpecificWarnings>4100;4512</DisableSpecificWarnings> <MultiProcessorCompilation>true</MultiProcessorCompilation> @@ -115,12 +115,12 @@ <GenerateDebugInformation>true</GenerateDebugInformation> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> <AdditionalDependencies>wxmsw29ud_aui.lib;wxmsw29ud_adv.lib;wxmsw29ud_core.lib;wxbase29ud_net.lib;wxbase29ud.lib;wxpngd.lib;wxzlibd.lib;comctl32.lib;ws2_32.lib;Rpcrt4.lib;winmm.lib;%(AdditionalDependencies);Wininet.lib</AdditionalDependencies> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage\lib;C:\Program Files\C++\wxWidgets\lib\vc12_x86_debug_dll</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib;C:\Data\C++\wxWidgets\lib\vc12_x86_debug_dll</AdditionalLibraryDirectories> <LinkStatus> </LinkStatus> </Link> <ResourceCompile> - <AdditionalIncludeDirectories>C:\Program Files\C++\wxWidgets\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> <PreprocessorDefinitions>%(PreprocessorDefinitions);ZEN_ARCHITECTURE_X86</PreprocessorDefinitions> </ResourceCompile> </ItemDefinitionGroup> @@ -130,7 +130,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;wxUSE_UNICODE;__WXMSW__;ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;__WXDEBUG__;WXUSINGDLL;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>C:\Program Files\C++\Boost;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc12_x64_debug_dll\mswud;.</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\Boost;C:\Data\C++\wxWidgets\include;C:\Data\C++\wxWidgets\lib\vc12_x64_debug_dll\mswud;.</AdditionalIncludeDirectories> <PrecompiledHeaderFile>wx+/pch.h</PrecompiledHeaderFile> <DisableSpecificWarnings>4100;4512</DisableSpecificWarnings> <MultiProcessorCompilation>true</MultiProcessorCompilation> @@ -147,14 +147,14 @@ <GenerateDebugInformation>true</GenerateDebugInformation> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> <AdditionalDependencies>wxbase29ud.lib;wxmsw29ud_core.lib;wxmsw29ud_adv.lib;wxmsw29ud_aui.lib;wxbase29ud_net.lib;wxpngd.lib;wxzlibd.lib;comctl32.lib;ws2_32.lib;Rpcrt4.lib;winmm.lib;%(AdditionalDependencies);Wininet.lib</AdditionalDependencies> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage_x64\lib;C:\Program Files\C++\wxWidgets\lib\vc12_x64_debug_dll</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib;C:\Data\C++\wxWidgets\lib\vc12_x64_debug_dll</AdditionalLibraryDirectories> <LinkStatus> </LinkStatus> <ManifestFile> </ManifestFile> </Link> <ResourceCompile> - <AdditionalIncludeDirectories>C:\Program Files\C++\wxWidgets\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> <PreprocessorDefinitions>%(PreprocessorDefinitions);ZEN_ARCHITECTURE_X64</PreprocessorDefinitions> </ResourceCompile> </ItemDefinitionGroup> @@ -165,7 +165,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;wxUSE_UNICODE;__WXMSW__;ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>C:\Program Files\C++\Boost;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc12_x86_release_lib\mswu;.</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\Boost;C:\Data\C++\wxWidgets\include;C:\Data\C++\wxWidgets\lib\vc12_x86_release_lib\mswu;.</AdditionalIncludeDirectories> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <DisableSpecificWarnings>4100;4512;4996</DisableSpecificWarnings> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> @@ -179,16 +179,16 @@ <OptimizeReferences>true</OptimizeReferences> <AdditionalDependencies>wxmsw29u_aui.lib;wxmsw29u_adv.lib;wxmsw29u_core.lib;wxbase29u.lib;wxpng.lib;wxzlib.lib;wxbase29u_net.lib;comctl32.lib;ws2_32.lib;winmm.lib;Rpcrt4.lib;%(AdditionalDependencies);Wininet.lib</AdditionalDependencies> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage\lib;C:\Program Files\C++\wxWidgets\lib\vc12_x86_release_lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib;C:\Data\C++\wxWidgets\lib\vc12_x86_release_lib</AdditionalLibraryDirectories> <LinkStatus> </LinkStatus> </Link> <ResourceCompile> - <AdditionalIncludeDirectories>C:\Program Files\C++\wxWidgets\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> <PreprocessorDefinitions>%(PreprocessorDefinitions);ZEN_ARCHITECTURE_X86</PreprocessorDefinitions> </ResourceCompile> <PostBuildEvent> - <Command>"C:\Program Files\C++\CodeSigning\SignCode.cmd" "$(TargetPath)"</Command> + <Command>"C:\Data\C++\CodeSigning\SignCode.cmd" "$(TargetPath)"</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> @@ -198,7 +198,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;wxUSE_UNICODE;__WXMSW__;ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>C:\Program Files\C++\Boost;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc12_x64_release_lib\mswu;.</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\Boost;C:\Data\C++\wxWidgets\include;C:\Data\C++\wxWidgets\lib\vc12_x64_release_lib\mswu;.</AdditionalIncludeDirectories> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <DisableSpecificWarnings>4100;4512;4996</DisableSpecificWarnings> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> @@ -209,20 +209,20 @@ <Link> <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <AdditionalDependencies>wxmsw29u_aui.lib;wxmsw29u_adv.lib;wxmsw29u_core.lib;wxbase29u.lib;wxpng.lib;wxzlib.lib;wxbase29u_net.lib;comctl32.lib;ws2_32.lib;winmm.lib;Rpcrt4.lib;%(AdditionalDependencies);Wininet.lib</AdditionalDependencies> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage_x64\lib;C:\Program Files\C++\wxWidgets\lib\vc12_x64_release_lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib;C:\Data\C++\wxWidgets\lib\vc12_x64_release_lib</AdditionalLibraryDirectories> <LinkStatus> </LinkStatus> + <EnableCOMDATFolding>true</EnableCOMDATFolding> </Link> <ResourceCompile> - <AdditionalIncludeDirectories>C:\Program Files\C++\wxWidgets\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> <PreprocessorDefinitions>%(PreprocessorDefinitions);ZEN_ARCHITECTURE_X64</PreprocessorDefinitions> </ResourceCompile> <PostBuildEvent> - <Command>"C:\Program Files\C++\CodeSigning\SignCode.cmd" "$(TargetPath)"</Command> + <Command>"C:\Data\C++\CodeSigning\SignCode.cmd" "$(TargetPath)"</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemGroup> @@ -244,7 +244,6 @@ <ClCompile Include="lib\perf_check.cpp" /> <ClCompile Include="lib\process_xml.cpp" /> <ClCompile Include="lib\resolve_path.cpp" /> - <ClCompile Include="lib\resources.cpp" /> <ClCompile Include="lib\shadow.cpp" /> <ClCompile Include="lib\status_handler.cpp" /> <ClCompile Include="lib\versioning.cpp" /> @@ -262,7 +261,6 @@ <ClCompile Include="ui\gui_generated.cpp" /> <ClCompile Include="ui\gui_status_handler.cpp" /> <ClCompile Include="ui\main_dlg.cpp" /> - <ClCompile Include="ui\msg_popup.cpp" /> <ClCompile Include="ui\progress_indicator.cpp" /> <ClCompile Include="ui\search.cpp" /> <ClCompile Include="ui\small_dlgs.cpp" /> @@ -277,8 +275,11 @@ </ClCompile> <ClCompile Include="wx+\graph.cpp" /> <ClCompile Include="wx+\grid.cpp" /> + <ClCompile Include="wx+\image_resources.cpp" /> <ClCompile Include="wx+\image_tools.cpp" /> <ClCompile Include="wx+\mouse_move_dlg.cpp" /> + <ClCompile Include="wx+\popup_dlg.cpp" /> + <ClCompile Include="wx+\popup_dlg_generated.cpp" /> <ClCompile Include="wx+\tooltip.cpp" /> <ClCompile Include="wx+\zlib_wrap.cpp" /> <ClCompile Include="zenxml\unit_test.cpp" /> @@ -299,10 +300,10 @@ <ResourceCompile Include="resource.rc" /> </ItemGroup> <ItemGroup> - <None Include="WxWizFrame.fbp"> - <FileType>Document</FileType> + <None Include="FreeFileSync.fbp"> <SubType>Designer</SubType> </None> + <None Include="wx+\PopupDialog.fbp" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> @@ -59,7 +59,7 @@ CXXFLAGS += -DZEN_MAC WX_CONFIG_BIN =$(HOME)/Desktop/wxWidgets-2.9.5/lib/release/bin/wx-config CXXFLAGS += -I$(HOME)/Desktop/boost_1_54_0 BOOST_LIB_DIR =$(HOME)/Desktop/boost_1_54_0/stage/lib -MACOS_SDK =-mmacosx-version-min=10.7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk +MACOS_SDK =-mmacosx-version-min=10.7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk #-Wl,-Bstatic not supported on OSX! @@ -89,7 +89,6 @@ CPP_LIST+=ui/tree_view.cpp CPP_LIST+=ui/gui_generated.cpp CPP_LIST+=ui/gui_status_handler.cpp CPP_LIST+=ui/main_dlg.cpp -CPP_LIST+=ui/msg_popup.cpp CPP_LIST+=ui/progress_indicator.cpp CPP_LIST+=ui/search.cpp CPP_LIST+=ui/small_dlgs.cpp @@ -106,7 +105,6 @@ CPP_LIST+=lib/localization.cpp CPP_LIST+=lib/parallel_scan.cpp CPP_LIST+=lib/process_xml.cpp CPP_LIST+=lib/resolve_path.cpp -CPP_LIST+=lib/resources.cpp CPP_LIST+=lib/perf_check.cpp CPP_LIST+=lib/status_handler.cpp CPP_LIST+=lib/versioning.cpp @@ -124,6 +122,9 @@ CPP_LIST+=wx+/grid.cpp CPP_LIST+=wx+/image_tools.cpp CPP_LIST+=wx+/graph.cpp CPP_LIST+=wx+/tooltip.cpp +CPP_LIST+=wx+/image_resources.cpp +CPP_LIST+=wx+/popup_dlg.cpp +CPP_LIST+=wx+/popup_dlg_generated.cpp CPP_LIST+=wx+/zlib_wrap.cpp # OS X diff --git a/RealtimeSync/RealtimeSync.vcxproj b/RealtimeSync/RealtimeSync.vcxproj index dbaa2aa5..99f64740 100644 --- a/RealtimeSync/RealtimeSync.vcxproj +++ b/RealtimeSync/RealtimeSync.vcxproj @@ -99,7 +99,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;wxUSE_UNICODE;__WXMSW__;ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;__WXDEBUG__;WXUSINGDLL;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>C:\Program Files\C++\Boost;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc12_x86_debug_dll\mswud;..</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\Boost;C:\Data\C++\wxWidgets\include;C:\Data\C++\wxWidgets\lib\vc12_x86_debug_dll\mswud;..</AdditionalIncludeDirectories> <PrecompiledHeaderFile>wx+/pch.h</PrecompiledHeaderFile> <DisableSpecificWarnings>4100;4512</DisableSpecificWarnings> <MultiProcessorCompilation>true</MultiProcessorCompilation> @@ -114,10 +114,10 @@ <GenerateDebugInformation>true</GenerateDebugInformation> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> <AdditionalDependencies>wxmsw29ud_adv.lib;wxmsw29ud_core.lib;wxbase29ud.lib;wxpngd.lib;wxzlibd.lib;wxbase29ud_net.lib;comctl32.lib;ws2_32.lib;Rpcrt4.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage\lib;C:\Program Files\C++\wxWidgets\lib\vc12_x86_debug_dll</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib;C:\Data\C++\wxWidgets\lib\vc12_x86_debug_dll</AdditionalLibraryDirectories> </Link> <ResourceCompile> - <AdditionalIncludeDirectories>C:\Program Files\C++\wxWidgets\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> <PreprocessorDefinitions>%(PreprocessorDefinitions);ZEN_ARCHITECTURE_X86</PreprocessorDefinitions> </ResourceCompile> </ItemDefinitionGroup> @@ -127,7 +127,7 @@ <WarningLevel>Level4</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;wxUSE_UNICODE;__WXMSW__;ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;__WXDEBUG__;WXUSINGDLL;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>C:\Program Files\C++\Boost;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc12_x64_debug_dll\mswud;..</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\Boost;C:\Data\C++\wxWidgets\include;C:\Data\C++\wxWidgets\lib\vc12_x64_debug_dll\mswud;..</AdditionalIncludeDirectories> <PrecompiledHeaderFile>wx+/pch.h</PrecompiledHeaderFile> <DisableSpecificWarnings>4100;4512</DisableSpecificWarnings> <MultiProcessorCompilation>true</MultiProcessorCompilation> @@ -144,12 +144,12 @@ <GenerateDebugInformation>true</GenerateDebugInformation> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> <AdditionalDependencies>wxmsw29ud_adv.lib;wxmsw29ud_core.lib;wxbase29ud.lib;wxpngd.lib;wxzlibd.lib;wxbase29ud_net.lib;comctl32.lib;ws2_32.lib;Rpcrt4.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage_x64\lib;C:\Program Files\C++\wxWidgets\lib\vc12_x64_debug_dll</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib;C:\Data\C++\wxWidgets\lib\vc12_x64_debug_dll</AdditionalLibraryDirectories> <LinkStatus> </LinkStatus> </Link> <ResourceCompile> - <AdditionalIncludeDirectories>C:\Program Files\C++\wxWidgets\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> <PreprocessorDefinitions>%(PreprocessorDefinitions);ZEN_ARCHITECTURE_X64</PreprocessorDefinitions> </ResourceCompile> </ItemDefinitionGroup> @@ -160,7 +160,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;wxUSE_UNICODE;__WXMSW__;ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>C:\Program Files\C++\Boost;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc12_x86_release_lib\mswu;..</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\Boost;C:\Data\C++\wxWidgets\include;C:\Data\C++\wxWidgets\lib\vc12_x86_release_lib\mswu;..</AdditionalIncludeDirectories> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <DisableSpecificWarnings>4100;4512;4996</DisableSpecificWarnings> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> @@ -174,14 +174,14 @@ <OptimizeReferences>true</OptimizeReferences> <AdditionalDependencies>wxbase29u.lib;wxmsw29u_adv.lib;wxmsw29u_core.lib;wxpng.lib;wxzlib.lib;wxbase29u_net.lib;comctl32.lib;ws2_32.lib;winmm.lib;Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage\lib;C:\Program Files\C++\wxWidgets\lib\vc12_x86_release_lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib;C:\Data\C++\wxWidgets\lib\vc12_x86_release_lib</AdditionalLibraryDirectories> </Link> <ResourceCompile> - <AdditionalIncludeDirectories>C:\Program Files\C++\wxWidgets\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> <PreprocessorDefinitions>%(PreprocessorDefinitions);ZEN_ARCHITECTURE_X86</PreprocessorDefinitions> </ResourceCompile> <PostBuildEvent> - <Command>"C:\Program Files\C++\CodeSigning\SignCode.cmd" "$(TargetPath)"</Command> + <Command>"C:\Data\C++\CodeSigning\SignCode.cmd" "$(TargetPath)"</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> @@ -191,7 +191,7 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;wxUSE_UNICODE;__WXMSW__;ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>C:\Program Files\C++\Boost;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc12_x64_release_lib\mswu;..</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\Boost;C:\Data\C++\wxWidgets\include;C:\Data\C++\wxWidgets\lib\vc12_x64_release_lib\mswu;..</AdditionalIncludeDirectories> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <DisableSpecificWarnings>4100;4512;4996</DisableSpecificWarnings> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> @@ -205,14 +205,14 @@ <OptimizeReferences>true</OptimizeReferences> <AdditionalDependencies>wxmsw29u_adv.lib;wxmsw29u_core.lib;wxbase29u.lib;wxpng.lib;wxzlib.lib;wxbase29u_net.lib;comctl32.lib;ws2_32.lib;winmm.lib;Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage_x64\lib;C:\Program Files\C++\wxWidgets\lib\vc12_x64_release_lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib;C:\Data\C++\wxWidgets\lib\vc12_x64_release_lib</AdditionalLibraryDirectories> </Link> <ResourceCompile> - <AdditionalIncludeDirectories>C:\Program Files\C++\wxWidgets\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> <PreprocessorDefinitions>%(PreprocessorDefinitions);ZEN_ARCHITECTURE_X64</PreprocessorDefinitions> </ResourceCompile> <PostBuildEvent> - <Command>"C:\Program Files\C++\CodeSigning\SignCode.cmd" "$(TargetPath)"</Command> + <Command>"C:\Data\C++\CodeSigning\SignCode.cmd" "$(TargetPath)"</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemGroup> @@ -228,14 +228,18 @@ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> </ClCompile> + <ClCompile Include="..\wx+\image_resources.cpp" /> <ClCompile Include="..\wx+\image_tools.cpp" /> <ClCompile Include="..\wx+\mouse_move_dlg.cpp" /> + <ClCompile Include="..\wx+\popup_dlg.cpp" /> + <ClCompile Include="..\wx+\popup_dlg_generated.cpp" /> <ClCompile Include="..\zen\debug_memory_leaks.cpp" /> <ClCompile Include="..\zen\dir_watcher.cpp" /> <ClCompile Include="..\zen\dst_hack.cpp" /> <ClCompile Include="..\zen\file_handling.cpp" /> <ClCompile Include="..\zen\file_io.cpp" /> <ClCompile Include="..\zen\file_traverser.cpp" /> + <ClCompile Include="..\zen\format_unit.cpp" /> <ClCompile Include="..\zen\notify_removal.cpp" /> <ClCompile Include="..\zen\privilege.cpp" /> <ClCompile Include="..\zen\scroll_window_under_cursor.cpp" /> @@ -244,7 +248,6 @@ <ClCompile Include="gui_generated.cpp" /> <ClCompile Include="main_dlg.cpp" /> <ClCompile Include="monitor.cpp" /> - <ClCompile Include="resources.cpp" /> <ClCompile Include="tray_menu.cpp" /> <ClCompile Include="xml_ffs.cpp" /> <ClCompile Include="xml_proc.cpp" /> @@ -253,9 +256,7 @@ <ResourceCompile Include="resource.rc" /> </ItemGroup> <ItemGroup> - <None Include="WxWizFrame.fbp"> - <SubType>Designer</SubType> - </None> + <None Include="RealtimeSync.fbp" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> diff --git a/RealtimeSync/app_icon.h b/RealtimeSync/app_icon.h new file mode 100644 index 00000000..fcd2b548 --- /dev/null +++ b/RealtimeSync/app_icon.h @@ -0,0 +1,40 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + +#ifndef RTS_APP_ICON_8914578394545 +#define RTS_APP_ICON_8914578394545 + +#include <wx/icon.h> +#include <wx+/image_resources.h> + +namespace zen +{ +inline +wxIcon getRtsIcon() +{ + //wxWidgets' bitmap to icon conversion on OS X can only deal with very specific sizes => check on all platforms! + assert(getResourceImage(L"RealtimeSync").GetWidth () == getResourceImage(L"RealtimeSync").GetHeight() && + getResourceImage(L"RealtimeSync").GetWidth() % 128 == 0); +#ifdef ZEN_WIN + //for compatibility it seems we need to stick with a "real" icon + return wxIcon(L"A_RTS_ICON"); + +#elif defined ZEN_LINUX + //attention: make sure to not implicitly call "instance()" again => deadlock on Linux + wxIcon icon; + icon.CopyFromBitmap(getResourceImage(L"RealtimeSync")); //use big logo bitmap for better quality + return icon; + +#elif defined ZEN_MAC + wxIcon icon; + icon.CopyFromBitmap(getResourceImage(L"RealtimeSync").ConvertToImage().Scale(128, 128, wxIMAGE_QUALITY_HIGH)); //"von hinten durch die Brust ins Auge" + return icon; +#endif +} +} + + +#endif //RTS_APP_ICON_8914578394545 diff --git a/RealtimeSync/application.cpp b/RealtimeSync/application.cpp index c2ed4078..a0d693d6 100644 --- a/RealtimeSync/application.cpp +++ b/RealtimeSync/application.cpp @@ -10,9 +10,10 @@ #include <zen/thread.h> #include <wx/event.h> #include <wx/log.h> -#include <wx/msgdlg.h> +#include <wx/tooltip.h> #include <wx+/string_conv.h> -//#include "resources.h" +#include <wx+/popup_dlg.h> +#include <wx+/image_resources.h> #include "xml_ffs.h" #include "../lib/localization.h" #include "../lib/ffs_paths.h" @@ -71,7 +72,15 @@ bool Application::OnInit() ::gtk_rc_parse((zen::getResourceDir() + "styles.gtk_rc").c_str()); //remove inner border from bitmap buttons #endif - SetAppName(L"FreeFileSync"); //reuse FFS's name, to have "GetUserDataDir()/GetResourcesDir()" return the same directory in ffs_paths.cpp +#ifdef ZEN_WIN + wxToolTip::SetMaxWidth(-1); //disable tooltip wrapping -> Windows only +#endif + //Windows User Experience Interaction Guidelines: tool tips should have 5s timeout, info tips no timeout => compromise: + wxToolTip::SetAutoPop(7000); //http://msdn.microsoft.com/en-us/library/windows/desktop/aa511495.aspx + + SetAppName(L"RealtimeSync"); + + initResourceImages(getResourceDir() + Zstr("Resources.zip")); //do not call wxApp::OnInit() to avoid using default commandline parser @@ -101,7 +110,7 @@ void Application::onEnterEventLoop(wxEvent& event) } catch (const FileError& e) { - wxMessageBox(e.toString(), L"RealtimeSync" + _("Error"), wxOK | wxICON_ERROR); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); //continue! } @@ -119,7 +128,7 @@ void Application::onEnterEventLoop(wxEvent& event) filename += Zstr(".ffs_batch"); else { - wxMessageBox(replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(filename)), L"RealtimeSync" + _("Error"), wxOK | wxICON_ERROR); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setMainInstructions(replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(filename)))); return; } } diff --git a/RealtimeSync/gui_generated.cpp b/RealtimeSync/gui_generated.cpp index 16b52345..3b3ad3fe 100644 --- a/RealtimeSync/gui_generated.cpp +++ b/RealtimeSync/gui_generated.cpp @@ -13,7 +13,7 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( 420,350 ), wxDefaultSize ); + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); m_menubar1 = new wxMenuBar( 0 ); @@ -36,7 +36,7 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr m_menuHelp = new wxMenu(); wxMenuItem* m_menuItemContent; - m_menuItemContent = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&Content") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuItemContent = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); m_menuHelp->Append( m_menuItemContent ); m_menuHelp->AppendSeparator(); @@ -50,6 +50,9 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr bSizerMain = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer161; + bSizer161 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer16; bSizer16 = new wxBoxSizer( wxHORIZONTAL ); @@ -64,27 +67,30 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr m_staticText3 = new wxStaticText( this, wxID_ANY, _("1. Select folders to watch."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText3->Wrap( -1 ); - bSizer15->Add( m_staticText3, 0, wxLEFT, 10 ); + bSizer15->Add( m_staticText3, 0, 0, 5 ); m_staticText4 = new wxStaticText( this, wxID_ANY, _("2. Enter a command line."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText4->Wrap( -1 ); - bSizer15->Add( m_staticText4, 0, wxLEFT, 10 ); + bSizer15->Add( m_staticText4, 0, 0, 5 ); m_staticText5 = new wxStaticText( this, wxID_ANY, _("3. Press 'Start'."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText5->Wrap( -1 ); - bSizer15->Add( m_staticText5, 0, wxLEFT, 10 ); + bSizer15->Add( m_staticText5, 0, 0, 5 ); - bSizer16->Add( bSizer15, 0, wxTOP|wxLEFT, 5 ); + bSizer16->Add( bSizer15, 0, wxALL, 5 ); - bSizerMain->Add( bSizer16, 0, 0, 5 ); + bSizer161->Add( bSizer16, 0, 0, 5 ); m_staticText811 = new wxStaticText( this, wxID_ANY, _("To get started just import a .ffs_batch file."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText811->Wrap( -1 ); m_staticText811->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizerMain->Add( m_staticText811, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer161->Add( m_staticText811, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizerMain->Add( bSizer161, 0, wxALL|wxEXPAND, 5 ); m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); bSizerMain->Add( m_staticline2, 0, wxEXPAND, 5 ); @@ -95,9 +101,12 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr wxBoxSizer* bSizer1; bSizer1 = new wxBoxSizer( wxVERTICAL ); - m_staticText7 = new wxStaticText( m_panelMain, wxID_ANY, _("Folders to watch"), wxDefaultPosition, wxDefaultSize, 0 ); + wxBoxSizer* bSizer151; + bSizer151 = new wxBoxSizer( wxVERTICAL ); + + m_staticText7 = new wxStaticText( m_panelMain, wxID_ANY, _("Folders to watch:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText7->Wrap( -1 ); - bSizer1->Add( m_staticText7, 0, wxALL, 5 ); + bSizer151->Add( m_staticText7, 0, wxALL, 5 ); m_panelMainFolder = new wxPanel( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panelMainFolder->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); @@ -150,7 +159,7 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr m_panelMainFolder->SetSizer( fgSizer1 ); m_panelMainFolder->Layout(); fgSizer1->Fit( m_panelMainFolder ); - bSizer1->Add( m_panelMainFolder, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + bSizer151->Add( m_panelMainFolder, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); m_scrolledWinFolders = new wxScrolledWindow( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); m_scrolledWinFolders->SetScrollRate( 10, 10 ); @@ -162,7 +171,10 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr m_scrolledWinFolders->SetSizer( bSizerFolders ); m_scrolledWinFolders->Layout(); bSizerFolders->Fit( m_scrolledWinFolders ); - bSizer1->Add( m_scrolledWinFolders, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer151->Add( m_scrolledWinFolders, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer1->Add( bSizer151, 1, wxALL|wxEXPAND, 5 ); m_staticline212 = new wxStaticLine( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); bSizer1->Add( m_staticline212, 0, wxEXPAND, 5 ); @@ -170,12 +182,9 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr wxBoxSizer* bSizer14; bSizer14 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText8 = new wxStaticText( m_panelMain, wxID_ANY, _("Idle time [seconds]"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText8 = new wxStaticText( m_panelMain, wxID_ANY, _("Idle time (in seconds):"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText8->Wrap( -1 ); - bSizer14->Add( m_staticText8, 0, wxALL, 5 ); - - - bSizer14->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer14->Add( m_staticText8, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); m_spinCtrlDelay = new wxSpinCtrl( m_panelMain, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); m_spinCtrlDelay->SetToolTip( _("Idle time between last detected change and execution of command") ); @@ -183,20 +192,26 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr bSizer14->Add( m_spinCtrlDelay, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - bSizer1->Add( bSizer14, 0, wxALIGN_RIGHT|wxEXPAND, 5 ); + bSizer1->Add( bSizer14, 0, wxALIGN_RIGHT|wxEXPAND|wxALL, 5 ); m_staticline211 = new wxStaticLine( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); bSizer1->Add( m_staticline211, 0, wxEXPAND, 5 ); - m_staticText6 = new wxStaticText( m_panelMain, wxID_ANY, _("Command line"), wxDefaultPosition, wxDefaultSize, 0 ); + wxBoxSizer* bSizer141; + bSizer141 = new wxBoxSizer( wxVERTICAL ); + + m_staticText6 = new wxStaticText( m_panelMain, wxID_ANY, _("Command line:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText6->Wrap( -1 ); - bSizer1->Add( m_staticText6, 0, wxALL, 5 ); + bSizer141->Add( m_staticText6, 0, wxALL, 5 ); m_textCtrlCommand = new wxTextCtrl( m_panelMain, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_textCtrlCommand->SetMaxLength( 0 ); m_textCtrlCommand->SetToolTip( _("The command is triggered if:\n- files or subfolders change\n- new folders arrive (e.g. USB stick insert)") ); - bSizer1->Add( m_textCtrlCommand, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer141->Add( m_textCtrlCommand, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizer1->Add( bSizer141, 0, wxALL|wxEXPAND, 5 ); m_panelMain->SetSizer( bSizer1 ); @@ -207,7 +222,7 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr m_staticline5 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); bSizerMain->Add( m_staticline5, 0, wxEXPAND, 5 ); - m_buttonStart = new zen::BitmapTextButton( this, wxID_OK, _("Start"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonStart = new zen::BitmapTextButton( this, wxID_OK, _("&Start"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_buttonStart->SetDefault(); m_buttonStart->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); @@ -218,6 +233,8 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr this->Layout(); bSizerMain->Fit( this ); + this->Centre( wxBOTH ); + // Connect Events this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDlgGenerated::OnClose ) ); this->Connect( m_menuItem13->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDlgGenerated::OnConfigLoad ) ); @@ -232,17 +249,6 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr MainDlgGenerated::~MainDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDlgGenerated::OnClose ) ); - this->Disconnect( wxID_OPEN, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDlgGenerated::OnConfigLoad ) ); - this->Disconnect( wxID_SAVEAS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDlgGenerated::OnConfigSave ) ); - this->Disconnect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDlgGenerated::OnMenuQuit ) ); - this->Disconnect( wxID_HELP, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDlgGenerated::OnShowHelp ) ); - this->Disconnect( wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDlgGenerated::OnMenuAbout ) ); - m_bpButtonAddFolder->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnAddFolder ), NULL, this ); - m_bpButtonRemoveTopFolder->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnRemoveTopFolder ), NULL, this ); - m_buttonStart->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnStart ), NULL, this ); - } FolderGenerated::FolderGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) @@ -275,75 +281,3 @@ FolderGenerated::FolderGenerated( wxWindow* parent, wxWindowID id, const wxPoint FolderGenerated::~FolderGenerated() { } - -ErrorDlgGenerated::ErrorDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) -{ - this->SetSizeHints( wxSize( 300,160 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer24; - bSizer24 = new wxBoxSizer( wxVERTICAL ); - - m_panel3 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel3->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer16; - bSizer16 = new wxBoxSizer( wxVERTICAL ); - - - bSizer16->Add( 0, 10, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer26; - bSizer26 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmap10 = new wxStaticBitmap( m_panel3, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer26->Add( m_bitmap10, 0, wxRIGHT|wxLEFT, 10 ); - - m_textCtrl8 = new wxTextCtrl( m_panel3, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 400,150 ), wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER ); - bSizer26->Add( m_textCtrl8, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP, 5 ); - - - bSizer16->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - m_panel3->SetSizer( bSizer16 ); - m_panel3->Layout(); - bSizer16->Fit( m_panel3 ); - bSizer24->Add( m_panel3, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline2, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonRetry = new wxButton( this, wxID_RETRY, _("&Retry"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonRetry->SetDefault(); - bSizerStdButtons->Add( m_buttonRetry, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer24->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - this->SetSizer( bSizer24 ); - this->Layout(); - bSizer24->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ErrorDlgGenerated::OnClose ) ); - m_buttonRetry->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnRetry ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnAbort ), NULL, this ); -} - -ErrorDlgGenerated::~ErrorDlgGenerated() -{ - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ErrorDlgGenerated::OnClose ) ); - m_buttonRetry->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnRetry ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnAbort ), NULL, this ); - -} diff --git a/RealtimeSync/gui_generated.h b/RealtimeSync/gui_generated.h index 182f75ca..a816e10a 100644 --- a/RealtimeSync/gui_generated.h +++ b/RealtimeSync/gui_generated.h @@ -32,10 +32,8 @@ namespace zen { class BitmapTextButton; } #include <wx/scrolwin.h> #include <wx/spinctrl.h> #include <wx/frame.h> -#include <wx/statbmp.h> -#include <wx/dialog.h> -#include "../zen/i18n.h" +#include "zen/i18n.h" /////////////////////////////////////////////////////////////////////////// @@ -91,7 +89,7 @@ protected: public: - MainDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("RealtimeSync - Automated Synchronization"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); + MainDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); ~MainDlgGenerated(); @@ -116,33 +114,4 @@ public: }; -/////////////////////////////////////////////////////////////////////////////// -/// Class ErrorDlgGenerated -/////////////////////////////////////////////////////////////////////////////// -class ErrorDlgGenerated : public wxDialog -{ -private: - -protected: - wxPanel* m_panel3; - wxStaticBitmap* m_bitmap10; - wxTextCtrl* m_textCtrl8; - wxStaticLine* m_staticline2; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonRetry; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnRetry( wxCommandEvent& event ) { event.Skip(); } - virtual void OnAbort( wxCommandEvent& event ) { event.Skip(); } - - -public: - - ErrorDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Error"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~ErrorDlgGenerated(); - -}; - #endif //__GUI_GENERATED_H__ diff --git a/RealtimeSync/main_dlg.cpp b/RealtimeSync/main_dlg.cpp index 7b3e0f92..f29f396b 100644 --- a/RealtimeSync/main_dlg.cpp +++ b/RealtimeSync/main_dlg.cpp @@ -5,24 +5,27 @@ // ************************************************************************** #include "main_dlg.h" -#include "resources.h" -#include <wx/msgdlg.h> #include <wx/wupdlock.h> #include <wx/filedlg.h> #include <wx+/bitmap_button.h> #include <wx+/string_conv.h> #include <wx+/mouse_move_dlg.h> #include <wx+/font_size.h> +#include <wx+/popup_dlg.h> +#include <wx+/image_resources.h> #include <zen/assert_static.h> #include <zen/file_handling.h> #include <zen/build_info.h> #include "xml_proc.h" #include "tray_menu.h" #include "xml_ffs.h" +#include "app_icon.h" #include "../lib/help_provider.h" #include "../lib/process_xml.h" #include "../lib/ffs_paths.h" -#ifdef ZEN_MAC +#ifdef ZEN_LINUX +#include <gtk/gtk.h> +#elif defined ZEN_MAC #include <ApplicationServices/ApplicationServices.h> #endif @@ -34,7 +37,14 @@ class DirectoryPanel : public FolderGenerated public: DirectoryPanel(wxWindow* parent) : FolderGenerated(parent), - dirName(*this, *m_buttonSelectDir, *m_txtCtrlDirectory) {} + dirName(*this, *m_buttonSelectDir, *m_txtCtrlDirectory) + { +#ifdef ZEN_LINUX + //file drag and drop directly into the text control unhelpfully inserts in format "file://..<cr><nl>"; see folder_history_box.cpp + if (GtkWidget* widget = m_txtCtrlDirectory->GetConnectWidget()) + ::gtk_drag_dest_unset(widget); +#endif + } void setName(const wxString& dirname) { dirName.setName(dirname); } wxString getName() const { return dirName.getName(); } @@ -55,10 +65,16 @@ MainDialog::MainDialog(wxDialog* dlg, const Zstring& cfgFileName) { #ifdef ZEN_WIN new MouseMoveWindow(*this); //ownership passed to "this" + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! #endif - wxWindowUpdateLocker dummy(this); //avoid display distortion - SetIcon(GlobalResources::instance().programIconRTS); //set application icon +#ifdef ZEN_LINUX + //file drag and drop directly into the text control unhelpfully inserts in format "file://..<cr><nl>"; see folder_history_box.cpp + if (GtkWidget* widget = m_txtCtrlDirectoryMain->GetConnectWidget()) + ::gtk_drag_dest_unset(widget); +#endif + + SetIcon(getRtsIcon()); //set application icon setRelativeFontSize(*m_buttonStart, 1.5); @@ -67,8 +83,6 @@ MainDialog::MainDialog(wxDialog* dlg, const Zstring& cfgFileName) m_bpButtonAddFolder ->SetBitmapLabel(getResourceImage(L"item_add")); m_bpButtonRemoveTopFolder->SetBitmapLabel(getResourceImage(L"item_remove")); - ///m_buttonStart ->setBitmapFront(getResourceImage(L"startRts"), 5); - setBitmapTextLabel(*m_buttonStart, getResourceImage(L"startRts").ConvertToImage(), m_buttonStart->GetLabel(), 5, 8); @@ -89,12 +103,12 @@ MainDialog::MainDialog(wxDialog* dlg, const Zstring& cfgFileName) rts::readRealOrBatchConfig(currentConfigFile, newConfig); //throw FfsXmlError loadCfgSuccess = true; } - catch (const xmlAccess::FfsXmlError& error) + catch (const xmlAccess::FfsXmlError& e) { - if (error.getSeverity() == xmlAccess::FfsXmlError::WARNING) - wxMessageBox(error.toString(),L"RealtimeSync" + _("Warning"), wxOK | wxICON_WARNING, this); + if (e.getSeverity() == xmlAccess::FfsXmlError::WARNING) + showNotificationDialog(this, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); else - wxMessageBox(error.toString(), L"RealtimeSync" + _("Error"), wxOK | wxICON_ERROR, this); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } const bool startWatchingImmediately = loadCfgSuccess && !cfgFileName.empty(); @@ -102,15 +116,6 @@ MainDialog::MainDialog(wxDialog* dlg, const Zstring& cfgFileName) setConfiguration(newConfig); setLastUsedConfig(currentConfigFile); //----------------------------------------------------------------------------------------- - //Layout(); - //Fit(); - - m_scrolledWinFolders->Fit(); //adjust scrolled window size - m_scrolledWinFolders->Layout(); //fix small layout problem - m_panelMain->Layout(); //adjust stuff inside scrolled window - Fit(); //adapt dialog size - - Center(); if (startWatchingImmediately) //start watch mode directly { @@ -124,9 +129,9 @@ MainDialog::MainDialog(wxDialog* dlg, const Zstring& cfgFileName) Show(); #ifdef ZEN_MAC ProcessSerialNumber psn = { 0, kCurrentProcess }; + ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon, even if we're not an application bundle //if the executable is not yet in a bundle or if it is called through a launcher, we need to set focus manually: - ::SetFrontProcess(&psn); #endif } @@ -147,9 +152,9 @@ MainDialog::~MainDialog() { writeRealConfig(currentCfg, lastConfigFileName()); //throw FfsXmlError } - catch (const xmlAccess::FfsXmlError& error) + catch (const xmlAccess::FfsXmlError& e) { - wxMessageBox(error.toString().c_str(), L"RealtimeSync" + _("Error"), wxOK | wxICON_ERROR, this); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } } @@ -193,17 +198,20 @@ void MainDialog::OnMenuAbout(wxCommandEvent& event) build += L" x86"; assert_static(zen::is32BitBuild || zen::is64BitBuild); - wxMessageBox(L"RealtimeSync" L"\n\n" + replaceCpy(_("Build: %x"), L"%x", build), _("About"), wxOK, this); + showNotificationDialog(this, DialogInfoType::INFO, PopupDialogCfg(). + setTitle(_("About")). + setMainInstructions(L"RealtimeSync" L"\n\n" + replaceCpy(_("Build: %x"), L"%x", build))); } void MainDialog::OnKeyPressed(wxKeyEvent& event) { const int keyCode = event.GetKeyCode(); - if (keyCode == WXK_ESCAPE) + { Close(); - + return; + } event.Skip(); } @@ -230,8 +238,9 @@ void MainDialog::OnStart(wxCommandEvent& event) } Show(); //don't show for EXIT_APP #ifdef ZEN_MAC + ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly + //why isn't this covered by wxWindows::Raise()?? ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon again - ::SetFrontProcess(&psn); //why isn't this covered by wxWindows::Raise()?? #endif Raise(); } @@ -266,7 +275,7 @@ void MainDialog::OnConfigSave(wxCommandEvent& event) } catch (const xmlAccess::FfsXmlError& e) { - wxMessageBox(e.toString().c_str(), L"RealtimeSync" + _("Error"), wxOK | wxICON_ERROR, this); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } } @@ -279,13 +288,13 @@ void MainDialog::loadConfig(const Zstring& filename) { rts::readRealOrBatchConfig(filename, newConfig); } - catch (const xmlAccess::FfsXmlError& error) + catch (const xmlAccess::FfsXmlError& e) { - if (error.getSeverity() == xmlAccess::FfsXmlError::WARNING) - wxMessageBox(error.toString(), L"RealtimeSync" + _("Warning"), wxOK | wxICON_WARNING, this); + if (e.getSeverity() == xmlAccess::FfsXmlError::WARNING) + showNotificationDialog(this, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); else { - wxMessageBox(error.toString(), L"RealtimeSync" + _("Error"), wxOK | wxICON_ERROR, this); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); return; } } @@ -300,7 +309,7 @@ void MainDialog::setLastUsedConfig(const Zstring& filename) //set title if (filename == lastConfigFileName()) { - SetTitle(_("RealtimeSync - Automated Synchronization")); + SetTitle(L"RealtimeSync - " + _("Automated Synchronization")); currentConfigFileName.clear(); } else @@ -317,7 +326,7 @@ void MainDialog::OnConfigLoad(wxCommandEvent& event) wxEmptyString, utfCvrtTo<wxString>(beforeLast(currentConfigFileName, FILE_NAME_SEPARATOR)), //default dir; empty string if / not found wxEmptyString, - wxString(L"RealtimeSync (*.ffs_real;*.ffs_batch)|*.ffs_real;*.ffs_batch") + L"|" +_("All files") + L" (*.*)|*", + wxString(L"RealtimeSync (*.ffs_real; *.ffs_batch)|*.ffs_real;*.ffs_batch") + L"|" +_("All files") + L" (*.*)|*", wxFD_OPEN); if (filePicker.ShowModal() == wxID_OK) loadConfig(utfCvrtTo<Zstring>(filePicker.GetPath())); @@ -336,7 +345,6 @@ void MainDialog::setConfiguration(const xmlAccess::XmlRealConfig& cfg) { //clear existing folders dirNameFirst->setName(wxString()); - clearAddFolders(); if (!cfg.directories.empty()) @@ -389,10 +397,10 @@ void MainDialog::OnRemoveFolder(wxCommandEvent& event) { //find folder pair originating the event const wxObject* const eventObj = event.GetEventObject(); - for (std::vector<DirectoryPanel*>::const_iterator i = dirNamesExtra.begin(); i != dirNamesExtra.end(); ++i) - if (eventObj == static_cast<wxObject*>((*i)->m_bpButtonRemoveFolder)) + for (auto it = dirNamesExtra.begin(); it != dirNamesExtra.end(); ++it) + if (eventObj == static_cast<wxObject*>((*it)->m_bpButtonRemoveFolder)) { - removeAddFolder(i - dirNamesExtra.begin()); + removeAddFolder(it - dirNamesExtra.begin()); return; } } @@ -423,7 +431,9 @@ void MainDialog::addFolder(const std::vector<Zstring>& newFolders, bool addFront if (newFolders.size() == 0) return; - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif int folderHeight = 0; for (auto it = newFolders.begin(); it != newFolders.end(); ++it) @@ -459,19 +469,18 @@ void MainDialog::addFolder(const std::vector<Zstring>& newFolders, bool addFront //adapt delete top folder pair button m_bpButtonRemoveTopFolder->Show(); - m_panelMainFolder->Layout(); - //update controls - m_scrolledWinFolders->Fit(); //adjust scrolled window size - m_scrolledWinFolders->Layout(); //fix small layout problem - m_panelMain->Layout(); //adjust stuff inside scrolled window - Fit(); //adapt dialog size + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + Layout(); + Refresh(); //remove a little flicker near the start button } void MainDialog::removeAddFolder(size_t pos) { - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif if (pos < dirNamesExtra.size()) { @@ -498,24 +507,28 @@ void MainDialog::removeAddFolder(size_t pos) m_panelMainFolder->Layout(); } - //update controls - m_scrolledWinFolders->Fit(); //adjust scrolled window size - m_panelMain->Layout(); //adjust stuff inside scrolled window - Fit(); //adapt dialog size + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + Layout(); + Refresh(); //remove a little flicker near the start button } } void MainDialog::clearAddFolders() { - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif - dirNamesExtra.clear(); bSizerFolders->Clear(true); + dirNamesExtra.clear(); + + m_scrolledWinFolders->SetMinSize(wxSize(-1, 0)); m_bpButtonRemoveTopFolder->Hide(); m_panelMainFolder->Layout(); - m_scrolledWinFolders->SetMinSize(wxSize(-1, 0)); - Fit(); //adapt dialog size + GetSizer()->SetSizeHints(this); //~=Fit() + Layout(); + Refresh(); //remove a little flicker near the start button } diff --git a/RealtimeSync/makefile b/RealtimeSync/makefile index 50a08049..8098d586 100644 --- a/RealtimeSync/makefile +++ b/RealtimeSync/makefile @@ -42,7 +42,7 @@ CXXFLAGS += -DZEN_MAC WX_CONFIG_BIN =$(HOME)/Desktop/wxWidgets-2.9.5/lib/release/bin/wx-config CXXFLAGS += -I$(HOME)/Desktop/boost_1_54_0 BOOST_LIB_DIR =$(HOME)/Desktop/boost_1_54_0/stage/lib -MACOS_SDK =-mmacosx-version-min=10.7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk +MACOS_SDK =-mmacosx-version-min=10.7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk #-Wl,-Bstatic not supported on OSX! # link wxWidgets and boost statically -> check dependencies with: otool -L RealtimeSync @@ -56,7 +56,6 @@ CPP_LIST= #internal list of all *.cpp files needed for compilation CPP_LIST+=application.cpp CPP_LIST+=gui_generated.cpp CPP_LIST+=main_dlg.cpp -CPP_LIST+=resources.cpp CPP_LIST+=tray_menu.cpp CPP_LIST+=monitor.cpp CPP_LIST+=xml_ffs.cpp @@ -74,7 +73,11 @@ CPP_LIST+=../zen/file_handling.cpp CPP_LIST+=../zen/file_io.cpp CPP_LIST+=../zen/file_traverser.cpp CPP_LIST+=../zen/zstring.cpp +CPP_LIST+=../zen/format_unit.cpp CPP_LIST+=../wx+/image_tools.cpp +CPP_LIST+=../wx+/image_resources.cpp +CPP_LIST+=../wx+/popup_dlg.cpp +CPP_LIST+=../wx+/popup_dlg_generated.cpp #list of all *.o files (we need the "RTS" subdirectory to handle "../*.cpp" files OBJECT_LIST=$(CPP_LIST:%.cpp=../OBJ/RTS_GCC_Make_Release/RTS/%.o) diff --git a/RealtimeSync/resources.cpp b/RealtimeSync/resources.cpp deleted file mode 100644 index 34c9e8dc..00000000 --- a/RealtimeSync/resources.cpp +++ /dev/null @@ -1,79 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "resources.h" -#include <memory> -#include <zen/utf.h> -#include <wx/wfstream.h> -#include <wx/zipstrm.h> -#include <wx/image.h> -#include "../lib/ffs_paths.h" - -using namespace zen; - - -const GlobalResources& GlobalResources::instance() -{ - static GlobalResources inst; - return inst; -} - - -GlobalResources::GlobalResources() -{ - wxFFileInputStream input(utfCvrtTo<wxString>(zen::getResourceDir()) + L"Resources.zip"); - if (input.IsOk()) //if not... we don't want to react too harsh here - { - //activate support for .png files - wxImage::AddHandler(new wxPNGHandler); //ownership passed - - wxZipInputStream resourceFile(input, wxConvUTF8); - //do NOT rely on wxConvLocal! May result in "Cannot convert from the charset 'Unknown encoding (-1)'!" - - while (true) - { - std::unique_ptr<wxZipEntry> entry(resourceFile.GetNextEntry()); - if (entry.get() == nullptr) - break; - - const wxString name = entry->GetName(); - - //generic image loading - if (endsWith(name, L".png")) - bitmaps.insert(std::make_pair(name, wxImage(resourceFile, wxBITMAP_TYPE_PNG))); - } - } - -#ifdef ZEN_WIN - //for compatibility it seems we need to stick with a "real" icon - programIconRTS = wxIcon(L"A_RTS_ICON"); - -#elif defined ZEN_LINUX - programIconRTS.CopyFromBitmap(getImage(L"RealtimeSync")); - -#elif defined ZEN_MAC - assert(getImage(L"RealtimeSync").GetWidth () == getImage(L"RealtimeSync").GetHeight() && - getImage(L"RealtimeSync").GetWidth() % 128 == 0); - //wxWidgets' bitmap to icon conversion on OS X can only deal with very specific sizes - programIconRTS.CopyFromBitmap(getImage(L"RealtimeSync").ConvertToImage().Scale(128, 128, wxIMAGE_QUALITY_HIGH)); -#endif - -} - - -const wxBitmap& GlobalResources::getImage(const wxString& name) const -{ - auto it = bitmaps.find(!contains(name, L'.') ? //assume .png ending if nothing else specified - name + L".png" : - name); - if (it != bitmaps.end()) - return it->second; - else - { - assert(false); - return wxNullBitmap; - } -} diff --git a/RealtimeSync/resources.h b/RealtimeSync/resources.h deleted file mode 100644 index 7cec3a73..00000000 --- a/RealtimeSync/resources.h +++ /dev/null @@ -1,36 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef RESOURCES_H_INCLUDED_870857342085670826521345 -#define RESOURCES_H_INCLUDED_870857342085670826521345 - -#include <map> -#include <wx/bitmap.h> -#include <wx/icon.h> - - -class GlobalResources -{ -public: - static const GlobalResources& instance(); - - const wxBitmap& getImage(const wxString& name) const; - - //image resource objects - wxIcon programIconRTS; - -private: - GlobalResources(); - GlobalResources(const GlobalResources&); //=delete - GlobalResources& operator=(const GlobalResources&); //=delete - - std::map<wxString, wxBitmap> bitmaps; -}; - -inline -const wxBitmap& getResourceImage(const wxString& name) { return GlobalResources::instance().getImage(name); } - -#endif //RESOURCES_H_INCLUDED_870857342085670826521345 diff --git a/RealtimeSync/tray_menu.cpp b/RealtimeSync/tray_menu.cpp index e1cf8cad..6e67b5ec 100644 --- a/RealtimeSync/tray_menu.cpp +++ b/RealtimeSync/tray_menu.cpp @@ -5,20 +5,17 @@ // ************************************************************************** #include "tray_menu.h" -#include <zen/build_info.h> -#include <zen/tick_count.h> #include <zen/thread.h> -#include <wx+/mouse_move_dlg.h> -#include <wx+/image_tools.h> -//#include <wx+/string_conv.h> -#include <wx+/shell_execute.h> -#include <wx+/std_button_order.h> +#include <zen/tick_count.h> #include <wx/taskbar.h> #include <wx/icon.h> //Linux needs this #include <wx/app.h> +#include <wx/menu.h> #include <wx/timer.h> -#include "resources.h" -#include "gui_generated.h" +#include <wx+/image_tools.h> +#include <zen/shell_execute.h> +#include <wx+/popup_dlg.h> +#include <wx+/image_resources.h> #include "monitor.h" #include "../lib/resolve_path.h" @@ -67,7 +64,7 @@ public: trayBmp(getResourceImage(L"RTS_tray_24x24")) //use a 24x24 bitmap for perfect fit #endif { - Connect(wxEVT_TASKBAR_LEFT_DCLICK, wxCommandEventHandler(TrayIconObject::OnDoubleClick), nullptr, this); + Connect(wxEVT_TASKBAR_LEFT_DCLICK, wxEventHandler(TrayIconObject::OnDoubleClick), nullptr, this); setMode(mode); } @@ -122,24 +119,29 @@ private: { CONTEXT_RESTORE = 1, //wxWidgets: "A MenuItem ID of zero does not work under Mac" CONTEXT_SHOW_ERROR, - CONTEXT_ABORT = wxID_EXIT, - CONTEXT_ABOUT = wxID_ABOUT + CONTEXT_ABORT = wxID_EXIT }; virtual wxMenu* CreatePopupMenu() { wxMenu* contextMenu = new wxMenu; + + wxMenuItem* defaultItem = nullptr; switch (mode) { case TRAY_MODE_ACTIVE: case TRAY_MODE_WAITING: - contextMenu->Append(CONTEXT_RESTORE, _("&Restore")); + defaultItem = new wxMenuItem(contextMenu, CONTEXT_RESTORE, _("&Restore")); break; case TRAY_MODE_ERROR: - contextMenu->Append(CONTEXT_SHOW_ERROR, _("&Show error")); + defaultItem = new wxMenuItem(contextMenu, CONTEXT_SHOW_ERROR, _("&Show error")); break; } - contextMenu->Append(CONTEXT_ABOUT, _("&About")); +#ifdef ZEN_WIN //no wxMenuItem::SetFont() on Linux and OS X: wasn't wxWidgets supposed to be *portable* at some point in time????? + defaultItem->SetFont(wxNORMAL_FONT->Bold()); +#endif + contextMenu->Append(defaultItem); + contextMenu->AppendSeparator(); contextMenu->Append(CONTEXT_ABORT, _("&Exit")); //event handling @@ -163,34 +165,10 @@ private: case CONTEXT_SHOW_ERROR: showErrorMsgRequested = true; break; - - case CONTEXT_ABOUT: - { - //ATTENTION: the modal dialog below does NOT disable all GUI input, e.g. user may still double-click on tray icon - //no crash in this context, but the double-click is remembered and executed after the modal dialog quits - SetEvtHandlerEnabled(false); - ZEN_ON_SCOPE_EXIT(SetEvtHandlerEnabled(true)); - - wxString build = __TDATE__; -#if wxUSE_UNICODE - build += L" - Unicode"; -#else - build += L" - ANSI"; -#endif //wxUSE_UNICODE - - if (zen::is64BitBuild) - build += L" x64"; - else - build += L" x86"; - assert_static(zen::is32BitBuild || zen::is64BitBuild); - - wxMessageBox(L"RealtimeSync" L"\n\n" + replaceCpy(_("Build: %x"), L"%x", build), _("About"), wxOK); - } - break; } } - void OnDoubleClick(wxCommandEvent& event) + void OnDoubleClick(wxEvent& event) { switch (mode) { @@ -262,85 +240,6 @@ private: }; //############################################################################################################## - -//#define ERROR_DLG_ENABLE_TIMEOUT -class ErrorDlgWithTimeout : public ErrorDlgGenerated -{ -public: - ErrorDlgWithTimeout(wxWindow* parent, const wxString& messageText) : - ErrorDlgGenerated(parent) -#ifdef ERROR_DLG_ENABLE_TIMEOUT - , secondsLeft(15) //give user some time to read msg!? -#endif - { -#ifdef ZEN_WIN - new zen::MouseMoveWindow(*this); //allow moving main dialog by clicking (nearly) anywhere...; ownership passed to "this" -#endif - setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonRetry).setCancel(m_buttonCancel)); - - m_bitmap10->SetBitmap(getResourceImage(L"msg_error")); - m_textCtrl8->SetValue(messageText); - -#ifdef ERROR_DLG_ENABLE_TIMEOUT - //count down X seconds then automatically press "retry" - timer.Connect(wxEVT_TIMER, wxEventHandler(ErrorDlgWithTimeout::OnTimerEvent), nullptr, this); - timer.Start(1000); //timer interval in ms - updateButtonLabel(); -#endif - Fit(); //child-element widths have changed: image was set - m_buttonRetry->SetFocus(); - } - - enum ButtonPressed - { - BUTTON_RETRY, - BUTTON_ABORT - }; - -private: -#ifdef ERROR_DLG_ENABLE_TIMEOUT - void OnTimerEvent(wxEvent& event) - { - if (secondsLeft <= 0) - { - EndModal(BUTTON_RETRY); - return; - } - --secondsLeft; - updateButtonLabel(); - } - - void updateButtonLabel() - { - m_buttonRetry->SetLabel(_("&Retry") + L" (" + replaceCpy(_P("1 sec", "%x sec", secondsLeft), L"%x", numberTo<std::wstring>(secondsLeft)) + L")"); - Layout(); - } -#endif - - void OnClose(wxCloseEvent& event) { EndModal(BUTTON_ABORT); } - void OnRetry(wxCommandEvent& event) { EndModal(BUTTON_RETRY); } - void OnAbort(wxCommandEvent& event) { EndModal(BUTTON_ABORT); } - -#ifdef ERROR_DLG_ENABLE_TIMEOUT - int secondsLeft; - wxTimer timer; -#endif -}; - - -bool reportErrorTimeout(const std::wstring& msg) //return true: "retry"; false: "abort" -{ - ErrorDlgWithTimeout errorDlg(nullptr, msg); - errorDlg.Raise(); - switch (static_cast<ErrorDlgWithTimeout::ButtonPressed>(errorDlg.ShowModal())) - { - case ErrorDlgWithTimeout::BUTTON_RETRY: - return true; - case ErrorDlgWithTimeout::BUTTON_ABORT: - return false; - } - return false; -} } @@ -351,7 +250,7 @@ rts::AbortReason rts::startDirectoryMonitor(const xmlAccess::XmlRealConfig& conf if (dirNamesNonFmt.empty()) { - wxMessageBox(_("A folder input field is empty."), L"RealtimeSync" + _("Error"), wxOK | wxICON_ERROR); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setMainInstructions(_("A folder input field is empty."))); return SHOW_GUI; } @@ -360,7 +259,7 @@ rts::AbortReason rts::startDirectoryMonitor(const xmlAccess::XmlRealConfig& conf if (cmdLine.empty()) { - wxMessageBox(_("Invalid command line:") + L" \"\"", L"RealtimeSync" + _("Error"), wxOK | wxICON_ERROR); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setMainInstructions(_("Incorrect command line:") + L" \"\"")); return SHOW_GUI; } @@ -385,7 +284,15 @@ rts::AbortReason rts::startDirectoryMonitor(const xmlAccess::XmlRealConfig& conf virtual void executeExternalCommand() { auto cmdLineExp = expandMacros(cmdLine_); - zen::shellExecute(cmdLineExp, zen::EXEC_TYPE_SYNC); + try + { + shellExecute2(cmdLineExp, EXEC_TYPE_SYNC); //throw FileError + } + catch (const FileError& e) + { + warn_static("fix dialog hiding on OSX !!") + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); + } } virtual void requestUiRefresh() @@ -406,12 +313,14 @@ rts::AbortReason rts::startDirectoryMonitor(const xmlAccess::XmlRealConfig& conf trayIcon.doUiRefreshNow(); //throw AbortMonitoring if (trayIcon.getShowErrorRequested()) - { - if (reportErrorTimeout(msg)) //return true: "retry"; false: "abort" - return; - else - throw AbortMonitoring(SHOW_GUI); - } + switch (showConfirmationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg(). + setDetailInstructions(msg), _("&Retry"))) + { + case ConfirmationButton::DO_IT: //retry + return; + case ConfirmationButton::CANCEL: + throw AbortMonitoring(SHOW_GUI); + } boost::this_thread::sleep(boost::posix_time::milliseconds(UI_UPDATE_INTERVAL)); } } diff --git a/algorithm.cpp b/algorithm.cpp index dd068e0d..44e3f643 100644 --- a/algorithm.cpp +++ b/algorithm.cpp @@ -12,7 +12,7 @@ #include <zen/stl_tools.h> #include <zen/scope_guard.h> #include <zen/thread.h> -#include "lib/resources.h" +#include <wx+/image_resources.h> #include "lib/norm_filter.h" #include "lib/db_file.h" #include "lib/cmp_filetime.h" diff --git a/comparison.cpp b/comparison.cpp index cdf2308f..f65d5b26 100644 --- a/comparison.cpp +++ b/comparison.cpp @@ -80,18 +80,17 @@ std::set<Zstring, LessFilename> determineExistentDirs(const std::set<Zstring, Le { std::set<Zstring, LessFilename> dirsEx; - tryReportingError2([&] - { - dirsEx = getExistingDirsUpdating(dirnames, allowUserInteraction, callback); //check *all* directories on each try! - - //get list of not existing directories - std::set<Zstring, LessFilename> dirsMissing = dirnames; - set_remove_if(dirsMissing, [&](const Zstring& dirname) { return dirname.empty() || dirsEx.find(dirname) != dirsEx.end(); }); + warn_static("retry klappt nicht für [] + env vars!") - if (!dirsMissing.empty()) + tryReportingError([&] + { + std::set<Zstring, LessFilename> missing; + dirsEx = getExistingDirsUpdating(dirnames, missing, allowUserInteraction, callback); //check *all* directories on each try! + if (!missing.empty()) { std::wstring msg = _("Cannot find the following folders:") + L"\n"; - std::for_each(dirsMissing.begin(), dirsMissing.end(), [&](const Zstring& dirname) { msg += std::wstring(L"\n") + dirname; }); + for (const Zstring& dirname : missing) + msg += std::wstring(L"\n") + dirname; throw FileError(msg, _("You can ignore this error to consider each folder as empty. The folders then will be created automatically during synchronization.")); } }, callback); @@ -102,7 +101,7 @@ std::set<Zstring, LessFilename> determineExistentDirs(const std::set<Zstring, Le //check whether one side is subdirectory of other side (folder pair wise!) //similar check if one directory is read/written by multiple pairs not before beginning of synchronization -void checkFolderDependency(const std::vector<FolderPairCfg>& folderPairsForm, bool& warningDependentFolders, ProcessCallback& callback) //returns warning message, empty if all ok +void checkFolderDependency(const std::vector<FolderPairCfg>& folderPairsFmt, bool& warningDependentFolders, ProcessCallback& callback) //returns warning message, empty if all ok { std::vector<std::pair<Zstring, Zstring>> dependentDirs; @@ -112,11 +111,11 @@ void checkFolderDependency(const std::vector<FolderPairCfg>& folderPairsForm, bo Zstring(rhs.c_str(), std::min(lhs.length(), rhs.length()))); }; - for (std::vector<FolderPairCfg>::const_iterator i = folderPairsForm.begin(); i != folderPairsForm.end(); ++i) - if (!i->leftDirectoryFmt.empty() && !i->rightDirectoryFmt.empty()) //empty folders names may be accepted by user + for (const FolderPairCfg& fpCfg : folderPairsFmt) + if (!fpCfg.leftDirectoryFmt.empty() && !fpCfg.rightDirectoryFmt.empty()) //empty folders names may be accepted by user { - if (dependentDir(i->leftDirectoryFmt, i->rightDirectoryFmt)) //test wheter leftDirectory begins with rightDirectory or the other way round - dependentDirs.push_back(std::make_pair(i->leftDirectoryFmt, i->rightDirectoryFmt)); + if (dependentDir(fpCfg.leftDirectoryFmt, fpCfg.rightDirectoryFmt)) //test wheter leftDirectory begins with rightDirectory or the other way round + dependentDirs.push_back(std::make_pair(fpCfg.leftDirectoryFmt, fpCfg.rightDirectoryFmt)); } if (!dependentDirs.empty()) @@ -220,9 +219,9 @@ ComparisonBuffer::ComparisonBuffer(const std::set<DirectoryKey>& keysToRead, //callback_.requestUiRefresh(); //already called by reportStatus() } - virtual HandleError reportError(const std::wstring& msg) + virtual HandleError reportError(const std::wstring& msg, size_t retryNumber) { - switch (callback_.reportError(msg)) + switch (callback_.reportError(msg, retryNumber)) { case ProcessCallback::IGNORE_ERROR: return ON_ERROR_IGNORE; @@ -387,7 +386,7 @@ void categorizeSymlinkByContent(SymlinkPair& linkObj, size_t fileTimeTolerance, //categorize symlinks that exist on both sides Zstring targetPathRawL; Zstring targetPathRawR; - Opt<std::wstring> errMsg = tryReportingError2([&] + Opt<std::wstring> errMsg = tryReportingError([&] { callback.reportStatus(replaceCpy(_("Resolving symbolic link %x"), L"%x", fmtFileName(linkObj.getFullName<LEFT_SIDE>()))); targetPathRawL = getSymlinkTargetRaw(linkObj.getFullName<LEFT_SIDE>()); //throw FileError @@ -485,7 +484,7 @@ std::list<std::shared_ptr<BaseDirPair>> ComparisonBuffer::compareByContent(const //check files that exist in left and right model but have different content bool haveSameContent = false; - Opt<std::wstring> errMsg = tryReportingError2([&] + Opt<std::wstring> errMsg = tryReportingError([&] { haveSameContent = filesHaveSameContentUpdating(fileObj->getFullName<LEFT_SIDE>(), //throw FileError fileObj->getFullName<RIGHT_SIDE>(), diff --git a/file_hierarchy.cpp b/file_hierarchy.cpp index ac62d605..780f05de 100644 --- a/file_hierarchy.cpp +++ b/file_hierarchy.cpp @@ -351,9 +351,24 @@ std::wstring zen::getSyncOpDescription(const FileSystemObject& fsObj) case SO_OVERWRITE_RIGHT: case SO_DO_NOTHING: case SO_EQUAL: + return getSyncOpDescription(op); //use generic description + case SO_COPY_METADATA_TO_LEFT: case SO_COPY_METADATA_TO_RIGHT: - return getSyncOpDescription(op); //use generic description + //harmonize with synchronization.cpp::SynchronizeFolderPair::synchronizeFileInt, ect!! + { + Zstring shortNameOld = fsObj.getShortName<RIGHT_SIDE>(); + Zstring shortNameNew = fsObj.getShortName<LEFT_SIDE >(); + if (op == SO_COPY_METADATA_TO_LEFT) + std::swap(shortNameOld, shortNameNew); + + if (shortNameOld != shortNameNew) //detected change in case + return getSyncOpDescription(op) + L"\n" + + fmtFileName(shortNameOld) + L" ->\n" + //show short name only + fmtFileName(shortNameNew); + } + //fallback: + return getSyncOpDescription(op); case SO_MOVE_LEFT_SOURCE: case SO_MOVE_LEFT_TARGET: @@ -384,6 +399,7 @@ std::wstring zen::getSyncOpDescription(const FileSystemObject& fsObj) //attention: ::SetWindowText() doesn't handle tab characters correctly in combination with certain file names, so don't use them } break; + case SO_UNRESOLVED_CONFLICT: return fsObj.getSyncOpConflict(); } diff --git a/lib/ShadowCopy/Shadow_Windows7.vcxproj b/lib/ShadowCopy/Shadow_Windows7.vcxproj index 1f02e675..86df3453 100644 --- a/lib/ShadowCopy/Shadow_Windows7.vcxproj +++ b/lib/ShadowCopy/Shadow_Windows7.vcxproj @@ -97,7 +97,7 @@ <SuppressStartupBanner>true</SuppressStartupBanner> <DebugInformationFormat>EditAndContinue</DebugInformationFormat> <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings> - <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;C:\Data\C++\boost</AdditionalIncludeDirectories> <SmallerTypeCheck>true</SmallerTypeCheck> <MultiProcessorCompilation>true</MultiProcessorCompilation> </ClCompile> @@ -111,7 +111,7 @@ </ProfileGuidedDatabase> <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> <TargetMachine>MachineX86</TargetMachine> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage\lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> @@ -133,7 +133,7 @@ <SuppressStartupBanner>true</SuppressStartupBanner> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings> - <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;C:\Data\C++\boost</AdditionalIncludeDirectories> <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;_DEBUG;_WINDOWS;_USRDLL;SHADOWDLL_EXPORTS;USE_SHADOW_WINDOWS7;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SmallerTypeCheck>true</SmallerTypeCheck> <MultiProcessorCompilation>true</MultiProcessorCompilation> @@ -148,7 +148,7 @@ </ProfileGuidedDatabase> <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> <TargetMachine>MachineX64</TargetMachine> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> @@ -169,7 +169,7 @@ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings> - <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;C:\Data\C++\boost</AdditionalIncludeDirectories> <MultiProcessorCompilation>true</MultiProcessorCompilation> </ClCompile> <Link> @@ -184,7 +184,7 @@ </ProfileGuidedDatabase> <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> <TargetMachine>MachineX86</TargetMachine> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage\lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> @@ -207,7 +207,7 @@ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings> - <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;C:\Data\C++\boost</AdditionalIncludeDirectories> <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;_WINDOWS;_USRDLL;SHADOWDLL_EXPORTS;USE_SHADOW_WINDOWS7;%(PreprocessorDefinitions)</PreprocessorDefinitions> <MultiProcessorCompilation>true</MultiProcessorCompilation> </ClCompile> @@ -223,7 +223,7 @@ </ProfileGuidedDatabase> <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> <TargetMachine>MachineX64</TargetMachine> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> diff --git a/lib/Thumbnail/Thumbnail.vcxproj b/lib/Thumbnail/Thumbnail.vcxproj index a4719ae7..a98aadab 100644 --- a/lib/Thumbnail/Thumbnail.vcxproj +++ b/lib/Thumbnail/Thumbnail.vcxproj @@ -98,6 +98,7 @@ <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories> <SmallerTypeCheck>true</SmallerTypeCheck> <MultiProcessorCompilation>true</MultiProcessorCompilation> + <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> </ClCompile> <Link> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> @@ -167,6 +168,7 @@ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories> <MultiProcessorCompilation>true</MultiProcessorCompilation> + <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> </ClCompile> <Link> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> diff --git a/lib/dir_exist_async.h b/lib/dir_exist_async.h index 7eb4827e..19e5f745 100644 --- a/lib/dir_exist_async.h +++ b/lib/dir_exist_async.h @@ -21,43 +21,44 @@ namespace //- check existence of all directories in parallel! (avoid adding up search times if multiple network drives are not reachable) //- add reasonable time-out time! //- avoid checking duplicate entries by design: set<Zstring, LessFilename> -std::set<Zstring, LessFilename> getExistingDirsUpdating(const std::set<Zstring, LessFilename>& dirnames, bool allowUserInteraction, ProcessCallback& procCallback) +std::set<Zstring, LessFilename> getExistingDirsUpdating(const std::set<Zstring, LessFilename>& dirnames, + std::set<Zstring, LessFilename>& missing, + bool allowUserInteraction, + ProcessCallback& procCallback) { using namespace zen; - std::list<boost::unique_future<bool>> dirEx; + missing.clear(); - std::for_each(dirnames.begin(), dirnames.end(), - [&](const Zstring& dirname) - { - dirEx.push_back(zen::async2<bool>([=]() -> bool + std::list<std::pair<Zstring, boost::unique_future<bool>>> futureInfo; + for (const Zstring& dirname : dirnames) + if (!dirname.empty()) + futureInfo.push_back(std::make_pair(dirname, async2<bool>([=]() -> bool { - if (dirname.empty()) - return false; #ifdef ZEN_WIN //1. login to network share, if necessary loginNetworkShare(dirname, allowUserInteraction); #endif //2. check dir existence return dirExists(dirname); - })); - }); + }))); std::set<Zstring, LessFilename> output; //don't wait (almost) endlessly like win32 would on not existing network shares: const boost::system_time endTime = boost::get_system_time() + boost::posix_time::seconds(20); //consider CD-rom insert or hard disk spin up time from sleep - auto itDirname = dirnames.begin(); - for (auto it = dirEx.begin(); it != dirEx.end(); (void)++it, ++itDirname) //void: prevent ADL from dragging in boost's ,-overload: "MSVC warning C4913: user defined binary operator ',' exists but no overload could convert all operands" + for (auto& fi : futureInfo) { - procCallback.reportStatus(replaceCpy(_("Searching for folder %x..."), L"%x", fmtFileName(*itDirname), false)); //may throw! + procCallback.reportStatus(replaceCpy(_("Searching for folder %x..."), L"%x", fmtFileName(fi.first), false)); //may throw! while (boost::get_system_time() < endTime && - !it->timed_wait(boost::posix_time::milliseconds(UI_UPDATE_INTERVAL / 2))) + !fi.second.timed_wait(boost::posix_time::milliseconds(UI_UPDATE_INTERVAL / 2))) procCallback.requestUiRefresh(); //may throw! - if (it->is_ready() && it->get()) - output.insert(*itDirname); + if (fi.second.is_ready() && fi.second.get()) + output.insert(fi.first); + else + missing.insert(fi.first); } return output; } @@ -66,9 +67,10 @@ std::set<Zstring, LessFilename> getExistingDirsUpdating(const std::set<Zstring, inline //also silences Clang "unused function" for compilation units depending from getExistingDirsUpdating() only bool dirExistsUpdating(const Zstring& dirname, bool allowUserInteraction, ProcessCallback& procCallback) { - std::set<Zstring, LessFilename> dirnames; - dirnames.insert(dirname); - std::set<Zstring, LessFilename> dirsEx = getExistingDirsUpdating(dirnames, allowUserInteraction, procCallback); + if (dirname.empty()) return false; + std::set<Zstring, LessFilename> missing; + std::set<Zstring, LessFilename> dirsEx = getExistingDirsUpdating({ dirname }, missing, allowUserInteraction, procCallback); + assert(dirsEx.empty() != missing.empty()); return dirsEx.find(dirname) != dirsEx.end(); } } diff --git a/lib/dir_lock.cpp b/lib/dir_lock.cpp index b58e018b..fb016e1e 100644 --- a/lib/dir_lock.cpp +++ b/lib/dir_lock.cpp @@ -443,7 +443,7 @@ void waitOnDirLock(const Zstring& lockfilename, DirLockCallback* callback) //thr const UInt64 fileSizeNew = ::getLockFileSize(lockfilename); //throw FileError if (TICKS_PER_SEC <= 0 || !lastLifeSign.isValid() || !now.isValid()) - throw FileError(L"System Timer failed!"); //no i18n: "should" never throw ;) + throw FileError(L"System timer failed."); //no i18n: "should" never throw ;) if (fileSizeNew != fileSizeOld) //received life sign from lock { diff --git a/lib/ffs_paths.cpp b/lib/ffs_paths.cpp index 0f01b8d1..5c775d3e 100644 --- a/lib/ffs_paths.cpp +++ b/lib/ffs_paths.cpp @@ -7,6 +7,7 @@ #include "ffs_paths.h" #include <zen/file_handling.h> #include <wx/stdpaths.h> +#include <wx/app.h> #include <wx+/string_conv.h> #ifdef ZEN_MAC @@ -61,6 +62,11 @@ bool zen::manualProgramUpdateRequired() Zstring zen::getResourceDir() { + //make independent from wxWidgets global variable "appname"; support being called by RealtimeSync + auto appName = wxTheApp->GetAppName(); + wxTheApp->SetAppName(L"FreeFileSync"); + ZEN_ON_SCOPE_EXIT(wxTheApp->SetAppName(appName)); + #ifdef ZEN_WIN return getInstallDir(); #elif defined ZEN_LINUX @@ -76,6 +82,11 @@ Zstring zen::getResourceDir() Zstring zen::getConfigDir() { + //make independent from wxWidgets global variable "appname"; support being called by RealtimeSync + auto appName = wxTheApp->GetAppName(); + wxTheApp->SetAppName(L"FreeFileSync"); + ZEN_ON_SCOPE_EXIT(wxTheApp->SetAppName(appName)); + #ifdef ZEN_WIN if (isPortableVersion()) return getInstallDir(); diff --git a/lib/localization.cpp b/lib/localization.cpp index 5526cdce..3536ba70 100644 --- a/lib/localization.cpp +++ b/lib/localization.cpp @@ -38,7 +38,7 @@ public: wxLanguage langId() const { return langId_; } - virtual std::wstring translate(const std::wstring& text) + virtual std::wstring translate(const std::wstring& text) override { //look for translation in buffer table auto it = transMapping.find(text); @@ -47,16 +47,16 @@ public: return text; //fallback } - virtual std::wstring translate(const std::wstring& singular, const std::wstring& plural, int n) + virtual std::wstring translate(const std::wstring& singular, const std::wstring& plural, std::int64_t n) override { auto it = transMappingPl.find(std::make_pair(singular, plural)); if (it != transMappingPl.end()) { const size_t formNo = pluralParser->getForm(n); if (formNo < it->second.size()) - return it->second[formNo]; + return replaceCpy(it->second[formNo], L"%x", toGuiString(n)); } - return n == 1 ? singular : plural; //fallback + return replaceCpy(std::abs(n) == 1 ? singular : plural, L"%x", toGuiString(n)); //fallback } private: @@ -87,27 +87,26 @@ FFSTranslation::FFSTranslation(const Zstring& filename, wxLanguage languageId) : lngfile::TranslationPluralMap transPluralInput; lngfile::parseLng(inputStream, header, transInput, transPluralInput); //throw ParsingError - for (lngfile::TranslationMap::const_iterator i = transInput.begin(); i != transInput.end(); ++i) + for (const auto& item : transInput) { - const std::wstring original = utfCvrtTo<std::wstring>(i->first); - const std::wstring translation = utfCvrtTo<std::wstring>(i->second); + const std::wstring original = utfCvrtTo<std::wstring>(item.first); + const std::wstring translation = utfCvrtTo<std::wstring>(item.second); transMapping.insert(std::make_pair(original, translation)); } - for (lngfile::TranslationPluralMap::const_iterator i = transPluralInput.begin(); i != transPluralInput.end(); ++i) + for (const auto& item : transPluralInput) { - const std::wstring singular = utfCvrtTo<std::wstring>(i->first.first); - const std::wstring plural = utfCvrtTo<std::wstring>(i->first.second); - const lngfile::PluralForms& plForms = i->second; + const std::wstring engSingular = utfCvrtTo<std::wstring>(item.first.first); + const std::wstring engPlural = utfCvrtTo<std::wstring>(item.first.second); std::vector<std::wstring> plFormsWide; - for (lngfile::PluralForms::const_iterator j = plForms.begin(); j != plForms.end(); ++j) - plFormsWide.push_back(utfCvrtTo<std::wstring>(*j)); + for (const std::string& pf : item.second) + plFormsWide.push_back(utfCvrtTo<std::wstring>(pf)); - transMappingPl.insert(std::make_pair(std::make_pair(singular, plural), plFormsWide)); + transMappingPl.insert(std::make_pair(std::make_pair(engSingular, engPlural), plFormsWide)); } - pluralParser.reset(new parse_plural::PluralForm(header.pluralDefinition)); //throw parse_plural::ParsingError + pluralParser = make_unique<parse_plural::PluralForm>(header.pluralDefinition); //throw parse_plural::ParsingError } @@ -124,15 +123,15 @@ public: virtual HandleLink onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) { return LINK_SKIP; } virtual TraverseCallback* onDir(const Zchar* shortName, const Zstring& fullName) { return nullptr; } - virtual HandleError reportDirError (const std::wstring& msg) { assert(false); return ON_ERROR_IGNORE; } //errors are not really critical in this context - virtual HandleError reportItemError(const std::wstring& msg, const Zchar* shortName) { assert(false); return ON_ERROR_IGNORE; } // + virtual HandleError reportDirError (const std::wstring& msg, size_t retryNumber) { assert(false); return ON_ERROR_IGNORE; } //errors are not really critical in this context + virtual HandleError reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName) { assert(false); return ON_ERROR_IGNORE; } // private: std::vector<Zstring>& lngFiles_; }; -struct LessTranslation : public std::binary_function<ExistingTranslations::Entry, ExistingTranslations::Entry, bool> +struct LessTranslation { bool operator()(const ExistingTranslations::Entry& lhs, const ExistingTranslations::Entry& rhs) const { @@ -145,7 +144,7 @@ struct LessTranslation : public std::binary_function<ExistingTranslations::Entry rhs.languageName.c_str(), //__in LPCTSTR lpString2, static_cast<int>(rhs.languageName.size())); //__in int cchCount2 if (rv == 0) - throw std::runtime_error("Error comparing strings!"); + throw std::runtime_error("Error comparing strings."); else return rv == CSTR_LESS_THAN; //convert to C-style string compare result @@ -194,10 +193,11 @@ ExistingTranslations::ExistingTranslations() traverseFolder(zen::getResourceDir() + Zstr("Languages"), //throw(); traverseCallback); - for (auto it = lngFiles.begin(); it != lngFiles.end(); ++it) + for (const Zstring& filename : lngFiles) + { try { - const std::string stream = loadBinStream<std::string>(utfCvrtTo<Zstring>(*it)); //throw FileError + const std::string stream = loadBinStream<std::string>(filename); //throw FileError lngfile::TransHeader lngHeader; lngfile::parseHeader(stream, lngHeader); //throw ParsingError @@ -215,7 +215,7 @@ ExistingTranslations::ExistingTranslations() ExistingTranslations::Entry newEntry; newEntry.languageID = locInfo->Language; newEntry.languageName = utfCvrtTo<std::wstring>(lngHeader.languageName); - newEntry.languageFile = utfCvrtTo<std::wstring>(*it); + newEntry.languageFile = utfCvrtTo<std::wstring>(filename); newEntry.translatorName = utfCvrtTo<std::wstring>(lngHeader.translatorName); newEntry.languageFlag = utfCvrtTo<std::wstring>(lngHeader.flagFile); locMapping.push_back(newEntry); @@ -224,6 +224,7 @@ ExistingTranslations::ExistingTranslations() } catch (FileError&) { assert(false); } catch (lngfile::ParsingError&) { assert(false); } //better not show an error message here; scenario: batch jobs + } std::sort(locMapping.begin(), locMapping.end(), LessTranslation()); } diff --git a/lib/parallel_scan.cpp b/lib/parallel_scan.cpp index 433647ca..9c6b16a9 100644 --- a/lib/parallel_scan.cpp +++ b/lib/parallel_scan.cpp @@ -164,20 +164,20 @@ public: itemsScanned(0), activeWorker(0) {} - FillBufferCallback::HandleError reportError(const std::wstring& msg) //blocking call: context of worker thread + FillBufferCallback::HandleError reportError(const std::wstring& msg, size_t retryNumber) //blocking call: context of worker thread { - boost::unique_lock<boost::mutex> dummy(lockErrorMsg); - while (!errorMsg.empty() || errorResponse.get()) + boost::unique_lock<boost::mutex> dummy(lockErrorInfo); + while (errorInfo.get() || errorResponse.get()) conditionCanReportError.timed_wait(dummy, boost::posix_time::milliseconds(50)); //interruption point! - errorMsg = BasicWString(msg); + errorInfo = make_unique<std::pair<BasicWString, size_t>>(BasicWString(msg), retryNumber); while (!errorResponse.get()) conditionGotResponse.timed_wait(dummy, boost::posix_time::milliseconds(50)); //interruption point! FillBufferCallback::HandleError rv = *errorResponse; - errorMsg.clear(); + errorInfo.reset(); errorResponse.reset(); dummy.unlock(); //optimization for condition_variable::notify_all() @@ -188,10 +188,10 @@ public: void processErrors(FillBufferCallback& callback) //context of main thread, call repreatedly { - boost::unique_lock<boost::mutex> dummy(lockErrorMsg); - if (!errorMsg.empty() && !errorResponse.get()) + boost::unique_lock<boost::mutex> dummy(lockErrorInfo); + if (errorInfo.get() && !errorResponse.get()) { - FillBufferCallback::HandleError rv = callback.reportError(copyStringTo<std::wstring>(errorMsg)); //throw! + FillBufferCallback::HandleError rv = callback.reportError(copyStringTo<std::wstring>(errorInfo->first), errorInfo->second); //throw! errorResponse = make_unique<FillBufferCallback::HandleError>(rv); dummy.unlock(); //optimization for condition_variable::notify_all() @@ -254,10 +254,10 @@ public: private: //---- error handling ---- - boost::mutex lockErrorMsg; + boost::mutex lockErrorInfo; boost::condition_variable conditionCanReportError; boost::condition_variable conditionGotResponse; - BasicWString errorMsg; + std::unique_ptr<std::pair<BasicWString, size_t>> errorInfo; //error message + retry number std::unique_ptr<FillBufferCallback::HandleError> errorResponse; //---- status updates ---- @@ -318,8 +318,8 @@ public: virtual TraverseCallback* onDir(const Zchar* shortName, const Zstring& fullName); virtual void releaseDirTraverser(TraverseCallback* trav); - virtual HandleError reportDirError (const std::wstring& msg); - virtual HandleError reportItemError(const std::wstring& msg, const Zchar* shortName); + virtual HandleError reportDirError (const std::wstring& msg, size_t retryNumber); + virtual HandleError reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName); private: TraverserShared& cfg; @@ -385,7 +385,16 @@ DirCallback::HandleLink DirCallback::onSymlink(const Zchar* shortName, const Zst return LINK_SKIP; case SYMLINK_FOLLOW_LINK: - return cfg.filterInstance->passFileFilter(relNameParentPf_ + shortName) ? LINK_FOLLOW : LINK_SKIP; //filter broken symlinks before trying to follow them! + //filter symlinks before trying to follow them: handle user-excluded broken symlinks! + //since we don't know what the symlink will resolve to, only do this when both variants agree: + if (!cfg.filterInstance->passFileFilter(relNameParentPf_ + shortName)) + { + bool subObjMightMatch = true; + if (!cfg.filterInstance->passDirFilter(relNameParentPf_ + shortName, &subObjMightMatch)) + if (!subObjMightMatch) + return LINK_SKIP; + } + return LINK_FOLLOW; } assert(false); @@ -401,11 +410,11 @@ TraverseCallback* DirCallback::onDir(const Zchar* shortName, const Zstring& full cfg.acb_.reportCurrentFile(fullName, cfg.threadID_); //------------------------------------------------------------------------------------ - const Zstring& relName = relNameParentPf_ + shortName; + const Zstring& relPath = relNameParentPf_ + shortName; //apply filter before processing (use relative name!) bool subObjMightMatch = true; - const bool passFilter = cfg.filterInstance->passDirFilter(relName, &subObjMightMatch); + const bool passFilter = cfg.filterInstance->passDirFilter(relPath, &subObjMightMatch); if (!passFilter && !subObjMightMatch) return nullptr; //do NOT traverse subdirs //else: attention! ensure directory filtering is applied later to exclude actually filtered directories @@ -414,7 +423,7 @@ TraverseCallback* DirCallback::onDir(const Zchar* shortName, const Zstring& full if (passFilter) cfg.acb_.incItemsScanned(); //add 1 element to the progress indicator - return new DirCallback(cfg, relName + FILE_NAME_SEPARATOR, subDir); //releaseDirTraverser() is guaranteed to be called in any case + return new DirCallback(cfg, relPath + FILE_NAME_SEPARATOR, subDir); //releaseDirTraverser() is guaranteed to be called in any case } @@ -425,9 +434,9 @@ void DirCallback::releaseDirTraverser(TraverseCallback* trav) } -DirCallback::HandleError DirCallback::reportDirError(const std::wstring& msg) +DirCallback::HandleError DirCallback::reportDirError(const std::wstring& msg, size_t retryNumber) { - switch (cfg.acb_.reportError(msg)) + switch (cfg.acb_.reportError(msg, retryNumber)) { case FillBufferCallback::ON_ERROR_IGNORE: cfg.failedDirReads_.insert(relNameParentPf_); @@ -441,9 +450,9 @@ DirCallback::HandleError DirCallback::reportDirError(const std::wstring& msg) } -DirCallback::HandleError DirCallback::reportItemError(const std::wstring& msg, const Zchar* shortName) +DirCallback::HandleError DirCallback::reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName) { - switch (cfg.acb_.reportError(msg)) + switch (cfg.acb_.reportError(msg, retryNumber)) { case FillBufferCallback::ON_ERROR_IGNORE: cfg.failedItemReads_.insert(relNameParentPf_ + shortName); diff --git a/lib/parallel_scan.h b/lib/parallel_scan.h index c3806373..408882bf 100644 --- a/lib/parallel_scan.h +++ b/lib/parallel_scan.h @@ -61,8 +61,8 @@ public: ON_ERROR_RETRY, ON_ERROR_IGNORE }; - virtual HandleError reportError (const std::wstring& msg) = 0; //may throw! - virtual void reportStatus(const std::wstring& msg, int itemsTotal) = 0; // + virtual HandleError reportError (const std::wstring& msg, size_t retryNumber) = 0; //may throw! + virtual void reportStatus(const std::wstring& msg, int itemsTotal ) = 0; // }; //attention: ensure directory filtering is applied later to exclude filtered directories which have been kept as parent folders diff --git a/lib/parse_lng.h b/lib/parse_lng.h index 9aa62816..19a8e751 100644 --- a/lib/parse_lng.h +++ b/lib/parse_lng.h @@ -77,10 +77,17 @@ std::string generateLng(const TranslationUnorderedList& in, const TransHeader& h //--------------------------- implementation --------------------------- +enum class TranslationNewItemPos +{ + REL, + TOP +}; + class TranslationUnorderedList //unordered list of unique translation items { public: - TranslationUnorderedList(TranslationMap&& transOld, TranslationPluralMap&& transPluralOld) : transOld_(std::move(transOld)), transPluralOld_(std::move(transPluralOld)) {} + TranslationUnorderedList(TranslationNewItemPos newItemPos, TranslationMap&& transOld, TranslationPluralMap&& transPluralOld) : + newItemPos_(newItemPos), transOld_(std::move(transOld)), transPluralOld_(std::move(transPluralOld)) {} void addItem(const std::string& orig) { @@ -89,7 +96,15 @@ public: if (it != transOld_.end() && !it->second.empty()) //preserve old translation from .lng file if existing sequence.push_back(std::make_shared<RegularItem>(std::make_pair(orig, it->second))); else - sequence.push_front(std::make_shared<RegularItem>(std::make_pair(orig, std::string()))); //put untranslated items to the front of the .lng file + switch (newItemPos_) + { + case TranslationNewItemPos::REL: + sequence.push_back(std::make_shared<RegularItem>(std::make_pair(orig, std::string()))); + break; + case TranslationNewItemPos::TOP: + sequence.push_front(std::make_shared<RegularItem>(std::make_pair(orig, std::string()))); //put untranslated items to the front of the .lng filebreak; + break; + } } void addItem(const SingularPluralPair& orig) @@ -99,7 +114,15 @@ public: if (it != transPluralOld_.end() && !it->second.empty()) //preserve old translation from .lng file if existing sequence.push_back(std::make_shared<PluralItem>(std::make_pair(orig, it->second))); else - sequence.push_front(std::make_shared<PluralItem>(std::make_pair(orig, PluralForms()))); //put untranslated items to the front of the .lng file + switch (newItemPos_) + { + case TranslationNewItemPos::REL: + sequence.push_back(std::make_shared<PluralItem>(std::make_pair(orig, PluralForms()))); + break; + case TranslationNewItemPos::TOP: + sequence.push_front(std::make_shared<PluralItem>(std::make_pair(orig, PluralForms()))); //put untranslated items to the front of the .lng file + break; + } } bool untranslatedTextExists() const { return std::any_of(sequence.begin(), sequence.end(), [](const std::shared_ptr<Item>& item) { return !item->hasTranslation(); }); } @@ -120,6 +143,7 @@ private: struct RegularItem : public Item { RegularItem(const TranslationMap ::value_type& val) : value(val) {} virtual bool hasTranslation() const { return !value.second.empty(); } TranslationMap ::value_type value; }; struct PluralItem : public Item { PluralItem (const TranslationPluralMap::value_type& val) : value(val) {} virtual bool hasTranslation() const { return !value.second.empty(); } TranslationPluralMap::value_type value; }; + const TranslationNewItemPos newItemPos_; std::list<std::shared_ptr<Item>> sequence; //ordered list of translation elements std::set<TranslationMap ::key_type> transUnique; //check uniqueness @@ -173,7 +197,7 @@ class KnownTokens public: typedef std::map<Token::Type, std::string> TokenMap; - static const TokenMap& asList() + static const TokenMap& getList() { static KnownTokens inst; return inst.tokens; @@ -181,8 +205,8 @@ public: static std::string text(Token::Type t) { - TokenMap::const_iterator it = asList().find(t); - return it != asList().end() ? it->second : std::string(); + auto it = getList().find(t); + return it != getList().end() ? it->second : std::string(); } private: @@ -197,10 +221,10 @@ private: tokens.insert(std::make_pair(Token::TK_TRANS_NAME_END, "</translator>")); tokens.insert(std::make_pair(Token::TK_LOCALE_NAME_BEGIN, "<locale>")); tokens.insert(std::make_pair(Token::TK_LOCALE_NAME_END, "</locale>")); - tokens.insert(std::make_pair(Token::TK_FLAG_FILE_BEGIN, "<flag_image>")); - tokens.insert(std::make_pair(Token::TK_FLAG_FILE_END, "</flag_image>")); - tokens.insert(std::make_pair(Token::TK_PLURAL_COUNT_BEGIN, "<plural_form_count>")); - tokens.insert(std::make_pair(Token::TK_PLURAL_COUNT_END, "</plural_form_count>")); + tokens.insert(std::make_pair(Token::TK_FLAG_FILE_BEGIN, "<image>")); + tokens.insert(std::make_pair(Token::TK_FLAG_FILE_END, "</image>")); + tokens.insert(std::make_pair(Token::TK_PLURAL_COUNT_BEGIN, "<plural_count>")); + tokens.insert(std::make_pair(Token::TK_PLURAL_COUNT_END, "</plural_count>")); tokens.insert(std::make_pair(Token::TK_PLURAL_DEF_BEGIN, "<plural_definition>")); tokens.insert(std::make_pair(Token::TK_PLURAL_DEF_END, "</plural_definition>")); @@ -233,15 +257,15 @@ public: if (pos == stream.end()) return Token(Token::TK_END); - for (auto it = KnownTokens::asList().begin(); it != KnownTokens::asList().end(); ++it) - if (startsWith(it->second)) + for (const auto& token : KnownTokens::getList()) + if (startsWith(token.second)) { - pos += it->second.size(); - return Token(it->first); + pos += token.second.size(); + return Token(token.first); } //rest must be "text" - std::string::const_iterator itBegin = pos; + auto itBegin = pos; while (pos != stream.end() && !startsWithKnownTag()) pos = std::find(pos + 1, stream.end(), '<'); @@ -281,7 +305,7 @@ public: private: bool startsWithKnownTag() const { - return std::any_of(KnownTokens::asList().begin(), KnownTokens::asList().end(), + return std::any_of(KnownTokens::getList().begin(), KnownTokens::getList().end(), [&](const KnownTokens::TokenMap::value_type& p) { return startsWith(p.second); }); } @@ -470,11 +494,35 @@ private: if (pluralInfo.getCount() != static_cast<int>(translation.size())) throw ParsingError(replaceCpy(replaceCpy<std::wstring>(L"Invalid number of plural forms; actual: %x, expected: %y", L"%x", numberTo<std::wstring>(translation.size())), L"%y", numberTo<std::wstring>(pluralInfo.getCount())), scn.posRow(), scn.posCol()); - //ensure the placeholder is used when needed - int pos = 0; - for (auto it = translation.begin(); it != translation.end(); ++it, ++pos) - if (!pluralInfo.isSingleNumberForm(pos) && !contains(*it, "%x")) - throw ParsingError(replaceCpy<std::wstring>(L"Plural form at index position %y is missing the %x placeholder", L"%y", numberTo<std::wstring>(pos)), scn.posRow(), scn.posCol()); + //check for duplicate plural form translations (catch copy & paste errors for single-number form translations) + for (auto it = translation.begin(); it != translation.end(); ++it) + if (!contains(*it, "%x")) + { + auto it2 = std::find(it + 1, translation.end(), *it); + if (it2 != translation.end()) + throw ParsingError(replaceCpy<std::wstring>(L"Duplicate plural form translation at index position %x", L"%x", numberTo<std::wstring>(it2 - translation.begin())), scn.posRow(), scn.posCol()); + } + + for (int pos = 0; pos < static_cast<int>(translation.size()); ++pos) + if (pluralInfo.isSingleNumberForm(pos)) + { + //translation needs to use decimal number if english source does so (e.g. frequently changing text like statistics) + if (contains(original.first, "%x") || + contains(original.first, "1")) + { + const int firstNumber = pluralInfo.getFirstNumber(pos); + if (!(contains(translation[pos], "%x") || + contains(translation[pos], numberTo<std::string>(firstNumber)))) + throw ParsingError(replaceCpy<std::wstring>(replaceCpy<std::wstring>(L"Plural form translation at index position %y needs to use the decimal number %z or the %x placeholder", + L"%y", numberTo<std::wstring>(pos)), L"%z", numberTo<std::wstring>(firstNumber)), scn.posRow(), scn.posCol()); + } + } + else + { + //ensure the placeholder is used when needed + if (!contains(translation[pos], "%x")) + throw ParsingError(replaceCpy<std::wstring>(L"Plural form at index position %y is missing the %x placeholder", L"%y", numberTo<std::wstring>(pos)), scn.posRow(), scn.posCol()); + } auto checkSecondaryPlaceholder = [&](const std::string& placeholder) { diff --git a/lib/parse_plural.h b/lib/parse_plural.h index e9e04dbc..bac933c9 100644 --- a/lib/parse_plural.h +++ b/lib/parse_plural.h @@ -8,6 +8,7 @@ #define PARSE_PLURAL_H_INCLUDED #include <memory> +#include <cstdint> #include <functional> #include <zen/string_base.h> @@ -30,11 +31,11 @@ class PluralForm { public: PluralForm(const std::string& stream); //throw ParsingError - int getForm(int n) const { n_ = n ; return expr->eval(); } + int getForm(std::int64_t n) const { n_ = std::abs(n) ; return static_cast<int>(expr->eval()); } private: - std::shared_ptr<Expr<int>> expr; - mutable int n_; + std::shared_ptr<Expr<std::int64_t>> expr; + mutable std::int64_t n_; }; @@ -46,11 +47,18 @@ class PluralFormInfo public: PluralFormInfo(const std::string& definition, int pluralCount); //throw InvalidPluralForm - int getCount() const { return static_cast<int>(formCount.size()); } - bool isSingleNumberForm(int n) const { return 0 <= n && n < static_cast<int>(formCount.size()) ? formCount[n] == 1 : false; } + int getCount() const { return static_cast<int>(forms.size()); } + bool isSingleNumberForm(int index) const { return 0 <= index && index < static_cast<int>(forms.size()) ? forms[index].count == 1 : false; } + int getFirstNumber (int index) const { return 0 <= index && index < static_cast<int>(forms.size()) ? forms[index].firstNumber : -1; } private: - std::vector<int> formCount; + struct FormInfo + { + FormInfo() : count(0), firstNumber(0) {} + int count; + int firstNumber; //which maps to the plural form index position + }; + std::vector<FormInfo> forms; }; @@ -145,20 +153,20 @@ private: std::shared_ptr<Expr<T>> elseExp_; }; -struct ConstNumberExp : public Expr<int> +struct ConstNumberExp : public Expr<std::int64_t> { - ConstNumberExp(int n) : n_(n) {} - virtual int eval() const { return n_; } + ConstNumberExp(std::int64_t n) : n_(n) {} + virtual std::int64_t eval() const { return n_; } private: - int n_; + std::int64_t n_; }; -struct VariableNumberNExp : public Expr<int> +struct VariableNumberNExp : public Expr<std::int64_t> { - VariableNumberNExp(int& n) : n_(n) {} - virtual int eval() const { return n_; } + VariableNumberNExp(std::int64_t& n) : n_(n) {} + virtual std::int64_t eval() const { return n_; } private: - int& n_; + std::int64_t& n_; }; //------------------------------------------------------------------------------- @@ -186,10 +194,10 @@ struct Token }; Token(Type t) : type(t), number(0) {} - Token(int num) : type(TK_CONST_NUMBER), number(num) {} + Token(std::int64_t num) : type(TK_CONST_NUMBER), number(num) {} Type type; - int number; //if type == TK_CONST_NUMBER + std::int64_t number; //if type == TK_CONST_NUMBER }; class Scanner @@ -233,7 +241,7 @@ public: if (digitEnd != pos) { - int number = zen::stringTo<int>(std::string(pos, digitEnd)); + auto number = zen::stringTo<std::int64_t>(std::string(pos, digitEnd)); pos = digitEnd; return number; } @@ -249,7 +257,7 @@ private: return std::equal(prefix.begin(), prefix.end(), pos); } - typedef std::vector<std::pair<std::string, Token::Type> > TokenList; + typedef std::vector<std::pair<std::string, Token::Type>> TokenList; TokenList tokens; const std::string stream_; @@ -261,14 +269,14 @@ private: class Parser { public: - Parser(const std::string& stream, int& n) : + Parser(const std::string& stream, std::int64_t& n) : scn(stream), tk(scn.nextToken()), n_(n) {} - std::shared_ptr<Expr<int>> parse() //throw ParsingError; return value always bound! + std::shared_ptr<Expr<std::int64_t>> parse() //throw ParsingError; return value always bound! { - auto e = std::dynamic_pointer_cast<Expr<int>>(parseExpression()); //throw ParsingError + auto e = std::dynamic_pointer_cast<Expr<std::int64_t>>(parseExpression()); //throw ParsingError if (!e) throw ParsingError(); expectToken(Token::TK_END); @@ -287,15 +295,15 @@ private: nextToken(); auto ifExp = std::dynamic_pointer_cast<Expr<bool>>(e); - auto thenExp = std::dynamic_pointer_cast<Expr<int>>(parseExpression()); //associativity: <- + auto thenExp = std::dynamic_pointer_cast<Expr<std::int64_t>>(parseExpression()); //associativity: <- expectToken(Token::TK_TERNARY_COLON); nextToken(); - auto elseExp = std::dynamic_pointer_cast<Expr<int>>(parseExpression()); // + auto elseExp = std::dynamic_pointer_cast<Expr<std::int64_t>>(parseExpression()); // if (!ifExp || !thenExp || !elseExp) throw ParsingError(); - return std::make_shared<ConditionalExp<int>>(ifExp, thenExp, elseExp); + return std::make_shared<ConditionalExp<std::int64_t>>(ifExp, thenExp, elseExp); } return e; } @@ -337,8 +345,8 @@ private: nextToken(); std::shared_ptr<Expression> rhs = parseRelational(); - if (t == Token::TK_EQUAL) return makeBiExp(e, rhs, std::equal_to <int>()); //throw ParsingError - if (t == Token::TK_NOT_EQUAL) return makeBiExp(e, rhs, std::not_equal_to<int>()); // + if (t == Token::TK_EQUAL) return makeBiExp(e, rhs, std::equal_to <std::int64_t>()); //throw ParsingError + if (t == Token::TK_NOT_EQUAL) return makeBiExp(e, rhs, std::not_equal_to<std::int64_t>()); // } return e; } @@ -356,10 +364,10 @@ private: nextToken(); std::shared_ptr<Expression> rhs = parseMultiplicative(); - if (t == Token::TK_LESS) return makeBiExp(e, rhs, std::less <int>()); // - if (t == Token::TK_LESS_EQUAL) return makeBiExp(e, rhs, std::less_equal <int>()); //throw ParsingError - if (t == Token::TK_GREATER) return makeBiExp(e, rhs, std::greater <int>()); // - if (t == Token::TK_GREATER_EQUAL) return makeBiExp(e, rhs, std::greater_equal<int>()); // + if (t == Token::TK_LESS) return makeBiExp(e, rhs, std::less <std::int64_t>()); // + if (t == Token::TK_LESS_EQUAL) return makeBiExp(e, rhs, std::less_equal <std::int64_t>()); //throw ParsingError + if (t == Token::TK_GREATER) return makeBiExp(e, rhs, std::greater <std::int64_t>()); // + if (t == Token::TK_GREATER_EQUAL) return makeBiExp(e, rhs, std::greater_equal<std::int64_t>()); // } return e; } @@ -378,7 +386,7 @@ private: if (literal->eval() == 0) throw ParsingError(); - e = makeBiExp(e, rhs, std::modulus<int>()); //throw ParsingError + e = makeBiExp(e, rhs, std::modulus<std::int64_t>()); //throw ParsingError } return e; } @@ -392,7 +400,7 @@ private: } else if (token().type == Token::TK_CONST_NUMBER) { - const int number = token().number; + const std::int64_t number = token().number; nextToken(); return std::make_shared<ConstNumberExp>(number); } @@ -420,7 +428,7 @@ private: Scanner scn; Token tk; - int& n_; + std::int64_t& n_; }; } @@ -431,7 +439,7 @@ PluralFormInfo::PluralFormInfo(const std::string& definition, int pluralCount) / if (pluralCount < 1) throw InvalidPluralForm(); - formCount.resize(pluralCount); + forms.resize(pluralCount); try { parse_plural::PluralForm pf(definition); //throw parse_plural::ParsingError @@ -442,8 +450,12 @@ PluralFormInfo::PluralFormInfo(const std::string& definition, int pluralCount) / for (int j = 0; j < 1000; ++j) { int form = pf.getForm(j); - if (0 <= form && form < static_cast<int>(formCount.size())) - ++formCount[form]; + if (0 <= form && form < static_cast<int>(forms.size())) + { + if (forms[form].count == 0) + forms[form].firstNumber = j; + ++forms[form].count; + } else throw InvalidPluralForm(); } @@ -454,7 +466,7 @@ PluralFormInfo::PluralFormInfo(const std::string& definition, int pluralCount) / } //ensure each form is used at least once: - if (!std::all_of(formCount.begin(), formCount.end(), [](int count) { return count >= 1; })) + if (!std::all_of(forms.begin(), forms.end(), [](const FormInfo& fi) { return fi.count >= 1; })) throw InvalidPluralForm(); } @@ -463,4 +475,4 @@ inline PluralForm::PluralForm(const std::string& stream) : expr(implementation::Parser(stream, n_).parse()) {} //throw ParsingError } -#endif // PARSE_PLURAL_H_INCLUDED
\ No newline at end of file +#endif // PARSE_PLURAL_H_INCLUDED diff --git a/lib/perf_check.cpp b/lib/perf_check.cpp index 0f5506b3..bf232add 100644 --- a/lib/perf_check.cpp +++ b/lib/perf_check.cpp @@ -122,7 +122,7 @@ zen::Opt<std::wstring> PerfCheck::getItemsPerSecond() const const int itemsDelta = itemBack.second.itemCount_ - itemFront.second.itemCount_; if (timeDelta != 0) - return replaceCpy(_("%x items"), L"%x", formatThreeDigitPrecision(itemsDelta * 1000.0 / timeDelta)) + _("/sec"); + return replaceCpy(_("%x items/sec"), L"%x", formatThreeDigitPrecision(itemsDelta * 1000.0 / timeDelta)); } return NoValue(); } @@ -231,10 +231,10 @@ wxString Statistics::getRemainingTime(int objectsCurrent, double dataCurrent) double q = 0; double r = 0; double s = 0; - for (std::list<record>::const_iterator i = measurements.begin(); i != measurements.end(); ++i) + for (const record& rec : measurements) { - const double x_i = i->x_i; - const double f_i = i->f_i; + const double x_i = rec.x_i; + const double f_i = rec.f_i; p += x_i * x_i; q += f_i * x_i; r += f_i; diff --git a/lib/process_xml.cpp b/lib/process_xml.cpp index 4640e472..3e3e72f1 100644 --- a/lib/process_xml.cpp +++ b/lib/process_xml.cpp @@ -10,6 +10,7 @@ #include "ffs_paths.h" #include <zen/file_handling.h> #include <zen/file_io.h> +//#include <zen/time.h> #include "xml_base.h" using namespace zen; @@ -20,8 +21,8 @@ namespace { //------------------------------------------------------------------------------------------------------------------------------- const int XML_FORMAT_VER_GLOBAL = 1; -const int XML_FORMAT_VER_FFS_GUI = 2; -const int XML_FORMAT_VER_FFS_BATCH = 2; +const int XML_FORMAT_VER_FFS_GUI = 3; //for FFS 5.22 +const int XML_FORMAT_VER_FFS_BATCH = 3; // //------------------------------------------------------------------------------------------------------------------------------- } @@ -111,7 +112,7 @@ xmlAccess::XmlGuiConfig xmlAccess::convertBatchToGui(const xmlAccess::XmlBatchCo switch (batchCfg.handleError) { case ON_ERROR_POPUP: - case ON_ERROR_ABORT: + case ON_ERROR_STOP: output.handleError = ON_GUIERROR_POPUP; break; case ON_ERROR_IGNORE: @@ -261,8 +262,8 @@ void writeText(const OnError& value, std::string& output) case ON_ERROR_POPUP: output = "Popup"; break; - case ON_ERROR_ABORT: - output = "Abort"; + case ON_ERROR_STOP: + output = "Stop"; break; } } @@ -274,15 +275,17 @@ bool readText(const std::string& input, OnError& value) zen::trim(tmp); warn_static("remove after migration. 2013.08.20") if (tmp == "Exit") //obsolete - value = ON_ERROR_ABORT; + value = ON_ERROR_STOP; + else if (tmp == "Abort") //obsolete: 2013.09.04 + value = ON_ERROR_STOP; else if (tmp == "Ignore") value = ON_ERROR_IGNORE; else if (tmp == "Popup") value = ON_ERROR_POPUP; - else if (tmp == "Abort") - value = ON_ERROR_ABORT; + else if (tmp == "Stop") + value = ON_ERROR_STOP; else return false; return true; @@ -797,6 +800,25 @@ void writeStruc(const ViewFilterDefault& value, XmlElement& output) actView.attribute("DeleteRight", value.deleteRight); actView.attribute("DoNothing" , value.doNothing); } + + +template <> inline +bool readStruc(const XmlElement& input, ConfigHistoryItem& value) +{ + XmlIn in(input); + bool rv1 = in(value.configFile); + //bool rv2 = in.attribute("LastUsed", value.lastUseTime); + return rv1 /*&& rv2*/; +} + + +template <> inline +void writeStruc(const ConfigHistoryItem& value, XmlElement& output) +{ + XmlOut out(output); + out(value.configFile); + //out.attribute("LastUsed", value.lastUseTime); +} } @@ -805,7 +827,12 @@ namespace void readConfig(const XmlIn& in, CompConfig& cmpConfig) { in["Variant" ](cmpConfig.compareVar); - in["HandleSymlinks"](cmpConfig.handleSymlinks); + + warn_static("remove check after migration. 2013.09.7") + if (in["HandleSymlinks"])//obsolete name + in["HandleSymlinks"](cmpConfig.handleSymlinks); + else + in["Symlinks"](cmpConfig.handleSymlinks); } @@ -1028,15 +1055,17 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config) { XmlIn inShared = in["Shared"]; - inShared["Language"].attribute("id", config.programLanguage); + inShared["Language"].attribute("Id", config.programLanguage); - inShared["FailSafeFileCopy" ].attribute("Enabled", config.transactionalFileCopy); + inShared["FailSafeFileCopy" ].attribute("Enabled", config.failsafeFileCopy); inShared["CopyLockedFiles" ].attribute("Enabled", config.copyLockedFiles); inShared["CopyFilePermissions" ].attribute("Enabled", config.copyFilePermissions); + inShared["AutomaticRetry" ].attribute("Count" , config.automaticRetryCount); + inShared["AutomaticRetry" ].attribute("Delay" , config.automaticRetryDelay); + inShared["FileTimeTolerance" ].attribute("Seconds", config.fileTimeTolerance); inShared["RunWithBackgroundPriority"].attribute("Enabled", config.runWithBackgroundPriority); inShared["LockDirectoriesDuringSync"].attribute("Enabled", config.createLockFile); inShared["VerifyCopiedFiles" ].attribute("Enabled", config.verifyFileCopy); - inShared["FileTimeTolerance" ].attribute("Seconds", config.fileTimeTolerance); inShared["LastSyncsLogSizeMax" ].attribute("Bytes" , config.lastSyncsLogFileSizeMax); XmlIn inOpt = inShared["OptionalDialogs"]; @@ -1103,6 +1132,7 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config) //load config file history inGui["LastUsedConfig"](config.gui.lastUsedConfigFiles); + inGui["ConfigHistory"](config.gui.cfgFileHistory); inGui["ConfigHistory"].attribute("MaxSize", config.gui.cfgFileHistMax); @@ -1117,7 +1147,7 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config) inGui["ExternalApplications"](config.gui.externelApplications); //last update check - inGui["LastUpdateCheck"](config.gui.lastUpdateCheck); + inGui["LastVersionCheck"](config.gui.lastUpdateCheck); //batch specific global settings //XmlIn inBatch = in["Batch"]; @@ -1263,8 +1293,8 @@ namespace { void writeConfig(const CompConfig& cmpConfig, XmlOut& out) { - out["Variant" ](cmpConfig.compareVar); - out["HandleSymlinks"](cmpConfig.handleSymlinks); + out["Variant" ](cmpConfig.compareVar); + out["Symlinks"](cmpConfig.handleSymlinks); } @@ -1409,15 +1439,17 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out) { XmlOut outShared = out["Shared"]; - outShared["Language"].attribute("id", config.programLanguage); + outShared["Language"].attribute("Id", config.programLanguage); - outShared["FailSafeFileCopy" ].attribute("Enabled", config.transactionalFileCopy); + outShared["FailSafeFileCopy" ].attribute("Enabled", config.failsafeFileCopy); outShared["CopyLockedFiles" ].attribute("Enabled", config.copyLockedFiles); outShared["CopyFilePermissions" ].attribute("Enabled", config.copyFilePermissions); + outShared["AutomaticRetry" ].attribute("Count" , config.automaticRetryCount); + outShared["AutomaticRetry" ].attribute("Delay" , config.automaticRetryDelay); + outShared["FileTimeTolerance" ].attribute("Seconds", config.fileTimeTolerance); outShared["RunWithBackgroundPriority"].attribute("Enabled", config.runWithBackgroundPriority); outShared["LockDirectoriesDuringSync"].attribute("Enabled", config.createLockFile); outShared["VerifyCopiedFiles" ].attribute("Enabled", config.verifyFileCopy); - outShared["FileTimeTolerance" ].attribute("Seconds", config.fileTimeTolerance); outShared["LastSyncsLogSizeMax" ].attribute("Bytes" , config.lastSyncsLogFileSizeMax); XmlOut outOpt = outShared["OptionalDialogs"]; @@ -1482,6 +1514,7 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out) //load config file history outGui["LastUsedConfig"](config.gui.lastUsedConfigFiles); + outGui["ConfigHistory" ](config.gui.cfgFileHistory); outGui["ConfigHistory"].attribute("MaxSize", config.gui.cfgFileHistMax); @@ -1496,7 +1529,7 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out) outGui["ExternalApplications"](config.gui.externelApplications); //last update check - outGui["LastUpdateCheck"](config.gui.lastUpdateCheck); + outGui["LastVersionCheck"](config.gui.lastUpdateCheck); //batch specific global settings //XmlOut outBatch = out["Batch"]; diff --git a/lib/process_xml.h b/lib/process_xml.h index 85f2d461..4092c072 100644 --- a/lib/process_xml.h +++ b/lib/process_xml.h @@ -12,6 +12,7 @@ #include "xml_base.h" #include "localization.h" #include "../ui/column_attr.h" +#include "../ui/folder_history_types.h" //#include "ffs_paths.h" namespace xmlAccess @@ -31,7 +32,7 @@ enum OnError { ON_ERROR_IGNORE, ON_ERROR_POPUP, - ON_ERROR_ABORT + ON_ERROR_STOP }; enum OnGuiError @@ -42,7 +43,7 @@ enum OnGuiError typedef std::wstring Description; typedef std::wstring Commandline; -typedef std::vector<std::pair<Description, Commandline> > ExternalApps; +typedef std::vector<std::pair<Description, Commandline>> ExternalApps; //--------------------------------------------------------------------- struct XmlGuiConfig @@ -135,26 +136,30 @@ struct XmlGlobalSettings //Shared (GUI/BATCH) settings XmlGlobalSettings() : programLanguage(zen::retrieveSystemLanguage()), + failsafeFileCopy(true), copyLockedFiles(true), copyFilePermissions(false), - runWithBackgroundPriority(false), + automaticRetryCount(0), + automaticRetryDelay(5), fileTimeTolerance(2), //default 2s: FAT vs NTFS - lastSyncsLogFileSizeMax(100000), //maximum size for LastSyncs.log: use a human-readable number + runWithBackgroundPriority(false), + createLockFile(true), verifyFileCopy(false), - transactionalFileCopy(true), - createLockFile(true) {} + lastSyncsLogFileSizeMax(100000) //maximum size for LastSyncs.log: use a human-readable number + {} int programLanguage; - bool copyLockedFiles; //VSS usage + bool failsafeFileCopy; + bool copyLockedFiles; bool copyFilePermissions; - - bool runWithBackgroundPriority; + size_t automaticRetryCount; + size_t automaticRetryDelay; //unit: [sec] size_t fileTimeTolerance; //max. allowed file time deviation - size_t lastSyncsLogFileSizeMax; - bool verifyFileCopy; //verify copied files - bool transactionalFileCopy; + bool runWithBackgroundPriority; bool createLockFile; + bool verifyFileCopy; //verify copied files + size_t lastSyncsLogFileSizeMax; OptionalDialogs optDialogs; @@ -238,7 +243,7 @@ struct XmlGlobalSettings ExternalApps externelApplications; - std::vector<Zstring> cfgFileHistory; + std::vector<zen::ConfigHistoryItem> cfgFileHistory; size_t cfgFileHistMax; std::vector<Zstring> lastUsedConfigFiles; @@ -259,7 +264,7 @@ struct XmlGlobalSettings bool showIcons; FileIconSize iconSize; - long lastUpdateCheck; //time of last update check + long lastUpdateCheck; //time of last update check ViewFilterDefault viewFilterDefault; wxString guiPerspectiveLast; //used by wxAuiManager diff --git a/lib/resolve_path.cpp b/lib/resolve_path.cpp index 083b1007..768876c9 100644 --- a/lib/resolve_path.cpp +++ b/lib/resolve_path.cpp @@ -508,12 +508,9 @@ void getDirectoryAliasesRecursive(const Zstring& dirname, std::set<Zstring, Less return startsWith(path, prefix); #endif }; - std::for_each(envToDir.begin(), envToDir.end(), - [&](const std::pair<Zstring, Zstring>& entry) - { + for (const auto& entry : envToDir) if (pathStartsWith(dirname, entry.second)) output.insert(MACRO_SEP + entry.first + MACRO_SEP + (dirname.c_str() + entry.second.size())); - }); } //4. replace (all) macros: %USERPROFILE% -> C:\Users\<user> diff --git a/lib/resources.h b/lib/resources.h deleted file mode 100644 index 1cb05f20..00000000 --- a/lib/resources.h +++ /dev/null @@ -1,40 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef RESOURCES_H_8740257825342532457 -#define RESOURCES_H_8740257825342532457 - -#include <map> -#include <wx/bitmap.h> -#include <wx/animate.h> -#include <wx/icon.h> - - -class GlobalResources -{ -public: - static const GlobalResources& instance(); - - const wxBitmap& getImage(const wxString& name) const; - - //global image resource objects - wxAnimation aniWink; - wxAnimation aniWorking; - wxIcon programIconFFS; - -private: - GlobalResources(); - GlobalResources(const GlobalResources&); - GlobalResources& operator=(const GlobalResources&); - - std::map<wxString, wxBitmap> bitmaps; -}; - - -inline -const wxBitmap& getResourceImage(const wxString& name) { return GlobalResources::instance().getImage(name); } - -#endif //RESOURCES_H_8740257825342532457 diff --git a/lib/shadow.cpp b/lib/shadow.cpp index 808b3b68..d1027f69 100644 --- a/lib/shadow.cpp +++ b/lib/shadow.cpp @@ -118,7 +118,7 @@ Zstring ShadowCopy::makeShadowCopy(const Zstring& inputFile, const std::function L"%y", fmtFileName(filenameFinal))); //get or create instance of shadow volume - VolNameShadowMap::const_iterator it = shadowVol.find(volumeNamePf); + auto it = shadowVol.find(volumeNamePf); if (it == shadowVol.end()) { onBeforeMakeVolumeCopy(volumeNamePf); //notify client before (potentially) blocking some time diff --git a/lib/status_handler.h b/lib/status_handler.h index c19935b1..9a288b6f 100644 --- a/lib/status_handler.h +++ b/lib/status_handler.h @@ -87,7 +87,7 @@ protected: virtual void requestAbortion() { abortRequested = true; - statusText_ =_("Abort requested: Waiting for current operation to finish..."); + statusText_ =_("Stop requested: Waiting for current operation to finish..."); } //this does NOT call abortThisProcess immediately, but when we're out of the C GUI call stack //implement Statistics diff --git a/lib/status_handler_impl.h b/lib/status_handler_impl.h index e1212b65..210e6ecd 100644 --- a/lib/status_handler_impl.h +++ b/lib/status_handler_impl.h @@ -11,32 +11,11 @@ #include <zen/file_error.h> #include "process_callback.h" -//template <typename Function> inline -//bool tryReportingError(Function cmd, ProcessCallback& handler) //return "true" on success, "false" if error was ignored -//{ -// for (;;) -// try -// { -// cmd(); //throw FileError -// return true; -// } -// catch (zen::FileError& error) -// { -// switch (handler.reportError(error.toString())) //may throw! -// { -// case ProcessCallback::IGNORE_ERROR: -// return false; -// case ProcessCallback::RETRY: -// break; //continue with loop -// } -// } -//} - template <typename Function> inline -zen::Opt<std::wstring> tryReportingError2(Function cmd, ProcessCallback& handler) //return ignored error message if available +zen::Opt<std::wstring> tryReportingError(Function cmd, ProcessCallback& handler) //return ignored error message if available { - for (;;) + for (size_t retryNumber = 0;; ++retryNumber) try { cmd(); //throw FileError @@ -44,7 +23,7 @@ zen::Opt<std::wstring> tryReportingError2(Function cmd, ProcessCallback& handler } catch (zen::FileError& error) { - switch (handler.reportError(error.toString())) //may throw! + switch (handler.reportError(error.toString(), retryNumber)) //may throw! { case ProcessCallback::IGNORE_ERROR: return error.toString(); diff --git a/lib/versioning.cpp b/lib/versioning.cpp index 65373499..82696e3a 100644 --- a/lib/versioning.cpp +++ b/lib/versioning.cpp @@ -224,8 +224,8 @@ private: return nullptr; //DON'T traverse into subdirs; moveDirectory works recursively! } - virtual HandleError reportDirError (const std::wstring& msg) { throw FileError(msg); } - virtual HandleError reportItemError(const std::wstring& msg, const Zchar* shortName) { throw FileError(msg); } + virtual HandleError reportDirError (const std::wstring& msg, size_t retryNumber) { throw FileError(msg); } + virtual HandleError reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName) { throw FileError(msg); } std::vector<Zstring>& files_; std::vector<Zstring>& dirs_; diff --git a/lib/versioning.h b/lib/versioning.h index 33dc31c4..06065656 100644 --- a/lib/versioning.h +++ b/lib/versioning.h @@ -43,7 +43,7 @@ public: timeStamp_(formatTime<Zstring>(Zstr("%Y-%m-%d %H%M%S"), timeStamp)) //e.g. "2012-05-15 131513" { if (timeStamp_.size() != 17) //formatTime() returns empty string on error; unexpected length: e.g. problem in year 10000! - throw FileError(_("Failure to create timestamp for versioning:") + L" \'" + timeStamp_ + L"\'"); + throw FileError(_("Unable to create timestamp for versioning:") + L" \"" + timeStamp_ + L"\""); } bool revisionFile(const Zstring& fullName, const Zstring& relativeName, CallbackMoveFile& callback); //throw FileError; return "false" if file is not existing diff --git a/process_callback.h b/process_callback.h index fcf0384e..cbd9437f 100644 --- a/process_callback.h +++ b/process_callback.h @@ -67,7 +67,7 @@ struct ProcessCallback IGNORE_ERROR = 10, RETRY }; - virtual Response reportError (const std::wstring& errorMessage) = 0; //recoverable error situation + virtual Response reportError (const std::wstring& errorMessage, size_t retryNumber) = 0; //recoverable error situation virtual void reportFatalError(const std::wstring& errorMessage) = 0; //non-recoverable error situation }; diff --git a/structures.h b/structures.h index 4b4cdb8a..fdf36e09 100644 --- a/structures.h +++ b/structures.h @@ -33,7 +33,7 @@ enum SymLinkHandling enum class SyncDirection : unsigned char //we need to save space for use in FileSystemObject! { - LEFT = 0, + LEFT, RIGHT, NONE }; @@ -41,32 +41,32 @@ enum class SyncDirection : unsigned char //we need to save space for use in File enum CompareFilesResult { - FILE_LEFT_SIDE_ONLY = 0, + FILE_EQUAL, + FILE_LEFT_SIDE_ONLY, FILE_RIGHT_SIDE_ONLY, FILE_LEFT_NEWER, //CMP_BY_TIME_SIZE only! FILE_RIGHT_NEWER, // FILE_DIFFERENT, //CMP_BY_CONTENT only! - FILE_EQUAL, FILE_DIFFERENT_METADATA, //both sides equal, but different metadata only: short name case, modification time FILE_CONFLICT }; //attention make sure these /|\ \|/ three enums match!!! enum CompareDirResult { + DIR_EQUAL = FILE_EQUAL, DIR_LEFT_SIDE_ONLY = FILE_LEFT_SIDE_ONLY, DIR_RIGHT_SIDE_ONLY = FILE_RIGHT_SIDE_ONLY, - DIR_EQUAL = FILE_EQUAL, DIR_DIFFERENT_METADATA = FILE_DIFFERENT_METADATA //both sides equal, but different metadata only: short name case }; enum CompareSymlinkResult { + SYMLINK_EQUAL = FILE_EQUAL, SYMLINK_LEFT_SIDE_ONLY = FILE_LEFT_SIDE_ONLY, SYMLINK_RIGHT_SIDE_ONLY = FILE_RIGHT_SIDE_ONLY, SYMLINK_LEFT_NEWER = FILE_LEFT_NEWER, SYMLINK_RIGHT_NEWER = FILE_RIGHT_NEWER, SYMLINK_DIFFERENT = FILE_DIFFERENT, - SYMLINK_EQUAL = FILE_EQUAL, SYMLINK_DIFFERENT_METADATA = FILE_DIFFERENT_METADATA, //both sides equal, but different metadata only: short name case SYMLINK_CONFLICT = FILE_CONFLICT }; diff --git a/synchronization.cpp b/synchronization.cpp index bfb0743f..f5785b1a 100644 --- a/synchronization.cpp +++ b/synchronization.cpp @@ -6,7 +6,6 @@ #include "synchronization.h" #include <memory> -#include <random> #include <deque> #include <stdexcept> #include <wx/file.h> //get rid!? @@ -17,12 +16,12 @@ #include <zen/recycler.h> #include <zen/optional.h> #include <zen/symlink_target.h> +#include <zen/file_io.h> +#include <zen/time.h> #include "lib/resolve_path.h" #include "lib/db_file.h" #include "lib/dir_exist_async.h" #include "lib/cmp_filetime.h" -#include <zen/file_io.h> -#include <zen/time.h> #include "lib/status_handler_impl.h" #include "lib/versioning.h" @@ -316,11 +315,13 @@ public: ProcessCallback& procCallback); ~DeletionHandling() { + //always (try to) clean up, even if synchronization is aborted! try { - tryCleanup(false); //throw FileError + tryCleanup(false); //throw FileError, (throw X) } - catch (...) {} //always (try to) clean up, even if synchronization is aborted! + catch (FileError&) {} + catch (...) { assert(false); } //what is this? /* may block heavily, but still do not allow user callback: -> avoid throwing user cancel exception again, leading to incomplete clean-up! @@ -328,7 +329,7 @@ public: } //clean-up temporary directory (recycle bin optimization) - void tryCleanup(bool allowUserCallback = true); //throw FileError -> call this in non-exceptional coding, i.e. somewhere after sync! + void tryCleanup(bool allowUserCallback = true); //throw FileError; throw X -> call this in non-exceptional coding, i.e. somewhere after sync! template <class Function> void removeFileUpdating(const Zstring& fullName, const Zstring& relativeName, const Int64& bytesExpected, Function notifyItemDeletion); //throw FileError template <class Function> void removeDirUpdating (const Zstring& fullName, const Zstring& relativeName, const Int64& bytesExpected, Function notifyItemDeletion); //reports ONLY data delta via updateProcessedData()! @@ -431,37 +432,6 @@ private: ProcessCallback& statusHandler_; const std::wstring txtRecyclingFile; }; - -Zstring createUniqueRandomTempDir(const Zstring& baseDirPf) //throw FileError -{ - assert(endsWith(baseDirPf, FILE_NAME_SEPARATOR)); - - //1. generate random directory name - static std::default_random_engine rng(std::time(nullptr)); //a pseudo-random number engine with seconds-precision seed is sufficient! - //the alternative std::random_device may not always be available and can even throw an exception! - - const Zstring chars(Zstr("abcdefghijklmnopqrstuvwxyz") - Zstr("1234567890")); - std::uniform_int_distribution<size_t> distrib(0, chars.size() - 1); //takes closed range - - auto generatePath = [&]() -> Zstring //e.g. C:\Source\3vkf74fq.ffs_tmp - { - Zstring path = baseDirPf; - for (int i = 0; i < 8; ++i) - path += chars[distrib(rng)]; - return path + TEMP_FILE_ENDING; - }; - - //2. ensure uniqueness (at least for this base directory) - for (;;) - try - { - Zstring dirname = generatePath(); - makeDirectory(dirname, /*bool failIfExists*/ true); //throw FileError, ErrorTargetExisting - return dirname; - } - catch (const ErrorTargetExisting&) {} -} } //create + returns temporary directory postfixed with file name separator @@ -473,14 +443,52 @@ Zstring DeletionHandling::getOrCreateRecyclerTempDirPf() //throw FileError return Zstring(); if (recyclerTmpDir.empty()) - recyclerTmpDir = createUniqueRandomTempDir(baseDirPf_); //throw FileError + { + recyclerTmpDir = [&] + { + assert(endsWith(baseDirPf_, FILE_NAME_SEPARATOR)); + /* + -> this naming convention is too cute and confusing for end users: + + //1. generate random directory name + static std::mt19937 rng(std::time(nullptr)); //don't use std::default_random_engine and leave the choice to the STL implementer! + //- the alternative std::random_device may not always be available and can even throw an exception! + //- seed with second precision is sufficient: collisions are handled below + + const Zstring chars(Zstr("abcdefghijklmnopqrstuvwxyz") + Zstr("1234567890")); + std::uniform_int_distribution<size_t> distrib(0, chars.size() - 1); //takes closed range + + auto generatePath = [&]() -> Zstring //e.g. C:\Source\3vkf74fq.ffs_tmp + { + Zstring path = baseDirPf; + for (int i = 0; i < 8; ++i) + path += chars[distrib(rng)]; + return path + TEMP_FILE_ENDING; + }; + */ + + //ensure unique ownership: + Zstring dirname = baseDirPf_ + Zstr("RecycleBin") + TEMP_FILE_ENDING; + for (int i = 1;; ++i) + try + { + makeDirectory(dirname, /*bool failIfExists*/ true); //throw FileError, ErrorTargetExisting + return dirname; + } + catch (const ErrorTargetExisting&) + { + dirname = baseDirPf_ + Zstr("RecycleBin") + Zchar('_') + numberTo<Zstring>(i) + TEMP_FILE_ENDING; + } + }(); + } //assemble temporary recycle bin directory with random name and .ffs_tmp ending return appendSeparator(recyclerTmpDir); } #endif -void DeletionHandling::tryCleanup(bool allowUserCallback) //throw FileError +void DeletionHandling::tryCleanup(bool allowUserCallback) //throw FileError; throw X { switch (deletionPolicy_) { @@ -1169,7 +1177,7 @@ void SynchronizeFolderPair::runZeroPass(HierarchyObject& hierObj) FilePair* sourceObj = &fileObj; if (FilePair* targetObj = dynamic_cast<FilePair*>(FileSystemObject::retrieve(fileObj.getMoveRef()))) { - zen::Opt<std::wstring> errMsg = tryReportingError2([&] + zen::Opt<std::wstring> errMsg = tryReportingError([&] { if (syncOp == SO_MOVE_LEFT_SOURCE) this->manageFileMove<LEFT_SIDE>(*sourceObj, *targetObj); //throw FileError @@ -1336,18 +1344,18 @@ void SynchronizeFolderPair::runPass(HierarchyObject& hierObj) //synchronize files: for (FilePair& fileObj : hierObj.refSubFiles()) if (pass == this->getPass(fileObj)) //"this->" required by two-pass lookup as enforced by GCC 4.7 - tryReportingError2([&] { synchronizeFile(fileObj); }, procCallback_); + tryReportingError([&] { synchronizeFile(fileObj); }, procCallback_); //synchronize symbolic links: for (SymlinkPair& linkObj : hierObj.refSubLinks()) if (pass == this->getPass(linkObj)) - tryReportingError2([&] { synchronizeLink(linkObj); }, procCallback_); + tryReportingError([&] { synchronizeLink(linkObj); }, procCallback_); //synchronize folders: for (DirPair& dirObj : hierObj.refSubDirs()) { if (pass == this->getPass(dirObj)) - tryReportingError2([&] { synchronizeFolder(dirObj); }, procCallback_); + tryReportingError([&] { synchronizeFolder(dirObj); }, procCallback_); this->runPass<pass>(dirObj); //recurse } @@ -1548,6 +1556,8 @@ void SynchronizeFolderPair::synchronizeFileInt(FilePair& fileObj, SyncOperation case SO_COPY_METADATA_TO_LEFT: case SO_COPY_METADATA_TO_RIGHT: { + //harmonize with file_hierarchy.cpp::getSyncOpDescription!! + reportInfo(txtWritingAttributes, fileObj.getFullName<sideTrg>()); if (fileObj.getShortName<sideTrg>() != fileObj.getShortName<sideSrc>()) //adapt difference in case (windows only) @@ -1875,10 +1885,10 @@ bool createBaseDirectory(BaseDirPair& baseDirObj, ProcessCallback& callback) //n if (baseDirObj.isExisting<side>()) //atomicity: do NOT check directory existence again! { //just convenience: exit sync right here instead of showing tons of error messages during file copy - zen::Opt<std::wstring> errMsg = tryReportingError2([&] + zen::Opt<std::wstring> errMsg = tryReportingError([&] { if (!dirExistsUpdating(dirname, false, callback)) - throw FileError(replaceCpy(_("Cannot find %x."), L"%x", fmtFileName(dirname))); //this should really be a "fatal error" if not recoverable + throw FileError(replaceCpy(_("Cannot find %x."), L"%x", fmtFileName(dirname))); //should be logged as a "fatal error" if ignored by the user... }, callback); //may throw in error-callback! return !errMsg; @@ -1886,7 +1896,7 @@ bool createBaseDirectory(BaseDirPair& baseDirObj, ProcessCallback& callback) //n else //create target directory: user presumably ignored error "dir existing" in order to have it created automatically { bool temporaryNetworkDrop = false; - zen::Opt<std::wstring> errMsg = tryReportingError2([&] + zen::Opt<std::wstring> errMsg = tryReportingError([&] { try { @@ -2078,7 +2088,8 @@ void zen::synchronize(const TimeComp& timeStamp, //check if user-defined directory for deletion was specified if (folderPairCfg.versioningFolder.empty()) //already trimmed by getFormattedDirectoryName() { - callback.reportFatalError(_("Folder input field for versioning must not be empty.")); + //should never arrive here: already checked in SyncCfgDialog + callback.reportFatalError(_("Please enter a target folder for versioning.")); skipFolderPair[folderIndex] = true; continue; } @@ -2277,7 +2288,7 @@ void zen::synchronize(const TimeComp& timeStamp, ZEN_ON_SCOPE_EXIT(BaseDirPair::removeEmpty(*j);); bool copyPermissionsFp = false; - tryReportingError2([&] + tryReportingError([&] { copyPermissionsFp = copyFilePermissions && //copy permissions only if asked for and supported by *both* sides! !j->getBaseDirPf<LEFT_SIDE >().empty() && //scenario: directory selected on one side only @@ -2325,8 +2336,8 @@ void zen::synchronize(const TimeComp& timeStamp, syncFP.startSync(*j); //(try to gracefully) cleanup temporary Recycle bin folders and versioning -> will be done in ~DeletionHandling anyway... - tryReportingError2([&] { delHandlerL.tryCleanup(); }, callback); //show error dialog if necessary - tryReportingError2([&] { delHandlerR.tryCleanup(); }, callback); // + tryReportingError([&] { delHandlerL.tryCleanup(); }, callback); //show error dialog if necessary + tryReportingError([&] { delHandlerR.tryCleanup(); }, callback); // //(try to gracefully) write database file if (folderPairCfg.saveSyncDB_) @@ -2334,7 +2345,7 @@ void zen::synchronize(const TimeComp& timeStamp, callback.reportStatus(_("Generating database...")); callback.forceUiRefresh(); - tryReportingError2([&] { zen::saveLastSynchronousState(*j); }, callback); //throw FileError + tryReportingError([&] { zen::saveLastSynchronousState(*j); }, callback); //throw FileError guardUpdateDb.dismiss(); } } @@ -2521,5 +2532,5 @@ void SynchronizeFolderPair::verifyFileCopy(const Zstring& source, const Zstring& procCallback_.reportInfo(replaceCpy(txtVerifying, L"%x", fmtFileName(target))); VerifyStatusUpdater callback(procCallback_); - tryReportingError2([&] { ::verifyFiles(source, target, callback); }, procCallback_); + tryReportingError([&] { ::verifyFiles(source, target, callback); }, procCallback_); } diff --git a/synchronization.h b/synchronization.h index 75612d8b..bc6b79db 100644 --- a/synchronization.h +++ b/synchronization.h @@ -34,7 +34,7 @@ public: int getConflict() const { return static_cast<int>(conflictMsgs.size()); } - typedef std::vector<std::pair<Zstring, std::wstring> > ConflictTexts; // Pair(filename/conflict text) + typedef std::vector<std::pair<Zstring, std::wstring>> ConflictTexts; // Pair(filename/conflict text) const ConflictTexts& getConflictMessages() const { return conflictMsgs; } Int64 getDataToProcess() const { return dataToProcess; } diff --git a/ui/IFileDialog_Vista/IFileDialog_Vista.vcxproj b/ui/IFileDialog_Vista/IFileDialog_Vista.vcxproj index b1abe5a4..7f84b4fb 100644 --- a/ui/IFileDialog_Vista/IFileDialog_Vista.vcxproj +++ b/ui/IFileDialog_Vista/IFileDialog_Vista.vcxproj @@ -105,6 +105,7 @@ <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories> <SmallerTypeCheck>true</SmallerTypeCheck> <MultiProcessorCompilation>true</MultiProcessorCompilation> + <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> </ClCompile> <Link> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> @@ -178,6 +179,7 @@ <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories> <SmallerTypeCheck>false</SmallerTypeCheck> <MultiProcessorCompilation>true</MultiProcessorCompilation> + <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> </ClCompile> <Link> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> diff --git a/ui/Taskbar_Seven/Taskbar_Seven.vcxproj b/ui/Taskbar_Seven/Taskbar_Seven.vcxproj index e7fec802..2617569a 100644 --- a/ui/Taskbar_Seven/Taskbar_Seven.vcxproj +++ b/ui/Taskbar_Seven/Taskbar_Seven.vcxproj @@ -98,6 +98,7 @@ <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories> <SmallerTypeCheck>true</SmallerTypeCheck> <MultiProcessorCompilation>true</MultiProcessorCompilation> + <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> </ClCompile> <Link> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> @@ -167,6 +168,7 @@ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories> <MultiProcessorCompilation>true</MultiProcessorCompilation> + <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> </ClCompile> <Link> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> diff --git a/ui/app_icon.h b/ui/app_icon.h new file mode 100644 index 00000000..a1240fee --- /dev/null +++ b/ui/app_icon.h @@ -0,0 +1,40 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + +#ifndef APP_ICON_H6748179634932174683214 +#define APP_ICON_H6748179634932174683214 + +#include <wx/icon.h> +#include <wx+/image_resources.h> + +namespace zen +{ +inline +wxIcon getFfsIcon() +{ + //wxWidgets' bitmap to icon conversion on OS X can only deal with very specific sizes => check on all platforms! + assert(getResourceImage(L"FreeFileSync").GetWidth () == getResourceImage(L"FreeFileSync").GetHeight() && + getResourceImage(L"FreeFileSync").GetWidth() % 128 == 0); +#ifdef ZEN_WIN + //for compatibility it seems we need to stick with a "real" icon + return wxIcon(L"A_FFS_ICON"); + +#elif defined ZEN_LINUX + //attention: make sure to not implicitly call "instance()" again => deadlock on Linux + wxIcon icon; + icon.CopyFromBitmap(getResourceImage(L"FreeFileSync")); //use big logo bitmap for better quality + return icon; + +#elif defined ZEN_MAC + wxIcon icon; + icon.CopyFromBitmap(getResourceImage(L"FreeFileSync").ConvertToImage().Scale(128, 128, wxIMAGE_QUALITY_HIGH)); //"von hinten durch die Brust ins Auge" + return icon; +#endif +} +} + + +#endif //APP_ICON_H6748179634932174683214 diff --git a/ui/batch_config.cpp b/ui/batch_config.cpp index 1ccb1223..4807e4a1 100644 --- a/ui/batch_config.cpp +++ b/ui/batch_config.cpp @@ -9,11 +9,11 @@ #include <wx+/mouse_move_dlg.h> #include <wx+/std_button_order.h> #include <wx+/font_size.h> +#include <wx+/image_resources.h> #include "gui_generated.h" #include "dir_name.h" #include "../ui/exec_finished_box.h" #include "../lib/help_provider.h" -#include "../lib/resources.h" using namespace zen; using namespace xmlAccess; @@ -37,13 +37,13 @@ public: size_t onCompletionHistoryMax); private: - virtual void OnHelp (wxCommandEvent& event) { displayHelpEntry(L"html/Schedule a Batch Job.html", this); } virtual void OnClose (wxCloseEvent& event) { EndModal(BUTTON_CANCEL); } virtual void OnCancel (wxCommandEvent& event) { EndModal(BUTTON_CANCEL); } virtual void OnSaveBatchJob(wxCommandEvent& event); virtual void OnErrorPopup (wxCommandEvent& event) { localBatchCfg.handleError = ON_ERROR_POPUP; updateGui(); } virtual void OnErrorIgnore(wxCommandEvent& event) { localBatchCfg.handleError = ON_ERROR_IGNORE; updateGui(); } - virtual void OnErrorAbort (wxCommandEvent& event) { localBatchCfg.handleError = ON_ERROR_ABORT; updateGui(); } + virtual void OnErrorStop (wxCommandEvent& event) { localBatchCfg.handleError = ON_ERROR_STOP; updateGui(); } + virtual void OnHelpScheduleBatch(wxHyperlinkEvent& event) { displayHelpEntry(L"html/Schedule a Batch Job.html", this); } virtual void OnToggleGenerateLogfile(wxCommandEvent& event) { updateGui(); } virtual void OnToggleLogfilesLimit (wxCommandEvent& event) { updateGui(); } @@ -70,25 +70,24 @@ BatchDialog::BatchDialog(wxWindow* parent, { #ifdef ZEN_WIN new zen::MouseMoveWindow(*this); //allow moving main dialog by clicking (nearly) anywhere...; ownership passed to "this" + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! #endif setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonSaveAs).setCancel(m_buttonCancel)); - wxWindowUpdateLocker dummy(this); //avoid display distortion - setRelativeFontSize(*m_staticTextHeader, 1.25); - m_staticTextDescr->SetLabel(replaceCpy(m_staticTextDescr->GetLabel(), L"%x", L"FreeFileSync.exe <" + _("job name") + L">.ffs_batch")); m_comboBoxExecFinished->initHistory(onCompletionHistory, onCompletionHistoryMax); - m_bpButtonHelp ->SetBitmapLabel(getResourceImage(L"help")); - m_bitmapBatchJob->SetBitmap (getResourceImage(L"batch")); + m_bitmapBatchJob->SetBitmap(getResourceImage(L"batch")); - logfileDir = make_unique<DirectoryName<FolderHistoryBox>>(*this, *m_buttonSelectLogfileDir, *m_logfileDir); + logfileDir = make_unique<DirectoryName<FolderHistoryBox>>(*m_panelLogfile, *m_buttonSelectLogfileDir, *m_logfileDir); setConfig(batchCfg); - Fit(); //child-element widths have changed: image was set - Layout(); + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + //=> works like a charm for GTK2 with window resizing problems and title bar corruption; e.g. Debian!!! + + // Layout(); m_buttonSaveAs->SetFocus(); } @@ -103,7 +102,7 @@ void BatchDialog::updateGui() //re-evaluate gui after config changes m_toggleBtnErrorIgnore->SetValue(false); m_toggleBtnErrorPopup ->SetValue(false); - m_toggleBtnErrorAbort ->SetValue(false); + m_toggleBtnErrorStop ->SetValue(false); switch (cfg.handleError) //*not* owned by GUI controls { case ON_ERROR_IGNORE: @@ -112,8 +111,8 @@ void BatchDialog::updateGui() //re-evaluate gui after config changes case ON_ERROR_POPUP: m_toggleBtnErrorPopup->SetValue(true); break; - case ON_ERROR_ABORT: - m_toggleBtnErrorAbort->SetValue(true); + case ON_ERROR_STOP: + m_toggleBtnErrorStop->SetValue(true); break; } } @@ -121,7 +120,9 @@ void BatchDialog::updateGui() //re-evaluate gui after config changes void BatchDialog::setConfig(const XmlBatchConfig& batchCfg) { - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif localBatchCfg = batchCfg; //contains some parameters not owned by GUI controls diff --git a/ui/batch_status_handler.cpp b/ui/batch_status_handler.cpp index 3c916fdf..bca6b484 100644 --- a/ui/batch_status_handler.cpp +++ b/ui/batch_status_handler.cpp @@ -7,11 +7,10 @@ #include "batch_status_handler.h" #include <zen/file_handling.h> #include <zen/file_traverser.h> -#include <zen/format_unit.h> -//#include <wx+/app_main.h> -#include <wx+/shell_execute.h> +//#include <zen/format_unit.h> +#include <zen/shell_execute.h> +#include <wx+/popup_dlg.h> #include <wx/app.h> -#include "msg_popup.h" #include "exec_finished_box.h" #include "../lib/ffs_paths.h" #include "../lib/resolve_path.h" @@ -38,8 +37,8 @@ private: virtual TraverseCallback* onDir (const Zchar* shortName, const Zstring& fullName) { return nullptr; } //DON'T traverse into subdirs virtual HandleLink onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) { return LINK_SKIP; } - virtual HandleError reportDirError (const std::wstring& msg) { assert(false); return ON_ERROR_IGNORE; } //errors are not really critical in this context - virtual HandleError reportItemError(const std::wstring& msg, const Zchar* shortName) { assert(false); return ON_ERROR_IGNORE; } // + virtual HandleError reportDirError (const std::wstring& msg, size_t retryNumber) { assert(false); return ON_ERROR_IGNORE; } //errors are not really critical in this context + virtual HandleError reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName) { assert(false); return ON_ERROR_IGNORE; } // const Zstring prefix_; std::vector<Zstring>& logfiles_; @@ -103,6 +102,8 @@ BatchStatusHandler::BatchStatusHandler(bool showProgress, int logfilesCountLimit, size_t lastSyncsLogFileSizeMax, const xmlAccess::OnError handleError, + size_t automaticRetryCount, + size_t automaticRetryDelay, const SwitchToGui& switchBatchToGui, //functionality to change from batch mode to GUI mode FfsReturnCode& returnCode, const std::wstring& execWhenFinished, @@ -110,24 +111,24 @@ BatchStatusHandler::BatchStatusHandler(bool showProgress, switchBatchToGui_(switchBatchToGui), showFinalResults(showProgress), //=> exit immediately or wait when finished switchToGuiRequested(false), + logfilesCountLimit_(logfilesCountLimit), lastSyncsLogFileSizeMax_(lastSyncsLogFileSizeMax), handleError_(handleError), returnCode_(returnCode), + automaticRetryCount_(automaticRetryCount), + automaticRetryDelay_(automaticRetryDelay), progressDlg(createProgressDialog(*this, [this] { this->onProgressDialogTerminate(); }, *this, nullptr, showProgress, jobName, execWhenFinished, execFinishedHistory)), jobName_(jobName) { - if (logfilesCountLimit != 0) //init log file: starts internal timer! + if (logfilesCountLimit != 0) { - zen::Opt<std::wstring> errMsg = tryReportingError2([&] { logFile = prepareNewLogfile(logfileDirectory, jobName, timeStamp); }, //throw FileError; return value always bound! - *this); + zen::Opt<std::wstring> errMsg = tryReportingError([&] { logFile = prepareNewLogfile(logfileDirectory, jobName, timeStamp); }, //throw FileError; return value always bound! + *this); if (errMsg) { raiseReturnCode(returnCode_, FFS_RC_ABORTED); throw BatchAbortProcess(); } - - if (logfilesCountLimit >= 0) - limitLogfileCount(beforeLast(logFile->getFilename(), FILE_NAME_SEPARATOR), jobName_, logfilesCountLimit); //throw() } totalTime.Start(); //measure total time @@ -139,6 +140,43 @@ BatchStatusHandler::BatchStatusHandler(bool showProgress, BatchStatusHandler::~BatchStatusHandler() { + //------------ "on completion" command conceptually is part of the sync, not cleanup -------------------------------------- + + //decide whether to stay on status screen or exit immediately... + if (switchToGuiRequested) //-> avoid recursive yield() calls, thous switch not before ending batch mode + { + try + { + switchBatchToGui_.execute(); //open FreeFileSync GUI + } + catch (...) {} + showFinalResults = false; + } + else if (progressDlg) + { + if (progressDlg->getWindowIfVisible()) + showFinalResults = true; + + //execute "on completion" command (even in case of ignored errors) + if (!abortIsRequested()) //if aborted (manually), we don't execute the command + { + const std::wstring finalCommand = progressDlg->getExecWhenFinishedCommand(); //final value (after possible user modification) + if (!finalCommand.empty()) + { + if (isCloseProgressDlgCommand(finalCommand)) + showFinalResults = false; //take precedence over current visibility status + else + try + { + tryReportingError([&] { shellExecute2(expandMacros(utfCvrtTo<Zstring>(finalCommand)), EXEC_TYPE_SYNC); }, //throw FileError, throw X? + *this); + } + catch (...) {} + } + } + } + //------------ end of sync: begin of cleanup -------------------------------------- + const int totalErrors = errorLog.getItemCount(TYPE_ERROR | TYPE_FATAL_ERROR); //evaluate before finalizing log const int totalWarnings = errorLog.getItemCount(TYPE_WARNING); @@ -147,7 +185,7 @@ BatchStatusHandler::~BatchStatusHandler() if (abortIsRequested()) { raiseReturnCode(returnCode_, FFS_RC_ABORTED); - finalStatus = _("Synchronization aborted"); + finalStatus = _("Synchronization stopped"); errorLog.logMsg(finalStatus, TYPE_ERROR); } else if (totalErrors > 0) @@ -191,12 +229,15 @@ BatchStatusHandler::~BatchStatusHandler() forceUiRefresh(); // } catch (...) {} + + if (logfilesCountLimit_ > 0) + limitLogfileCount(beforeLast(logFile->getFilename(), FILE_NAME_SEPARATOR), jobName_, logfilesCountLimit_); //throw() + try { saveLogToFile(summary, errorLog, *logFile); //throw FileError } catch (FileError&) {} - logFile.reset(); //close file now: user may do something with it in "on completion" } try { @@ -206,52 +247,23 @@ BatchStatusHandler::~BatchStatusHandler() if (progressDlg) { - //decide whether to stay on status screen or exit immediately... - if (switchToGuiRequested) //-> avoid recursive yield() calls, thous switch not before ending batch mode + if (showFinalResults) //warning: wxWindow::Show() is called within processHasFinished()! { - try - { - switchBatchToGui_.execute(); //open FreeFileSync GUI - } - catch (...) {} - progressDlg->closeWindowDirectly(); //progressDlg is not main window anymore - } - else - { - if (progressDlg->getWindowIfVisible()) - showFinalResults = true; - - //execute "on completion" command (even in case of ignored errors) - if (!abortIsRequested()) //if aborted (manually), we don't execute the command - { - const std::wstring finalCommand = progressDlg->getExecWhenFinishedCommand(); //final value (after possible user modification) - if (!finalCommand.empty()) - { - if (isCloseProgressDlgCommand(finalCommand)) - showFinalResults = false; //take precedence over current visibility status - else - shellExecute(expandMacros(utfCvrtTo<Zstring>(finalCommand))); - } - } - - if (showFinalResults) //warning: wxWindow::Show() is called within processHasFinished()! - { - //notify about (logical) application main window => program won't quit, but stay on this dialog - //setMainWindow(progressDlg->getAsWindow()); -> not required anymore since we block waiting until dialog is closed below - - //notify to progressDlg that current process has ended - if (abortIsRequested()) - progressDlg->processHasFinished(SyncProgressDialog::RESULT_ABORTED, errorLog); //enable okay and close events - else if (totalErrors > 0) - progressDlg->processHasFinished(SyncProgressDialog::RESULT_FINISHED_WITH_ERROR, errorLog); - else if (totalWarnings > 0) - progressDlg->processHasFinished(SyncProgressDialog::RESULT_FINISHED_WITH_WARNINGS, errorLog); - else - progressDlg->processHasFinished(SyncProgressDialog::RESULT_FINISHED_WITH_SUCCESS, errorLog); - } + //notify about (logical) application main window => program won't quit, but stay on this dialog + //setMainWindow(progressDlg->getAsWindow()); -> not required anymore since we block waiting until dialog is closed below + + //notify to progressDlg that current process has ended + if (abortIsRequested()) + progressDlg->processHasFinished(SyncProgressDialog::RESULT_ABORTED, errorLog); //enable okay and close events + else if (totalErrors > 0) + progressDlg->processHasFinished(SyncProgressDialog::RESULT_FINISHED_WITH_ERROR, errorLog); + else if (totalWarnings > 0) + progressDlg->processHasFinished(SyncProgressDialog::RESULT_FINISHED_WITH_WARNINGS, errorLog); else - progressDlg->closeWindowDirectly(); //progressDlg is main window => program will quit directly + progressDlg->processHasFinished(SyncProgressDialog::RESULT_FINISHED_WITH_SUCCESS, errorLog); } + else + progressDlg->closeWindowDirectly(); //progressDlg is main window => program will quit directly //wait until progress dialog notified shutdown via onProgressDialogTerminate() //-> required since it has our "this" pointer captured in lambda "notifyWindowTerminate"! @@ -265,7 +277,6 @@ BatchStatusHandler::~BatchStatusHandler() } - void BatchStatusHandler::initNewPhase(int objectsTotal, Int64 dataTotal, ProcessCallback::Phase phaseID) { StatusHandler::initNewPhase(objectsTotal, dataTotal, phaseID); @@ -307,29 +318,29 @@ void BatchStatusHandler::reportWarning(const std::wstring& warningMessage, bool& forceUiRefresh(); bool dontWarnAgain = false; - switch (showWarningDlg(progressDlg->getWindowIfVisible(), - ReturnWarningDlg::BUTTON_IGNORE | ReturnWarningDlg::BUTTON_SWITCH | ReturnWarningDlg::BUTTON_CANCEL, - warningMessage + L"\n\n" + _("Press \"Switch\" to resolve issues in FreeFileSync main dialog."), - dontWarnAgain)) + switch (showConfirmationDialog3(progressDlg->getWindowIfVisible(), DialogInfoType::WARNING, PopupDialogCfg3(). + setDetailInstructions(warningMessage + L"\n\n" + _("You can switch to FreeFileSync's main window to resolve this issue.")). + setCheckBox(dontWarnAgain, _("&Don't show this warning again"), ConfirmationButton3::DONT_DO_IT), + _("&Ignore"), _("&Switch"))) { - case ReturnWarningDlg::BUTTON_CANCEL: - abortThisProcess(); + case ConfirmationButton3::DO_IT: //ignore + warningActive = !dontWarnAgain; break; - case ReturnWarningDlg::BUTTON_SWITCH: - errorLog.logMsg(_("Switching to FreeFileSync main dialog"), TYPE_INFO); + case ConfirmationButton3::DONT_DO_IT: //switch + errorLog.logMsg(_("Switching to FreeFileSync's main window"), TYPE_INFO); switchToGuiRequested = true; abortThisProcess(); break; - case ReturnWarningDlg::BUTTON_IGNORE: //no unhandled error situation! - warningActive = !dontWarnAgain; + case ConfirmationButton3::CANCEL: + abortThisProcess(); break; } } break; //keep it! last switch might not find match - case xmlAccess::ON_ERROR_ABORT: + case xmlAccess::ON_ERROR_STOP: abortThisProcess(); break; @@ -339,8 +350,25 @@ void BatchStatusHandler::reportWarning(const std::wstring& warningMessage, bool& } -ProcessCallback::Response BatchStatusHandler::reportError(const std::wstring& errorMessage) +ProcessCallback::Response BatchStatusHandler::reportError(const std::wstring& errorMessage, size_t retryNumber) { + //auto-retry + if (retryNumber < automaticRetryCount_) + { + errorLog.logMsg(errorMessage + L"\n=> " + + _P("Automatic retry in 1 second...", "Automatic retry in %x seconds...", automaticRetryDelay_), TYPE_INFO); + //delay + const int iterations = static_cast<int>(1000 * automaticRetryDelay_ / UI_UPDATE_INTERVAL); //always round down: don't allow for negative remaining time below + for (int i = 0; i < iterations; ++i) + { + reportStatus(_("Error") + L": " + _P("Automatic retry in 1 second...", "Automatic retry in %x seconds...", + (1000 * automaticRetryDelay_ - i * UI_UPDATE_INTERVAL + 999) / 1000)); //integer round up + boost::this_thread::sleep(boost::posix_time::milliseconds(UI_UPDATE_INTERVAL)); + } + return ProcessCallback::RETRY; + } + + //always, except for "retry": zen::ScopeGuard guardWriteLog = zen::makeGuard([&] { errorLog.logMsg(errorMessage, TYPE_ERROR); }); @@ -353,28 +381,29 @@ ProcessCallback::Response BatchStatusHandler::reportError(const std::wstring& er forceUiRefresh(); bool ignoreNextErrors = false; - switch (showErrorDlg(progressDlg->getWindowIfVisible(), - ReturnErrorDlg::BUTTON_IGNORE | ReturnErrorDlg::BUTTON_RETRY | ReturnErrorDlg::BUTTON_CANCEL, - errorMessage, &ignoreNextErrors)) + switch (showConfirmationDialog3(progressDlg->getWindowIfVisible(), DialogInfoType::ERROR2, PopupDialogCfg3(). + setDetailInstructions(errorMessage). + setCheckBox(ignoreNextErrors, _("&Ignore subsequent errors"), ConfirmationButton3::DONT_DO_IT), + _("&Ignore"), _("&Retry"))) { - case ReturnErrorDlg::BUTTON_IGNORE: + case ConfirmationButton3::DO_IT: //ignore if (ignoreNextErrors) //falsify only handleError_ = xmlAccess::ON_ERROR_IGNORE; return ProcessCallback::IGNORE_ERROR; - case ReturnErrorDlg::BUTTON_RETRY: + case ConfirmationButton3::DONT_DO_IT: //retry guardWriteLog.dismiss(); - errorLog.logMsg(_("Retrying operation after error:") + L" " + errorMessage, TYPE_INFO); + errorLog.logMsg(errorMessage + L"\n=> " + _("Retrying operation..."), TYPE_INFO); return ProcessCallback::RETRY; - case ReturnErrorDlg::BUTTON_CANCEL: + case ConfirmationButton3::CANCEL: abortThisProcess(); break; } } break; //used if last switch didn't find a match - case xmlAccess::ON_ERROR_ABORT: + case xmlAccess::ON_ERROR_STOP: abortThisProcess(); break; @@ -400,23 +429,24 @@ void BatchStatusHandler::reportFatalError(const std::wstring& errorMessage) forceUiRefresh(); bool ignoreNextErrors = false; - switch (showFatalErrorDlg(progressDlg->getWindowIfVisible(), - ReturnFatalErrorDlg::BUTTON_IGNORE | ReturnFatalErrorDlg::BUTTON_CANCEL, - errorMessage, &ignoreNextErrors)) + switch (showConfirmationDialog(progressDlg->getWindowIfVisible(), DialogInfoType::ERROR2, + PopupDialogCfg().setTitle(_("Serious Error")). + setDetailInstructions(errorMessage). + setCheckBox(ignoreNextErrors, _("&Ignore subsequent errors")), + _("&Ignore"))) { - case ReturnFatalErrorDlg::BUTTON_IGNORE: + case ConfirmationButton::DO_IT: if (ignoreNextErrors) //falsify only handleError_ = xmlAccess::ON_ERROR_IGNORE; break; - - case ReturnFatalErrorDlg::BUTTON_CANCEL: + case ConfirmationButton::CANCEL: abortThisProcess(); break; } } break; - case xmlAccess::ON_ERROR_ABORT: + case xmlAccess::ON_ERROR_STOP: abortThisProcess(); break; diff --git a/ui/batch_status_handler.h b/ui/batch_status_handler.h index 7a77785b..de6e71b3 100644 --- a/ui/batch_status_handler.h +++ b/ui/batch_status_handler.h @@ -32,6 +32,8 @@ public: int logfilesCountLimit, //0: logging inactive; < 0: no limit size_t lastSyncsLogFileSizeMax, const xmlAccess::OnError handleError, + size_t automaticRetryCount, + size_t automaticRetryDelay, const zen::SwitchToGui& switchBatchToGui, //functionality to change from batch mode to GUI mode zen::FfsReturnCode& returnCode, const std::wstring& execWhenFinished, @@ -44,7 +46,7 @@ public: virtual void forceUiRefresh(); virtual void reportWarning(const std::wstring& warningMessage, bool& warningActive); - virtual Response reportError(const std::wstring& errorMessage); + virtual Response reportError(const std::wstring& errorMessage, size_t retryNumber); virtual void reportFatalError(const std::wstring& errorMessage); private: @@ -54,11 +56,15 @@ private: const zen::SwitchToGui& switchBatchToGui_; //functionality to change from batch mode to GUI mode bool showFinalResults; bool switchToGuiRequested; + const int logfilesCountLimit_; const size_t lastSyncsLogFileSizeMax_; xmlAccess::OnError handleError_; zen::ErrorLog errorLog; //list of non-resolved errors and warnings zen::FfsReturnCode& returnCode_; + const size_t automaticRetryCount_; + const size_t automaticRetryDelay_; + SyncProgressDialog* progressDlg; //managed to have shorter lifetime than this handler! std::unique_ptr<zen::FileOutput> logFile; //optional! diff --git a/ui/check_version.cpp b/ui/check_version.cpp index e51c1784..79fd2507 100644 --- a/ui/check_version.cpp +++ b/ui/check_version.cpp @@ -9,10 +9,9 @@ #include <zen/string_tools.h> #include <zen/i18n.h> #include <zen/utf.h> -#include <wx/msgdlg.h> #include <wx/timer.h> #include <wx/utils.h> -#include "msg_popup.h" +#include <wx+/popup_dlg.h> #include "../version/version.h" ////#include "../lib/ffs_paths.h" #include <zen/scope_guard.h> @@ -227,24 +226,42 @@ void zen::checkForUpdateNow(wxWindow* parent) case GET_VER_SUCCESS: if (haveNewerVersion(onlineVersion)) { - if (showQuestionDlg(parent, ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_CANCEL, - _("A new version of FreeFileSync is available:") + L" " + onlineVersion + L"\n\n" + _("Download now?"), - QuestConfig().setCaption(_("New version found")).setLabelYes(_("&Download"))) == ReturnQuestionDlg::BUTTON_YES) - wxLaunchDefaultBrowser(L"http://freefilesync.sourceforge.net/get_latest.php"); + switch (showConfirmationDialog(parent, DialogInfoType::INFO, PopupDialogCfg(). + setTitle(_("Check for Program Updates")). + setMainInstructions(_("A new version of FreeFileSync is available:") + L" " + onlineVersion + L"\n\n" + _("Download now?")), + _("&Download"))) + { + case ConfirmationButton::DO_IT: + wxLaunchDefaultBrowser(L"http://freefilesync.sourceforge.net/get_latest.php"); + break; + case ConfirmationButton::CANCEL: + break; + } } else - wxMessageBox(_("FreeFileSync is up to date."), L"FreeFileSync - " + _("Information"), wxOK | wxICON_INFORMATION, parent); + showNotificationDialog(parent, DialogInfoType::INFO, PopupDialogCfg(). + setTitle(_("Check for Program Updates")). + setMainInstructions(_("FreeFileSync is up to date."))); break; case GET_VER_NO_CONNECTION: - wxMessageBox(_("Unable to connect to sourceforge.net."), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR, parent); + showNotificationDialog(parent, DialogInfoType::ERROR2, PopupDialogCfg(). + setTitle(("Check for Program Updates")). + setMainInstructions(_("Unable to connect to sourceforge.net."))); break; case GET_VER_PAGE_NOT_FOUND: - if (showQuestionDlg(parent, ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_CANCEL, - _("Cannot find current FreeFileSync version number online. Do you want to check manually?"), - QuestConfig().setCaption(_("Error"))) == ReturnQuestionDlg::BUTTON_YES) - wxLaunchDefaultBrowser(L"http://freefilesync.sourceforge.net/"); + switch (showConfirmationDialog(parent, DialogInfoType::ERROR2, PopupDialogCfg(). + setTitle(_("Check for Program Updates")). + setMainInstructions(_("Cannot find current FreeFileSync version number online. Do you want to check manually?")), + _("&Check"))) + { + case ConfirmationButton::DO_IT: + wxLaunchDefaultBrowser(L"http://freefilesync.sourceforge.net/"); + break; + case ConfirmationButton::CANCEL: + break; + } break; } } @@ -254,26 +271,6 @@ void zen::checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, co { if (lastUpdateCheck != -1) { - //if (lastUpdateCheck == 0) - //{ - // switch (showQuestionDlg(parent, ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_NO | ReturnQuestionDlg::BUTTON_CANCEL, - // ("Do you want FreeFileSync to automatically check for updates every week?") + L"\n" + - // ("(Requires an Internet connection!)"))) - // { - // case ReturnQuestionDlg::BUTTON_YES: - // lastUpdateCheck = 123; //some old date (few seconds after 1970) different from 0 and -1 - // checkForUpdatePeriodically(parent, lastUpdateCheck); //check for updates now - // break; - - // case ReturnQuestionDlg::BUTTON_NO: - // lastUpdateCheck = -1; //don't check for updates anymore - // break; - - // case ReturnQuestionDlg::BUTTON_CANCEL: - // break; - // } - //} - //else if (wxGetLocalTime() >= lastUpdateCheck + 7 * 24 * 3600) //check weekly { onBeforeInternetAccess(); //notify client before (potentially) blocking some time @@ -285,10 +282,17 @@ void zen::checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, co if (haveNewerVersion(onlineVersion)) { - if (showQuestionDlg(parent, ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_CANCEL, - _("A new version of FreeFileSync is available:") + L" " + onlineVersion + L"\n\n" + _("Download now?"), - QuestConfig().setCaption(_("New version found")).setLabelYes(_("&Download"))) == ReturnQuestionDlg::BUTTON_YES) - wxLaunchDefaultBrowser(L"http://freefilesync.sourceforge.net/get_latest.php"); + switch (showConfirmationDialog(parent, DialogInfoType::INFO, PopupDialogCfg(). + setTitle(_("Check for Program Updates")). + setMainInstructions(_("A new version of FreeFileSync is available:") + L" " + onlineVersion + L"\n\n" + _("Download now?")), + _("&Download"))) + { + case ConfirmationButton::DO_IT: + wxLaunchDefaultBrowser(L"http://freefilesync.sourceforge.net/get_latest.php"); + break; + case ConfirmationButton::CANCEL: + break; + } } break; @@ -296,10 +300,17 @@ void zen::checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, co break; //ignore this error case GET_VER_PAGE_NOT_FOUND: - if (showQuestionDlg(parent, ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_CANCEL, - _("Cannot find current FreeFileSync version number online. Do you want to check manually?"), - QuestConfig().setCaption(_("Error"))) == ReturnQuestionDlg::BUTTON_YES) - wxLaunchDefaultBrowser(L"http://freefilesync.sourceforge.net/"); + switch (showConfirmationDialog(parent, DialogInfoType::ERROR2, PopupDialogCfg(). + setTitle(_("Check for Program Updates")). + setMainInstructions(_("Cannot find current FreeFileSync version number online. Do you want to check manually?")), + _("&Check"))) + { + case ConfirmationButton::DO_IT: + wxLaunchDefaultBrowser(L"http://freefilesync.sourceforge.net/"); + break; + case ConfirmationButton::CANCEL: + break; + } break; } } diff --git a/ui/custom_grid.cpp b/ui/custom_grid.cpp index d2188f22..4f498a20 100644 --- a/ui/custom_grid.cpp +++ b/ui/custom_grid.cpp @@ -16,8 +16,8 @@ #include <wx+/string_conv.h> #include <wx+/rtl.h> #include <wx+/image_tools.h> +#include <wx+/image_resources.h> #include "../file_hierarchy.h" -#include "../lib/resources.h" using namespace zen; using namespace gridview; @@ -266,7 +266,7 @@ private: } protected: - virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected, bool hasFocus) + virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected) override { if (enabled) { @@ -280,6 +280,16 @@ protected: fillBackgroundDefaultColorAlternating(dc, rect, row % 2 == 0); else clearArea(dc, rect, getBackGroundColor(row)); + + //draw horizontal border if required + DisplayType dispTp = getRowDisplayType(row); + if (dispTp != DISP_TYPE_NORMAL && + dispTp == getRowDisplayType(row + 1)) + { + const wxColor colorGridLine = wxColour(192, 192, 192); //light grey + wxDCPenChanger dummy2(dc, wxPen(colorGridLine, 1, wxSOLID)); + dc.DrawLine(rect.GetBottomLeft(), rect.GetBottomRight() + wxPoint(1, 0)); + } } } else @@ -464,22 +474,10 @@ private: static const int GAP_SIZE = 2; - virtual void renderCell(Grid& grid, wxDC& dc, const wxRect& rect, size_t row, ColumnType colType) + virtual void renderCell(wxDC& dc, const wxRect& rect, size_t row, ColumnType colType, bool selected) override { wxRect rectTmp = rect; - //draw horizontal border if required - DisplayType dispTp = getRowDisplayType(row); - if (dispTp != DISP_TYPE_NORMAL && - dispTp == getRowDisplayType(row + 1)) - { - const wxColor colorGridLine = wxColour(192, 192, 192); //light grey - wxDCPenChanger dummy2(dc, wxPen(colorGridLine, 1, wxSOLID)); - dc.DrawLine(rect.GetBottomLeft(), rect.GetBottomRight() + wxPoint(1, 0)); - rectTmp.height -= 1; - } - //wxRect rectTmp = drawCellBorder(dc, rect); - const bool isActive = [&]() -> bool { if (const FileSystemObject* fsObj = this->getRawData(row)) @@ -544,7 +542,7 @@ private: dummy3 = make_unique<wxDCTextColourChanger>(dc, *wxBLACK); //accessibility: always set both foreground AND background colors! //draw text - if (static_cast<ColumnTypeRim>(colType) == COL_TYPE_SIZE && grid.GetLayoutDirection() != wxLayout_RightToLeft) + if (static_cast<ColumnTypeRim>(colType) == COL_TYPE_SIZE && refGrid().GetLayoutDirection() != wxLayout_RightToLeft) { //have file size right-justified (but don't change for RTL languages) rectTmp.width -= GAP_SIZE; @@ -558,7 +556,7 @@ private: } } - virtual int getBestSize(wxDC& dc, size_t row, ColumnType colType) + virtual int getBestSize(wxDC& dc, size_t row, ColumnType colType) override { // Partitioning: // ________________________________ @@ -596,13 +594,11 @@ private: return wxEmptyString; } - virtual void renderColumnLabel(Grid& tree, wxDC& dc, const wxRect& rect, ColumnType colType, bool highlighted) + virtual void renderColumnLabel(Grid& tree, wxDC& dc, const wxRect& rect, ColumnType colType, bool highlighted) override { wxRect rectInside = drawColumnLabelBorder(dc, rect); drawColumnLabelBackground(dc, rectInside, highlighted); - const int COLUMN_GAP_LEFT = 4; - rectInside.x += COLUMN_GAP_LEFT; rectInside.width -= COLUMN_GAP_LEFT; drawColumnLabelText(dc, rectInside, getColumnLabel(colType)); @@ -651,7 +647,7 @@ private: return Zstring(); } - virtual wxString getToolTip(size_t row, ColumnType colType) const + virtual wxString getToolTip(size_t row, ColumnType colType) const override { wxString toolTip; @@ -707,9 +703,9 @@ public: } private: - virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected, bool hasFocus) + virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected) override { - GridDataRim<LEFT_SIDE>::renderRowBackgound(dc, rect, row, enabled, selected, hasFocus); + GridDataRim<LEFT_SIDE>::renderRowBackgound(dc, rect, row, enabled, selected); //mark rows selected on navigation grid: if (enabled && !selected) @@ -887,7 +883,7 @@ public: void highlightSyncAction(bool value) { highlightSyncAction_ = value; } private: - virtual wxString getValue(size_t row, ColumnType colType) const + virtual wxString getValue(size_t row, ColumnType colType) const override { if (const FileSystemObject* fsObj = getRawData(row)) switch (static_cast<ColumnTypeMiddle>(colType)) @@ -902,15 +898,15 @@ private: return wxString(); } - virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected, bool hasFocus) + virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected) override { const FileSystemObject* fsObj = getRawData(row); - GridData::drawCellBackground(dc, rect, enabled, selected, hasFocus, highlightSyncAction_ ? + GridData::drawCellBackground(dc, rect, enabled, selected, highlightSyncAction_ ? getBackGroundColorSyncAction(fsObj) : getBackGroundColorCmpCategory(fsObj)); } - virtual void renderCell(Grid& grid, wxDC& dc, const wxRect& rect, size_t row, ColumnType colType) + virtual void renderCell(wxDC& dc, const wxRect& rect, size_t row, ColumnType colType, bool selected) override { auto drawInactiveColumBackground = [&](const FileSystemObject& fsObj) { @@ -1005,7 +1001,7 @@ private: } } - virtual wxString getColumnLabel(ColumnType colType) const + virtual wxString getColumnLabel(ColumnType colType) const override { switch (static_cast<ColumnTypeMiddle>(colType)) { @@ -1019,9 +1015,9 @@ private: return wxEmptyString; } - virtual wxString getToolTip(ColumnType colType) const { return getColumnLabel(colType); } + virtual wxString getToolTip(ColumnType colType) const override { return getColumnLabel(colType); } - virtual void renderColumnLabel(Grid& tree, wxDC& dc, const wxRect& rect, ColumnType colType, bool highlighted) + virtual void renderColumnLabel(Grid& tree, wxDC& dc, const wxRect& rect, ColumnType colType, bool highlighted) override { switch (static_cast<ColumnTypeMiddle>(colType)) { diff --git a/ui/dir_name.cpp b/ui/dir_name.cpp index cbaafe78..022773e4 100644 --- a/ui/dir_name.cpp +++ b/ui/dir_name.cpp @@ -12,9 +12,9 @@ #include <wx/textctrl.h> #include <wx/statbox.h> #include <wx/dirdlg.h> -#include <wx/msgdlg.h> #include <wx/scrolwin.h> #include <wx+/string_conv.h> +#include <wx+/popup_dlg.h> #include "../lib/resolve_path.h" #include "folder_history_box.h" @@ -227,7 +227,7 @@ void DirectoryName<NameControl>::onSelectDir(wxCommandEvent& event) errorMsg); //out, optional: call freeString() after use! if (errorMsg) { - wxMessageBox(errorMsg, /*L"FreeFileSync - " +*/ _("Error"), wxOK | wxICON_ERROR); //component used by FFS *and* RTS! + showNotificationDialog(&dropWindow_, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(errorMsg)); return; } if (cancelled || !selectedFolder) diff --git a/ui/folder_history_box.cpp b/ui/folder_history_box.cpp index 89832a98..4676aa43 100644 --- a/ui/folder_history_box.cpp +++ b/ui/folder_history_box.cpp @@ -7,9 +7,11 @@ #include "folder_history_box.h" #include <list> #include <zen/scope_guard.h> -//#include <wx/scrolwin.h> #include <wx+/string_conv.h> #include "../lib/resolve_path.h" +#ifdef ZEN_LINUX +#include <gtk/gtk.h> +#endif using namespace zen; @@ -47,6 +49,16 @@ FolderHistoryBox::FolderHistoryBox(wxWindow* parent, On OS attaching to wxEVT_LEFT_DOWN leads to occasional crashes, especially when double-clicking */ #endif + +#ifdef ZEN_LINUX + //file drag and drop directly into the text control unhelpfully inserts in format "file://..<cr><nl>" + //1. this format's implementation is a mess: http://www.lephpfacile.com/manuel-php-gtk/tutorials.filednd.urilist.php + //2. even if we handle "drag-data-received" for "text/uri-list" this doesn't consider logic in dirname.cpp + //=> disable all drop events on the text control (disables text drop, too, but not a big loss) + //=> all drops are nicely propagated as regular file drop events like they should have been in the first place! + if (GtkWidget* widget = GetConnectWidget()) + ::gtk_drag_dest_unset(widget); +#endif } diff --git a/ui/folder_history_types.h b/ui/folder_history_types.h new file mode 100644 index 00000000..23766413 --- /dev/null +++ b/ui/folder_history_types.h @@ -0,0 +1,25 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + +#ifndef FOLDER_HIST_TYPES_32481457137432143214 +#define FOLDER_HIST_TYPES_32481457137432143214 + +//#include <ctime> +#include <zen/zstring.h> + + +namespace zen +{ +struct ConfigHistoryItem +{ + explicit ConfigHistoryItem(const Zstring& name) : configFile(name) {} + ConfigHistoryItem() {} + Zstring configFile; + //time_t lastSyncTime; +}; +} + +#endif //FOLDER_HIST_TYPES_32481457137432143214 diff --git a/ui/folder_pair.h b/ui/folder_pair.h index f677df4f..be01e79d 100644 --- a/ui/folder_pair.h +++ b/ui/folder_pair.h @@ -12,12 +12,12 @@ #include <wx+/context_menu.h> #include <wx+/bitmap_button.h> #include <wx+/image_tools.h> +#include <wx+/image_resources.h> #include "dir_name.h" #include "small_dlgs.h" #include "sync_cfg.h" #include "../lib/norm_filter.h" #include "../structures.h" -#include "../lib/resources.h" namespace zen { @@ -64,35 +64,34 @@ private: if (altCompConfig.get()) { setImage(*basicPanel_.m_bpButtonAltCompCfg, getResourceImage(L"cfg_compare_small")); - basicPanel_.m_bpButtonAltCompCfg->SetToolTip(_("Selected variant:") + L" " + getVariantName(altCompConfig->compareVar)); + basicPanel_.m_bpButtonAltCompCfg->SetToolTip(_("Alternate comparison settings") + L" (" + getVariantName(altCompConfig->compareVar) + L")"); } else { setImage(*basicPanel_.m_bpButtonAltCompCfg, greyScale(getResourceImage(L"cfg_compare_small"))); - basicPanel_.m_bpButtonAltCompCfg->SetToolTip(_("Select alternate comparison settings")); + basicPanel_.m_bpButtonAltCompCfg->SetToolTip(_("Alternate comparison settings")); } if (altSyncConfig.get()) { setImage(*basicPanel_.m_bpButtonAltSyncCfg, getResourceImage(L"cfg_sync_small")); - basicPanel_.m_bpButtonAltSyncCfg->SetToolTip(_("Selected variant:") + L" " + getVariantName(altSyncConfig->directionCfg.var)); + basicPanel_.m_bpButtonAltSyncCfg->SetToolTip(_("Alternate synchronization settings") + L" (" + getVariantName(altSyncConfig->directionCfg.var) + L")"); } else { setImage(*basicPanel_.m_bpButtonAltSyncCfg, greyScale(getResourceImage(L"cfg_sync_small"))); - basicPanel_.m_bpButtonAltSyncCfg->SetToolTip(_("Select alternate synchronization settings")); + basicPanel_.m_bpButtonAltSyncCfg->SetToolTip(_("Alternate synchronization settings")); } - //test for Null-filter if (!isNullFilter(localFilter)) { setImage(*basicPanel_.m_bpButtonLocalFilter, getResourceImage(L"filter_small")); - basicPanel_.m_bpButtonLocalFilter->SetToolTip(_("Filter is active")); + basicPanel_.m_bpButtonLocalFilter->SetToolTip(_("Local filter") + L" (" + _("Active") + L")"); } else { setImage(*basicPanel_.m_bpButtonLocalFilter, greyScale(getResourceImage(L"filter_small"))); - basicPanel_.m_bpButtonLocalFilter->SetToolTip(_("No filter selected")); + basicPanel_.m_bpButtonLocalFilter->SetToolTip(_("Local filter") + L" (" + _("None") + L")"); } } @@ -169,7 +168,7 @@ private: CompConfig cmpCfg = altCompConfig.get() ? *altCompConfig : mainCfg.cmpConfig; - if (showCompareCfgDialog(getParentWindow(), cmpCfg) == ReturnSmallDlg::BUTTON_OKAY) + if (showCompareCfgDialog(getParentWindow(), cmpCfg, _("Alternate Comparison Settings")) == ReturnSmallDlg::BUTTON_OKAY) { altCompConfig = std::make_shared<CompConfig>(cmpCfg); refreshButtons(); @@ -187,6 +186,7 @@ private: if (showSyncConfigDlg(getParentWindow(), cmpCfg.compareVar, syncCfg, + _("Alternate Synchronization Settings"), nullptr, nullptr) == ReturnSyncConfig::BUTTON_OKAY) //optional input parameter { @@ -200,9 +200,7 @@ private: { FilterConfig localFiltTmp = localFilter; - if (showFilterDialog(getParentWindow(), - false, //is local filter dialog - localFiltTmp) == ReturnSmallDlg::BUTTON_OKAY) + if (showFilterDialog(getParentWindow(), localFiltTmp, _("Local Filter")) == ReturnSmallDlg::BUTTON_OKAY) { localFilter = localFiltTmp; refreshButtons(); diff --git a/ui/gui_generated.cpp b/ui/gui_generated.cpp index 19794897..717a8535 100644 --- a/ui/gui_generated.cpp +++ b/ui/gui_generated.cpp @@ -19,3607 +19,3487 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( 640,400 ), wxDefaultSize ); - - m_menubar1 = new wxMenuBar( 0 ); - m_menuFile = new wxMenu(); - m_menuItemNew = new wxMenuItem( m_menuFile, wxID_NEW, wxString( _("&New") ) + wxT('\t') + wxT("Ctrl+N"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemNew ); - - m_menuItemLoad = new wxMenuItem( m_menuFile, wxID_OPEN, wxString( _("&Open...") ) + wxT('\t') + wxT("Ctrl+O"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemLoad ); - - m_menuItemSave = new wxMenuItem( m_menuFile, wxID_SAVE, wxString( _("&Save") ) + wxT('\t') + wxT("Ctrl+S"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemSave ); - - m_menuItemSaveAs = new wxMenuItem( m_menuFile, wxID_SAVEAS, wxString( _("Save &as...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemSaveAs ); - - m_menuItem7 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("Save as &batch job...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItem7 ); - - m_menuFile->AppendSeparator(); - - m_menuItem10 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("1. &Compare") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItem10 ); - - m_menuItem11 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("2. &Synchronize") ) + wxT('\t') + wxT("F8"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItem11 ); - - m_menuFile->AppendSeparator(); - - wxMenuItem* m_menuItem4; - m_menuItem4 = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("&Quit") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItem4 ); - - m_menubar1->Append( m_menuFile, _("&Program") ); - - m_menuTools = new wxMenu(); - m_menuLanguages = new wxMenu(); - m_menuTools->Append( -1, _("&Language"), m_menuLanguages ); - - m_menuTools->AppendSeparator(); - - wxMenuItem* m_menuItem5; - m_menuItem5 = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItem5 ); - - m_menuItemGlobSett = new wxMenuItem( m_menuTools, wxID_PREFERENCES, wxString( _("&Global settings") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemGlobSett ); - - m_menubar1->Append( m_menuTools, _("&Tools") ); - - m_menuHelp = new wxMenu(); - m_menuItemManual = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&Content") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); - m_menuHelp->Append( m_menuItemManual ); - - m_menuCheckVersion = new wxMenu(); - m_menuItemCheckVersionNow = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("&Check now") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuCheckVersion->Append( m_menuItemCheckVersionNow ); - - m_menuItemCheckVersionAuto = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("Check &automatically once a week") ) , wxEmptyString, wxITEM_CHECK ); - m_menuCheckVersion->Append( m_menuItemCheckVersionAuto ); - m_menuItemCheckVersionAuto->Check( true ); - - m_menuHelp->Append( -1, _("Check for new &version"), m_menuCheckVersion ); - - m_menuHelp->AppendSeparator(); - - m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL ); - m_menuHelp->Append( m_menuItemAbout ); - - m_menubar1->Append( m_menuHelp, _("&Help") ); - - this->SetMenuBar( m_menubar1 ); - - bSizerPanelHolder = new wxBoxSizer( wxVERTICAL ); - - m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER|wxTAB_TRAVERSAL ); - bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL ); - - - bSizerTopButtons->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer1721; - bSizer1721 = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonCompare = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Compare"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_buttonCompare->SetDefault(); - m_buttonCompare->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_buttonCompare->SetToolTip( _("dummy") ); - - bSizer1721->Add( m_buttonCompare, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_buttonCancel = new zen::BitmapTextButton( m_panelTopButtons, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( 180,-1 ), 0 ); - m_buttonCancel->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_buttonCancel->Enable( false ); - m_buttonCancel->Hide(); - - bSizer1721->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - m_bpButtonCmpConfig->SetToolTip( _("dummy") ); - - bSizer1721->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 3 ); - - - bSizerTopButtons->Add( bSizer1721, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 4 ); - - - bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer1731; - bSizer1731 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - m_bpButtonSyncConfig->SetToolTip( _("dummy") ); - - bSizer1731->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 ); - - m_buttonSync = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Synchronize"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_buttonSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_buttonSync->SetToolTip( _("dummy") ); - - bSizer1731->Add( m_buttonSync, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerTopButtons->Add( bSizer1731, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 4 ); - - - bSizerTopButtons->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelTopButtons->SetSizer( bSizerTopButtons ); - m_panelTopButtons->Layout(); - bSizerTopButtons->Fit( m_panelTopButtons ); - bSizerPanelHolder->Add( m_panelTopButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1601; - bSizer1601 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer91; - bSizer91 = new wxBoxSizer( wxHORIZONTAL ); - - m_panelTopLeft = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelTopLeft->SetMinSize( wxSize( 1,-1 ) ); - - wxFlexGridSizer* fgSizer8; - fgSizer8 = new wxFlexGridSizer( 0, 2, 0, 0 ); - fgSizer8->AddGrowableCol( 1 ); - fgSizer8->SetFlexibleDirection( wxBOTH ); - fgSizer8->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_ALL ); - - - fgSizer8->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextResolvedPathL = new wxStaticText( m_panelTopLeft, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextResolvedPathL->Wrap( -1 ); - fgSizer8->Add( m_staticTextResolvedPathL, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); - - wxBoxSizer* bSizer159; - bSizer159 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - m_bpButtonAddPair->SetToolTip( _("Add folder pair") ); - - bSizer159->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); - - bSizer159->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - fgSizer8->Add( bSizer159, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryLeft = new FolderHistoryBox( m_panelTopLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer182->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirLeft = new wxButton( m_panelTopLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirLeft->SetToolTip( _("Select a folder") ); - - bSizer182->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - fgSizer8->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - m_panelTopLeft->SetSizer( fgSizer8 ); - m_panelTopLeft->Layout(); - fgSizer8->Fit( m_panelTopLeft ); - bSizer91->Add( m_panelTopLeft, 1, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_panelTopMiddle = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1771; - bSizer1771 = new wxBoxSizer( wxVERTICAL ); - - - bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonSwapSides = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW ); - m_bpButtonSwapSides->SetToolTip( _("Swap sides") ); - - bSizer1771->Add( m_bpButtonSwapSides, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonAltCompCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer160->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer160->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 ); - - m_bpButtonAltSyncCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer160->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer1771->Add( bSizer160, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panelTopMiddle->SetSizer( bSizer1771 ); - m_panelTopMiddle->Layout(); - bSizer1771->Fit( m_panelTopMiddle ); - bSizer91->Add( m_panelTopMiddle, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_panelTopRight = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelTopRight->SetMinSize( wxSize( 1,-1 ) ); - - wxBoxSizer* bSizer183; - bSizer183 = new wxBoxSizer( wxVERTICAL ); - - m_staticTextResolvedPathR = new wxStaticText( m_panelTopRight, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextResolvedPathR->Wrap( -1 ); - bSizer183->Add( m_staticTextResolvedPathR, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); - - wxBoxSizer* bSizer179; - bSizer179 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryRight = new FolderHistoryBox( m_panelTopRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer179->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirRight = new wxButton( m_panelTopRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirRight->SetToolTip( _("Select a folder") ); - - bSizer179->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer183->Add( bSizer179, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - m_panelTopRight->SetSizer( bSizer183 ); - m_panelTopRight->Layout(); - bSizer183->Fit( m_panelTopRight ); - bSizer91->Add( m_panelTopRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - - bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 ); - - m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL ); - m_scrolledWindowFolderPairs->SetScrollRate( 10, 10 ); - m_scrolledWindowFolderPairs->SetMinSize( wxSize( -1,0 ) ); - - bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL ); - - - m_scrolledWindowFolderPairs->SetSizer( bSizerAddFolderPairs ); - m_scrolledWindowFolderPairs->Layout(); - bSizerAddFolderPairs->Fit( m_scrolledWindowFolderPairs ); - bSizer1601->Add( m_scrolledWindowFolderPairs, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - m_panelDirectoryPairs->SetSizer( bSizer1601 ); - m_panelDirectoryPairs->Layout(); - bSizer1601->Fit( m_panelDirectoryPairs ); - bSizerPanelHolder->Add( m_panelDirectoryPairs, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_gridNavi = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridNavi->SetScrollRate( 5, 5 ); - bSizerPanelHolder->Add( m_gridNavi, 1, wxEXPAND, 5 ); - - m_panelCenter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1711; - bSizer1711 = new wxBoxSizer( wxVERTICAL ); - - m_splitterMain = new zen::TripleSplitter( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1781; - bSizer1781 = new wxBoxSizer( wxHORIZONTAL ); - - m_gridMainL = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridMainL->SetScrollRate( 5, 5 ); - bSizer1781->Add( m_gridMainL, 1, wxEXPAND, 5 ); - - m_gridMainC = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridMainC->SetScrollRate( 5, 5 ); - bSizer1781->Add( m_gridMainC, 0, wxEXPAND, 5 ); - - m_gridMainR = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridMainR->SetScrollRate( 5, 5 ); - bSizer1781->Add( m_gridMainR, 1, wxEXPAND, 5 ); - - - m_splitterMain->SetSizer( bSizer1781 ); - m_splitterMain->Layout(); - bSizer1781->Fit( m_splitterMain ); - bSizer1711->Add( m_splitterMain, 1, wxEXPAND, 5 ); - - m_panelStatusBar = new wxPanel( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer451; - bSizer451 = new wxBoxSizer( wxHORIZONTAL ); - - bSizer451->SetMinSize( wxSize( -1,22 ) ); - bSizerFileStatus = new wxBoxSizer( wxHORIZONTAL ); - - bSizerStatusLeft = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer53; - bSizer53 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - bSizerStatusLeftDirectories = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapSmallDirectoryLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerStatusLeftDirectories->Add( m_bitmapSmallDirectoryLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusLeftDirectories->Add( 2, 0, 0, 0, 5 ); - - m_staticTextStatusLeftDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusLeftDirs->Wrap( -1 ); - bSizerStatusLeftDirectories->Add( m_staticTextStatusLeftDirs, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer53->Add( bSizerStatusLeftDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - bSizerStatusLeftFiles = new wxBoxSizer( wxHORIZONTAL ); - - - bSizerStatusLeftFiles->Add( 10, 0, 0, 0, 5 ); - - m_bitmapSmallFileLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerStatusLeftFiles->Add( m_bitmapSmallFileLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusLeftFiles->Add( 2, 0, 0, 0, 5 ); - - m_staticTextStatusLeftFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusLeftFiles->Wrap( -1 ); - bSizerStatusLeftFiles->Add( m_staticTextStatusLeftFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusLeftFiles->Add( 4, 0, 0, 0, 5 ); - - m_staticTextStatusLeftBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusLeftBytes->Wrap( -1 ); - bSizerStatusLeftFiles->Add( m_staticTextStatusLeftBytes, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer53->Add( bSizerStatusLeftFiles, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusLeft->Add( bSizer53, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizerStatusLeft->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 2 ); - - - bSizerFileStatus->Add( bSizerStatusLeft, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextStatusMiddle = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusMiddle->Wrap( -1 ); - m_staticTextStatusMiddle->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerFileStatus->Add( m_staticTextStatusMiddle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - bSizerStatusRight = new wxBoxSizer( wxHORIZONTAL ); - - m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizerStatusRight->Add( m_staticline10, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP, 2 ); - - wxBoxSizer* bSizer52; - bSizer52 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - bSizerStatusRightDirectories = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapSmallDirectoryRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerStatusRightDirectories->Add( m_bitmapSmallDirectoryRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusRightDirectories->Add( 2, 0, 0, 0, 5 ); - - m_staticTextStatusRightDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusRightDirs->Wrap( -1 ); - bSizerStatusRightDirectories->Add( m_staticTextStatusRightDirs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer52->Add( bSizerStatusRightDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - bSizerStatusRightFiles = new wxBoxSizer( wxHORIZONTAL ); - - - bSizerStatusRightFiles->Add( 10, 0, 0, 0, 5 ); - - m_bitmapSmallFileRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerStatusRightFiles->Add( m_bitmapSmallFileRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusRightFiles->Add( 2, 0, 0, 0, 5 ); - - m_staticTextStatusRightFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusRightFiles->Wrap( -1 ); - bSizerStatusRightFiles->Add( m_staticTextStatusRightFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusRightFiles->Add( 4, 0, 0, 0, 5 ); - - m_staticTextStatusRightBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusRightBytes->Wrap( -1 ); - bSizerStatusRightFiles->Add( m_staticTextStatusRightBytes, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer52->Add( bSizerStatusRightFiles, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusRight->Add( bSizer52, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerFileStatus->Add( bSizerStatusRight, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer451->Add( bSizerFileStatus, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticTextFullStatus = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextFullStatus->Wrap( -1 ); - m_staticTextFullStatus->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer451->Add( m_staticTextFullStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - - m_panelStatusBar->SetSizer( bSizer451 ); - m_panelStatusBar->Layout(); - bSizer451->Fit( m_panelStatusBar ); - bSizer1711->Add( m_panelStatusBar, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - m_panelCenter->SetSizer( bSizer1711 ); - m_panelCenter->Layout(); - bSizer1711->Fit( m_panelCenter ); - bSizerPanelHolder->Add( m_panelCenter, 1, wxEXPAND, 5 ); - - m_panelSearch = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1713; - bSizer1713 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonHideSearch = new wxBitmapButton( m_panelSearch, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - m_bpButtonHideSearch->SetToolTip( _("Close search bar") ); - - bSizer1713->Add( m_bpButtonHideSearch, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_staticText101 = new wxStaticText( m_panelSearch, wxID_ANY, _("Find what:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText101->Wrap( -1 ); - bSizer1713->Add( m_staticText101, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_textCtrlSearchTxt = new wxTextCtrl( m_panelSearch, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220,-1 ), 0|wxWANTS_CHARS ); - m_textCtrlSearchTxt->SetMaxLength( 0 ); - bSizer1713->Add( m_textCtrlSearchTxt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_checkBoxMatchCase = new wxCheckBox( m_panelSearch, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer1713->Add( m_checkBoxMatchCase, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - - m_panelSearch->SetSizer( bSizer1713 ); - m_panelSearch->Layout(); - bSizer1713->Fit( m_panelSearch ); - bSizerPanelHolder->Add( m_panelSearch, 0, 0, 5 ); - - m_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - bSizerConfig = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer151; - bSizer151 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonOpen = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonOpen->SetToolTip( _("dummy") ); - - bSizer151->Add( m_bpButtonOpen, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonSave->SetToolTip( _("dummy") ); - - bSizer151->Add( m_bpButtonSave, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonBatchJob = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonBatchJob->SetToolTip( _("Save as batch job") ); - - bSizer151->Add( m_bpButtonBatchJob, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerConfig->Add( bSizer151, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_listBoxHistory = new wxListBox( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB ); - m_listBoxHistory->SetMinSize( wxSize( -1,40 ) ); - - bSizerConfig->Add( m_listBoxHistory, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelConfig->SetSizer( bSizerConfig ); - m_panelConfig->Layout(); - bSizerConfig->Fit( m_panelConfig ); - bSizerPanelHolder->Add( m_panelConfig, 0, 0, 5 ); - - m_panelFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer171; - bSizer171 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonFilter = new wxBitmapButton( m_panelFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE ); - bSizer171->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_checkBoxHideExcluded = new wxCheckBox( m_panelFilter, wxID_ANY, _("Hide excluded items"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxHideExcluded->SetToolTip( _("Show filtered or temporarily excluded files") ); - - bSizer171->Add( m_checkBoxHideExcluded, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - - m_panelFilter->SetSizer( bSizer171 ); - m_panelFilter->Layout(); - bSizer171->Fit( m_panelFilter ); - bSizerPanelHolder->Add( m_panelFilter, 0, 0, 5 ); - - m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - bSizer1801 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer1801->Add( 0, 0, 1, wxEXPAND, 5 ); - - bSizerStatistics = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer1712; - bSizer1712 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer1712->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer1712->Add( 5, 2, 0, 0, 5 ); - - - bSizer1712->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateLeft->Wrap( -1 ); - m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer1712->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerStatistics->Add( bSizer1712, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer172->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer172->Add( 5, 2, 0, 0, 5 ); - - - bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateLeft->Wrap( -1 ); - m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer172->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerStatistics->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer173->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer173->Add( 5, 2, 0, 0, 5 ); - - - bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteLeft->Wrap( -1 ); - m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer173->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - bSizerData = new wxBoxSizer( wxVERTICAL ); - - m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapData->SetToolTip( _("Total bytes to copy") ); - - bSizerData->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerData->Add( 5, 2, 0, 0, 5 ); - - - bSizerData->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextData->Wrap( -1 ); - m_staticTextData->SetToolTip( _("Total bytes to copy") ); - - bSizerData->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizerData, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer176; - bSizer176 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer176->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer176->Add( 5, 2, 0, 0, 5 ); - - - bSizer176->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteRight->Wrap( -1 ); - m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer176->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer177; - bSizer177 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer177->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer177->Add( 5, 2, 0, 0, 5 ); - - - bSizer177->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateRight->Wrap( -1 ); - m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer177->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer178; - bSizer178 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer178->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer178->Add( 5, 2, 0, 0, 5 ); - - - bSizer178->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateRight->Wrap( -1 ); - m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer178->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer1801->Add( bSizerStatistics, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer1801->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panelStatistics->SetSizer( bSizer1801 ); - m_panelStatistics->Layout(); - bSizer1801->Fit( m_panelStatistics ); - bSizerPanelHolder->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonViewTypeSyncAction = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonViewTypeSyncAction, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonShowCreateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowUpdateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowDeleteLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowLeftOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowLeftNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowEqual = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowDifferent = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowDoNothing = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowDoNothing, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowRightNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowRightOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowDeleteRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowUpdateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowCreateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowConflict = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panelViewFilter->SetSizer( bSizerViewFilter ); - m_panelViewFilter->Layout(); - bSizerViewFilter->Fit( m_panelViewFilter ); - bSizerPanelHolder->Add( m_panelViewFilter, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - this->SetSizer( bSizerPanelHolder ); - this->Layout(); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) ); - this->Connect( m_menuItemNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) ); - this->Connect( m_menuItemLoad->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) ); - this->Connect( m_menuItemSave->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) ); - this->Connect( m_menuItemSaveAs->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) ); - this->Connect( m_menuItem7->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ) ); - this->Connect( m_menuItem10->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) ); - this->Connect( m_menuItem11->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) ); - this->Connect( m_menuItem4->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) ); - this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); - this->Connect( m_menuItemGlobSett->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) ); - this->Connect( m_menuItemManual->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); - this->Connect( m_menuItemCheckVersionNow->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); - this->Connect( m_menuItemCheckVersionAuto->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersionAutomatically ) ); - this->Connect( m_menuItemAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) ); - m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this ); - m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this ); - m_bpButtonCmpConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCompSettingsContext ), NULL, this ); - m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this ); - m_bpButtonSyncConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnSyncSettingsContext ), NULL, this ); - m_buttonSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this ); - m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this ); - m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this ); - m_bpButtonSwapSides->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this ); - m_bpButtonHideSearch->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnHideSearchPanel ), NULL, this ); - m_textCtrlSearchTxt->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( MainDialogGenerated::OnSearchGridEnter ), NULL, this ); - m_bpButtonOpen->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ), NULL, this ); - m_bpButtonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ), NULL, this ); - m_bpButtonBatchJob->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_CHAR, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCfgHistoryRightClick ), NULL, this ); - m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this ); - m_bpButtonFilter->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnGlobalFilterContext ), NULL, this ); - m_checkBoxHideExcluded->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnShowExcluded ), NULL, this ); - m_bpButtonViewTypeSyncAction->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewType ), NULL, this ); - m_bpButtonShowCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowCreateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowUpdateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowUpdateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDeleteLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowLeftOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowLeftNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowEqual->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDifferent->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDoNothing->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDoNothing->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowRightNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowRightOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDeleteRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowUpdateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowUpdateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowCreateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowConflict->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + this->SetSizeHints( wxSize( 640,400 ), wxDefaultSize ); + + m_menubar1 = new wxMenuBar( 0 ); + m_menuFile = new wxMenu(); + m_menuItemNew = new wxMenuItem( m_menuFile, wxID_NEW, wxString( _("&New") ) + wxT('\t') + wxT("Ctrl+N"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemNew ); + + m_menuItemLoad = new wxMenuItem( m_menuFile, wxID_OPEN, wxString( _("&Open...") ) + wxT('\t') + wxT("Ctrl+O"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemLoad ); + + m_menuItemSave = new wxMenuItem( m_menuFile, wxID_SAVE, wxString( _("&Save") ) + wxT('\t') + wxT("Ctrl+S"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemSave ); + + m_menuItemSaveAs = new wxMenuItem( m_menuFile, wxID_SAVEAS, wxString( _("Save &as...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemSaveAs ); + + m_menuItem7 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("Save as &batch job...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItem7 ); + + m_menuFile->AppendSeparator(); + + m_menuItem10 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("1. &Compare") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItem10 ); + + m_menuItem11 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("2. &Synchronize") ) + wxT('\t') + wxT("F8"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItem11 ); + + m_menuFile->AppendSeparator(); + + wxMenuItem* m_menuItem4; + m_menuItem4 = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("&Quit") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItem4 ); + + m_menubar1->Append( m_menuFile, _("&Program") ); + + m_menuTools = new wxMenu(); + m_menuItemGlobSett = new wxMenuItem( m_menuTools, wxID_PREFERENCES, wxString( _("&Global settings") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemGlobSett ); + + m_menuTools->AppendSeparator(); + + m_menuLanguages = new wxMenu(); + m_menuTools->Append( -1, _("&Language"), m_menuLanguages ); + + wxMenuItem* m_menuItem15; + m_menuItem15 = new wxMenuItem( m_menuTools, wxID_FIND, wxString( _("&Find...") ) + wxT('\t') + wxT("Ctrl+F"), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItem15 ); + + wxMenuItem* m_menuItem5; + m_menuItem5 = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItem5 ); + + m_menubar1->Append( m_menuTools, _("&Tools") ); + + m_menuHelp = new wxMenu(); + m_menuItemManual = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemManual ); + + m_menuCheckVersion = new wxMenu(); + m_menuItemCheckVersionNow = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("&Check now") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuCheckVersion->Append( m_menuItemCheckVersionNow ); + + m_menuItemCheckVersionAuto = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("Check &automatically once a week") ) , wxEmptyString, wxITEM_CHECK ); + m_menuCheckVersion->Append( m_menuItemCheckVersionAuto ); + m_menuItemCheckVersionAuto->Check( true ); + + m_menuHelp->Append( -1, _("&Check for new version"), m_menuCheckVersion ); + + m_menuHelp->AppendSeparator(); + + m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemAbout ); + + m_menubar1->Append( m_menuHelp, _("&Help") ); + + this->SetMenuBar( m_menubar1 ); + + bSizerPanelHolder = new wxBoxSizer( wxVERTICAL ); + + m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER|wxTAB_TRAVERSAL ); + bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL ); + + + bSizerTopButtons->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer1721; + bSizer1721 = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonCompare = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Compare"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonCompare->SetDefault(); + m_buttonCompare->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_buttonCompare->SetToolTip( _("dummy") ); + + bSizer1721->Add( m_buttonCompare, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_buttonCancel = new zen::BitmapTextButton( m_panelTopButtons, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( 180,-1 ), 0 ); + m_buttonCancel->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_buttonCancel->Enable( false ); + m_buttonCancel->Hide(); + + bSizer1721->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + m_bpButtonCmpConfig->SetToolTip( _("dummy") ); + + bSizer1721->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 3 ); + + + bSizerTopButtons->Add( bSizer1721, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 4 ); + + + bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer1731; + bSizer1731 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + m_bpButtonSyncConfig->SetToolTip( _("dummy") ); + + bSizer1731->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 ); + + m_buttonSync = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Synchronize"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_buttonSync->SetToolTip( _("dummy") ); + + bSizer1731->Add( m_buttonSync, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerTopButtons->Add( bSizer1731, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 4 ); + + + bSizerTopButtons->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelTopButtons->SetSizer( bSizerTopButtons ); + m_panelTopButtons->Layout(); + bSizerTopButtons->Fit( m_panelTopButtons ); + bSizerPanelHolder->Add( m_panelTopButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1601; + bSizer1601 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer91; + bSizer91 = new wxBoxSizer( wxHORIZONTAL ); + + m_panelTopLeft = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelTopLeft->SetMinSize( wxSize( 1,-1 ) ); + + wxFlexGridSizer* fgSizer8; + fgSizer8 = new wxFlexGridSizer( 0, 2, 0, 0 ); + fgSizer8->AddGrowableCol( 1 ); + fgSizer8->SetFlexibleDirection( wxBOTH ); + fgSizer8->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_ALL ); + + + fgSizer8->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextResolvedPathL = new wxStaticText( m_panelTopLeft, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextResolvedPathL->Wrap( -1 ); + fgSizer8->Add( m_staticTextResolvedPathL, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); + + wxBoxSizer* bSizer159; + bSizer159 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + m_bpButtonAddPair->SetToolTip( _("Add folder pair") ); + + bSizer159->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); + + bSizer159->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + fgSizer8->Add( bSizer159, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxHORIZONTAL ); + + m_directoryLeft = new FolderHistoryBox( m_panelTopLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer182->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectDirLeft = new wxButton( m_panelTopLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectDirLeft->SetToolTip( _("Select a folder") ); + + bSizer182->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + fgSizer8->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + m_panelTopLeft->SetSizer( fgSizer8 ); + m_panelTopLeft->Layout(); + fgSizer8->Fit( m_panelTopLeft ); + bSizer91->Add( m_panelTopLeft, 1, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_panelTopMiddle = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1771; + bSizer1771 = new wxBoxSizer( wxVERTICAL ); + + + bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonSwapSides = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW ); + m_bpButtonSwapSides->SetToolTip( _("Swap sides") ); + + bSizer1771->Add( m_bpButtonSwapSides, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonAltCompCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer160->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer160->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 ); + + m_bpButtonAltSyncCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer160->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer1771->Add( bSizer160, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panelTopMiddle->SetSizer( bSizer1771 ); + m_panelTopMiddle->Layout(); + bSizer1771->Fit( m_panelTopMiddle ); + bSizer91->Add( m_panelTopMiddle, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_panelTopRight = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelTopRight->SetMinSize( wxSize( 1,-1 ) ); + + wxBoxSizer* bSizer183; + bSizer183 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextResolvedPathR = new wxStaticText( m_panelTopRight, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextResolvedPathR->Wrap( -1 ); + bSizer183->Add( m_staticTextResolvedPathR, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); + + wxBoxSizer* bSizer179; + bSizer179 = new wxBoxSizer( wxHORIZONTAL ); + + m_directoryRight = new FolderHistoryBox( m_panelTopRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer179->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectDirRight = new wxButton( m_panelTopRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectDirRight->SetToolTip( _("Select a folder") ); + + bSizer179->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer183->Add( bSizer179, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + m_panelTopRight->SetSizer( bSizer183 ); + m_panelTopRight->Layout(); + bSizer183->Fit( m_panelTopRight ); + bSizer91->Add( m_panelTopRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + + bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 ); + + m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL ); + m_scrolledWindowFolderPairs->SetScrollRate( 10, 10 ); + m_scrolledWindowFolderPairs->SetMinSize( wxSize( -1,0 ) ); + + bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL ); + + + m_scrolledWindowFolderPairs->SetSizer( bSizerAddFolderPairs ); + m_scrolledWindowFolderPairs->Layout(); + bSizerAddFolderPairs->Fit( m_scrolledWindowFolderPairs ); + bSizer1601->Add( m_scrolledWindowFolderPairs, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + m_panelDirectoryPairs->SetSizer( bSizer1601 ); + m_panelDirectoryPairs->Layout(); + bSizer1601->Fit( m_panelDirectoryPairs ); + bSizerPanelHolder->Add( m_panelDirectoryPairs, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_gridNavi = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridNavi->SetScrollRate( 5, 5 ); + bSizerPanelHolder->Add( m_gridNavi, 1, wxEXPAND, 5 ); + + m_panelCenter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1711; + bSizer1711 = new wxBoxSizer( wxVERTICAL ); + + m_splitterMain = new zen::TripleSplitter( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1781; + bSizer1781 = new wxBoxSizer( wxHORIZONTAL ); + + m_gridMainL = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridMainL->SetScrollRate( 5, 5 ); + bSizer1781->Add( m_gridMainL, 1, wxEXPAND, 5 ); + + m_gridMainC = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridMainC->SetScrollRate( 5, 5 ); + bSizer1781->Add( m_gridMainC, 0, wxEXPAND, 5 ); + + m_gridMainR = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridMainR->SetScrollRate( 5, 5 ); + bSizer1781->Add( m_gridMainR, 1, wxEXPAND, 5 ); + + + m_splitterMain->SetSizer( bSizer1781 ); + m_splitterMain->Layout(); + bSizer1781->Fit( m_splitterMain ); + bSizer1711->Add( m_splitterMain, 1, wxEXPAND, 5 ); + + m_panelStatusBar = new wxPanel( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer451; + bSizer451 = new wxBoxSizer( wxHORIZONTAL ); + + bSizer451->SetMinSize( wxSize( -1,22 ) ); + bSizerFileStatus = new wxBoxSizer( wxHORIZONTAL ); + + bSizerStatusLeft = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer53; + bSizer53 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + bSizerStatusLeftDirectories = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapSmallDirectoryLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerStatusLeftDirectories->Add( m_bitmapSmallDirectoryLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusLeftDirectories->Add( 2, 0, 0, 0, 5 ); + + m_staticTextStatusLeftDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusLeftDirs->Wrap( -1 ); + bSizerStatusLeftDirectories->Add( m_staticTextStatusLeftDirs, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer53->Add( bSizerStatusLeftDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + bSizerStatusLeftFiles = new wxBoxSizer( wxHORIZONTAL ); + + + bSizerStatusLeftFiles->Add( 10, 0, 0, 0, 5 ); + + m_bitmapSmallFileLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerStatusLeftFiles->Add( m_bitmapSmallFileLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusLeftFiles->Add( 2, 0, 0, 0, 5 ); + + m_staticTextStatusLeftFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusLeftFiles->Wrap( -1 ); + bSizerStatusLeftFiles->Add( m_staticTextStatusLeftFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusLeftFiles->Add( 4, 0, 0, 0, 5 ); + + m_staticTextStatusLeftBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusLeftBytes->Wrap( -1 ); + bSizerStatusLeftFiles->Add( m_staticTextStatusLeftBytes, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer53->Add( bSizerStatusLeftFiles, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusLeft->Add( bSizer53, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizerStatusLeft->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 2 ); + + + bSizerFileStatus->Add( bSizerStatusLeft, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextStatusMiddle = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusMiddle->Wrap( -1 ); + bSizerFileStatus->Add( m_staticTextStatusMiddle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + bSizerStatusRight = new wxBoxSizer( wxHORIZONTAL ); + + m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizerStatusRight->Add( m_staticline10, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP, 2 ); + + wxBoxSizer* bSizer52; + bSizer52 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + bSizerStatusRightDirectories = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapSmallDirectoryRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerStatusRightDirectories->Add( m_bitmapSmallDirectoryRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusRightDirectories->Add( 2, 0, 0, 0, 5 ); + + m_staticTextStatusRightDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusRightDirs->Wrap( -1 ); + bSizerStatusRightDirectories->Add( m_staticTextStatusRightDirs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer52->Add( bSizerStatusRightDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + bSizerStatusRightFiles = new wxBoxSizer( wxHORIZONTAL ); + + + bSizerStatusRightFiles->Add( 10, 0, 0, 0, 5 ); + + m_bitmapSmallFileRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerStatusRightFiles->Add( m_bitmapSmallFileRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusRightFiles->Add( 2, 0, 0, 0, 5 ); + + m_staticTextStatusRightFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusRightFiles->Wrap( -1 ); + bSizerStatusRightFiles->Add( m_staticTextStatusRightFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusRightFiles->Add( 4, 0, 0, 0, 5 ); + + m_staticTextStatusRightBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusRightBytes->Wrap( -1 ); + bSizerStatusRightFiles->Add( m_staticTextStatusRightBytes, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer52->Add( bSizerStatusRightFiles, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusRight->Add( bSizer52, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerFileStatus->Add( bSizerStatusRight, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer451->Add( bSizerFileStatus, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticTextFullStatus = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextFullStatus->Wrap( -1 ); + m_staticTextFullStatus->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer451->Add( m_staticTextFullStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + m_panelStatusBar->SetSizer( bSizer451 ); + m_panelStatusBar->Layout(); + bSizer451->Fit( m_panelStatusBar ); + bSizer1711->Add( m_panelStatusBar, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + + m_panelCenter->SetSizer( bSizer1711 ); + m_panelCenter->Layout(); + bSizer1711->Fit( m_panelCenter ); + bSizerPanelHolder->Add( m_panelCenter, 1, wxEXPAND, 5 ); + + m_panelSearch = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1713; + bSizer1713 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonHideSearch = new wxBitmapButton( m_panelSearch, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + m_bpButtonHideSearch->SetToolTip( _("Close search bar") ); + + bSizer1713->Add( m_bpButtonHideSearch, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_staticText101 = new wxStaticText( m_panelSearch, wxID_ANY, _("Find:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText101->Wrap( -1 ); + bSizer1713->Add( m_staticText101, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_textCtrlSearchTxt = new wxTextCtrl( m_panelSearch, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220,-1 ), 0|wxWANTS_CHARS ); + m_textCtrlSearchTxt->SetMaxLength( 0 ); + bSizer1713->Add( m_textCtrlSearchTxt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_checkBoxMatchCase = new wxCheckBox( m_panelSearch, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer1713->Add( m_checkBoxMatchCase, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + m_panelSearch->SetSizer( bSizer1713 ); + m_panelSearch->Layout(); + bSizer1713->Fit( m_panelSearch ); + bSizerPanelHolder->Add( m_panelSearch, 0, 0, 5 ); + + m_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + bSizerConfig = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer151; + bSizer151 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonOpen = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonOpen->SetToolTip( _("dummy") ); + + bSizer151->Add( m_bpButtonOpen, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonSave->SetToolTip( _("dummy") ); + + bSizer151->Add( m_bpButtonSave, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonBatchJob = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonBatchJob->SetToolTip( _("Save as batch job") ); + + bSizer151->Add( m_bpButtonBatchJob, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerConfig->Add( bSizer151, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_listBoxHistory = new wxListBox( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB ); + m_listBoxHistory->SetMinSize( wxSize( -1,40 ) ); + + bSizerConfig->Add( m_listBoxHistory, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelConfig->SetSizer( bSizerConfig ); + m_panelConfig->Layout(); + bSizerConfig->Fit( m_panelConfig ); + bSizerPanelHolder->Add( m_panelConfig, 0, 0, 5 ); + + m_panelFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer171; + bSizer171 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonFilter = new wxBitmapButton( m_panelFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE ); + bSizer171->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_checkBoxHideExcluded = new wxCheckBox( m_panelFilter, wxID_ANY, _("Hide excluded items"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxHideExcluded->SetToolTip( _("Show filtered or temporarily excluded files") ); + + bSizer171->Add( m_checkBoxHideExcluded, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + m_panelFilter->SetSizer( bSizer171 ); + m_panelFilter->Layout(); + bSizer171->Fit( m_panelFilter ); + bSizerPanelHolder->Add( m_panelFilter, 0, 0, 5 ); + + m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + bSizer1801 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer1801->Add( 0, 0, 1, wxEXPAND, 5 ); + + bSizerStatistics = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer1712; + bSizer1712 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer1712->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer1712->Add( 5, 2, 0, 0, 5 ); + + + bSizer1712->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateLeft->Wrap( -1 ); + m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer1712->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerStatistics->Add( bSizer1712, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer172->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer172->Add( 5, 2, 0, 0, 5 ); + + + bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateLeft->Wrap( -1 ); + m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer172->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerStatistics->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer173->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer173->Add( 5, 2, 0, 0, 5 ); + + + bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteLeft->Wrap( -1 ); + m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer173->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + bSizerData = new wxBoxSizer( wxVERTICAL ); + + m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapData->SetToolTip( _("Total bytes to copy") ); + + bSizerData->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerData->Add( 5, 2, 0, 0, 5 ); + + + bSizerData->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextData->Wrap( -1 ); + m_staticTextData->SetToolTip( _("Total bytes to copy") ); + + bSizerData->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizerData, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer176; + bSizer176 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer176->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer176->Add( 5, 2, 0, 0, 5 ); + + + bSizer176->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteRight->Wrap( -1 ); + m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer176->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer177; + bSizer177 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer177->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer177->Add( 5, 2, 0, 0, 5 ); + + + bSizer177->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateRight->Wrap( -1 ); + m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer177->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer178; + bSizer178 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer178->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer178->Add( 5, 2, 0, 0, 5 ); + + + bSizer178->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateRight->Wrap( -1 ); + m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer178->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer1801->Add( bSizerStatistics, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer1801->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panelStatistics->SetSizer( bSizer1801 ); + m_panelStatistics->Layout(); + bSizer1801->Fit( m_panelStatistics ); + bSizerPanelHolder->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonViewTypeSyncAction = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonViewTypeSyncAction, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonShowCreateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowUpdateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowDeleteLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowLeftOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowLeftNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowEqual = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowDifferent = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowDoNothing = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowDoNothing, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowRightNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowRightOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowDeleteRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowUpdateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowCreateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowConflict = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panelViewFilter->SetSizer( bSizerViewFilter ); + m_panelViewFilter->Layout(); + bSizerViewFilter->Fit( m_panelViewFilter ); + bSizerPanelHolder->Add( m_panelViewFilter, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + this->SetSizer( bSizerPanelHolder ); + this->Layout(); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) ); + this->Connect( m_menuItemNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) ); + this->Connect( m_menuItemLoad->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) ); + this->Connect( m_menuItemSave->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) ); + this->Connect( m_menuItemSaveAs->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) ); + this->Connect( m_menuItem7->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ) ); + this->Connect( m_menuItem10->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) ); + this->Connect( m_menuItem11->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) ); + this->Connect( m_menuItem4->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) ); + this->Connect( m_menuItemGlobSett->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) ); + this->Connect( m_menuItem15->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuFindItem ) ); + this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); + this->Connect( m_menuItemManual->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); + this->Connect( m_menuItemCheckVersionNow->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); + this->Connect( m_menuItemCheckVersionAuto->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersionAutomatically ) ); + this->Connect( m_menuItemAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) ); + m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this ); + m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this ); + m_bpButtonCmpConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCompSettingsContext ), NULL, this ); + m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this ); + m_bpButtonSyncConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnSyncSettingsContext ), NULL, this ); + m_buttonSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this ); + m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this ); + m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this ); + m_bpButtonSwapSides->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this ); + m_bpButtonHideSearch->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnHideSearchPanel ), NULL, this ); + m_textCtrlSearchTxt->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( MainDialogGenerated::OnSearchGridEnter ), NULL, this ); + m_bpButtonOpen->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ), NULL, this ); + m_bpButtonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ), NULL, this ); + m_bpButtonBatchJob->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_CHAR, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCfgHistoryRightClick ), NULL, this ); + m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this ); + m_bpButtonFilter->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnGlobalFilterContext ), NULL, this ); + m_checkBoxHideExcluded->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnShowExcluded ), NULL, this ); + m_bpButtonViewTypeSyncAction->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewType ), NULL, this ); + m_bpButtonShowCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowCreateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowUpdateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowUpdateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowDeleteLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowLeftOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowLeftNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowEqual->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowDifferent->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowDoNothing->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowDoNothing->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowRightNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowRightOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowDeleteRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowUpdateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowUpdateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowCreateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowConflict->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); } MainDialogGenerated::~MainDialogGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) ); - this->Disconnect( wxID_NEW, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) ); - this->Disconnect( wxID_OPEN, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) ); - this->Disconnect( wxID_SAVE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) ); - this->Disconnect( wxID_SAVEAS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) ); - this->Disconnect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); - this->Disconnect( wxID_PREFERENCES, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) ); - this->Disconnect( wxID_HELP, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersionAutomatically ) ); - this->Disconnect( wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) ); - m_buttonCompare->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this ); - m_bpButtonCmpConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this ); - m_bpButtonCmpConfig->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCompSettingsContext ), NULL, this ); - m_bpButtonSyncConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this ); - m_bpButtonSyncConfig->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnSyncSettingsContext ), NULL, this ); - m_buttonSync->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this ); - m_bpButtonAddPair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this ); - m_bpButtonRemovePair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this ); - m_bpButtonSwapSides->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this ); - m_bpButtonHideSearch->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnHideSearchPanel ), NULL, this ); - m_textCtrlSearchTxt->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( MainDialogGenerated::OnSearchGridEnter ), NULL, this ); - m_bpButtonOpen->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ), NULL, this ); - m_bpButtonSave->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ), NULL, this ); - m_bpButtonBatchJob->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ), NULL, this ); - m_listBoxHistory->Disconnect( wxEVT_CHAR, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this ); - m_listBoxHistory->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this ); - m_listBoxHistory->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this ); - m_listBoxHistory->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCfgHistoryRightClick ), NULL, this ); - m_bpButtonFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this ); - m_bpButtonFilter->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnGlobalFilterContext ), NULL, this ); - m_checkBoxHideExcluded->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnShowExcluded ), NULL, this ); - m_bpButtonViewTypeSyncAction->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewType ), NULL, this ); - m_bpButtonShowCreateLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowCreateLeft->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowUpdateLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowUpdateLeft->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDeleteLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDeleteLeft->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowLeftOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowLeftOnly->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowLeftNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowLeftNewer->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowEqual->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowEqual->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDifferent->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDifferent->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDoNothing->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDoNothing->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowRightNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowRightNewer->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowRightOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowRightOnly->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDeleteRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDeleteRight->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowUpdateRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowUpdateRight->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowCreateRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowCreateRight->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowConflict->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowConflict->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - } -FolderPairPanelGenerated::FolderPairPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) +CmpCfgDlgGenerated::CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - wxBoxSizer* bSizer74; - bSizer74 = new wxBoxSizer( wxHORIZONTAL ); - - m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelLeft->SetMinSize( wxSize( 1,-1 ) ); - - wxBoxSizer* bSizer134; - bSizer134 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); - - bSizer134->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer134->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirLeft = new wxButton( m_panelLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirLeft->SetToolTip( _("Select a folder") ); - - bSizer134->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelLeft->SetSizer( bSizer134 ); - m_panelLeft->Layout(); - bSizer134->Fit( m_panelLeft ); - bSizer74->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 5 ); - - m_panel20 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer95; - bSizer95 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer95->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonAltCompCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer95->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer95->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 ); - - m_bpButtonAltSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer95->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer95->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panel20->SetSizer( bSizer95 ); - m_panel20->Layout(); - bSizer95->Fit( m_panel20 ); - bSizer74->Add( m_panel20, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelRight->SetMinSize( wxSize( 1,-1 ) ); - - wxBoxSizer* bSizer135; - bSizer135 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer135->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirRight = new wxButton( m_panelRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirRight->SetToolTip( _("Select a folder") ); - - bSizer135->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelRight->SetSizer( bSizer135 ); - m_panelRight->Layout(); - bSizer135->Fit( m_panelRight ); - bSizer74->Add( m_panelRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 5 ); - - - this->SetSizer( bSizer74 ); - this->Layout(); - bSizer74->Fit( this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer136; + bSizer136 = new wxBoxSizer( wxVERTICAL ); + + m_panel36 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel36->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer159; + bSizer159 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxVERTICAL ); + + m_staticText91 = new wxStaticText( m_panel36, wxID_ANY, _("Select a variant:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText91->Wrap( -1 ); + bSizer182->Add( m_staticText91, 0, wxALL, 5 ); + + wxFlexGridSizer* fgSizer16; + fgSizer16 = new wxFlexGridSizer( 2, 2, 5, 5 ); + fgSizer16->SetFlexibleDirection( wxBOTH ); + fgSizer16->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_bitmapByTime = new wxStaticBitmap( m_panel36, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapByTime->SetToolTip( _("Identify equal files by comparing modification time and size.") ); + + fgSizer16->Add( m_bitmapByTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_toggleBtnTimeSize = new wxToggleButton( m_panel36, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_toggleBtnTimeSize->SetValue( true ); + m_toggleBtnTimeSize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_toggleBtnTimeSize->SetToolTip( _("Identify equal files by comparing modification time and size.") ); + + fgSizer16->Add( m_toggleBtnTimeSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_bitmapByContent = new wxStaticBitmap( m_panel36, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapByContent->SetToolTip( _("Identify equal files by comparing the file content.") ); + + fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_toggleBtnContent = new wxToggleButton( m_panel36, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_toggleBtnContent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_toggleBtnContent->SetToolTip( _("Identify equal files by comparing the file content.") ); + + fgSizer16->Add( m_toggleBtnContent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer182->Add( fgSizer16, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer159->Add( bSizer182, 0, wxALL, 5 ); + + m_staticline33 = new wxStaticLine( m_panel36, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer159->Add( m_staticline33, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + m_staticText92 = new wxStaticText( m_panel36, wxID_ANY, _("Symbolic links:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText92->Wrap( -1 ); + bSizer172->Add( m_staticText92, 0, wxBOTTOM, 5 ); + + wxArrayString m_choiceHandleSymlinksChoices; + m_choiceHandleSymlinks = new wxChoice( m_panel36, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleSymlinksChoices, 0 ); + m_choiceHandleSymlinks->SetSelection( -1 ); + bSizer172->Add( m_choiceHandleSymlinks, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_hyperlink24 = new wxHyperlinkCtrl( m_panel36, wxID_ANY, _("More information"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizer172->Add( m_hyperlink24, 0, wxTOP, 5 ); + + + bSizer159->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 10 ); + + + m_panel36->SetSizer( bSizer159 ); + m_panel36->Layout(); + bSizer159->Fit( m_panel36 ); + bSizer136->Add( m_panel36, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline14 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer136->Add( m_staticline14, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer136->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + this->SetSizer( bSizer136 ); + this->Layout(); + bSizer136->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) ); + m_toggleBtnTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this ); + m_toggleBtnTimeSize->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this ); + m_toggleBtnContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this ); + m_toggleBtnContent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this ); + m_choiceHandleSymlinks->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this ); + m_hyperlink24->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( CmpCfgDlgGenerated::OnHelpComparisonSettings ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this ); } -FolderPairPanelGenerated::~FolderPairPanelGenerated() +CmpCfgDlgGenerated::~CmpCfgDlgGenerated() { } -CompareProgressDlgGenerated::CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) +SyncCfgDlgGenerated::SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer40; - bSizer40 = new wxBoxSizer( wxVERTICAL ); - - - bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); - - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxVERTICAL ); - - m_textCtrlStatus = new wxTextCtrl( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); - m_textCtrlStatus->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer182->Add( m_textCtrlStatus, 0, wxEXPAND, 5 ); - - - bSizer40->Add( bSizer182, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - m_gauge2 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL|wxGA_SMOOTH ); - bSizer40->Add( m_gauge2, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - bSizer42 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer162StretchSpeedAndRemTimeIndependently; - bSizer162StretchSpeedAndRemTimeIndependently = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer157; - bSizer157 = new wxBoxSizer( wxVERTICAL ); - - bSizerFilesFound = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText321 = new wxStaticText( this, wxID_ANY, _("Items found:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText321->Wrap( -1 ); - bSizerFilesFound->Add( m_staticText321, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextScanned = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextScanned->Wrap( -1 ); - m_staticTextScanned->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerFilesFound->Add( m_staticTextScanned, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - bSizer157->Add( bSizerFilesFound, 0, 0, 5 ); - - bSizerFilesRemaining = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText46 = new wxStaticText( this, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText46->Wrap( -1 ); - bSizerFilesRemaining->Add( m_staticText46, 0, wxALIGN_BOTTOM, 5 ); - - wxBoxSizer* bSizer154; - bSizer154 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextFilesRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextFilesRemaining->Wrap( -1 ); - m_staticTextFilesRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer154->Add( m_staticTextFilesRemaining, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDataRemaining->Wrap( -1 ); - bSizer154->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - bSizerFilesRemaining->Add( bSizer154, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - bSizer157->Add( bSizerFilesRemaining, 0, 0, 5 ); - - - bSizer162StretchSpeedAndRemTimeIndependently->Add( bSizer157, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer162StretchSpeedAndRemTimeIndependently->Add( 0, 0, 1, wxEXPAND, 5 ); - - sSizerSpeed = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText104 = new wxStaticText( this, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText104->Wrap( -1 ); - sSizerSpeed->Add( m_staticText104, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextSpeed->Wrap( -1 ); - m_staticTextSpeed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - sSizerSpeed->Add( m_staticTextSpeed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer162StretchSpeedAndRemTimeIndependently->Add( sSizerSpeed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer42->Add( bSizer162StretchSpeedAndRemTimeIndependently, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer42->Add( 10, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer163; - bSizer163 = new wxBoxSizer( wxHORIZONTAL ); - - sSizerTimeRemaining = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextTimeRemFixed = new wxStaticText( this, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeRemFixed->Wrap( -1 ); - sSizerTimeRemaining->Add( m_staticTextTimeRemFixed, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextRemTime = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRemTime->Wrap( -1 ); - m_staticTextRemTime->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - sSizerTimeRemaining->Add( m_staticTextRemTime, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer163->Add( sSizerTimeRemaining, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer163->Add( 0, 0, 1, wxEXPAND, 5 ); - - sSizerTimeElapsed = new wxBoxSizer( wxHORIZONTAL ); - - wxStaticText* m_staticText37; - m_staticText37 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText37->Wrap( -1 ); - sSizerTimeElapsed->Add( m_staticText37, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextTimeElapsed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeElapsed->Wrap( -1 ); - m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - sSizerTimeElapsed->Add( m_staticTextTimeElapsed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer163->Add( sSizerTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer42->Add( bSizer163, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer40->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - - bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); - - - this->SetSizer( bSizer40 ); - this->Layout(); - bSizer40->Fit( this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer7; + bSizer7 = new wxBoxSizer( wxVERTICAL ); + + m_panel37 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel37->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer29; + bSizer29 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer183; + bSizer183 = new wxBoxSizer( wxVERTICAL ); + + m_staticText86 = new wxStaticText( m_panel37, wxID_ANY, _("Select a variant:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText86->Wrap( -1 ); + bSizer183->Add( m_staticText86, 0, wxALL, 5 ); + + wxFlexGridSizer* fgSizer1; + fgSizer1 = new wxFlexGridSizer( 4, 2, 5, 5 ); + fgSizer1->SetFlexibleDirection( wxBOTH ); + fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + wxBoxSizer* bSizer171; + bSizer171 = new wxBoxSizer( wxVERTICAL ); + + + bSizer171->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_toggleBtnTwoWay = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_toggleBtnTwoWay->SetValue( true ); + m_toggleBtnTwoWay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer171->Add( m_toggleBtnTwoWay, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer171->Add( 0, 0, 1, wxEXPAND, 5 ); + + + fgSizer1->Add( bSizer171, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticTextAutomatic = new wxStaticText( m_panel37, wxID_ANY, _("Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAutomatic->Wrap( 480 ); + fgSizer1->Add( m_staticTextAutomatic, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + + bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_toggleBtnMirror = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_toggleBtnMirror->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer172->Add( m_toggleBtnMirror, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); + + + fgSizer1->Add( bSizer172, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextMirror = new wxStaticText( m_panel37, wxID_ANY, _("Create a mirror backup of the left folder which exactly matches the right folder after synchronization."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMirror->Wrap( 480 ); + fgSizer1->Add( m_staticTextMirror, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxVERTICAL ); + + + bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_toggleBtnUpdate = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_toggleBtnUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer173->Add( m_toggleBtnUpdate, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); + + + fgSizer1->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticTextUpdate = new wxStaticText( m_panel37, wxID_ANY, _("Copy new and updated files to the right folder."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdate->Wrap( 480 ); + fgSizer1->Add( m_staticTextUpdate, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer1741; + bSizer1741 = new wxBoxSizer( wxVERTICAL ); + + + bSizer1741->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_toggleBtnCustom = new wxToggleButton( m_panel37, wxID_ANY, _("Custom"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_toggleBtnCustom->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer1741->Add( m_toggleBtnCustom, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer1741->Add( 0, 0, 1, wxEXPAND, 5 ); + + + fgSizer1->Add( bSizer1741, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextCustom = new wxStaticText( m_panel37, wxID_ANY, _("Configure your own synchronization rules."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCustom->Wrap( 480 ); + fgSizer1->Add( m_staticTextCustom, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer183->Add( fgSizer1, 0, wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer1751; + bSizer1751 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer1751->Add( 8, 0, 0, 0, 5 ); + + m_checkBoxDetectMove = new wxCheckBox( m_panel37, wxID_ANY, _("Detect moved files"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxDetectMove->SetValue(true); + m_checkBoxDetectMove->SetToolTip( _("Requires database files. Not supported by all file systems.") ); + + bSizer1751->Add( m_checkBoxDetectMove, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + + + bSizer183->Add( bSizer1751, 0, wxEXPAND, 5 ); + + + bSizer29->Add( bSizer183, 0, wxALL, 5 ); + + m_staticline32 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer29->Add( m_staticline32, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer184; + bSizer184 = new wxBoxSizer( wxVERTICAL ); + + m_staticText87 = new wxStaticText( m_panel37, wxID_ANY, _("Delete files:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText87->Wrap( -1 ); + bSizer184->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer180; + bSizer180 = new wxBoxSizer( wxHORIZONTAL ); + + m_toggleBtnPermanent = new wxToggleButton( m_panel37, wxID_ANY, _("Permanent"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnPermanent->SetToolTip( _("Delete or overwrite files permanently") ); + + bSizer180->Add( m_toggleBtnPermanent, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_toggleBtnRecycler = new wxToggleButton( m_panel37, wxID_ANY, _("Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnRecycler->SetToolTip( _("Back up deleted and overwritten files in the recycle bin") ); + + bSizer180->Add( m_toggleBtnRecycler, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnVersioning = new wxToggleButton( m_panel37, wxID_ANY, _("Versioning"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnVersioning->SetToolTip( _("Move files to a user-defined folder") ); + + bSizer180->Add( m_toggleBtnVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer184->Add( bSizer180, 0, wxTOP, 5 ); + + m_panelVersioning = new wxPanel( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelVersioning->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer191; + bSizer191 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer156; + bSizer156 = new wxBoxSizer( wxHORIZONTAL ); + + m_versioningFolder = new FolderHistoryBox( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer156->Add( m_versioningFolder, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectDirVersioning = new wxButton( m_panelVersioning, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectDirVersioning->SetToolTip( _("Select a folder") ); + + bSizer156->Add( m_buttonSelectDirVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer191->Add( bSizer156, 1, wxEXPAND|wxBOTTOM, 5 ); + + bSizer192 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText93 = new wxStaticText( m_panelVersioning, wxID_ANY, _("Naming convention:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText93->Wrap( -1 ); + bSizer192->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + wxArrayString m_choiceVersioningStyleChoices; + m_choiceVersioningStyle = new wxChoice( m_panelVersioning, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVersioningStyleChoices, 0 ); + m_choiceVersioningStyle->SetSelection( 0 ); + bSizer192->Add( m_choiceVersioningStyle, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_staticTextNamingCvtPart1 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart1->Wrap( -1 ); + m_staticTextNamingCvtPart1->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer192->Add( m_staticTextNamingCvtPart1, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextNamingCvtPart2Bold = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart2Bold->Wrap( -1 ); + m_staticTextNamingCvtPart2Bold->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_staticTextNamingCvtPart2Bold->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer192->Add( m_staticTextNamingCvtPart2Bold, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextNamingCvtPart3 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart3->Wrap( -1 ); + m_staticTextNamingCvtPart3->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer192->Add( m_staticTextNamingCvtPart3, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer192->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_hyperlink17 = new wxHyperlinkCtrl( m_panelVersioning, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizer192->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + + bSizer191->Add( bSizer192, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + m_panelVersioning->SetSizer( bSizer191 ); + m_panelVersioning->Layout(); + bSizer191->Fit( m_panelVersioning ); + bSizer184->Add( m_panelVersioning, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 5 ); + + + bSizer29->Add( bSizer184, 0, wxALL|wxEXPAND, 10 ); + + bSizerExtraConfig = new wxBoxSizer( wxVERTICAL ); + + m_staticline321 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerExtraConfig->Add( m_staticline321, 0, wxEXPAND, 5 ); + + bSizer179 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer174; + bSizer174 = new wxBoxSizer( wxVERTICAL ); + + m_staticText88 = new wxStaticText( m_panel37, wxID_ANY, _("Handle errors:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText88->Wrap( -1 ); + bSizer174->Add( m_staticText88, 0, wxBOTTOM, 5 ); + + wxBoxSizer* bSizer175; + bSizer175 = new wxBoxSizer( wxHORIZONTAL ); + + m_toggleBtnErrorIgnore = new wxToggleButton( m_panel37, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); + + bSizer175->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnErrorPopup = new wxToggleButton( m_panel37, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); + + bSizer175->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer174->Add( bSizer175, 0, 0, 5 ); + + + bSizer179->Add( bSizer174, 0, wxALL, 10 ); + + m_staticline36 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer179->Add( m_staticline36, 0, wxEXPAND, 5 ); + + bSizerOnCompletion = new wxBoxSizer( wxVERTICAL ); + + m_staticText89 = new wxStaticText( m_panel37, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText89->Wrap( -1 ); + bSizerOnCompletion->Add( m_staticText89, 0, wxBOTTOM, 5 ); + + m_comboBoxExecFinished = new ExecFinishedBox( m_panel37, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizerOnCompletion->Add( m_comboBoxExecFinished, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer179->Add( bSizerOnCompletion, 1, wxALL, 10 ); + + + bSizerExtraConfig->Add( bSizer179, 0, wxEXPAND, 5 ); + + + bSizer29->Add( bSizerExtraConfig, 0, wxEXPAND, 5 ); + + + bSizer181->Add( bSizer29, 0, wxEXPAND, 5 ); + + m_staticline31 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer181->Add( m_staticline31, 0, wxEXPAND, 5 ); + + bSizerConfig = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer18011; + bSizer18011 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextHeaderCategory1 = new wxStaticText( m_panel37, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); + m_staticTextHeaderCategory1->Wrap( -1 ); + bSizer18011->Add( m_staticTextHeaderCategory1, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer18011->Add( 5, 0, 0, 0, 5 ); + + m_staticTextHeaderAction1 = new wxStaticText( m_panel37, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT ); + m_staticTextHeaderAction1->Wrap( -1 ); + bSizer18011->Add( m_staticTextHeaderAction1, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerConfig->Add( bSizer18011, 0, wxEXPAND, 5 ); + + + bSizerConfig->Add( 0, 5, 0, 0, 5 ); + + m_bitmapDatabase = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizerConfig->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 ); + + wxBoxSizer* sbSizerKeepWidthStableIfSyncDirsNotShown; + sbSizerKeepWidthStableIfSyncDirsNotShown = new wxBoxSizer( wxHORIZONTAL ); + + + sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 45, 0, 0, 0, 5 ); + + + sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 5, 0, 0, 0, 5 ); + + + sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 46, 0, 0, 0, 5 ); + + + bSizerConfig->Add( sbSizerKeepWidthStableIfSyncDirsNotShown, 0, 0, 5 ); + + sbSizerSyncDirections = new wxBoxSizer( wxVERTICAL ); + + bSizerLeftOnly = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapLeftOnly = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapLeftOnly->SetToolTip( _("Item exists on left side only") ); + + bSizerLeftOnly->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerLeftOnly->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonLeftOnly = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerLeftOnly->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerRightOnly = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapRightOnly = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapRightOnly->SetToolTip( _("Item exists on right side only") ); + + bSizerRightOnly->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerRightOnly->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonRightOnly = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerRightOnly->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerRightOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerLeftNewer = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapLeftNewer = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapLeftNewer->SetToolTip( _("Left side is newer") ); + + bSizerLeftNewer->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerLeftNewer->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonLeftNewer = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerLeftNewer->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerRightNewer = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapRightNewer = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapRightNewer->SetToolTip( _("Right side is newer") ); + + bSizerRightNewer->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerRightNewer->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonRightNewer = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerRightNewer->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerRightNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerDifferent = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapDifferent = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapDifferent->SetToolTip( _("Items have different content") ); + + bSizerDifferent->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerDifferent->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonDifferent = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerDifferent->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerDifferent, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerConflict = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapConflict = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapConflict->SetToolTip( _("Conflict/item cannot be categorized") ); + + bSizerConflict->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerConflict->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonConflict = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerConflict->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerConflict, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerConfig->Add( sbSizerSyncDirections, 0, wxEXPAND, 5 ); + + + bSizer181->Add( bSizerConfig, 0, wxALL|wxEXPAND, 10 ); + + + m_panel37->SetSizer( bSizer181 ); + m_panel37->Layout(); + bSizer181->Fit( m_panel37 ); + bSizer7->Add( m_panel37, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline15 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer7->Add( m_staticline15, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOK->SetDefault(); + m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer7->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + this->SetSizer( bSizer7 ); + this->Layout(); + bSizer7->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) ); + m_toggleBtnTwoWay->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncTwoWayDouble ), NULL, this ); + m_toggleBtnTwoWay->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncTwoWay ), NULL, this ); + m_toggleBtnMirror->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this ); + m_toggleBtnMirror->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this ); + m_toggleBtnUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this ); + m_toggleBtnUpdate->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this ); + m_toggleBtnCustom->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this ); + m_toggleBtnCustom->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this ); + m_checkBoxDetectMove->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnToggleDetectMovedFiles ), NULL, this ); + m_toggleBtnPermanent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionPermanent ), NULL, this ); + m_toggleBtnRecycler->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionRecycler ), NULL, this ); + m_toggleBtnVersioning->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionVersioning ), NULL, this ); + m_choiceVersioningStyle->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnParameterChange ), NULL, this ); + m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( SyncCfgDlgGenerated::OnHelpVersioning ), NULL, this ); + m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorIgnore ), NULL, this ); + m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorPopup ), NULL, this ); + m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExLeftSideOnly ), NULL, this ); + m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExRightSideOnly ), NULL, this ); + m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnLeftNewer ), NULL, this ); + m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnRightNewer ), NULL, this ); + m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDifferent ), NULL, this ); + m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnConflict ), NULL, this ); + m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this ); } -CompareProgressDlgGenerated::~CompareProgressDlgGenerated() +SyncCfgDlgGenerated::~SyncCfgDlgGenerated() { } -SyncProgressPanelGenerated::SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) +SyncConfirmationDlgGenerated::SyncConfirmationDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - bSizerRoot = new wxBoxSizer( wxVERTICAL ); - - bSizer42 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer42->Add( 32, 0, 0, 0, 5 ); - - - bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bitmapStatus = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); - bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); - - m_staticTextPhase = new wxStaticText( this, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextPhase->Wrap( -1 ); - m_staticTextPhase->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer42->Add( m_staticTextPhase, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); - - m_animCtrlSyncing = new wxAnimationCtrl( this, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 32,32 ), wxAC_DEFAULT_STYLE ); - bSizer42->Add( m_animCtrlSyncing, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); - - - bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonMinimizeToTray = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), wxBU_AUTODRAW ); - m_bpButtonMinimizeToTray->SetToolTip( _("Minimize to notification area") ); - - bSizer42->Add( m_bpButtonMinimizeToTray, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerRoot->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - bSizerStatusText = new wxBoxSizer( wxVERTICAL ); - - m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatus->Wrap( -1 ); - bSizerStatusText->Add( m_staticTextStatus, 0, wxEXPAND|wxLEFT, 10 ); - - - bSizerStatusText->Add( 0, 5, 0, 0, 5 ); - - - bSizerRoot->Add( bSizerStatusText, 0, wxEXPAND, 5 ); - - wxStaticLine* m_staticlineHeader; - m_staticlineHeader = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerRoot->Add( m_staticlineHeader, 0, wxEXPAND, 5 ); - - m_panelProgress = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelProgress->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxVERTICAL ); - - bSizer171 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer171->Add( 10, 0, 0, 0, 5 ); - - wxBoxSizer* bSizer164; - bSizer164 = new wxBoxSizer( wxVERTICAL ); - - m_panelItemsProcessed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelItemsProcessed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer165; - bSizer165 = new wxBoxSizer( wxVERTICAL ); - - - bSizer165->Add( 0, 5, 0, 0, 5 ); - - wxStaticText* m_staticText96; - m_staticText96 = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText96->Wrap( -1 ); - bSizer165->Add( m_staticText96, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer169; - bSizer169 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextProcessedObj = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextProcessedObj->Wrap( -1 ); - m_staticTextProcessedObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer169->Add( m_staticTextProcessedObj, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextDataProcessed = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDataProcessed->Wrap( -1 ); - bSizer169->Add( m_staticTextDataProcessed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer165->Add( bSizer169, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer165->Add( 0, 5, 0, 0, 5 ); - - - m_panelItemsProcessed->SetSizer( bSizer165 ); - m_panelItemsProcessed->Layout(); - bSizer165->Fit( m_panelItemsProcessed ); - bSizer164->Add( m_panelItemsProcessed, 0, wxEXPAND|wxTOP, 7 ); - - m_panelItemsRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelItemsRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxVERTICAL ); - - - bSizer166->Add( 0, 5, 0, 0, 5 ); - - wxStaticText* m_staticText97; - m_staticText97 = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText97->Wrap( -1 ); - bSizer166->Add( m_staticText97, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer170; - bSizer170 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextRemainingObj = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextRemainingObj->Wrap( -1 ); - m_staticTextRemainingObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer170->Add( m_staticTextRemainingObj, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextDataRemaining = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDataRemaining->Wrap( -1 ); - bSizer170->Add( m_staticTextDataRemaining, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer166->Add( bSizer170, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer166->Add( 0, 5, 0, 0, 5 ); - - - m_panelItemsRemaining->SetSizer( bSizer166 ); - m_panelItemsRemaining->Layout(); - bSizer166->Fit( m_panelItemsRemaining ); - bSizer164->Add( m_panelItemsRemaining, 0, wxTOP|wxEXPAND, 7 ); - - m_panelTimeRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelTimeRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer167; - bSizer167 = new wxBoxSizer( wxVERTICAL ); - - - bSizer167->Add( 0, 5, 0, 0, 5 ); - - wxStaticText* m_staticText98; - m_staticText98 = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText98->Wrap( -1 ); - bSizer167->Add( m_staticText98, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - m_staticTextRemTime = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRemTime->Wrap( -1 ); - m_staticTextRemTime->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer167->Add( m_staticTextRemTime, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer167->Add( 0, 5, 0, 0, 5 ); - - - m_panelTimeRemaining->SetSizer( bSizer167 ); - m_panelTimeRemaining->Layout(); - bSizer167->Fit( m_panelTimeRemaining ); - bSizer164->Add( m_panelTimeRemaining, 0, wxTOP|wxEXPAND, 7 ); - - wxPanel* m_panelTimeElapsed; - m_panelTimeElapsed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelTimeElapsed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer168; - bSizer168 = new wxBoxSizer( wxVERTICAL ); - - - bSizer168->Add( 0, 5, 0, 0, 5 ); - - wxStaticText* m_staticText961; - m_staticText961 = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText961->Wrap( -1 ); - bSizer168->Add( m_staticText961, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - m_staticTextTimeElapsed = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeElapsed->Wrap( -1 ); - m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer168->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer168->Add( 0, 5, 0, 0, 5 ); - - - m_panelTimeElapsed->SetSizer( bSizer168 ); - m_panelTimeElapsed->Layout(); - bSizer168->Fit( m_panelTimeElapsed ); - bSizer164->Add( m_panelTimeElapsed, 0, wxTOP|wxEXPAND, 7 ); - - - bSizer171->Add( bSizer164, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer171->Add( 10, 0, 0, 0, 5 ); - - wxBoxSizer* bSizer161; - bSizer161 = new wxBoxSizer( wxVERTICAL ); - - - bSizer161->Add( 0, 15, 0, 0, 5 ); - - m_panelGraphBytes = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_panelGraphBytes->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer161->Add( m_panelGraphBytes, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_panelGraphItems = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_panelGraphItems->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer161->Add( m_panelGraphItems, 1, wxEXPAND, 5 ); - - - bSizer161->Add( 420, 0, 0, 0, 5 ); - - - bSizer171->Add( bSizer161, 1, wxEXPAND, 5 ); - - - bSizer171->Add( 0, 230, 0, 0, 5 ); - - - bSizer173->Add( bSizer171, 1, wxEXPAND, 5 ); - - - m_panelProgress->SetSizer( bSizer173 ); - m_panelProgress->Layout(); - bSizer173->Fit( m_panelProgress ); - bSizerRoot->Add( m_panelProgress, 1, wxEXPAND, 5 ); - - m_notebookResult = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_FIXEDWIDTH ); - - bSizerRoot->Add( m_notebookResult, 1, wxEXPAND, 5 ); - - m_staticlineFooter = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerRoot->Add( m_staticlineFooter, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxHORIZONTAL ); - - bSizerExecFinished = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText87 = new wxStaticText( this, wxID_ANY, _("On completion"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText87->Wrap( -1 ); - bSizerExecFinished->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_comboBoxExecFinished = new ExecFinishedBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizerExecFinished->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer160->Add( bSizerExecFinished, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer160->Add( 0, 0, 0, 0, 5 ); - - - bSizerStdButtons->Add( bSizer160, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonClose->SetDefault(); - m_buttonClose->Enable( false ); - - bSizerStdButtons->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonPause = new wxButton( this, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizerRoot->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 ); - - - this->SetSizer( bSizerRoot ); - this->Layout(); - bSizerRoot->Fit( this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer134; + bSizer134 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapSync = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer72->Add( m_bitmapSync, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("Start synchronization now?"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextHeader->Wrap( -1 ); + bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + bSizer134->Add( bSizer72, 0, 0, 5 ); + + m_staticline371 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline371, 0, wxEXPAND, 5 ); + + m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer185->Add( 0, 0, 1, 0, 5 ); + + m_staticline38 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer185->Add( m_staticline38, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer162; + bSizer162 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText84 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Variant:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText84->Wrap( -1 ); + bSizer182->Add( m_staticText84, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + + bSizer182->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextVariant = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextVariant->Wrap( -1 ); + m_staticTextVariant->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer182->Add( m_staticTextVariant, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + bSizer182->Add( 0, 0, 1, wxEXPAND, 5 ); + + + bSizer162->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 ); + + m_staticline14 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer162->Add( m_staticline14, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxVERTICAL ); + + m_staticText83 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Statistics"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText83->Wrap( -1 ); + bSizer181->Add( m_staticText83, 0, wxALL, 5 ); + + wxFlexGridSizer* fgSizer11; + fgSizer11 = new wxFlexGridSizer( 2, 7, 2, 5 ); + fgSizer11->SetFlexibleDirection( wxBOTH ); + fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapData->SetToolTip( _("Total bytes to copy") ); + + fgSizer11->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateLeft->Wrap( -1 ); + m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateLeft->Wrap( -1 ); + m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteLeft->Wrap( -1 ); + m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextData->Wrap( -1 ); + m_staticTextData->SetToolTip( _("Total bytes to copy") ); + + fgSizer11->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteRight->Wrap( -1 ); + m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateRight->Wrap( -1 ); + m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateRight->Wrap( -1 ); + m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer181->Add( fgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer162->Add( bSizer181, 0, wxEXPAND|wxALL, 5 ); + + + bSizer185->Add( bSizer162, 0, 0, 5 ); + + + m_panelStatistics->SetSizer( bSizer185 ); + m_panelStatistics->Layout(); + bSizer185->Fit( m_panelStatistics ); + bSizer134->Add( m_panelStatistics, 0, wxEXPAND, 5 ); + + m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer164; + bSizer164 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("&Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer164->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonStartSync = new wxButton( this, wxID_OK, _("&Start"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonStartSync->SetDefault(); + m_buttonStartSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer164->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + bSizer134->Add( bSizer164, 1, wxEXPAND, 5 ); + + + this->SetSizer( bSizer134 ); + this->Layout(); + bSizer134->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncConfirmationDlgGenerated::OnClose ) ); + m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnStartSync ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnCancel ), NULL, this ); } -SyncProgressPanelGenerated::~SyncProgressPanelGenerated() +SyncConfirmationDlgGenerated::~SyncConfirmationDlgGenerated() { } -LogPanelGenerated::LogPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) +FolderPairPanelGenerated::FolderPairPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer179; - bSizer179 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer153; - bSizer153 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer154; - bSizer154 = new wxBoxSizer( wxVERTICAL ); - - m_bpButtonErrors = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); - bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonWarnings = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); - bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonInfo = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); - bSizer154->Add( m_bpButtonInfo, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer153->Add( bSizer154, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer153->Add( m_staticline13, 0, wxEXPAND, 5 ); - - m_gridMessages = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridMessages->SetScrollRate( 5, 5 ); - bSizer153->Add( m_gridMessages, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer179->Add( bSizer153, 1, wxEXPAND, 5 ); - - - this->SetSizer( bSizer179 ); - this->Layout(); - bSizer179->Fit( this ); - - // Connect Events - m_bpButtonErrors->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnErrors ), NULL, this ); - m_bpButtonWarnings->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnWarnings ), NULL, this ); - m_bpButtonInfo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnInfo ), NULL, this ); + wxBoxSizer* bSizer74; + bSizer74 = new wxBoxSizer( wxHORIZONTAL ); + + m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelLeft->SetMinSize( wxSize( 1,-1 ) ); + + wxBoxSizer* bSizer134; + bSizer134 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); + + bSizer134->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer134->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectDirLeft = new wxButton( m_panelLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectDirLeft->SetToolTip( _("Select a folder") ); + + bSizer134->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelLeft->SetSizer( bSizer134 ); + m_panelLeft->Layout(); + bSizer134->Fit( m_panelLeft ); + bSizer74->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 5 ); + + m_panel20 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer95; + bSizer95 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer95->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonAltCompCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer95->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer95->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 ); + + m_bpButtonAltSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer95->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer95->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panel20->SetSizer( bSizer95 ); + m_panel20->Layout(); + bSizer95->Fit( m_panel20 ); + bSizer74->Add( m_panel20, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelRight->SetMinSize( wxSize( 1,-1 ) ); + + wxBoxSizer* bSizer135; + bSizer135 = new wxBoxSizer( wxHORIZONTAL ); + + m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer135->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectDirRight = new wxButton( m_panelRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectDirRight->SetToolTip( _("Select a folder") ); + + bSizer135->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelRight->SetSizer( bSizer135 ); + m_panelRight->Layout(); + bSizer135->Fit( m_panelRight ); + bSizer74->Add( m_panelRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 5 ); + + + this->SetSizer( bSizer74 ); + this->Layout(); + bSizer74->Fit( this ); } -LogPanelGenerated::~LogPanelGenerated() +FolderPairPanelGenerated::~FolderPairPanelGenerated() { - // Disconnect Events - m_bpButtonErrors->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnErrors ), NULL, this ); - m_bpButtonWarnings->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnWarnings ), NULL, this ); - m_bpButtonInfo->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnInfo ), NULL, this ); - } -SyncConfirmationDlgGenerated::SyncConfirmationDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +CompareProgressDlgGenerated::CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer134; - bSizer134 = new wxBoxSizer( wxVERTICAL ); - - m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer169; - bSizer169 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapSync = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer169->Add( m_bitmapSync, 0, wxALL, 10 ); - - m_staticline39 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer169->Add( m_staticline39, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer162; - bSizer162 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); - - m_staticText84 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Variant"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText84->Wrap( -1 ); - bSizer172->Add( m_staticText84, 0, wxALL, 5 ); - - m_staticTextVariant = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextVariant->Wrap( -1 ); - m_staticTextVariant->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer172->Add( m_staticTextVariant, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer172->Add( 0, 10, 0, 0, 5 ); - - - bSizer162->Add( bSizer172, 0, wxEXPAND, 5 ); - - m_staticline14 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer162->Add( m_staticline14, 0, wxEXPAND, 5 ); - - m_staticText83 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Statistics"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText83->Wrap( -1 ); - bSizer162->Add( m_staticText83, 0, wxALL, 5 ); - - wxFlexGridSizer* fgSizer11; - fgSizer11 = new wxFlexGridSizer( 2, 7, 2, 5 ); - fgSizer11->SetFlexibleDirection( wxBOTH ); - fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapData->SetToolTip( _("Total bytes to copy") ); - - fgSizer11->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateLeft->Wrap( -1 ); - m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateLeft->Wrap( -1 ); - m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteLeft->Wrap( -1 ); - m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextData->Wrap( -1 ); - m_staticTextData->SetToolTip( _("Total bytes to copy") ); - - fgSizer11->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteRight->Wrap( -1 ); - m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateRight->Wrap( -1 ); - m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateRight->Wrap( -1 ); - m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer162->Add( fgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 25 ); - - - bSizer162->Add( 0, 5, 0, 0, 5 ); - - - bSizer169->Add( bSizer162, 0, 0, 5 ); - - - m_panelStatistics->SetSizer( bSizer169 ); - m_panelStatistics->Layout(); - bSizer169->Fit( m_panelStatistics ); - bSizer134->Add( m_panelStatistics, 0, wxEXPAND, 5 ); - - m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer164; - bSizer164 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("&Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer164->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonStartSync = new wxButton( this, wxID_OK, _("Start"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonStartSync->SetDefault(); - m_buttonStartSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer164->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - bSizer134->Add( bSizer164, 1, wxEXPAND, 5 ); - - - this->SetSizer( bSizer134 ); - this->Layout(); - bSizer134->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncConfirmationDlgGenerated::OnClose ) ); - m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnStartSync ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnCancel ), NULL, this ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer40; + bSizer40 = new wxBoxSizer( wxVERTICAL ); + + + bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_textCtrlStatus = new wxTextCtrl( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); + m_textCtrlStatus->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer40->Add( m_textCtrlStatus, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + m_gauge2 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL|wxGA_SMOOTH ); + bSizer40->Add( m_gauge2, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + bSizer42 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer162StretchSpeedAndRemTimeIndependently; + bSizer162StretchSpeedAndRemTimeIndependently = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer157; + bSizer157 = new wxBoxSizer( wxVERTICAL ); + + bSizerFilesFound = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText321 = new wxStaticText( this, wxID_ANY, _("Items found:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText321->Wrap( -1 ); + bSizerFilesFound->Add( m_staticText321, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextScanned = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextScanned->Wrap( -1 ); + m_staticTextScanned->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerFilesFound->Add( m_staticTextScanned, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + bSizer157->Add( bSizerFilesFound, 0, 0, 5 ); + + bSizerFilesRemaining = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText46 = new wxStaticText( this, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText46->Wrap( -1 ); + bSizerFilesRemaining->Add( m_staticText46, 0, wxALIGN_BOTTOM, 5 ); + + wxBoxSizer* bSizer154; + bSizer154 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextFilesRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextFilesRemaining->Wrap( -1 ); + m_staticTextFilesRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer154->Add( m_staticTextFilesRemaining, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDataRemaining->Wrap( -1 ); + bSizer154->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + bSizerFilesRemaining->Add( bSizer154, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + bSizer157->Add( bSizerFilesRemaining, 0, 0, 5 ); + + + bSizer162StretchSpeedAndRemTimeIndependently->Add( bSizer157, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer162StretchSpeedAndRemTimeIndependently->Add( 0, 0, 1, wxEXPAND, 5 ); + + sSizerSpeed = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText104 = new wxStaticText( this, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText104->Wrap( -1 ); + sSizerSpeed->Add( m_staticText104, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextSpeed->Wrap( -1 ); + m_staticTextSpeed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + sSizerSpeed->Add( m_staticTextSpeed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer162StretchSpeedAndRemTimeIndependently->Add( sSizerSpeed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer42->Add( bSizer162StretchSpeedAndRemTimeIndependently, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer42->Add( 10, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer163; + bSizer163 = new wxBoxSizer( wxHORIZONTAL ); + + sSizerTimeRemaining = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextTimeRemFixed = new wxStaticText( this, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeRemFixed->Wrap( -1 ); + sSizerTimeRemaining->Add( m_staticTextTimeRemFixed, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextRemTime = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRemTime->Wrap( -1 ); + m_staticTextRemTime->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + sSizerTimeRemaining->Add( m_staticTextRemTime, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer163->Add( sSizerTimeRemaining, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer163->Add( 0, 0, 1, wxEXPAND, 5 ); + + sSizerTimeElapsed = new wxBoxSizer( wxHORIZONTAL ); + + wxStaticText* m_staticText37; + m_staticText37 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText37->Wrap( -1 ); + sSizerTimeElapsed->Add( m_staticText37, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextTimeElapsed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeElapsed->Wrap( -1 ); + m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + sSizerTimeElapsed->Add( m_staticTextTimeElapsed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer163->Add( sSizerTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer42->Add( bSizer163, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer40->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + + bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); + + + this->SetSizer( bSizer40 ); + this->Layout(); + bSizer40->Fit( this ); } -SyncConfirmationDlgGenerated::~SyncConfirmationDlgGenerated() +CompareProgressDlgGenerated::~CompareProgressDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncConfirmationDlgGenerated::OnClose ) ); - m_buttonStartSync->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnStartSync ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnCancel ), NULL, this ); - } -CmpCfgDlgGenerated::CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +SyncProgressPanelGenerated::SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer136; - bSizer136 = new wxBoxSizer( wxVERTICAL ); - - m_panel36 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel36->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer159; - bSizer159 = new wxBoxSizer( wxVERTICAL ); - - m_staticText91 = new wxStaticText( m_panel36, wxID_ANY, _("Select a variant"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText91->Wrap( -1 ); - bSizer159->Add( m_staticText91, 0, wxALL, 5 ); - - wxFlexGridSizer* fgSizer16; - fgSizer16 = new wxFlexGridSizer( 2, 2, 8, 5 ); - fgSizer16->SetFlexibleDirection( wxBOTH ); - fgSizer16->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_bitmapByTime = new wxStaticBitmap( m_panel36, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapByTime->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") ); - - fgSizer16->Add( m_bitmapByTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_toggleBtnTimeSize = new wxToggleButton( m_panel36, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_toggleBtnTimeSize->SetValue( true ); - m_toggleBtnTimeSize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_toggleBtnTimeSize->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") ); - - fgSizer16->Add( m_toggleBtnTimeSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_bitmapByContent = new wxStaticBitmap( m_panel36, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapByContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") ); - - fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_toggleBtnContent = new wxToggleButton( m_panel36, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_toggleBtnContent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_toggleBtnContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") ); - - fgSizer16->Add( m_toggleBtnContent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer159->Add( fgSizer16, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticline33 = new wxStaticLine( m_panel36, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer159->Add( m_staticline33, 0, wxEXPAND, 5 ); - - m_staticText92 = new wxStaticText( m_panel36, wxID_ANY, _("Symbolic Link handling"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText92->Wrap( -1 ); - bSizer159->Add( m_staticText92, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer177; - bSizer177 = new wxBoxSizer( wxHORIZONTAL ); - - wxArrayString m_choiceHandleSymlinksChoices; - m_choiceHandleSymlinks = new wxChoice( m_panel36, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleSymlinksChoices, 0 ); - m_choiceHandleSymlinks->SetSelection( -1 ); - bSizer177->Add( m_choiceHandleSymlinks, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonHelp = new wxBitmapButton( m_panel36, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonHelp->SetToolTip( _("Help") ); - - bSizer177->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer159->Add( bSizer177, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - - m_panel36->SetSizer( bSizer159 ); - m_panel36->Layout(); - bSizer159->Fit( m_panel36 ); - bSizer136->Add( m_panel36, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline14 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer136->Add( m_staticline14, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer136->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - this->SetSizer( bSizer136 ); - this->Layout(); - bSizer136->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) ); - m_toggleBtnTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this ); - m_toggleBtnTimeSize->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this ); - m_toggleBtnContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this ); - m_toggleBtnContent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this ); - m_choiceHandleSymlinks->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this ); - m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnShowHelp ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this ); + bSizerRoot = new wxBoxSizer( wxVERTICAL ); + + bSizer42 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer42->Add( 32, 0, 0, 0, 5 ); + + + bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bitmapStatus = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); + bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); + + m_staticTextPhase = new wxStaticText( this, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPhase->Wrap( -1 ); + m_staticTextPhase->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer42->Add( m_staticTextPhase, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + + m_animCtrlSyncing = new wxAnimationCtrl( this, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 32,32 ), wxAC_DEFAULT_STYLE ); + bSizer42->Add( m_animCtrlSyncing, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); + + + bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonMinimizeToTray = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), wxBU_AUTODRAW ); + m_bpButtonMinimizeToTray->SetToolTip( _("Minimize to notification area") ); + + bSizer42->Add( m_bpButtonMinimizeToTray, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerRoot->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + bSizerStatusText = new wxBoxSizer( wxVERTICAL ); + + m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatus->Wrap( -1 ); + bSizerStatusText->Add( m_staticTextStatus, 0, wxEXPAND|wxLEFT, 10 ); + + + bSizerStatusText->Add( 0, 5, 0, 0, 5 ); + + + bSizerRoot->Add( bSizerStatusText, 0, wxEXPAND, 5 ); + + wxStaticLine* m_staticlineHeader; + m_staticlineHeader = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerRoot->Add( m_staticlineHeader, 0, wxEXPAND, 5 ); + + m_panelProgress = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelProgress->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxVERTICAL ); + + bSizer171 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer171->Add( 10, 0, 0, 0, 5 ); + + wxBoxSizer* bSizer164; + bSizer164 = new wxBoxSizer( wxVERTICAL ); + + m_panelItemsProcessed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelItemsProcessed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer165; + bSizer165 = new wxBoxSizer( wxVERTICAL ); + + + bSizer165->Add( 0, 5, 0, 0, 5 ); + + wxStaticText* m_staticText96; + m_staticText96 = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText96->Wrap( -1 ); + bSizer165->Add( m_staticText96, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer169; + bSizer169 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextProcessedObj = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticTextProcessedObj->Wrap( -1 ); + m_staticTextProcessedObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer169->Add( m_staticTextProcessedObj, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextDataProcessed = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDataProcessed->Wrap( -1 ); + bSizer169->Add( m_staticTextDataProcessed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer165->Add( bSizer169, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer165->Add( 0, 5, 0, 0, 5 ); + + + m_panelItemsProcessed->SetSizer( bSizer165 ); + m_panelItemsProcessed->Layout(); + bSizer165->Fit( m_panelItemsProcessed ); + bSizer164->Add( m_panelItemsProcessed, 0, wxEXPAND|wxTOP, 7 ); + + m_panelItemsRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelItemsRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); + + + bSizer166->Add( 0, 5, 0, 0, 5 ); + + wxStaticText* m_staticText97; + m_staticText97 = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText97->Wrap( -1 ); + bSizer166->Add( m_staticText97, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer170; + bSizer170 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextRemainingObj = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticTextRemainingObj->Wrap( -1 ); + m_staticTextRemainingObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer170->Add( m_staticTextRemainingObj, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextDataRemaining = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDataRemaining->Wrap( -1 ); + bSizer170->Add( m_staticTextDataRemaining, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer166->Add( bSizer170, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer166->Add( 0, 5, 0, 0, 5 ); + + + m_panelItemsRemaining->SetSizer( bSizer166 ); + m_panelItemsRemaining->Layout(); + bSizer166->Fit( m_panelItemsRemaining ); + bSizer164->Add( m_panelItemsRemaining, 0, wxTOP|wxEXPAND, 7 ); + + m_panelTimeRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelTimeRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer167; + bSizer167 = new wxBoxSizer( wxVERTICAL ); + + + bSizer167->Add( 0, 5, 0, 0, 5 ); + + wxStaticText* m_staticText98; + m_staticText98 = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText98->Wrap( -1 ); + bSizer167->Add( m_staticText98, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticTextRemTime = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRemTime->Wrap( -1 ); + m_staticTextRemTime->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer167->Add( m_staticTextRemTime, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer167->Add( 0, 5, 0, 0, 5 ); + + + m_panelTimeRemaining->SetSizer( bSizer167 ); + m_panelTimeRemaining->Layout(); + bSizer167->Fit( m_panelTimeRemaining ); + bSizer164->Add( m_panelTimeRemaining, 0, wxTOP|wxEXPAND, 7 ); + + wxPanel* m_panelTimeElapsed; + m_panelTimeElapsed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelTimeElapsed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer168; + bSizer168 = new wxBoxSizer( wxVERTICAL ); + + + bSizer168->Add( 0, 5, 0, 0, 5 ); + + wxStaticText* m_staticText961; + m_staticText961 = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText961->Wrap( -1 ); + bSizer168->Add( m_staticText961, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticTextTimeElapsed = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeElapsed->Wrap( -1 ); + m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer168->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer168->Add( 0, 5, 0, 0, 5 ); + + + m_panelTimeElapsed->SetSizer( bSizer168 ); + m_panelTimeElapsed->Layout(); + bSizer168->Fit( m_panelTimeElapsed ); + bSizer164->Add( m_panelTimeElapsed, 0, wxTOP|wxEXPAND, 7 ); + + + bSizer171->Add( bSizer164, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer171->Add( 10, 0, 0, 0, 5 ); + + wxBoxSizer* bSizer161; + bSizer161 = new wxBoxSizer( wxVERTICAL ); + + + bSizer161->Add( 0, 15, 0, 0, 5 ); + + m_panelGraphBytes = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_panelGraphBytes->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer161->Add( m_panelGraphBytes, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_panelGraphItems = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_panelGraphItems->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer161->Add( m_panelGraphItems, 1, wxEXPAND, 5 ); + + + bSizer161->Add( 430, 0, 0, 0, 5 ); + + + bSizer171->Add( bSizer161, 1, wxEXPAND, 5 ); + + + bSizer171->Add( 0, 230, 0, 0, 5 ); + + + bSizer173->Add( bSizer171, 1, wxEXPAND, 5 ); + + + m_panelProgress->SetSizer( bSizer173 ); + m_panelProgress->Layout(); + bSizer173->Fit( m_panelProgress ); + bSizerRoot->Add( m_panelProgress, 1, wxEXPAND, 5 ); + + m_notebookResult = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_FIXEDWIDTH ); + + bSizerRoot->Add( m_notebookResult, 1, wxEXPAND, 5 ); + + m_staticlineFooter = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerRoot->Add( m_staticlineFooter, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxHORIZONTAL ); + + bSizerExecFinished = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText87 = new wxStaticText( this, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText87->Wrap( -1 ); + bSizerExecFinished->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_comboBoxExecFinished = new ExecFinishedBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizerExecFinished->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer160->Add( bSizerExecFinished, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer160->Add( 0, 0, 0, 0, 5 ); + + + bSizerStdButtons->Add( bSizer160, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonClose->SetDefault(); + m_buttonClose->Enable( false ); + + bSizerStdButtons->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonPause = new wxButton( this, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + m_buttonStop = new wxButton( this, wxID_CANCEL, _("Stop"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonStop, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizerRoot->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 ); + + + this->SetSizer( bSizerRoot ); + this->Layout(); + bSizerRoot->Fit( this ); } -CmpCfgDlgGenerated::~CmpCfgDlgGenerated() +SyncProgressPanelGenerated::~SyncProgressPanelGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) ); - m_toggleBtnTimeSize->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this ); - m_toggleBtnTimeSize->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this ); - m_toggleBtnContent->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this ); - m_toggleBtnContent->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this ); - m_choiceHandleSymlinks->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this ); - m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnShowHelp ), NULL, this ); - m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this ); - } -SyncCfgDlgGenerated::SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +LogPanelGenerated::LogPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer7; - bSizer7 = new wxBoxSizer( wxVERTICAL ); - - m_panel37 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel37->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer29; - bSizer29 = new wxBoxSizer( wxVERTICAL ); - - m_staticText86 = new wxStaticText( m_panel37, wxID_ANY, _("Select a variant"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText86->Wrap( -1 ); - bSizer29->Add( m_staticText86, 0, wxALL, 5 ); - - wxFlexGridSizer* fgSizer1; - fgSizer1 = new wxFlexGridSizer( 4, 2, 6, 8 ); - fgSizer1->SetFlexibleDirection( wxBOTH ); - fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - wxBoxSizer* bSizer171; - bSizer171 = new wxBoxSizer( wxVERTICAL ); - - - bSizer171->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_toggleBtnTwoWay = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnTwoWay->SetValue( true ); - m_toggleBtnTwoWay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer171->Add( m_toggleBtnTwoWay, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer171->Add( 0, 0, 1, wxEXPAND, 5 ); - - - fgSizer1->Add( bSizer171, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticTextAutomatic = new wxStaticText( m_panel37, wxID_ANY, _("Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextAutomatic->Wrap( 480 ); - fgSizer1->Add( m_staticTextAutomatic, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); - - - bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_toggleBtnMirror = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnMirror->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer172->Add( m_toggleBtnMirror, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); - - - fgSizer1->Add( bSizer172, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextMirror = new wxStaticText( m_panel37, wxID_ANY, _("Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextMirror->Wrap( 480 ); - fgSizer1->Add( m_staticTextMirror, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxVERTICAL ); - - - bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_toggleBtnUpdate = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer173->Add( m_toggleBtnUpdate, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); - - - fgSizer1->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticTextUpdate = new wxStaticText( m_panel37, wxID_ANY, _("Copy new or updated files to right folder."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdate->Wrap( 480 ); - fgSizer1->Add( m_staticTextUpdate, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer1741; - bSizer1741 = new wxBoxSizer( wxVERTICAL ); - - - bSizer1741->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_toggleBtnCustom = new wxToggleButton( m_panel37, wxID_ANY, _("Custom"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnCustom->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer1741->Add( m_toggleBtnCustom, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer1741->Add( 0, 0, 1, wxEXPAND, 5 ); - - - fgSizer1->Add( bSizer1741, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextCustom = new wxStaticText( m_panel37, wxID_ANY, _("Configure your own synchronization rules."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCustom->Wrap( 480 ); - fgSizer1->Add( m_staticTextCustom, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer29->Add( fgSizer1, 0, wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer1751; - bSizer1751 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer1751->Add( 3, 0, 0, 0, 5 ); - - m_checkBoxDetectMove = new wxCheckBox( m_panel37, wxID_ANY, _("Detect moved files"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxDetectMove->SetValue(true); - m_checkBoxDetectMove->SetToolTip( _("Requires database files. Not supported by all file systems.") ); - - bSizer1751->Add( m_checkBoxDetectMove, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - - bSizer29->Add( bSizer1751, 0, wxEXPAND, 5 ); - - bSizerExtraConfig = new wxBoxSizer( wxVERTICAL ); - - m_staticline321 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerExtraConfig->Add( m_staticline321, 0, wxEXPAND, 5 ); - - bSizer179 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer174; - bSizer174 = new wxBoxSizer( wxVERTICAL ); - - m_staticText88 = new wxStaticText( m_panel37, wxID_ANY, _("Error handling"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText88->Wrap( -1 ); - bSizer174->Add( m_staticText88, 0, wxBOTTOM, 5 ); - - wxBoxSizer* bSizer175; - bSizer175 = new wxBoxSizer( wxHORIZONTAL ); - - m_toggleBtnErrorIgnore = new wxToggleButton( m_panel37, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); - - bSizer175->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnErrorPopup = new wxToggleButton( m_panel37, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); - - bSizer175->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer174->Add( bSizer175, 0, 0, 5 ); - - - bSizer179->Add( bSizer174, 0, wxALL, 5 ); - - m_staticline36 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer179->Add( m_staticline36, 0, wxEXPAND, 5 ); - - bSizerOnCompletion = new wxBoxSizer( wxVERTICAL ); - - m_staticText89 = new wxStaticText( m_panel37, wxID_ANY, _("On completion"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText89->Wrap( -1 ); - bSizerOnCompletion->Add( m_staticText89, 0, wxBOTTOM, 5 ); - - m_comboBoxExecFinished = new ExecFinishedBox( m_panel37, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizerOnCompletion->Add( m_comboBoxExecFinished, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer179->Add( bSizerOnCompletion, 1, wxALL, 5 ); - - - bSizerExtraConfig->Add( bSizer179, 0, wxEXPAND, 5 ); - - - bSizer29->Add( bSizerExtraConfig, 0, wxEXPAND, 5 ); - - m_staticline32 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer29->Add( m_staticline32, 0, wxEXPAND, 5 ); - - bSizerNamingConvention = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText87 = new wxStaticText( m_panel37, wxID_ANY, _("Deletion handling"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText87->Wrap( -1 ); - bSizerNamingConvention->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - - bSizerNamingConvention->Add( 0, 0, 1, wxEXPAND, 5 ); - - bSizerVersioningNamingConvention = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextNamingCvtPart1 = new wxStaticText( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextNamingCvtPart1->Wrap( -1 ); - m_staticTextNamingCvtPart1->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizerVersioningNamingConvention->Add( m_staticTextNamingCvtPart1, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextNamingCvtPart2Bold = new wxStaticText( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextNamingCvtPart2Bold->Wrap( -1 ); - m_staticTextNamingCvtPart2Bold->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_staticTextNamingCvtPart2Bold->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizerVersioningNamingConvention->Add( m_staticTextNamingCvtPart2Bold, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextNamingCvtPart3 = new wxStaticText( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextNamingCvtPart3->Wrap( -1 ); - m_staticTextNamingCvtPart3->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizerVersioningNamingConvention->Add( m_staticTextNamingCvtPart3, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerNamingConvention->Add( bSizerVersioningNamingConvention, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - - bSizer29->Add( bSizerNamingConvention, 0, wxTOP|wxEXPAND, 5 ); - - wxBoxSizer* bSizer180; - bSizer180 = new wxBoxSizer( wxHORIZONTAL ); - - m_toggleBtnPermanent = new wxToggleButton( m_panel37, wxID_ANY, _("Permanent"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnPermanent->SetToolTip( _("Delete or overwrite files permanently") ); - - bSizer180->Add( m_toggleBtnPermanent, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_toggleBtnRecycler = new wxToggleButton( m_panel37, wxID_ANY, _("Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnRecycler->SetToolTip( _("Back up deleted and overwritten files in the recycle bin") ); - - bSizer180->Add( m_toggleBtnRecycler, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnVersioning = new wxToggleButton( m_panel37, wxID_ANY, _("Versioning"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnVersioning->SetToolTip( _("Move files to a user-defined folder") ); - - bSizer180->Add( m_toggleBtnVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer180->Add( 0, 0, 1, wxEXPAND, 5 ); - - bSizerVersioningStyle = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText93 = new wxStaticText( m_panel37, wxID_ANY, _("Naming convention:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText93->Wrap( -1 ); - bSizerVersioningStyle->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - wxArrayString m_choiceVersioningStyleChoices; - m_choiceVersioningStyle = new wxChoice( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVersioningStyleChoices, 0 ); - m_choiceVersioningStyle->SetSelection( 0 ); - bSizerVersioningStyle->Add( m_choiceVersioningStyle, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer180->Add( bSizerVersioningStyle, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer29->Add( bSizer180, 0, wxEXPAND|wxALL, 5 ); - - m_panelVersioning = new wxPanel( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelVersioning->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer156; - bSizer156 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer1151; - bSizer1151 = new wxBoxSizer( wxHORIZONTAL ); - - m_versioningFolder = new FolderHistoryBox( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer1151->Add( m_versioningFolder, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirVersioning = new wxButton( m_panelVersioning, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirVersioning->SetToolTip( _("Select a folder") ); - - bSizer1151->Add( m_buttonSelectDirVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer156->Add( bSizer1151, 0, wxEXPAND, 5 ); - - - m_panelVersioning->SetSizer( bSizer156 ); - m_panelVersioning->Layout(); - bSizer156->Fit( m_panelVersioning ); - bSizer29->Add( m_panelVersioning, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer181->Add( bSizer29, 0, wxEXPAND, 5 ); - - m_staticline31 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer181->Add( m_staticline31, 0, wxEXPAND, 5 ); - - bSizerConfig = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer18011; - bSizer18011 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextHeaderCategory1 = new wxStaticText( m_panel37, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); - m_staticTextHeaderCategory1->Wrap( -1 ); - bSizer18011->Add( m_staticTextHeaderCategory1, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer18011->Add( 5, 0, 0, 0, 5 ); - - m_staticTextHeaderAction1 = new wxStaticText( m_panel37, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT ); - m_staticTextHeaderAction1->Wrap( -1 ); - bSizer18011->Add( m_staticTextHeaderAction1, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerConfig->Add( bSizer18011, 0, wxEXPAND, 5 ); - - - bSizerConfig->Add( 0, 5, 0, 0, 5 ); - - m_bitmapDatabase = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerConfig->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 ); - - wxBoxSizer* sbSizerKeepWidthStableIfSyncDirsNotShown; - sbSizerKeepWidthStableIfSyncDirsNotShown = new wxBoxSizer( wxHORIZONTAL ); - - - sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 45, 0, 0, 0, 5 ); - - - sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 5, 0, 0, 0, 5 ); - - - sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 46, 0, 0, 0, 5 ); - - - bSizerConfig->Add( sbSizerKeepWidthStableIfSyncDirsNotShown, 0, 0, 5 ); - - sbSizerSyncDirections = new wxBoxSizer( wxVERTICAL ); - - bSizerLeftOnly = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapLeftOnly = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapLeftOnly->SetToolTip( _("Item exists on left side only") ); - - bSizerLeftOnly->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerLeftOnly->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLeftOnly = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerLeftOnly->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerRightOnly = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapRightOnly = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapRightOnly->SetToolTip( _("Item exists on right side only") ); - - bSizerRightOnly->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerRightOnly->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonRightOnly = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerRightOnly->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerRightOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerLeftNewer = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapLeftNewer = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapLeftNewer->SetToolTip( _("Left side is newer") ); - - bSizerLeftNewer->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerLeftNewer->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonLeftNewer = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerLeftNewer->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerRightNewer = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapRightNewer = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapRightNewer->SetToolTip( _("Right side is newer") ); - - bSizerRightNewer->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerRightNewer->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonRightNewer = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerRightNewer->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerRightNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerDifferent = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapDifferent = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapDifferent->SetToolTip( _("Items have different content") ); - - bSizerDifferent->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerDifferent->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonDifferent = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerDifferent->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerDifferent, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerConflict = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapConflict = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapConflict->SetToolTip( _("Conflict/item cannot be categorized") ); - - bSizerConflict->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerConflict->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonConflict = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerConflict->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerConflict, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerConfig->Add( sbSizerSyncDirections, 0, wxEXPAND, 5 ); - - - bSizer181->Add( bSizerConfig, 0, wxALL|wxEXPAND, 5 ); - - - m_panel37->SetSizer( bSizer181 ); - m_panel37->Layout(); - bSizer181->Fit( m_panel37 ); - bSizer7->Add( m_panel37, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline15 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer7->Add( m_staticline15, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOK->SetDefault(); - m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer7->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - this->SetSizer( bSizer7 ); - this->Layout(); - bSizer7->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) ); - m_toggleBtnTwoWay->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncTwoWayDouble ), NULL, this ); - m_toggleBtnTwoWay->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncTwoWay ), NULL, this ); - m_toggleBtnMirror->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this ); - m_toggleBtnMirror->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this ); - m_toggleBtnUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this ); - m_toggleBtnUpdate->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this ); - m_toggleBtnCustom->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this ); - m_toggleBtnCustom->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this ); - m_checkBoxDetectMove->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnToggleDetectMovedFiles ), NULL, this ); - m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorIgnore ), NULL, this ); - m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorPopup ), NULL, this ); - m_toggleBtnPermanent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionPermanent ), NULL, this ); - m_toggleBtnRecycler->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionRecycler ), NULL, this ); - m_toggleBtnVersioning->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionVersioning ), NULL, this ); - m_choiceVersioningStyle->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnParameterChange ), NULL, this ); - m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExLeftSideOnly ), NULL, this ); - m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExRightSideOnly ), NULL, this ); - m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnLeftNewer ), NULL, this ); - m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnRightNewer ), NULL, this ); - m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDifferent ), NULL, this ); - m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnConflict ), NULL, this ); - m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnApply ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer179; + bSizer179 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer153; + bSizer153 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer154; + bSizer154 = new wxBoxSizer( wxVERTICAL ); + + m_bpButtonErrors = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); + bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonWarnings = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); + bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonInfo = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); + bSizer154->Add( m_bpButtonInfo, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer153->Add( bSizer154, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer153->Add( m_staticline13, 0, wxEXPAND, 5 ); + + m_gridMessages = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridMessages->SetScrollRate( 5, 5 ); + bSizer153->Add( m_gridMessages, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer179->Add( bSizer153, 1, wxEXPAND, 5 ); + + + this->SetSizer( bSizer179 ); + this->Layout(); + bSizer179->Fit( this ); + + // Connect Events + m_bpButtonErrors->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnErrors ), NULL, this ); + m_bpButtonWarnings->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnWarnings ), NULL, this ); + m_bpButtonInfo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnInfo ), NULL, this ); } -SyncCfgDlgGenerated::~SyncCfgDlgGenerated() +LogPanelGenerated::~LogPanelGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) ); - m_toggleBtnTwoWay->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncTwoWayDouble ), NULL, this ); - m_toggleBtnTwoWay->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncTwoWay ), NULL, this ); - m_toggleBtnMirror->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this ); - m_toggleBtnMirror->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this ); - m_toggleBtnUpdate->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this ); - m_toggleBtnUpdate->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this ); - m_toggleBtnCustom->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this ); - m_toggleBtnCustom->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this ); - m_checkBoxDetectMove->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnToggleDetectMovedFiles ), NULL, this ); - m_toggleBtnErrorIgnore->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorIgnore ), NULL, this ); - m_toggleBtnErrorPopup->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorPopup ), NULL, this ); - m_toggleBtnPermanent->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionPermanent ), NULL, this ); - m_toggleBtnRecycler->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionRecycler ), NULL, this ); - m_toggleBtnVersioning->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionVersioning ), NULL, this ); - m_choiceVersioningStyle->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnParameterChange ), NULL, this ); - m_bpButtonLeftOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExLeftSideOnly ), NULL, this ); - m_bpButtonRightOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExRightSideOnly ), NULL, this ); - m_bpButtonLeftNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnLeftNewer ), NULL, this ); - m_bpButtonRightNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnRightNewer ), NULL, this ); - m_bpButtonDifferent->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDifferent ), NULL, this ); - m_bpButtonConflict->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnConflict ), NULL, this ); - m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnApply ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this ); - } BatchDlgGenerated::BatchDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( 400,260 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer54; - bSizer54 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapBatchJob = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer72->Add( m_bitmapBatchJob, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("Batch job"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextHeader->Wrap( -1 ); - m_staticTextHeader->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_staticTextDescr = new wxStaticText( this, wxID_ANY, _("Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDescr->Wrap( 520 ); - bSizer72->Add( m_staticTextDescr, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - - bSizer72->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonHelp->SetToolTip( _("Help") ); - - bSizer72->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer54->Add( bSizer72, 0, wxEXPAND, 5 ); - - m_staticline18 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer54->Add( m_staticline18, 0, wxEXPAND, 5 ); - - m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer180; - bSizer180 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer171; - bSizer171 = new wxBoxSizer( wxVERTICAL ); - - m_staticText82 = new wxStaticText( m_panel35, wxID_ANY, _("Error handling"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText82->Wrap( -1 ); - bSizer171->Add( m_staticText82, 0, wxBOTTOM, 5 ); - - wxBoxSizer* bSizer169; - bSizer169 = new wxBoxSizer( wxHORIZONTAL ); - - m_toggleBtnErrorIgnore = new wxToggleButton( m_panel35, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); - - bSizer169->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnErrorPopup = new wxToggleButton( m_panel35, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); - - bSizer169->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_toggleBtnErrorAbort = new wxToggleButton( m_panel35, wxID_ANY, _("Exit"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorAbort->SetToolTip( _("Abort synchronization on first error") ); - - bSizer169->Add( m_toggleBtnErrorAbort, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer171->Add( bSizer169, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer180->Add( bSizer171, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_staticline26 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer180->Add( m_staticline26, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer170; - bSizer170 = new wxBoxSizer( wxVERTICAL ); - - m_staticText81 = new wxStaticText( m_panel35, wxID_ANY, _("On completion"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText81->Wrap( -1 ); - bSizer170->Add( m_staticText81, 0, wxBOTTOM, 5 ); - - m_comboBoxExecFinished = new ExecFinishedBox( m_panel35, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer170->Add( m_comboBoxExecFinished, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer180->Add( bSizer170, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - - bSizer172->Add( bSizer180, 0, wxEXPAND, 5 ); - - m_staticline25 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer172->Add( m_staticline25, 0, wxEXPAND, 5 ); - - m_checkBoxShowProgress = new wxCheckBox( m_panel35, wxID_ANY, _("Show progress dialog"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer172->Add( m_checkBoxShowProgress, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); - - m_checkBoxGenerateLogfile = new wxCheckBox( m_panel35, wxID_ANY, _("Save log"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer172->Add( m_checkBoxGenerateLogfile, 0, wxEXPAND|wxALL, 5 ); - - m_panelLogfile = new wxPanel( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelLogfile->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer1721; - bSizer1721 = new wxBoxSizer( wxHORIZONTAL ); - - m_logfileDir = new FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer1721->Add( m_logfileDir, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectLogfileDir = new wxButton( m_panelLogfile, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectLogfileDir->SetToolTip( _("Select folder to save log files") ); - - bSizer1721->Add( m_buttonSelectLogfileDir, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_checkBoxLogfilesLimit = new wxCheckBox( m_panelLogfile, wxID_ANY, _("Limit"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxLogfilesLimit->SetToolTip( _("Limit maximum number of log files") ); - - bSizer1721->Add( m_checkBoxLogfilesLimit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_spinCtrlLogfileLimit = new wxSpinCtrl( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - m_spinCtrlLogfileLimit->SetToolTip( _("Limit maximum number of log files") ); - - bSizer1721->Add( m_spinCtrlLogfileLimit, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelLogfile->SetSizer( bSizer1721 ); - m_panelLogfile->Layout(); - bSizer1721->Fit( m_panelLogfile ); - bSizer172->Add( m_panelLogfile, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - m_panel35->SetSizer( bSizer172 ); - m_panel35->Layout(); - bSizer172->Fit( m_panel35 ); - bSizer54->Add( m_panel35, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer54->Add( m_staticline13, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonSaveAs = new wxButton( this, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonSaveAs->SetDefault(); - m_buttonSaveAs->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonSaveAs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer54->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - this->SetSizer( bSizer54 ); - this->Layout(); - bSizer54->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); - m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnHelp ), NULL, this ); - m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorIgnore ), NULL, this ); - m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorPopup ), NULL, this ); - m_toggleBtnErrorAbort->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorAbort ), NULL, this ); - m_checkBoxGenerateLogfile->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleGenerateLogfile ), NULL, this ); - m_checkBoxLogfilesLimit->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleLogfilesLimit ), NULL, this ); - m_buttonSaveAs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); -} + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); -BatchDlgGenerated::~BatchDlgGenerated() -{ - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); - m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnHelp ), NULL, this ); - m_toggleBtnErrorIgnore->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorIgnore ), NULL, this ); - m_toggleBtnErrorPopup->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorPopup ), NULL, this ); - m_toggleBtnErrorAbort->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorAbort ), NULL, this ); - m_checkBoxGenerateLogfile->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleGenerateLogfile ), NULL, this ); - m_checkBoxLogfilesLimit->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleLogfilesLimit ), NULL, this ); - m_buttonSaveAs->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); - -} + wxBoxSizer* bSizer54; + bSizer54 = new wxBoxSizer( wxVERTICAL ); -MessageDlgGenerated::MessageDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) -{ - this->SetSizeHints( wxSize( 300,160 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer24; - bSizer24 = new wxBoxSizer( wxVERTICAL ); - - m_panel33 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel33->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer165; - bSizer165 = new wxBoxSizer( wxVERTICAL ); - - - bSizer165->Add( 0, 10, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer26; - bSizer26 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapMsgType = new wxStaticBitmap( m_panel33, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer26->Add( m_bitmapMsgType, 0, wxRIGHT|wxLEFT, 10 ); - - m_textCtrlMessage = new wxTextCtrl( m_panel33, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 420,150 ), wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER ); - bSizer26->Add( m_textCtrlMessage, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 5 ); - - - bSizer165->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - m_panel33->SetSizer( bSizer165 ); - m_panel33->Layout(); - bSizer165->Fit( m_panel33 ); - bSizer24->Add( m_panel33, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline6 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline6, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); - - wxBoxSizer* bSizer25; - bSizer25 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxCustom = new wxCheckBox( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer25->Add( m_checkBoxCustom, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonAffirmative = new wxButton( this, wxID_YES, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonAffirmative, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonNegative = new wxButton( this, wxID_NO, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonNegative, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer25->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - bSizer24->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - this->SetSizer( bSizer24 ); - this->Layout(); - bSizer24->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MessageDlgGenerated::OnClose ) ); - m_checkBoxCustom->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnCheckBoxClick ), NULL, this ); - m_buttonAffirmative->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButtonAffirmative ), NULL, this ); - m_buttonNegative->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButtonNegative ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnCancel ), NULL, this ); + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapBatchJob = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer72->Add( m_bitmapBatchJob, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_staticTextDescr = new wxStaticText( this, wxID_ANY, _("Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDescr->Wrap( 520 ); + bSizer72->Add( m_staticTextDescr, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + bSizer54->Add( bSizer72, 0, 0, 5 ); + + m_staticline18 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer54->Add( m_staticline18, 0, wxEXPAND, 5 ); + + m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer180; + bSizer180 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer171; + bSizer171 = new wxBoxSizer( wxVERTICAL ); + + m_staticText82 = new wxStaticText( m_panel35, wxID_ANY, _("Handle errors:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText82->Wrap( -1 ); + bSizer171->Add( m_staticText82, 0, wxALL, 5 ); + + wxBoxSizer* bSizer169; + bSizer169 = new wxBoxSizer( wxHORIZONTAL ); + + m_toggleBtnErrorIgnore = new wxToggleButton( m_panel35, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); + + bSizer169->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnErrorPopup = new wxToggleButton( m_panel35, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); + + bSizer169->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_toggleBtnErrorStop = new wxToggleButton( m_panel35, wxID_ANY, _("Stop"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorStop->SetToolTip( _("Stop synchronization at first error") ); + + bSizer169->Add( m_toggleBtnErrorStop, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer171->Add( bSizer169, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer180->Add( bSizer171, 0, wxALL, 5 ); + + m_staticline26 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer180->Add( m_staticline26, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer170; + bSizer170 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxShowProgress = new wxCheckBox( m_panel35, wxID_ANY, _("Show progress dialog"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer170->Add( m_checkBoxShowProgress, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 ); + + wxBoxSizer* bSizer179; + bSizer179 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText81 = new wxStaticText( m_panel35, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText81->Wrap( -1 ); + bSizer179->Add( m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_comboBoxExecFinished = new ExecFinishedBox( m_panel35, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer179->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer170->Add( bSizer179, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer180->Add( bSizer170, 1, wxALL, 5 ); + + + bSizer172->Add( bSizer180, 0, wxEXPAND, 5 ); + + m_staticline25 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer172->Add( m_staticline25, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer191; + bSizer191 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxGenerateLogfile = new wxCheckBox( m_panel35, wxID_ANY, _("Save log:"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer191->Add( m_checkBoxGenerateLogfile, 0, wxEXPAND|wxBOTTOM, 5 ); + + m_panelLogfile = new wxPanel( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelLogfile->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer1721; + bSizer1721 = new wxBoxSizer( wxHORIZONTAL ); + + m_logfileDir = new FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer1721->Add( m_logfileDir, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectLogfileDir = new wxButton( m_panelLogfile, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectLogfileDir->SetToolTip( _("Select a folder") ); + + bSizer1721->Add( m_buttonSelectLogfileDir, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_checkBoxLogfilesLimit = new wxCheckBox( m_panelLogfile, wxID_ANY, _("Limit:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxLogfilesLimit->SetToolTip( _("Limit maximum number of log files") ); + + bSizer1721->Add( m_checkBoxLogfilesLimit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_spinCtrlLogfileLimit = new wxSpinCtrl( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); + m_spinCtrlLogfileLimit->SetToolTip( _("Limit maximum number of log files") ); + + bSizer1721->Add( m_spinCtrlLogfileLimit, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelLogfile->SetSizer( bSizer1721 ); + m_panelLogfile->Layout(); + bSizer1721->Fit( m_panelLogfile ); + bSizer191->Add( m_panelLogfile, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer172->Add( bSizer191, 0, wxEXPAND|wxALL, 10 ); + + m_hyperlink17 = new wxHyperlinkCtrl( m_panel35, wxID_ANY, _("How can I schedule a batch job?"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizer172->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + m_panel35->SetSizer( bSizer172 ); + m_panel35->Layout(); + bSizer172->Fit( m_panel35 ); + bSizer54->Add( m_panel35, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer54->Add( m_staticline13, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + + bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_buttonSaveAs = new wxButton( this, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonSaveAs->SetDefault(); + m_buttonSaveAs->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonSaveAs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer54->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 ); + + + this->SetSizer( bSizer54 ); + this->Layout(); + bSizer54->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); + m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorIgnore ), NULL, this ); + m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorPopup ), NULL, this ); + m_toggleBtnErrorStop->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorStop ), NULL, this ); + m_checkBoxGenerateLogfile->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleGenerateLogfile ), NULL, this ); + m_checkBoxLogfilesLimit->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleLogfilesLimit ), NULL, this ); + m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( BatchDlgGenerated::OnHelpScheduleBatch ), NULL, this ); + m_buttonSaveAs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); } -MessageDlgGenerated::~MessageDlgGenerated() +BatchDlgGenerated::~BatchDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MessageDlgGenerated::OnClose ) ); - m_checkBoxCustom->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnCheckBoxClick ), NULL, this ); - m_buttonAffirmative->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButtonAffirmative ), NULL, this ); - m_buttonNegative->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButtonNegative ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnCancel ), NULL, this ); - } DeleteDlgGenerated::DeleteDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( 300,180 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer24; - bSizer24 = new wxBoxSizer( wxVERTICAL ); - - m_panel31 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel31->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer158; - bSizer158 = new wxBoxSizer( wxVERTICAL ); - - - bSizer158->Add( 0, 10, 0, 0, 5 ); - - wxBoxSizer* bSizer159; - bSizer159 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapDeleteType = new wxStaticBitmap( m_panel31, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer159->Add( m_bitmapDeleteType, 0, wxRIGHT|wxLEFT, 10 ); - - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxVERTICAL ); - - m_staticTextHeader = new wxStaticText( m_panel31, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextHeader->Wrap( -1 ); - bSizer160->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxTOP, 5 ); - - - bSizer160->Add( 0, 10, 0, 0, 5 ); - - m_textCtrlFileList = new wxTextCtrl( m_panel31, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 520,200 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxSTATIC_BORDER ); - bSizer160->Add( m_textCtrlFileList, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer159->Add( bSizer160, 1, wxEXPAND, 5 ); - - - bSizer158->Add( bSizer159, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - m_panel31->SetSizer( bSizer158 ); - m_panel31->Layout(); - bSizer158->Fit( m_panel31 ); - bSizer24->Add( m_panel31, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer99; - bSizer99 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer99->Add( m_checkBoxUseRecycler, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - m_checkBoxDeleteBothSides = new wxCheckBox( this, wxID_ANY, _("Delete on both sides"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxDeleteBothSides->Hide(); - m_checkBoxDeleteBothSides->SetToolTip( _("Delete on both sides even if the file is selected on one side only") ); - - bSizer99->Add( m_checkBoxDeleteBothSides, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxLEFT, 5 ); - - - bSizerStdButtons->Add( bSizer99, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOK->SetDefault(); - m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer24->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); - - - this->SetSizer( bSizer24 ); - this->Layout(); - bSizer24->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) ); - m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this ); - m_checkBoxDeleteBothSides->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this ); - m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer24; + bSizer24 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapDeleteType = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer72->Add( m_bitmapDeleteType, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0|wxNO_BORDER ); + m_staticTextHeader->Wrap( -1 ); + bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + bSizer24->Add( bSizer72, 0, 0, 5 ); + + m_staticline91 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline91, 0, wxEXPAND, 5 ); + + m_panel31 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel31->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer185->Add( 60, 0, 0, 0, 5 ); + + m_staticline42 = new wxStaticLine( m_panel31, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer185->Add( m_staticline42, 0, wxEXPAND, 5 ); + + m_textCtrlFileList = new wxTextCtrl( m_panel31, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 480,200 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER ); + bSizer185->Add( m_textCtrlFileList, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panel31->SetSizer( bSizer185 ); + m_panel31->Layout(); + bSizer185->Fit( m_panel31 ); + bSizer24->Add( m_panel31, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer99; + bSizer99 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer99->Add( m_checkBoxUseRecycler, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + m_checkBoxDeleteBothSides = new wxCheckBox( this, wxID_ANY, _("Delete on both sides"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxDeleteBothSides->Hide(); + m_checkBoxDeleteBothSides->SetToolTip( _("Delete on both sides even if the file is selected on one side only") ); + + bSizer99->Add( m_checkBoxDeleteBothSides, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxLEFT, 5 ); + + + bSizerStdButtons->Add( bSizer99, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonOK = new wxButton( this, wxID_OK, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOK->SetDefault(); + m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer24->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer24 ); + this->Layout(); + bSizer24->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) ); + m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this ); + m_checkBoxDeleteBothSides->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this ); + m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this ); } DeleteDlgGenerated::~DeleteDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) ); - m_checkBoxUseRecycler->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this ); - m_checkBoxDeleteBothSides->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this ); - m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this ); - } FilterDlgGenerated::FilterDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( 500,300 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer21; - bSizer21 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmap26 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer72->Add( m_bitmap26, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextHeader->Wrap( -1 ); - m_staticTextHeader->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_staticText44 = new wxStaticText( this, wxID_ANY, _("Files will only be synchronized if they pass all filter rules.\nNote: File paths must be relative to base directories."), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticText44->Wrap( 500 ); - bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - - bSizer72->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonHelp->SetToolTip( _("Help") ); - - bSizer72->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer21->Add( bSizer72, 0, wxEXPAND, 5 ); - - m_staticline17 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer21->Add( m_staticline17, 0, wxEXPAND, 5 ); - - m_panel38 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel38->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer159; - bSizer159 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxVERTICAL ); - - m_staticText78 = new wxStaticText( m_panel38, wxID_ANY, _("Include"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText78->Wrap( -1 ); - bSizer166->Add( m_staticText78, 0, wxALL, 5 ); - - wxBoxSizer* bSizer1661; - bSizer1661 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapInclude = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); - bSizer1661->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - m_textCtrlInclude = new wxTextCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); - bSizer1661->Add( m_textCtrlInclude, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - bSizer166->Add( bSizer1661, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxLEFT, 5 ); - - m_staticline22 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer166->Add( m_staticline22, 0, wxEXPAND, 5 ); - - m_staticText77 = new wxStaticText( m_panel38, wxID_ANY, _("Exclude"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText77->Wrap( -1 ); - bSizer166->Add( m_staticText77, 0, wxALL, 5 ); - - wxBoxSizer* bSizer1651; - bSizer1651 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapExclude = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); - bSizer1651->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_textCtrlExclude = new wxTextCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); - bSizer1651->Add( m_textCtrlExclude, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer166->Add( bSizer1651, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxLEFT, 5 ); - - - bSizer159->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticline24 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer159->Add( m_staticline24, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxVERTICAL ); - - m_staticText79 = new wxStaticText( m_panel38, wxID_ANY, _("Time span"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText79->Wrap( -1 ); - bSizer160->Add( m_staticText79, 0, wxALL, 5 ); - - wxBoxSizer* bSizer167; - bSizer167 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapFilterDate = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 34,34 ), 0 ); - bSizer167->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 ); - - wxBoxSizer* bSizer165; - bSizer165 = new wxBoxSizer( wxVERTICAL ); - - m_spinCtrlTimespan = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer165->Add( m_spinCtrlTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxArrayString m_choiceUnitTimespanChoices; - m_choiceUnitTimespan = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 ); - m_choiceUnitTimespan->SetSelection( 0 ); - bSizer165->Add( m_choiceUnitTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer167->Add( bSizer165, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); - - - bSizer160->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - m_staticline23 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer160->Add( m_staticline23, 0, wxEXPAND, 5 ); - - m_staticText80 = new wxStaticText( m_panel38, wxID_ANY, _("File size"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText80->Wrap( -1 ); - bSizer160->Add( m_staticText80, 0, wxALL, 5 ); - - wxBoxSizer* bSizer168; - bSizer168 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapFilterSize = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); - bSizer168->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - wxBoxSizer* bSizer158; - bSizer158 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer162; - bSizer162 = new wxBoxSizer( wxVERTICAL ); - - m_staticText101 = new wxStaticText( m_panel38, wxID_ANY, _("Minimum"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText101->Wrap( -1 ); - bSizer162->Add( m_staticText101, 0, wxBOTTOM, 2 ); - - m_spinCtrlMinSize = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer162->Add( m_spinCtrlMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxArrayString m_choiceUnitMinSizeChoices; - m_choiceUnitMinSize = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 ); - m_choiceUnitMinSize->SetSelection( 0 ); - bSizer162->Add( m_choiceUnitMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer158->Add( bSizer162, 0, wxBOTTOM|wxEXPAND, 5 ); - - wxBoxSizer* bSizer163; - bSizer163 = new wxBoxSizer( wxVERTICAL ); - - m_staticText102 = new wxStaticText( m_panel38, wxID_ANY, _("Maximum"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText102->Wrap( -1 ); - bSizer163->Add( m_staticText102, 0, wxBOTTOM, 2 ); - - m_spinCtrlMaxSize = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer163->Add( m_spinCtrlMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxArrayString m_choiceUnitMaxSizeChoices; - m_choiceUnitMaxSize = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 ); - m_choiceUnitMaxSize->SetSelection( 0 ); - bSizer163->Add( m_choiceUnitMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer158->Add( bSizer163, 0, wxEXPAND, 5 ); - - - bSizer168->Add( bSizer158, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer160->Add( bSizer168, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer159->Add( bSizer160, 0, wxEXPAND, 5 ); - - - m_panel38->SetSizer( bSizer159 ); - m_panel38->Layout(); - bSizer159->Fit( m_panel38 ); - bSizer21->Add( m_panel38, 1, wxEXPAND, 5 ); - - m_staticline16 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer21->Add( m_staticline16, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonClear = new wxButton( this, wxID_DEFAULT, _("&Clear"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonClear, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - - bSizerStdButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonOk = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOk->SetDefault(); - m_buttonOk->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOk, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer21->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); - - - this->SetSizer( bSizer21 ); - this->Layout(); - bSizer21->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) ); - m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this ); - m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); - m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); - m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_buttonClear->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnClear ), NULL, this ); - m_buttonOk->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer21; + bSizer21 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapFilter = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer72->Add( m_bitmapFilter, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_staticText44 = new wxStaticText( this, wxID_ANY, _("Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair."), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticText44->Wrap( 480 ); + bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + bSizer21->Add( bSizer72, 0, 0, 5 ); + + m_staticline17 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer21->Add( m_staticline17, 0, wxEXPAND, 5 ); + + m_panel38 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel38->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer159; + bSizer159 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); + + + bSizer166->Add( 0, 10, 0, 0, 5 ); + + wxBoxSizer* bSizer1661; + bSizer1661 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapInclude = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); + bSizer1661->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxVERTICAL ); + + m_staticText78 = new wxStaticText( m_panel38, wxID_ANY, _("Include:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText78->Wrap( -1 ); + bSizer173->Add( m_staticText78, 0, 0, 5 ); + + m_textCtrlInclude = new wxTextCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); + m_textCtrlInclude->SetMinSize( wxSize( 280,-1 ) ); + + bSizer173->Add( m_textCtrlInclude, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP, 5 ); + + + bSizer1661->Add( bSizer173, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer166->Add( bSizer1661, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxLEFT, 5 ); + + m_staticline22 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline22, 0, wxEXPAND, 5 ); + + + bSizer166->Add( 0, 10, 0, 0, 5 ); + + wxBoxSizer* bSizer1651; + bSizer1651 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapExclude = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); + bSizer1651->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + wxBoxSizer* bSizer174; + bSizer174 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer189; + bSizer189 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText77 = new wxStaticText( m_panel38, wxID_ANY, _("Exclude:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText77->Wrap( -1 ); + bSizer189->Add( m_staticText77, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer189->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_hyperlink17 = new wxHyperlinkCtrl( m_panel38, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizer189->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + + bSizer174->Add( bSizer189, 0, wxEXPAND, 5 ); + + m_textCtrlExclude = new wxTextCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); + bSizer174->Add( m_textCtrlExclude, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxTOP, 5 ); + + + bSizer1651->Add( bSizer174, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer166->Add( bSizer1651, 2, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxLEFT, 5 ); + + + bSizer159->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticline24 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer159->Add( m_staticline24, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer167; + bSizer167 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapFilterDate = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 34,34 ), 0 ); + bSizer167->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + wxBoxSizer* bSizer165; + bSizer165 = new wxBoxSizer( wxVERTICAL ); + + m_staticText79 = new wxStaticText( m_panel38, wxID_ANY, _("Time span:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText79->Wrap( -1 ); + bSizer165->Add( m_staticText79, 0, wxBOTTOM, 5 ); + + m_spinCtrlTimespan = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + bSizer165->Add( m_spinCtrlTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxArrayString m_choiceUnitTimespanChoices; + m_choiceUnitTimespan = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 ); + m_choiceUnitTimespan->SetSelection( 0 ); + bSizer165->Add( m_choiceUnitTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer167->Add( bSizer165, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer160->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 ); + + m_staticline23 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer160->Add( m_staticline23, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer168; + bSizer168 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapFilterSize = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); + bSizer168->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + wxBoxSizer* bSizer158; + bSizer158 = new wxBoxSizer( wxVERTICAL ); + + m_staticText80 = new wxStaticText( m_panel38, wxID_ANY, _("File size:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText80->Wrap( -1 ); + bSizer158->Add( m_staticText80, 0, wxBOTTOM, 5 ); + + wxBoxSizer* bSizer162; + bSizer162 = new wxBoxSizer( wxVERTICAL ); + + m_staticText101 = new wxStaticText( m_panel38, wxID_ANY, _("Minimum:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText101->Wrap( -1 ); + bSizer162->Add( m_staticText101, 0, wxBOTTOM, 2 ); + + m_spinCtrlMinSize = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + bSizer162->Add( m_spinCtrlMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxArrayString m_choiceUnitMinSizeChoices; + m_choiceUnitMinSize = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 ); + m_choiceUnitMinSize->SetSelection( 0 ); + bSizer162->Add( m_choiceUnitMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer158->Add( bSizer162, 0, wxBOTTOM|wxEXPAND, 5 ); + + wxBoxSizer* bSizer163; + bSizer163 = new wxBoxSizer( wxVERTICAL ); + + m_staticText102 = new wxStaticText( m_panel38, wxID_ANY, _("Maximum:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText102->Wrap( -1 ); + bSizer163->Add( m_staticText102, 0, wxBOTTOM, 2 ); + + m_spinCtrlMaxSize = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + bSizer163->Add( m_spinCtrlMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxArrayString m_choiceUnitMaxSizeChoices; + m_choiceUnitMaxSize = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 ); + m_choiceUnitMaxSize->SetSelection( 0 ); + bSizer163->Add( m_choiceUnitMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer158->Add( bSizer163, 0, wxEXPAND, 5 ); + + + bSizer168->Add( bSizer158, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer160->Add( bSizer168, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 ); + + + bSizer159->Add( bSizer160, 0, wxEXPAND, 5 ); + + + m_panel38->SetSizer( bSizer159 ); + m_panel38->Layout(); + bSizer159->Fit( m_panel38 ); + bSizer21->Add( m_panel38, 1, wxEXPAND, 5 ); + + m_staticline16 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer21->Add( m_staticline16, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonClear = new wxButton( this, wxID_DEFAULT, _("&Clear"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonClear, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + + bSizerStdButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonOk = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOk->SetDefault(); + m_buttonOk->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOk, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer21->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer21 ); + this->Layout(); + bSizer21->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) ); + m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); + m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( FilterDlgGenerated::OnHelpShowExamples ), NULL, this ); + m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); + m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_buttonClear->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnClear ), NULL, this ); + m_buttonOk->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); } FilterDlgGenerated::~FilterDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) ); - m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this ); - m_textCtrlInclude->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); - m_textCtrlExclude->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); - m_choiceUnitTimespan->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_choiceUnitMinSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_choiceUnitMaxSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_buttonClear->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnClear ), NULL, this ); - m_buttonOk->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); - } GlobalSettingsDlgGenerated::GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( 320,360 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer95; - bSizer95 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapSettings = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer72->Add( m_bitmapSettings, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("Global settings"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextHeader->Wrap( -1 ); - m_staticTextHeader->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer95->Add( bSizer72, 0, 0, 5 ); - - m_staticline19 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer95->Add( m_staticline19, 0, wxEXPAND, 5 ); - - m_panel39 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel39->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxTransCopy = new wxCheckBox( m_panel39, wxID_ANY, _("Fail-safe file copy"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer160->Add( m_checkBoxTransCopy, 0, wxALL|wxEXPAND, 5 ); - - m_staticText82 = new wxStaticText( m_panel39, wxID_ANY, _("Copy to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of a fatal error."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText82->Wrap( 460 ); - m_staticText82->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizer160->Add( m_staticText82, 0, wxRIGHT|wxLEFT|wxEXPAND, 20 ); - - m_checkBoxCopyLocked = new wxCheckBox( m_panel39, wxID_ANY, _("Copy locked files"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer160->Add( m_checkBoxCopyLocked, 0, wxALL|wxEXPAND, 5 ); - - m_staticTextCopyLocked = new wxStaticText( m_panel39, wxID_ANY, _("Copy shared or locked files using the Volume Shadow Copy Service (requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCopyLocked->Wrap( 460 ); - m_staticTextCopyLocked->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizer160->Add( m_staticTextCopyLocked, 0, wxEXPAND|wxRIGHT|wxLEFT, 20 ); - - m_checkBoxCopyPermissions = new wxCheckBox( m_panel39, wxID_ANY, _("Copy file access permissions"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer160->Add( m_checkBoxCopyPermissions, 0, wxALL|wxEXPAND, 5 ); - - m_staticText8211 = new wxStaticText( m_panel39, wxID_ANY, _("Transfer file and folder permissions (requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText8211->Wrap( 460 ); - m_staticText8211->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizer160->Add( m_staticText8211, 0, wxEXPAND|wxRIGHT|wxLEFT, 20 ); - - - bSizer166->Add( bSizer160, 0, wxALL|wxEXPAND, 5 ); - - m_staticline191 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer166->Add( m_staticline191, 0, wxEXPAND|wxTOP, 5 ); - - m_buttonResetDialogs = new zen::BitmapTextButton( m_panel39, wxID_ANY, _("Restore hidden dialogs"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer166->Add( m_buttonResetDialogs, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - - m_staticline192 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer166->Add( m_staticline192, 0, wxEXPAND, 5 ); - - m_staticText85 = new wxStaticText( m_panel39, wxID_ANY, _("External applications"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText85->Wrap( -1 ); - bSizer166->Add( m_staticText85, 0, wxALL, 5 ); - - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer157; - bSizer157 = new wxBoxSizer( wxVERTICAL ); - - m_bpButtonAddRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer157->Add( m_bpButtonAddRow, 0, 0, 5 ); - - m_bpButtonRemoveRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer157->Add( m_bpButtonRemoveRow, 0, 0, 5 ); - - - bSizer173->Add( bSizer157, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); - - m_gridCustomCommand = new wxGrid( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - - // Grid - m_gridCustomCommand->CreateGrid( 5, 2 ); - m_gridCustomCommand->EnableEditing( true ); - m_gridCustomCommand->EnableGridLines( true ); - m_gridCustomCommand->EnableDragGridSize( false ); - m_gridCustomCommand->SetMargins( 0, 0 ); - - // Columns - m_gridCustomCommand->SetColSize( 0, 165 ); - m_gridCustomCommand->SetColSize( 1, 196 ); - m_gridCustomCommand->EnableDragColMove( false ); - m_gridCustomCommand->EnableDragColSize( true ); - m_gridCustomCommand->SetColLabelSize( 20 ); - m_gridCustomCommand->SetColLabelValue( 0, _("Description") ); - m_gridCustomCommand->SetColLabelValue( 1, _("Command line") ); - m_gridCustomCommand->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); - - // Rows - m_gridCustomCommand->EnableDragRowSize( false ); - m_gridCustomCommand->SetRowLabelSize( 1 ); - m_gridCustomCommand->SetRowLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE ); - - // Label Appearance - - // Cell Defaults - m_gridCustomCommand->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); - bSizer173->Add( m_gridCustomCommand, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - bSizer166->Add( bSizer173, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 ); - - - m_panel39->SetSizer( bSizer166 ); - m_panel39->Layout(); - bSizer166->Fit( m_panel39 ); - bSizer95->Add( m_panel39, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline20 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer95->Add( m_staticline20, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonDefault = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonDefault, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStdButtons->Add( 0, 0, 1, 0, 5 ); - - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer95->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); - - - this->SetSizer( bSizer95 ); - this->Layout(); - bSizer95->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) ); - m_buttonResetDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this ); - m_bpButtonAddRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this ); - m_bpButtonRemoveRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this ); - m_buttonDefault->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer95; + bSizer95 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapSettings = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer72->Add( m_bitmapSettings, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_staticText44 = new wxStaticText( this, wxID_ANY, _("The following settings are used for all synchronization jobs."), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticText44->Wrap( 500 ); + bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + bSizer95->Add( bSizer72, 0, 0, 5 ); + + m_staticline20 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer95->Add( m_staticline20, 0, wxEXPAND, 5 ); + + m_panel39 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel39->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer186; + bSizer186 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer176; + bSizer176 = new wxBoxSizer( wxHORIZONTAL ); + + m_checkBoxFailSafe = new wxCheckBox( m_panel39, wxID_ANY, _("Fail-safe file copy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxFailSafe->SetValue(true); + m_checkBoxFailSafe->SetToolTip( _("Copy to a temporary file (*.ffs_tmp) before overwriting target.\nThis guarantees a consistent state even in case of a serious error.") ); + + bSizer176->Add( m_checkBoxFailSafe, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText91 = new wxStaticText( m_panel39, wxID_ANY, _("(recommended)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText91->Wrap( -1 ); + m_staticText91->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer176->Add( m_staticText91, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer160->Add( bSizer176, 0, wxEXPAND, 5 ); + + bSizerLockedFiles = new wxBoxSizer( wxHORIZONTAL ); + + m_checkBoxCopyLocked = new wxCheckBox( m_panel39, wxID_ANY, _("Copy locked files"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxCopyLocked->SetValue(true); + m_checkBoxCopyLocked->SetToolTip( _("Copy shared or locked files using the Volume Shadow Copy Service.") ); + + bSizerLockedFiles->Add( m_checkBoxCopyLocked, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText92 = new wxStaticText( m_panel39, wxID_ANY, _("(requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText92->Wrap( -1 ); + m_staticText92->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizerLockedFiles->Add( m_staticText92, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer160->Add( bSizerLockedFiles, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer178; + bSizer178 = new wxBoxSizer( wxHORIZONTAL ); + + m_checkBoxCopyPermissions = new wxCheckBox( m_panel39, wxID_ANY, _("Copy file access permissions"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxCopyPermissions->SetValue(true); + m_checkBoxCopyPermissions->SetToolTip( _("Transfer file and folder permissions.") ); + + bSizer178->Add( m_checkBoxCopyPermissions, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticText93 = new wxStaticText( m_panel39, wxID_ANY, _("(requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText93->Wrap( -1 ); + m_staticText93->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer178->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer160->Add( bSizer178, 0, wxEXPAND, 5 ); + + + bSizer186->Add( bSizer160, 0, wxEXPAND|wxALL, 5 ); + + m_staticline39 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer186->Add( m_staticline39, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer188; + bSizer188 = new wxBoxSizer( wxVERTICAL ); + + m_staticText95 = new wxStaticText( m_panel39, wxID_ANY, _("Automatic retry on error:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText95->Wrap( -1 ); + bSizer188->Add( m_staticText95, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); + + wxFlexGridSizer* fgSizer6; + fgSizer6 = new wxFlexGridSizer( 0, 2, 5, 5 ); + fgSizer6->SetFlexibleDirection( wxBOTH ); + fgSizer6->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticText96 = new wxStaticText( m_panel39, wxID_ANY, _("Retry count:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText96->Wrap( -1 ); + fgSizer6->Add( m_staticText96, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_spinCtrlAutoRetryCount = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 4 ); + fgSizer6->Add( m_spinCtrlAutoRetryCount, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextAutoRetryDelay = new wxStaticText( m_panel39, wxID_ANY, _("Delay (in seconds):"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAutoRetryDelay->Wrap( -1 ); + fgSizer6->Add( m_staticTextAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_spinCtrlAutoRetryDelay = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + fgSizer6->Add( m_spinCtrlAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer188->Add( fgSizer6, 0, wxLEFT, 10 ); + + + bSizer186->Add( bSizer188, 0, wxALL, 10 ); + + + bSizer166->Add( bSizer186, 0, wxEXPAND, 5 ); + + m_staticline191 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline191, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxVERTICAL ); + + m_staticText85 = new wxStaticText( m_panel39, wxID_ANY, _("Customize context menu:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText85->Wrap( -1 ); + bSizer181->Add( m_staticText85, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); + + m_gridCustomCommand = new wxGrid( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + + // Grid + m_gridCustomCommand->CreateGrid( 5, 2 ); + m_gridCustomCommand->EnableEditing( true ); + m_gridCustomCommand->EnableGridLines( true ); + m_gridCustomCommand->EnableDragGridSize( false ); + m_gridCustomCommand->SetMargins( 0, 0 ); + + // Columns + m_gridCustomCommand->SetColSize( 0, 165 ); + m_gridCustomCommand->SetColSize( 1, 196 ); + m_gridCustomCommand->EnableDragColMove( false ); + m_gridCustomCommand->EnableDragColSize( true ); + m_gridCustomCommand->SetColLabelSize( 20 ); + m_gridCustomCommand->SetColLabelValue( 0, _("Description") ); + m_gridCustomCommand->SetColLabelValue( 1, _("Command line") ); + m_gridCustomCommand->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Rows + m_gridCustomCommand->EnableDragRowSize( false ); + m_gridCustomCommand->SetRowLabelSize( 1 ); + m_gridCustomCommand->SetRowLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE ); + + // Label Appearance + + // Cell Defaults + m_gridCustomCommand->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); + bSizer181->Add( m_gridCustomCommand, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer193; + bSizer193 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonAddRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer193->Add( m_bpButtonAddRow, 0, 0, 5 ); + + m_bpButtonRemoveRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer193->Add( m_bpButtonRemoveRow, 0, 0, 5 ); + + + bSizer193->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_hyperlink17 = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizer193->Add( m_hyperlink17, 0, wxLEFT, 5 ); + + + bSizer181->Add( bSizer193, 0, wxTOP|wxEXPAND, 5 ); + + + bSizer166->Add( bSizer181, 1, wxEXPAND|wxALL, 10 ); + + m_staticline192 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline192, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer1881; + bSizer1881 = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonResetDialogs = new zen::BitmapTextButton( m_panel39, wxID_ANY, _("Restore hidden windows"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer1881->Add( m_buttonResetDialogs, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); + + m_staticline40 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer1881->Add( m_staticline40, 0, wxEXPAND, 5 ); + + + bSizer166->Add( bSizer1881, 0, 0, 5 ); + + + m_panel39->SetSizer( bSizer166 ); + m_panel39->Layout(); + bSizer166->Fit( m_panel39 ); + bSizer95->Add( m_panel39, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer95->Add( m_staticline36, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonDefault = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonDefault, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStdButtons->Add( 0, 0, 1, 0, 5 ); + + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer95->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer95 ); + this->Layout(); + bSizer95->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) ); + m_spinCtrlAutoRetryCount->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnToggleAutoRetryCount ), NULL, this ); + m_bpButtonAddRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this ); + m_bpButtonRemoveRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this ); + m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( GlobalSettingsDlgGenerated::OnHelpShowExamples ), NULL, this ); + m_buttonResetDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this ); + m_buttonDefault->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this ); } GlobalSettingsDlgGenerated::~GlobalSettingsDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) ); - m_buttonResetDialogs->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this ); - m_bpButtonAddRow->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this ); - m_bpButtonRemoveRow->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this ); - m_buttonDefault->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this ); - m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this ); - } -PopupDialogGenerated::PopupDialogGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +TooltipDialogGenerated::TooltipDialogGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - - wxBoxSizer* bSizer158; - bSizer158 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer158->Add( m_bitmapLeft, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextMain = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextMain->Wrap( 600 ); - bSizer158->Add( m_staticTextMain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - this->SetSizer( bSizer158 ); - this->Layout(); - bSizer158->Fit( this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* bSizer158; + bSizer158 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer158->Add( m_bitmapLeft, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextMain = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMain->Wrap( 600 ); + bSizer158->Add( m_staticTextMain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + this->SetSizer( bSizer158 ); + this->Layout(); + bSizer158->Fit( this ); } -PopupDialogGenerated::~PopupDialogGenerated() +TooltipDialogGenerated::~TooltipDialogGenerated() { } SelectTimespanDlgGenerated::SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer96; - bSizer96 = new wxBoxSizer( wxVERTICAL ); - - m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer98; - bSizer98 = new wxBoxSizer( wxHORIZONTAL ); - - m_calendarFrom = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER ); - bSizer98->Add( m_calendarFrom, 0, wxALL, 5 ); - - m_calendarTo = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER ); - bSizer98->Add( m_calendarTo, 0, wxALL, 5 ); - - - m_panel35->SetSizer( bSizer98 ); - m_panel35->Layout(); - bSizer98->Fit( m_panel35 ); - bSizer96->Add( m_panel35, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer96->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - this->SetSizer( bSizer96 ); - this->Layout(); - bSizer96->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) ); - m_calendarFrom->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this ); - m_calendarTo->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer96; + bSizer96 = new wxBoxSizer( wxVERTICAL ); + + m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer98; + bSizer98 = new wxBoxSizer( wxHORIZONTAL ); + + m_calendarFrom = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER ); + bSizer98->Add( m_calendarFrom, 0, wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_calendarTo = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER ); + bSizer98->Add( m_calendarTo, 0, wxALL, 10 ); + + + m_panel35->SetSizer( bSizer98 ); + m_panel35->Layout(); + bSizer98->Fit( m_panel35 ); + bSizer96->Add( m_panel35, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer96->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + this->SetSizer( bSizer96 ); + this->Layout(); + bSizer96->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) ); + m_calendarFrom->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this ); + m_calendarTo->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this ); } SelectTimespanDlgGenerated::~SelectTimespanDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) ); - m_calendarFrom->Disconnect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this ); - m_calendarTo->Disconnect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this ); - m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this ); - } AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer31; - bSizer31 = new wxBoxSizer( wxVERTICAL ); - - m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer162; - bSizer162 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapLogo = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer162->Add( m_bitmapLogo, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticline341 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer162->Add( m_staticline341, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer174; - bSizer174 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxVERTICAL ); - - m_build = new wxStaticText( m_panel41, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_build->Wrap( -1 ); - bSizer181->Add( m_build, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_staticline3411 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer181->Add( m_staticline3411, 0, wxEXPAND, 5 ); - - m_staticText96 = new wxStaticText( m_panel41, wxID_ANY, _("Source code written in C++ using:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText96->Wrap( -1 ); - bSizer181->Add( m_staticText96, 0, wxALL, 5 ); - - wxBoxSizer* bSizer171; - bSizer171 = new wxBoxSizer( wxHORIZONTAL ); - - m_hyperlink11 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MS Visual C++"), wxT("http://msdn.microsoft.com/library/60k1461a.aspx"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink11->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink11->SetToolTip( _("http://msdn.microsoft.com/library/60k1461a.aspx") ); - - bSizer171->Add( m_hyperlink11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink9 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MinGW"), wxT("http://www.mingw.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink9->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink9->SetToolTip( _("http://www.mingw.org") ); - - bSizer171->Add( m_hyperlink9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink10 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Code::Blocks"), wxT("http://www.codeblocks.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink10->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink10->SetToolTip( _("http://www.codeblocks.org") ); - - bSizer171->Add( m_hyperlink10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink7 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxWidgets"), wxT("http://www.wxwidgets.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink7->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink7->SetToolTip( _("http://www.wxwidgets.org") ); - - bSizer171->Add( m_hyperlink7, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink14 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxFormBuilder"), wxT("http://wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink14->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink14->SetToolTip( _("http://wxformbuilder.org") ); - - bSizer171->Add( m_hyperlink14, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer181->Add( bSizer171, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxHORIZONTAL ); - - m_hyperlink15 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zen::Xml"), wxT("http://zenxml.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink15->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink15->SetToolTip( _("http://zenxml.sourceforge.net") ); - - bSizer172->Add( m_hyperlink15, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink13 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Boost"), wxT("http://www.boost.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink13->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink13->SetToolTip( _("http://www.boost.org") ); - - bSizer172->Add( m_hyperlink13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink16 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Artistic Style"), wxT("http://astyle.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink16->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink16->SetToolTip( _("http://astyle.sourceforge.net") ); - - bSizer172->Add( m_hyperlink16, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink12 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Google Test"), wxT("http://code.google.com/p/googletest"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink12->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink12->SetToolTip( _("http://code.google.com/p/googletest") ); - - bSizer172->Add( m_hyperlink12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink18 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Unicode NSIS"), wxT("http://www.scratchpaper.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink18->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink18->SetToolTip( _("http://www.scratchpaper.com") ); - - bSizer172->Add( m_hyperlink18, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer181->Add( bSizer172, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - m_panelDonate = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelDonate->SetBackgroundColour( wxColour( 153, 170, 187 ) ); - - wxBoxSizer* bSizer183; - bSizer183 = new wxBoxSizer( wxVERTICAL ); - - m_panel39 = new wxPanel( m_panelDonate, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel39->SetBackgroundColour( wxColour( 221, 221, 255 ) ); - - wxBoxSizer* bSizer184; - bSizer184 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_animCtrlWink = new wxAnimationCtrl( m_panel39, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 48,48 ), wxAC_DEFAULT_STYLE ); - bSizer184->Add( m_animCtrlWink, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer178; - bSizer178 = new wxBoxSizer( wxVERTICAL ); - - m_staticText83 = new wxStaticText( m_panel39, wxID_ANY, _("If you like FreeFileSync"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText83->Wrap( -1 ); - m_staticText83->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 93, 92, false, wxEmptyString ) ); - m_staticText83->SetForegroundColour( wxColour( 0, 0, 0 ) ); - - bSizer178->Add( m_staticText83, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_buttonDonate = new wxButton( m_panel39, wxID_ANY, _("Donate with PayPal"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) ); - m_buttonDonate->SetToolTip( _("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zenju@gmx.de&no_shipping=1&lc=US¤cy_code=EUR") ); - - bSizer178->Add( m_buttonDonate, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer184->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panel39->SetSizer( bSizer184 ); - m_panel39->Layout(); - bSizer184->Fit( m_panel39 ); - bSizer183->Add( m_panel39, 0, wxEXPAND|wxALL, 5 ); - - - m_panelDonate->SetSizer( bSizer183 ); - m_panelDonate->Layout(); - bSizer183->Fit( m_panelDonate ); - bSizer181->Add( m_panelDonate, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - m_staticText94 = new wxStaticText( m_panel41, wxID_ANY, _("Feedback and suggestions are welcome"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText94->Wrap( -1 ); - bSizer181->Add( m_staticText94, 0, wxALL, 5 ); - - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bitmap9 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmap9->SetToolTip( _("Homepage") ); - - bSizer166->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_hyperlink1 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("freefilesync.sf.net"), wxT("http://freefilesync.sf.net/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) ); - m_hyperlink1->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer166->Add( m_hyperlink1, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bitmap10 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmap10->SetToolTip( _("Email") ); - - bSizer166->Add( m_bitmap10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_hyperlink2 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zenju@gmx.de"), wxT("mailto:zenju@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink2->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) ); - m_hyperlink2->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer166->Add( m_hyperlink2, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); - - - bSizer181->Add( bSizer166, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - m_staticline34 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer181->Add( m_staticline34, 0, wxEXPAND, 5 ); - - m_staticText93 = new wxStaticText( m_panel41, wxID_ANY, _("Published under the GNU General Public License"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText93->Wrap( -1 ); - bSizer181->Add( m_staticText93, 0, wxALL, 5 ); - - wxBoxSizer* bSizer1671; - bSizer1671 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer1671->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmap13 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer1671->Add( m_bitmap13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink5 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("http://www.gnu.org/licenses/gpl.html"), wxT("http://www.gnu.org/licenses/gpl.html"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink5->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer1671->Add( m_hyperlink5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer1671->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer181->Add( bSizer1671, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer174->Add( bSizer181, 0, 0, 5 ); - - m_staticline37 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer174->Add( m_staticline37, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer177; - bSizer177 = new wxBoxSizer( wxVERTICAL ); - - m_staticText54 = new wxStaticText( m_panel41, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText54->Wrap( 200 ); - m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer177->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - - - bSizer177->Add( 0, 5, 0, 0, 5 ); - - m_scrolledWindowTranslators = new wxScrolledWindow( m_panel41, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxVSCROLL ); - m_scrolledWindowTranslators->SetScrollRate( 10, 10 ); - m_scrolledWindowTranslators->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_scrolledWindowTranslators->SetMinSize( wxSize( 220,-1 ) ); - - fgSizerTranslators = new wxFlexGridSizer( 0, 2, 2, 10 ); - fgSizerTranslators->SetFlexibleDirection( wxBOTH ); - fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - - m_scrolledWindowTranslators->SetSizer( fgSizerTranslators ); - m_scrolledWindowTranslators->Layout(); - fgSizerTranslators->Fit( m_scrolledWindowTranslators ); - bSizer177->Add( m_scrolledWindowTranslators, 1, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxEXPAND, 5 ); - - - bSizer174->Add( bSizer177, 0, wxEXPAND, 5 ); - - - bSizer162->Add( bSizer174, 0, 0, 5 ); - - - m_panel41->SetSizer( bSizer162 ); - m_panel41->Layout(); - bSizer162->Fit( m_panel41 ); - bSizer31->Add( m_panel41, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer31->Add( m_staticline36, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonClose->SetDefault(); - bSizerStdButtons->Add( m_buttonClose, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer31->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - this->SetSizer( bSizer31 ); - this->Layout(); - bSizer31->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) ); - m_buttonDonate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnDonate ), NULL, this ); - m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer31; + bSizer31 = new wxBoxSizer( wxVERTICAL ); + + m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer162; + bSizer162 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapLogo = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer162->Add( m_bitmapLogo, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticline341 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer162->Add( m_staticline341, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer174; + bSizer174 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer187; + bSizer187 = new wxBoxSizer( wxVERTICAL ); + + m_staticText96 = new wxStaticText( m_panel41, wxID_ANY, _("Source code written in C++ using:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText96->Wrap( -1 ); + bSizer187->Add( m_staticText96, 0, wxALL, 5 ); + + wxBoxSizer* bSizer171; + bSizer171 = new wxBoxSizer( wxHORIZONTAL ); + + m_hyperlink11 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MS Visual C++"), wxT("http://msdn.microsoft.com/library/60k1461a.aspx"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink11->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink11->SetToolTip( _("http://msdn.microsoft.com/library/60k1461a.aspx") ); + + bSizer171->Add( m_hyperlink11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink9 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MinGW"), wxT("http://www.mingw.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink9->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink9->SetToolTip( _("http://www.mingw.org") ); + + bSizer171->Add( m_hyperlink9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink10 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Code::Blocks"), wxT("http://www.codeblocks.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink10->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink10->SetToolTip( _("http://www.codeblocks.org") ); + + bSizer171->Add( m_hyperlink10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink7 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxWidgets"), wxT("http://www.wxwidgets.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink7->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink7->SetToolTip( _("http://www.wxwidgets.org") ); + + bSizer171->Add( m_hyperlink7, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink14 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxFormBuilder"), wxT("http://wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink14->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink14->SetToolTip( _("http://wxformbuilder.org") ); + + bSizer171->Add( m_hyperlink14, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer187->Add( bSizer171, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxHORIZONTAL ); + + m_hyperlink15 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zen::Xml"), wxT("http://zenxml.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink15->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink15->SetToolTip( _("http://zenxml.sourceforge.net") ); + + bSizer172->Add( m_hyperlink15, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink13 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Boost"), wxT("http://www.boost.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink13->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink13->SetToolTip( _("http://www.boost.org") ); + + bSizer172->Add( m_hyperlink13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink16 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Artistic Style"), wxT("http://astyle.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink16->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink16->SetToolTip( _("http://astyle.sourceforge.net") ); + + bSizer172->Add( m_hyperlink16, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink12 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Google Test"), wxT("http://code.google.com/p/googletest"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink12->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink12->SetToolTip( _("http://code.google.com/p/googletest") ); + + bSizer172->Add( m_hyperlink12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink18 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Unicode NSIS"), wxT("http://www.scratchpaper.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink18->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink18->SetToolTip( _("http://www.scratchpaper.com") ); + + bSizer172->Add( m_hyperlink18, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer187->Add( bSizer172, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer181->Add( bSizer187, 0, wxALL|wxEXPAND, 5 ); + + m_panelDonate = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelDonate->SetBackgroundColour( wxColour( 153, 170, 187 ) ); + + wxBoxSizer* bSizer183; + bSizer183 = new wxBoxSizer( wxVERTICAL ); + + m_panel39 = new wxPanel( m_panelDonate, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel39->SetBackgroundColour( wxColour( 221, 221, 255 ) ); + + wxBoxSizer* bSizer184; + bSizer184 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_animCtrlWink = new wxAnimationCtrl( m_panel39, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 48,48 ), wxAC_DEFAULT_STYLE ); + bSizer184->Add( m_animCtrlWink, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer178; + bSizer178 = new wxBoxSizer( wxVERTICAL ); + + m_staticText83 = new wxStaticText( m_panel39, wxID_ANY, _("If you like FreeFileSync"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText83->Wrap( -1 ); + m_staticText83->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_staticText83->SetForegroundColour( wxColour( 0, 0, 0 ) ); + + bSizer178->Add( m_staticText83, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_buttonDonate = new wxButton( m_panel39, wxID_ANY, _("Donate with PayPal"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) ); + m_buttonDonate->SetToolTip( _("http://freefilesync.sourceforge.net/donate.php") ); + + bSizer178->Add( m_buttonDonate, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer184->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panel39->SetSizer( bSizer184 ); + m_panel39->Layout(); + bSizer184->Fit( m_panel39 ); + bSizer183->Add( m_panel39, 0, wxEXPAND|wxALL, 5 ); + + + m_panelDonate->SetSizer( bSizer183 ); + m_panelDonate->Layout(); + bSizer183->Fit( m_panelDonate ); + bSizer181->Add( m_panelDonate, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer186; + bSizer186 = new wxBoxSizer( wxVERTICAL ); + + m_staticText94 = new wxStaticText( m_panel41, wxID_ANY, _("Feedback and suggestions are welcome"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText94->Wrap( -1 ); + bSizer186->Add( m_staticText94, 0, wxALL, 5 ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bitmap9 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_bitmap9->SetToolTip( _("Homepage") ); + + bSizer166->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_hyperlink1 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("freefilesync.sf.net"), wxT("http://freefilesync.sf.net/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) ); + m_hyperlink1->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer166->Add( m_hyperlink1, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bitmap10 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_bitmap10->SetToolTip( _("Email") ); + + bSizer166->Add( m_bitmap10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_hyperlink2 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zenju@gmx.de"), wxT("mailto:zenju@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink2->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) ); + m_hyperlink2->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer166->Add( m_hyperlink2, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); + + + bSizer186->Add( bSizer166, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer181->Add( bSizer186, 0, wxALL|wxEXPAND, 5 ); + + m_staticline34 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer181->Add( m_staticline34, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxVERTICAL ); + + m_staticText93 = new wxStaticText( m_panel41, wxID_ANY, _("Published under the GNU General Public License"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText93->Wrap( -1 ); + bSizer185->Add( m_staticText93, 0, wxALL, 5 ); + + wxBoxSizer* bSizer1671; + bSizer1671 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmap13 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer1671->Add( m_bitmap13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink5 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("http://www.gnu.org/licenses/gpl.html"), wxT("http://www.gnu.org/licenses/gpl.html"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink5->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer1671->Add( m_hyperlink5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer185->Add( bSizer1671, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer181->Add( bSizer185, 0, wxALL|wxEXPAND, 5 ); + + + bSizer174->Add( bSizer181, 0, 0, 5 ); + + m_staticline37 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer174->Add( m_staticline37, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer177; + bSizer177 = new wxBoxSizer( wxVERTICAL ); + + m_staticText54 = new wxStaticText( m_panel41, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText54->Wrap( 200 ); + m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer177->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + + bSizer177->Add( 0, 5, 0, 0, 5 ); + + m_scrolledWindowTranslators = new wxScrolledWindow( m_panel41, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxVSCROLL ); + m_scrolledWindowTranslators->SetScrollRate( 10, 10 ); + m_scrolledWindowTranslators->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_scrolledWindowTranslators->SetMinSize( wxSize( 220,-1 ) ); + + fgSizerTranslators = new wxFlexGridSizer( 0, 2, 2, 10 ); + fgSizerTranslators->SetFlexibleDirection( wxBOTH ); + fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + + m_scrolledWindowTranslators->SetSizer( fgSizerTranslators ); + m_scrolledWindowTranslators->Layout(); + fgSizerTranslators->Fit( m_scrolledWindowTranslators ); + bSizer177->Add( m_scrolledWindowTranslators, 1, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxEXPAND, 5 ); + + + bSizer174->Add( bSizer177, 0, wxEXPAND|wxTOP|wxLEFT, 5 ); + + + bSizer162->Add( bSizer174, 0, 0, 5 ); + + + m_panel41->SetSizer( bSizer162 ); + m_panel41->Layout(); + bSizer162->Fit( m_panel41 ); + bSizer31->Add( m_panel41, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer31->Add( m_staticline36, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonClose->SetDefault(); + bSizerStdButtons->Add( m_buttonClose, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer31->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + this->SetSizer( bSizer31 ); + this->Layout(); + bSizer31->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) ); + m_buttonDonate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnDonate ), NULL, this ); + m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this ); } AboutDlgGenerated::~AboutDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) ); - m_buttonDonate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnDonate ), NULL, this ); - m_buttonClose->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this ); - } diff --git a/ui/gui_generated.h b/ui/gui_generated.h index a590e2c2..04aed9a9 100644 --- a/ui/gui_generated.h +++ b/ui/gui_generated.h @@ -14,10 +14,10 @@ class ExecFinishedBox; class FolderHistoryBox; class ToggleButton; -namespace zen{ class BitmapTextButton; } -namespace zen{ class Graph2D; } -namespace zen{ class Grid; } -namespace zen{ class TripleSplitter; } +namespace zen { class BitmapTextButton; } +namespace zen { class Graph2D; } +namespace zen { class Grid; } +namespace zen { class TripleSplitter; } #include <wx/string.h> #include <wx/bitmap.h> @@ -41,18 +41,18 @@ namespace zen{ class TripleSplitter; } #include <wx/checkbox.h> #include <wx/listbox.h> #include <wx/frame.h> +#include <wx/tglbtn.h> +#include <wx/choice.h> +#include <wx/hyperlink.h> +#include <wx/dialog.h> #include <wx/gauge.h> #include <wx/animate.h> #include <wx/notebook.h> -#include <wx/dialog.h> -#include <wx/tglbtn.h> -#include <wx/choice.h> #include <wx/spinctrl.h> #include <wx/grid.h> #include <wx/calctrl.h> -#include <wx/hyperlink.h> -#include "../zen/i18n.h" +#include "zen/i18n.h" /////////////////////////////////////////////////////////////////////////// @@ -60,842 +60,821 @@ namespace zen{ class TripleSplitter; } /////////////////////////////////////////////////////////////////////////////// /// Class MainDialogGenerated /////////////////////////////////////////////////////////////////////////////// -class MainDialogGenerated : public wxFrame +class MainDialogGenerated : public wxFrame { - private: - - protected: - wxMenuBar* m_menubar1; - wxMenu* m_menuFile; - wxMenuItem* m_menuItemNew; - wxMenuItem* m_menuItemLoad; - wxMenuItem* m_menuItemSave; - wxMenuItem* m_menuItemSaveAs; - wxMenuItem* m_menuItem7; - wxMenuItem* m_menuItem10; - wxMenuItem* m_menuItem11; - wxMenu* m_menuTools; - wxMenu* m_menuLanguages; - wxMenuItem* m_menuItemGlobSett; - wxMenu* m_menuHelp; - wxMenuItem* m_menuItemManual; - wxMenu* m_menuCheckVersion; - wxMenuItem* m_menuItemCheckVersionNow; - wxMenuItem* m_menuItemCheckVersionAuto; - wxMenuItem* m_menuItemAbout; - wxBoxSizer* bSizerPanelHolder; - wxPanel* m_panelTopButtons; - wxBoxSizer* bSizerTopButtons; - zen::BitmapTextButton* m_buttonCompare; - zen::BitmapTextButton* m_buttonCancel; - wxBitmapButton* m_bpButtonCmpConfig; - wxBitmapButton* m_bpButtonSyncConfig; - zen::BitmapTextButton* m_buttonSync; - wxPanel* m_panelDirectoryPairs; - wxStaticText* m_staticTextResolvedPathL; - wxBitmapButton* m_bpButtonAddPair; - wxButton* m_buttonSelectDirLeft; - wxPanel* m_panelTopMiddle; - wxBitmapButton* m_bpButtonSwapSides; - wxStaticText* m_staticTextResolvedPathR; - wxButton* m_buttonSelectDirRight; - wxScrolledWindow* m_scrolledWindowFolderPairs; - wxBoxSizer* bSizerAddFolderPairs; - zen::Grid* m_gridNavi; - wxPanel* m_panelCenter; - zen::TripleSplitter* m_splitterMain; - zen::Grid* m_gridMainL; - zen::Grid* m_gridMainC; - zen::Grid* m_gridMainR; - wxPanel* m_panelStatusBar; - wxBoxSizer* bSizerFileStatus; - wxBoxSizer* bSizerStatusLeft; - wxBoxSizer* bSizerStatusLeftDirectories; - wxStaticBitmap* m_bitmapSmallDirectoryLeft; - wxStaticText* m_staticTextStatusLeftDirs; - wxBoxSizer* bSizerStatusLeftFiles; - wxStaticBitmap* m_bitmapSmallFileLeft; - wxStaticText* m_staticTextStatusLeftFiles; - wxStaticText* m_staticTextStatusLeftBytes; - wxStaticLine* m_staticline9; - wxStaticText* m_staticTextStatusMiddle; - wxBoxSizer* bSizerStatusRight; - wxStaticLine* m_staticline10; - wxBoxSizer* bSizerStatusRightDirectories; - wxStaticBitmap* m_bitmapSmallDirectoryRight; - wxStaticText* m_staticTextStatusRightDirs; - wxBoxSizer* bSizerStatusRightFiles; - wxStaticBitmap* m_bitmapSmallFileRight; - wxStaticText* m_staticTextStatusRightFiles; - wxStaticText* m_staticTextStatusRightBytes; - wxStaticText* m_staticTextFullStatus; - wxPanel* m_panelSearch; - wxBitmapButton* m_bpButtonHideSearch; - wxStaticText* m_staticText101; - wxTextCtrl* m_textCtrlSearchTxt; - wxCheckBox* m_checkBoxMatchCase; - wxPanel* m_panelConfig; - wxBoxSizer* bSizerConfig; - wxBitmapButton* m_bpButtonOpen; - wxBitmapButton* m_bpButtonSave; - wxBitmapButton* m_bpButtonBatchJob; - wxListBox* m_listBoxHistory; - wxPanel* m_panelFilter; - wxBitmapButton* m_bpButtonFilter; - wxCheckBox* m_checkBoxHideExcluded; - wxPanel* m_panelStatistics; - wxBoxSizer* bSizer1801; - wxStaticBitmap* m_bitmapCreateLeft; - wxStaticText* m_staticTextCreateLeft; - wxStaticBitmap* m_bitmapUpdateLeft; - wxStaticText* m_staticTextUpdateLeft; - wxStaticBitmap* m_bitmapDeleteLeft; - wxStaticText* m_staticTextDeleteLeft; - wxStaticBitmap* m_bitmapData; - wxStaticText* m_staticTextData; - wxStaticBitmap* m_bitmapDeleteRight; - wxStaticText* m_staticTextDeleteRight; - wxStaticBitmap* m_bitmapUpdateRight; - wxStaticText* m_staticTextUpdateRight; - wxStaticBitmap* m_bitmapCreateRight; - wxStaticText* m_staticTextCreateRight; - wxPanel* m_panelViewFilter; - wxBoxSizer* bSizerViewFilter; - ToggleButton* m_bpButtonViewTypeSyncAction; - ToggleButton* m_bpButtonShowCreateLeft; - ToggleButton* m_bpButtonShowUpdateLeft; - ToggleButton* m_bpButtonShowDeleteLeft; - ToggleButton* m_bpButtonShowLeftOnly; - ToggleButton* m_bpButtonShowLeftNewer; - ToggleButton* m_bpButtonShowEqual; - ToggleButton* m_bpButtonShowDifferent; - ToggleButton* m_bpButtonShowDoNothing; - ToggleButton* m_bpButtonShowRightNewer; - ToggleButton* m_bpButtonShowRightOnly; - ToggleButton* m_bpButtonShowDeleteRight; - ToggleButton* m_bpButtonShowUpdateRight; - ToggleButton* m_bpButtonShowCreateRight; - ToggleButton* m_bpButtonShowConflict; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnConfigNew( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConfigLoad( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConfigSave( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConfigSaveAs( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSaveAsBatchJob( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCompare( wxCommandEvent& event ) { event.Skip(); } - virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuQuit( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuGlobalSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuCheckVersionAutomatically( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCompSettingsContext( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncSettingsContext( wxMouseEvent& event ) { event.Skip(); } - virtual void OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSwapSides( wxCommandEvent& event ) { event.Skip(); } - virtual void OnHideSearchPanel( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSearchGridEnter( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCfgHistoryKeyEvent( wxKeyEvent& event ) { event.Skip(); } - virtual void OnLoadFromHistory( wxCommandEvent& event ) { event.Skip(); } - virtual void OnLoadFromHistoryDoubleClick( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCfgHistoryRightClick( wxMouseEvent& event ) { event.Skip(); } - virtual void OnConfigureFilter( wxCommandEvent& event ) { event.Skip(); } - virtual void OnGlobalFilterContext( wxMouseEvent& event ) { event.Skip(); } - virtual void OnShowExcluded( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleViewType( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleViewButton( wxCommandEvent& event ) { event.Skip(); } - virtual void OnViewButtonRightClick( wxMouseEvent& event ) { event.Skip(); } - - - public: - wxPanel* m_panelTopLeft; - wxBitmapButton* m_bpButtonRemovePair; - FolderHistoryBox* m_directoryLeft; - wxBitmapButton* m_bpButtonAltCompCfg; - wxBitmapButton* m_bpButtonLocalFilter; - wxBitmapButton* m_bpButtonAltSyncCfg; - wxPanel* m_panelTopRight; - FolderHistoryBox* m_directoryRight; - wxBoxSizer* bSizerStatistics; - wxBoxSizer* bSizerData; - - MainDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 900,600 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); - - ~MainDialogGenerated(); - +private: + +protected: + wxMenuBar* m_menubar1; + wxMenu* m_menuFile; + wxMenuItem* m_menuItemNew; + wxMenuItem* m_menuItemLoad; + wxMenuItem* m_menuItemSave; + wxMenuItem* m_menuItemSaveAs; + wxMenuItem* m_menuItem7; + wxMenuItem* m_menuItem10; + wxMenuItem* m_menuItem11; + wxMenu* m_menuTools; + wxMenuItem* m_menuItemGlobSett; + wxMenu* m_menuLanguages; + wxMenu* m_menuHelp; + wxMenuItem* m_menuItemManual; + wxMenu* m_menuCheckVersion; + wxMenuItem* m_menuItemCheckVersionNow; + wxMenuItem* m_menuItemCheckVersionAuto; + wxMenuItem* m_menuItemAbout; + wxBoxSizer* bSizerPanelHolder; + wxPanel* m_panelTopButtons; + wxBoxSizer* bSizerTopButtons; + zen::BitmapTextButton* m_buttonCompare; + zen::BitmapTextButton* m_buttonCancel; + wxBitmapButton* m_bpButtonCmpConfig; + wxBitmapButton* m_bpButtonSyncConfig; + zen::BitmapTextButton* m_buttonSync; + wxPanel* m_panelDirectoryPairs; + wxStaticText* m_staticTextResolvedPathL; + wxBitmapButton* m_bpButtonAddPair; + wxButton* m_buttonSelectDirLeft; + wxPanel* m_panelTopMiddle; + wxBitmapButton* m_bpButtonSwapSides; + wxStaticText* m_staticTextResolvedPathR; + wxButton* m_buttonSelectDirRight; + wxScrolledWindow* m_scrolledWindowFolderPairs; + wxBoxSizer* bSizerAddFolderPairs; + zen::Grid* m_gridNavi; + wxPanel* m_panelCenter; + zen::TripleSplitter* m_splitterMain; + zen::Grid* m_gridMainL; + zen::Grid* m_gridMainC; + zen::Grid* m_gridMainR; + wxPanel* m_panelStatusBar; + wxBoxSizer* bSizerFileStatus; + wxBoxSizer* bSizerStatusLeft; + wxBoxSizer* bSizerStatusLeftDirectories; + wxStaticBitmap* m_bitmapSmallDirectoryLeft; + wxStaticText* m_staticTextStatusLeftDirs; + wxBoxSizer* bSizerStatusLeftFiles; + wxStaticBitmap* m_bitmapSmallFileLeft; + wxStaticText* m_staticTextStatusLeftFiles; + wxStaticText* m_staticTextStatusLeftBytes; + wxStaticLine* m_staticline9; + wxStaticText* m_staticTextStatusMiddle; + wxBoxSizer* bSizerStatusRight; + wxStaticLine* m_staticline10; + wxBoxSizer* bSizerStatusRightDirectories; + wxStaticBitmap* m_bitmapSmallDirectoryRight; + wxStaticText* m_staticTextStatusRightDirs; + wxBoxSizer* bSizerStatusRightFiles; + wxStaticBitmap* m_bitmapSmallFileRight; + wxStaticText* m_staticTextStatusRightFiles; + wxStaticText* m_staticTextStatusRightBytes; + wxStaticText* m_staticTextFullStatus; + wxPanel* m_panelSearch; + wxBitmapButton* m_bpButtonHideSearch; + wxStaticText* m_staticText101; + wxTextCtrl* m_textCtrlSearchTxt; + wxCheckBox* m_checkBoxMatchCase; + wxPanel* m_panelConfig; + wxBoxSizer* bSizerConfig; + wxBitmapButton* m_bpButtonOpen; + wxBitmapButton* m_bpButtonSave; + wxBitmapButton* m_bpButtonBatchJob; + wxListBox* m_listBoxHistory; + wxPanel* m_panelFilter; + wxBitmapButton* m_bpButtonFilter; + wxCheckBox* m_checkBoxHideExcluded; + wxPanel* m_panelStatistics; + wxBoxSizer* bSizer1801; + wxStaticBitmap* m_bitmapCreateLeft; + wxStaticText* m_staticTextCreateLeft; + wxStaticBitmap* m_bitmapUpdateLeft; + wxStaticText* m_staticTextUpdateLeft; + wxStaticBitmap* m_bitmapDeleteLeft; + wxStaticText* m_staticTextDeleteLeft; + wxStaticBitmap* m_bitmapData; + wxStaticText* m_staticTextData; + wxStaticBitmap* m_bitmapDeleteRight; + wxStaticText* m_staticTextDeleteRight; + wxStaticBitmap* m_bitmapUpdateRight; + wxStaticText* m_staticTextUpdateRight; + wxStaticBitmap* m_bitmapCreateRight; + wxStaticText* m_staticTextCreateRight; + wxPanel* m_panelViewFilter; + wxBoxSizer* bSizerViewFilter; + ToggleButton* m_bpButtonViewTypeSyncAction; + ToggleButton* m_bpButtonShowCreateLeft; + ToggleButton* m_bpButtonShowUpdateLeft; + ToggleButton* m_bpButtonShowDeleteLeft; + ToggleButton* m_bpButtonShowLeftOnly; + ToggleButton* m_bpButtonShowLeftNewer; + ToggleButton* m_bpButtonShowEqual; + ToggleButton* m_bpButtonShowDifferent; + ToggleButton* m_bpButtonShowDoNothing; + ToggleButton* m_bpButtonShowRightNewer; + ToggleButton* m_bpButtonShowRightOnly; + ToggleButton* m_bpButtonShowDeleteRight; + ToggleButton* m_bpButtonShowUpdateRight; + ToggleButton* m_bpButtonShowCreateRight; + ToggleButton* m_bpButtonShowConflict; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnConfigNew( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConfigLoad( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConfigSave( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConfigSaveAs( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSaveAsBatchJob( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCompare( wxCommandEvent& event ) { event.Skip(); } + virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuQuit( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuGlobalSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuFindItem( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } + virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuCheckVersionAutomatically( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCompSettingsContext( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncSettingsContext( wxMouseEvent& event ) { event.Skip(); } + virtual void OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSwapSides( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHideSearchPanel( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSearchGridEnter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCfgHistoryKeyEvent( wxKeyEvent& event ) { event.Skip(); } + virtual void OnLoadFromHistory( wxCommandEvent& event ) { event.Skip(); } + virtual void OnLoadFromHistoryDoubleClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCfgHistoryRightClick( wxMouseEvent& event ) { event.Skip(); } + virtual void OnConfigureFilter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnGlobalFilterContext( wxMouseEvent& event ) { event.Skip(); } + virtual void OnShowExcluded( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleViewType( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleViewButton( wxCommandEvent& event ) { event.Skip(); } + virtual void OnViewButtonRightClick( wxMouseEvent& event ) { event.Skip(); } + + +public: + wxPanel* m_panelTopLeft; + wxBitmapButton* m_bpButtonRemovePair; + FolderHistoryBox* m_directoryLeft; + wxBitmapButton* m_bpButtonAltCompCfg; + wxBitmapButton* m_bpButtonLocalFilter; + wxBitmapButton* m_bpButtonAltSyncCfg; + wxPanel* m_panelTopRight; + FolderHistoryBox* m_directoryRight; + wxBoxSizer* bSizerStatistics; + wxBoxSizer* bSizerData; + + MainDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 900,600 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); + + ~MainDialogGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// -/// Class FolderPairPanelGenerated +/// Class CmpCfgDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class FolderPairPanelGenerated : public wxPanel +class CmpCfgDlgGenerated : public wxDialog { - private: - - protected: - wxButton* m_buttonSelectDirLeft; - wxButton* m_buttonSelectDirRight; - - public: - wxPanel* m_panelLeft; - wxBitmapButton* m_bpButtonRemovePair; - FolderHistoryBox* m_directoryLeft; - wxPanel* m_panel20; - wxBitmapButton* m_bpButtonAltCompCfg; - wxBitmapButton* m_bpButtonLocalFilter; - wxBitmapButton* m_bpButtonAltSyncCfg; - wxPanel* m_panelRight; - FolderHistoryBox* m_directoryRight; - - FolderPairPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0 ); - ~FolderPairPanelGenerated(); - +private: + +protected: + wxPanel* m_panel36; + wxStaticText* m_staticText91; + wxStaticBitmap* m_bitmapByTime; + wxToggleButton* m_toggleBtnTimeSize; + wxStaticBitmap* m_bitmapByContent; + wxToggleButton* m_toggleBtnContent; + wxStaticLine* m_staticline33; + wxStaticText* m_staticText92; + wxChoice* m_choiceHandleSymlinks; + wxHyperlinkCtrl* m_hyperlink24; + wxStaticLine* m_staticline14; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnTimeSize( wxCommandEvent& event ) { event.Skip(); } + virtual void OnContentDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnContent( wxCommandEvent& event ) { event.Skip(); } + virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHelpComparisonSettings( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); + ~CmpCfgDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// -/// Class CompareProgressDlgGenerated +/// Class SyncCfgDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class CompareProgressDlgGenerated : public wxPanel +class SyncCfgDlgGenerated : public wxDialog { - private: - - protected: - wxTextCtrl* m_textCtrlStatus; - wxGauge* m_gauge2; - wxBoxSizer* bSizer42; - wxBoxSizer* bSizerFilesFound; - wxStaticText* m_staticText321; - wxStaticText* m_staticTextScanned; - wxBoxSizer* bSizerFilesRemaining; - wxStaticText* m_staticText46; - wxStaticText* m_staticTextFilesRemaining; - wxStaticText* m_staticTextDataRemaining; - wxBoxSizer* sSizerSpeed; - wxStaticText* m_staticText104; - wxStaticText* m_staticTextSpeed; - wxBoxSizer* sSizerTimeRemaining; - wxStaticText* m_staticTextTimeRemFixed; - wxStaticText* m_staticTextRemTime; - wxBoxSizer* sSizerTimeElapsed; - wxStaticText* m_staticTextTimeElapsed; - - public: - - CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxRAISED_BORDER ); - ~CompareProgressDlgGenerated(); - +private: + +protected: + wxPanel* m_panel37; + wxStaticText* m_staticText86; + wxToggleButton* m_toggleBtnTwoWay; + wxStaticText* m_staticTextAutomatic; + wxToggleButton* m_toggleBtnMirror; + wxStaticText* m_staticTextMirror; + wxToggleButton* m_toggleBtnUpdate; + wxStaticText* m_staticTextUpdate; + wxToggleButton* m_toggleBtnCustom; + wxStaticText* m_staticTextCustom; + wxCheckBox* m_checkBoxDetectMove; + wxStaticLine* m_staticline32; + wxStaticText* m_staticText87; + wxToggleButton* m_toggleBtnPermanent; + wxToggleButton* m_toggleBtnRecycler; + wxToggleButton* m_toggleBtnVersioning; + wxPanel* m_panelVersioning; + FolderHistoryBox* m_versioningFolder; + wxButton* m_buttonSelectDirVersioning; + wxBoxSizer* bSizer192; + wxStaticText* m_staticText93; + wxChoice* m_choiceVersioningStyle; + wxStaticText* m_staticTextNamingCvtPart1; + wxStaticText* m_staticTextNamingCvtPart2Bold; + wxStaticText* m_staticTextNamingCvtPart3; + wxHyperlinkCtrl* m_hyperlink17; + wxBoxSizer* bSizerExtraConfig; + wxStaticLine* m_staticline321; + wxBoxSizer* bSizer179; + wxStaticText* m_staticText88; + wxToggleButton* m_toggleBtnErrorIgnore; + wxToggleButton* m_toggleBtnErrorPopup; + wxStaticLine* m_staticline36; + wxBoxSizer* bSizerOnCompletion; + wxStaticText* m_staticText89; + ExecFinishedBox* m_comboBoxExecFinished; + wxStaticLine* m_staticline31; + wxBoxSizer* bSizerConfig; + wxStaticText* m_staticTextHeaderCategory1; + wxStaticText* m_staticTextHeaderAction1; + wxStaticBitmap* m_bitmapDatabase; + wxBoxSizer* sbSizerSyncDirections; + wxBoxSizer* bSizerLeftOnly; + wxStaticBitmap* m_bitmapLeftOnly; + wxBitmapButton* m_bpButtonLeftOnly; + wxBoxSizer* bSizerRightOnly; + wxStaticBitmap* m_bitmapRightOnly; + wxBitmapButton* m_bpButtonRightOnly; + wxBoxSizer* bSizerLeftNewer; + wxStaticBitmap* m_bitmapLeftNewer; + wxBitmapButton* m_bpButtonLeftNewer; + wxBoxSizer* bSizerRightNewer; + wxStaticBitmap* m_bitmapRightNewer; + wxBitmapButton* m_bpButtonRightNewer; + wxBoxSizer* bSizerDifferent; + wxStaticBitmap* m_bitmapDifferent; + wxBitmapButton* m_bpButtonDifferent; + wxBoxSizer* bSizerConflict; + wxStaticBitmap* m_bitmapConflict; + wxBitmapButton* m_bpButtonConflict; + wxStaticLine* m_staticline15; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOK; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnSyncTwoWayDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncTwoWay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncMirrorDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncMirror( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncUpdateDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncUpdate( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncCustomDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncCustom( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleDetectMovedFiles( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDeletionPermanent( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDeletionRecycler( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDeletionVersioning( wxCommandEvent& event ) { event.Skip(); } + virtual void OnParameterChange( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHelpVersioning( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } + virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } + virtual void OnExLeftSideOnly( wxCommandEvent& event ) { event.Skip(); } + virtual void OnExRightSideOnly( wxCommandEvent& event ) { event.Skip(); } + virtual void OnLeftNewer( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRightNewer( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDifferent( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConflict( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~SyncCfgDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// -/// Class SyncProgressPanelGenerated +/// Class SyncConfirmationDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class SyncProgressPanelGenerated : public wxPanel +class SyncConfirmationDlgGenerated : public wxDialog { - private: - - protected: - wxBoxSizer* bSizer42; - wxBoxSizer* bSizer171; - wxStaticText* m_staticText87; - - public: - wxBoxSizer* bSizerRoot; - wxStaticBitmap* m_bitmapStatus; - wxStaticText* m_staticTextPhase; - wxAnimationCtrl* m_animCtrlSyncing; - wxBitmapButton* m_bpButtonMinimizeToTray; - wxBoxSizer* bSizerStatusText; - wxStaticText* m_staticTextStatus; - wxPanel* m_panelProgress; - wxPanel* m_panelItemsProcessed; - wxStaticText* m_staticTextProcessedObj; - wxStaticText* m_staticTextDataProcessed; - wxPanel* m_panelItemsRemaining; - wxStaticText* m_staticTextRemainingObj; - wxStaticText* m_staticTextDataRemaining; - wxPanel* m_panelTimeRemaining; - wxStaticText* m_staticTextRemTime; - wxStaticText* m_staticTextTimeElapsed; - zen::Graph2D* m_panelGraphBytes; - zen::Graph2D* m_panelGraphItems; - wxNotebook* m_notebookResult; - wxStaticLine* m_staticlineFooter; - wxBoxSizer* bSizerStdButtons; - wxBoxSizer* bSizerExecFinished; - ExecFinishedBox* m_comboBoxExecFinished; - wxButton* m_buttonClose; - wxButton* m_buttonPause; - wxButton* m_buttonCancel; - - SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL ); - ~SyncProgressPanelGenerated(); - +private: + +protected: + wxStaticBitmap* m_bitmapSync; + wxStaticText* m_staticTextHeader; + wxStaticLine* m_staticline371; + wxPanel* m_panelStatistics; + wxStaticLine* m_staticline38; + wxStaticText* m_staticText84; + wxStaticText* m_staticTextVariant; + wxStaticLine* m_staticline14; + wxStaticText* m_staticText83; + wxStaticBitmap* m_bitmapCreateLeft; + wxStaticBitmap* m_bitmapUpdateLeft; + wxStaticBitmap* m_bitmapDeleteLeft; + wxStaticBitmap* m_bitmapData; + wxStaticBitmap* m_bitmapDeleteRight; + wxStaticBitmap* m_bitmapUpdateRight; + wxStaticBitmap* m_bitmapCreateRight; + wxStaticText* m_staticTextCreateLeft; + wxStaticText* m_staticTextUpdateLeft; + wxStaticText* m_staticTextDeleteLeft; + wxStaticText* m_staticTextData; + wxStaticText* m_staticTextDeleteRight; + wxStaticText* m_staticTextUpdateRight; + wxStaticText* m_staticTextCreateRight; + wxStaticLine* m_staticline12; + wxCheckBox* m_checkBoxDontShowAgain; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonStartSync; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + SyncConfirmationDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("FreeFileSync"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~SyncConfirmationDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// -/// Class LogPanelGenerated +/// Class FolderPairPanelGenerated /////////////////////////////////////////////////////////////////////////////// -class LogPanelGenerated : public wxPanel +class FolderPairPanelGenerated : public wxPanel { - private: - - protected: - ToggleButton* m_bpButtonErrors; - ToggleButton* m_bpButtonWarnings; - ToggleButton* m_bpButtonInfo; - wxStaticLine* m_staticline13; - zen::Grid* m_gridMessages; - - // Virtual event handlers, overide them in your derived class - virtual void OnErrors( wxCommandEvent& event ) { event.Skip(); } - virtual void OnWarnings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnInfo( wxCommandEvent& event ) { event.Skip(); } - - - public: - - LogPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL ); - ~LogPanelGenerated(); - +private: + +protected: + wxButton* m_buttonSelectDirLeft; + wxButton* m_buttonSelectDirRight; + +public: + wxPanel* m_panelLeft; + wxBitmapButton* m_bpButtonRemovePair; + FolderHistoryBox* m_directoryLeft; + wxPanel* m_panel20; + wxBitmapButton* m_bpButtonAltCompCfg; + wxBitmapButton* m_bpButtonLocalFilter; + wxBitmapButton* m_bpButtonAltSyncCfg; + wxPanel* m_panelRight; + FolderHistoryBox* m_directoryRight; + + FolderPairPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0 ); + ~FolderPairPanelGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// -/// Class SyncConfirmationDlgGenerated +/// Class CompareProgressDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class SyncConfirmationDlgGenerated : public wxDialog +class CompareProgressDlgGenerated : public wxPanel { - private: - - protected: - wxPanel* m_panelStatistics; - wxStaticBitmap* m_bitmapSync; - wxStaticLine* m_staticline39; - wxStaticText* m_staticText84; - wxStaticText* m_staticTextVariant; - wxStaticLine* m_staticline14; - wxStaticText* m_staticText83; - wxStaticBitmap* m_bitmapCreateLeft; - wxStaticBitmap* m_bitmapUpdateLeft; - wxStaticBitmap* m_bitmapDeleteLeft; - wxStaticBitmap* m_bitmapData; - wxStaticBitmap* m_bitmapDeleteRight; - wxStaticBitmap* m_bitmapUpdateRight; - wxStaticBitmap* m_bitmapCreateRight; - wxStaticText* m_staticTextCreateLeft; - wxStaticText* m_staticTextUpdateLeft; - wxStaticText* m_staticTextDeleteLeft; - wxStaticText* m_staticTextData; - wxStaticText* m_staticTextDeleteRight; - wxStaticText* m_staticTextUpdateRight; - wxStaticText* m_staticTextCreateRight; - wxStaticLine* m_staticline12; - wxCheckBox* m_checkBoxDontShowAgain; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonStartSync; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - SyncConfirmationDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Start synchronization"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~SyncConfirmationDlgGenerated(); - +private: + +protected: + wxTextCtrl* m_textCtrlStatus; + wxGauge* m_gauge2; + wxBoxSizer* bSizer42; + wxBoxSizer* bSizerFilesFound; + wxStaticText* m_staticText321; + wxStaticText* m_staticTextScanned; + wxBoxSizer* bSizerFilesRemaining; + wxStaticText* m_staticText46; + wxStaticText* m_staticTextFilesRemaining; + wxStaticText* m_staticTextDataRemaining; + wxBoxSizer* sSizerSpeed; + wxStaticText* m_staticText104; + wxStaticText* m_staticTextSpeed; + wxBoxSizer* sSizerTimeRemaining; + wxStaticText* m_staticTextTimeRemFixed; + wxStaticText* m_staticTextRemTime; + wxBoxSizer* sSizerTimeElapsed; + wxStaticText* m_staticTextTimeElapsed; + +public: + + CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxRAISED_BORDER ); + ~CompareProgressDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// -/// Class CmpCfgDlgGenerated +/// Class SyncProgressPanelGenerated /////////////////////////////////////////////////////////////////////////////// -class CmpCfgDlgGenerated : public wxDialog +class SyncProgressPanelGenerated : public wxPanel { - private: - - protected: - wxPanel* m_panel36; - wxStaticText* m_staticText91; - wxStaticBitmap* m_bitmapByTime; - wxToggleButton* m_toggleBtnTimeSize; - wxStaticBitmap* m_bitmapByContent; - wxToggleButton* m_toggleBtnContent; - wxStaticLine* m_staticline33; - wxStaticText* m_staticText92; - wxChoice* m_choiceHandleSymlinks; - wxBitmapButton* m_bpButtonHelp; - wxStaticLine* m_staticline14; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnTimeSize( wxCommandEvent& event ) { event.Skip(); } - virtual void OnContentDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnContent( wxCommandEvent& event ) { event.Skip(); } - virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); } - virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Comparison settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~CmpCfgDlgGenerated(); - +private: + +protected: + wxBoxSizer* bSizer42; + wxBoxSizer* bSizer171; + wxStaticText* m_staticText87; + +public: + wxBoxSizer* bSizerRoot; + wxStaticBitmap* m_bitmapStatus; + wxStaticText* m_staticTextPhase; + wxAnimationCtrl* m_animCtrlSyncing; + wxBitmapButton* m_bpButtonMinimizeToTray; + wxBoxSizer* bSizerStatusText; + wxStaticText* m_staticTextStatus; + wxPanel* m_panelProgress; + wxPanel* m_panelItemsProcessed; + wxStaticText* m_staticTextProcessedObj; + wxStaticText* m_staticTextDataProcessed; + wxPanel* m_panelItemsRemaining; + wxStaticText* m_staticTextRemainingObj; + wxStaticText* m_staticTextDataRemaining; + wxPanel* m_panelTimeRemaining; + wxStaticText* m_staticTextRemTime; + wxStaticText* m_staticTextTimeElapsed; + zen::Graph2D* m_panelGraphBytes; + zen::Graph2D* m_panelGraphItems; + wxNotebook* m_notebookResult; + wxStaticLine* m_staticlineFooter; + wxBoxSizer* bSizerStdButtons; + wxBoxSizer* bSizerExecFinished; + ExecFinishedBox* m_comboBoxExecFinished; + wxButton* m_buttonClose; + wxButton* m_buttonPause; + wxButton* m_buttonStop; + + SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL ); + ~SyncProgressPanelGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// -/// Class SyncCfgDlgGenerated +/// Class LogPanelGenerated /////////////////////////////////////////////////////////////////////////////// -class SyncCfgDlgGenerated : public wxDialog +class LogPanelGenerated : public wxPanel { - private: - - protected: - wxPanel* m_panel37; - wxStaticText* m_staticText86; - wxToggleButton* m_toggleBtnTwoWay; - wxStaticText* m_staticTextAutomatic; - wxToggleButton* m_toggleBtnMirror; - wxStaticText* m_staticTextMirror; - wxToggleButton* m_toggleBtnUpdate; - wxStaticText* m_staticTextUpdate; - wxToggleButton* m_toggleBtnCustom; - wxStaticText* m_staticTextCustom; - wxCheckBox* m_checkBoxDetectMove; - wxBoxSizer* bSizerExtraConfig; - wxStaticLine* m_staticline321; - wxBoxSizer* bSizer179; - wxStaticText* m_staticText88; - wxToggleButton* m_toggleBtnErrorIgnore; - wxToggleButton* m_toggleBtnErrorPopup; - wxStaticLine* m_staticline36; - wxBoxSizer* bSizerOnCompletion; - wxStaticText* m_staticText89; - ExecFinishedBox* m_comboBoxExecFinished; - wxStaticLine* m_staticline32; - wxStaticText* m_staticText87; - wxBoxSizer* bSizerVersioningNamingConvention; - wxStaticText* m_staticTextNamingCvtPart1; - wxStaticText* m_staticTextNamingCvtPart2Bold; - wxStaticText* m_staticTextNamingCvtPart3; - wxToggleButton* m_toggleBtnPermanent; - wxToggleButton* m_toggleBtnRecycler; - wxToggleButton* m_toggleBtnVersioning; - wxBoxSizer* bSizerVersioningStyle; - wxStaticText* m_staticText93; - wxChoice* m_choiceVersioningStyle; - wxPanel* m_panelVersioning; - FolderHistoryBox* m_versioningFolder; - wxButton* m_buttonSelectDirVersioning; - wxStaticLine* m_staticline31; - wxBoxSizer* bSizerConfig; - wxStaticText* m_staticTextHeaderCategory1; - wxStaticText* m_staticTextHeaderAction1; - wxStaticBitmap* m_bitmapDatabase; - wxBoxSizer* sbSizerSyncDirections; - wxBoxSizer* bSizerLeftOnly; - wxStaticBitmap* m_bitmapLeftOnly; - wxBitmapButton* m_bpButtonLeftOnly; - wxBoxSizer* bSizerRightOnly; - wxStaticBitmap* m_bitmapRightOnly; - wxBitmapButton* m_bpButtonRightOnly; - wxBoxSizer* bSizerLeftNewer; - wxStaticBitmap* m_bitmapLeftNewer; - wxBitmapButton* m_bpButtonLeftNewer; - wxBoxSizer* bSizerRightNewer; - wxStaticBitmap* m_bitmapRightNewer; - wxBitmapButton* m_bpButtonRightNewer; - wxBoxSizer* bSizerDifferent; - wxStaticBitmap* m_bitmapDifferent; - wxBitmapButton* m_bpButtonDifferent; - wxBoxSizer* bSizerConflict; - wxStaticBitmap* m_bitmapConflict; - wxBitmapButton* m_bpButtonConflict; - wxStaticLine* m_staticline15; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOK; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnSyncTwoWayDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncTwoWay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncMirrorDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncMirror( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncUpdateDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncUpdate( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncCustomDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncCustom( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleDetectMovedFiles( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDeletionPermanent( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDeletionRecycler( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDeletionVersioning( wxCommandEvent& event ) { event.Skip(); } - virtual void OnParameterChange( wxCommandEvent& event ) { event.Skip(); } - virtual void OnExLeftSideOnly( wxCommandEvent& event ) { event.Skip(); } - virtual void OnExRightSideOnly( wxCommandEvent& event ) { event.Skip(); } - virtual void OnLeftNewer( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRightNewer( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDifferent( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConflict( wxCommandEvent& event ) { event.Skip(); } - virtual void OnApply( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - wxBoxSizer* bSizerNamingConvention; - - SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Synchronization settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~SyncCfgDlgGenerated(); - +private: + +protected: + ToggleButton* m_bpButtonErrors; + ToggleButton* m_bpButtonWarnings; + ToggleButton* m_bpButtonInfo; + wxStaticLine* m_staticline13; + zen::Grid* m_gridMessages; + + // Virtual event handlers, overide them in your derived class + virtual void OnErrors( wxCommandEvent& event ) { event.Skip(); } + virtual void OnWarnings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnInfo( wxCommandEvent& event ) { event.Skip(); } + + +public: + + LogPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL ); + ~LogPanelGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class BatchDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class BatchDlgGenerated : public wxDialog +class BatchDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapBatchJob; - wxStaticText* m_staticTextHeader; - wxStaticText* m_staticTextDescr; - wxBitmapButton* m_bpButtonHelp; - wxStaticLine* m_staticline18; - wxPanel* m_panel35; - wxStaticText* m_staticText82; - wxToggleButton* m_toggleBtnErrorIgnore; - wxToggleButton* m_toggleBtnErrorPopup; - wxToggleButton* m_toggleBtnErrorAbort; - wxStaticLine* m_staticline26; - wxStaticText* m_staticText81; - ExecFinishedBox* m_comboBoxExecFinished; - wxStaticLine* m_staticline25; - wxCheckBox* m_checkBoxShowProgress; - wxCheckBox* m_checkBoxGenerateLogfile; - wxPanel* m_panelLogfile; - wxButton* m_buttonSelectLogfileDir; - wxCheckBox* m_checkBoxLogfilesLimit; - wxSpinCtrl* m_spinCtrlLogfileLimit; - wxStaticLine* m_staticline13; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonSaveAs; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorAbort( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleGenerateLogfile( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleLogfilesLimit( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSaveBatchJob( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - FolderHistoryBox* m_logfileDir; - - BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Save as batch job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~BatchDlgGenerated(); - -}; +private: + +protected: + wxStaticBitmap* m_bitmapBatchJob; + wxStaticText* m_staticTextDescr; + wxStaticLine* m_staticline18; + wxPanel* m_panel35; + wxStaticText* m_staticText82; + wxToggleButton* m_toggleBtnErrorIgnore; + wxToggleButton* m_toggleBtnErrorPopup; + wxToggleButton* m_toggleBtnErrorStop; + wxStaticLine* m_staticline26; + wxCheckBox* m_checkBoxShowProgress; + wxStaticText* m_staticText81; + ExecFinishedBox* m_comboBoxExecFinished; + wxStaticLine* m_staticline25; + wxCheckBox* m_checkBoxGenerateLogfile; + wxPanel* m_panelLogfile; + wxButton* m_buttonSelectLogfileDir; + wxCheckBox* m_checkBoxLogfilesLimit; + wxSpinCtrl* m_spinCtrlLogfileLimit; + wxHyperlinkCtrl* m_hyperlink17; + wxStaticLine* m_staticline13; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonSaveAs; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } + virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } + virtual void OnErrorStop( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleGenerateLogfile( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleLogfilesLimit( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHelpScheduleBatch( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnSaveBatchJob( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + FolderHistoryBox* m_logfileDir; + + BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Save as Batch Job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~BatchDlgGenerated(); -/////////////////////////////////////////////////////////////////////////////// -/// Class MessageDlgGenerated -/////////////////////////////////////////////////////////////////////////////// -class MessageDlgGenerated : public wxDialog -{ - private: - - protected: - wxPanel* m_panel33; - wxStaticBitmap* m_bitmapMsgType; - wxTextCtrl* m_textCtrlMessage; - wxStaticLine* m_staticline6; - wxCheckBox* m_checkBoxCustom; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonAffirmative; - wxButton* m_buttonNegative; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnCheckBoxClick( wxCommandEvent& event ) { event.Skip(); } - virtual void OnButtonAffirmative( wxCommandEvent& event ) { event.Skip(); } - virtual void OnButtonNegative( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - MessageDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~MessageDlgGenerated(); - }; /////////////////////////////////////////////////////////////////////////////// /// Class DeleteDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class DeleteDlgGenerated : public wxDialog +class DeleteDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel31; - wxStaticBitmap* m_bitmapDeleteType; - wxStaticText* m_staticTextHeader; - wxTextCtrl* m_textCtrlFileList; - wxStaticLine* m_staticline9; - wxBoxSizer* bSizerStdButtons; - wxCheckBox* m_checkBoxUseRecycler; - wxCheckBox* m_checkBoxDeleteBothSides; - wxButton* m_buttonOK; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnUseRecycler( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDelOnBothSides( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOK( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - DeleteDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Delete"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); - ~DeleteDlgGenerated(); - +private: + +protected: + wxStaticBitmap* m_bitmapDeleteType; + wxStaticText* m_staticTextHeader; + wxStaticLine* m_staticline91; + wxPanel* m_panel31; + wxStaticLine* m_staticline42; + wxTextCtrl* m_textCtrlFileList; + wxStaticLine* m_staticline9; + wxBoxSizer* bSizerStdButtons; + wxCheckBox* m_checkBoxUseRecycler; + wxCheckBox* m_checkBoxDeleteBothSides; + wxButton* m_buttonOK; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnUseRecycler( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDelOnBothSides( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOK( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + DeleteDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Delete Items"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); + ~DeleteDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class FilterDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class FilterDlgGenerated : public wxDialog +class FilterDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmap26; - wxStaticText* m_staticTextHeader; - wxStaticText* m_staticText44; - wxBitmapButton* m_bpButtonHelp; - wxStaticLine* m_staticline17; - wxPanel* m_panel38; - wxStaticText* m_staticText78; - wxStaticBitmap* m_bitmapInclude; - wxTextCtrl* m_textCtrlInclude; - wxStaticLine* m_staticline22; - wxStaticText* m_staticText77; - wxStaticBitmap* m_bitmapExclude; - wxTextCtrl* m_textCtrlExclude; - wxStaticLine* m_staticline24; - wxStaticText* m_staticText79; - wxStaticBitmap* m_bitmapFilterDate; - wxSpinCtrl* m_spinCtrlTimespan; - wxChoice* m_choiceUnitTimespan; - wxStaticLine* m_staticline23; - wxStaticText* m_staticText80; - wxStaticBitmap* m_bitmapFilterSize; - wxStaticText* m_staticText101; - wxSpinCtrl* m_spinCtrlMinSize; - wxChoice* m_choiceUnitMinSize; - wxStaticText* m_staticText102; - wxSpinCtrl* m_spinCtrlMaxSize; - wxChoice* m_choiceUnitMaxSize; - wxStaticLine* m_staticline16; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonClear; - wxButton* m_buttonOk; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); } - virtual void OnUpdateNameFilter( wxCommandEvent& event ) { event.Skip(); } - virtual void OnUpdateChoice( wxCommandEvent& event ) { event.Skip(); } - virtual void OnClear( wxCommandEvent& event ) { event.Skip(); } - virtual void OnApply( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - FilterDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Configure filter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); - ~FilterDlgGenerated(); - +private: + +protected: + wxStaticBitmap* m_bitmapFilter; + wxStaticText* m_staticText44; + wxStaticLine* m_staticline17; + wxPanel* m_panel38; + wxStaticBitmap* m_bitmapInclude; + wxStaticText* m_staticText78; + wxTextCtrl* m_textCtrlInclude; + wxStaticLine* m_staticline22; + wxStaticBitmap* m_bitmapExclude; + wxStaticText* m_staticText77; + wxHyperlinkCtrl* m_hyperlink17; + wxTextCtrl* m_textCtrlExclude; + wxStaticLine* m_staticline24; + wxStaticBitmap* m_bitmapFilterDate; + wxStaticText* m_staticText79; + wxSpinCtrl* m_spinCtrlTimespan; + wxChoice* m_choiceUnitTimespan; + wxStaticLine* m_staticline23; + wxStaticBitmap* m_bitmapFilterSize; + wxStaticText* m_staticText80; + wxStaticText* m_staticText101; + wxSpinCtrl* m_spinCtrlMinSize; + wxChoice* m_choiceUnitMinSize; + wxStaticText* m_staticText102; + wxSpinCtrl* m_spinCtrlMaxSize; + wxChoice* m_choiceUnitMaxSize; + wxStaticLine* m_staticline16; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonClear; + wxButton* m_buttonOk; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnUpdateNameFilter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHelpShowExamples( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnUpdateChoice( wxCommandEvent& event ) { event.Skip(); } + virtual void OnClear( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + FilterDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); + ~FilterDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class GlobalSettingsDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class GlobalSettingsDlgGenerated : public wxDialog +class GlobalSettingsDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapSettings; - wxStaticText* m_staticTextHeader; - wxStaticLine* m_staticline19; - wxPanel* m_panel39; - wxCheckBox* m_checkBoxTransCopy; - wxStaticText* m_staticText82; - wxCheckBox* m_checkBoxCopyLocked; - wxStaticText* m_staticTextCopyLocked; - wxCheckBox* m_checkBoxCopyPermissions; - wxStaticText* m_staticText8211; - wxStaticLine* m_staticline191; - zen::BitmapTextButton* m_buttonResetDialogs; - wxStaticLine* m_staticline192; - wxStaticText* m_staticText85; - wxBitmapButton* m_bpButtonAddRow; - wxBitmapButton* m_bpButtonRemoveRow; - wxGrid* m_gridCustomCommand; - wxStaticLine* m_staticline20; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonDefault; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnResetDialogs( wxCommandEvent& event ) { event.Skip(); } - virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRemoveRow( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Global settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~GlobalSettingsDlgGenerated(); - +private: + +protected: + wxStaticBitmap* m_bitmapSettings; + wxStaticText* m_staticText44; + wxStaticLine* m_staticline20; + wxPanel* m_panel39; + wxCheckBox* m_checkBoxFailSafe; + wxStaticText* m_staticText91; + wxBoxSizer* bSizerLockedFiles; + wxCheckBox* m_checkBoxCopyLocked; + wxStaticText* m_staticText92; + wxCheckBox* m_checkBoxCopyPermissions; + wxStaticText* m_staticText93; + wxStaticLine* m_staticline39; + wxStaticText* m_staticText95; + wxStaticText* m_staticText96; + wxSpinCtrl* m_spinCtrlAutoRetryCount; + wxStaticText* m_staticTextAutoRetryDelay; + wxSpinCtrl* m_spinCtrlAutoRetryDelay; + wxStaticLine* m_staticline191; + wxStaticText* m_staticText85; + wxGrid* m_gridCustomCommand; + wxBitmapButton* m_bpButtonAddRow; + wxBitmapButton* m_bpButtonRemoveRow; + wxHyperlinkCtrl* m_hyperlink17; + wxStaticLine* m_staticline192; + zen::BitmapTextButton* m_buttonResetDialogs; + wxStaticLine* m_staticline40; + wxStaticLine* m_staticline36; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonDefault; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnToggleAutoRetryCount( wxCommandEvent& event ) { event.Skip(); } + virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRemoveRow( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHelpShowExamples( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnResetDialogs( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Global Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~GlobalSettingsDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// -/// Class PopupDialogGenerated +/// Class TooltipDialogGenerated /////////////////////////////////////////////////////////////////////////////// -class PopupDialogGenerated : public wxDialog +class TooltipDialogGenerated : public wxDialog { - private: - - protected: - - public: - wxStaticBitmap* m_bitmapLeft; - wxStaticText* m_staticTextMain; - - PopupDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~PopupDialogGenerated(); - +private: + +protected: + +public: + wxStaticBitmap* m_bitmapLeft; + wxStaticText* m_staticTextMain; + + TooltipDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~TooltipDialogGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class SelectTimespanDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class SelectTimespanDlgGenerated : public wxDialog +class SelectTimespanDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel35; - wxCalendarCtrl* m_calendarFrom; - wxCalendarCtrl* m_calendarTo; - wxStaticLine* m_staticline21; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnChangeSelectionFrom( wxCalendarEvent& event ) { event.Skip(); } - virtual void OnChangeSelectionTo( wxCalendarEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select time span"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~SelectTimespanDlgGenerated(); - +private: + +protected: + wxPanel* m_panel35; + wxCalendarCtrl* m_calendarFrom; + wxCalendarCtrl* m_calendarTo; + wxStaticLine* m_staticline21; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnChangeSelectionFrom( wxCalendarEvent& event ) { event.Skip(); } + virtual void OnChangeSelectionTo( wxCalendarEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select Time Span"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~SelectTimespanDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class AboutDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class AboutDlgGenerated : public wxDialog +class AboutDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel41; - wxStaticBitmap* m_bitmapLogo; - wxStaticLine* m_staticline341; - wxStaticText* m_build; - wxStaticLine* m_staticline3411; - wxStaticText* m_staticText96; - wxHyperlinkCtrl* m_hyperlink11; - wxHyperlinkCtrl* m_hyperlink9; - wxHyperlinkCtrl* m_hyperlink10; - wxHyperlinkCtrl* m_hyperlink7; - wxHyperlinkCtrl* m_hyperlink14; - wxHyperlinkCtrl* m_hyperlink15; - wxHyperlinkCtrl* m_hyperlink13; - wxHyperlinkCtrl* m_hyperlink16; - wxHyperlinkCtrl* m_hyperlink12; - wxHyperlinkCtrl* m_hyperlink18; - wxPanel* m_panelDonate; - wxPanel* m_panel39; - wxAnimationCtrl* m_animCtrlWink; - wxStaticText* m_staticText83; - wxButton* m_buttonDonate; - wxStaticText* m_staticText94; - wxStaticBitmap* m_bitmap9; - wxHyperlinkCtrl* m_hyperlink1; - wxStaticBitmap* m_bitmap10; - wxHyperlinkCtrl* m_hyperlink2; - wxStaticLine* m_staticline34; - wxStaticText* m_staticText93; - wxStaticBitmap* m_bitmap13; - wxHyperlinkCtrl* m_hyperlink5; - wxStaticLine* m_staticline37; - wxStaticText* m_staticText54; - wxScrolledWindow* m_scrolledWindowTranslators; - wxFlexGridSizer* fgSizerTranslators; - wxStaticLine* m_staticline36; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonClose; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnDonate( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOK( wxCommandEvent& event ) { event.Skip(); } - - - public: - - AboutDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~AboutDlgGenerated(); - +private: + +protected: + wxPanel* m_panel41; + wxStaticBitmap* m_bitmapLogo; + wxStaticLine* m_staticline341; + wxStaticText* m_staticText96; + wxHyperlinkCtrl* m_hyperlink11; + wxHyperlinkCtrl* m_hyperlink9; + wxHyperlinkCtrl* m_hyperlink10; + wxHyperlinkCtrl* m_hyperlink7; + wxHyperlinkCtrl* m_hyperlink14; + wxHyperlinkCtrl* m_hyperlink15; + wxHyperlinkCtrl* m_hyperlink13; + wxHyperlinkCtrl* m_hyperlink16; + wxHyperlinkCtrl* m_hyperlink12; + wxHyperlinkCtrl* m_hyperlink18; + wxPanel* m_panelDonate; + wxPanel* m_panel39; + wxAnimationCtrl* m_animCtrlWink; + wxStaticText* m_staticText83; + wxButton* m_buttonDonate; + wxStaticText* m_staticText94; + wxStaticBitmap* m_bitmap9; + wxHyperlinkCtrl* m_hyperlink1; + wxStaticBitmap* m_bitmap10; + wxHyperlinkCtrl* m_hyperlink2; + wxStaticLine* m_staticline34; + wxStaticText* m_staticText93; + wxStaticBitmap* m_bitmap13; + wxHyperlinkCtrl* m_hyperlink5; + wxStaticLine* m_staticline37; + wxStaticText* m_staticText54; + wxScrolledWindow* m_scrolledWindowTranslators; + wxFlexGridSizer* fgSizerTranslators; + wxStaticLine* m_staticline36; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonClose; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnDonate( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOK( wxCommandEvent& event ) { event.Skip(); } + + +public: + + AboutDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~AboutDlgGenerated(); + }; #endif //__GUI_GENERATED_H__ diff --git a/ui/gui_status_handler.cpp b/ui/gui_status_handler.cpp index 0816f2f1..f161b87b 100644 --- a/ui/gui_status_handler.cpp +++ b/ui/gui_status_handler.cpp @@ -5,15 +5,16 @@ // ************************************************************************** #include "gui_status_handler.h" +#include <zen/shell_execute.h> +#include <wx/app.h> #include <wx/wupdlock.h> -#include <wx+/shell_execute.h> #include <wx+/bitmap_button.h> -#include <wx/app.h> -#include "msg_popup.h" +#include <wx+/popup_dlg.h> #include "main_dlg.h" #include "exec_finished_box.h" #include "../lib/generate_logfile.h" #include "../lib/resolve_path.h" +#include "../lib/status_handler_impl.h" using namespace zen; using namespace xmlAccess; @@ -24,7 +25,9 @@ CompareStatusHandler::CompareStatusHandler(MainDialog& dlg) : ignoreErrors(false) { { - wxWindowUpdateLocker dummy(&mainDlg); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(&mainDlg); //leads to GUI corruption problems on Linux/OS X! +#endif //display status panel during compare mainDlg.compareStatus->init(*this); //clear old values before showing panel @@ -78,7 +81,9 @@ void CompareStatusHandler::initNewPhase(int objectsTotal, Int64 dataTotal, Phase break; case PHASE_COMPARING_CONTENT: { - wxWindowUpdateLocker dummy(&mainDlg); +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(&mainDlg); //leads to GUI corruption problems on Linux/OS X! +#endif mainDlg.compareStatus->switchToCompareBytewise(); mainDlg.Layout(); //show progress bar... mainDlg.Refresh(); //remove distortion... @@ -88,27 +93,32 @@ void CompareStatusHandler::initNewPhase(int objectsTotal, Int64 dataTotal, Phase } -ProcessCallback::Response CompareStatusHandler::reportError(const std::wstring& message) +ProcessCallback::Response CompareStatusHandler::reportError(const std::wstring& errorMessage, size_t retryNumber) { + //no need to implement auto-retry here: 1. user is watching 2. comparison is fast + //=> similar behavior like "ignoreErrors" which does not honor sync settings + if (ignoreErrors) return ProcessCallback::IGNORE_ERROR; forceUiRefresh(); bool ignoreNextErrors = false; - switch (showErrorDlg(&mainDlg, - ReturnErrorDlg::BUTTON_IGNORE | ReturnErrorDlg::BUTTON_RETRY | ReturnErrorDlg::BUTTON_CANCEL, - message, &ignoreNextErrors)) + switch (showConfirmationDialog3(&mainDlg, DialogInfoType::ERROR2, PopupDialogCfg3(). + setDetailInstructions(errorMessage). + setCheckBox(ignoreNextErrors, _("&Ignore subsequent errors"), ConfirmationButton3::DONT_DO_IT), + _("&Ignore"), _("&Retry"))) { - case ReturnErrorDlg::BUTTON_IGNORE: + case ConfirmationButton3::DO_IT: //ignore ignoreErrors = ignoreNextErrors; return ProcessCallback::IGNORE_ERROR; - case ReturnErrorDlg::BUTTON_RETRY: + case ConfirmationButton3::DONT_DO_IT: //retry return ProcessCallback::RETRY; - case ReturnErrorDlg::BUTTON_CANCEL: + case ConfirmationButton3::CANCEL: abortThisProcess(); + break; } assert(false); @@ -119,8 +129,7 @@ ProcessCallback::Response CompareStatusHandler::reportError(const std::wstring& void CompareStatusHandler::reportFatalError(const std::wstring& errorMessage) { forceUiRefresh(); - - showFatalErrorDlg(&mainDlg, ReturnFatalErrorDlg::BUTTON_CANCEL, errorMessage, nullptr); + showNotificationDialog(&mainDlg, DialogInfoType::ERROR2, PopupDialogCfg().setTitle(_("Serious Error")).setDetailInstructions(errorMessage)); } @@ -133,17 +142,15 @@ void CompareStatusHandler::reportWarning(const std::wstring& warningMessage, boo //show pop-up and ask user how to handle warning bool dontWarnAgain = false; - switch (showWarningDlg(&mainDlg, - ReturnWarningDlg::BUTTON_IGNORE | ReturnWarningDlg::BUTTON_CANCEL, - warningMessage, dontWarnAgain)) + switch (showConfirmationDialog(&mainDlg, DialogInfoType::WARNING, + PopupDialogCfg().setDetailInstructions(warningMessage). + setCheckBox(dontWarnAgain, _("&Don't show this warning again")), + _("&Ignore"))) { - case ReturnWarningDlg::BUTTON_IGNORE: + case ConfirmationButton::DO_IT: warningActive = !dontWarnAgain; break; - - case ReturnWarningDlg::BUTTON_SWITCH: - assert(false); - case ReturnWarningDlg::BUTTON_CANCEL: + case ConfirmationButton::CANCEL: abortThisProcess(); break; } @@ -173,12 +180,16 @@ void CompareStatusHandler::abortThisProcess() SyncStatusHandler::SyncStatusHandler(wxFrame* parentDlg, size_t lastSyncsLogFileSizeMax, OnGuiError handleError, + size_t automaticRetryCount, + size_t automaticRetryDelay, const std::wstring& jobName, const std::wstring& execWhenFinished, std::vector<std::wstring>& execFinishedHistory) : progressDlg(createProgressDialog(*this, [this] { this->onProgressDialogTerminate(); }, *this, parentDlg, true, jobName, execWhenFinished, execFinishedHistory)), lastSyncsLogFileSizeMax_(lastSyncsLogFileSizeMax), handleError_(handleError), + automaticRetryCount_(automaticRetryCount), + automaticRetryDelay_(automaticRetryDelay), jobName_(jobName) { totalTime.Start(); //measure total time @@ -187,6 +198,33 @@ SyncStatusHandler::SyncStatusHandler(wxFrame* parentDlg, SyncStatusHandler::~SyncStatusHandler() { + //------------ "on completion" command conceptually is part of the sync, not cleanup -------------------------------------- + + //decide whether to stay on status screen or exit immediately... + bool showFinalResults = true; + + if (progressDlg) + { + //execute "on completion" command (even in case of ignored errors) + if (!abortIsRequested()) //if aborted (manually), we don't execute the command + { + const std::wstring finalCommand = progressDlg->getExecWhenFinishedCommand(); //final value (after possible user modification) + if (!finalCommand.empty()) + { + if (isCloseProgressDlgCommand(finalCommand)) + showFinalResults = false; //take precedence over current visibility status + else + try + { + tryReportingError([&] { shellExecute2(expandMacros(utfCvrtTo<Zstring>(finalCommand)), EXEC_TYPE_SYNC); }, //throw FileError, throw X? + *this); + } + catch (...) {} + } + } + } + //------------ end of sync: begin of cleanup -------------------------------------- + const int totalErrors = errorLog.getItemCount(TYPE_ERROR | TYPE_FATAL_ERROR); //evaluate before finalizing log const int totalWarnings = errorLog.getItemCount(TYPE_WARNING); @@ -194,7 +232,7 @@ SyncStatusHandler::~SyncStatusHandler() std::wstring finalStatus; if (abortIsRequested()) { - finalStatus = _("Synchronization aborted"); + finalStatus = _("Synchronization stopped"); errorLog.logMsg(finalStatus, TYPE_ERROR); } else if (totalErrors > 0) @@ -233,20 +271,6 @@ SyncStatusHandler::~SyncStatusHandler() if (progressDlg) { - bool showFinalResults = true; - //execute "on completion" command (even in case of ignored errors) - if (!abortIsRequested()) //if aborted (manually), we don't execute the command - { - const std::wstring finalCommand = progressDlg->getExecWhenFinishedCommand(); //final value (after possible user modification) - if (!finalCommand.empty()) - { - if (isCloseProgressDlgCommand(finalCommand)) - showFinalResults = false; //take precedence over current visibility status - else - shellExecute(expandMacros(utfCvrtTo<Zstring>(finalCommand))); - } - } - //notify to progressDlg that current process has ended if (showFinalResults) { @@ -299,8 +323,25 @@ void SyncStatusHandler::reportInfo(const std::wstring& text) } -ProcessCallback::Response SyncStatusHandler::reportError(const std::wstring& errorMessage) +ProcessCallback::Response SyncStatusHandler::reportError(const std::wstring& errorMessage, size_t retryNumber) { + //auto-retry + if (retryNumber < automaticRetryCount_) + { + errorLog.logMsg(errorMessage + L"\n=> " + + _P("Automatic retry in 1 second...", "Automatic retry in %x seconds...", automaticRetryDelay_), TYPE_INFO); + //delay + const int iterations = static_cast<int>(1000 * automaticRetryDelay_ / UI_UPDATE_INTERVAL); //always round down: don't allow for negative remaining time below + for (int i = 0; i < iterations; ++i) + { + reportStatus(_("Error") + L": " + _P("Automatic retry in 1 second...", "Automatic retry in %x seconds...", + (1000 * automaticRetryDelay_ - i * UI_UPDATE_INTERVAL + 999) / 1000)); //integer round up + boost::this_thread::sleep(boost::posix_time::milliseconds(UI_UPDATE_INTERVAL)); + } + return ProcessCallback::RETRY; + } + + //always, except for "retry": zen::ScopeGuard guardWriteLog = zen::makeGuard([&] { errorLog.logMsg(errorMessage, TYPE_ERROR); }); @@ -313,22 +354,22 @@ ProcessCallback::Response SyncStatusHandler::reportError(const std::wstring& err forceUiRefresh(); bool ignoreNextErrors = false; - switch (showErrorDlg(progressDlg->getWindowIfVisible(), - ReturnErrorDlg::BUTTON_IGNORE | ReturnErrorDlg::BUTTON_RETRY | ReturnErrorDlg::BUTTON_CANCEL, - errorMessage, - &ignoreNextErrors)) + switch (showConfirmationDialog3(progressDlg->getWindowIfVisible(), DialogInfoType::ERROR2, PopupDialogCfg3(). + setDetailInstructions(errorMessage). + setCheckBox(ignoreNextErrors, _("&Ignore subsequent errors"), ConfirmationButton3::DONT_DO_IT), + _("&Ignore"), _("&Retry"))) { - case ReturnErrorDlg::BUTTON_IGNORE: + case ConfirmationButton3::DO_IT: //ignore if (ignoreNextErrors) //falsify only handleError_ = ON_GUIERROR_IGNORE; return ProcessCallback::IGNORE_ERROR; - case ReturnErrorDlg::BUTTON_RETRY: + case ConfirmationButton3::DONT_DO_IT: //retry guardWriteLog.dismiss(); - errorLog.logMsg(_("Retrying operation after error:") + L" " + errorMessage, TYPE_INFO); //explain why there are duplicate "doing operation X" info messages in the log! + errorLog.logMsg(errorMessage + L"\n=> " + _("Retrying operation..."), TYPE_INFO); //explain why there are duplicate "doing operation X" info messages in the log! return ProcessCallback::RETRY; - case ReturnErrorDlg::BUTTON_CANCEL: + case ConfirmationButton3::CANCEL: abortThisProcess(); break; } @@ -357,16 +398,17 @@ void SyncStatusHandler::reportFatalError(const std::wstring& errorMessage) forceUiRefresh(); bool ignoreNextErrors = false; - switch (showFatalErrorDlg(progressDlg->getWindowIfVisible(), - ReturnFatalErrorDlg::BUTTON_IGNORE | ReturnFatalErrorDlg::BUTTON_CANCEL, - errorMessage, &ignoreNextErrors)) + switch (showConfirmationDialog(progressDlg->getWindowIfVisible(), DialogInfoType::ERROR2, + PopupDialogCfg().setTitle(_("Serious Error")). + setDetailInstructions(errorMessage). + setCheckBox(ignoreNextErrors, _("&Ignore subsequent errors")), + _("&Ignore"))) { - case ReturnFatalErrorDlg::BUTTON_IGNORE: + case ConfirmationButton::DO_IT: if (ignoreNextErrors) //falsify only handleError_ = ON_GUIERROR_IGNORE; break; - - case ReturnFatalErrorDlg::BUTTON_CANCEL: + case ConfirmationButton::CANCEL: abortThisProcess(); break; } @@ -395,17 +437,15 @@ void SyncStatusHandler::reportWarning(const std::wstring& warningMessage, bool& forceUiRefresh(); bool dontWarnAgain = false; - switch (showWarningDlg(progressDlg->getWindowIfVisible(), - ReturnWarningDlg::BUTTON_IGNORE | ReturnWarningDlg::BUTTON_CANCEL, - warningMessage, dontWarnAgain)) + switch (showConfirmationDialog(progressDlg->getWindowIfVisible(), DialogInfoType::WARNING, + PopupDialogCfg().setDetailInstructions(warningMessage). + setCheckBox(dontWarnAgain, _("&Don't show this warning again")), + _("&Ignore"))) { - case ReturnWarningDlg::BUTTON_IGNORE: //no unhandled error situation! + case ConfirmationButton::DO_IT: warningActive = !dontWarnAgain; break; - - case ReturnWarningDlg::BUTTON_SWITCH: - assert(false); - case ReturnWarningDlg::BUTTON_CANCEL: + case ConfirmationButton::CANCEL: abortThisProcess(); break; } diff --git a/ui/gui_status_handler.h b/ui/gui_status_handler.h index 30efe3fb..fbbf827f 100644 --- a/ui/gui_status_handler.h +++ b/ui/gui_status_handler.h @@ -31,7 +31,7 @@ public: virtual void initNewPhase(int objectsTotal, zen::Int64 dataTotal, Phase phaseID); virtual void forceUiRefresh(); - virtual Response reportError(const std::wstring& text); + virtual Response reportError(const std::wstring& text, size_t retryNumber); virtual void reportFatalError(const std::wstring& errorMessage); virtual void reportWarning(const std::wstring& warningMessage, bool& warningActive); @@ -52,6 +52,8 @@ public: SyncStatusHandler(wxFrame* parentDlg, size_t lastSyncsLogFileSizeMax, xmlAccess::OnGuiError handleError, + size_t automaticRetryCount, + size_t automaticRetryDelay, const std::wstring& jobName, const std::wstring& execWhenFinished, std::vector<std::wstring>& execFinishedHistory); @@ -62,7 +64,7 @@ public: virtual void reportInfo(const std::wstring& text); virtual void forceUiRefresh(); - virtual Response reportError(const std::wstring& text); + virtual Response reportError(const std::wstring& text, size_t retryNumber); virtual void reportFatalError(const std::wstring& errorMessage); virtual void reportWarning(const std::wstring& warningMessage, bool& warningActive); @@ -74,6 +76,8 @@ private: const size_t lastSyncsLogFileSizeMax_; xmlAccess::OnGuiError handleError_; zen::ErrorLog errorLog; + const size_t automaticRetryCount_; + const size_t automaticRetryDelay_; const std::wstring jobName_; wxStopWatch totalTime; }; diff --git a/ui/main_dlg.cpp b/ui/main_dlg.cpp index c84606f4..8ca9cc0b 100644 --- a/ui/main_dlg.cpp +++ b/ui/main_dlg.cpp @@ -10,36 +10,37 @@ #include <zen/serialize.h> //#include <zen/perf.h> #include <zen/thread.h> +#include <zen/shell_execute.h> #include <wx/clipbrd.h> #include <wx/wupdlock.h> -#include <wx/msgdlg.h> #include <wx/sound.h> #include <wx/filedlg.h> #include <wx/display.h> #include <wx+/context_menu.h> #include <wx+/string_conv.h> #include <wx+/bitmap_button.h> -#include <wx+/shell_execute.h> #include <wx+/app_main.h> #include <wx+/toggle_button.h> #include <wx+/mouse_move_dlg.h> #include <wx+/no_flicker.h> #include <wx+/rtl.h> #include <wx+/font_size.h> +#include <wx+/popup_dlg.h> +#include <wx+/image_resources.h> #include "check_version.h" #include "gui_status_handler.h" #include "sync_cfg.h" #include "small_dlgs.h" #include "progress_indicator.h" -#include "msg_popup.h" #include "folder_pair.h" #include "search.h" #include "batch_config.h" #include "triple_splitter.h" +#include "app_icon.h" +//#include "config_history.h" #include "../comparison.h" #include "../synchronization.h" #include "../algorithm.h" -#include "../lib/resources.h" #include "../lib/resolve_path.h" #include "../lib/ffs_paths.h" #include "../lib/help_provider.h" @@ -329,7 +330,7 @@ xmlAccess::XmlGlobalSettings retrieveGlobalCfgFromDisk() //blocks on GUI on erro { assert(false); if (e.getSeverity() != FfsXmlError::WARNING) //ignore parsing errors: should be migration problems only *cross-fingers* - wxMessageBox(e.toString(), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); //no parent window: main dialog not yet created! } return globalCfg; } @@ -380,13 +381,13 @@ void MainDialog::create() { readAnyConfig(filenames, guiCfg); //throw FfsXmlError } - catch (const FfsXmlError& error) + catch (const FfsXmlError& e) { - if (error.getSeverity() == FfsXmlError::WARNING) - wxMessageBox(error.toString(), L"FreeFileSync - " + _("Warning"), wxOK | wxICON_WARNING); + if (e.getSeverity() == FfsXmlError::WARNING) + showNotificationDialog(nullptr, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); //what about simulating changed config on parsing errors???? else - wxMessageBox(error.toString(), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } //------------------------------------------------------------------------------------------ @@ -408,7 +409,7 @@ void MainDialog::create(const xmlAccess::XmlGuiConfig& guiCfg, } catch (const FileError& e) { - wxMessageBox(e.toString().c_str(), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); //continue! } @@ -416,11 +417,10 @@ void MainDialog::create(const xmlAccess::XmlGuiConfig& guiCfg, frame->Show(); #ifdef ZEN_MAC ProcessSerialNumber psn = { 0, kCurrentProcess }; + ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon, even if we're not an application bundle //if the executable is not yet in a bundle or if it is called through a launcher, we need to set focus manually: - ::SetFrontProcess(&psn); #endif - } @@ -440,11 +440,13 @@ MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, m_splitterMain->SetSizer(nullptr); //alas wxFormbuilder doesn't allow us to have child windows without a sizer, so we have to remove it here m_splitterMain->setupWindows(m_gridMainL, m_gridMainC, m_gridMainR); - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif - setRelativeFontSize(*m_buttonCompare, 1.5); - setRelativeFontSize(*m_buttonSync, 1.5); - setRelativeFontSize(*m_buttonCancel, 1.5); + setRelativeFontSize(*m_buttonCompare, 1.4); + setRelativeFontSize(*m_buttonSync, 1.4); + setRelativeFontSize(*m_buttonCancel, 1.4); //---------------- support for dockable gui style -------------------------------- bSizerPanelHolder->Detach(m_panelTopButtons); @@ -466,7 +468,7 @@ MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, wxAuiPaneInfo().Name(L"Panel3").CenterPane().PaneBorder(false)); auiMgr.AddPane(m_panelDirectoryPairs, - wxAuiPaneInfo().Name(L"Panel2").Layer(2).Top().Caption(_("Folder pairs")).CaptionVisible(false).PaneBorder(false).Gripper()); + wxAuiPaneInfo().Name(L"Panel2").Layer(2).Top().Caption(_("Folder Pairs")).CaptionVisible(false).PaneBorder(false).Gripper()); auiMgr.AddPane(m_panelSearch, wxAuiPaneInfo().Name(L"PanelFind").Layer(2).Bottom().Caption(_("Find")).CaptionVisible(false).PaneBorder(false).Gripper().MinSize(200, m_bpButtonHideSearch->GetSize().GetHeight()).Hide()); @@ -478,17 +480,17 @@ MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, wxAuiPaneInfo().Name(L"Panel4").Layer(3).Left().Position(2).Caption(_("Configuration")).MinSize(m_listBoxHistory->GetSize().GetWidth(), m_panelConfig->GetSize().GetHeight())); auiMgr.AddPane(m_panelTopButtons, - wxAuiPaneInfo().Name(L"Panel1").Layer(4).Top().Row(1).Caption(_("Main bar")).CaptionVisible(false).PaneBorder(false).Gripper().MinSize(-1, m_panelTopButtons->GetSize().GetHeight())); + wxAuiPaneInfo().Name(L"Panel1").Layer(4).Top().Row(1).Caption(_("Main Bar")).CaptionVisible(false).PaneBorder(false).Gripper().MinSize(-1, m_panelTopButtons->GetSize().GetHeight())); //note: min height is calculated incorrectly by wxAuiManager if panes with and without caption are in the same row => use smaller min-size auiMgr.AddPane(compareStatus->getAsWindow(), wxAuiPaneInfo().Name(L"Panel9").Layer(4).Top().Row(2).CaptionVisible(false).PaneBorder(false).Hide()); auiMgr.AddPane(m_panelFilter, - wxAuiPaneInfo().Name(L"Panel5").Layer(4).Bottom().Position(1).Caption(_("Filter files")).MinSize(m_bpButtonFilter->GetSize().GetWidth(), m_panelFilter->GetSize().GetHeight())); + wxAuiPaneInfo().Name(L"Panel5").Layer(4).Bottom().Position(1).Caption(_("Filter Files")).MinSize(m_bpButtonFilter->GetSize().GetWidth(), m_panelFilter->GetSize().GetHeight())); auiMgr.AddPane(m_panelViewFilter, - wxAuiPaneInfo().Name(L"Panel6").Layer(4).Bottom().Position(2).Caption(_("Select view")).MinSize(m_bpButtonShowDoNothing->GetSize().GetWidth(), m_panelViewFilter->GetSize().GetHeight())); + wxAuiPaneInfo().Name(L"Panel6").Layer(4).Bottom().Position(2).Caption(_("Select View")).MinSize(m_bpButtonShowDoNothing->GetSize().GetWidth(), m_panelViewFilter->GetSize().GetHeight())); auiMgr.AddPane(m_panelStatistics, wxAuiPaneInfo().Name(L"Panel7").Layer(4).Bottom().Position(3).Caption(_("Statistics")).MinSize(m_bitmapData->GetSize().GetWidth() + m_staticTextData->GetSize().GetWidth(), m_panelStatistics->GetSize().GetHeight())); @@ -562,25 +564,9 @@ MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, new PanelMoveWindow(*this); //allow moving main dialog by clicking (nearly) anywhere... //ownership passed to "this" #endif - SetIcon(GlobalResources::instance().programIconFFS); //set application icon - - //notify about (logical) application main window => program won't quit, but stay on this dialog - zen::setMainWindow(this); - - //init handling of first folder pair - firstFolderPair = make_unique<FolderPairFirst>(*this); - - initViewFilterButtons(); - - //init grid settings - gridview::init(*m_gridMainL, *m_gridMainC, *m_gridMainR, gridDataView); - treeview::init(*m_gridNavi, treeDataView); - - //initialize and load configuration - setGlobalCfgOnInit(globalSettings); - setConfig(guiCfg, referenceFiles); - //set icons for this dialog + SetIcon(getFfsIcon()); //set application icon + m_bpButtonSyncConfig->SetBitmapLabel(getResourceImage(L"cfg_sync")); m_bpButtonCmpConfig ->SetBitmapLabel(getResourceImage(L"cfg_compare")); m_bpButtonOpen ->SetBitmapLabel(getResourceImage(L"load")); @@ -602,18 +588,10 @@ MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, m_bitmapSmallFileRight ->SetBitmap(bmpFile); } - const int dummySize = 5; - wxImage dummyImg(dummySize, dummySize); - if (!dummyImg.HasAlpha()) - dummyImg.InitAlpha(); - std::fill(dummyImg.GetAlpha(), dummyImg.GetAlpha() + dummySize * dummySize, wxIMAGE_ALPHA_TRANSPARENT); - //menu icons: workaround for wxWidgets: small hack to update menu items: actually this is a wxWidgets bug (affects Windows- and Linux-build) setMenuItemImage(m_menuItem10, getResourceImage(L"compare_small")); setMenuItemImage(m_menuItem11, getResourceImage(L"sync_small")); - setMenuItemImage(m_menuItemNew, dummyImg); //it's ridiculous, but wxWidgets screws up aligning short-cut label texts if we don't set an image! - setMenuItemImage(m_menuItemSaveAs, dummyImg); setMenuItemImage(m_menuItemLoad, getResourceImage(L"load_small")); setMenuItemImage(m_menuItemSave, getResourceImage(L"save_small")); @@ -650,6 +628,23 @@ MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, m_menuLanguages->Append(newItem); }); + //notify about (logical) application main window => program won't quit, but stay on this dialog + zen::setMainWindow(this); + + //init handling of first folder pair + firstFolderPair = make_unique<FolderPairFirst>(*this); + + initViewFilterButtons(); + + //init grid settings + gridview::init(*m_gridMainL, *m_gridMainC, *m_gridMainR, gridDataView); + treeview::init(*m_gridNavi, treeDataView); + //config_history::init(*m_gridConfigHistory, lastRunConfigName()); + + //initialize and load configuration + setGlobalCfgOnInit(globalSettings); + setConfig(guiCfg, referenceFiles); + //support for CTRL + C and DEL on grids m_gridMainL->getMainWin().Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(MainDialog::onGridButtonEventL), nullptr, this); m_gridMainC->getMainWin().Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(MainDialog::onGridButtonEventC), nullptr, this); @@ -756,7 +751,7 @@ MainDialog::~MainDialog() } catch (const xmlAccess::FfsXmlError& e) { - wxMessageBox(e.toString().c_str(), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR, this); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } try //save "LastRun.ffs_gui" @@ -844,8 +839,12 @@ void MainDialog::setGlobalCfgOnInit(const xmlAccess::XmlGlobalSettings& globalSe //-------------------------------------------------------------------------------- //load list of last used configuration files - std::vector<Zstring> cfgFileNames = globalSettings.gui.cfgFileHistory; - std::reverse(cfgFileNames.begin(), cfgFileNames.end()); //list is stored with last used files first in xml, however addFileToCfgHistory() needs them last!!! + //config_history::setItems(*m_gridConfigHistory, globalSettings.gui.lastUsedConfigFiles2); + + std::vector<Zstring> cfgFileNames; + std::transform(globalSettings.gui.cfgFileHistory.rbegin(), globalSettings.gui.cfgFileHistory.rend(), std::back_inserter(cfgFileNames), + [](const ConfigHistoryItem& item) { return item.configFile; }); + //list is stored with last used files first in xml, however addFileToCfgHistory() needs them last!!! cfgFileNames.push_back(lastRunConfigName()); //make sure <Last session> is always part of history list (if existing) addFileToCfgHistory(cfgFileNames); @@ -864,7 +863,7 @@ void MainDialog::setGlobalCfgOnInit(const xmlAccess::XmlGlobalSettings& globalSe m_checkBoxMatchCase->SetValue(globalCfg.gui.textSearchRespectCase); //wxAuiManager erroneously loads panel captions, we don't want that - typedef std::vector<std::pair<wxString, wxString> > CaptionNameMapping; + typedef std::vector<std::pair<wxString, wxString>> CaptionNameMapping; CaptionNameMapping captionNameMap; const wxAuiPaneInfoArray& paneArray = auiMgr.GetAllPanes(); for (size_t i = 0; i < paneArray.size(); ++i) @@ -890,7 +889,6 @@ void MainDialog::setGlobalCfgOnInit(const xmlAccess::XmlGlobalSettings& globalSe xmlAccess::XmlGlobalSettings MainDialog::getGlobalCfgBeforeExit() { Freeze(); //no need to Thaw() again!! - // wxWindowUpdateLocker dummy(this); xmlAccess::XmlGlobalSettings globalSettings = globalCfg; @@ -918,8 +916,8 @@ xmlAccess::XmlGlobalSettings MainDialog::getGlobalCfgBeforeExit() assert(false); //sort by last use; put most recent items *first* (looks better in xml than the reverse) - std::vector<Zstring> history; - std::transform(historyDetail.rbegin(), historyDetail.rend(), std::back_inserter(history), [](const std::pair<int, Zstring>& item) { return item.second; }); + std::vector<ConfigHistoryItem> history; + std::transform(historyDetail.rbegin(), historyDetail.rend(), std::back_inserter(history), [](const std::pair<const int, Zstring>& item) { return ConfigHistoryItem(item.second); }); if (history.size() > globalSettings.gui.cfgFileHistMax) //erase oldest elements history.resize(globalSettings.gui.cfgFileHistMax); @@ -927,6 +925,7 @@ xmlAccess::XmlGlobalSettings MainDialog::getGlobalCfgBeforeExit() globalSettings.gui.cfgFileHistory = history; //-------------------------------------------------------------------------------- globalSettings.gui.lastUsedConfigFiles = activeConfigFiles; + //globalSettings.gui.lastUsedConfigFiles2 = config_history::getItems(*m_gridConfigHistory); //write list of last used folders globalSettings.gui.folderHistoryLeft = folderHistoryLeft ->getList(); @@ -1034,7 +1033,7 @@ void MainDialog::copySelectionToClipboard(const std::vector<const Grid*>& gridRe } catch (const std::bad_alloc& e) { - wxMessageBox(_("Out of memory.") + L" " + utfCvrtTo<std::wstring>(e.what()), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR, this); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setMainInstructions(_("Out of memory.") + L" " + utfCvrtTo<std::wstring>(e.what()))); } } @@ -1120,16 +1119,19 @@ public: forceUiRefresh(); bool ignoreNextErrors = false; - switch (showErrorDlg(&mainDlg, - ReturnErrorDlg::BUTTON_IGNORE | ReturnErrorDlg::BUTTON_RETRY | ReturnErrorDlg::BUTTON_CANCEL, - msg, &ignoreNextErrors)) + switch (showConfirmationDialog3(&mainDlg, DialogInfoType::ERROR2, PopupDialogCfg3(). + setDetailInstructions(msg). + setCheckBox(ignoreNextErrors, _("&Ignore subsequent errors"), ConfirmationButton3::DONT_DO_IT), + _("&Ignore"), _("&Retry"))) { - case ReturnErrorDlg::BUTTON_IGNORE: + case ConfirmationButton3::DO_IT: //ignore ignoreErrors = ignoreNextErrors; return DeleteFilesHandler::IGNORE_ERROR; - case ReturnErrorDlg::BUTTON_RETRY: + + case ConfirmationButton3::DONT_DO_IT: //retry return DeleteFilesHandler::RETRY; - case ReturnErrorDlg::BUTTON_CANCEL: + + case ConfirmationButton3::CANCEL: throw AbortDeleteProcess(); } @@ -1144,16 +1146,15 @@ public: forceUiRefresh(); bool dontWarnAgain = false; - switch (showWarningDlg(&mainDlg, ReturnWarningDlg::BUTTON_IGNORE | ReturnWarningDlg::BUTTON_CANCEL, msg, dontWarnAgain)) + switch (showConfirmationDialog(&mainDlg, DialogInfoType::WARNING, PopupDialogCfg(). + setDetailInstructions(msg). + setCheckBox(dontWarnAgain, _("&Don't show this warning again")), _("&Ignore"))) { - case ReturnWarningDlg::BUTTON_SWITCH: - assert(false); - case ReturnWarningDlg::BUTTON_CANCEL: - throw AbortDeleteProcess(); - - case ReturnWarningDlg::BUTTON_IGNORE: + case ConfirmationButton::DO_IT: warningActive = !dontWarnAgain; break; + case ConfirmationButton::CANCEL: + throw AbortDeleteProcess(); } } @@ -1310,13 +1311,18 @@ void MainDialog::openExternalApplication(const wxString& commandline, const std: fallbackDir = leftSide ? getExistingParentFolder<LEFT_SIDE >(*selectionTmp[0]) : getExistingParentFolder<RIGHT_SIDE>(*selectionTmp[0]); + + try + { #ifdef ZEN_WIN - zen::shellExecute(L"\"" + fallbackDir + L"\""); + shellExecute2(L"\"" + fallbackDir + L"\"", EXEC_TYPE_ASYNC); //throw FileError #elif defined ZEN_LINUX - zen::shellExecute("xdg-open \"" + fallbackDir + "\""); + shellExecute2("xdg-open \"" + fallbackDir + "\"", EXEC_TYPE_ASYNC); // #elif defined ZEN_MAC - zen::shellExecute("open \"" + fallbackDir + "\""); + shellExecute2("open \"" + fallbackDir + "\"", EXEC_TYPE_ASYNC); // #endif + } + catch (const FileError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } return; } } @@ -1327,30 +1333,25 @@ void MainDialog::openExternalApplication(const wxString& commandline, const std: if (globalCfg.optDialogs.confirmExternalCommandMassInvoke) { bool dontAskAgain = false; - switch (showQuestionDlg(this, - ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_CANCEL, - replaceCpy(replaceCpy(_P("Do you really want to execute the command %y for 1 item?", - "Do you really want to execute the command %y for %x items?", selectionTmp.size()), - L"%x", toGuiString(selectionTmp.size())), L"%y", L'\'' + commandline + L'\''), - QuestConfig().setCaption(_("Confirm")).setLabelYes(_("&Execute")). - showCheckBox(dontAskAgain, _("&Don't show this dialog again"), 0))) + switch (showConfirmationDialog(this, DialogInfoType::WARNING, PopupDialogCfg(). + setTitle(_("Confirm")). + setMainInstructions(replaceCpy(_P("Do you really want to execute the command %y for one item?", + "Do you really want to execute the command %y for %x items?", selectionTmp.size()), + L"%y", L'\"' + commandline + L'\"')). + setCheckBox(dontAskAgain, _("&Don't show this warning again")), + _("&Execute"))) { - case ReturnQuestionDlg::BUTTON_YES: + case ConfirmationButton::DO_IT: globalCfg.optDialogs.confirmExternalCommandMassInvoke = !dontAskAgain; break; - - case ReturnQuestionDlg::BUTTON_NO: - assert(false); - case ReturnQuestionDlg::BUTTON_CANCEL: + case ConfirmationButton::CANCEL: return; } } //regular command evaluation - for (auto it = selectionTmp.begin(); it != selectionTmp.end(); ++it) //context menu calls this function only if selection is not empty! + for (const FileSystemObject* fsObj : selectionTmp) //context menu calls this function only if selection is not empty! { - const FileSystemObject* fsObj = *it; - Zstring path1 = fsObj->getBaseDirPf<LEFT_SIDE>() + fsObj->getObjRelativeName(); //full path, even if item is not existing! Zstring dir1 = beforeLast(path1, FILE_NAME_SEPARATOR); //Win: wrong for root paths like "C:\file.txt" @@ -1370,8 +1371,12 @@ void MainDialog::openExternalApplication(const wxString& commandline, const std: replace(command, Zstr("%item2_folder%"), dir2 ); auto cmdExp = expandMacros(command); - //caveat: spawning too many threads asynchronously can easily kill a user's desktop session! - zen::shellExecute(cmdExp, selectionTmp.size() > massInvokeThreshold ? EXEC_TYPE_SYNC : EXEC_TYPE_ASYNC); + try + { + //caveat: spawning too many threads asynchronously can easily kill a user's desktop session on Ubuntu! + shellExecute2(cmdExp, selectionTmp.size() > massInvokeThreshold ? EXEC_TYPE_SYNC : EXEC_TYPE_ASYNC); //throw FileError + } + catch (const FileError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } } } @@ -1383,7 +1388,9 @@ void MainDialog::setStatusBarFileStatistics(size_t filesOnLeftView, zen::UInt64 filesizeLeftView, zen::UInt64 filesizeRightView) { - wxWindowUpdateLocker dummy(m_panelStatusBar); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(m_panelStatusBar); //leads to GUI corruption problems on Linux/OS X! +#endif //select state bSizerFileStatus->Show(true); @@ -1393,25 +1400,24 @@ void MainDialog::setStatusBarFileStatistics(size_t filesOnLeftView, bSizerStatusLeftDirectories->Show(foldersOnLeftView > 0); bSizerStatusLeftFiles ->Show(filesOnLeftView > 0); - setText(*m_staticTextStatusLeftDirs, replaceCpy(_P("1 directory", "%x directories", foldersOnLeftView), L"%x", toGuiString(foldersOnLeftView), false)); - setText(*m_staticTextStatusLeftFiles, replaceCpy(_P("1 file", "%x files", filesOnLeftView), L"%x", toGuiString(filesOnLeftView), false)); + setText(*m_staticTextStatusLeftDirs, _P("1 directory", "%x directories", foldersOnLeftView)); + setText(*m_staticTextStatusLeftFiles, _P("1 file", "%x files", filesOnLeftView)); setText(*m_staticTextStatusLeftBytes, L"(" + filesizeToShortString(to<Int64>(filesizeLeftView)) + L")"); + //------------------------------------------------------------------------------ + bSizerStatusRightDirectories->Show(foldersOnRightView > 0); + bSizerStatusRightFiles ->Show(filesOnRightView > 0); + setText(*m_staticTextStatusRightDirs, _P("1 directory", "%x directories", foldersOnRightView)); + setText(*m_staticTextStatusRightFiles, _P("1 file", "%x files", filesOnRightView)); + setText(*m_staticTextStatusRightBytes, L"(" + filesizeToShortString(to<Int64>(filesizeRightView)) + L")"); + //------------------------------------------------------------------------------ wxString statusMiddleNew; if (gridDataView->rowsTotal() > 0) { statusMiddleNew = _P("%y of 1 row in view", "%y of %x rows in view", gridDataView->rowsTotal()); - replace(statusMiddleNew, L"%x", toGuiString(gridDataView->rowsTotal ()), false); //%x is required to be the plural form placeholder! - replace(statusMiddleNew, L"%y", toGuiString(gridDataView->rowsOnView()), false); //%y is secondary placeholder + replace(statusMiddleNew, L"%y", toGuiString(gridDataView->rowsOnView()), false); //%x is already used as plural form placeholder! } - bSizerStatusRightDirectories->Show(foldersOnRightView > 0); - bSizerStatusRightFiles ->Show(filesOnRightView > 0); - - setText(*m_staticTextStatusRightDirs, replaceCpy(_P("1 directory", "%x directories", foldersOnRightView), L"%x", toGuiString(foldersOnRightView), false)); - setText(*m_staticTextStatusRightFiles, replaceCpy(_P("1 file", "%x files", filesOnRightView), L"%x", toGuiString(filesOnRightView), false)); - setText(*m_staticTextStatusRightBytes, L"(" + filesizeToShortString(to<Int64>(filesizeRightView)) + L")"); - //fill middle text (considering flashStatusInformation()) if (oldStatusMsgs.empty()) setText(*m_staticTextStatusMiddle, statusMiddleNew); @@ -1444,6 +1450,8 @@ void MainDialog::flashStatusInformation(const wxString& text) m_staticTextStatusMiddle->SetLabel(text); m_staticTextStatusMiddle->SetForegroundColour(wxColour(31, 57, 226)); //highlight color: blue + m_staticTextStatusMiddle->SetFont(m_staticTextStatusMiddle->GetFont().Bold()); + m_panelStatusBar->Layout(); //if (needLayoutUpdate) auiMgr.Update(); -> not needed here, this is called anyway in updateGui() @@ -1463,6 +1471,11 @@ void MainDialog::restoreStatusInformation() { m_staticTextStatusMiddle->SetLabel(oldMsg); m_staticTextStatusMiddle->SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); //reset color + + wxFont fnt = m_staticTextStatusMiddle->GetFont(); + fnt.SetWeight(wxFONTWEIGHT_NORMAL); + m_staticTextStatusMiddle->SetFont(fnt); + m_panelStatusBar->Layout(); } } @@ -1815,13 +1828,13 @@ void MainDialog::OnGlobalKeyEvent(wxKeyEvent& event) //process key events withou const int keyCode = event.GetKeyCode(); //CTRL + X - if (event.ControlDown()) - switch (keyCode) - { - case 'F': //CTRL + F - showFindPanel(); - return; //-> swallow event! - } + //if (event.ControlDown()) + // switch (keyCode) + // { + // case 'F': //CTRL + F + // showFindPanel(); + // return; //-> swallow event! + // } switch (keyCode) { @@ -2000,9 +2013,23 @@ void MainDialog::onNaviGridContext(GridClickEvent& event) { if (selection.size() == 1) { + ContextMenu submenu; + + const bool isDir = dynamic_cast<const DirPair*>(selection[0]) != nullptr; + + //by short name + Zstring labelShort = Zstring(Zstr("*")) + FILE_NAME_SEPARATOR + selection[0]->getObjShortName(); + if (isDir) + labelShort += Zstring(FILE_NAME_SEPARATOR) + Zstr("*"); + submenu.addItem(utfCvrtTo<wxString>(labelShort), [this, &selection, include] { filterShortname(*selection[0], include); }); + //by relative path - menu.addItem(label + L" " + (FILE_NAME_SEPARATOR + selection[0]->getObjRelativeName()), - [this, &selection, include] { filterItems(selection, include); }, &getResourceImage(iconName)); + Zstring labelRel = FILE_NAME_SEPARATOR + selection[0]->getObjRelativeName(); + if (isDir) + labelRel += Zstring(FILE_NAME_SEPARATOR) + Zstr("*"); + submenu.addItem(utfCvrtTo<wxString>(labelRel), [this, &selection, include] { filterItems(selection, include); }); + + menu.addSubmenu(label, submenu, &getResourceImage(iconName)); } else if (selection.size() > 1) { @@ -2029,7 +2056,7 @@ void MainDialog::onNaviGridContext(GridClickEvent& event) //CONTEXT_DELETE_FILES menu.addSeparator(); - menu.addItem(_("Delete") + L"\tDelete", [&] { deleteSelectedFiles(selection, selection); }, nullptr, !selection.empty()); + menu.addItem(_("Delete") + L"\tDel", [&] { deleteSelectedFiles(selection, selection); }, nullptr, !selection.empty()); menu.popup(*this); } @@ -2101,11 +2128,13 @@ void MainDialog::onMainGridContextRim(bool leftSide) { ContextMenu submenu; + const bool isDir = dynamic_cast<const DirPair*>(selection[0]) != nullptr; + //by extension - if (dynamic_cast<const DirPair*>(selection[0]) == nullptr) //non empty && no directory + if (!isDir) { const Zstring filename = afterLast(selection[0]->getObjRelativeName(), FILE_NAME_SEPARATOR); - if (contains(filename, Zchar('.'))) //be careful: AfterLast would return the whole string if '.' were not found! + if (contains(filename, Zchar('.'))) //be careful: afterLast returns the whole string if '.' is not found! { const Zstring extension = afterLast(filename, Zchar('.')); submenu.addItem(L"*." + utfCvrtTo<wxString>(extension), @@ -2114,12 +2143,16 @@ void MainDialog::onMainGridContextRim(bool leftSide) } //by short name - submenu.addItem(utfCvrtTo<wxString>(Zstring(Zstr("*")) + FILE_NAME_SEPARATOR + selection[0]->getObjShortName()), - [this, &selection, include] { filterShortname(*selection[0], include); }); + Zstring labelShort = Zstring(Zstr("*")) + FILE_NAME_SEPARATOR + selection[0]->getObjShortName(); + if (isDir) + labelShort += Zstring(FILE_NAME_SEPARATOR) + Zstr("*"); + submenu.addItem(utfCvrtTo<wxString>(labelShort), [this, &selection, include] { filterShortname(*selection[0], include); }); //by relative path - submenu.addItem(utfCvrtTo<wxString>(FILE_NAME_SEPARATOR + selection[0]->getObjRelativeName()), - [this, &selection, include] { filterItems(selection, include); }); + Zstring labelRel = FILE_NAME_SEPARATOR + selection[0]->getObjRelativeName(); + if (isDir) + labelRel += Zstring(FILE_NAME_SEPARATOR) + Zstr("*"); + submenu.addItem(utfCvrtTo<wxString>(labelRel), [this, &selection, include] { filterItems(selection, include); }); menu.addSubmenu(label, submenu, &getResourceImage(iconName)); } @@ -2173,7 +2206,7 @@ void MainDialog::onMainGridContextRim(bool leftSide) //CONTEXT_DELETE_FILES menu.addSeparator(); - menu.addItem(_("Delete") + L"\tDelete", [this] + menu.addItem(_("Delete") + L"\tDel", [this] { deleteSelectedFiles( getGridSelection(true, false), @@ -2226,6 +2259,7 @@ void MainDialog::filterPhrase(const Zstring& phrase, bool include, bool addNewLi void MainDialog::filterExtension(const Zstring& extension, bool include) { + assert(!extension.empty()); filterPhrase(Zstr("*.") + extension, include, false); } @@ -2235,7 +2269,7 @@ void MainDialog::filterShortname(const FileSystemObject& fsObj, bool include) Zstring phrase = Zstring(Zstr("*")) + FILE_NAME_SEPARATOR + fsObj.getObjShortName(); const bool isDir = dynamic_cast<const DirPair*>(&fsObj) != nullptr; if (isDir) - phrase += FILE_NAME_SEPARATOR; + phrase += Zstring(FILE_NAME_SEPARATOR) + Zstr("*"); //include filter: * required; exclude filter: * optional, but let's still apply it! filterPhrase(phrase, include, true); } @@ -2258,7 +2292,7 @@ void MainDialog::filterItems(const std::vector<FileSystemObject*>& selection, bo const bool isDir = dynamic_cast<const DirPair*>(fsObj) != nullptr; if (isDir) - phrase += FILE_NAME_SEPARATOR; + phrase += Zstring(FILE_NAME_SEPARATOR) + Zstr("*"); //include filter: * required; exclude filter: * optional, but let's still apply it! } filterPhrase(phrase, include, true); } @@ -2477,7 +2511,7 @@ void MainDialog::addFileToCfgHistory(const std::vector<Zstring>& filenames) { //determine highest "last use" index number of m_listBoxHistory int lastUseIndexMax = 0; - for (int i = 0; i < static_cast<int>(m_listBoxHistory->GetCount()); ++i) + for (unsigned int i = 0; i < m_listBoxHistory->GetCount(); ++i) if (auto histData = dynamic_cast<const wxClientHistoryData*>(m_listBoxHistory->GetClientObject(i))) if (histData->lastUseIndex_ > lastUseIndexMax) lastUseIndexMax = histData->lastUseIndex_; @@ -2490,31 +2524,44 @@ void MainDialog::addFileToCfgHistory(const std::vector<Zstring>& filenames) //Do we need to additionally check for aliases of the same physical files here? (and aliases for lastRunConfigName?) - const int itemPos = [&]() -> int + const auto itemPos = [&]() -> std::pair<wxClientHistoryData*, unsigned int> { - const int itemCount = static_cast<int>(m_listBoxHistory->GetCount()); - for (int i = 0; i < itemCount; ++i) - if (auto histData = dynamic_cast<const wxClientHistoryData*>(m_listBoxHistory->GetClientObject(i))) + for (unsigned int i = 0; i < m_listBoxHistory->GetCount(); ++i) + if (auto histData = dynamic_cast<wxClientHistoryData*>(m_listBoxHistory->GetClientObject(i))) { if (EqualFilename()(filename, histData->cfgFile_)) - return i; + return std::make_pair(histData, i); } else assert(false); - return -1; + return std::make_pair(nullptr, 0); }(); - if (itemPos >= 0) //update + if (itemPos.first) //update { - if (auto histData = dynamic_cast<wxClientHistoryData*>(m_listBoxHistory->GetClientObject(itemPos))) - histData->lastUseIndex_ = ++lastUseIndexMax; - selections[itemPos] = true; + itemPos.first->lastUseIndex_ = ++lastUseIndexMax; + selections[itemPos.second] = true; } else //insert { - const wxString label = EqualFilename()(filename, lastRunConfigName()) ? //give default config file a different name - L"<" + _("Last session") + L">" : getFormattedHistoryElement(filename); - const int newPos = m_listBoxHistory->Append(label, new wxClientHistoryData(filename, ++lastUseIndexMax)); //*insert* into sorted list + wxString label; + unsigned int newPos = 0; + + if (EqualFilename()(filename, lastRunConfigName())) + label = L"<" + _("Last session") + L">"; + else + { + //workaround wxWidgets 2.9 bug on GTK screwing up the client data if the list box is sorted: + label = getFormattedHistoryElement(filename); + //"linear insertion sort": + for (; newPos < m_listBoxHistory->GetCount(); ++newPos) + if (label.CmpNoCase(m_listBoxHistory->GetString(newPos)) < 0) + break; + } + + assert(!m_listBoxHistory->IsSorted()); + m_listBoxHistory->Insert(label, newPos, new wxClientHistoryData(filename, ++lastUseIndexMax)); + selections.insert(selections.begin() + newPos, true); } } @@ -2702,7 +2749,7 @@ bool MainDialog::trySaveConfig(const Zstring* fileNameGui) //return true if save } catch (const xmlAccess::FfsXmlError& e) { - wxMessageBox(e.toString().c_str(), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR, this); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); return false; } } @@ -2762,7 +2809,7 @@ bool MainDialog::trySaveBatchConfig(const Zstring* fileNameBatch) } catch (const xmlAccess::FfsXmlError& e) { - wxMessageBox(e.toString().c_str(), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR, this); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); return false; } } @@ -2779,18 +2826,14 @@ bool MainDialog::saveOldConfig() //return false on user abort if (!activeCfgFilename.empty()) //only if check is active and non-default config file loaded { - bool dontAskAgain = false; - - switch (showQuestionDlg(this, - ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_NO | ReturnQuestionDlg::BUTTON_CANCEL, - replaceCpy(_("Do you want to save changes to %x?"), L"%x", fmtFileName(afterLast(activeCfgFilename, FILE_NAME_SEPARATOR))), - QuestConfig().setCaption(toWx(activeCfgFilename)). - setLabelYes(_("&Save")). - setLabelNo(_("Do&n't save")). - showCheckBox(dontAskAgain, _("Never save &changes"), ReturnQuestionDlg::BUTTON_YES))) + bool neverSaveChanges = false; + switch (showConfirmationDialog3(this, DialogInfoType::INFO, PopupDialogCfg3(). + setTitle(toWx(activeCfgFilename)). + setMainInstructions(replaceCpy(_("Do you want to save changes to %x?"), L"%x", fmtFileName(afterLast(activeCfgFilename, FILE_NAME_SEPARATOR)))). + setCheckBox(neverSaveChanges, _("Never save &changes"), ConfirmationButton3::DO_IT), + _("&Save"), _("Do&n't save"))) { - case ReturnQuestionDlg::BUTTON_YES: - + case ConfirmationButton3::DO_IT: //save using namespace xmlAccess; switch (getXmlType(activeCfgFilename)) //throw() { @@ -2803,12 +2846,13 @@ bool MainDialog::saveOldConfig() //return false on user abort assert(false); return false; } + break; - case ReturnQuestionDlg::BUTTON_NO: - globalCfg.optDialogs.popupOnConfigChange = !dontAskAgain; + case ConfirmationButton3::DONT_DO_IT: //don't save + globalCfg.optDialogs.popupOnConfigChange = !neverSaveChanges; break; - case ReturnQuestionDlg::BUTTON_CANCEL: + case ConfirmationButton3::CANCEL: return false; } } @@ -2830,7 +2874,7 @@ void MainDialog::OnConfigLoad(wxCommandEvent& event) wxEmptyString, utfCvrtTo<wxString>(beforeLast(activeCfgFilename, FILE_NAME_SEPARATOR)), //set default dir: empty string if "activeConfigFiles" is empty or has no path separator wxEmptyString, - wxString(L"FreeFileSync (*.ffs_gui;*.ffs_batch)|*.ffs_gui;*.ffs_batch") + L"|" +_("All files") + L" (*.*)|*", + wxString(L"FreeFileSync (*.ffs_gui; *.ffs_batch)|*.ffs_gui;*.ffs_batch") + L"|" +_("All files") + L" (*.*)|*", wxFD_OPEN | wxFD_MULTIPLE); if (filePicker.ShowModal() == wxID_OK) @@ -2935,16 +2979,16 @@ bool MainDialog::loadConfiguration(const std::vector<Zstring>& filenames) //flashStatusInformation(("Configuration loaded")); -> irrelevant!? return true; } - catch (const xmlAccess::FfsXmlError& error) + catch (const xmlAccess::FfsXmlError& e) { - if (error.getSeverity() == xmlAccess::FfsXmlError::WARNING) + if (e.getSeverity() == xmlAccess::FfsXmlError::WARNING) { - wxMessageBox(error.toString(), L"FreeFileSync - " + _("Warning"), wxOK | wxICON_WARNING, this); + showNotificationDialog(this, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); setConfig(newGuiCfg, filenames); setLastUsedConfig(filenames, xmlAccess::XmlGuiConfig()); //simulate changed config due to parsing errors } else - wxMessageBox(error.toString(), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR, this); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); return false; } } @@ -2972,7 +3016,7 @@ void MainDialog::deleteSelectedCfgHistoryItems() void MainDialog::OnCfgHistoryRightClick(wxMouseEvent& event) { ContextMenu menu; - menu.addItem(_("Delete"), [this] { deleteSelectedCfgHistoryItems(); }); + menu.addItem(_("Delete") + L"\tDel", [this] { deleteSelectedCfgHistoryItems(); }); menu.popup(*this); } @@ -3083,12 +3127,7 @@ void MainDialog::setConfig(const xmlAccess::XmlGuiConfig& newGuiCfg, const std:: //folderHistoryLeft->addItem(currentCfg.mainCfg.firstPair.leftDirectory); //folderHistoryRight->addItem(currentCfg.mainCfg.firstPair.rightDirectory); - //clear existing additional folder pairs - clearAddFolderPairs(); - - //set additional pairs - addFolderPair(currentCfg.mainCfg.additionalPairs); - + setAddFolderPairs(currentCfg.mainCfg.additionalPairs); //read GUI layout m_checkBoxHideExcluded->SetValue(currentCfg.hideExcludedItems); @@ -3175,9 +3214,7 @@ void MainDialog::OnShowExcluded(wxCommandEvent& event) void MainDialog::OnConfigureFilter(wxCommandEvent& event) { - if (showFilterDialog(this, - true, //is main filter dialog - currentCfg.mainCfg.globalFilter) == ReturnSmallDlg::BUTTON_OKAY) + if (showFilterDialog(this, currentCfg.mainCfg.globalFilter, _("Filter")) == ReturnSmallDlg::BUTTON_OKAY) { updateGlobalFilterButton(); //refresh global filter icon applyFilterConfig(); //re-apply filter @@ -3343,12 +3380,12 @@ void MainDialog::updateGlobalFilterButton() if (!isNullFilter(currentCfg.mainCfg.globalFilter)) { setImage(*m_bpButtonFilter, getResourceImage(L"filter")); - m_bpButtonFilter->SetToolTip(_("Filter is active") + L" (F10)"); + m_bpButtonFilter->SetToolTip(_("Filter") + L" (F10) (" + _("Active") + L")"); } else { setImage(*m_bpButtonFilter, greyScale(getResourceImage(L"filter"))); - m_bpButtonFilter->SetToolTip(_("No filter selected")+ L" (F10)"); + m_bpButtonFilter->SetToolTip(_("Filter") + L" (F10) (" + _("None") + L")"); } } @@ -3399,7 +3436,6 @@ void MainDialog::OnCompare(wxCommandEvent& event) } catch (GuiAbortProcess&) { - flashStatusInformation(_("Operation aborted")); // if (m_buttonCompare->IsShownOnScreen()) m_buttonCompare->SetFocus(); updateGui(); //refresh grid in ANY case! (also on abort) return; @@ -3433,7 +3469,7 @@ void MainDialog::updateTopButtonImages() { auto updateButton = [&](wxBitmapButton& btn, const wxBitmap& bmp, const wxString& variantName, bool makeGrey) { - wxImage labelImage = createImageFromText(btn.GetLabel(), btn.GetFont(), makeGrey ? wxColor(128, 128, 128) : wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT)); + wxImage labelImage = createImageFromText(btn.GetLabel(), btn.GetFont(), wxSystemSettings::GetColour(makeGrey ? wxSYS_COLOUR_GRAYTEXT : wxSYS_COLOUR_BTNTEXT)); wxImage variantImage = createImageFromText(variantName, wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxBOLD), wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT)); wxImage descrImage = stackImages(labelImage, variantImage, ImageStackLayout::VERTICAL, ImageStackAlignment::CENTER); @@ -3527,6 +3563,7 @@ void MainDialog::OnSyncSettings(wxCommandEvent& event) if (showSyncConfigDlg(this, currentCfg.mainCfg.cmpConfig.compareVar, currentCfg.mainCfg.syncCfg, + _("Synchronization Settings"), ¤tCfg.handleError, &ewfCfg) == ReturnSyncConfig::BUTTON_OKAY) //optional input parameter { @@ -3561,7 +3598,7 @@ void MainDialog::OnCmpSettings(wxCommandEvent& event) CompConfig cmpConfigNew = currentCfg.mainCfg.cmpConfig; - if (zen::showCompareCfgDialog(this, cmpConfigNew) == ReturnSmallDlg::BUTTON_OKAY && + if (zen::showCompareCfgDialog(this, cmpConfigNew, _("Comparison Settings")) == ReturnSmallDlg::BUTTON_OKAY && //check if settings were changed at all cmpConfigNew != currentCfg.mainCfg.cmpConfig) { @@ -3590,10 +3627,10 @@ void MainDialog::OnStartSync(wxCommandEvent& event) { bool dontShowAgain = false; - if (zen::showSyncPreviewDlg(this, - getConfig().mainCfg.getSyncVariantName(), - zen::SyncStatistics(folderCmp), - dontShowAgain) != ReturnSmallDlg::BUTTON_OKAY) + if (zen::showSyncConfirmationDlg(this, + getConfig().mainCfg.getSyncVariantName(), + zen::SyncStatistics(folderCmp), + dontShowAgain) != ReturnSmallDlg::BUTTON_OKAY) return; globalCfg.optDialogs.confirmSyncStart = !dontShowAgain; @@ -3613,6 +3650,8 @@ void MainDialog::OnStartSync(wxCommandEvent& event) SyncStatusHandler statusHandler(this, //throw GuiAbortProcess globalCfg.lastSyncsLogFileSizeMax, currentCfg.handleError, + globalCfg.automaticRetryCount, + globalCfg.automaticRetryDelay, xmlAccess::extractJobName(activeCfgFilename), guiCfg.mainCfg.onCompletion, globalCfg.gui.onCompletionHistory); @@ -3645,7 +3684,7 @@ void MainDialog::OnStartSync(wxCommandEvent& event) globalCfg.verifyFileCopy, globalCfg.copyLockedFiles, globalCfg.copyFilePermissions, - globalCfg.transactionalFileCopy, + globalCfg.failsafeFileCopy, globalCfg.runWithBackgroundPriority, syncProcessCfg, folderCmp, @@ -3938,9 +3977,9 @@ void MainDialog::applySyncConfig() if (warningActive) { bool dontWarnAgain = false; - if (showWarningDlg(this, - ReturnWarningDlg::BUTTON_IGNORE, warning, dontWarnAgain) == ReturnWarningDlg::BUTTON_IGNORE) - warningActive = !dontWarnAgain; + + showNotificationDialog(this, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(warning).setCheckBox(dontWarnAgain, _("&Don't show this warning again"))); + warningActive = !dontWarnAgain; } }); @@ -3948,6 +3987,40 @@ void MainDialog::applySyncConfig() } +void MainDialog::OnMenuFindItem(wxCommandEvent& event) //CTRL + F +{ + showFindPanel(); +} + + +void MainDialog::OnSearchGridEnter(wxCommandEvent& event) +{ + startFindNext(); +} + + +void MainDialog::OnHideSearchPanel(wxCommandEvent& event) +{ + hideFindPanel(); +} + + +void MainDialog::OnSearchPanelKeyPressed(wxKeyEvent& event) +{ + switch (event.GetKeyCode()) + { + case WXK_RETURN: + case WXK_NUMPAD_ENTER: //catches ENTER keys while focus is on *any* part of m_panelSearch! Seems to obsolete OnHideSearchPanel()! + startFindNext(); + return; + case WXK_ESCAPE: + hideFindPanel(); + return; + } + event.Skip(); +} + + void MainDialog::showFindPanel() //CTRL + F or F3 with empty search phrase { auiMgr.GetPane(m_panelSearch).Show(); @@ -4011,43 +4084,19 @@ void MainDialog::startFindNext() //F3 or ENTER in m_textCtrlSearchTxt else { showFindPanel(); - wxMessageBox(replaceCpy(_("Cannot find %x"), L"%x", L"\"" + searchString + L"\"", false), _("Find"), wxOK, this); + showNotificationDialog(this, DialogInfoType::INFO, PopupDialogCfg(). + setTitle(_("Find")). + setMainInstructions(replaceCpy(_("Cannot find %x"), L"%x", L"\"" + searchString + L"\"", false))); } } } -void MainDialog::OnSearchGridEnter(wxCommandEvent& event) -{ - startFindNext(); -} - - -void MainDialog::OnHideSearchPanel(wxCommandEvent& event) -{ - hideFindPanel(); -} - - -void MainDialog::OnSearchPanelKeyPressed(wxKeyEvent& event) -{ - switch (event.GetKeyCode()) - { - case WXK_RETURN: - case WXK_NUMPAD_ENTER: //catches ENTER keys while focus is on *any* part of m_panelSearch! Seems to obsolete OnHideSearchPanel()! - startFindNext(); - return; - case WXK_ESCAPE: - hideFindPanel(); - return; - } - event.Skip(); -} - - void MainDialog::OnAddFolderPair(wxCommandEvent& event) { - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif std::vector<FolderPairEnh> newPairs; newPairs.push_back(getConfig().mainCfg.firstPair); @@ -4061,7 +4110,7 @@ void MainDialog::OnAddFolderPair(wxCommandEvent& event) cfgEmpty.localFilter); //keep sequence to update GUI as last step - addFolderPair(newPairs, true); //add pair in front of additonal pairs + addAddFolderPair(newPairs, true); //add pair in front of additonal pairs } @@ -4069,7 +4118,9 @@ void MainDialog::OnRemoveTopFolderPair(wxCommandEvent& event) { if (!additionalFolderPairs.empty()) { - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif //get settings from second folder pair const FolderPairEnh cfgSecond = getEnhancedPair(additionalFolderPairs[0]); @@ -4088,7 +4139,9 @@ void MainDialog::OnRemoveTopFolderPair(wxCommandEvent& event) void MainDialog::OnRemoveFolderPair(wxCommandEvent& event) { - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif const wxObject* const eventObj = event.GetEventObject(); //find folder pair originating the event for (auto it = additionalFolderPairs.begin(); it != additionalFolderPairs.end(); ++it) @@ -4102,7 +4155,9 @@ void MainDialog::OnRemoveFolderPair(wxCommandEvent& event) void MainDialog::updateGuiForFolderPair() { - wxWindowUpdateLocker dummy(this); +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif //adapt delete top folder pair button m_bpButtonRemovePair->Show(!additionalFolderPairs.empty()); @@ -4118,8 +4173,9 @@ void MainDialog::updateGuiForFolderPair() m_bpButtonAltSyncCfg ->Show(showLocalCfgFirstPair); m_bpButtonLocalFilter->Show(showLocalCfgFirstPair); setImage(*m_bpButtonSwapSides, getResourceImage(showLocalCfgFirstPair ? L"swap_slim" : L"swap")); - m_panelTopMiddle->Layout(); //both required to update button size for calculations below!!! - m_panelDirectoryPairs->Layout(); // -> updates size of stretched m_panelTopLeft! + + //update sub-panel sizes for calculations below!!! + m_panelTopMiddle->GetSizer()->SetSizeHints(m_panelTopMiddle); //~=Fit() + SetMinSize() int addPairMinimalHeight = 0; int addPairOptimalHeight = 0; @@ -4151,17 +4207,16 @@ void MainDialog::updateGuiForFolderPair() auiMgr.GetPane(m_panelDirectoryPairs).MinSize(-1, firstPairHeight + addPairMinimalHeight); auiMgr.Update(); - m_scrolledWindowFolderPairs->Fit(); //adjust scrolled window size - - //m_scrolledWindowFolderPairs->Layout(); //adjust stuff inside scrolled window - m_panelDirectoryPairs->Layout(); + //it seems there is no GetSizer()->SetSizeHints(this)/Fit() required due to wxAui "magic" + //=> *massive* perf improvement on OS X! } -void MainDialog::addFolderPair(const std::vector<FolderPairEnh>& newPairs, bool addFront) +void MainDialog::addAddFolderPair(const std::vector<FolderPairEnh>& newPairs, bool addFront) { - wxWindowUpdateLocker dummy(m_panelDirectoryPairs); //avoid display distortion - //wxWindowUpdateLocker dummy2(m_panelGrids); // +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(m_panelDirectoryPairs); //leads to GUI corruption problems on Linux/OS X! +#endif std::vector<FolderPairPanel*> newEntries; @@ -4211,32 +4266,21 @@ void MainDialog::addFolderPair(const std::vector<FolderPairEnh>& newPairs, bool void MainDialog::removeAddFolderPair(size_t pos) { - wxWindowUpdateLocker dummy(m_panelDirectoryPairs); //avoid display distortion - //wxWindowUpdateLocker dummy2(m_panelGrids); // +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(m_panelDirectoryPairs); //leads to GUI corruption problems on Linux/OS X! +#endif if (pos < additionalFolderPairs.size()) { - //remove folder pairs from window FolderPairPanel* panel = additionalFolderPairs[pos]; - //const int pairHeight = panel->GetSize().GetHeight(); bSizerAddFolderPairs->Detach(panel); //Remove() does not work on Window*, so do it manually - additionalFolderPairs.erase(additionalFolderPairs.begin() + pos); //remove element from vector + additionalFolderPairs.erase(additionalFolderPairs.begin() + pos); //more (non-portable) wxWidgets bullshit: on OS X wxWindow::Destroy() screws up and calls "operator delete" directly rather than //the deferred deletion it is expected to do (and which is implemented correctly on Windows and Linux) //http://bb10.com/python-wxpython-devel/2012-09/msg00004.html //=> since we're in a mouse button callback of a sub-component of "panel" we need to delay deletion ourselves: processAsync2([] {}, [panel] { panel->Destroy(); }); - - //set size of scrolled window - //const size_t additionalRows = additionalFolderPairs.size(); - //if (additionalRows <= globalCfg.gui.addFolderPairCountMax) //up to "addFolderPairCountMax" additional pairs shall be shown - // m_scrolledWindowFolderPairs->SetMinSize(wxSize(-1, pairHeight * static_cast<int>(additionalRows))); - - //update controls - //m_scrolledWindowFolderPairs->Fit(); //adjust scrolled window size - //m_scrolledWindowFolderPairs->Layout(); //adjust stuff inside scrolled window - //bSizer1->Layout(); } updateGuiForFolderPair(); @@ -4245,21 +4289,24 @@ void MainDialog::removeAddFolderPair(size_t pos) } -void MainDialog::clearAddFolderPairs() +void MainDialog::setAddFolderPairs(const std::vector<zen::FolderPairEnh>& newPairs) { - wxWindowUpdateLocker dummy(m_panelDirectoryPairs); //avoid display distortion - //wxWindowUpdateLocker dummy2(m_panelGrids); // +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(m_panelDirectoryPairs); //leads to GUI corruption problems on Linux/OS X! +#endif additionalFolderPairs.clear(); bSizerAddFolderPairs->Clear(true); - updateGuiForFolderPair(); - //m_scrolledWindowFolderPairs->SetMinSize(wxSize(-1, 0)); - //bSizer1->Layout(); + //updateGuiForFolderPair(); -> already called in addAddFolderPair() + + addAddFolderPair(newPairs); } + //######################################################################################################## + //menu events void MainDialog::OnMenuGlobalSettings(wxCommandEvent& event) { @@ -4303,7 +4350,7 @@ void MainDialog::OnMenuExportFileList(wxCommandEvent& event) header += BYTE_ORDER_MARK_UTF8; //base folders - header += fmtValue(_("Folder pairs")) + '\n' ; + header += fmtValue(_("Folder Pairs")) + '\n' ; std::for_each(begin(folderCmp), end(folderCmp), [&](BaseDirPair& baseDirObj) { @@ -4398,7 +4445,7 @@ void MainDialog::OnMenuExportFileList(wxCommandEvent& event) } catch (const FileError& e) { - wxMessageBox(e.toString(), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR, this); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } } } @@ -4433,7 +4480,9 @@ void MainDialog::OnLayoutWindowAsync(wxIdleEvent& event) //execute just once per startup! Disconnect(wxEVT_IDLE, wxIdleEventHandler(MainDialog::OnLayoutWindowAsync), nullptr, this); - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif //adjust folder pair distortion on startup std::for_each(additionalFolderPairs.begin(), additionalFolderPairs.end(), diff --git a/ui/main_dlg.h b/ui/main_dlg.h index 72762515..110f42b6 100644 --- a/ui/main_dlg.h +++ b/ui/main_dlg.h @@ -93,9 +93,9 @@ private: void removeObsoleteCfgHistoryItems(const std::vector<Zstring>& filenames); void removeCfgHistoryItems(const std::vector<Zstring>& filenames); - void addFolderPair(const std::vector<zen::FolderPairEnh>& newPairs, bool addFront = false); + void addAddFolderPair(const std::vector<zen::FolderPairEnh>& newPairs, bool addFront = false); void removeAddFolderPair(size_t pos); - void clearAddFolderPairs(); + void setAddFolderPairs(const std::vector<zen::FolderPairEnh>& newPairs); void updateGuiForFolderPair(); //helper method: add usability by showing/hiding buttons related to folder pairs @@ -238,6 +238,7 @@ private: //menu events virtual void OnMenuGlobalSettings(wxCommandEvent& event) override; virtual void OnMenuExportFileList(wxCommandEvent& event) override; + virtual void OnMenuFindItem (wxCommandEvent& event) override; virtual void OnMenuCheckVersion (wxCommandEvent& event) override; virtual void OnMenuCheckVersionAutomatically(wxCommandEvent& event) override; virtual void OnMenuAbout (wxCommandEvent& event) override; diff --git a/ui/msg_popup.cpp b/ui/msg_popup.cpp deleted file mode 100644 index 7fa1550f..00000000 --- a/ui/msg_popup.cpp +++ /dev/null @@ -1,354 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "msg_popup.h" -#include <wx+/mouse_move_dlg.h> -#include <wx+/std_button_order.h> -#include "gui_generated.h" -#include "../lib/resources.h" - -using namespace zen; - -namespace -{ -void setAsStandard(wxButton& btn) -{ - btn.SetDefault(); - btn.SetFocus(); -} -} - - -class ErrorDlg : public MessageDlgGenerated -{ -public: - ErrorDlg(wxWindow* parent, - int activeButtons, - const wxString& messageText, - const wxString& caption, //optional - bool* ignoreNextErrors); - -private: - virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnErrorDlg::BUTTON_CANCEL); } - virtual void OnCancel(wxCommandEvent& event) { EndModal(ReturnErrorDlg::BUTTON_CANCEL); } - virtual void OnButtonAffirmative(wxCommandEvent& event); - virtual void OnButtonNegative (wxCommandEvent& event); - virtual void OnCheckBoxClick(wxCommandEvent& event) { updateGui(); event.Skip(); } - void updateGui(); - - bool* ignoreErrors; - wxButton& buttonRetry; // - wxButton& buttonIgnore; // map generic controls - wxCheckBox& checkBoxIgnoreErrors; // -}; - - -ErrorDlg::ErrorDlg(wxWindow* parent, int activeButtons, const wxString& messageText, const wxString& caption, bool* ignoreNextErrors) : - MessageDlgGenerated(parent), - ignoreErrors(ignoreNextErrors), - buttonRetry (*m_buttonAffirmative), - buttonIgnore(*m_buttonNegative), - checkBoxIgnoreErrors(*m_checkBoxCustom) -{ -#ifdef ZEN_WIN - new zen::MouseMoveWindow(*this); //allow moving main dialog by clicking (nearly) anywhere...; ownership passed to "this" -#endif - - SetTitle(!caption.empty() ? caption : _("Error")); - m_bitmapMsgType->SetBitmap(getResourceImage(L"msg_error")); - m_textCtrlMessage->SetValue(messageText); - checkBoxIgnoreErrors.SetLabel(_("&Ignore subsequent errors")); - buttonIgnore.SetLabel(_("&Ignore")); - buttonRetry .SetLabel(_("&Retry")); - //buttonIgnore.SetId(wxID_IGNORE); -> setting id after button creation breaks "mouse snap to" functionality - //buttonRetry .SetId(wxID_RETRY); -> also wxWidgets docs seem to hide some info: "Normally, the identifier should be provided on creation and should not be modified subsequently." - - if (ignoreNextErrors) - checkBoxIgnoreErrors.SetValue(*ignoreNextErrors); - else - checkBoxIgnoreErrors.Hide(); - - if (~activeButtons & ReturnErrorDlg::BUTTON_IGNORE) - { - buttonIgnore.Hide(); - checkBoxIgnoreErrors.Hide(); - } - - if (~activeButtons & ReturnErrorDlg::BUTTON_RETRY) - buttonRetry.Hide(); - - if (~activeButtons & ReturnErrorDlg::BUTTON_CANCEL) - m_buttonCancel->Hide(); - - //set button focus precedence - if (activeButtons & ReturnErrorDlg::BUTTON_RETRY) - setAsStandard(buttonRetry); - else if (activeButtons & ReturnErrorDlg::BUTTON_IGNORE) - setAsStandard(buttonIgnore); - else if (activeButtons & ReturnErrorDlg::BUTTON_CANCEL) - setAsStandard(*m_buttonCancel); - - //set std order after button visibility was set - setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(&buttonRetry).setNegative(&buttonIgnore).setCancel(m_buttonCancel)); - - updateGui(); - Fit(); //child-element widths have changed: image was set -} - - -void ErrorDlg::updateGui() -{ - //button doesn't make sense when checkbox is set! - buttonRetry.Enable(!checkBoxIgnoreErrors.GetValue()); -} - - -void ErrorDlg::OnButtonAffirmative(wxCommandEvent& event) //retry -{ - if (ignoreErrors) - *ignoreErrors = checkBoxIgnoreErrors.GetValue(); - EndModal(ReturnErrorDlg::BUTTON_RETRY); -} - - -void ErrorDlg::OnButtonNegative(wxCommandEvent& event) //ignore -{ - if (ignoreErrors) - *ignoreErrors = checkBoxIgnoreErrors.GetValue(); - EndModal(ReturnErrorDlg::BUTTON_IGNORE); -} - - -ReturnErrorDlg::ButtonPressed zen::showErrorDlg(wxWindow* parent, int activeButtons, const wxString& messageText, bool* ignoreNextErrors) -{ - ErrorDlg errorDlg(parent, activeButtons, messageText, wxString(), ignoreNextErrors); - errorDlg.Raise(); - return static_cast<ReturnErrorDlg::ButtonPressed>(errorDlg.ShowModal()); -} - -//######################################################################################## - -ReturnFatalErrorDlg::ButtonPressed zen::showFatalErrorDlg(wxWindow* parent, int activeButtons, const wxString& messageText, bool* ignoreNextErrors) -{ - ErrorDlg errorDlg(parent, activeButtons, messageText, _("Fatal Error"), ignoreNextErrors); - errorDlg.Raise(); - return static_cast<ReturnFatalErrorDlg::ButtonPressed>(errorDlg.ShowModal()); -} - -//######################################################################################## - -class WarningDlg : public MessageDlgGenerated -{ -public: - WarningDlg(wxWindow* parent, int activeButtons, const wxString& messageText, bool& dontShowAgain); - -private: - virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnWarningDlg::BUTTON_CANCEL); } - virtual void OnCancel(wxCommandEvent& event) { EndModal(ReturnWarningDlg::BUTTON_CANCEL); } - virtual void OnButtonAffirmative(wxCommandEvent& event); - virtual void OnButtonNegative (wxCommandEvent& event); - virtual void OnCheckBoxClick(wxCommandEvent& event) { updateGui(); event.Skip(); } - void updateGui(); - - bool& dontShowAgain; - wxButton& buttonSwitch; // - wxButton& buttonIgnore; //map generic controls - wxCheckBox& checkBoxDontShowAgain; // -}; - - -WarningDlg::WarningDlg(wxWindow* parent, int activeButtons, const wxString& messageText, bool& dontShowDlgAgain) : - MessageDlgGenerated(parent), - dontShowAgain(dontShowDlgAgain), - buttonSwitch(*m_buttonAffirmative), - buttonIgnore(*m_buttonNegative), - checkBoxDontShowAgain(*m_checkBoxCustom) -{ -#ifdef ZEN_WIN - new zen::MouseMoveWindow(*this); //allow moving main dialog by clicking (nearly) anywhere...; ownership passed to "this" -#endif - - SetTitle(_("Warning")); - m_bitmapMsgType->SetBitmap(getResourceImage(L"msg_warning")); - m_textCtrlMessage->SetValue(messageText); - checkBoxDontShowAgain.SetLabel(_("&Don't show this warning again")); - buttonIgnore.SetLabel(_("&Ignore")); - buttonSwitch.SetLabel(_("&Switch")); - //buttonIgnore.SetId(wxID_IGNORE); -> see comment in ErrorDlg - //buttonSwitch.SetId(wxID_MORE); - - checkBoxDontShowAgain.SetValue(dontShowAgain); - - if (~activeButtons & ReturnWarningDlg::BUTTON_IGNORE) - { - buttonIgnore.Hide(); - checkBoxDontShowAgain.Hide(); - } - - if (~activeButtons & ReturnWarningDlg::BUTTON_SWITCH) - buttonSwitch.Hide(); - - if (~activeButtons & ReturnWarningDlg::BUTTON_CANCEL) - m_buttonCancel->Hide(); - - //set button focus precedence - if (activeButtons & ReturnWarningDlg::BUTTON_IGNORE) - setAsStandard(buttonIgnore); - else if (activeButtons & ReturnWarningDlg::BUTTON_CANCEL) - setAsStandard(*m_buttonCancel); - - //set std order after button visibility was set - setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(&buttonSwitch).setNegative(&buttonIgnore).setCancel(m_buttonCancel)); - - updateGui(); - Fit(); //child-element widths have changed: image was set -} - - -void WarningDlg::updateGui() -{ - //button doesn't make sense when checkbox is set! - buttonSwitch.Enable(!checkBoxDontShowAgain.GetValue()); -} - - -void WarningDlg::OnButtonAffirmative(wxCommandEvent& event) //switch -{ - dontShowAgain = checkBoxDontShowAgain.GetValue(); - EndModal(ReturnWarningDlg::BUTTON_SWITCH); -} - - -void WarningDlg::OnButtonNegative(wxCommandEvent& event) //ignore -{ - dontShowAgain = checkBoxDontShowAgain.GetValue(); - EndModal(ReturnWarningDlg::BUTTON_IGNORE); -} - - -ReturnWarningDlg::ButtonPressed zen::showWarningDlg(wxWindow* parent, int activeButtons, const wxString& messageText, bool& dontShowAgain) -{ - WarningDlg warningDlg(parent, activeButtons, messageText, dontShowAgain); - warningDlg.Raise(); - return static_cast<ReturnWarningDlg::ButtonPressed>(warningDlg.ShowModal()); -} - -//######################################################################################## - -class QuestionDlg : public MessageDlgGenerated -{ -public: - QuestionDlg(wxWindow* parent, int activeButtons, const wxString& messageText, const QuestConfig& cfg); - -private: - virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnQuestionDlg::BUTTON_CANCEL); } - virtual void OnCancel(wxCommandEvent& event) { EndModal(ReturnQuestionDlg::BUTTON_CANCEL); } - virtual void OnButtonAffirmative(wxCommandEvent& event); - virtual void OnButtonNegative (wxCommandEvent& event); - virtual void OnCheckBoxClick(wxCommandEvent& event) { updateGui(); event.Skip(); } - void updateGui(); - - wxButton& buttonYes; // map generic controls - wxButton& buttonNo; // - - bool* const checkBoxValue_; //optional - const int disabledButtonsWhenChecked_; -}; - - -QuestionDlg::QuestionDlg(wxWindow* parent, - int activeButtons, - const wxString& messageText, - const QuestConfig& cfg) : - MessageDlgGenerated(parent), - buttonYes(*m_buttonAffirmative), - buttonNo (*m_buttonNegative), - checkBoxValue_(cfg.checkBoxValue), - disabledButtonsWhenChecked_(cfg.disabledButtonsWhenChecked_) -{ -#ifdef ZEN_WIN - new zen::MouseMoveWindow(*this); //allow moving main dialog by clicking (nearly) anywhere...; ownership passed to "this" -#endif - assert(!cfg.caption.empty()); //"Question" is not a good caption! - SetTitle(!cfg.caption.empty()? cfg.caption : _("Question")); - m_bitmapMsgType->SetBitmap(getResourceImage(L"msg_question")); - m_textCtrlMessage->SetValue(messageText); - buttonYes.SetLabel(!cfg.labelYes.empty() ? cfg.labelYes : _("&Yes")); - buttonNo .SetLabel(!cfg.labelNo .empty() ? cfg.labelNo : _("&No")); - //buttonYes.SetId(wxID_YES); -> see comment in ErrorDlg - //buttonNo .SetId(wxID_NO); - - if (cfg.checkBoxValue) - { - m_checkBoxCustom->SetValue(*cfg.checkBoxValue); - m_checkBoxCustom->SetLabel(cfg.checkBoxLabel); - } - else - m_checkBoxCustom->Hide(); - - if (~activeButtons & ReturnQuestionDlg::BUTTON_YES) - buttonYes.Hide(); - - if (~activeButtons & ReturnQuestionDlg::BUTTON_NO) - buttonNo.Hide(); - - if (~activeButtons & ReturnQuestionDlg::BUTTON_CANCEL) - m_buttonCancel->Hide(); - - //set button focus precedence - if (activeButtons & ReturnQuestionDlg::BUTTON_YES) - setAsStandard(buttonYes); - else if (activeButtons & ReturnQuestionDlg::BUTTON_NO) - setAsStandard(buttonNo); - else if (activeButtons & ReturnQuestionDlg::BUTTON_CANCEL) - setAsStandard(*m_buttonCancel); - - //set std order after button visibility was set - setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(&buttonYes).setNegative(&buttonNo).setCancel(m_buttonCancel)); - - updateGui(); - Fit(); //child-element widths have changed: image was set -} - - -void QuestionDlg::updateGui() -{ - auto updateEnabledStatus = [&](wxButton& btn, ReturnQuestionDlg::ButtonPressed btnId) - { - if (disabledButtonsWhenChecked_ & btnId) - btn.Enable(!m_checkBoxCustom->GetValue()); - }; - updateEnabledStatus(buttonYes, ReturnQuestionDlg::BUTTON_YES); - updateEnabledStatus(buttonNo, ReturnQuestionDlg::BUTTON_NO); - updateEnabledStatus(*m_buttonCancel, ReturnQuestionDlg::BUTTON_CANCEL); -} - - -void QuestionDlg::OnButtonAffirmative(wxCommandEvent& event) //yes -{ - if (checkBoxValue_) - *checkBoxValue_ = m_checkBoxCustom->GetValue(); - EndModal(ReturnQuestionDlg::BUTTON_YES); -} - - -void QuestionDlg::OnButtonNegative(wxCommandEvent& event) //no -{ - if (checkBoxValue_) - *checkBoxValue_ = m_checkBoxCustom->GetValue(); - EndModal(ReturnQuestionDlg::BUTTON_NO); -} - - -ReturnQuestionDlg::ButtonPressed zen::showQuestionDlg(wxWindow* parent, - int activeButtons, - const wxString& messageText, - const QuestConfig& cfg) -{ - QuestionDlg qtnDlg(parent, activeButtons, messageText, cfg); - qtnDlg.Raise(); - return static_cast<ReturnQuestionDlg::ButtonPressed>(qtnDlg.ShowModal()); -} diff --git a/ui/msg_popup.h b/ui/msg_popup.h deleted file mode 100644 index d93b5002..00000000 --- a/ui/msg_popup.h +++ /dev/null @@ -1,91 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef MESSAGEPOPUP_H_820780154723456 -#define MESSAGEPOPUP_H_820780154723456 - -#include <zen/string_tools.h> -#include <wx/window.h> -#include <wx/string.h> - -class QuestionDlg; - -namespace zen -{ -//parent window, optional: support correct dialog placement above parent on multiple monitor systems - -struct ReturnErrorDlg -{ - enum ButtonPressed - { - BUTTON_RETRY = 1, - BUTTON_IGNORE = 2, - BUTTON_CANCEL = 4 - }; -}; -ReturnErrorDlg::ButtonPressed showErrorDlg(wxWindow* parent, int activeButtons, const wxString& messageText, bool* ignoreNextErrors); //ignoreNextErrors may be nullptr - - -struct ReturnFatalErrorDlg -{ - enum ButtonPressed - { - BUTTON_IGNORE = ReturnErrorDlg::BUTTON_IGNORE, - BUTTON_CANCEL = ReturnErrorDlg::BUTTON_CANCEL - }; -}; -ReturnFatalErrorDlg::ButtonPressed showFatalErrorDlg(wxWindow* parent, int activeButtons, const wxString& messageText, bool* ignoreNextErrors); //ignoreNextErrors may be nullptr - - -struct ReturnWarningDlg -{ - enum ButtonPressed - { - BUTTON_IGNORE = 1, - BUTTON_SWITCH = 2, - BUTTON_CANCEL = 4 - }; -}; -ReturnWarningDlg::ButtonPressed showWarningDlg(wxWindow* parent, int activeButtons, const wxString& messageText, bool& dontShowAgain); - - -struct ReturnQuestionDlg -{ - enum ButtonPressed - { - BUTTON_YES = 1, - BUTTON_NO = 2, - BUTTON_CANCEL = 4 - }; -}; - -class QuestConfig -{ -public: - QuestConfig() : checkBoxValue(), disabledButtonsWhenChecked_() {} - QuestConfig& setCaption (const wxString& label) { caption = label; return *this; } - QuestConfig& setLabelYes(const wxString& label) { assert(contains(label, L"&")); labelYes = label; return *this; } - QuestConfig& setLabelNo (const wxString& label) { assert(contains(label, L"&")); labelNo = label; return *this; } - QuestConfig& showCheckBox(bool& value, - const wxString& label, - int disabledButtonsWhenChecked) { assert(contains(label, L"&")); checkBoxValue = &value; checkBoxLabel = label; disabledButtonsWhenChecked_ = disabledButtonsWhenChecked; return *this; } - -private: - friend class ::QuestionDlg; - - wxString caption; - wxString labelYes; //overwrite default "Yes, No" labels - wxString labelNo; // - //optional checkbox: - bool* checkBoxValue; //in/out - wxString checkBoxLabel; //in - int disabledButtonsWhenChecked_; -}; - -ReturnQuestionDlg::ButtonPressed showQuestionDlg(wxWindow* parent, int activeButtons, const wxString& messageText, const QuestConfig& cfg = QuestConfig()); -} - -#endif //MESSAGEPOPUP_H_820780154723456 diff --git a/ui/progress_indicator.cpp b/ui/progress_indicator.cpp index 45fea4d5..efbb62f0 100644 --- a/ui/progress_indicator.cpp +++ b/ui/progress_indicator.cpp @@ -11,7 +11,6 @@ #include <wx/wupdlock.h> #include <wx/sound.h> #include <wx/clipbrd.h> -#include <wx/msgdlg.h> #include <wx/dcclient.h> #include <wx/dataobj.h> //wxTextDataObject #include <zen/basic_math.h> @@ -26,16 +25,17 @@ #include <wx+/no_flicker.h> #include <wx+/font_size.h> #include <wx+/std_button_order.h> +#include <wx+/popup_dlg.h> +#include <wx+/image_resources.h> #include <zen/file_handling.h> #include <zen/thread.h> #include "gui_generated.h" #include "../lib/ffs_paths.h" -#include "../lib/resources.h" #include "../lib/perf_check.h" #include "tray_icon.h" #include "taskbar.h" #include "exec_finished_box.h" -//#include <wx/msgdlg.h> +#include "app_icon.h" #ifdef ZEN_MAC #include <ApplicationServices/ApplicationServices.h> #endif @@ -156,8 +156,6 @@ void CompareProgressDialog::Pimpl::updateStatusPanelNow() if (!syncStat_) //no comparison running!! return; - //wxWindowUpdateLocker dummy(this) -> not needed - const wxString& scannedObjects = toGuiString(syncStat_->getObjectsCurrent(ProcessCallback::PHASE_SCANNING)); auto setTitle = [&](const wxString& title) @@ -410,8 +408,6 @@ enum ColumnTypeMsg //Grid data implementation referencing MessageView class GridDataMessages : public GridData { - static const int COLUMN_BORDER_LEFT = 4; //for left-aligned text - public: GridDataMessages(const std::shared_ptr<MessageView>& msgView) : msgView_(msgView) {} @@ -439,7 +435,7 @@ public: case TYPE_ERROR: return _("Error"); case TYPE_FATAL_ERROR: - return _("Fatal Error"); + return _("Serious Error"); } break; @@ -449,7 +445,7 @@ public: return wxEmptyString; } - virtual void renderCell(Grid& grid, wxDC& dc, const wxRect& rect, size_t row, ColumnType colType) + virtual void renderCell(wxDC& dc, const wxRect& rect, size_t row, ColumnType colType, bool selected) override { wxRect rectTmp = rect; @@ -499,15 +495,15 @@ public: case COL_TYPE_MSG_TEXT: { - rectTmp.x += COLUMN_BORDER_LEFT; - rectTmp.width -= COLUMN_BORDER_LEFT; + rectTmp.x += COLUMN_GAP_LEFT; + rectTmp.width -= COLUMN_GAP_LEFT; drawCellText(dc, rectTmp, getValue(row, colType), true); } break; } } - virtual int getBestSize(wxDC& dc, size_t row, ColumnType colType) + virtual int getBestSize(wxDC& dc, size_t row, ColumnType colType) override { // -> synchronize renderCell() <-> getBestSize() @@ -516,13 +512,13 @@ public: switch (static_cast<ColumnTypeMsg>(colType)) { case COL_TYPE_MSG_TIME: - return 2 * COLUMN_BORDER_LEFT + dc.GetTextExtent(getValue(row, colType)).GetWidth(); + return 2 * COLUMN_GAP_LEFT + dc.GetTextExtent(getValue(row, colType)).GetWidth(); case COL_TYPE_MSG_CATEGORY: return getResourceImage(L"msg_info_small").GetWidth(); case COL_TYPE_MSG_TEXT: - return COLUMN_BORDER_LEFT + dc.GetTextExtent(getValue(row, colType)).GetWidth(); + return COLUMN_GAP_LEFT + dc.GetTextExtent(getValue(row, colType)).GetWidth(); } return 0; } @@ -531,7 +527,7 @@ public: { wxClientDC dc(&grid.getMainWin()); dc.SetFont(grid.getMainWin().GetFont()); - return 2 * COLUMN_BORDER_LEFT + dc.GetTextExtent(formatTime<wxString>(FORMAT_TIME)).GetWidth(); + return 2 * COLUMN_GAP_LEFT + dc.GetTextExtent(formatTime<wxString>(FORMAT_TIME)).GetWidth(); } static int getColumnCategoryDefaultWidth() @@ -544,7 +540,7 @@ public: return std::max(getResourceImage(L"msg_info_small").GetHeight(), grid.getMainWin().GetCharHeight() + 2) + 1; //+ some space + bottom border } - virtual wxString getToolTip(size_t row, ColumnType colType) const + virtual wxString getToolTip(size_t row, ColumnType colType) const override { MessageView::LogEntryView entry = {}; if (msgView_ && msgView_->getEntry(row, entry)) @@ -717,7 +713,7 @@ private: } catch (const std::bad_alloc& e) { - wxMessageBox(_("Out of memory.") + L" " + utfCvrtTo<std::wstring>(e.what()), L"FreeFileSync - " + _("Error"), wxOK | wxICON_ERROR); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setMainInstructions(_("Out of memory.") + L" " + utfCvrtTo<std::wstring>(e.what()))); } } @@ -745,8 +741,13 @@ public: //return; timeNow = timeNowMs; - if (!samples.empty() && samples.rbegin()->second == value) - return; //don't insert duplicate values + + //don't allow for more samples per second than there are UI updates (handles duplicate inserts, too!) + if (!samples.empty() && timeNowMs / UI_UPDATE_INTERVAL == samples.rbegin()->first / UI_UPDATE_INTERVAL) + { + samples.rbegin()->second = value; + return; + } samples.insert(samples.end(), std::make_pair(timeNowMs, value)); //time is "expected" to be monotonously ascending //documentation differs about whether "hint" should be before or after the to be inserted element! @@ -757,7 +758,7 @@ public: } private: - virtual std::pair<double, double> getRangeX() const final + virtual std::pair<double, double> getRangeX() const override { if (samples.empty()) return std::make_pair(0.0, 0.0); @@ -772,7 +773,7 @@ private: upperEndMs / 1000.0); } - virtual Opt<CurvePoint> getLessEq(double x) const final //x: seconds since begin + virtual Opt<CurvePoint> getLessEq(double x) const override //x: seconds since begin { const long timex = std::floor(x * 1000); //------ add artifical last sample value ------- @@ -790,7 +791,7 @@ private: return CurvePoint(it->first / 1000.0, it->second); } - virtual Opt<CurvePoint> getGreaterEq(double x) const final + virtual Opt<CurvePoint> getGreaterEq(double x) const override { const long timex = std::ceil(x * 1000); //------ add artifical last sample value ------- @@ -820,9 +821,9 @@ public: void setValue(long xTimeNowMs, double yCurrent, double yTotal) { x = xTimeNowMs / 1000.0; yCurrent_ = yCurrent; yTotal_ = yTotal; } private: - virtual std::pair<double, double> getRangeX() const final { return std::make_pair(x, x); } //conceptually just a vertical line! + virtual std::pair<double, double> getRangeX() const override { return std::make_pair(x, x); } //conceptually just a vertical line! - virtual void getPoints(double minX, double maxX, int pixelWidth, std::vector<CurvePoint>& points) const final + virtual void getPoints(double minX, double maxX, int pixelWidth, std::vector<CurvePoint>& points) const override { //points.push_back(CurvePoint(-1, 0)); //points.push_back(CurvePoint(0, 0)); @@ -854,9 +855,9 @@ public: void setValue(long xTimeNowMs, double yTotal) { x = xTimeNowMs / 1000.0; yTotal_ = yTotal; } private: - virtual std::pair<double, double> getRangeX() const final { return std::make_pair(x, x); } //conceptually just a vertical line! + virtual std::pair<double, double> getRangeX() const override { return std::make_pair(x, x); } //conceptually just a vertical line! - virtual void getPoints(double minX, double maxX, int pixelWidth, std::vector<CurvePoint>& points) const final + virtual void getPoints(double minX, double maxX, int pixelWidth, std::vector<CurvePoint>& points) const override { if (x <= maxX) { @@ -940,7 +941,7 @@ struct LabelFormatterTimeElapsed : public LabelFormatter { if (!drawLabel_) return wxString(); return timeElapsed < 60 ? - replaceCpy(_P("1 sec", "%x sec", numeric::round(timeElapsed)), L"%x", zen::numberTo<std::wstring>(numeric::round(timeElapsed))) : + _P("1 sec", "%x sec", numeric::round(timeElapsed)) : timeElapsed < 3600 ? wxTimeSpan::Seconds(timeElapsed).Format( L"%M:%S") : wxTimeSpan::Seconds(timeElapsed).Format(L"%H:%M:%S"); @@ -953,7 +954,7 @@ private: template <class TopLevelDialog> //can be a wxFrame or wxDialog -class SyncProgressDialogImpl : private TopLevelDialog, public SyncProgressDialog +class SyncProgressDialogImpl : public TopLevelDialog, public SyncProgressDialog /*we need derivation, not composition! 1. SyncProgressDialogImpl IS a wxFrame/wxDialog 2. implement virtual ~wxFrame() @@ -1092,9 +1093,9 @@ SyncProgressDialogImpl<TopLevelDialog>::SyncProgressDialogImpl(long style, //wxF this->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler (SyncProgressDialogImpl<TopLevelDialog>::OnClose)); this->Connect(wxEVT_ICONIZE, wxIconizeEventHandler(SyncProgressDialogImpl<TopLevelDialog>::OnIconize)); this->Connect(wxEVT_CHAR_HOOK, wxKeyEventHandler(SyncProgressDialogImpl::OnKeyPressed), nullptr, this); - pnl.m_buttonClose ->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncProgressDialogImpl::OnOkay ), NULL, this); - pnl.m_buttonPause ->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncProgressDialogImpl::OnPause ), NULL, this); - pnl.m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncProgressDialogImpl::OnCancel), NULL, this); + pnl.m_buttonClose->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncProgressDialogImpl::OnOkay ), NULL, this); + pnl.m_buttonPause->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncProgressDialogImpl::OnPause ), NULL, this); + pnl.m_buttonStop ->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncProgressDialogImpl::OnCancel), NULL, this); pnl.m_bpButtonMinimizeToTray->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncProgressDialogImpl::OnMinimizeToTray), NULL, this); #ifdef ZEN_WIN @@ -1108,11 +1109,9 @@ SyncProgressDialogImpl<TopLevelDialog>::SyncProgressDialogImpl(long style, //wxF if (parentFrame_) parentFrameTitleBackup = parentFrame_->GetTitle(); //save old title (will be used as progress indicator) - pnl.m_animCtrlSyncing->SetAnimation(GlobalResources::instance().aniWorking); + pnl.m_animCtrlSyncing->SetAnimation(getResourceAnimation(L"working")); pnl.m_animCtrlSyncing->Play(); - this->SetIcon(GlobalResources::instance().programIconFFS); - this->EnableCloseButton(false); //this is NOT honored on OS X or during system shutdown on Windows! timeElapsed.Start(); //measure total time @@ -1129,7 +1128,7 @@ SyncProgressDialogImpl<TopLevelDialog>::SyncProgressDialogImpl(long style, //wxF pnl.m_panelItemsProcessed->Hide(); pnl.m_buttonClose ->Show(false); //set std order after button visibility was set - setStandardButtonOrder(*pnl.bSizerStdButtons, StdButtons().setAffirmative(pnl.m_buttonPause).setCancel(pnl.m_buttonCancel)); + setStandardButtonOrder(*pnl.bSizerStdButtons, StdButtons().setAffirmative(pnl.m_buttonPause).setCancel(pnl.m_buttonStop)); pnl.m_bpButtonMinimizeToTray->SetBitmapLabel(getResourceImage(L"minimize_to_tray")); @@ -1175,7 +1174,7 @@ SyncProgressDialogImpl<TopLevelDialog>::SyncProgressDialogImpl(long style, //wxF updateDialogStatus(); //null-status will be shown while waiting for dir locks - this->Fit(); + this->GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() pnl.Layout(); if (showProgress) @@ -1183,11 +1182,11 @@ SyncProgressDialogImpl<TopLevelDialog>::SyncProgressDialogImpl(long style, //wxF this->Show(); #ifdef ZEN_MAC ProcessSerialNumber psn = { 0, kCurrentProcess }; + ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon (consider non-silent batch mode) - ::SetFrontProcess(&psn); //why isn't this covered by wxWindows::Raise()?? #endif - pnl.m_buttonCancel->SetFocus(); //don't steal focus when starting in sys-tray! + pnl.m_buttonStop->SetFocus(); //don't steal focus when starting in sys-tray! //clear gui flicker, remove dummy texts: window must be visible to make this work! updateGuiInt(true); //at least on OS X a real Yield() is required to flush pending GUI updates; Update() is not enough @@ -1208,8 +1207,9 @@ SyncProgressDialogImpl<TopLevelDialog>::~SyncProgressDialogImpl() parentFrame_->Show(); #ifdef ZEN_MAC ProcessSerialNumber psn = { 0, kCurrentProcess }; + ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly + //why isn't this covered by wxWindows::Raise()?? ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon (consider GUI mode with "close progress dialog") - ::SetFrontProcess(&psn); //why isn't this covered by wxWindows::Raise()?? #endif //if (parentFrame_->IsIconized()) //caveat: if window is maximized calling Iconize(false) will erroneously un-maximize! // parentFrame_->Iconize(false); @@ -1228,9 +1228,9 @@ void SyncProgressDialogImpl<TopLevelDialog>::OnKeyPressed(wxKeyEvent& event) wxCommandEvent dummy(wxEVT_COMMAND_BUTTON_CLICKED); //simulate click on abort button - if (pnl.m_buttonCancel->IsShown()) //delegate to "cancel" button if available + if (pnl.m_buttonStop->IsShown()) //delegate to "cancel" button if available { - if (wxEvtHandler* handler = pnl.m_buttonCancel->GetEventHandler()) + if (wxEvtHandler* handler = pnl.m_buttonStop->GetEventHandler()) handler->ProcessEvent(dummy); return; } @@ -1342,7 +1342,7 @@ std::wstring getDialogPhaseText(const Statistics* syncStat, bool paused, SyncPro switch (finalResult) { case SyncProgressDialog::RESULT_ABORTED: - return _("Aborted"); + return _("Stopped"); case SyncProgressDialog::RESULT_FINISHED_WITH_ERROR: case SyncProgressDialog::RESULT_FINISHED_WITH_WARNINGS: case SyncProgressDialog::RESULT_FINISHED_WITH_SUCCESS: @@ -1357,29 +1357,29 @@ template <class TopLevelDialog> void SyncProgressDialogImpl<TopLevelDialog>::setExternalStatus(const wxString& status, const wxString& progress) //progress may be empty! { //sys tray: order "top-down": jobname, status, progress - wxString newTrayInfo = jobName_.empty() ? status : L"\"" + jobName_ + L"\"\n" + status; + wxString systrayTooltip = jobName_.empty() ? status : L"\"" + jobName_ + L"\"\n" + status; if (!progress.empty()) - newTrayInfo += L" " + progress; + systrayTooltip += L" " + progress; //window caption/taskbar; inverse order: progress, status, jobname - wxString newCaption = progress.empty() ? status : progress + L" - " + status; + wxString title = progress.empty() ? status : progress + L" - " + status; if (!jobName_.empty()) - newCaption += L" - \"" + jobName_ + L"\""; + title += L" - \"" + jobName_ + L"\""; //systray tooltip, if window is minimized if (trayIcon.get()) - trayIcon->setToolTip(newTrayInfo); + trayIcon->setToolTip(systrayTooltip); //show text in dialog title (and at the same time in taskbar) if (parentFrame_) { - if (parentFrame_->GetTitle() != newCaption) - parentFrame_->SetTitle(newCaption); + if (parentFrame_->GetTitle() != title) + parentFrame_->SetTitle(title); } //always set a title: we don't wxGTK to show "nameless window" instead - if (this->GetTitle() != newCaption) - this->SetTitle(newCaption); + if (this->GetTitle() != title) + this->SetTitle(title); } @@ -1389,8 +1389,6 @@ void SyncProgressDialogImpl<TopLevelDialog>::updateGuiInt(bool allowYield) if (!syncStat_) //sync not running return; - //wxWindowUpdateLocker dummy(this); -> not needed - bool layoutChanged = false; //avoid screen flicker by calling layout() only if necessary const long timeNow = timeElapsed.Time(); @@ -1614,7 +1612,7 @@ void SyncProgressDialogImpl<TopLevelDialog>::updateDialogStatus() //depends on " switch (finalResult) { case RESULT_ABORTED: - setStatusBitmap(L"status_aborted", _("Synchronization aborted")); + setStatusBitmap(L"status_aborted", _("Synchronization stopped")); break; case RESULT_FINISHED_WITH_ERROR: @@ -1729,7 +1727,7 @@ void SyncProgressDialogImpl<TopLevelDialog>::processHasFinished(SyncResult resul const long timeDelta = timeElapsed.Time() - phaseStartMs; //we need to consider "time within current phase" not total "timeElapsed"! const wxString overallBytesPerSecond = timeDelta == 0 ? wxString() : filesizeToShortString(dataCurrent * 1000 / timeDelta) + _("/sec"); - const wxString overallItemsPerSecond = timeDelta == 0 ? wxString() : replaceCpy(_("%x items"), L"%x", formatThreeDigitPrecision(itemsCurrent * 1000.0 / timeDelta)) + _("/sec"); + const wxString overallItemsPerSecond = timeDelta == 0 ? wxString() : replaceCpy(_("%x items/sec"), L"%x", formatThreeDigitPrecision(itemsCurrent * 1000.0 / timeDelta)); pnl.m_panelGraphBytes->setAttributes(pnl.m_panelGraphBytes->getAttributes().setCornerText(overallBytesPerSecond, Graph2D::CORNER_TOP_LEFT)); pnl.m_panelGraphItems->setAttributes(pnl.m_panelGraphItems->getAttributes().setCornerText(overallItemsPerSecond, Graph2D::CORNER_TOP_LEFT)); @@ -1762,8 +1760,8 @@ void SyncProgressDialogImpl<TopLevelDialog>::processHasFinished(SyncResult resul this->EnableCloseButton(true); pnl.m_bpButtonMinimizeToTray->Hide(); - pnl.m_buttonCancel->Disable(); - pnl.m_buttonCancel->Hide(); + pnl.m_buttonStop->Disable(); + pnl.m_buttonStop->Hide(); pnl.m_buttonPause->Disable(); pnl.m_buttonPause->Hide(); pnl.m_buttonClose->Show(); @@ -1807,7 +1805,7 @@ void SyncProgressDialogImpl<TopLevelDialog>::processHasFinished(SyncResult resul if (log.getItemCount(TYPE_ERROR | TYPE_FATAL_ERROR) > 0) pnl.m_notebookResult->ChangeSelection(posLog); - //this->Fit(); //not a good idea: will shrink even if window is maximized or was enlarged by the user + //GetSizer()->SetSizeHints(this); //~=Fit() //not a good idea: will shrink even if window is maximized or was enlarged by the user pnl.Layout(); pnl.m_panelProgress->Layout(); @@ -1971,8 +1969,9 @@ void SyncProgressDialogImpl<TopLevelDialog>::resumeFromSystray() #ifdef ZEN_MAC ProcessSerialNumber psn = { 0, kCurrentProcess }; + ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly + //why isn't this covered by wxWindows::Raise()?? ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon again - ::SetFrontProcess(&psn); //why isn't this covered by wxWindows::Raise()?? #endif } } @@ -1993,7 +1992,13 @@ SyncProgressDialog* createProgressDialog(zen::AbortCallback& abortCb, [&](wxDialog& progDlg) { return parentWindow; }, abortCb, notifyWindowTerminate, syncStat, parentWindow, showProgress, jobName, execWhenFinished, execFinishedHistory); else //FFS batch job - return new SyncProgressDialogImpl<wxFrame>(wxDEFAULT_FRAME_STYLE, + { + auto dlg = new SyncProgressDialogImpl<wxFrame>(wxDEFAULT_FRAME_STYLE, [](wxFrame& progDlg) { return &progDlg; }, abortCb, - notifyWindowTerminate, syncStat, parentWindow, showProgress, jobName, execWhenFinished, execFinishedHistory); + notifyWindowTerminate, syncStat, parentWindow, showProgress, jobName, execWhenFinished, execFinishedHistory); + + //only top level windows should have an icon: + dlg->SetIcon(getFfsIcon()); + return dlg; + } } diff --git a/ui/small_dlgs.cpp b/ui/small_dlgs.cpp index 19ad5417..df2e3e7a 100644 --- a/ui/small_dlgs.cpp +++ b/ui/small_dlgs.cpp @@ -18,10 +18,10 @@ #include <wx+/image_tools.h> #include <wx+/font_size.h> #include <wx+/std_button_order.h> +#include <wx+/popup_dlg.h> +#include <wx+/image_resources.h> #include "gui_generated.h" -#include "msg_popup.h" #include "custom_grid.h" -#include "../lib/resources.h" #include "../algorithm.h" #include "../synchronization.h" #include "../lib/help_provider.h" @@ -39,7 +39,7 @@ public: private: virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } virtual void OnOK (wxCommandEvent& event) { EndModal(ReturnSmallDlg::BUTTON_OKAY); } - virtual void OnDonate(wxCommandEvent& event) { wxLaunchDefaultBrowser(L"https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zenju@gmx.de&no_shipping=1&lc=US¤cy_code=EUR"); } + virtual void OnDonate(wxCommandEvent& event) { wxLaunchDefaultBrowser(L"http://freefilesync.sourceforge.net/donate.php"); } }; @@ -56,7 +56,7 @@ AboutDlg::AboutDlg(wxWindow* parent) : AboutDlgGenerated(parent) m_bitmap13->SetBitmap(getResourceImage(L"gpl")); //m_bitmapSmiley->SetBitmap(getResourceImage(L"smiley")); - m_animCtrlWink->SetAnimation(GlobalResources::instance().aniWink); + m_animCtrlWink->SetAnimation(getResourceAnimation(L"wink")); m_animCtrlWink->Play(); //create language credits @@ -95,12 +95,9 @@ AboutDlg::AboutDlg(wxWindow* parent) : AboutDlgGenerated(parent) build += L" x86"; assert_static(zen::is32BitBuild || zen::is64BitBuild); - m_build->SetLabel(replaceCpy(_("Build: %x"), L"%x", build)); + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() - Fit(); //child-element widths have changed: image was set - - //generate logo - //-> put *after* first Fit() + //generate logo: put *after* first Fit() Layout(); //make sure m_panelLogo has final width (required by wxGTK) wxBitmap bmpLogo; @@ -111,13 +108,22 @@ AboutDlg::AboutDlg(wxWindow* parent) : AboutDlgGenerated(parent) } { wxMemoryDC dc(bmpLogo); - dc.SetTextForeground(wxColor(2, 2, 2)); //for some unknown reason SetBitmap below seems to replace wxBLACK with white on accessibility high contrast schemes!! - dc.SetFont(wxFont(wxNORMAL_FONT->GetPointSize() * 1.8, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, L"Tahoma")); - dc.DrawLabel(wxString(L"FreeFileSync ") + zen::currentVersion, wxNullBitmap, wxRect(0, 0, bmpLogo.GetWidth(), bmpLogo.GetHeight()), wxALIGN_CENTER); + + wxImage labelImage = createImageFromText(wxString(L"FreeFileSync ") + zen::currentVersion, + wxFont(wxNORMAL_FONT->GetPointSize() * 1.8, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, L"Tahoma"), + *wxBLACK); //accessibility: align foreground/background colors! + wxImage buildImage = createImageFromText(replaceCpy(_("Build: %x"), L"%x", build), + *wxNORMAL_FONT, + *wxBLACK); + wxImage dynImage = stackImages(labelImage, buildImage, ImageStackLayout::VERTICAL, ImageStackAlignment::CENTER, 0); + + dc.DrawBitmap(dynImage, wxPoint((bmpLogo.GetWidth () - dynImage.GetWidth ()) / 2, + (bmpLogo.GetHeight() - dynImage.GetHeight()) / 2)); } m_bitmapLogo->SetBitmap(bmpLogo); - Fit(); //child-element widths have changed: image was set + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + //=> works like a charm for GTK2 with window resizing problems and title bar corruption; e.g. Debian!!! m_buttonClose->SetFocus(); //on GTK ESC is only associated with wxID_OK correctly if we set at least *any* focus at all!!! } @@ -135,16 +141,16 @@ class FilterDlg : public FilterDlgGenerated { public: FilterDlg(wxWindow* parent, - bool isGlobalFilter, - FilterConfig& filter); + FilterConfig& filter, + const wxString& title); ~FilterDlg() {} private: - virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } - virtual void OnCancel (wxCommandEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } - virtual void OnHelp (wxCommandEvent& event) { displayHelpEntry(L"html/Exclude Items.html", this); } - virtual void OnClear (wxCommandEvent& event); - virtual void OnApply (wxCommandEvent& event); + virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } + virtual void OnCancel(wxCommandEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } + virtual void OnHelpShowExamples(wxHyperlinkEvent& event) { displayHelpEntry(L"html/Exclude Items.html", this); } + virtual void OnClear (wxCommandEvent& event); + virtual void OnOkay (wxCommandEvent& event); virtual void OnUpdateChoice(wxCommandEvent& event) { updateGui(); } virtual void OnUpdateNameFilter(wxCommandEvent& event) { updateGui(); } @@ -161,8 +167,8 @@ private: FilterDlg::FilterDlg(wxWindow* parent, - bool isGlobalFilter, //global or local filter dialog? - FilterConfig& filter) : + FilterConfig& filter, + const wxString& title) : FilterDlgGenerated(parent), outputRef(filter) //just hold reference { @@ -171,7 +177,7 @@ FilterDlg::FilterDlg(wxWindow* parent, #endif setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonOk).setCancel(m_buttonCancel)); - setRelativeFontSize(*m_staticTextHeader, 1.25); + SetTitle(title); #ifndef __WXGTK__ //wxWidgets holds portability promise by not supporting for multi-line controls...not m_textCtrlInclude->SetMaxLength(0); //allow large filter entries! @@ -182,7 +188,7 @@ FilterDlg::FilterDlg(wxWindow* parent, m_textCtrlExclude->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(FilterDlg::onKeyEvent), nullptr, this); enumTimeDescr. - add(UTIME_NONE, L"(" + _("Inactive") + L")"). //meta options should be enclosed in parentheses + add(UTIME_NONE, L"(" + _("None") + L")"). //meta options should be enclosed in parentheses add(UTIME_TODAY, _("Today")). // add(UTIME_THIS_WEEK, _("This week")). add(UTIME_THIS_MONTH, _("This month")). @@ -190,28 +196,20 @@ FilterDlg::FilterDlg(wxWindow* parent, add(UTIME_LAST_X_DAYS, _("Last x days")); enumSizeDescr. - add(USIZE_NONE, L"(" + _("Inactive") + L")"). //meta options should be enclosed in parentheses + add(USIZE_NONE, L"(" + _("None") + L")"). //meta options should be enclosed in parentheses add(USIZE_BYTE, _("Byte")). add(USIZE_KB, _("KB")). add(USIZE_MB, _("MB")); - m_bitmap26->SetBitmap(getResourceImage(L"filter")); - m_bpButtonHelp->SetBitmapLabel(getResourceImage(L"help")); + m_bitmapFilter->SetBitmap(getResourceImage(L"filter")); setFilter(filter); m_buttonOk->SetFocus(); - //adapt header for global/local dialog - // if (isGlobalFilter_) - // m_staticTexHeader->SetLabel("Filter all folder pairs")); - // else - // m_staticTexHeader->SetLabel("Filter single folder pair")); - // - - m_staticTextHeader->SetLabel(_("Filter")); + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + //=> works like a charm for GTK2 with window resizing problems and title bar corruption; e.g. Debian!!! - Fit(); //child-element widths have changed: image was set Layout(); } @@ -252,7 +250,7 @@ void FilterDlg::updateGui() m_spinCtrlMinSize ->Enable(activeCfg.unitSizeMin != USIZE_NONE); m_spinCtrlMaxSize ->Enable(activeCfg.unitSizeMax != USIZE_NONE); - m_buttonClear ->Enable(!(activeCfg == FilterConfig())); + m_buttonClear->Enable(!(activeCfg == FilterConfig())); } @@ -292,21 +290,33 @@ void FilterDlg::OnClear(wxCommandEvent& event) } -void FilterDlg::OnApply(wxCommandEvent& event) +void FilterDlg::OnOkay(wxCommandEvent& event) { - //changes to mainDialog are only committed when the OK button is pressed - outputRef = getFilter(); + FilterConfig cfg = getFilter(); + + //parameter validation: + + //include filter must not be empty: + { + Zstring tmp = cfg.includeFilter; + trim(tmp); + if (tmp.empty()) + cfg.includeFilter = FilterConfig().includeFilter; //no need to show error message, just correct user input + } + + //apply config: + outputRef = cfg; //when leaving dialog: filter and redraw grid, if filter is active EndModal(ReturnSmallDlg::BUTTON_OKAY); } -ReturnSmallDlg::ButtonPressed zen::showFilterDialog(wxWindow* parent, bool isGlobalFilter, FilterConfig& filter) +ReturnSmallDlg::ButtonPressed zen::showFilterDialog(wxWindow* parent, FilterConfig& filter, const wxString& title) { FilterDlg filterDlg(parent, - isGlobalFilter, //is main filter dialog - filter); + filter, + title); return static_cast<ReturnSmallDlg::ButtonPressed>(filterDlg.ShowModal()); } @@ -335,7 +345,6 @@ private: bool& outRefdeleteOnBothSides; bool& outRefuseRecycleBin; const TickVal tickCountStartup; - const std::int64_t ticksPerSec_; }; @@ -349,14 +358,15 @@ DeleteDialog::DeleteDialog(wxWindow* parent, rowsToDeleteOnRight(rowsOnRight), outRefdeleteOnBothSides(deleteOnBothSides), outRefuseRecycleBin(useRecycleBin), - tickCountStartup(getTicks()), - ticksPerSec_(ticksPerSec()) + tickCountStartup(getTicks()) { #ifdef ZEN_WIN new zen::MouseMoveWindow(*this); //allow moving main dialog by clicking (nearly) anywhere...; ownership passed to "this" #endif setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonOK).setCancel(m_buttonCancel)); + setMainInstructionFont(*m_staticTextHeader); + m_checkBoxDeleteBothSides->SetValue(deleteOnBothSides); m_checkBoxUseRecycler->SetValue(useRecycleBin); @@ -373,7 +383,9 @@ DeleteDialog::DeleteDialog(wxWindow* parent, updateGui(); - Fit(); //child-element widths have changed: image was set: "fit" only *once* on construction! + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + //=> works like a charm for GTK2 with window resizing problems and title bar corruption; e.g. Debian!!! + Layout(); m_buttonOK->SetFocus(); @@ -382,7 +394,9 @@ DeleteDialog::DeleteDialog(wxWindow* parent, void DeleteDialog::updateGui() { - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif const std::pair<Zstring, int> delInfo = zen::deleteFromGridAndHDPreview(rowsToDeleteOnLeft, rowsToDeleteOnRight, @@ -392,16 +406,19 @@ void DeleteDialog::updateGui() { header = _P("Do you really want to move the following item to the recycle bin?", "Do you really want to move the following %x items to the recycle bin?", delInfo.second); - m_bitmapDeleteType->SetBitmap(getResourceImage(L"recycler")); + m_bitmapDeleteType->SetBitmap(getResourceImage(L"delete_recycler")); + m_buttonOK->SetLabel(_("Move")); //no access key needed: use ENTER! } else { header = _P("Do you really want to delete the following item?", "Do you really want to delete the following %x items?", delInfo.second); - m_bitmapDeleteType->SetBitmap(getResourceImage(L"deleteFile")); + m_bitmapDeleteType->SetBitmap(getResourceImage(L"delete_permanently")); + m_buttonOK->SetLabel(_("Delete")); } - replace(header, L"%x", toGuiString(delInfo.second)); m_staticTextHeader->SetLabel(header); + //it seems like Wrap() needs to be reapplied after SetLabel() + m_staticTextHeader->Wrap(460); const wxString& fileList = utfCvrtTo<wxString>(delInfo.first); m_textCtrlFileList->ChangeValue(fileList); @@ -412,16 +429,19 @@ void DeleteDialog::updateGui() => another Unity problem like the following? http://trac.wxwidgets.org/ticket/14823 "Menu not disabled when showing modal dialogs in wxGTK under Unity" */ + Layout(); + Refresh(); //needed after m_buttonOK label change } void DeleteDialog::OnOK(wxCommandEvent& event) { //additional safety net, similar to Windows Explorer: time delta between DEL and ENTER must be at least 50ms to avoid accidental deletion! - const TickVal now = getTicks(); //0 on error - if (now.isValid() && tickCountStartup.isValid() && ticksPerSec_ != 0) - if (dist(tickCountStartup, now) * 1000 / ticksPerSec_ < 50) + const TickVal now = getTicks(); //0 on error + std::int64_t tps = ticksPerSec(); // + if (now.isValid() && tickCountStartup.isValid() && tps != 0) + if (dist(tickCountStartup, now) * 1000 / tps < 50) return; outRefuseRecycleBin = m_checkBoxUseRecycler->GetValue(); @@ -458,13 +478,13 @@ ReturnSmallDlg::ButtonPressed zen::showDeleteDialog(wxWindow* parent, //######################################################################################## -class SyncPreviewDlg : public SyncConfirmationDlgGenerated +class SyncConfirmationDlg : public SyncConfirmationDlgGenerated { public: - SyncPreviewDlg(wxWindow* parent, - const wxString& variantName, - const zen::SyncStatistics& st, - bool& dontShowAgain); + SyncConfirmationDlg(wxWindow* parent, + const wxString& variantName, + const zen::SyncStatistics& st, + bool& dontShowAgain); private: virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } virtual void OnCancel(wxCommandEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } @@ -474,10 +494,10 @@ private: }; -SyncPreviewDlg::SyncPreviewDlg(wxWindow* parent, - const wxString& variantName, - const SyncStatistics& st, - bool& dontShowAgain) : +SyncConfirmationDlg::SyncConfirmationDlg(wxWindow* parent, + const wxString& variantName, + const SyncStatistics& st, + bool& dontShowAgain) : SyncConfirmationDlgGenerated(parent), m_dontShowAgain(dontShowAgain) { @@ -486,7 +506,7 @@ SyncPreviewDlg::SyncPreviewDlg(wxWindow* parent, #endif setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonStartSync).setCancel(m_buttonCancel)); - //setRelativeFontSize(*m_buttonStartSync, 1.5); + setMainInstructionFont(*m_staticTextHeader); m_bitmapSync->SetBitmap(getResourceImage(L"sync")); m_staticTextVariant->SetLabel(variantName); @@ -516,31 +536,32 @@ SyncPreviewDlg::SyncPreviewDlg(wxWindow* parent, setValue(*m_staticTextUpdateRight, st.getUpdate<RIGHT_SIDE>(), *m_bitmapUpdateRight, L"so_update_right_small"); setValue(*m_staticTextDeleteRight, st.getDelete<RIGHT_SIDE>(), *m_bitmapDeleteRight, L"so_delete_right_small"); - m_panelStatistics->Layout(); //m_buttonStartSync changed => this *is* required! + m_panelStatistics->Layout(); + + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + //=> works like a charm for GTK2 with window resizing problems and title bar corruption; e.g. Debian!!! - Fit(); m_buttonStartSync->SetFocus(); } -void SyncPreviewDlg::OnStartSync(wxCommandEvent& event) +void SyncConfirmationDlg::OnStartSync(wxCommandEvent& event) { m_dontShowAgain = m_checkBoxDontShowAgain->GetValue(); EndModal(ReturnSmallDlg::BUTTON_OKAY); } -ReturnSmallDlg::ButtonPressed zen::showSyncPreviewDlg(wxWindow* parent, - const wxString& variantName, - const zen::SyncStatistics& statistics, - bool& dontShowAgain) +ReturnSmallDlg::ButtonPressed zen::showSyncConfirmationDlg(wxWindow* parent, + const wxString& variantName, + const zen::SyncStatistics& statistics, + bool& dontShowAgain) { - SyncPreviewDlg preview(parent, - variantName, - statistics, - dontShowAgain); - - return static_cast<ReturnSmallDlg::ButtonPressed>(preview.ShowModal()); + SyncConfirmationDlg dlg(parent, + variantName, + statistics, + dontShowAgain); + return static_cast<ReturnSmallDlg::ButtonPressed>(dlg.ShowModal()); } //######################################################################################## @@ -548,13 +569,13 @@ ReturnSmallDlg::ButtonPressed zen::showSyncPreviewDlg(wxWindow* parent, class CompareCfgDialog : public CmpCfgDlgGenerated { public: - CompareCfgDialog(wxWindow* parent, CompConfig& cmpConfig); + CompareCfgDialog(wxWindow* parent, CompConfig& cmpConfig, const wxString& caption); private: virtual void OnOkay(wxCommandEvent& event); virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } virtual void OnCancel(wxCommandEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } - virtual void OnShowHelp(wxCommandEvent& event) { displayHelpEntry(L"html/Comparison Settings.html", this); } + virtual void OnHelpComparisonSettings(wxHyperlinkEvent& event) { displayHelpEntry(L"html/Comparison Settings.html", this); } virtual void OnTimeSize(wxCommandEvent& event) { compareVar = CMP_BY_TIME_SIZE; updateGui(); } virtual void OnContent (wxCommandEvent& event) { compareVar = CMP_BY_CONTENT; updateGui(); } @@ -571,7 +592,7 @@ private: CompareCfgDialog::CompareCfgDialog(wxWindow* parent, - CompConfig& cmpConfig) : + CompConfig& cmpConfig, const wxString& title) : CmpCfgDlgGenerated(parent), cmpConfigOut(cmpConfig), compareVar(cmpConfig.compareVar) @@ -584,7 +605,7 @@ CompareCfgDialog::CompareCfgDialog(wxWindow* parent, setRelativeFontSize(*m_toggleBtnTimeSize, 1.25); setRelativeFontSize(*m_toggleBtnContent, 1.25); - m_bpButtonHelp->SetBitmapLabel(getResourceImage(L"help")); + SetTitle(title); enumDescrHandleSyml. add(SYMLINK_EXCLUDE, _("Exclude")). @@ -597,7 +618,9 @@ CompareCfgDialog::CompareCfgDialog(wxWindow* parent, // Move(wxPoint(position.x, std::max(0, position.y - (m_buttonTimeSize->GetScreenPosition() - GetScreenPosition()).y))); updateGui(); - Fit(); + + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + //=> works like a charm for GTK2 with window resizing problems and title bar corruption; e.g. Debian!!! m_buttonOkay->SetFocus(); } @@ -656,13 +679,13 @@ void CompareCfgDialog::OnContentDouble(wxMouseEvent& event) } -ReturnSmallDlg::ButtonPressed zen::showCompareCfgDialog(wxWindow* parent, CompConfig& cmpConfig) +ReturnSmallDlg::ButtonPressed zen::showCompareCfgDialog(wxWindow* parent, CompConfig& cmpConfig, const wxString& title) { - CompareCfgDialog syncDlg(parent, cmpConfig); + CompareCfgDialog syncDlg(parent, cmpConfig, title); return static_cast<ReturnSmallDlg::ButtonPressed>(syncDlg.ShowModal()); } -//######################################################################################## +//######################################################################################## class GlobalSettingsDlg : public GlobalSettingsDlgGenerated { @@ -677,7 +700,11 @@ private: virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnSmallDlg::BUTTON_CANCEL); } virtual void OnAddRow(wxCommandEvent& event); virtual void OnRemoveRow(wxCommandEvent& event); + virtual void OnHelpShowExamples(wxHyperlinkEvent& event) { displayHelpEntry(L"html/External Applications.html", this); } void onResize(wxSizeEvent& event); + void updateGui(); + + virtual void OnToggleAutoRetryCount(wxCommandEvent& event) { updateGui(); } void setExtApp(const xmlAccess::ExternalApps& extApp); xmlAccess::ExternalApps getExtApp(); @@ -695,26 +722,30 @@ GlobalSettingsDlg::GlobalSettingsDlg(wxWindow* parent, xmlAccess::XmlGlobalSetti #endif setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonOkay).setCancel(m_buttonCancel)); - setRelativeFontSize(*m_staticTextHeader, 1.25); + //setMainInstructionFont(*m_staticTextHeader); m_bitmapSettings ->SetBitmap (getResourceImage(L"settings")); m_bpButtonAddRow ->SetBitmapLabel(getResourceImage(L"item_add")); m_bpButtonRemoveRow ->SetBitmapLabel(getResourceImage(L"item_remove")); setBitmapTextLabel(*m_buttonResetDialogs, getResourceImage(L"reset_dialogs").ConvertToImage(), m_buttonResetDialogs->GetLabel()); + m_checkBoxFailSafe ->SetValue(globalSettings.failsafeFileCopy); m_checkBoxCopyLocked ->SetValue(globalSettings.copyLockedFiles); - m_checkBoxTransCopy ->SetValue(globalSettings.transactionalFileCopy); m_checkBoxCopyPermissions->SetValue(globalSettings.copyFilePermissions); + m_spinCtrlAutoRetryCount->SetValue(globalSettings.automaticRetryCount); + m_spinCtrlAutoRetryDelay->SetValue(globalSettings.automaticRetryDelay); + + setExtApp(globalSettings.gui.externelApplications); + + updateGui(); + #ifdef ZEN_WIN m_checkBoxCopyPermissions->SetLabel(_("Copy NTFS permissions")); #elif defined ZEN_LINUX || defined ZEN_MAC - m_checkBoxCopyLocked->Hide(); - m_staticTextCopyLocked->Hide(); + bSizerLockedFiles->Show(false); #endif - setExtApp(globalSettings.gui.externelApplications); - const wxString toolTip = wxString(_("Integrate external applications into context menu. The following macros are available:")) + L"\n\n" + L"%item_path% \t" + _("- full file or folder name") + L"\n" + L"%item_folder% \t" + _("- folder part only") + L"\n" + @@ -725,10 +756,12 @@ GlobalSettingsDlg::GlobalSettingsDlg(wxWindow* parent, xmlAccess::XmlGlobalSetti m_gridCustomCommand->GetGridColLabelWindow()->SetToolTip(toolTip); m_gridCustomCommand->SetMargins(0, 0); - Fit(); //child-element widths have changed: image was set + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + //=> works like a charm for GTK2 with window resizing problems and title bar corruption; e.g. Debian!!! + Layout(); - //automatically fit column width to match totl grid width + //automatically fit column width to match total grid width Connect(wxEVT_SIZE, wxSizeEventHandler(GlobalSettingsDlg::onResize), nullptr, this); wxSizeEvent dummy; onResize(dummy); @@ -739,11 +772,11 @@ GlobalSettingsDlg::GlobalSettingsDlg(wxWindow* parent, xmlAccess::XmlGlobalSetti void GlobalSettingsDlg::onResize(wxSizeEvent& event) { - const int widthTotal = m_gridCustomCommand->GetGridWindow()->GetClientSize().GetWidth() - 20; + const int widthTotal = m_gridCustomCommand->GetGridWindow()->GetClientSize().GetWidth(); if (widthTotal >= 0 && m_gridCustomCommand->GetCols() == 2) { - const int w0 = widthTotal / 2; + const int w0 = widthTotal * 2 / 5; //ratio 2 : 3 const int w1 = widthTotal - w0; m_gridCustomCommand->SetColumnWidth(0, w0); m_gridCustomCommand->SetColumnWidth(1, w1); @@ -755,12 +788,24 @@ void GlobalSettingsDlg::onResize(wxSizeEvent& event) } +void GlobalSettingsDlg::updateGui() +{ + const bool autoRetryActive = m_spinCtrlAutoRetryCount->GetValue() > 0; + m_staticTextAutoRetryDelay->Enable(autoRetryActive); + m_spinCtrlAutoRetryDelay->Enable(autoRetryActive); +} + + void GlobalSettingsDlg::OnOkay(wxCommandEvent& event) { //write global settings only when okay-button is pressed! - settings.copyLockedFiles = m_checkBoxCopyLocked->GetValue(); - settings.transactionalFileCopy = m_checkBoxTransCopy->GetValue(); - settings.copyFilePermissions = m_checkBoxCopyPermissions->GetValue(); + settings.failsafeFileCopy = m_checkBoxFailSafe->GetValue(); + settings.copyLockedFiles = m_checkBoxCopyLocked->GetValue(); + settings.copyFilePermissions = m_checkBoxCopyPermissions->GetValue(); + + settings.automaticRetryCount = m_spinCtrlAutoRetryCount->GetValue(); + settings.automaticRetryDelay = m_spinCtrlAutoRetryDelay->GetValue(); + settings.gui.externelApplications = getExtApp(); EndModal(ReturnSmallDlg::BUTTON_OKAY); @@ -769,9 +814,16 @@ void GlobalSettingsDlg::OnOkay(wxCommandEvent& event) void GlobalSettingsDlg::OnResetDialogs(wxCommandEvent& event) { - if (showQuestionDlg(this, ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_CANCEL, - _("Make hidden warnings and dialogs visible again?"), QuestConfig().setCaption(_("Restore hidden dialogs")).setLabelYes(_("&Restore"))) == ReturnQuestionDlg::BUTTON_YES) - settings.optDialogs.resetDialogs(); + switch (showConfirmationDialog(this, DialogInfoType::INFO, + PopupDialogCfg().setMainInstructions(_("Restore all hidden windows and warnings?")), + _("&Restore"))) + { + case ConfirmationButton::DO_IT: + settings.optDialogs.resetDialogs(); + break; + case ConfirmationButton::CANCEL: + break; + } } @@ -779,10 +831,16 @@ void GlobalSettingsDlg::OnDefault(wxCommandEvent& event) { xmlAccess::XmlGlobalSettings defaultCfg; + m_checkBoxFailSafe ->SetValue(defaultCfg.failsafeFileCopy); m_checkBoxCopyLocked ->SetValue(defaultCfg.copyLockedFiles); - m_checkBoxTransCopy ->SetValue(defaultCfg.transactionalFileCopy); m_checkBoxCopyPermissions->SetValue(defaultCfg.copyFilePermissions); + + m_spinCtrlAutoRetryCount->SetValue(defaultCfg.automaticRetryCount); + m_spinCtrlAutoRetryDelay->SetValue(defaultCfg.automaticRetryDelay); + setExtApp(defaultCfg.gui.externelApplications); + + updateGui(); } @@ -804,7 +862,6 @@ void GlobalSettingsDlg::setExtApp(const xmlAccess::ExternalApps& extApp) m_gridCustomCommand->SetCellValue(row, 0, it->first); //description m_gridCustomCommand->SetCellValue(row, 1, it->second); //commandline } - //Fit(); } @@ -825,14 +882,15 @@ xmlAccess::ExternalApps GlobalSettingsDlg::getExtApp() void GlobalSettingsDlg::OnAddRow(wxCommandEvent& event) { - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif const int selectedRow = m_gridCustomCommand->GetGridCursorRow(); if (0 <= selectedRow && selectedRow < m_gridCustomCommand->GetNumberRows()) m_gridCustomCommand->InsertRows(selectedRow); else m_gridCustomCommand->AppendRows(); - //Fit(); } @@ -840,14 +898,15 @@ void GlobalSettingsDlg::OnRemoveRow(wxCommandEvent& event) { if (m_gridCustomCommand->GetNumberRows() > 0) { - wxWindowUpdateLocker dummy(this); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! +#endif const int selectedRow = m_gridCustomCommand->GetGridCursorRow(); if (0 <= selectedRow && selectedRow < m_gridCustomCommand->GetNumberRows()) m_gridCustomCommand->DeleteRows(selectedRow); else m_gridCustomCommand->DeleteRows(m_gridCustomCommand->GetNumberRows() - 1); - //Fit(); } } @@ -945,7 +1004,9 @@ SelectTimespanDlg::SelectTimespanDlg(wxWindow* parent, Int64& timeFrom, Int64& t m_calendarTo ->SetMinSize(minSz); #endif - Fit(); + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + //=> works like a charm for GTK2 with window resizing problems and title bar corruption; e.g. Debian!!! + m_buttonOkay->SetFocus(); } diff --git a/ui/small_dlgs.h b/ui/small_dlgs.h index 397a3e41..311a7d14 100644 --- a/ui/small_dlgs.h +++ b/ui/small_dlgs.h @@ -27,7 +27,7 @@ struct ReturnSmallDlg void showAboutDialog(wxWindow* parent); -ReturnSmallDlg::ButtonPressed showFilterDialog(wxWindow* parent, bool isGlobalFilter, FilterConfig& filter); +ReturnSmallDlg::ButtonPressed showFilterDialog(wxWindow* parent, FilterConfig& filter, const wxString& caption); ReturnSmallDlg::ButtonPressed showDeleteDialog(wxWindow* parent, const std::vector<FileSystemObject*>& rowsOnLeft, @@ -35,12 +35,12 @@ ReturnSmallDlg::ButtonPressed showDeleteDialog(wxWindow* parent, bool& deleteOnBothSides, bool& useRecycleBin); -ReturnSmallDlg::ButtonPressed showSyncPreviewDlg(wxWindow* parent, - const wxString& variantName, - const SyncStatistics& statistics, - bool& dontShowAgain); +ReturnSmallDlg::ButtonPressed showSyncConfirmationDlg(wxWindow* parent, + const wxString& variantName, + const SyncStatistics& statistics, + bool& dontShowAgain); -ReturnSmallDlg::ButtonPressed showCompareCfgDialog(wxWindow* parent, CompConfig& cmpConfig); +ReturnSmallDlg::ButtonPressed showCompareCfgDialog(wxWindow* parent, CompConfig& cmpConfig, const wxString& title); ReturnSmallDlg::ButtonPressed showGlobalSettingsDlg(wxWindow* parent, xmlAccess::XmlGlobalSettings& globalSettings); diff --git a/ui/sync_cfg.cpp b/ui/sync_cfg.cpp index d0d32c18..38e583fc 100644 --- a/ui/sync_cfg.cpp +++ b/ui/sync_cfg.cpp @@ -6,7 +6,7 @@ #include "sync_cfg.h" #include <memory> -#include <zen/format_unit.h> +//#include <zen/format_unit.h> #include <wx/wupdlock.h> #include <wx+/mouse_move_dlg.h> #include <wx+/rtl.h> @@ -15,11 +15,13 @@ #include <wx+/image_tools.h> #include <wx+/font_size.h> #include <wx+/std_button_order.h> +#include <wx+/popup_dlg.h> +#include <wx+/image_resources.h> #include "gui_generated.h" #include "exec_finished_box.h" #include "dir_name.h" #include "../file_hierarchy.h" -#include "../lib/resources.h" +#include "../lib/help_provider.h" using namespace zen; using namespace xmlAccess; @@ -31,6 +33,7 @@ public: SyncCfgDialog(wxWindow* parent, CompareVariant compareVar, SyncConfig& syncCfg, + const wxString& caption, xmlAccess::OnGuiError* handleError, // ExecWhenFinishedCfg* execWhenFinished); //optional input parameter @@ -56,7 +59,7 @@ private: virtual void OnClose (wxCloseEvent& event) { EndModal(ReturnSyncConfig::BUTTON_CANCEL); } virtual void OnCancel(wxCommandEvent& event) { EndModal(ReturnSyncConfig::BUTTON_CANCEL); } - virtual void OnApply (wxCommandEvent& event); + virtual void OnOkay (wxCommandEvent& event); virtual void OnParameterChange(wxCommandEvent& event) { updateGui(); } @@ -67,6 +70,8 @@ private: virtual void OnErrorPopup (wxCommandEvent& event) { onGuiError = ON_GUIERROR_POPUP; updateGui(); } virtual void OnErrorIgnore(wxCommandEvent& event) { onGuiError = ON_GUIERROR_IGNORE; updateGui(); } + virtual void OnHelpVersioning(wxHyperlinkEvent& event) { displayHelpEntry(L"html/Versioning.html", this); } + struct Config { SyncConfig syncCfg; @@ -209,6 +214,7 @@ void updateConfigIcons(const DirectionConfig& directionCfg, SyncCfgDialog::SyncCfgDialog(wxWindow* parent, CompareVariant compareVar, SyncConfig& syncCfg, + const wxString& title, xmlAccess::OnGuiError* handleError, ExecWhenFinishedCfg* execWhenFinished) : SyncCfgDlgGenerated(parent), @@ -225,6 +231,8 @@ SyncCfgDialog::SyncCfgDialog(wxWindow* parent, #endif setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonOK).setCancel(m_buttonCancel)); + SetTitle(title); + //set icons for this dialog m_bitmapLeftOnly ->SetBitmap(mirrorIfRtl(greyScale(getResourceImage(L"cat_left_only" )))); m_bitmapRightOnly ->SetBitmap(mirrorIfRtl(greyScale(getResourceImage(L"cat_right_only" )))); @@ -263,7 +271,8 @@ SyncCfgDialog::SyncCfgDialog(wxWindow* parent, }; setConfig(newCfg); - Fit(); + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + //=> works like a charm for GTK2 with window resizing problems and title bar corruption; e.g. Debian!!! m_buttonOK->SetFocus(); } @@ -312,14 +321,16 @@ SyncCfgDialog::Config SyncCfgDialog::getConfig() const void SyncCfgDialog::updateGui() { - wxWindowUpdateLocker dummy(this); //avoid display distortion - wxWindowUpdateLocker dummy2(m_panelVersioning); //avoid display distortion +#ifdef ZEN_WIN + wxWindowUpdateLocker dummy(this); //leads to GUI corruption problems on Linux/OS X! + wxWindowUpdateLocker dummy2(m_panelVersioning); wxWindowUpdateLocker dummy3(m_bpButtonLeftOnly); wxWindowUpdateLocker dummy4(m_bpButtonRightOnly); wxWindowUpdateLocker dummy5(m_bpButtonLeftNewer); wxWindowUpdateLocker dummy6(m_bpButtonRightNewer); wxWindowUpdateLocker dummy7(m_bpButtonDifferent); wxWindowUpdateLocker dummy8(m_bpButtonConflict); +#endif const Config cfg = getConfig(); //resolve parameter ownership: some on GUI controls, others member variables @@ -400,9 +411,7 @@ void SyncCfgDialog::updateGui() } const bool versioningSelected = cfg.syncCfg.handleDeletion == DELETE_TO_VERSIONING; - bSizerVersioningNamingConvention->Show(versioningSelected); - bSizerVersioningStyle ->Show(versioningSelected); - m_panelVersioning ->Show(versioningSelected); + m_panelVersioning->Show(versioningSelected); if (versioningSelected) { @@ -440,17 +449,34 @@ void SyncCfgDialog::updateGui() } Layout(); - bSizerNamingConvention->Layout(); //[!] not handled by previous "Layout" Refresh(); //removes a few artifacts when toggling display of versioning folder - GetSizer()->SetSizeHints(this); //this works like a charm for GTK2 with window resizing problems!!! (includes call to Fit()) + + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + //=> works like a charm for GTK2 with window resizing problems and title bar corruption; e.g. Debian!!! } -void SyncCfgDialog::OnApply(wxCommandEvent& event) +void SyncCfgDialog::OnOkay(wxCommandEvent& event) { const Config cfg = getConfig(); - //write configuration to main dialog + //parameter validation: + + //check if user-defined directory for deletion was specified + if (cfg.syncCfg.handleDeletion == zen::DELETE_TO_VERSIONING) + { + Zstring versioningDir = cfg.syncCfg.versioningDirectory; + trim(versioningDir); + if (versioningDir.empty()) + { + showNotificationDialog(this, DialogInfoType::INFO, PopupDialogCfg().setMainInstructions(_("Please enter a target folder for versioning."))); + //don't show error icon to follow "Windows' encouraging tone" + m_panelVersioning->SetFocus(); + return; + } + } + + //apply config: outSyncCfg = cfg.syncCfg; if (outOptOnGuiError) @@ -471,28 +497,28 @@ void SyncCfgDialog::OnSyncTwoWayDouble(wxMouseEvent& event) { wxCommandEvent dummy; OnSyncTwoWay(dummy); - OnApply(dummy); + OnOkay(dummy); } void SyncCfgDialog::OnSyncMirrorDouble(wxMouseEvent& event) { wxCommandEvent dummy; OnSyncMirror(dummy); - OnApply(dummy); + OnOkay(dummy); } void SyncCfgDialog::OnSyncUpdateDouble(wxMouseEvent& event) { wxCommandEvent dummy; OnSyncUpdate(dummy); - OnApply(dummy); + OnOkay(dummy); } void SyncCfgDialog::OnSyncCustomDouble(wxMouseEvent& event) { wxCommandEvent dummy; OnSyncCustom(dummy); - OnApply(dummy); + OnOkay(dummy); } namespace @@ -600,14 +626,15 @@ void SyncCfgDialog::OnConflict(wxCommandEvent& event) ReturnSyncConfig::ButtonPressed zen::showSyncConfigDlg(wxWindow* parent, CompareVariant compareVar, SyncConfig& syncCfg, + const wxString& title, xmlAccess::OnGuiError* handleError, // ExecWhenFinishedCfg* execWhenFinished) //optional input parameter { SyncCfgDialog syncDlg(parent, compareVar, syncCfg, + title, handleError, execWhenFinished); - return static_cast<ReturnSyncConfig::ButtonPressed>(syncDlg.ShowModal()); } diff --git a/ui/sync_cfg.h b/ui/sync_cfg.h index ca9010d8..e56a533b 100644 --- a/ui/sync_cfg.h +++ b/ui/sync_cfg.h @@ -33,6 +33,7 @@ struct ExecWhenFinishedCfg ReturnSyncConfig::ButtonPressed showSyncConfigDlg(wxWindow* parent, CompareVariant compareVar, SyncConfig& syncCfg, + const wxString& title, xmlAccess::OnGuiError* handleError, // ExecWhenFinishedCfg* execWhenFinished); //optional input parameter } diff --git a/ui/tray_icon.cpp b/ui/tray_icon.cpp index 3826458f..28842a80 100644 --- a/ui/tray_icon.cpp +++ b/ui/tray_icon.cpp @@ -6,12 +6,14 @@ #include "tray_icon.h" #include <zen/basic_math.h> +#include <zen/i18n.h> #include <wx/taskbar.h> #include <wx/menu.h> #include <wx/icon.h> //req. by Linux #include <wx+/image_tools.h> -#include "small_dlgs.h" -#include "../lib/resources.h" +#include <wx+/image_resources.h> + +using namespace zen; namespace @@ -109,8 +111,7 @@ wxIcon generateProgressIcon(const wxImage& logo, double fraction) //generate ico enum Selection { - CONTEXT_RESTORE = 1, //wxWidgets: "A MenuItem ID of zero does not work under Mac" - CONTEXT_ABOUT = wxID_ABOUT + CONTEXT_RESTORE = 1 //wxWidgets: "A MenuItem ID of zero does not work under Mac" }; } @@ -120,7 +121,12 @@ class FfsTrayIcon::TaskBarImpl : public wxTaskBarIcon public: TaskBarImpl(const std::function<void()>& onRequestResume) : onRequestResume_(onRequestResume) { - Connect(wxEVT_TASKBAR_LEFT_DCLICK, wxCommandEventHandler(TaskBarImpl::OnDoubleClick), nullptr, this); //register double-click + Connect(wxEVT_TASKBAR_LEFT_DCLICK, wxEventHandler(TaskBarImpl::OnDoubleClick), nullptr, this); + + //Windows User Experience Guidelines: show the context menu rather than doing *nothing* on single left clicks; however: + //MSDN: "Double-clicking the left mouse button actually generates a sequence of four messages: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and WM_LBUTTONUP." + //Reference: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645606%28v=vs.85%29.aspx + //=> the only way to distinguish single left click and double-click is to wait wxSystemSettings::GetMetric(wxSYS_DCLICK_MSEC) (480ms) which is way too long! } //virtual ~TaskBarImpl(){} @@ -134,9 +140,16 @@ private: return nullptr; wxMenu* contextMenu = new wxMenu; - contextMenu->Append(CONTEXT_RESTORE, _("&Restore")); - contextMenu->AppendSeparator(); - contextMenu->Append(CONTEXT_ABOUT, _("&About")); + + wxMenuItem* defaultItem = new wxMenuItem(contextMenu, CONTEXT_RESTORE, _("&Restore")); + //wxWidgets font messup: + //1. font must be set *before* wxMenu::Append()! + //2. don't use defaultItem->GetFont(); making it bold creates a huge font size for some reason +#ifdef ZEN_WIN //no wxMenuItem::SetFont() on Linux and OS X: wasn't wxWidgets supposed to be *portable* at some point in time????? + defaultItem->SetFont(wxNORMAL_FONT->Bold()); //make default selection bold/align with double-click +#endif + contextMenu->Append(defaultItem); + //event handling contextMenu->Connect(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(TaskBarImpl::OnContextMenuSelection), nullptr, this); @@ -147,17 +160,6 @@ private: { switch (static_cast<Selection>(event.GetId())) { - case CONTEXT_ABOUT: - { - //ATTENTION: the modal dialog below does NOT disable all GUI input, e.g. user may still double-click on tray icon - //which will implicitly destroy the tray icon while still showing the modal dialog - SetEvtHandlerEnabled(false); - ZEN_ON_SCOPE_EXIT(SetEvtHandlerEnabled(true)); - - zen::showAboutDialog(nullptr); - } - break; - case CONTEXT_RESTORE: if (onRequestResume_) onRequestResume_(); @@ -165,12 +167,22 @@ private: } } - void OnDoubleClick(wxCommandEvent& event) + void OnDoubleClick(wxEvent& event) { if (onRequestResume_) onRequestResume_(); } + //void OnLeftDownClick(wxEvent& event) + //{ + // //copied from wxTaskBarIconBase::OnRightButtonDown() + // if (wxMenu* menu = CreatePopupMenu()) + // { + // PopupMenu(menu); + // delete menu; + // } + //} + std::function<void()> onRequestResume_; }; @@ -206,7 +218,7 @@ FfsTrayIcon::~FfsTrayIcon() trayIcon->RemoveIcon(); //required on Windows: unlike on OS X, wxPendingDelete does not kick in before main event loop! //use wxWidgets delayed destruction: delete during next idle loop iteration (handle late window messages, e.g. when double-clicking) - wxPendingDelete.Append(trayIcon); + wxPendingDelete.Append(trayIcon); //identical to wxTaskBarIconBase::Destroy() in wxWidgets 2.9.5 } diff --git a/ui/tree_view.cpp b/ui/tree_view.cpp index cf4eb2e8..01eb8696 100644 --- a/ui/tree_view.cpp +++ b/ui/tree_view.cpp @@ -14,8 +14,8 @@ #include <zen/format_unit.h> #include <wx+/rtl.h> #include <wx+/context_menu.h> +#include <wx+/image_resources.h> #include "../lib/icon_buffer.h" -#include "../lib/resources.h" using namespace zen; @@ -765,7 +765,7 @@ public: private: virtual size_t getRowCount() const { return treeDataView_ ? treeDataView_->linesTotal() : 0; } - virtual wxString getToolTip(size_t row, ColumnType colType) const + virtual wxString getToolTip(size_t row, ColumnType colType) const override { switch (static_cast<ColumnTypeNavi>(colType)) { @@ -818,13 +818,11 @@ private: return wxString(); } - virtual void renderColumnLabel(Grid& tree, wxDC& dc, const wxRect& rect, ColumnType colType, bool highlighted) + virtual void renderColumnLabel(Grid& tree, wxDC& dc, const wxRect& rect, ColumnType colType, bool highlighted) override { wxRect rectInside = drawColumnLabelBorder(dc, rect); drawColumnLabelBackground(dc, rectInside, highlighted); - const int COLUMN_GAP_LEFT = 4; - rectInside.x += COLUMN_GAP_LEFT; rectInside.width -= COLUMN_GAP_LEFT; drawColumnLabelText(dc, rectInside, getColumnLabel(colType)); @@ -843,7 +841,7 @@ private: static const int GAP_SIZE = 2; - virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected, bool hasFocus) + virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected) override { if (enabled) { @@ -857,7 +855,7 @@ private: clearArea(dc, rect, wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); } - virtual void renderCell(Grid& grid, wxDC& dc, const wxRect& rect, size_t row, ColumnType colType) + virtual void renderCell(wxDC& dc, const wxRect& rect, size_t row, ColumnType colType, bool selected) override { //wxRect rectTmp= drawCellBorder(dc, rect); wxRect rectTmp = rect; @@ -1012,7 +1010,7 @@ private: //have file size and item count right-justified (but don't change for RTL languages) if ((static_cast<ColumnTypeNavi>(colType) == COL_TYPE_NAVI_BYTES || - static_cast<ColumnTypeNavi>(colType) == COL_TYPE_NAVI_ITEM_COUNT) && grid.GetLayoutDirection() != wxLayout_RightToLeft) + static_cast<ColumnTypeNavi>(colType) == COL_TYPE_NAVI_ITEM_COUNT) && grid_.GetLayoutDirection() != wxLayout_RightToLeft) { rectTmp.width -= 2 * GAP_SIZE; alignment = wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL; @@ -1027,7 +1025,7 @@ private: } } - virtual int getBestSize(wxDC& dc, size_t row, ColumnType colType) + virtual int getBestSize(wxDC& dc, size_t row, ColumnType colType) override { // -> synchronize renderCell() <-> getBestSize() <-> onMouseLeft() diff --git a/version/version.h b/version/version.h index 6a201f47..1eff0d52 100644 --- a/version/version.h +++ b/version/version.h @@ -3,7 +3,7 @@ namespace zen { -const wchar_t currentVersion[] = L"5.21"; //internal linkage! +const wchar_t currentVersion[] = L"5.22"; //internal linkage! } #endif diff --git a/wx+/choice_enum.h b/wx+/choice_enum.h index f780af87..e06931d5 100644 --- a/wx+/choice_enum.h +++ b/wx+/choice_enum.h @@ -44,7 +44,7 @@ struct EnumDescrList descrList.push_back(std::make_pair(value, std::make_pair(text, tooltip))); return *this; } - typedef std::vector<std::pair<Enum, std::pair<wxString, wxString> > > DescrList; + typedef std::vector<std::pair<Enum, std::pair<wxString, wxString>>> DescrList; DescrList descrList; }; template <class Enum> void setEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value); @@ -71,15 +71,15 @@ void setEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value) ctrl.Clear(); int selectedPos = 0; - for (typename EnumDescrList<Enum>::DescrList::const_iterator i = mapping.descrList.begin(); i != mapping.descrList.end(); ++i) + for (auto it = mapping.descrList.begin(); it != mapping.descrList.end(); ++it) { - ctrl.Append(i->second.first); - if (i->first == value) + ctrl.Append(it->second.first); + if (it->first == value) { - selectedPos = i - mapping.descrList.begin(); + selectedPos = it - mapping.descrList.begin(); - if (!i->second.second.empty()) - ctrl.SetToolTip(i->second.second); + if (!it->second.second.empty()) + ctrl.SetToolTip(it->second.second); } } @@ -104,9 +104,9 @@ template <class Enum> void updateTooltipEnumVal(const EnumDescrList<Enum>& mappi { const Enum value = getEnumVal(mapping, ctrl); - for (typename EnumDescrList<Enum>::DescrList::const_iterator i = mapping.descrList.begin(); i != mapping.descrList.end(); ++i) - if (i->first == value) - ctrl.SetToolTip(i->second.second); + for (const auto& item : mapping.descrList) + if (item.first == value) + ctrl.SetToolTip(item.second.second); } } diff --git a/wx+/file_drop.h b/wx+/file_drop.h index fb56c5d9..1cc24ebd 100644 --- a/wx+/file_drop.h +++ b/wx+/file_drop.h @@ -97,12 +97,9 @@ private: { std::vector<wxString> filenames(fileArray.begin(), fileArray.end()); if (!filenames.empty()) - { //create a custom event on drop window: execute event after file dropping is completed! (after mouse is released) - FileDropEvent evt(filenames, dropWindow_, wxPoint(x, y)); if (wxEvtHandler* handler = dropWindow_.GetEventHandler()) - handler->AddPendingEvent(evt); - } + handler->AddPendingEvent(FileDropEvent(filenames, dropWindow_, wxPoint(x, y))); return true; } diff --git a/wx+/font_size.h b/wx+/font_size.h index 773be928..7bfc62fc 100644 --- a/wx+/font_size.h +++ b/wx+/font_size.h @@ -9,16 +9,78 @@ #include <zen/basic_math.h> #include <wx/window.h> +#ifdef ZEN_WIN +#include <zen/dll.h> +#include <Uxtheme.h> +#include <vsstyle.h> //TEXT_MAININSTRUCTION +#include <vssym32.h> //TMT_COLOR +#endif namespace zen { //set portable font size in multiples of the operating system's default font size +void setRelativeFontSize(wxWindow& control, double factor); +void setMainInstructionFont(wxWindow& control); //following Windows/Gnome/OS X guidelines + + + + + + + + + + + + +//###################### implementation ##################### inline void setRelativeFontSize(wxWindow& control, double factor) { - wxFont fnt = control.GetFont(); - fnt.SetPointSize(numeric::round(wxNORMAL_FONT->GetPointSize() * factor)); - control.SetFont(fnt); + wxFont font = control.GetFont(); + font.SetPointSize(numeric::round(wxNORMAL_FONT->GetPointSize() * factor)); + control.SetFont(font); +}; + + +inline +void setMainInstructionFont(wxWindow& control) +{ + wxFont font = control.GetFont(); +#ifdef ZEN_WIN //http://msdn.microsoft.com/de-DE/library/windows/desktop/aa974176#fonts + font.SetPointSize(numeric::round(wxNORMAL_FONT->GetPointSize() * 4.0 / 3)); + + //get main instruction color: don't hard-code, respect accessibility! + typedef HTHEME (WINAPI* OpenThemeDataFun )(HWND hwnd, LPCWSTR pszClassList); + typedef HRESULT (WINAPI* CloseThemeDataFun)(HTHEME hTheme); + typedef HRESULT (WINAPI* GetThemeColorFun )(HTHEME hTheme, int iPartId, int iStateId, int iPropId, COLORREF *pColor); + + const SysDllFun<OpenThemeDataFun> openThemeData (L"UxTheme.dll", "OpenThemeData"); //available with Windows XP and later + const SysDllFun<CloseThemeDataFun> closeThemeData(L"UxTheme.dll", "CloseThemeData"); + const SysDllFun<GetThemeColorFun> getThemeColor (L"UxTheme.dll", "GetThemeColor"); + if (openThemeData && closeThemeData && getThemeColor) + if (HTHEME hTheme = openThemeData(NULL, //__in HWND hwnd, + L"TEXTSTYLE")) //__in LPCWSTR pszClassList + { + ZEN_ON_SCOPE_EXIT(closeThemeData(hTheme)); + + COLORREF cr = {}; + if (getThemeColor(hTheme, //_In_ HTHEME hTheme, + TEXT_MAININSTRUCTION, // _In_ int iPartId, + 0, // _In_ int iStateId, + TMT_TEXTCOLOR, // _In_ int iPropId, + &cr) == S_OK) // _Out_ COLORREF *pColor + control.SetForegroundColour(wxColour(cr)); + } + +#elif defined ZEN_LINUX //https://developer.gnome.org/hig-book/3.2/hig-book.html#alert-text + font.SetPointSize(numeric::round(wxNORMAL_FONT->GetPointSize() * 12.0 / 11)); + font.SetWeight(wxFONTWEIGHT_BOLD); + +#elif defined ZEN_MAC //https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/AppleHIGuidelines/Windows/Windows.html#//apple_ref/doc/uid/20000961-TP10 + font.SetWeight(wxFONTWEIGHT_BOLD); +#endif + control.SetFont(font); }; } diff --git a/wx+/graph.cpp b/wx+/graph.cpp index 29ec4f36..2f5b3775 100644 --- a/wx+/graph.cpp +++ b/wx+/graph.cpp @@ -137,7 +137,7 @@ void drawXLabel(wxDC& dc, double xMin, double xMax, int blockCount, const Conver if (blockCount <= 0) return; - wxDCPenChanger dummy(dc, wxPen(wxColor(192, 192, 192))); //light grey + wxDCPenChanger dummy(dc, wxPen(wxColor(192, 192, 192))); //light grey => not accessible! but no big deal... wxDCTextColourChanger dummy2(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); //use user setting for labels const double valRangePerBlock = (xMax - xMin) / blockCount; @@ -165,7 +165,7 @@ void drawYLabel(wxDC& dc, double yMin, double yMax, int blockCount, const Conver if (blockCount <= 0) return; - wxDCPenChanger dummy(dc, wxPen(wxColor(192, 192, 192))); //light grey + wxDCPenChanger dummy(dc, wxPen(wxColor(192, 192, 192))); //light grey => not accessible! but no big deal... wxDCTextColourChanger dummy2(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); //use user setting for labels const double valRangePerBlock = (yMax - yMin) / blockCount; @@ -555,8 +555,10 @@ void Graph2D::render(wxDC& dc) const { //paint graph background (excluding label area) - wxDCPenChanger dummy (dc, wxColour(130, 135, 144)); //medium grey, the same Win7 uses for other frame borders - wxDCBrushChanger dummy2(dc, *wxWHITE); //accessibility: we have to set both back- and foreground colors or none at all! + wxDCPenChanger dummy (dc, wxColour(130, 135, 144)); //medium grey, the same Win7 uses for other frame borders => not accessible! but no big deal... + wxDCBrushChanger dummy2(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); + //accessibility: consider system text and background colors; small drawback: color of graphs is NOT connected to the background! => responsibility of client to use correct colors + dc.DrawRectangle(graphArea); graphArea.Deflate(1, 1); //attention more wxWidgets design mistakes: behavior of wxRect::Deflate depends on object being const/non-const!!! } diff --git a/wx+/graph.h b/wx+/graph.h index a752959b..84aa56cf 100644 --- a/wx+/graph.h +++ b/wx+/graph.h @@ -54,7 +54,7 @@ struct ContinuousCurveData : public CurveData virtual double getValue(double x) const = 0; private: - virtual void getPoints(double minX, double maxX, int pixelWidth, std::vector<CurvePoint>& points) const final; + virtual void getPoints(double minX, double maxX, int pixelWidth, std::vector<CurvePoint>& points) const override; }; struct SparseCurveData : public CurveData @@ -65,7 +65,7 @@ struct SparseCurveData : public CurveData virtual Opt<CurvePoint> getGreaterEq(double x) const = 0; private: - virtual void getPoints(double minX, double maxX, int pixelWidth, std::vector<CurvePoint>& points) const final; + virtual void getPoints(double minX, double maxX, int pixelWidth, std::vector<CurvePoint>& points) const override; bool addSteps_; }; @@ -75,9 +75,9 @@ struct ArrayCurveData : public SparseCurveData virtual size_t getSize() const = 0; private: - virtual std::pair<double, double> getRangeX() const final { const size_t sz = getSize(); return std::make_pair(0.0, sz == 0 ? 0.0 : sz - 1.0); } + virtual std::pair<double, double> getRangeX() const override { const size_t sz = getSize(); return std::make_pair(0.0, sz == 0 ? 0.0 : sz - 1.0); } - virtual Opt<CurvePoint> getLessEq(double x) const final + virtual Opt<CurvePoint> getLessEq(double x) const override { const size_t sz = getSize(); const size_t pos = std::min<ptrdiff_t>(std::floor(x), sz - 1); //[!] expect unsigned underflow if empty! @@ -86,7 +86,7 @@ private: return NoValue(); } - virtual Opt<CurvePoint> getGreaterEq(double x) const final + virtual Opt<CurvePoint> getGreaterEq(double x) const override { const size_t pos = std::max<ptrdiff_t>(std::ceil(x), 0); //[!] use std::max with signed type! if (pos < getSize()) @@ -99,8 +99,8 @@ struct VectorCurveData : public ArrayCurveData { std::vector<double>& refData() { return data; } private: - virtual double getValue(size_t pos) const final { return pos < data.size() ? data[pos] : 0; } - virtual size_t getSize() const final { return data.size(); } + virtual double getValue(size_t pos) const override { return pos < data.size() ? data[pos] : 0; } + virtual size_t getSize() const override { return data.size(); } std::vector<double> data; }; diff --git a/wx+/grid.cpp b/wx+/grid.cpp index c9dfbbe9..184302bf 100644 --- a/wx+/grid.cpp +++ b/wx+/grid.cpp @@ -36,30 +36,25 @@ void zen::clearArea(wxDC& dc, const wxRect& rect, const wxColor& col) dc.DrawRectangle(rect); } +const int GridData::COLUMN_GAP_LEFT = 4; + namespace { //------------ Grid Constants -------------------------------- const double MOUSE_DRAG_ACCELERATION = 1.5; //unit: [rows / (pixel * sec)] -> same value as Explorer! -const int DEFAULT_COL_LABEL_HEIGHT = 24; -const int COLUMN_BORDER_LEFT = 4; //for left-aligned text -const int COLUMN_LABEL_BORDER = COLUMN_BORDER_LEFT; +const int DEFAULT_COL_LABEL_BORDER = 6; //top + bottom border in addition to label height +const int COLUMN_LABEL_BORDER = GridData::COLUMN_GAP_LEFT; const int COLUMN_MOVE_DELAY = 5; //unit: [pixel] (from Explorer) const int COLUMN_MIN_WIDTH = 40; //only honored when resizing manually! const int ROW_LABEL_BORDER = 3; const int COLUMN_RESIZE_TOLERANCE = 6; //unit [pixel] const int COLUMN_FILL_GAP_TOLERANCE = 10; //enlarge column to fill full width when resizing -const wxColor COLOR_SELECTION_GRADIENT_NO_FOCUS_FROM = wxColour(192, 192, 192); //light grey wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW); -const wxColor COLOR_SELECTION_GRADIENT_NO_FOCUS_TO = wxColour(228, 228, 228); - -const wxColor COLOR_LABEL_GRADIENT_FROM = wxColour(200, 200, 200); //light grey -const wxColor COLOR_LABEL_GRADIENT_TO = *wxWHITE; +const wxColor COLOR_LABEL_GRADIENT_FROM = *wxWHITE; +const wxColor COLOR_LABEL_GRADIENT_TO = wxColour(200, 200, 200); //light grey -const wxColor COLOR_LABEL_GRADIENT_FROM_FOCUS = getColorSelectionGradientFrom(); -const wxColor COLOR_LABEL_GRADIENT_TO_FOCUS = COLOR_LABEL_GRADIENT_TO; - -//wxColor getColorRowLabel () { return wxPanel::GetClassDefaultAttributes ().colBg; } // -wxColor getColorMainWinBackground() { return wxListBox::GetClassDefaultAttributes().colBg; } //cannot be initialized statically on wxGTK! +const wxColor COLOR_LABEL_GRADIENT_FROM_FOCUS = COLOR_LABEL_GRADIENT_FROM; +const wxColor COLOR_LABEL_GRADIENT_TO_FOCUS = getColorSelectionGradientFrom(); const wxColor colorGridLine = wxColour(192, 192, 192); //light grey } @@ -76,25 +71,25 @@ const wxEventType zen::EVENT_GRID_MOUSE_RIGHT_UP = wxNewEventType(); const wxEventType zen::EVENT_GRID_SELECT_RANGE = wxNewEventType(); //---------------------------------------------------------------------------------------------------------------- -void GridData::renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected, bool hasFocus) +void GridData::renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected) { - drawCellBackground(dc, rect, enabled, selected, hasFocus, getColorMainWinBackground()); + drawCellBackground(dc, rect, enabled, selected, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); } -void GridData::renderCell(Grid& grid, wxDC& dc, const wxRect& rect, size_t row, ColumnType colType) +void GridData::renderCell(wxDC& dc, const wxRect& rect, size_t row, ColumnType colType, bool selected) { wxRect rectTmp = drawCellBorder(dc, rect); - rectTmp.x += COLUMN_BORDER_LEFT; - rectTmp.width -= COLUMN_BORDER_LEFT; + rectTmp.x += COLUMN_GAP_LEFT; + rectTmp.width -= COLUMN_GAP_LEFT; drawCellText(dc, rectTmp, getValue(row, colType), true); } int GridData::getBestSize(wxDC& dc, size_t row, ColumnType colType) { - return dc.GetTextExtent(getValue(row, colType)).GetWidth() + 2 * COLUMN_BORDER_LEFT; //some border on left and right side + return dc.GetTextExtent(getValue(row, colType)).GetWidth() + 2 * COLUMN_GAP_LEFT + 1; //gap on left and right side + border } @@ -108,17 +103,12 @@ wxRect GridData::drawCellBorder(wxDC& dc, const wxRect& rect) //returns remainin } -void GridData::drawCellBackground(wxDC& dc, const wxRect& rect, bool enabled, bool selected, bool hasFocus, const wxColor& backgroundColor) +void GridData::drawCellBackground(wxDC& dc, const wxRect& rect, bool enabled, bool selected, const wxColor& backgroundColor) { if (enabled) { if (selected) - { - //if (hasFocus) dc.GradientFillLinear(rect, getColorSelectionGradientFrom(), getColorSelectionGradientTo(), wxEAST); - //else -> doesn't look too good... - // dc.GradientFillLinear(rect, COLOR_SELECTION_GRADIENT_NO_FOCUS_FROM, COLOR_SELECTION_GRADIENT_NO_FOCUS_TO, wxEAST); - } else clearArea(dc, rect, backgroundColor); } @@ -193,8 +183,8 @@ void GridData::renderColumnLabel(Grid& grid, wxDC& dc, const wxRect& rect, Colum wxRect rectTmp = drawColumnLabelBorder(dc, rect); drawColumnLabelBackground(dc, rectTmp, highlighted); - rectTmp.x += COLUMN_BORDER_LEFT; - rectTmp.width -= COLUMN_BORDER_LEFT; + rectTmp.x += COLUMN_GAP_LEFT; + rectTmp.width -= COLUMN_GAP_LEFT; drawColumnLabelText(dc, rectTmp, getColumnLabel(colType)); } @@ -210,7 +200,7 @@ wxRect GridData::drawColumnLabelBorder(wxDC& dc, const wxRect& rect) //returns r //draw border (with gradient) { wxDCPenChanger dummy(dc, wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID)); - dc.GradientFillLinear(wxRect(rect.GetTopRight(), rect.GetBottomRight()), dc.GetPen().GetColour(), COLOR_LABEL_GRADIENT_TO, wxNORTH); + dc.GradientFillLinear(wxRect(rect.GetTopRight(), rect.GetBottomRight()), COLOR_LABEL_GRADIENT_FROM, dc.GetPen().GetColour(), wxSOUTH); dc.DrawLine(rect.GetBottomLeft(), rect.GetBottomRight() + wxPoint(1, 0)); } @@ -221,9 +211,9 @@ wxRect GridData::drawColumnLabelBorder(wxDC& dc, const wxRect& rect) //returns r void GridData::drawColumnLabelBackground(wxDC& dc, const wxRect& rect, bool highlighted) { if (highlighted) - dc.GradientFillLinear(rect, COLOR_LABEL_GRADIENT_FROM_FOCUS, COLOR_LABEL_GRADIENT_TO_FOCUS, wxNORTH); + dc.GradientFillLinear(rect, COLOR_LABEL_GRADIENT_FROM_FOCUS, COLOR_LABEL_GRADIENT_TO_FOCUS, wxSOUTH); else //regular background gradient - dc.GradientFillLinear(rect, COLOR_LABEL_GRADIENT_FROM, COLOR_LABEL_GRADIENT_TO, wxNORTH); //clear overlapping cells + dc.GradientFillLinear(rect, COLOR_LABEL_GRADIENT_FROM, COLOR_LABEL_GRADIENT_TO, wxSOUTH); //clear overlapping cells } @@ -386,17 +376,17 @@ private: { const wxRect& clientRect = GetClientRect(); - dc.GradientFillLinear(clientRect, COLOR_LABEL_GRADIENT_FROM, COLOR_LABEL_GRADIENT_TO, wxNORTH); + dc.GradientFillLinear(clientRect, COLOR_LABEL_GRADIENT_FROM, COLOR_LABEL_GRADIENT_TO, wxSOUTH); dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID)); { - wxDCPenChanger dummy(dc, COLOR_LABEL_GRADIENT_TO); + wxDCPenChanger dummy(dc, COLOR_LABEL_GRADIENT_FROM); dc.DrawLine(clientRect.GetTopLeft(), clientRect.GetTopRight()); } - dc.GradientFillLinear(wxRect(clientRect.GetBottomLeft (), clientRect.GetTopLeft ()), dc.GetPen().GetColour(), COLOR_LABEL_GRADIENT_TO, wxNORTH); - dc.GradientFillLinear(wxRect(clientRect.GetBottomRight(), clientRect.GetTopRight()), dc.GetPen().GetColour(), COLOR_LABEL_GRADIENT_TO, wxNORTH); + dc.GradientFillLinear(wxRect(clientRect.GetBottomLeft (), clientRect.GetTopLeft ()), COLOR_LABEL_GRADIENT_FROM, dc.GetPen().GetColour(), wxSOUTH); + dc.GradientFillLinear(wxRect(clientRect.GetBottomRight(), clientRect.GetTopRight()), COLOR_LABEL_GRADIENT_FROM, dc.GetPen().GetColour(), wxSOUTH); dc.DrawLine(clientRect.GetBottomLeft(), clientRect.GetBottomRight()); @@ -492,7 +482,7 @@ private: (Similar problem on Win 7: e.g. directly click sync button without comparing first) */ if (IsThisEnabled()) - clearArea(dc, rect, getColorMainWinBackground()); + clearArea(dc, rect, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); else clearArea(dc, rect, wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); @@ -515,7 +505,7 @@ private: void drawRowLabel(wxDC& dc, const wxRect& rect, size_t row) { //clearArea(dc, rect, getColorRowLabel()); - dc.GradientFillLinear(rect, COLOR_LABEL_GRADIENT_FROM, COLOR_LABEL_GRADIENT_TO, wxWEST); //clear overlapping cells + dc.GradientFillLinear(rect, COLOR_LABEL_GRADIENT_FROM, COLOR_LABEL_GRADIENT_TO, wxEAST); //clear overlapping cells wxDCTextColourChanger dummy3(dc, *wxBLACK); //accessibility: always set both foreground AND background colors! //label text @@ -620,10 +610,11 @@ private: virtual void render(wxDC& dc, const wxRect& rect) { if (IsThisEnabled()) - clearArea(dc, rect, getColorMainWinBackground()); + clearArea(dc, rect, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); else clearArea(dc, rect, wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); + //coordinate with "colLabelHeight" in Grid constructor: wxFont labelFont = GetFont(); labelFont.SetWeight(wxFONTWEIGHT_BOLD); dc.SetFont(labelFont); @@ -666,9 +657,9 @@ private: if (activeMove && activeMove->isRealMove() && activeMove->getComponentPos() == compPos) { if (col + 1 == activeMove->refColumnTo()) //handle pos 1, 2, .. up to "at end" position - dc.GradientFillLinear(wxRect(rect.GetTopRight(), rect.GetBottomRight() + wxPoint(-2, 0)), *wxBLUE, COLOR_LABEL_GRADIENT_TO, wxNORTH); + dc.GradientFillLinear(wxRect(rect.GetTopRight(), rect.GetBottomRight() + wxPoint(-2, 0)), COLOR_LABEL_GRADIENT_FROM, *wxBLUE, wxSOUTH); else if (col == activeMove->refColumnTo() && col == 0) //pos 0 - dc.GradientFillLinear(wxRect(rect.GetTopLeft(), rect.GetBottomLeft() + wxPoint(2, 0)), *wxBLUE, COLOR_LABEL_GRADIENT_TO, wxNORTH); + dc.GradientFillLinear(wxRect(rect.GetTopLeft(), rect.GetBottomLeft() + wxPoint(2, 0)), COLOR_LABEL_GRADIENT_FROM, *wxBLUE, wxSOUTH); } } } @@ -914,7 +905,7 @@ private: virtual void render(wxDC& dc, const wxRect& rect) { if (IsThisEnabled()) - clearArea(dc, rect, getColorMainWinBackground()); + clearArea(dc, rect, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); else clearArea(dc, rect, wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); @@ -944,10 +935,12 @@ private: if (auto prov = refParent().getDataProvider(compPos)) { //draw background lines + for (int row = rowFirst; row < rowLast; ++row) { - RecursiveDcClipper dummy2(dc, rect); //solve issues with drawBackground() painting in area outside of rect (which is not also refreshed by renderCell()) -> keep small scope! - for (int row = rowFirst; row < rowLast; ++row) - drawBackground(*prov, dc, wxRect(cellAreaTL + wxPoint(0, row * rowHeight), wxSize(compWidth, rowHeight)), row, compPos); + const wxRect rowRect(cellAreaTL + wxPoint(0, row * rowHeight), wxSize(compWidth, rowHeight)); + RecursiveDcClipper dummy2(dc, rowRect); //solve issues with drawBackground() painting in area outside of rect + //(which is not also refreshed by renderCell()) -> keep small scope! + prov->renderRowBackgound(dc, rowRect, row, refParent().IsThisEnabled(), drawAsSelected(row, compPos)); } //draw single cells, column by column @@ -959,9 +952,10 @@ private: if (cellAreaTL.x + cw.width_ > rect.x) for (int row = rowFirst; row < rowLast; ++row) { - const wxRect& cellRect = wxRect(cellAreaTL.x, cellAreaTL.y + row * rowHeight, cw.width_, rowHeight); + const wxRect cellRect(cellAreaTL.x, cellAreaTL.y + row * rowHeight, cw.width_, rowHeight); RecursiveDcClipper clip(dc, cellRect); - prov->renderCell(refParent(), dc, cellRect, row, cw.type_); + + prov->renderCell(dc, cellRect, row, cw.type_, drawAsSelected(row, compPos)); } cellAreaTL.x += cw.width_; } @@ -971,21 +965,17 @@ private: } } - void drawBackground(GridData& prov, wxDC& dc, const wxRect& rect, size_t row, size_t compPos) + bool drawAsSelected(size_t row, size_t compPos) const { - Grid& grid = refParent(); - //check if user is currently selecting with mouse - bool drawSelection = grid.isSelected(row, compPos); - if (activeSelection) + if (activeSelection) //check if user is currently selecting with mouse { const size_t rowFrom = std::min(activeSelection->getStartRow(), activeSelection->getCurrentRow()); const size_t rowTo = std::max(activeSelection->getStartRow(), activeSelection->getCurrentRow()); if (compPos == activeSelection->getComponentPos() && rowFrom <= row && row <= rowTo) - drawSelection = activeSelection->isPositiveSelect(); //overwrite default + return activeSelection->isPositiveSelect(); //overwrite default } - - prov.renderRowBackgound(dc, rect, row, grid.IsThisEnabled(), drawSelection, wxWindow::FindFocus() == &grid.getMainWin()); + return refParent().isSelected(row, compPos); } virtual void onMouseLeftDown (wxMouseEvent& event) { onMouseDown(event); } @@ -1423,20 +1413,28 @@ Grid::Grid(wxWindow* parent, const wxString& name) : wxScrolledWindow(parent, id, pos, size, style | wxWANTS_CHARS, name), showScrollbarX(SB_SHOW_AUTOMATIC), showScrollbarY(SB_SHOW_AUTOMATIC), - colLabelHeight(DEFAULT_COL_LABEL_HEIGHT), + colLabelHeight(0), //dummy init drawRowLabel(true), comp(1), rowCountOld(0) { - Connect(wxEVT_PAINT, wxPaintEventHandler(Grid::onPaintEvent ), nullptr, this); - Connect(wxEVT_ERASE_BACKGROUND, wxEraseEventHandler(Grid::onEraseBackGround), nullptr, this); - Connect(wxEVT_SIZE, wxSizeEventHandler (Grid::onSizeEvent ), nullptr, this); - cornerWin_ = new CornerWin (*this); // rowLabelWin_ = new RowLabelWin(*this); //owership handled by "this" colLabelWin_ = new ColLabelWin(*this); // mainWin_ = new MainWin (*this, *rowLabelWin_, *colLabelWin_); // + colLabelHeight = 2 * DEFAULT_COL_LABEL_BORDER + [&]() -> int + { + //coordinate with ColLabelWin::render(): + wxFont labelFont = colLabelWin_->GetFont(); + labelFont.SetWeight(wxFONTWEIGHT_BOLD); + return labelFont.GetPixelSize().GetHeight(); + }(); + + Connect(wxEVT_PAINT, wxPaintEventHandler(Grid::onPaintEvent ), nullptr, this); + Connect(wxEVT_ERASE_BACKGROUND, wxEraseEventHandler(Grid::onEraseBackGround), nullptr, this); + Connect(wxEVT_SIZE, wxSizeEventHandler (Grid::onSizeEvent ), nullptr, this); + SetTargetWindow(mainWin_); SetInitialSize(size); //"Most controls will use this to set their initial size" -> why not @@ -1621,7 +1619,21 @@ void Grid::showRowLabel(bool show) std::vector<size_t> Grid::getSelectedRows(size_t compPos) const { - return compPos < comp.size() ? comp[compPos].selection.get() : std::vector<size_t>(); + if (compPos < comp.size()) + return comp[compPos].selection.get(); + assert(false); + return std::vector<size_t>(); +} + + +void Grid::setSelectedRows(const std::vector<size_t>& sel, size_t compPos) +{ + if (compPos < comp.size()) + { + comp[compPos].selection.set(sel); + Refresh(); + } + else assert(false); } @@ -1665,10 +1677,13 @@ void Grid::Refresh(bool eraseBackground, const wxRect* rect) if (rowCountOld != rowCountNew) { rowCountOld = rowCountNew; - for (Component& c : comp) - c.selection.init(rowCountNew); updateWindowSizes(); } + + for (Component& c : comp) + if (c.selection.size() != rowCountNew) //clear selection only when needed (consider setSelectedRows()) + c.selection.init(rowCountNew); + wxScrolledWindow::Refresh(eraseBackground, rect); } @@ -94,9 +94,9 @@ public: //grid area virtual wxString getValue(size_t row, ColumnType colType) const = 0; - virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected, bool hasFocus); //default implementation - virtual void renderCell(Grid& grid, wxDC& dc, const wxRect& rect, size_t row, ColumnType colType); // - virtual int getBestSize(wxDC& dc, size_t row, ColumnType colType); //must correspond to renderCell()! + virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected); //default implementation + virtual void renderCell (wxDC& dc, const wxRect& rect, size_t row, ColumnType colType, bool selected); // + virtual int getBestSize (wxDC& dc, size_t row, ColumnType colType); //must correspond to renderCell()! virtual wxString getToolTip(size_t row, ColumnType colType) const { return wxString(); } //label area @@ -104,9 +104,11 @@ public: virtual void renderColumnLabel(Grid& grid, wxDC& dc, const wxRect& rect, ColumnType colType, bool highlighted); //default implementation virtual wxString getToolTip(ColumnType colType) const { return wxString(); } + static const int COLUMN_GAP_LEFT; //for left-aligned text + protected: //optional helper routines static wxRect drawCellBorder (wxDC& dc, const wxRect& rect); //returns inner rectangle - static void drawCellBackground(wxDC& dc, const wxRect& rect, bool enabled, bool selected, bool hasFocus, const wxColor& backgroundColor); + static void drawCellBackground(wxDC& dc, const wxRect& rect, bool enabled, bool selected, const wxColor& backgroundColor); static void drawCellText (wxDC& dc, const wxRect& rect, const wxString& text, bool enabled, int alignment = wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); static wxRect drawColumnLabelBorder (wxDC& dc, const wxRect& rect); //returns inner rectangle @@ -165,6 +167,7 @@ public: void showScrollBars(ScrollBarStatus horizontal, ScrollBarStatus vertical); std::vector<size_t> getSelectedRows(size_t compPos = 0) const; + void setSelectedRows(const std::vector<size_t>& sel, size_t compPos = 0); void clearSelection(bool emitSelectRangeEvent = true, size_t compPos = 0); //turn off range selection event when calling this function in an event handler to avoid recursion! void scrollDelta(int deltaX, int deltaY); //in scroll units @@ -226,6 +229,8 @@ private: public: void init(size_t rowCount) { rowSelectionValue.resize(rowCount); clear(); } + size_t size() const { return rowSelectionValue.size(); } + std::vector<size_t> get() const { std::vector<size_t> selection; @@ -235,6 +240,14 @@ private: return selection; } + void set(const std::vector<size_t>& newSel) + { + clear(); + for (size_t row : newSel) + if (row < rowSelectionValue.size()) + rowSelectionValue[row] = true; + } + void clear() { selectRange(0, rowSelectionValue.size(), false); } bool isSelected(size_t row) const { return row < rowSelectionValue.size() ? rowSelectionValue[row] != 0 : false; } diff --git a/lib/resources.cpp b/wx+/image_resources.cpp index 6deaf0ec..6da12c17 100644 --- a/lib/resources.cpp +++ b/wx+/image_resources.cpp @@ -4,25 +4,18 @@ // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // ************************************************************************** -#include "resources.h" +#include "image_resources.h" #include <memory> +#include <map> #include <wx/wfstream.h> #include <wx/zipstrm.h> #include <wx/image.h> #include <wx/mstream.h> #include <zen/utf.h> -#include "ffs_paths.h" using namespace zen; -const GlobalResources& GlobalResources::instance() -{ - static GlobalResources inst; - return inst; -} - - namespace { void loadAnimFromZip(wxZipInputStream& zipInput, wxAnimation& anim) @@ -41,12 +34,35 @@ void loadAnimFromZip(wxZipInputStream& zipInput, wxAnimation& anim) anim.Load(seekAbleStream, wxANIMATION_TYPE_GIF); } -} -GlobalResources::GlobalResources() +class GlobalResources +{ +public: + static GlobalResources& instance() + { + static GlobalResources inst; + return inst; + } + + void init(const Zstring& filename); + + const wxBitmap& getImage(const wxString& name) const; + const wxAnimation& getAnimation(const wxString& name) const; + +private: + GlobalResources() {} + GlobalResources(const GlobalResources&); + GlobalResources& operator=(const GlobalResources&); + + std::map<wxString, wxBitmap> bitmaps; + std::map<wxString, wxAnimation> anims; +}; + + +void GlobalResources::init(const Zstring& filename) { - wxFFileInputStream input(utfCvrtTo<wxString>(zen::getResourceDir()) + L"Resources.zip"); + wxFFileInputStream input(utfCvrtTo<wxString>(filename)); if (input.IsOk()) //if not... we don't want to react too harsh here { //activate support for .png files @@ -64,42 +80,40 @@ GlobalResources::GlobalResources() const wxString name = entry->GetName(); //generic image loading - if (name.EndsWith(L".png")) + if (endsWith(name, L".png")) bitmaps.insert(std::make_pair(name, wxImage(resourceFile, wxBITMAP_TYPE_PNG))); - else if (name == L"wink.gif") - loadAnimFromZip(resourceFile, aniWink); - else if (name == L"working.gif") - loadAnimFromZip(resourceFile, aniWorking); + else if (endsWith(name, L".gif")) + loadAnimFromZip(resourceFile, anims[name]); } } +} -#ifdef ZEN_WIN - //for compatibility it seems we need to stick with a "real" icon - programIconFFS = wxIcon(L"A_FFS_ICON"); -#elif defined ZEN_LINUX - //attention: make sure to not implicitly call "instance()" again => deadlock on Linux - programIconFFS.CopyFromBitmap(getImage(L"FreeFileSync")); //use big logo bitmap for better quality +const wxBitmap& GlobalResources::getImage(const wxString& name) const +{ + auto it = bitmaps.find(contains(name, L'.') ? name : name + L".png"); //assume .png ending if nothing else specified + if (it != bitmaps.end()) + return it->second; -#elif defined ZEN_MAC - assert(getImage(L"FreeFileSync").GetWidth () == getImage(L"FreeFileSync").GetHeight() && - getImage(L"FreeFileSync").GetWidth() % 128 == 0); - //wxWidgets' bitmap to icon conversion on OS X can only deal with very specific sizes - programIconFFS.CopyFromBitmap(getImage(L"FreeFileSync").ConvertToImage().Scale(128, 128, wxIMAGE_QUALITY_HIGH)); //"von hinten durch die Brust ins Auge" -#endif + assert(false); + return wxNullBitmap; } -const wxBitmap& GlobalResources::getImage(const wxString& imageName) const +const wxAnimation& GlobalResources::getAnimation(const wxString& name) const { - auto it = bitmaps.find(!contains(imageName, L'.') ? //assume .png ending if nothing else specified - imageName + L".png" : - imageName); - if (it != bitmaps.end()) + auto it = anims.find(contains(name, L'.') ? name : name + L".gif"); + if (it != anims.end()) return it->second; - else - { - assert(false); - return wxNullBitmap; - } + + assert(false); + return wxNullAnimation; +} } + + +void zen::initResourceImages(const Zstring& filename) { GlobalResources::instance().init(filename); } + +const wxBitmap& zen::getResourceImage(const wxString& name) { return GlobalResources::instance().getImage(name); } + +const wxAnimation& zen::getResourceAnimation(const wxString& name) { return GlobalResources::instance().getAnimation(name); } diff --git a/wx+/image_resources.h b/wx+/image_resources.h new file mode 100644 index 00000000..61e0b61c --- /dev/null +++ b/wx+/image_resources.h @@ -0,0 +1,22 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + +#ifndef RESOURCES_H_8740257825342532457 +#define RESOURCES_H_8740257825342532457 + +#include <wx/bitmap.h> +#include <wx/animate.h> +#include <zen/zstring.h> + +namespace zen +{ +void initResourceImages(const Zstring& filename); //pass resources .zip file at application startup + +const wxBitmap& getResourceImage (const wxString& name); +const wxAnimation& getResourceAnimation(const wxString& name); +} + +#endif //RESOURCES_H_8740257825342532457 diff --git a/wx+/popup_dlg.cpp b/wx+/popup_dlg.cpp new file mode 100644 index 00000000..27526922 --- /dev/null +++ b/wx+/popup_dlg.cpp @@ -0,0 +1,279 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + +#include "popup_dlg.h" +#include <wx/app.h> +#include <wx+/mouse_move_dlg.h> +#include <wx+/std_button_order.h> +#include <wx+/font_size.h> +#include <wx+/image_resources.h> +#include "popup_dlg_generated.h" + +using namespace zen; + + +namespace +{ +void setAsStandard(wxButton& btn) +{ + btn.SetDefault(); + btn.SetFocus(); +} + + +void setBestInitialSize(wxTextCtrl& ctrl, const wxString& text, wxSize maxSize) +{ + const int scrollbarWidth = 30; + if (maxSize.x <= scrollbarWidth) //implicitly checks for non-zero, too! + return; + maxSize.x -= scrollbarWidth; + + int bestWidth = 0; + int rowCount = 0; + int rowHeight = 0; + + auto evalLineExtent = [&](const wxSize& sz) -> bool //return true when done + { + if (sz.x > bestWidth) + bestWidth = std::min(maxSize.x, sz.x); + + rowCount += (sz.x + maxSize.x - 1) / maxSize.x; //integer round up: consider line-wraps! + rowHeight = std::max(rowHeight, sz.y); //all rows *should* have same height + + return rowCount * rowHeight >= maxSize.y; + }; + + for (auto it = text.begin();;) + { + auto itEnd = std::find(it, text.end(), L'\n'); + wxString line(it, itEnd); + if (line.empty()) + line = L" "; //GetTextExtent() returns (0, 0) for empty strings! + + wxSize sz = ctrl.GetTextExtent(line); //exactly gives row height, but does *not* consider newlines + if (evalLineExtent(sz)) + break; + + if (itEnd == text.end()) + break; + it = itEnd + 1; + } + + const wxSize bestSize(bestWidth + scrollbarWidth, std::min(rowCount * rowHeight, maxSize.y)); + ctrl.SetMinSize(bestSize); //alas, SetMinClientSize() is just not working! +} +} + + +class zen::StandardPopupDialog : public PopupDialogGenerated +{ +public: + StandardPopupDialog(wxWindow* parent, DialogInfoType type, const PopupDialogCfg& cfg) : + PopupDialogGenerated(parent), + checkBoxValue_(cfg.checkBoxValue) + { +#ifdef ZEN_WIN + new zen::MouseMoveWindow(*this); //allow moving main dialog by clicking (nearly) anywhere...; ownership passed to "this" +#endif + wxString titleTmp = cfg.title; + switch (type) + { + case DialogInfoType::INFO: + //"information" is meaningless as caption text! + //confirmation doesn't use info icon + //m_bitmapMsgType->Hide(); + //m_bitmapMsgType->SetSize(30, -1); + //m_bitmapMsgType->SetBitmap(getResourceImage(L"msg_info")); + break; + case DialogInfoType::WARNING: + if (titleTmp.empty()) titleTmp = _("Warning"); + m_bitmapMsgType->SetBitmap(getResourceImage(L"msg_warning")); + break; + case DialogInfoType::ERROR2: + if (titleTmp.empty()) titleTmp = _("Error"); + m_bitmapMsgType->SetBitmap(getResourceImage(L"msg_error")); + break; + } + + if (titleTmp.empty()) + SetTitle(wxTheApp->GetAppDisplayName()); + else + { + if (parent && parent->IsShownOnScreen()) + SetTitle(titleTmp); + else + SetTitle(wxTheApp->GetAppDisplayName() + L" - " + titleTmp); + } + + const wxSize maxSize(500, 380); + + assert(!cfg.textMain.empty() || !cfg.textDetail.empty()); + if (!cfg.textMain.empty()) + { + setMainInstructionFont(*m_staticTextMain); + m_staticTextMain->SetLabel(cfg.textMain); + m_staticTextMain->Wrap(maxSize.GetWidth()); //call *after* SetLabel() + } + else + m_staticTextMain->Hide(); + + if (!cfg.textDetail.empty()) + { + const wxString& text = L"\n" + cfg.textDetail + L"\n"; //add empty top/bottom lines *instead* of using border space! + setBestInitialSize(*m_textCtrlTextDetail, text, maxSize); + m_textCtrlTextDetail->ChangeValue(text); + } + else + m_textCtrlTextDetail->Hide(); + + if (checkBoxValue_) + { + assert(contains(cfg.checkBoxLabel, L"&")); + m_checkBoxCustom->SetLabel(cfg.checkBoxLabel); + m_checkBoxCustom->SetValue(*checkBoxValue_); + } + else + m_checkBoxCustom->Hide(); + + Connect(wxEVT_CHAR_HOOK, wxKeyEventHandler(StandardPopupDialog::OnKeyPressed), nullptr, this); + } + +private: + virtual void OnClose (wxCloseEvent& event) override { EndModal(static_cast<int>(ConfirmationButton3::CANCEL)); } + virtual void OnCancel(wxCommandEvent& event) override { EndModal(static_cast<int>(ConfirmationButton3::CANCEL)); } + + void OnKeyPressed(wxKeyEvent& event) + { + const int keyCode = event.GetKeyCode(); + if (keyCode == WXK_ESCAPE) //handle case where cancel button is hidden! + { + EndModal(static_cast<int>(ConfirmationButton3::CANCEL)); + return; + } + event.Skip(); + } + + virtual void OnButtonAffirmative(wxCommandEvent& event) override + { + if (checkBoxValue_) + * checkBoxValue_ = m_checkBoxCustom->GetValue(); + EndModal(static_cast<int>(ConfirmationButton3::DO_IT)); + } + + virtual void OnButtonNegative(wxCommandEvent& event) override + { + if (checkBoxValue_) + * checkBoxValue_ = m_checkBoxCustom->GetValue(); + EndModal(static_cast<int>(ConfirmationButton3::DONT_DO_IT)); + } + + bool* checkBoxValue_; +}; + + +namespace +{ +class NotificationDialog : public StandardPopupDialog +{ +public: + NotificationDialog(wxWindow* parent, DialogInfoType type, const PopupDialogCfg& cfg) : + StandardPopupDialog(parent, type, cfg) + { + m_buttonAffirmative->SetLabel(_("Close")); //UX Guide: use "Close" for errors, warnings and windows in which users can't make changes (no ampersand!) + m_buttonNegative->Hide(); + m_buttonCancel->Hide(); + + //set std order after button visibility was set + setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonAffirmative)); + setAsStandard(*m_buttonAffirmative); + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + } +}; + + +class ConfirmationDialog : public StandardPopupDialog +{ +public: + ConfirmationDialog(wxWindow* parent, DialogInfoType type, const PopupDialogCfg& cfg, const wxString& labelDoIt) : + StandardPopupDialog(parent, type, cfg) + { + assert(contains(labelDoIt, L"&")); + m_buttonAffirmative->SetLabel(labelDoIt); + m_buttonNegative->Hide(); + + //set std order after button visibility was set + setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonAffirmative).setCancel(m_buttonCancel)); + setAsStandard(*m_buttonAffirmative); + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + } +}; +} + +class zen::ConfirmationDialog3 : public StandardPopupDialog +{ +public: + ConfirmationDialog3(wxWindow* parent, DialogInfoType type, const PopupDialogCfg3& cfg, const wxString& labelDoIt, const wxString& labelDontDoIt) : + StandardPopupDialog(parent, type, cfg.pdCfg), + buttonToDisableWhenChecked(cfg.buttonToDisableWhenChecked) + { + assert(contains(labelDoIt, L"&")); + assert(contains(labelDontDoIt, L"&")); + m_buttonAffirmative->SetLabel(labelDoIt); + m_buttonNegative ->SetLabel(labelDontDoIt); + + //m_buttonAffirmative->SetId(wxID_IGNORE); -> setting id after button creation breaks "mouse snap to" functionality + //m_buttonNegative ->SetId(wxID_RETRY); -> also wxWidgets docs seem to hide some info: "Normally, the identifier should be provided on creation and should not be modified subsequently." + + updateGui(); + + //set std order after button visibility was set + setStandardButtonOrder(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonAffirmative).setNegative(m_buttonNegative).setCancel(m_buttonCancel)); + setAsStandard(*m_buttonAffirmative); + GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() + } + +private: + virtual void OnCheckBoxClick(wxCommandEvent& event) override { updateGui(); event.Skip(); } + + void updateGui() + { + switch (buttonToDisableWhenChecked) + { + case ConfirmationButton3::DO_IT: + m_buttonAffirmative->Enable(!m_checkBoxCustom->GetValue()); + break; + case ConfirmationButton3::DONT_DO_IT: + m_buttonNegative->Enable(!m_checkBoxCustom->GetValue()); + break; + case ConfirmationButton3::CANCEL: + break; + } + } + + const ConfirmationButton3 buttonToDisableWhenChecked; +}; + +//######################################################################################## + +void zen::showNotificationDialog(wxWindow* parent, DialogInfoType type, const PopupDialogCfg& cfg) +{ + NotificationDialog dlg(parent, type, cfg); + dlg.ShowModal(); +} + + +ConfirmationButton zen::showConfirmationDialog(wxWindow* parent, DialogInfoType type, const PopupDialogCfg& cfg, const wxString& labelDoIt) +{ + ConfirmationDialog dlg(parent, type, cfg, labelDoIt); + return static_cast<ConfirmationButton>(dlg.ShowModal()); +} + + +ConfirmationButton3 zen::showConfirmationDialog3(wxWindow* parent, DialogInfoType type, const PopupDialogCfg3& cfg, const wxString& labelDoIt, const wxString& labelDontDoIt) +{ + ConfirmationDialog3 dlg(parent, type, cfg, labelDoIt, labelDontDoIt); + return static_cast<ConfirmationButton3>(dlg.ShowModal()); +} diff --git a/wx+/popup_dlg.h b/wx+/popup_dlg.h new file mode 100644 index 00000000..ab988702 --- /dev/null +++ b/wx+/popup_dlg.h @@ -0,0 +1,91 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + +#ifndef MESSAGEPOPUP_H_820780154723456 +#define MESSAGEPOPUP_H_820780154723456 + +#include <wx/window.h> +#include <wx/string.h> + +namespace zen +{ +//parent window, optional: support correct dialog placement above parent on multiple monitor systems +//this module requires error, warning and info image files in resources.zip, see <wx+/image_resources.h> + +struct PopupDialogCfg; +struct PopupDialogCfg3; + +enum class DialogInfoType +{ + INFO, + WARNING, + ERROR2, //fuck the ERROR macro in WinGDI.h! +}; + +enum class ConfirmationButton3 +{ + DO_IT, + DONT_DO_IT, + CANCEL +}; + +enum class ConfirmationButton +{ + DO_IT = static_cast<int>(ConfirmationButton3::DO_IT), //[!] + CANCEL = static_cast<int>(ConfirmationButton3::CANCEL), //Clang requires a "static_cast" +}; + +void showNotificationDialog (wxWindow* parent, DialogInfoType type, const PopupDialogCfg& cfg); +ConfirmationButton showConfirmationDialog (wxWindow* parent, DialogInfoType type, const PopupDialogCfg& cfg, const wxString& labelDoIt); +ConfirmationButton3 showConfirmationDialog3(wxWindow* parent, DialogInfoType type, const PopupDialogCfg3& cfg, const wxString& labelDoIt, const wxString& labelDontDoIt); + +//---------------------------------------------------------------------------------------------------------------- +class StandardPopupDialog; +class ConfirmationDialog3; + +struct PopupDialogCfg +{ + PopupDialogCfg() : checkBoxValue() {} + PopupDialogCfg& setTitle (const wxString& label) { title = label; return *this; } + PopupDialogCfg& setMainInstructions (const wxString& label) { textMain = label; return *this; } //set at least one of these! + PopupDialogCfg& setDetailInstructions(const wxString& label) { textDetail = label; return *this; } // + PopupDialogCfg& setCheckBox(bool& value, const wxString& label) { checkBoxValue = &value; checkBoxLabel = label; return *this; } + +private: + friend class StandardPopupDialog; + + wxString title; + wxString textMain; + wxString textDetail; + bool* checkBoxValue; //in/out + wxString checkBoxLabel; +}; + + +struct PopupDialogCfg3 +{ + PopupDialogCfg3() : buttonToDisableWhenChecked(ConfirmationButton3::CANCEL) {} + PopupDialogCfg3& setTitle (const wxString& label) { pdCfg.setTitle (label); return *this; } + PopupDialogCfg3& setMainInstructions (const wxString& label) { pdCfg.setMainInstructions (label); return *this; } //set at least one of these! + PopupDialogCfg3& setDetailInstructions(const wxString& label) { pdCfg.setDetailInstructions(label); return *this; } // + PopupDialogCfg3& setCheckBox(bool& value, const wxString& label) { pdCfg.setCheckBox(value, label); return *this; } + PopupDialogCfg3& setCheckBox(bool& value, const wxString& label, ConfirmationButton3 disableWhenChecked) + { + assert(disableWhenChecked != ConfirmationButton3::CANCEL); + setCheckBox(value, label); + buttonToDisableWhenChecked = disableWhenChecked; + return *this; + } + +private: + friend class ConfirmationDialog3; + + PopupDialogCfg pdCfg; + ConfirmationButton3 buttonToDisableWhenChecked; +}; +} + +#endif //MESSAGEPOPUP_H_820780154723456 diff --git a/wx+/popup_dlg_generated.cpp b/wx+/popup_dlg_generated.cpp new file mode 100644 index 00000000..b7618545 --- /dev/null +++ b/wx+/popup_dlg_generated.cpp @@ -0,0 +1,91 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Oct 8 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "popup_dlg_generated.h" + +/////////////////////////////////////////////////////////////////////////// + +PopupDialogGenerated::PopupDialogGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer24; + bSizer24 = new wxBoxSizer( wxVERTICAL ); + + m_panel33 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel33->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer165; + bSizer165 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapMsgType = new wxStaticBitmap( m_panel33, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer165->Add( m_bitmapMsgType, 0, wxALL, 10 ); + + wxBoxSizer* bSizer16; + bSizer16 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextMain = new wxStaticText( m_panel33, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMain->Wrap( -1 ); + bSizer16->Add( m_staticTextMain, 0, wxTOP|wxBOTTOM|wxRIGHT, 15 ); + + m_textCtrlTextDetail = new wxTextCtrl( m_panel33, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER ); + bSizer16->Add( m_textCtrlTextDetail, 1, wxEXPAND, 5 ); + + + bSizer165->Add( bSizer16, 1, wxEXPAND, 5 ); + + + m_panel33->SetSizer( bSizer165 ); + m_panel33->Layout(); + bSizer165->Fit( m_panel33 ); + bSizer24->Add( m_panel33, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline6 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline6, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + wxBoxSizer* bSizer25; + bSizer25 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxCustom = new wxCheckBox( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer25->Add( m_checkBoxCustom, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonAffirmative = new wxButton( this, wxID_YES, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonAffirmative, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonNegative = new wxButton( this, wxID_NO, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonNegative, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer25->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + bSizer24->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + + this->SetSizer( bSizer24 ); + this->Layout(); + bSizer24->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( PopupDialogGenerated::OnClose ) ); + m_checkBoxCustom->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PopupDialogGenerated::OnCheckBoxClick ), NULL, this ); + m_buttonAffirmative->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PopupDialogGenerated::OnButtonAffirmative ), NULL, this ); + m_buttonNegative->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PopupDialogGenerated::OnButtonNegative ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PopupDialogGenerated::OnCancel ), NULL, this ); +} + +PopupDialogGenerated::~PopupDialogGenerated() +{ +} diff --git a/wx+/popup_dlg_generated.h b/wx+/popup_dlg_generated.h new file mode 100644 index 00000000..5aab9f68 --- /dev/null +++ b/wx+/popup_dlg_generated.h @@ -0,0 +1,71 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Oct 8 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __POPUP_DLG_GENERATED_H__ +#define __POPUP_DLG_GENERATED_H__ + +#include <wx/artprov.h> +#include <wx/xrc/xmlres.h> +#include <wx/intl.h> +#include <wx/bitmap.h> +#include <wx/image.h> +#include <wx/icon.h> +#include <wx/statbmp.h> +#include <wx/gdicmn.h> +#include <wx/font.h> +#include <wx/colour.h> +#include <wx/settings.h> +#include <wx/string.h> +#include <wx/stattext.h> +#include <wx/textctrl.h> +#include <wx/sizer.h> +#include <wx/panel.h> +#include <wx/statline.h> +#include <wx/checkbox.h> +#include <wx/button.h> +#include <wx/dialog.h> + +#include "zen/i18n.h" + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class PopupDialogGenerated +/////////////////////////////////////////////////////////////////////////////// +class PopupDialogGenerated : public wxDialog +{ + private: + + protected: + wxPanel* m_panel33; + wxStaticBitmap* m_bitmapMsgType; + wxStaticText* m_staticTextMain; + wxTextCtrl* m_textCtrlTextDetail; + wxStaticLine* m_staticline6; + wxCheckBox* m_checkBoxCustom; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonAffirmative; + wxButton* m_buttonNegative; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnCheckBoxClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnButtonAffirmative( wxCommandEvent& event ) { event.Skip(); } + virtual void OnButtonNegative( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + + public: + + PopupDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~PopupDialogGenerated(); + +}; + +#endif //__POPUP_DLG_GENERATED_H__ diff --git a/wx+/tooltip.cpp b/wx+/tooltip.cpp index ebf3c61c..d4bcf302 100644 --- a/wx+/tooltip.cpp +++ b/wx+/tooltip.cpp @@ -16,15 +16,15 @@ using namespace zen; -class Tooltip::PopupDialogGenerated : public wxDialog +class Tooltip::TooltipDialogGenerated : public wxDialog { public: - PopupDialogGenerated(wxWindow* parent, - wxWindowID id = wxID_ANY, - const wxString& title = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0) : wxDialog(parent, id, title, pos, size, style) + TooltipDialogGenerated(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxString& title = wxEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0) : wxDialog(parent, id, title, pos, size, style) { //Suse Linux/X11: needs parent window, else there are z-order issues @@ -43,7 +43,7 @@ public: this->Layout(); bSizer158->Fit(this); -#if defined ZEN_WIN //prevent window stealing focus! +#ifdef ZEN_WIN //prevent window from stealing focus! Disable(); //= dark/grey text and image on Linux; no visible difference on OS X #endif } @@ -56,7 +56,7 @@ public: void Tooltip::show(const wxString& text, wxPoint mousePos, const wxBitmap* bmp) { if (!tipWindow) - tipWindow = new PopupDialogGenerated(&parent_); //ownership passed to parent + tipWindow = new TooltipDialogGenerated(&parent_); //ownership passed to parent const wxBitmap& newBmp = bmp ? *bmp : wxNullBitmap; @@ -72,7 +72,8 @@ void Tooltip::show(const wxString& text, wxPoint mousePos, const wxBitmap* bmp) tipWindow->m_staticTextMain->Wrap(600); } - tipWindow->Fit(); //Linux: Fit() seems to be somewhat broken => this needs to be called EVERY time inside show, not only if text or bmp change + tipWindow->GetSizer()->SetSizeHints(tipWindow); //~=Fit() + SetMinSize() + //Linux: Fit() seems to be somewhat broken => this needs to be called EVERY time inside show, not only if text or bmp change const wxPoint newPos = wxTheApp->GetLayoutDirection() == wxLayout_RightToLeft ? mousePos - wxPoint(30 + tipWindow->GetSize().GetWidth(), 0) : diff --git a/wx+/tooltip.h b/wx+/tooltip.h index d17e650e..7f58ff27 100644 --- a/wx+/tooltip.h +++ b/wx+/tooltip.h @@ -23,8 +23,8 @@ public: void hide(); private: - class PopupDialogGenerated; - PopupDialogGenerated* tipWindow; + class TooltipDialogGenerated; + TooltipDialogGenerated* tipWindow; wxWindow& parent_; }; } diff --git a/zen/FindFilePlus/FindFilePlus.vcxproj b/zen/FindFilePlus/FindFilePlus.vcxproj index 15ea6adf..56650735 100644 --- a/zen/FindFilePlus/FindFilePlus.vcxproj +++ b/zen/FindFilePlus/FindFilePlus.vcxproj @@ -78,10 +78,10 @@ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">FindFilePlus_$(Platform)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">FindFilePlus_$(Platform)</TargetName> <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">FindFilePlus_$(Platform)</TargetName> - <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\Data\WinDDK\inc\ddk;C:\Data\WinDDK\inc\api;C:\Data\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> - <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">C:\Data\WinDDK\inc\ddk;C:\Data\WinDDK\inc\api;C:\Data\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> - <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Data\WinDDK\inc\ddk;C:\Data\WinDDK\inc\api;C:\Data\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> - <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Data\WinDDK\inc\ddk;C:\Data\WinDDK\inc\api;C:\Data\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> + <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\Data\C++\WinDDK\inc\ddk;C:\Data\C++\WinDDK\inc\api;C:\Data\C++\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> + <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">C:\Data\C++\WinDDK\inc\ddk;C:\Data\C++\WinDDK\inc\api;C:\Data\C++\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> + <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Data\C++\WinDDK\inc\ddk;C:\Data\C++\WinDDK\inc\api;C:\Data\C++\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> + <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Data\C++\WinDDK\inc\ddk;C:\Data\C++\WinDDK\inc\api;C:\Data\C++\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <BuildLog> @@ -102,6 +102,7 @@ <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories> <SmallerTypeCheck>true</SmallerTypeCheck> <MultiProcessorCompilation>true</MultiProcessorCompilation> + <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> </ClCompile> <Link> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> @@ -171,6 +172,7 @@ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories> <MultiProcessorCompilation>true</MultiProcessorCompilation> + <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> </ClCompile> <Link> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> diff --git a/zen/IFileOperation/FileOperation_Vista.vcxproj b/zen/IFileOperation/FileOperation_Vista.vcxproj index 20f09a00..3ff45843 100644 --- a/zen/IFileOperation/FileOperation_Vista.vcxproj +++ b/zen/IFileOperation/FileOperation_Vista.vcxproj @@ -96,10 +96,11 @@ <SuppressStartupBanner>true</SuppressStartupBanner> <DebugInformationFormat>EditAndContinue</DebugInformationFormat> <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;C:\Data\C++\boost</AdditionalIncludeDirectories> <SmallerTypeCheck>true</SmallerTypeCheck> <ForcedIncludeFiles>zen/warn_static.h</ForcedIncludeFiles> <MultiProcessorCompilation>true</MultiProcessorCompilation> + <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> </ClCompile> <Link> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> @@ -111,7 +112,7 @@ </ProfileGuidedDatabase> <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> <TargetMachine>MachineX86</TargetMachine> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage\lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> @@ -134,7 +135,7 @@ <SuppressStartupBanner>true</SuppressStartupBanner> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;C:\Data\C++\boost</AdditionalIncludeDirectories> <SmallerTypeCheck>true</SmallerTypeCheck> <ForcedIncludeFiles>zen/warn_static.h</ForcedIncludeFiles> <MultiProcessorCompilation>true</MultiProcessorCompilation> @@ -149,7 +150,7 @@ </ProfileGuidedDatabase> <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> <TargetMachine>MachineX64</TargetMachine> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> @@ -170,9 +171,10 @@ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;C:\Data\C++\boost</AdditionalIncludeDirectories> <ForcedIncludeFiles>zen/warn_static.h</ForcedIncludeFiles> <MultiProcessorCompilation>true</MultiProcessorCompilation> + <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> </ClCompile> <Link> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> @@ -186,7 +188,7 @@ </ProfileGuidedDatabase> <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> <TargetMachine>MachineX86</TargetMachine> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage\lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> @@ -210,7 +212,7 @@ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>../..;C:\Program Files\C++\boost</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../..;C:\Data\C++\boost</AdditionalIncludeDirectories> <ForcedIncludeFiles>zen/warn_static.h</ForcedIncludeFiles> <MultiProcessorCompilation>true</MultiProcessorCompilation> </ClCompile> @@ -226,7 +228,7 @@ </ProfileGuidedDatabase> <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> <TargetMachine>MachineX64</TargetMachine> - <AdditionalLibraryDirectories>C:\Program Files\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> diff --git a/zen/IFileOperation/file_op.cpp b/zen/IFileOperation/file_op.cpp index 218c6f99..27a2565b 100644 --- a/zen/IFileOperation/file_op.cpp +++ b/zen/IFileOperation/file_op.cpp @@ -229,7 +229,7 @@ void moveToRecycleBin(const wchar_t* fileNames[], //throw SysError if (!somethingExists(fileNames[i])) continue; } - throw SysError(formatComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for file:\n") + L"\'" + fileNames[i] + L"\'.", hr)); + throw SysError(formatComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for file:\n") + L"\"" + fileNames[i] + L"\".", hr)); } ZEN_COM_CHECK(fileOp->DeleteItem(psiFile.get(), nullptr)); @@ -256,11 +256,11 @@ void moveToRecycleBin(const wchar_t* fileNames[], //throw SysError if (!processes.empty()) { - std::wstring errorMsg = L"The file \'" + lastError->first + L"\' is locked by another process:"; + std::wstring errorMsg = L"The file \"" + lastError->first + L"\" is locked by another process:"; std::for_each(processes.begin(), processes.end(), [&](const std::wstring& proc) { errorMsg += L'\n'; errorMsg += proc; }); throw SysError(errorMsg); //message is descriptive enough, no need to evaluate HRESULT! } - throw SysError(formatComError(std::wstring(L"Error during \"PerformOperations\" for file:\n") + L"\'" + lastError->first + L"\'.", lastError->second)); + throw SysError(formatComError(std::wstring(L"Error during \"PerformOperations\" for file:\n") + L"\"" + lastError->first + L"\".", lastError->second)); } throw; } @@ -298,7 +298,7 @@ void copyFile(const wchar_t* sourceFile, //throw SysError nullptr, IID_PPV_ARGS(psiSourceFile.init())); if (FAILED(hr)) - throw SysError(formatComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for file:\n") + L"\'" + sourceFile + L"\'.", hr)); + throw SysError(formatComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for file:\n") + L"\"" + sourceFile + L"\".", hr)); } const size_t pos = std::wstring(targetFile).find_last_of(L'\\'); @@ -315,7 +315,7 @@ void copyFile(const wchar_t* sourceFile, //throw SysError nullptr, IID_PPV_ARGS(psiTargetFolder.init())); if (FAILED(hr)) - throw SysError(formatComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for folder:\n") + L"\'" + targetFolder + L"\'.", hr)); + throw SysError(formatComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for folder:\n") + L"\"" + targetFolder + L"\".", hr)); } //schedule file copy operation @@ -440,7 +440,7 @@ std::vector<std::wstring> getLockingProcesses(const wchar_t* filename) //throw S &buffer[0], //__out LPTSTR lpExeName, &bufferSize)) //__inout PDWORD lpdwSize if (bufferSize < buffer.size()) - processName += std::wstring(L", ") + L"\'" + &buffer[0] + L"\'"; + processName += std::wstring(L", ") + L"\"" + &buffer[0] + L"\""; } } output.push_back(processName); diff --git a/zen/com_util.h b/zen/com_util.h index 4f7cd0b8..5189b48e 100644 --- a/zen/com_util.h +++ b/zen/com_util.h @@ -15,7 +15,7 @@ namespace zen { //get an enumeration interface as a std::vector of bound(!) ComPtr(s) template <class T, class U> -std::vector<ComPtr<T> > convertEnum(const ComPtr<U>& enumObj); //enumObj: must have the "_NewEnum" property that supports the IEnumUnknown interface +std::vector<ComPtr<T>> convertEnum(const ComPtr<U>& enumObj); //enumObj: must have the "_NewEnum" property that supports the IEnumUnknown interface /* extract text from com object member function returning a single BSTR: HRESULT ComInterface::MemFun([out] BSTR *pbstr); @@ -68,9 +68,9 @@ private: //############################ inline implemenatation ################################## template <class T, class U> inline -std::vector<ComPtr<T> > convertEnum(const ComPtr<U>& enumObj) +std::vector<ComPtr<T>> convertEnum(const ComPtr<U>& enumObj) { - std::vector<ComPtr<T> > output; + std::vector<ComPtr<T>> output; if (enumObj) { @@ -118,4 +118,4 @@ std::wstring getText(ComPtr<T> comObj, MemFun memFun) } -#endif //COM_UTILITY_HEADER
\ No newline at end of file +#endif //COM_UTILITY_HEADER diff --git a/zen/dir_watcher.cpp b/zen/dir_watcher.cpp index e53b63e2..17efda00 100644 --- a/zen/dir_watcher.cpp +++ b/zen/dir_watcher.cpp @@ -21,7 +21,10 @@ #include "file_traverser.h" #elif defined ZEN_MAC -//#include <CoreFoundation/FSEvents.h> +//#include <sys/types.h> +#include <sys/event.h> +//#include <sys/time.h> +#include "file_traverser.h" #endif using namespace zen; @@ -39,7 +42,7 @@ public: boost::lock_guard<boost::mutex> dummy(lockAccess); if (bytesWritten == 0) //according to docu this may happen in case of internal buffer overflow: report some "dummy" change - changedFiles.push_back(DirWatcher::Entry(DirWatcher::ACTION_CREATE, L"Overflow!")); + changedFiles.push_back(DirWatcher::Entry(DirWatcher::ACTION_CREATE, L"Overflow.")); else { const char* bufPos = &buffer[0]; @@ -49,13 +52,10 @@ public: const Zstring fullname = dirname + Zstring(notifyInfo.FileName, notifyInfo.FileNameLength / sizeof(WCHAR)); - //skip modifications sent by changed directories: reason for change, child element creation/deletion, will notify separately! - //and if this child element is a .ffs_lock file we'll want to ignore all associated events! [&] { - //if (notifyInfo.Action == FILE_ACTION_RENAMED_OLD_NAME) //reporting FILE_ACTION_RENAMED_NEW_NAME should suffice; - // return; //note: this is NOT a cross-directory move, which will show up as create + delete - + //skip modifications sent by changed directories: reason for change, child element creation/deletion, will notify separately! + //and if this child element is a .ffs_lock file we'll want to ignore all associated events! if (notifyInfo.Action == FILE_ACTION_MODIFIED) { //note: this check will not work if top watched directory has been renamed @@ -64,6 +64,7 @@ public: return; } + //note: a move across directories will show up as FILE_ACTION_ADDED/FILE_ACTION_REMOVED! switch (notifyInfo.Action) { case FILE_ACTION_ADDED: @@ -156,12 +157,7 @@ public: FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, nullptr); if (hDir == INVALID_HANDLE_VALUE) - { - const DWORD lastError = ::GetLastError(); //copy before making other system calls! - const std::wstring errorMsg = replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)); - const std::wstring errorDescr = formatSystemError(L"CreateFile", lastError); - throw FileError(errorMsg, errorDescr); - } + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)), formatSystemError(L"CreateFile", getLastError())); //end of constructor, no need to start managing "hDir" } @@ -374,14 +370,6 @@ std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void() #elif defined ZEN_LINUX -struct DirWatcher::Pimpl -{ - Zstring dirname; - int notifDescr; - std::map<int, Zstring> watchDescrs; //watch descriptor and corresponding (sub-)directory name (postfixed with separator!) -}; - - namespace { class DirsOnlyTraverser : public zen::TraverseCallback @@ -396,8 +384,8 @@ public: dirs_.push_back(fullName); return this; } - virtual HandleError reportDirError (const std::wstring& msg) { throw FileError(msg); } - virtual HandleError reportItemError(const std::wstring& msg, const Zchar* shortName) { throw FileError(msg); } + virtual HandleError reportDirError (const std::wstring& msg, size_t retryNumber) { throw FileError(msg); } + virtual HandleError reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName) { throw FileError(msg); } private: std::vector<Zstring>& dirs_; @@ -405,26 +393,33 @@ private: } +struct DirWatcher::Pimpl +{ + Zstring baseDirname; + int notifDescr; + std::map<int, Zstring> watchDescrs; //watch descriptor and (sub-)directory name (postfixed with separator) -> owned by "notifDescr" +}; + + DirWatcher::DirWatcher(const Zstring& directory) : //throw FileError pimpl_(new Pimpl) { - //still in main thread + //get all subdirectories Zstring dirname = directory; if (endsWith(dirname, FILE_NAME_SEPARATOR)) dirname.resize(dirname.size() - 1); - //get all subdirectories - std::vector<Zstring> fullDirList; - fullDirList.push_back(dirname); - - DirsOnlyTraverser traverser(fullDirList); //throw FileError - zen::traverseFolder(dirname, traverser); //don't traverse into symlinks (analog to windows build) + std::vector<Zstring> fullDirList { dirname }; + { + DirsOnlyTraverser traverser(fullDirList); //throw FileError + zen::traverseFolder(dirname, traverser); //don't traverse into symlinks (analog to windows build) + } //init - pimpl_->dirname = directory; + pimpl_->baseDirname = directory; pimpl_->notifDescr = ::inotify_init(); if (pimpl_->notifDescr == -1) - throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(dirname)), formatSystemError(L"inotify_init", getLastError())); + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)), formatSystemError(L"inotify_init", getLastError())); zen::ScopeGuard guardDescr = zen::makeGuard([&] { ::close(pimpl_->notifDescr); }); @@ -436,14 +431,13 @@ DirWatcher::DirWatcher(const Zstring& directory) : //throw FileError initSuccess = ::fcntl(pimpl_->notifDescr, F_SETFL, flags | O_NONBLOCK) != -1; } if (!initSuccess) - throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(dirname)), formatSystemError(L"fcntl", getLastError())); + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)), formatSystemError(L"fcntl", getLastError())); //add watches - std::for_each(fullDirList.begin(), fullDirList.end(), - [&](Zstring subdir) + for (const Zstring& subdir : fullDirList) { int wd = ::inotify_add_watch(pimpl_->notifDescr, subdir.c_str(), - IN_ONLYDIR | //watch directories only + IN_ONLYDIR | //"Only watch pathname if it is a directory." IN_DONT_FOLLOW | //don't follow symbolic links IN_CREATE | IN_MODIFY | @@ -454,15 +448,10 @@ DirWatcher::DirWatcher(const Zstring& directory) : //throw FileError IN_MOVED_TO | IN_MOVE_SELF); if (wd == -1) - { - const ErrorCode lastError = getLastError(); //copy before making other system calls! - const std::wstring errorMsg = replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(subdir)); - const std::wstring errorDescr = formatSystemError(L"inotify_add_watch", lastError); - throw FileError(errorMsg, errorDescr); - } + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(subdir)), formatSystemError(L"inotify_add_watch", getLastError())); pimpl_->watchDescrs.insert(std::make_pair(wd, appendSeparator(subdir))); - }); + } guardDescr.dismiss(); } @@ -476,12 +465,12 @@ DirWatcher::~DirWatcher() std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void()>&) //throw FileError { - //non-blocking call, see O_NONBLOCK - std::vector<char> buffer(1024 * (sizeof(struct ::inotify_event) + 16)); + std::vector<char> buffer(512 * (sizeof(struct ::inotify_event) + NAME_MAX + 1)); ssize_t bytesRead = 0; do { + //non-blocking call, see O_NONBLOCK bytesRead = ::read(pimpl_->notifDescr, &buffer[0], buffer.size()); } while (bytesRead < 0 && errno == EINTR); //"Interrupted function call; When this happens, you should try the call again." @@ -491,7 +480,7 @@ std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void() if (errno == EAGAIN) //this error is ignored in all inotify wrappers I found return std::vector<Entry>(); - throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(pimpl_->dirname)), formatSystemError(L"read", getLastError())); + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(pimpl_->baseDirname)), formatSystemError(L"read", getLastError())); } std::vector<Entry> output; @@ -530,27 +519,178 @@ std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void() } #elif defined ZEN_MAC +namespace +{ +class DirsOnlyTraverser : public zen::TraverseCallback +{ +public: + DirsOnlyTraverser(std::vector<Zstring>& dirs) : dirs_(dirs) {} + + virtual void onFile (const Zchar* shortName, const Zstring& fullName, const FileInfo& details) {} + virtual HandleLink onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) { return LINK_SKIP; } + virtual TraverseCallback* onDir(const Zchar* shortName, const Zstring& fullName) + { + dirs_.push_back(fullName); + return this; + } + virtual HandleError reportDirError (const std::wstring& msg, size_t retryNumber) { throw FileError(msg); } + virtual HandleError reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName) { throw FileError(msg); } + +private: + std::vector<Zstring>& dirs_; +}; + + +class DirDescriptor //throw FileError +{ +public: + DirDescriptor(const Zstring& dirname) : dirname_(dirname) + { + fdDir = ::open(dirname.c_str(), O_EVTONLY); //"descriptor requested for event notifications only"; O_EVTONLY does not exist on Linux + if (fdDir == -1) + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(dirname)), formatSystemError(L"open", getLastError())); + } + + ~DirDescriptor() { if (fdDir != -1) ::close(fdDir); } //check for "-1" only needed by move-constructor + + DirDescriptor(DirDescriptor&& other) : fdDir(other.fdDir), dirname_(std::move(other.dirname_)) { other.fdDir = -1; } + + int getDescriptor() const { return fdDir; } + Zstring getDirname() const { return dirname_; } + +private: + DirDescriptor(const DirDescriptor&) = delete; + DirDescriptor& operator=(const DirDescriptor&) = delete; + + int fdDir; + Zstring dirname_; +}; +} warn_static("finish") struct DirWatcher::Pimpl { + Zstring baseDirname; + int queueDescr; + std::map<int, DirDescriptor> watchDescrs; //directory descriptors and corresponding (sub-)directory name (postfixed with separator!) + std::vector<struct ::kevent> changelist; }; -DirWatcher::DirWatcher(const Zstring& directory) //throw FileError +DirWatcher::DirWatcher(const Zstring& directory) : //throw FileError + pimpl_(new Pimpl) { - throw FileError(L"Dir Watcher is not yet implemented!"); + //get all subdirectories + Zstring dirname = directory; + if (endsWith(dirname, FILE_NAME_SEPARATOR)) + dirname.resize(dirname.size() - 1); + + std::vector<Zstring> fullDirList { dirname }; + { + DirsOnlyTraverser traverser(fullDirList); //throw FileError + zen::traverseFolder(dirname, traverser); //don't traverse into symlinks (analog to windows build) + } + + pimpl_->baseDirname = directory; + + pimpl_->queueDescr = ::kqueue(); + if (pimpl_->queueDescr == -1) + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)), formatSystemError(L"kqueue", getLastError())); + zen::ScopeGuard guardDescr = zen::makeGuard([&] { ::close(pimpl_->queueDescr); }); + + for (const Zstring& subdir : fullDirList) + { + DirDescriptor descr(subdir); + const int rawDescr = descr.getDescriptor(); + pimpl_->watchDescrs.insert(std::make_pair(rawDescr, std::move(descr))); + + pimpl_->changelist.push_back({}); + EV_SET(&pimpl_->changelist.back(), + rawDescr, //identifier for this event + EVFILT_VNODE, //filter for event + EV_ADD | EV_CLEAR, //general flags + NOTE_DELETE | NOTE_REVOKE | NOTE_RENAME | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB, //filter-specific flags + 0, //filter-specific data + nullptr); //opaque user data identifier + } + + //what about EINTR? + struct ::timespec timeout = {}; //=> poll + if (::kevent(pimpl_->queueDescr, &pimpl_->changelist[0], pimpl_->changelist.size(), nullptr, 0, &timeout) < 0) + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)), formatSystemError(L"kevent", getLastError())); + + guardDescr.dismiss(); } DirWatcher::~DirWatcher() { + ::close(pimpl_->queueDescr); } std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void()>&) //throw FileError { std::vector<Entry> output; + + std::vector<struct ::kevent> events(512); + for (;;) + { + assert(!pimpl_->changelist.empty()); //contains at least parent directory + struct ::timespec timeout = {}; //=> poll + + int evtCount = 0; + do + { + evtCount = ::kevent(pimpl_->queueDescr, //int kq, + &pimpl_->changelist[0], //const struct kevent* changelist, + pimpl_->changelist.size(), //int nchanges, + &events[0], //struct kevent* eventlist, + events.size(), //int nevents, + &timeout); //const struct timespec* timeout + } + while (evtCount < 0 && errno == EINTR); + + if (evtCount == -1) + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(pimpl_->baseDirname)), formatSystemError(L"kevent", getLastError())); + + for (int i = 0; i < evtCount; ++i) + { + const auto& evt = events[i]; + + auto it = pimpl_->watchDescrs.find(static_cast<int>(evt.ident)); + if (it == pimpl_->watchDescrs.end()) + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(pimpl_->baseDirname)), L"Received event from unknown source."); + + //"If an error occurs [...] and there is enough room in the eventlist, then the event will + // be placed in the eventlist with EV_ERROR set in flags and the system error in data." + if (evt.flags & EV_ERROR) + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(it->second.getDirname())), formatSystemError(L"kevent", static_cast<ErrorCode>(evt.data))); + + assert(evt.filter == EVFILT_VNODE); + if (evt.filter == EVFILT_VNODE) + { + if (evt.fflags & NOTE_DELETE) + wxMessageBox(L"NOTE_DELETE "+ it->second.getDirname()); + else if (evt.fflags & NOTE_REVOKE) + wxMessageBox(L"NOTE_REVOKE "+ it->second.getDirname()); + else if (evt.fflags & NOTE_RENAME) + wxMessageBox(L"NOTE_RENAME "+ it->second.getDirname()); + else if (evt.fflags & NOTE_WRITE) + wxMessageBox(L"NOTE_WRITE "+ it->second.getDirname()); + else if (evt.fflags & NOTE_EXTEND) + wxMessageBox(L"NOTE_EXTEND "+ it->second.getDirname()); + else if (evt.fflags & NOTE_ATTRIB) + wxMessageBox(L"NOTE_ATTRIB "+ it->second.getDirname()); + else + assert(false); + } + } + + if (evtCount < events.size()) + break; + } + return output; } #endif diff --git a/zen/dir_watcher.h b/zen/dir_watcher.h index eaee5aab..233bdc59 100644 --- a/zen/dir_watcher.h +++ b/zen/dir_watcher.h @@ -16,6 +16,7 @@ namespace zen { //Windows: ReadDirectoryChangesW http://msdn.microsoft.com/en-us/library/aa365465(v=vs.85).aspx //Linux: inotify http://linux.die.net/man/7/inotify +//OS X: kqueue http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/kqueue.2.html //watch directory including subdirectories /* diff --git a/zen/error_log.h b/zen/error_log.h index 05049d27..de4d3c9e 100644 --- a/zen/error_log.h +++ b/zen/error_log.h @@ -96,7 +96,7 @@ String formatMessageImpl(const LogEntry& entry) //internal linkage case TYPE_ERROR: return _("Error"); case TYPE_FATAL_ERROR: - return _("Fatal Error"); + return _("Serious Error"); } assert(false); return std::wstring(); diff --git a/zen/file_error.h b/zen/file_error.h index db8b371d..5d655239 100644 --- a/zen/file_error.h +++ b/zen/file_error.h @@ -49,9 +49,9 @@ inline std::wstring fmtFileName(const Zstring& filename) { std::wstring output; - output += L'\''; + output += L'\"'; output += utfCvrtTo<std::wstring>(filename); - output += L'\''; + output += L'\"'; return output; } } diff --git a/zen/file_handling.cpp b/zen/file_handling.cpp index 3f8d5bbd..fd4239ed 100644 --- a/zen/file_handling.cpp +++ b/zen/file_handling.cpp @@ -205,29 +205,29 @@ void getFileAttrib(const Zstring& filename, FileAttrib& attr, ProcSymlink procSl const int rv = procSl == SYMLINK_FOLLOW ? :: stat(filename.c_str(), &fileInfo) : ::lstat(filename.c_str(), &fileInfo); - if (rv != 0) //follow symbolic links + if (rv != 0) throw FileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(filename)), formatSystemError(L"stat", getLastError())); attr.fileSize = UInt64(fileInfo.st_size); attr.modificationTime = fileInfo.st_mtime; #endif } -} -UInt64 zen::getFilesize(const Zstring& filename) //throw FileError +Int64 getFileTime(const Zstring& filename, ProcSymlink procSl) //throw FileError { FileAttrib attr; - getFileAttrib(filename, attr, SYMLINK_FOLLOW); //throw FileError - return attr.fileSize; + getFileAttrib(filename, attr, procSl); //throw FileError + return attr.modificationTime; +} } -Int64 zen::getFileTime(const Zstring& filename, ProcSymlink procSl) //throw FileError +UInt64 zen::getFilesize(const Zstring& filename) //throw FileError { FileAttrib attr; - getFileAttrib(filename, attr, procSl); //throw FileError - return attr.modificationTime; + getFileAttrib(filename, attr, SYMLINK_FOLLOW); //throw FileError + return attr.fileSize; } @@ -537,8 +537,8 @@ public: dirs_.push_back(fullName); return nullptr; //DON'T traverse into subdirs; removeDirectory works recursively! } - virtual HandleError reportDirError (const std::wstring& msg) { throw FileError(msg); } - virtual HandleError reportItemError(const std::wstring& msg, const Zchar* shortName) { throw FileError(msg); } + virtual HandleError reportDirError (const std::wstring& msg, size_t retryNumber) { throw FileError(msg); } + virtual HandleError reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName) { throw FileError(msg); } private: CollectFilesFlat(const CollectFilesFlat&); @@ -1821,14 +1821,17 @@ struct CallbackData const Zstring& targetFile) : sourceFile_(sourceFile), targetFile_(targetFile), - userCallback(cb) {} + userCallback(cb), + fileInfoSrc(), + fileInfoTrg() {} const Zstring& sourceFile_; const Zstring& targetFile_; CallbackCopyFile* const userCallback; //optional! ErrorHandling errorHandler; - FileAttrib newAttrib; //modified by CopyFileEx() at beginning + BY_HANDLE_FILE_INFORMATION fileInfoSrc; //modified by CopyFileEx() at beginning + BY_HANDLE_FILE_INFORMATION fileInfoTrg; // Int64 bytesReported; //used internally to calculate bytes transferred delta }; @@ -1852,7 +1855,7 @@ DWORD CALLBACK copyCallbackInternal(LARGE_INTEGER totalFileSize, if source is a symlink and COPY_FILE_COPY_SYMLINK is NOT specified, this callback is called and hSourceFile is a handle to the *target* of the link! file time handling: - ::CopyFileEx() will copy file modification time (only) over from source file AFTER the last invokation of this callback + ::CopyFileEx() will (only) copy file modification time over from source file AFTER the last invokation of this callback => it is possible to adapt file creation time of target in here, but NOT file modification time! CAVEAT: if ::CopyFileEx() fails to set modification time, it silently ignores this error and returns success!!! see procmon log in: https://sourceforge.net/tracker/?func=detail&atid=1093080&aid=3514569&group_id=234430 @@ -1870,38 +1873,31 @@ DWORD CALLBACK copyCallbackInternal(LARGE_INTEGER totalFileSize, dwStreamNumber == 1) //consider ADS! { //#################### return source file attributes ################################ - BY_HANDLE_FILE_INFORMATION fileInfoSrc = {}; - if (!::GetFileInformationByHandle(hSourceFile, &fileInfoSrc)) + if (!::GetFileInformationByHandle(hSourceFile, &cbd.fileInfoSrc)) { cbd.errorHandler.reportError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(cbd.sourceFile_)), formatSystemError(L"GetFileInformationByHandle", getLastError())); return PROGRESS_CANCEL; } - BY_HANDLE_FILE_INFORMATION fileInfoTrg = {}; - if (!::GetFileInformationByHandle(hDestinationFile, &fileInfoTrg)) + if (!::GetFileInformationByHandle(hDestinationFile, &cbd.fileInfoTrg)) { cbd.errorHandler.reportError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(cbd.targetFile_)), formatSystemError(L"GetFileInformationByHandle", getLastError())); return PROGRESS_CANCEL; } - cbd.newAttrib.fileSize = UInt64(fileInfoSrc.nFileSizeLow, fileInfoSrc.nFileSizeHigh); - cbd.newAttrib.modificationTime = toTimeT(fileInfoSrc.ftLastWriteTime); //no DST hack (yet) - cbd.newAttrib.sourceFileId = extractFileID(fileInfoSrc); - cbd.newAttrib.targetFileId = extractFileID(fileInfoTrg); - //#################### switch to sparse file copy if req. ####################### - if (canCopyAsSparse(fileInfoSrc.dwFileAttributes, cbd.targetFile_)) //throw () + if (canCopyAsSparse(cbd.fileInfoSrc.dwFileAttributes, cbd.targetFile_)) //throw () { cbd.errorHandler.reportErrorShouldCopyAsSparse(); //use a different copy routine! return PROGRESS_CANCEL; } //#################### copy file creation time ################################ - ::SetFileTime(hDestinationFile, &fileInfoSrc.ftCreationTime, nullptr, nullptr); //no error handling! + ::SetFileTime(hDestinationFile, &cbd.fileInfoSrc.ftCreationTime, nullptr, nullptr); //no error handling! //#################### copy NTFS compressed attribute ######################### - const bool sourceIsCompressed = (fileInfoSrc.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) != 0; - const bool targetIsCompressed = (fileInfoTrg.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) != 0; //already set by CopyFileEx if target parent folder is compressed! + const bool sourceIsCompressed = (cbd.fileInfoSrc.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) != 0; + const bool targetIsCompressed = (cbd.fileInfoTrg.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) != 0; //already set by CopyFileEx if target parent folder is compressed! if (sourceIsCompressed && !targetIsCompressed) { USHORT cmpState = COMPRESSION_FORMAT_DEFAULT; @@ -2026,7 +2022,7 @@ void copyFileWindowsDefault(const Zstring& sourceFile, if (lastError == ERROR_INVALID_PARAMETER && dst::isFatDrive(targetFile) && getFilesize(sourceFile) >= 4U * UInt64(1024U * 1024 * 1024)) //throw FileError - errorDescr += L"\nFAT volume cannot store files larger than 4 gigabyte!"; + errorDescr += L"\nFAT volumes cannot store files larger than 4 gigabyte."; //note: ERROR_INVALID_PARAMETER can also occur when copying to a SharePoint server or MS SkyDrive and the target filename is of a restricted type. } @@ -2036,13 +2032,18 @@ void copyFileWindowsDefault(const Zstring& sourceFile, } if (newAttrib) - *newAttrib = cbd.newAttrib; + { + newAttrib->fileSize = UInt64(cbd.fileInfoSrc.nFileSizeLow, cbd.fileInfoSrc.nFileSizeHigh); + newAttrib->modificationTime = toTimeT(cbd.fileInfoSrc.ftLastWriteTime); //no DST hack (yet) + newAttrib->sourceFileId = extractFileID(cbd.fileInfoSrc); + newAttrib->targetFileId = extractFileID(cbd.fileInfoTrg); + } { //DST hack const Int64 modTime = getFileTime(sourceFile, SYMLINK_FOLLOW); //throw FileError setFileTime(targetFile, modTime, SYMLINK_FOLLOW); //throw FileError - //caveat: - ::CopyFileEx() silently *ignores* failure to set modification time!!! => we need to set again in order to catch such errors! + //caveat: - ::CopyFileEx() silently *ignores* failure to set modification time!!! => we need to set it again but with proper error checking! // - this sequence leads to a loss of precision of up to 1 sec! // - perf-loss on USB sticks with many small files of about 30%! damn! diff --git a/zen/file_handling.h b/zen/file_handling.h index c437e7bc..2c4f7938 100644 --- a/zen/file_handling.h +++ b/zen/file_handling.h @@ -29,7 +29,6 @@ enum ProcSymlink SYMLINK_FOLLOW }; -Int64 getFileTime(const Zstring& filename, ProcSymlink procSl); //throw FileError void setFileTime(const Zstring& filename, const Int64& modificationTime, ProcSymlink procSl); //throw FileError //symlink handling: always evaluate target diff --git a/zen/file_io.cpp b/zen/file_io.cpp index 45cbd028..fbca9089 100644 --- a/zen/file_io.cpp +++ b/zen/file_io.cpp @@ -177,7 +177,7 @@ size_t FileInput::read(void* buffer, size_t bytesToRead) //returns actual number if (bytesRead < bytesToRead) if (!eof()) //pathologic!? - throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())), L"Incomplete read!"); //user should never see this + throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())), L"Incomplete read."); //user should never see this #endif if (bytesRead > bytesToRead) @@ -305,7 +305,7 @@ void FileOutput::write(const void* buffer, size_t bytesToWrite) //throw FileErro throw FileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(getFilename())), formatSystemError(functionName, getLastError())); if (bytesWritten != bytesToWrite) //must be fulfilled for synchronous writes! - throw FileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(getFilename())), L"Incomplete write!"); //user should never see this + throw FileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(getFilename())), L"Incomplete write."); //user should never see this } @@ -318,12 +318,7 @@ FileInputUnbuffered::FileInputUnbuffered(const Zstring& filename) : FileInputBas fdFile = ::open(filename.c_str(), O_RDONLY); if (fdFile == -1) //don't check "< 0" -> docu seems to allow "-2" to be a valid file handle - { - const ErrorCode lastError = getLastError(); //copy before making other system calls! - const std::wstring errorMsg = replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(filename)); - const std::wstring errorDescr = formatSystemError(L"open", lastError); - throw FileError(errorMsg, errorDescr); - } + throw FileError(replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(filename)), formatSystemError(L"open", getLastError())); } diff --git a/zen/file_io.h b/zen/file_io.h index 0c7506a1..2e9e828e 100644 --- a/zen/file_io.h +++ b/zen/file_io.h @@ -22,10 +22,8 @@ namespace zen { #ifdef ZEN_WIN static const char LINE_BREAK[] = "\r\n"; -#elif defined ZEN_LINUX -static const char LINE_BREAK[] = "\n"; -#elif defined ZEN_MAC -static const char LINE_BREAK[] = "\r"; +#elif defined ZEN_LINUX || defined ZEN_MAC +static const char LINE_BREAK[] = "\n"; //since OS X apple uses newline, too #endif //buffered file IO optimized for sequential read/write accesses + better error reporting + long path support (following symlinks) diff --git a/zen/file_traverser.cpp b/zen/file_traverser.cpp index a3e8491a..959a6071 100644 --- a/zen/file_traverser.cpp +++ b/zen/file_traverser.cpp @@ -36,7 +36,7 @@ namespace template <class Command> inline //function object expecting to throw FileError if operation fails bool tryReportingDirError(Command cmd, zen::TraverseCallback& callback) //return "true" on success, "false" if error was ignored { - for (;;) + for (size_t retryNumber = 0;; ++retryNumber) try { cmd(); //throw FileError @@ -44,7 +44,7 @@ bool tryReportingDirError(Command cmd, zen::TraverseCallback& callback) //return } catch (const FileError& e) { - switch (callback.reportDirError(e.toString())) + switch (callback.reportDirError(e.toString(), retryNumber)) { case TraverseCallback::ON_ERROR_RETRY: break; @@ -57,7 +57,7 @@ bool tryReportingDirError(Command cmd, zen::TraverseCallback& callback) //return template <class Command> inline //function object expecting to throw FileError if operation fails bool tryReportingItemError(Command cmd, zen::TraverseCallback& callback, const Zchar* shortName) //return "true" on success, "false" if error was ignored { - for (;;) + for (size_t retryNumber = 0;; ++retryNumber) try { cmd(); //throw FileError @@ -65,7 +65,7 @@ bool tryReportingItemError(Command cmd, zen::TraverseCallback& callback, const Z } catch (const FileError& e) { - switch (callback.reportItemError(e.toString(), shortName)) + switch (callback.reportItemError(e.toString(), retryNumber, shortName)) { case TraverseCallback::ON_ERROR_RETRY: break; @@ -559,7 +559,7 @@ private: { bufferUtfDecomposed.resize(lenMax); if (::CFStringGetFileSystemRepresentation(cfStr, &bufferUtfDecomposed[0], lenMax)) //get decomposed UTF form (verified!) despite ambiguous documentation - shortName = &bufferUtfDecomposed[0]; + shortName = &bufferUtfDecomposed[0]; //attention: => don't access "shortName" after recursion in "traverse"! } } //const char* sampleDecomposed = "\x6f\xcc\x81.txt"; diff --git a/zen/file_traverser.h b/zen/file_traverser.h index a1d8ac9e..d686e9b8 100644 --- a/zen/file_traverser.h +++ b/zen/file_traverser.h @@ -52,8 +52,8 @@ struct TraverseCallback //nullptr: ignore directory, non-nullptr: traverse into using the (new) callback => implement releaseDirTraverser() if necessary! virtual void releaseDirTraverser(TraverseCallback* trav) {} - virtual HandleError reportDirError (const std::wstring& msg) = 0; //failed directory traversal -> consider directory data as incomplete! - virtual HandleError reportItemError(const std::wstring& msg, const Zchar* shortName) = 0; //failed to get data for single file/dir/symlink only! + virtual HandleError reportDirError (const std::wstring& msg, size_t retryNumber) = 0; //failed directory traversal -> consider directory data as incomplete! + virtual HandleError reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName) = 0; //failed to get data for single file/dir/symlink only! }; diff --git a/zen/fixed_list.h b/zen/fixed_list.h index e3083c89..d38dbae5 100644 --- a/zen/fixed_list.h +++ b/zen/fixed_list.h @@ -12,7 +12,7 @@ namespace zen { //std::list(C++11) compatible class for inplace element construction supporting non-copyable/movable types -//may be replaced by C++11 std::list when available +//may be replaced by C++11 std::list when available...or never... template <class T> class FixedList { @@ -48,7 +48,7 @@ public: ListIterator& operator++() { iter = iter->next; return *this; } inline friend bool operator==(const ListIterator& lhs, const ListIterator& rhs) { return lhs.iter == rhs.iter; } inline friend bool operator!=(const ListIterator& lhs, const ListIterator& rhs) { return !(lhs == rhs); } - U& operator* () { return iter->val; } + U& operator* () { return iter->val; } U* operator->() { return &iter->val; } private: NodeT* iter; diff --git a/zen/format_unit.cpp b/zen/format_unit.cpp index 4f16e3e1..4b39d5a9 100644 --- a/zen/format_unit.cpp +++ b/zen/format_unit.cpp @@ -40,7 +40,7 @@ std::wstring zen::filesizeToShortString(Int64 size) //if (size < 0) return _("Error"); -> really? if (numeric::abs(size) <= 999) - return replaceCpy(_P("1 byte", "%x bytes", to<int>(size)), L"%x", numberTo<std::wstring>(size)); + return _P("1 byte", "%x bytes", to<int>(size)); double sizeInUnit = to<double>(size); auto formatUnit = [&](const std::wstring& unitTxt) { return replaceCpy(unitTxt, L"%x", formatThreeDigitPrecision(sizeInUnit)); }; @@ -79,17 +79,16 @@ enum UnitRemTime std::wstring formatUnitTime(int val, UnitRemTime unit) { - auto subst = [&](const std::wstring& output) { return replaceCpy(output, L"%x", zen::numberTo<std::wstring>(val)); }; switch (unit) { case URT_SEC: - return subst(_P("1 sec", "%x sec", val)); + return _P("1 sec", "%x sec", val); case URT_MIN: - return subst(_P("1 min", "%x min", val)); + return _P("1 min", "%x min", val); case URT_HOUR: - return subst(_P("1 hour", "%x hours", val)); + return _P("1 hour", "%x hours", val); case URT_DAY: - return subst(_P("1 day", "%x days", val)); + return _P("1 day", "%x days", val); } assert(false); return _("Error"); @@ -256,8 +255,8 @@ std::wstring zen::ffs_Impl::includeNumberSeparator(const std::wstring& number) const lconv* localInfo = ::localeconv(); //always bound according to doc const std::wstring& thousandSep = utfCvrtTo<std::wstring>(localInfo->thousands_sep); - // THOUSANDS_SEPARATOR = std::use_facet<std::numpunct<wchar_t> >(std::locale("")).thousands_sep(); - why not working? - // DECIMAL_POINT = std::use_facet<std::numpunct<wchar_t> >(std::locale("")).decimal_point(); + // THOUSANDS_SEPARATOR = std::use_facet<std::numpunct<wchar_t>>(std::locale("")).thousands_sep(); - why not working? + // DECIMAL_POINT = std::use_facet<std::numpunct<wchar_t>>(std::locale("")).decimal_point(); std::wstring output(number); size_t i = output.size(); @@ -9,16 +9,20 @@ #include <string> #include <memory> +#include <cstdint> +#include "string_tools.h" + //minimal layer enabling text translation - without platform/library dependencies! #ifndef WXINTL_NO_GETTEXT_MACRO #error WXINTL_NO_GETTEXT_MACRO must be defined to deactivate wxWidgets underscore macro #endif -#define ZEN_CONCAT_SUB(X, Y) X ## Y -#define _(s) zen::implementation::translate(ZEN_CONCAT_SUB(L, s)) -#define _P(s, p, n) zen::implementation::translate(ZEN_CONCAT_SUB(L, s), ZEN_CONCAT_SUB(L, p), n) - +#define ZEN_TRANS_CONCAT_SUB(X, Y) X ## Y +#define _(s) zen::implementation::translate(ZEN_TRANS_CONCAT_SUB(L, s)) +#define _P(s, p, n) zen::implementation::translate(ZEN_TRANS_CONCAT_SUB(L, s), ZEN_TRANS_CONCAT_SUB(L, p), n) +//source and translation are required to use %x as number placeholder +//for plural form, which will be substituted automatically!!! namespace zen { @@ -28,7 +32,7 @@ struct TranslationHandler virtual ~TranslationHandler() {} virtual std::wstring translate(const std::wstring& text) = 0; //simple translation - virtual std::wstring translate(const std::wstring& singular, const std::wstring& plural, int n) = 0; + virtual std::wstring translate(const std::wstring& singular, const std::wstring& plural, std::int64_t n) = 0; }; void setTranslator(TranslationHandler* newHandler = nullptr); //takes ownership @@ -46,14 +50,6 @@ TranslationHandler* getTranslator(); - - - - - - - - //######################## implementation ############################## namespace implementation { @@ -64,18 +60,27 @@ std::wstring translate(const std::wstring& text) } //translate plural forms: "%x day" "%x days" -//returns "%x day" if n == 1; "%x days" else for english language +//returns "1 day" if n == 1; "123 days" if n == 123 for english language inline -std::wstring translate(const std::wstring& singular, const std::wstring& plural, int n) +std::wstring translate(const std::wstring& singular, const std::wstring& plural, std::int64_t n) { - if (n < 0) n = -n; - return getTranslator() ? getTranslator()->translate(singular, plural, n) : n == 1 ? singular : plural; + assert(contains(plural, L"%x")); + + if (getTranslator()) + { + std::wstring translation = getTranslator()->translate(singular, plural, n); + assert(!contains(translation, L"%x")); + return translation; + } + else + return replaceCpy(std::abs(n) == 1 ? singular : plural, L"%x", zen::numberTo<std::wstring>(n)); } template <class T> inline std::wstring translate(const std::wstring& singular, const std::wstring& plural, T n) { - return translate(singular, plural, static_cast<int>(n % 1000000)); + static_assert(sizeof(n) <= sizeof(std::int64_t), ""); + return translate(singular, plural, static_cast<std::int64_t>(n)); } inline diff --git a/zen/notify_removal.cpp b/zen/notify_removal.cpp index 4b00cadf..d1fbc6ed 100644 --- a/zen/notify_removal.cpp +++ b/zen/notify_removal.cpp @@ -82,7 +82,7 @@ MessageProvider::MessageProvider() : windowHandle(nullptr) { if (!hMainModule) - throw FileError(_("Failed to register to receive system messages."), formatSystemError(L"GetModuleHandle", getLastError())); + throw FileError(_("Unable to register to receive system messages."), formatSystemError(L"GetModuleHandle", getLastError())); //register the main window class WNDCLASS wc = {}; @@ -91,7 +91,7 @@ MessageProvider::MessageProvider() : wc.lpszClassName = dummyWindowName; if (::RegisterClass(&wc) == 0) - throw FileError(_("Failed to register to receive system messages."), formatSystemError(L"RegisterClass", getLastError())); + throw FileError(_("Unable to register to receive system messages."), formatSystemError(L"RegisterClass", getLastError())); ScopeGuard guardClass = makeGuard([&] { ::UnregisterClass(dummyWindowName, hMainModule); }); @@ -108,7 +108,7 @@ MessageProvider::MessageProvider() : hMainModule, //HINSTANCE hInstance, nullptr); //LPVOID lpParam if (!windowHandle) - throw FileError(_("Failed to register to receive system messages."), formatSystemError(L"CreateWindow", getLastError())); + throw FileError(_("Unable to register to receive system messages."), formatSystemError(L"CreateWindow", getLastError())); guardClass.dismiss(); } @@ -156,7 +156,7 @@ public: if (lastError != ERROR_CALL_NOT_IMPLEMENTED && //fail on SAMBA share: this shouldn't be a showstopper! lastError != ERROR_SERVICE_SPECIFIC_ERROR && //neither should be fail for "Pogoplug" mapped network drives lastError != ERROR_INVALID_DATA) //this seems to happen for a NetDrive-mapped FTP server - throw zen::FileError(_("Failed to register to receive system messages."), formatSystemError(L"RegisterDeviceNotification", lastError)); + throw zen::FileError(_("Unable to register to receive system messages."), formatSystemError(L"RegisterDeviceNotification", lastError)); } guardProvider.dismiss(); diff --git a/zen/osx_string.h b/zen/osx_string.h index 0d77345c..38c54023 100644 --- a/zen/osx_string.h +++ b/zen/osx_string.h @@ -48,7 +48,7 @@ Zstring cfStringToZstring(const CFStringRef& cfStr) if (::CFStringGetCString(cfStr, &*buffer.begin(), bufferSize, kCFStringEncodingUTF8)) { - buffer.resize(zen::strLength(&*buffer.begin())); //caveat: memory consumption of returned string! + buffer.resize(zen::strLength(buffer.c_str())); //caveat: memory consumption of returned string! return buffer; } } diff --git a/zen/privilege.cpp b/zen/privilege.cpp index d4f956a8..98eaad43 100644 --- a/zen/privilege.cpp +++ b/zen/privilege.cpp @@ -3,6 +3,7 @@ #include "thread.h" //includes <boost/thread.hpp> #include "zstring.h" #include "scope_guard.h" +#include "win_ver.h" using namespace zen; @@ -68,9 +69,17 @@ void setPrivilege(LPCTSTR privilege, bool enable) //throw FileError nullptr)) //__out_opt PDWORD ReturnLength throw FileError(replaceCpy(_("Cannot set privilege %x."), L"%x", std::wstring(L"\"") + privilege + L"\""), formatSystemError(L"AdjustTokenPrivileges", getLastError())); - const ErrorCode lastError = getLastError(); + ErrorCode lastError = getLastError(); if (lastError == ERROR_NOT_ALL_ASSIGNED) //check although previous function returned with success! + { +#ifdef __MINGW32__ //Shobjidl.h +#define ERROR_ELEVATION_REQUIRED 740L +#endif + if (vistaOrLater()) //replace this useless error code with what it *really* means! + lastError = ERROR_ELEVATION_REQUIRED; + throw FileError(replaceCpy(_("Cannot set privilege %x."), L"%x", std::wstring(L"\"") + privilege + L"\""), formatSystemError(L"AdjustTokenPrivileges", lastError)); + } } diff --git a/zen/process_priority.cpp b/zen/process_priority.cpp index b09b35f5..3ac2f068 100644 --- a/zen/process_priority.cpp +++ b/zen/process_priority.cpp @@ -28,7 +28,7 @@ struct PreventStandby::Pimpl {}; PreventStandby::PreventStandby() { if (::SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED) == 0) - throw FileError(_("Failed to suspend system sleep mode.")); //no GetLastError() support? + throw FileError(_("Unable to suspend system sleep mode.")); //no GetLastError() support? } @@ -116,7 +116,7 @@ PreventStandby::PreventStandby() : pimpl(make_unique<Pimpl>()) CFSTR("FreeFileSync"), &pimpl->assertionID); if (rv != kIOReturnSuccess) - throw FileError(_("Failed to suspend system sleep mode."), replaceCpy<std::wstring>(L"IOReturn Code %x", L"%x", numberTo<std::wstring>(rv))); //could not find a better way to convert IOReturn to string + throw FileError(_("Unable to suspend system sleep mode."), replaceCpy<std::wstring>(L"IOReturn Code %x", L"%x", numberTo<std::wstring>(rv))); //could not find a better way to convert IOReturn to string } PreventStandby::~PreventStandby() diff --git a/zen/read_txt.cpp b/zen/read_txt.cpp index 7566ff14..23649846 100644 --- a/zen/read_txt.cpp +++ b/zen/read_txt.cpp @@ -1,3 +1,9 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + #include "read_txt.h" using namespace zen; @@ -42,7 +48,7 @@ std::string detectLineBreak(const Zstring& filename) //throw FileError } -ExtractLines::ExtractLines(const Zstring& filename, const std::string& lineBreak) : //throw FileError +LineExtractor::LineExtractor(const Zstring& filename, const std::string& lineBreak) : //throw FileError inputStream(filename), bufferLogBegin(buffer.begin()), lineBreak_(lineBreak) { if (lineBreak.empty()) @@ -50,7 +56,7 @@ ExtractLines::ExtractLines(const Zstring& filename, const std::string& lineBreak } -bool ExtractLines::getLine(std::string& output) //throw FileError +bool LineExtractor::getLine(std::string& output) //throw FileError { warn_static("don't use lineBreak, but support any of r, n, rn!!!") for (;;) diff --git a/zen/read_txt.h b/zen/read_txt.h index 0678ac52..92892716 100644 --- a/zen/read_txt.h +++ b/zen/read_txt.h @@ -13,10 +13,10 @@ namespace zen { -class ExtractLines +class LineExtractor { public: - ExtractLines(const Zstring& filename, const std::string& lineBreak = std::string()); //throw FileError + LineExtractor(const Zstring& filename, const std::string& lineBreak = std::string()); //throw FileError bool getLine(std::string& output); //throw FileError private: diff --git a/zen/scroll_window_under_cursor.cpp b/zen/scroll_window_under_cursor.cpp index ccc00bcf..76a5ab4a 100644 --- a/zen/scroll_window_under_cursor.cpp +++ b/zen/scroll_window_under_cursor.cpp @@ -49,9 +49,9 @@ LRESULT CALLBACK mouseInputHook(int nCode, WPARAM wParam, LPARAM lParam) return ::CallNextHookEx(nullptr, nCode, wParam, lParam); } -struct Dummy +struct InstallMouseHook { - Dummy() + InstallMouseHook() { hHook = ::SetWindowsHookEx(WH_GETMESSAGE, //__in int idHook, mouseInputHook, //__in HOOKPROC lpfn, @@ -60,7 +60,7 @@ struct Dummy assert(hHook); } - ~Dummy() + ~InstallMouseHook() { if (hHook) ::UnhookWindowsHookEx(hHook); diff --git a/wx+/shell_execute.h b/zen/shell_execute.h index 1d67aa21..14a6a40e 100644 --- a/wx+/shell_execute.h +++ b/zen/shell_execute.h @@ -7,22 +7,15 @@ #ifndef EXECUTE_HEADER_23482134578134134 #define EXECUTE_HEADER_23482134578134134 -#include <zen/zstring.h> -#include <zen/scope_guard.h> -#include <zen/i18n.h> -#include <zen/utf.h> -#include <wx/msgdlg.h> +#include "file_error.h" #ifdef ZEN_WIN -#include <zen/sys_error.h> -//#include <zen/string_tools.h> -#include <zen/win.h> //includes "windows.h" +#include "scope_guard.h" +#include "win.h" //includes "windows.h" #elif defined ZEN_LINUX || defined ZEN_MAC -#include <zen/thread.h> +#include "thread.h" #include <stdlib.h> //::system() -//#include <wx/utils.h> -//#include <wx/log.h> #endif @@ -38,14 +31,14 @@ enum ExecutionType namespace { -void shellExecute(const Zstring& command, ExecutionType type = EXEC_TYPE_ASYNC) +void shellExecute2(const Zstring& command, ExecutionType type) //throw FileError { #ifdef ZEN_WIN //parse commandline Zstring commandTmp = command; trim(commandTmp, true, false); //CommandLineToArgvW() does not like leading spaces - std::vector<std::wstring> argv; + std::vector<Zstring> argv; int argc = 0; if (LPWSTR* tmp = ::CommandLineToArgvW(commandTmp.c_str(), &argc)) { @@ -53,8 +46,8 @@ void shellExecute(const Zstring& command, ExecutionType type = EXEC_TYPE_ASYNC) std::copy(tmp, tmp + argc, std::back_inserter(argv)); } - std::wstring filename; - std::wstring arguments; + Zstring filename; + Zstring arguments; if (!argv.empty()) { filename = argv[0]; @@ -75,11 +68,8 @@ void shellExecute(const Zstring& command, ExecutionType type = EXEC_TYPE_ASYNC) execInfo.nShow = SW_SHOWNORMAL; if (!::ShellExecuteEx(&execInfo)) //__inout LPSHELLEXECUTEINFO lpExecInfo - { - wxString cmdFmt = L"File: " + filename + L"\nArg: " + arguments; - wxMessageBox(_("Invalid command line:") + L"\n" + cmdFmt + L"\n\n" + formatSystemError(L"ShellExecuteEx", getLastError()), /*L"FreeFileSync - " + */_("Error"), wxOK | wxICON_ERROR); - return; - } + throw FileError(_("Incorrect command line:") + L"\nFile: " + filename + L"\nArg: " + arguments, + formatSystemError(L"ShellExecuteEx", getLastError())); if (execInfo.hProcess) { @@ -94,7 +84,7 @@ void shellExecute(const Zstring& command, ExecutionType type = EXEC_TYPE_ASYNC) we cannot use wxExecute due to various issues: - screws up encoding on OS X for non-ASCII characters - does not provide any reasonable error information - - uses a zero-sized dummy window as a hack to keep focus which leaves a useless empty icon in ALT-TAB list + - uses a zero-sized dummy window as a hack to keep focus which leaves a useless empty icon in ALT-TAB list in Windows */ if (type == EXEC_TYPE_SYNC) @@ -102,11 +92,10 @@ void shellExecute(const Zstring& command, ExecutionType type = EXEC_TYPE_ASYNC) //Posix::system - execute a shell command int rv = ::system(command.c_str()); //do NOT use std::system as its documentation says nothing about "WEXITSTATUS(rv)", ect... if (rv == -1 || WEXITSTATUS(rv) == 127) //http://linux.die.net/man/3/system "In case /bin/sh could not be executed, the exit status will be that of a command that does exit(127)" - wxMessageBox(_("Invalid command line:") + L"\n" + utfCvrtTo<wxString>(command), /*L"FreeFileSync - " +*/ _("Error"), wxOK | wxICON_ERROR); + throw FileError(_("Incorrect command line:") + L"\n" + command); } else async([=] { int rv = ::system(command.c_str()); (void)rv; }); - //unfortunately we are not allowed to show a wxMessageBox from a worker thread #endif } } diff --git a/zen/string_tools.h b/zen/string_tools.h index 180056cb..35e5af2b 100644 --- a/zen/string_tools.h +++ b/zen/string_tools.h @@ -535,7 +535,7 @@ Num stringTo(const S& str, Int2Type<NUM_TYPE_OTHER>) //default string to number { typedef typename GetCharType<S>::Type CharType; Num number = 0; - std::basic_istringstream<CharType>(copyStringTo<std::basic_string<CharType> >(str)) >> number; + std::basic_istringstream<CharType>(copyStringTo<std::basic_string<CharType>>(str)) >> number; return number; } diff --git a/zen/symlink_target.h b/zen/symlink_target.h index e3e2ac4d..73d67927 100644 --- a/zen/symlink_target.h +++ b/zen/symlink_target.h @@ -132,7 +132,7 @@ Zstring getSymlinkRawTargetString_impl(const Zstring& linkPath) //throw FileErro reparseData.MountPointReparseBuffer.SubstituteNameLength / sizeof(WCHAR)); } else - throw FileError(replaceCpy(_("Cannot resolve symbolic link %x."), L"%x", fmtFileName(linkPath)), L"Not a symbolic link or junction!"); + throw FileError(replaceCpy(_("Cannot resolve symbolic link %x."), L"%x", fmtFileName(linkPath)), L"Not a symbolic link or junction."); //absolute symlinks and junctions technically start with \??\ while relative ones do not if (startsWith(output, Zstr("\\??\\"))) diff --git a/zen/sys_error.h b/zen/sys_error.h index cea2f5f9..dc60c77f 100644 --- a/zen/sys_error.h +++ b/zen/sys_error.h @@ -73,13 +73,17 @@ std::wstring formatSystemError(const std::wstring& functionName, long long lastE inline std::wstring formatSystemError(const std::wstring& functionName, ErrorCode lastError) { - //determine error code if none was specified -> still required?? + const ErrorCode currentError = getLastError(); //not necessarily == lastError + + //determine error code if none was specified if (lastError == 0) - lastError = getLastError(); + lastError = currentError; std::wstring output = replaceCpy(_("Error Code %x:"), L"%x", numberTo<std::wstring>(lastError)); #ifdef ZEN_WIN + ZEN_ON_SCOPE_EXIT(::SetLastError(currentError)); //this function must not change active system error variable! + LPWSTR buffer = nullptr; if (::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_MAX_WIDTH_MASK | @@ -91,13 +95,12 @@ std::wstring formatSystemError(const std::wstring& functionName, ErrorCode lastE output += L" "; output += buffer; } - ::SetLastError(lastError); //restore last error #elif defined ZEN_LINUX || defined ZEN_MAC + ZEN_ON_SCOPE_EXIT(errno = currentError); + output += L" "; output += utfCvrtTo<std::wstring>(::strerror(lastError)); - - errno = lastError; //restore errno #endif if (!endsWith(output, L" ")) //Windows messages seem to end with a blank... output += L" "; diff --git a/zen/zstring.cpp b/zen/zstring.cpp index 6eb68f7b..83eb5127 100644 --- a/zen/zstring.cpp +++ b/zen/zstring.cpp @@ -34,14 +34,14 @@ public: { boost::lock_guard<boost::mutex> dummy(lockActStrings); if (!activeStrings.insert(std::make_pair(ptr, size)).second) - reportProblem("Fatal Error: New memory points into occupied space: " + rawMemToString(ptr, size)); + reportProblem("Serious Error: New memory points into occupied space: " + rawMemToString(ptr, size)); } void remove(const void* ptr) { boost::lock_guard<boost::mutex> dummy(lockActStrings); if (activeStrings.erase(ptr) != 1) - reportProblem("Fatal Error: No memory available for deallocation at this location!"); + reportProblem("Serious Error: No memory available for deallocation at this location!"); } static LeakChecker& instance() { static LeakChecker inst; return inst; } @@ -154,7 +154,7 @@ int z_impl::compareFilenamesNoCase(const wchar_t* lhs, const wchar_t* rhs, size_ static_cast<int>(sizeRhs), //__in int cchCount2, true); //__in BOOL bIgnoreCase if (rv <= 0) - throw std::runtime_error("Error comparing strings (ordinal)!"); + throw std::runtime_error("Error comparing strings (CompareStringOrdinal)."); else return rv - 2; //convert to C-style string compare result } @@ -179,10 +179,10 @@ int z_impl::compareFilenamesNoCase(const wchar_t* lhs, const wchar_t* rhs, size_ minSize, //__in int cchSrc, bufferA, //__out LPTSTR lpDestStr, MAX_PATH) == 0) //__in int cchDest - throw std::runtime_error("Error comparing strings! (LCMapString)"); + throw std::runtime_error("Error comparing strings (LCMapString)."); if (::LCMapString(ZSTRING_INVARIANT_LOCALE, LCMAP_UPPERCASE, rhs, minSize, bufferB, MAX_PATH) == 0) - throw std::runtime_error("Error comparing strings! (LCMapString)"); + throw std::runtime_error("Error comparing strings (LCMapString)."); const int rv = ::wmemcmp(bufferA, bufferB, minSize); if (rv != 0) @@ -194,10 +194,10 @@ int z_impl::compareFilenamesNoCase(const wchar_t* lhs, const wchar_t* rhs, size_ std::vector<wchar_t> bufferB(minSize); if (::LCMapString(ZSTRING_INVARIANT_LOCALE, LCMAP_UPPERCASE, lhs, minSize, &bufferA[0], minSize) == 0) - throw std::runtime_error("Error comparing strings! (LCMapString: FS)"); + throw std::runtime_error("Error comparing strings (LCMapString: FS)."); if (::LCMapString(ZSTRING_INVARIANT_LOCALE, LCMAP_UPPERCASE, rhs, minSize, &bufferB[0], minSize) == 0) - throw std::runtime_error("Error comparing strings! (LCMapString: FS)"); + throw std::runtime_error("Error comparing strings (LCMapString: FS)."); const int rv = ::wmemcmp(&bufferA[0], &bufferB[0], minSize); if (rv != 0) |