summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Wilhelm <daniel@wili.li>2014-04-18 17:15:39 +0200
committerDaniel Wilhelm <daniel@wili.li>2014-04-18 17:15:39 +0200
commitd2854834e18443876c8f75e0a7f3b88d1d549fc4 (patch)
treee967b628081e50abc7c34cd264e6586271c7e728
parent4.1 (diff)
downloadFreeFileSync-d2854834e18443876c8f75e0a7f3b88d1d549fc4.tar.gz
FreeFileSync-d2854834e18443876c8f75e0a7f3b88d1d549fc4.tar.bz2
FreeFileSync-d2854834e18443876c8f75e0a7f3b88d1d549fc4.zip
4.2
-rw-r--r--Application.cpp157
-rw-r--r--BUILD/Changelog.txt10
-rw-r--r--BUILD/FreeFileSync.chmbin671721 -> 671768 bytes
-rw-r--r--BUILD/Help/html/Batch Scripting.html10
-rw-r--r--BUILD/Help/html/Macros.html20
-rw-r--r--BUILD/Languages/chinese_simple.lng12
-rw-r--r--BUILD/Languages/chinese_traditional.lng12
-rw-r--r--BUILD/Languages/czech.lng12
-rw-r--r--BUILD/Languages/danish.lng12
-rw-r--r--BUILD/Languages/dutch.lng12
-rw-r--r--BUILD/Languages/english_uk.lng12
-rw-r--r--BUILD/Languages/finnish.lng12
-rw-r--r--BUILD/Languages/french.lng12
-rw-r--r--BUILD/Languages/german.lng368
-rw-r--r--BUILD/Languages/greek.lng20
-rw-r--r--BUILD/Languages/hebrew.lng12
-rw-r--r--BUILD/Languages/hungarian.lng368
-rw-r--r--BUILD/Languages/italian.lng12
-rw-r--r--BUILD/Languages/japanese.lng435
-rw-r--r--BUILD/Languages/korean.lng12
-rw-r--r--BUILD/Languages/polish.lng12
-rw-r--r--BUILD/Languages/portuguese.lng12
-rw-r--r--BUILD/Languages/portuguese_br.lng12
-rw-r--r--BUILD/Languages/romanian.lng12
-rw-r--r--BUILD/Languages/russian.lng15
-rw-r--r--BUILD/Languages/slovenian.lng12
-rw-r--r--BUILD/Languages/spanish.lng12
-rw-r--r--BUILD/Languages/swedish.lng12
-rw-r--r--BUILD/Languages/turkish.lng12
-rw-r--r--BUILD/Languages/ukrainian.lng13
-rw-r--r--BUILD/Resources.zipbin250353 -> 250353 bytes
-rw-r--r--BUILD/RunSilent.vbs (renamed from BUILD/Invisible.vbs)2
-rw-r--r--FreeFileSync.cbp6
-rw-r--r--FreeFileSync.vcxproj10
-rw-r--r--Makefile6
-rw-r--r--RealtimeSync/RealtimeSync.cbp2
-rw-r--r--RealtimeSync/RealtimeSync.vcxproj8
-rw-r--r--RealtimeSync/application.cpp10
-rw-r--r--RealtimeSync/application.h8
-rw-r--r--RealtimeSync/gui_generated.cpp15
-rw-r--r--RealtimeSync/main_dlg.cpp22
-rw-r--r--RealtimeSync/makefile2
-rw-r--r--RealtimeSync/resources.cpp2
-rw-r--r--RealtimeSync/resources.h2
-rw-r--r--RealtimeSync/tray_menu.cpp2
-rw-r--r--RealtimeSync/xml_ffs.cpp4
-rw-r--r--RealtimeSync/xml_proc.cpp6
-rw-r--r--algorithm.cpp78
-rw-r--r--comparison.cpp62
-rw-r--r--comparison.h7
-rw-r--r--lib/FindFilePlus/dll_main.cpp2
-rw-r--r--lib/FindFilePlus/load_dll.cpp2
-rw-r--r--lib/FindFilePlus/load_dll.h1
-rw-r--r--lib/IFileOperation/file_op.cpp240
-rw-r--r--lib/ShadowCopy/Shadow_Server2003.vcxproj (renamed from lib/ShadowCopy/Shadow_2003.vcxproj)0
-rw-r--r--lib/ShadowCopy/Shadow_Windows7.vcxproj241
-rw-r--r--lib/ShadowCopy/shadow.cpp196
-rw-r--r--lib/ShadowCopy/shadow.h68
-rw-r--r--lib/Thumbnail/thumbnail.cpp5
-rw-r--r--lib/cmp_filetime.h11
-rw-r--r--lib/custom_grid.cpp10
-rw-r--r--lib/db_file.cpp40
-rw-r--r--lib/dir_lock.cpp22
-rw-r--r--lib/dir_name.cpp2
-rw-r--r--lib/error_log.cpp20
-rw-r--r--lib/ffs_paths.h44
-rw-r--r--lib/help_provider.h2
-rw-r--r--lib/icon_buffer.cpp143
-rw-r--r--lib/icon_buffer.h8
-rw-r--r--lib/localization.cpp15
-rw-r--r--lib/lock_holder.h2
-rw-r--r--lib/parallel_scan.cpp30
-rw-r--r--lib/parse_plural.h2
-rw-r--r--lib/process_xml.cpp8
-rw-r--r--lib/process_xml.h5
-rw-r--r--lib/recycler.cpp22
-rw-r--r--lib/resolve_path.cpp32
-rw-r--r--lib/resources.cpp2
-rw-r--r--lib/shadow.cpp40
-rw-r--r--lib/statistics.h3
-rw-r--r--lib/xml_base.cpp14
-rw-r--r--lib/xml_base.h4
-rw-r--r--structures.h5
-rw-r--r--synchronization.cpp139
-rw-r--r--synchronization.h5
-rw-r--r--ui/Taskbar_Seven/taskbar.cpp10
-rw-r--r--ui/batch_config.cpp12
-rw-r--r--ui/batch_status_handler.cpp101
-rw-r--r--ui/folder_pair.h12
-rw-r--r--ui/grid_view.cpp1
-rw-r--r--ui/gui_generated.cpp7416
-rw-r--r--ui/gui_generated.h1703
-rw-r--r--ui/gui_status_handler.cpp1
-rw-r--r--ui/main_dlg.cpp236
-rw-r--r--ui/progress_indicator.cpp174
-rw-r--r--ui/small_dlgs.cpp9
-rw-r--r--version/version.h7
-rw-r--r--wx+/button.cpp2
-rw-r--r--wx+/button.h2
-rw-r--r--wx+/format_unit.cpp24
-rw-r--r--wx+/graph.cpp38
-rw-r--r--wx+/graph.h10
-rw-r--r--wx+/image_tools.h9
-rw-r--r--wx+/mouse_move_dlg.cpp10
-rw-r--r--wx+/mouse_move_dlg.h1
-rw-r--r--wx+/no_flicker.h35
-rw-r--r--wx+/pch.h2
-rw-r--r--wx+/serialize.h18
-rw-r--r--wx+/string_conv.h4
-rw-r--r--wx+/timespan.h4
-rw-r--r--zen/assert_static.h6
-rw-r--r--zen/basic_math.h7
-rw-r--r--zen/com_error.h36
-rw-r--r--zen/com_ptr.h30
-rw-r--r--zen/debug_log.h105
-rw-r--r--zen/debug_new.cpp49
-rw-r--r--zen/deprecate.h20
-rw-r--r--zen/dir_watcher.cpp36
-rw-r--r--zen/disable_standby.h27
-rw-r--r--zen/dst_hack.cpp16
-rw-r--r--zen/file_error.h8
-rw-r--r--zen/file_handling.cpp185
-rw-r--r--zen/file_handling.h2
-rw-r--r--zen/file_id.cpp1
-rw-r--r--zen/file_io.cpp17
-rw-r--r--zen/file_io.h2
-rw-r--r--zen/file_traverser.cpp55
-rw-r--r--zen/file_traverser.h32
-rw-r--r--zen/fixed_list.h2
-rw-r--r--zen/int64.h32
-rw-r--r--zen/notify_removal.cpp8
-rw-r--r--zen/perf.h11
-rw-r--r--zen/privilege.cpp35
-rw-r--r--zen/process_status.h33
-rw-r--r--zen/stl_tools.h106
-rw-r--r--zen/string_base.h497
-rw-r--r--zen/string_tools.h399
-rw-r--r--zen/string_traits.h157
-rw-r--r--zen/symlink_target.h8
-rw-r--r--zen/time.h304
-rw-r--r--zen/type_tools.h13
-rw-r--r--zen/type_traits.h74
-rw-r--r--zen/utf8.h24
-rw-r--r--zen/win_ver.h2
-rw-r--r--zen/zstring.cpp12
-rw-r--r--zen/zstring.h18
146 files changed, 8165 insertions, 7328 deletions
diff --git a/Application.cpp b/Application.cpp
index 1a08c55c..24763493 100644
--- a/Application.cpp
+++ b/Application.cpp
@@ -22,6 +22,7 @@
#include <zen/file_handling.h>
#include <wx+/string_conv.h>
#include <wx/log.h>
+#include <wx/tooltip.h> //wxWidgets v2.9
#include "lib/lock_holder.h"
#ifdef FFS_LINUX
@@ -36,8 +37,31 @@ using namespace xmlAccess;
IMPLEMENT_APP(Application)
+#ifdef FFS_WIN
+namespace
+{
+const DWORD mainThreadId = ::GetCurrentThreadId();
+
+void onTerminationRequested()
+{
+ std::wstring msg = ::GetCurrentThreadId() == mainThreadId ?
+ L"Termination requested in main thread!\n\n" :
+ L"Termination requested in worker thread!\n\n";
+ msg += L"Please take a screenshot and file a bug report on: http://sourceforge.net/projects/freefilesync";
+
+ ::MessageBox(0, msg.c_str(), _("An exception occurred!").c_str(), 0);
+ std::abort();
+}
+}
+#endif
+
+
bool Application::OnInit()
{
+#ifdef FFS_WIN
+ std::set_terminate(onTerminationRequested); //unlike wxWidgets uncaught exception handling, this works for all worker threads
+#endif
+
returnValue = 0;
//do not call wxApp::OnInit() to avoid using default commandline parser
@@ -61,15 +85,22 @@ void Application::OnStartApplication(wxIdleEvent&)
//if appname is not set, the default is the executable's name!
SetAppName(wxT("FreeFileSync"));
-#ifdef FFS_LINUX
+#ifdef FFS_WIN
+ //Quote: "Best practice is that all applications call the process-wide SetErrorMode function with a parameter of
+ //SEM_FAILCRITICALERRORS at startup. This is to prevent error mode dialogs from hanging the application."
+ ::SetErrorMode(SEM_FAILCRITICALERRORS);
+
+#elif defined FFS_LINUX
Gtk::Main::init_gtkmm_internals();
- ::gtk_rc_parse((Zstring(getResourceDir()) + "styles.rc").c_str()); //remove inner border from bitmap buttons
+ ::gtk_rc_parse((utf8CvrtTo<Zstring>(getResourceDir()) + "styles.rc").c_str()); //remove inner border from bitmap buttons
#endif
#if wxCHECK_VERSION(2, 9, 1)
- wxToolTip::SetMaxWidth(-1); //disable tooltip wrapping
+#ifdef FFS_WIN
+ wxToolTip::SetMaxWidth(-1); //disable tooltip wrapping -> Windows only (as of 2.9.2)
+#endif
wxToolTip::SetAutoPop(7000); //tooltip visibilty in ms, 5s seems to be default for Windows
#endif
@@ -84,9 +115,9 @@ void Application::OnStartApplication(wxIdleEvent&)
{
//show messagebox and continue
if (error.getSeverity() == FfsXmlError::WARNING)
- ; //wxMessageBox(error.msg(), _("Warning"), wxOK | wxICON_WARNING); -> ignore parsing errors: should be migration problems only *cross-fingers*
+ ; //wxMessageBox(error.toString(), _("Warning"), wxOK | wxICON_WARNING); -> ignore parsing errors: should be migration problems only *cross-fingers*
else
- wxMessageBox(error.msg(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR);
}
//set program language
@@ -117,7 +148,7 @@ void Application::OnStartApplication(wxIdleEvent&)
filename = filename + Zstr(".ffs_gui");
else
{
- wxMessageBox(wxString(_("File does not exist:")) + wxT(" \"") + filename + wxT("\""), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(_("File does not exist:") + L" \"" + filename + L"\"", _("Error"), wxOK | wxICON_ERROR);
return;
}
}
@@ -126,67 +157,67 @@ void Application::OnStartApplication(wxIdleEvent&)
if (commandArgs.empty())
runGuiMode(commandArgs, globalSettings);
else if (gotDirNames) //mode 1: create temp configuration based on directory names passed
+ {
+ XmlGuiConfig guiCfg;
+ guiCfg.mainCfg.syncCfg.directionCfg.var = DirectionConfig::MIRROR;
+
+ for (auto iter = commandArgs.begin(); iter != commandArgs.end(); ++iter)
{
- XmlGuiConfig guiCfg;
- guiCfg.mainCfg.syncCfg.directionCfg.var = DirectionConfig::MIRROR;
+ size_t index = iter - commandArgs.begin();
+ Zstring dirname = toZ(*iter);
- for (auto iter = commandArgs.begin(); iter != commandArgs.end(); ++iter)
+ FolderPairEnh& fp = [&]() -> FolderPairEnh&
{
- size_t index = iter - commandArgs.begin();
- Zstring dirname = toZ(*iter);
+ if (index < 2)
+ return guiCfg.mainCfg.firstPair;
- FolderPairEnh& fp = [&]() -> FolderPairEnh&
- {
- if (index < 2)
- return guiCfg.mainCfg.firstPair;
-
- guiCfg.mainCfg.additionalPairs.resize((index - 2) / 2 + 1);
- return guiCfg.mainCfg.additionalPairs.back();
- }();
-
- if (index % 2 == 0)
- fp.leftDirectory = dirname;
- else if (index % 2 == 1)
- fp.rightDirectory = dirname;
- }
+ guiCfg.mainCfg.additionalPairs.resize((index - 2) / 2 + 1);
+ return guiCfg.mainCfg.additionalPairs.back();
+ }();
- runGuiMode(guiCfg, globalSettings);
+ if (index % 2 == 0)
+ fp.leftDirectory = dirname;
+ else if (index % 2 == 1)
+ fp.rightDirectory = dirname;
}
- else //mode 2: try to set config/batch-filename set by %1 parameter
- switch (getMergeType(commandArgs)) //throw ()
- {
- case MERGE_BATCH: //pure batch config files
- if (commandArgs.size() == 1)
- runBatchMode(commandArgs[0], globalSettings);
- else
- runGuiMode(commandArgs, globalSettings);
- break;
-
- case MERGE_GUI: //pure gui config files
- case MERGE_GUI_BATCH: //gui and batch files
+
+ runGuiMode(guiCfg, globalSettings);
+ }
+ else //mode 2: try to set config/batch-filename set by %1 parameter
+ switch (getMergeType(commandArgs)) //throw ()
+ {
+ case MERGE_BATCH: //pure batch config files
+ if (commandArgs.size() == 1)
+ runBatchMode(commandArgs[0], globalSettings);
+ else
runGuiMode(commandArgs, globalSettings);
- break;
+ break;
+
+ case MERGE_GUI: //pure gui config files
+ case MERGE_GUI_BATCH: //gui and batch files
+ runGuiMode(commandArgs, globalSettings);
+ break;
- case MERGE_OTHER: //= none or unknown;
- //commandArgs are not empty and contain at least one non-gui/non-batch config file: find it!
- std::find_if(commandArgs.begin(), commandArgs.end(),
- [](const wxString& filename) -> bool
+ case MERGE_OTHER: //= none or unknown;
+ //commandArgs are not empty and contain at least one non-gui/non-batch config file: find it!
+ std::find_if(commandArgs.begin(), commandArgs.end(),
+ [](const wxString& filename) -> bool
+ {
+ switch (getXmlType(filename)) //throw()
{
- switch (getXmlType(filename)) //throw()
- {
- case XML_TYPE_GLOBAL:
- case XML_TYPE_OTHER:
- wxMessageBox(wxString(_("The file does not contain a valid configuration:")) + wxT(" \"") + filename + wxT("\""), _("Error"), wxOK | wxICON_ERROR);
- return true;
-
- case XML_TYPE_GUI:
- case XML_TYPE_BATCH:
- break;
- }
- return false;
- });
- break;
- }
+ case XML_TYPE_GLOBAL:
+ case XML_TYPE_OTHER:
+ wxMessageBox(wxString(_("The file does not contain a valid configuration:")) + wxT(" \"") + filename + wxT("\""), _("Error"), wxOK | wxICON_ERROR);
+ return true;
+
+ case XML_TYPE_GUI:
+ case XML_TYPE_BATCH:
+ break;
+ }
+ return false;
+ });
+ break;
+ }
}
@@ -205,7 +236,7 @@ int Application::OnRun()
catch (const std::exception& e) //catch all STL exceptions
{
//unfortunately it's not always possible to display a message box in this erroneous situation, however (non-stream) file output always works!
- wxFile safeOutput(getConfigDir() + wxT("LastError.txt"), wxFile::write);
+ wxFile safeOutput(toWx(getConfigDir()) + wxT("LastError.txt"), wxFile::write);
safeOutput.Write(wxString::FromAscii(e.what()));
wxSafeShowMessage(_("An exception occurred!") + L" - FFS", wxString::FromAscii(e.what()));
@@ -213,7 +244,7 @@ int Application::OnRun()
}
catch (...) //catch the rest
{
- wxFile safeOutput(getConfigDir() + wxT("LastError.txt"), wxFile::write);
+ wxFile safeOutput(toWx(getConfigDir()) + wxT("LastError.txt"), wxFile::write);
safeOutput.Write(wxT("Unknown exception!"));
wxSafeShowMessage(_("An exception occurred!"), wxT("Unknown exception!"));
@@ -269,7 +300,7 @@ void Application::runBatchMode(const wxString& filename, xmlAccess::XmlGlobalSet
}
catch (const xmlAccess::FfsXmlError& error)
{
- wxMessageBox(error.msg(), _("Error"), wxOK | wxICON_ERROR); //batch mode: break on errors AND even warnings!
+ wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR); //batch mode: break on errors AND even warnings!
return;
}
//all settings have been read successfully...
@@ -317,6 +348,7 @@ void Application::runBatchMode(const wxString& filename, xmlAccess::XmlGlobalSet
CompareProcess cmpProc(globSettings.fileTimeTolerance,
globSettings.optDialogs,
allowPwPrompt,
+ globSettings.runWithBackgroundPriority,
statusHandler);
FolderComparison folderCmp;
@@ -329,6 +361,7 @@ void Application::runBatchMode(const wxString& filename, xmlAccess::XmlGlobalSet
globSettings.copyLockedFiles,
globSettings.copyFilePermissions,
globSettings.transactionalFileCopy,
+ globSettings.runWithBackgroundPriority,
statusHandler);
const std::vector<FolderPairSyncCfg> syncProcessCfg = extractSyncCfg(batchCfg.mainCfg);
@@ -339,7 +372,7 @@ void Application::runBatchMode(const wxString& filename, xmlAccess::XmlGlobalSet
//play (optional) sound notification after sync has completed
if (!batchCfg.silent)
{
- const wxString soundFile = getResourceDir() + wxT("Sync_Complete.wav");
+ const wxString soundFile = toWx(getResourceDir()) + wxT("Sync_Complete.wav");
if (fileExists(toZ(soundFile)))
wxSound::Play(soundFile, wxSOUND_ASYNC); //warning: this may fail and show a wxWidgets error message! => must not play when running FFS as a service!
}
diff --git a/BUILD/Changelog.txt b/BUILD/Changelog.txt
index b1c298c0..dbe9bd75 100644
--- a/BUILD/Changelog.txt
+++ b/BUILD/Changelog.txt
@@ -4,6 +4,16 @@
Changelog v4.2
---------------
+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
+Rearranged synchronization progress dialog
+More concise log message format
+Fixed default file icon (Kubuntu)
+Support for wxWidgets 2.9 series (Ubuntu/Kubuntu)
+FAT 2 sec tolerance for files dated in the future
+Honor DACL/SACL inheritance flags when copying NTFS permissions (Windows)
+New option in GlobalSettings.xml: "RunWithBackgroundPriority" (Windows Vista and later)
Changelog v4.1
diff --git a/BUILD/FreeFileSync.chm b/BUILD/FreeFileSync.chm
index 4ecd5aa0..7a38d187 100644
--- a/BUILD/FreeFileSync.chm
+++ b/BUILD/FreeFileSync.chm
Binary files differ
diff --git a/BUILD/Help/html/Batch Scripting.html b/BUILD/Help/html/Batch Scripting.html
index 4293813a..5ecddba7 100644
--- a/BUILD/Help/html/Batch Scripting.html
+++ b/BUILD/Help/html/Batch Scripting.html
@@ -5,7 +5,7 @@
<TITLE></TITLE>
<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)">
<META NAME="CREATED" CONTENT="20091206;16574000">
- <META NAME="CHANGED" CONTENT="20110901;20020700">
+ <META NAME="CHANGED" CONTENT="20111019;20535600">
<META NAME="Info 1" CONTENT="">
<META NAME="Info 2" CONTENT="">
<META NAME="Info 3" CONTENT="">
@@ -42,11 +42,11 @@ some general hints and examples for custom *.cmd and *.bat files.</FONT></P>
<LI><P STYLE="margin-bottom: 0cm"><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
- &quot;Invisible.vbs&quot; located in FreeFileSync's installation
+ &quot;RunSilent.vbs&quot; located in FreeFileSync's installation
directory.</FONT></P>
</UL>
<OL>
- <P STYLE="margin-bottom: 0cm"><B><FONT FACE="Tahoma, sans-serif">Usage:</FONT></B></P>
+ <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Usage:</B></FONT></P>
</OL>
<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6">
<P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm">
@@ -74,11 +74,11 @@ some general hints and examples for custom *.cmd and *.bat files.</FONT></P>
Shutdown PC after synchronization</FONT></P>
<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen4" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6">
<P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm">
- &nbsp;&nbsp;<FONT FACE="Tahoma, sans-serif"><FONT COLOR="#808080"><FONT FACE="Courier New, monospace"><I><B>::start
+ &nbsp;&nbsp;<FONT COLOR="#808080"><FONT FACE="Courier New, monospace"><I><B>::start
FreeFileSync Batch
Job<BR></B></I></FONT></FONT><FONT FACE="Courier New, monospace">&quot;C:\Users\ZenJu\Desktop\SyncJob.ffs_batch&quot;<BR>&nbsp;&nbsp;</FONT><FONT COLOR="#808080"><FONT FACE="Courier New, monospace"><I><B>::schedule
shutdown after 10 seconds<BR></B></I></FONT></FONT><FONT FACE="Courier New, monospace">shutdown
- /s /t 10</FONT></FONT></P>
+ /s /t 10</FONT></P>
</SPAN><BR CLEAR=LEFT><BR>
</P>
<P STYLE="margin-bottom: 0cm"><BR>
diff --git a/BUILD/Help/html/Macros.html b/BUILD/Help/html/Macros.html
index 405eb50a..3e9c93d1 100644
--- a/BUILD/Help/html/Macros.html
+++ b/BUILD/Help/html/Macros.html
@@ -5,7 +5,7 @@
<TITLE></TITLE>
<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)">
<META NAME="CREATED" CONTENT="20091206;16574000">
- <META NAME="CHANGED" CONTENT="20111003;13383700">
+ <META NAME="CHANGED" CONTENT="20111022;16542200">
<META NAME="Info 1" CONTENT="">
<META NAME="Info 2" CONTENT="">
<META NAME="Info 3" CONTENT="">
@@ -90,19 +90,12 @@ folder locations </B><SPAN STYLE="font-weight: normal">(Windows)</SPAN></FONT></
<FONT FACE="Courier New, monospace">C:\Users\username\Favorites<BR>%csidl_Templates%&nbsp;&nbsp;&nbsp;</FONT>e.
g. <FONT FACE="Courier New, monospace">C:\Users\username\Templates<BR>%csidl_Resources%&nbsp;&nbsp;&nbsp;</FONT>e.
g. <FONT FACE="Courier New, monospace">C:\Windows\Resources</FONT></FONT></P>
-</SPAN><BR CLEAR=LEFT>Note: Each macro for a user folder has a public
-version. E.g. <FONT FACE="Courier New, monospace">csidl_MyMusic</FONT>
+</SPAN><BR CLEAR=LEFT>Note: Each macro listed here also has a variant
+to address public folders. E.g. <FONT FACE="Courier New, monospace">csidl_MyMusic</FONT>
&rarr; <FONT FACE="Courier New, monospace">csidl_PublicMusic</FONT>
</P>
<P STYLE="margin-bottom: 0cm"><BR>
</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"><BR>
-</P>
<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT></P>
<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6">
<UL>
@@ -116,6 +109,13 @@ add a great amount of flexibility to Batch Synchronization
</P>
<P STYLE="margin-bottom: 0cm"><BR>
</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"><BR>
+</P>
<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT></P>
<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">The
batch configuration file <FONT FACE="Courier New, monospace">C:\SyncJob.ffs_batch
diff --git a/BUILD/Languages/chinese_simple.lng b/BUILD/Languages/chinese_simple.lng
index 2d7a702c..fc37aac5 100644
--- a/BUILD/Languages/chinese_simple.lng
+++ b/BUILD/Languages/chinese_simple.lng
@@ -901,24 +901,20 @@ Exclude: \stuff\temp\*
<target>复制被锁定的文件</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-通过卷影复制服务复制共享或锁定的文件
-(需要管理员权限)
+通过卷影复制服务复制共享或锁定的文件(需要管理员权限)
</target>
<source>Copy file access permissions</source>
<target>复制文件存取权限</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-转移文件和目录的权限
-(需要管理员权限)
+转移文件和目录的权限(需要管理员权限)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/chinese_traditional.lng b/BUILD/Languages/chinese_traditional.lng
index 25bcd84d..f872c6aa 100644
--- a/BUILD/Languages/chinese_traditional.lng
+++ b/BUILD/Languages/chinese_traditional.lng
@@ -892,24 +892,20 @@ Exclude: \stuff\temp\*
<target>複製被鎖定的檔案</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-複製共用或鎖定檔案使用使用卷影複製服務
-(需要管理員權限)
+複製共用或鎖定檔案使用使用卷影複製服務(需要管理員權限)
</target>
<source>Copy file access permissions</source>
<target>複製檔案系統權限</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-傳輸檔案和目錄權限
-(需要管理員權限)
+傳輸檔案和目錄權限(需要管理員權限)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/czech.lng b/BUILD/Languages/czech.lng
index 6589b85d..d3dd805e 100644
--- a/BUILD/Languages/czech.lng
+++ b/BUILD/Languages/czech.lng
@@ -913,24 +913,20 @@ Vynechat: \někde\něco\*
<target>Kopírovat zamčené soubory</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Kopírovat sdílené nebo zamčené soubory pomocí Volume Shadow Copy Service
-(Vyžaduje administrátorské oprávnění)
+Kopírovat sdílené nebo zamčené soubory pomocí Volume Shadow Copy Service (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 directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Přenést přístupová oprávnění souborů a adresářů
-(Vyžaduje administrátorké oprávnění)
+Přenést přístupová oprávnění souborů a adresářů (Vyžaduje administrátorké oprávnění)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/danish.lng b/BUILD/Languages/danish.lng
index 8b02fc1f..d13de994 100644
--- a/BUILD/Languages/danish.lng
+++ b/BUILD/Languages/danish.lng
@@ -907,24 +907,20 @@ Udeluk: \ting\temp\*
<target>Kopier låste filer</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Kopier delte eller låste filer ved hjælp af Drev Kopi Servicen
-(Kræver Administrator rettigheder)
+Kopier delte eller låste filer ved hjælp af Drev Kopi Servicen (Kræver Administrator rettigheder)
</target>
<source>Copy file access permissions</source>
<target>Kopier fil adgangs tilladelser</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Overfør fil og biblioteks tilladelser
-(Kræver Administrator rettigheder)
+Overfør fil og biblioteks tilladelser (Kræver Administrator rettigheder)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/dutch.lng b/BUILD/Languages/dutch.lng
index da3e2ae0..17519715 100644
--- a/BUILD/Languages/dutch.lng
+++ b/BUILD/Languages/dutch.lng
@@ -899,24 +899,20 @@ Uitsluiten: \stuff\temp\*
<target>Kopieer vergrendelde bestanden</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Kopieer gedeelde of vergrendelde bestanden met Volume Shadow Copy Service
-(Vereist Administrator rechten)
+Kopieer gedeelde of vergrendelde bestanden met Volume Shadow Copy Service (Vereist Administrator rechten)
</target>
<source>Copy file access permissions</source>
<target></target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Zet bestand en map permissies over
-(Vereist Administrator rechten)
+Zet bestand en map permissies over (Vereist Administrator rechten)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/english_uk.lng b/BUILD/Languages/english_uk.lng
index e7c8a3ef..a562a229 100644
--- a/BUILD/Languages/english_uk.lng
+++ b/BUILD/Languages/english_uk.lng
@@ -907,24 +907,20 @@ Exclude: \stuff\temp\*
<target>Copy locked files</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</target>
<source>Copy file access permissions</source>
<target>Copy file access permissions</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/finnish.lng b/BUILD/Languages/finnish.lng
index 843470c0..8b2012f6 100644
--- a/BUILD/Languages/finnish.lng
+++ b/BUILD/Languages/finnish.lng
@@ -802,24 +802,20 @@ Sulje pois: \stuff\temp\*
<target>Kopioi lukitut tiedostot</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Kopioi jaetut/lukitut tiedostot Volume Shadow Copy prosessilla
-(Vaatii Järjestelmävalvojan oikeuksia)
+Kopioi jaetut/lukitut tiedostot Volume Shadow Copy prosessilla (Vaatii Järjestelmävalvojan oikeuksia)
</target>
<source>Copy file access permissions</source>
<target>Kopioi tiedoston käyttöoikeuksia</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Siirrä tiedosto- ja hakemisto-oikeuksia
-(Vaatii Järjestelmävalvojan oikeuksia)
+Siirrä tiedosto- ja hakemisto-oikeuksia (Vaatii Järjestelmävalvojan oikeuksia)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/french.lng b/BUILD/Languages/french.lng
index 9c9add60..0fc97f8c 100644
--- a/BUILD/Languages/french.lng
+++ b/BUILD/Languages/french.lng
@@ -907,24 +907,20 @@ Exclude: \stuff\temp\*
<target>Copier les fichiers verrouillés</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-La copie des fichiers partagés ou verrouillés nécessite le Service Volume Shadow Copy
-(avec les droits administrateur)
+La copie des fichiers partagés ou verrouillés nécessite le Service Volume Shadow Copy (avec les droits administrateur)
</target>
<source>Copy file access permissions</source>
<target>Copie des droits d'accès aux fichiers</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Transfert des attributs système des fichiers et des répertoires
-(avec les droits administrateur)
+Transfert des attributs système des fichiers et des répertoires (avec les droits administrateur)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/german.lng b/BUILD/Languages/german.lng
index 52ef867a..78c9ee8f 100644
--- a/BUILD/Languages/german.lng
+++ b/BUILD/Languages/german.lng
@@ -22,39 +22,6 @@
<source>RealtimeSync - Automated Synchronization</source>
<target>RealtimeSync - Automatisierte Synchronisation</target>
-<source>Browse</source>
-<target>Auswählen</target>
-
-<source>Windows Error Code %x:</source>
-<target>Windows Fehlercode %x:</target>
-
-<source>Linux Error Code %x:</source>
-<target>Linux Fehlercode %x:</target>
-
-<source>Invalid command line: %x</source>
-<target>Ungültige Befehlszeile: %x</target>
-
-<source>Error resolving symbolic link:</source>
-<target>Fehler beim Auflösen des Symbolischen Links:</target>
-
-<source>Show pop-up</source>
-<target>Pop-up zeigen</target>
-
-<source>Show pop-up on errors or warnings</source>
-<target>Ein Auswahlfenster bei Fehlern oder Warnungen anzeigen</target>
-
-<source>Ignore errors</source>
-<target>Fehler ignorieren</target>
-
-<source>Hide all error and warning messages</source>
-<target>Alle Fehler- und Warnmeldungen unterdrücken</target>
-
-<source>Exit instantly</source>
-<target>Sofort beenden</target>
-
-<source>Abort synchronization immediately</source>
-<target>Synchronisation sofort abbrechen</target>
-
<source>Select alternate comparison settings</source>
<target>Alternative Vergleichseinstellungen auswählen</target>
@@ -115,6 +82,45 @@
<source>Select time span</source>
<target>Zeitspanne auswählen</target>
+<source>Show pop-up</source>
+<target>Pop-up zeigen</target>
+
+<source>Show pop-up on errors or warnings</source>
+<target>Ein Auswahlfenster bei Fehlern oder Warnungen anzeigen</target>
+
+<source>Ignore errors</source>
+<target>Fehler ignorieren</target>
+
+<source>Hide all error and warning messages</source>
+<target>Alle Fehler- und Warnmeldungen unterdrücken</target>
+
+<source>Exit instantly</source>
+<target>Sofort beenden</target>
+
+<source>Abort synchronization immediately</source>
+<target>Synchronisation sofort abbrechen</target>
+
+<source>Browse</source>
+<target>Auswählen</target>
+
+<source>Error reading from synchronization database:</source>
+<target>Fehler beim Lesen der Synchronisationsdatenbank:</target>
+
+<source>Error writing to synchronization database:</source>
+<target>Fehler beim Schreiben der Synchronisationsdatenbank:</target>
+
+<source>Invalid command line: %x</source>
+<target>Ungültige Befehlszeile: %x</target>
+
+<source>Windows Error Code %x:</source>
+<target>Windows Fehlercode %x:</target>
+
+<source>Linux Error Code %x:</source>
+<target>Linux Fehlercode %x:</target>
+
+<source>Error resolving symbolic link:</source>
+<target>Fehler beim Auflösen des Symbolischen Links:</target>
+
<source>%x MB</source>
<target>%x MB</target>
@@ -172,9 +178,6 @@
<source>One of the FreeFileSync database files is not yet existing:</source>
<target>Eine der FreeFileSync Datenbankdateien existiert noch nicht:</target>
-<source>Error reading from synchronization database:</source>
-<target>Fehler beim Lesen der Synchronisationsdatenbank:</target>
-
<source>Database files do not share a common synchronization session:</source>
<target>Die Datenbankdateien enthalten keine gemeinsame Synchronisationssitzung:</target>
@@ -199,12 +202,18 @@
<pluralform>%x Sek.</pluralform>
</target>
+<source>Drag && drop</source>
+<target>Drag && Drop</target>
+
<source>Info</source>
<target>Info</target>
<source>Fatal Error</source>
<target>Schwerer Fehler</target>
+<source>Error reading file:</source>
+<target>Fehler beim Lesen der Datei:</target>
+
<source>Scanning:</source>
<target>Suche Dateien:</target>
@@ -223,15 +232,36 @@
<source>Invalid FreeFileSync config file!</source>
<target>Ungültige FreeFileSync Konfigurationsdatei!</target>
-<source>File does not exist:</source>
-<target>Die Datei existiert nicht:</target>
-
<source>Error parsing configuration file:</source>
<target>Fehler beim Auswerten der Konfigurationsdatei:</target>
+<source>Error moving to Recycle Bin:</source>
+<target>Fehler beim Verschieben in den Papierkorb:</target>
+
+<source>Could not load a required DLL:</source>
+<target>Eine benötigte DLL konnte nicht geladen werden:</target>
+
+<source>Error accessing Volume Shadow Copy Service!</source>
+<target>Fehler beim Zugriff auf den Volumenschattenkopiedienst!</target>
+
+<source>Making shadow copies on WOW64 is not supported. Please use FreeFileSync 64-bit version.</source>
+<target>Das Erstellen von Schattenkopien unter WOW64 wird nicht unterstützt. Bitte benutzen Sie die FreeFileSync 64-Bit Version.</target>
+
+<source>Could not determine volume name for file:</source>
+<target>Der Laufwerksname für folgende Datei konnte nicht ermittelt werden:</target>
+
+<source>Volume name %x not part of filename %y!</source>
+<target>Laufwerksname %x ist kein Teil des Dateinamens %y!</target>
+
<source>/sec</source>
<target>/s</target>
+<source>File does not exist:</source>
+<target>Die Datei existiert nicht:</target>
+
+<source>Could not read values for the following XML nodes:</source>
+<target>Die folgenden XML Knoten konnten nicht gelesen werden:</target>
+
<source>S&ave configuration...</source>
<target>Konfiguration s&peichern...</target>
@@ -324,141 +354,6 @@ Die Befehlszeile wird ausgeführt wenn:
<source>A directory input field is empty.</source>
<target>Ein Verzeichniseingabefeld ist leer.</target>
-<source>Drag && drop</source>
-<target>Drag && Drop</target>
-
-<source>Could not initialize directory monitoring:</source>
-<target>Die Verzeichnisüberwachung konnte nicht gestartet werden:</target>
-
-<source>Error when monitoring directories.</source>
-<target>Fehler beim Überwachen der Verzeichnisse.</target>
-
-<source>Conversion error:</source>
-<target>Fehler bei Konvertierung:</target>
-
-<source>Error deleting file:</source>
-<target>Fehler beim Löschen der Datei:</target>
-
-<source>Error moving file:</source>
-<target>Fehler beim Verschieben der Datei:</target>
-
-<source>Target file already existing!</source>
-<target>Die Zieldatei existiert bereits!</target>
-
-<source>Error moving directory:</source>
-<target>Fehler beim Verschieben des Verzeichnisses:</target>
-
-<source>Target directory already existing!</source>
-<target>Zielverzeichnis existiert bereits!</target>
-
-<source>Error deleting directory:</source>
-<target>Fehler beim Löschen des Verzeichnisses:</target>
-
-<source>Error changing modification time:</source>
-<target>Fehler beim Setzen der Dateiänderungszeit:</target>
-
-<source>Error loading library function:</source>
-<target>Fehler beim Laden der Bibliotheksfunktion:</target>
-
-<source>Error reading security context:</source>
-<target>Fehler beim Lesen des Sicherheitskontextes:</target>
-
-<source>Error writing security context:</source>
-<target>Fehler beim Schreiben des Sicherheitskontextes:</target>
-
-<source>Error copying file permissions:</source>
-<target>Fehler beim Kopieren der Dateiberechtigungen:</target>
-
-<source>Error creating directory:</source>
-<target>Fehler beim Erstellen des Verzeichnisses:</target>
-
-<source>Error copying symbolic link:</source>
-<target>Fehler beim Kopieren des Symbolischen Links:</target>
-
-<source>Error copying file:</source>
-<target>Fehler beim Kopieren der Datei:</target>
-
-<source>Error opening file:</source>
-<target>Fehler beim Öffnen der Datei:</target>
-
-<source>Error writing file:</source>
-<target>Fehler beim Schreiben der Datei:</target>
-
-<source>Error reading file:</source>
-<target>Fehler beim Lesen der Datei:</target>
-
-<source>Operation aborted!</source>
-<target>Vorgang abgebrochen!</target>
-
-<source>Endless loop when traversing directory:</source>
-<target>Endlosschleife beim Lesen des Verzeichnisses:</target>
-
-<source>Error traversing directory:</source>
-<target>Fehler beim Durchsuchen des Verzeichnisses:</target>
-
-<source>Error setting privilege:</source>
-<target>Fehler beim Setzen des Privilegs:</target>
-
-<source>Error moving to Recycle Bin:</source>
-<target>Fehler beim Verschieben in den Papierkorb:</target>
-
-<source>Could not load a required DLL:</source>
-<target>Eine benötigte DLL konnte nicht geladen werden:</target>
-
-<source>Error writing to synchronization database:</source>
-<target>Fehler beim Schreiben der Synchronisationsdatenbank:</target>
-
-<source>Error accessing Volume Shadow Copy Service!</source>
-<target>Fehler beim Zugriff auf den Volumenschattenkopiedienst!</target>
-
-<source>Making shadow copies on WOW64 is not supported. Please use FreeFileSync 64-bit version.</source>
-<target>Das Erstellen von Schattenkopien unter WOW64 wird nicht unterstützt. Bitte benutzen Sie die FreeFileSync 64-Bit Version.</target>
-
-<source>Could not determine volume name for file:</source>
-<target>Der Laufwerksname für folgende Datei konnte nicht ermittelt werden:</target>
-
-<source>Volume name %x not part of filename %y!</source>
-<target>Laufwerksname %x ist kein Teil des Dateinamens %y!</target>
-
-<source>%x TB</source>
-<target>%x TB</target>
-
-<source>%x PB</source>
-<target>%x PB</target>
-
-<source>%x%</source>
-<target>%x%</target>
-
-<source>
-<pluralform>1 min</pluralform>
-<pluralform>%x min</pluralform>
-</source>
-<target>
-<pluralform>1 Min.</pluralform>
-<pluralform>%x Min.</pluralform>
-</target>
-
-<source>
-<pluralform>1 hour</pluralform>
-<pluralform>%x hours</pluralform>
-</source>
-<target>
-<pluralform>1 Stunde</pluralform>
-<pluralform>%x Stunden</pluralform>
-</target>
-
-<source>
-<pluralform>1 day</pluralform>
-<pluralform>%x days</pluralform>
-</source>
-<target>
-<pluralform>1 Tag</pluralform>
-<pluralform>%x Tage</pluralform>
-</target>
-
-<source>Could not read values for the following XML nodes:</source>
-<target>Die folgenden XML Knoten konnten nicht gelesen werden:</target>
-
<source>Logging</source>
<target>Protokoll</target>
@@ -906,26 +801,14 @@ Ausschließen: \stuff\temp\*
<source>Copy locked files</source>
<target>Gesperrte Dateien kopieren</target>
-<source>
-Copy shared or locked files using 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 Volume Shadow Copy Service (Requires Administrator rights)</source>
+<target>Kopiere gesperrte Dateien mit Hilfe des Volumenschattenkopie-Dienstes (Benötigt Administratorrechte)</target>
<source>Copy file access permissions</source>
<target>Dateizugriffsberechtigungen kopieren</target>
-<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
-</source>
-<target>
-Übertrage Datei- und Verzeichnisberechtigungen
-(Benötigt Administratorrechte)
-</target>
+<source>Transfer file and directory permissions (Requires Administrator rights)</source>
+<target>Übertrage Datei- und Verzeichnisberechtigungen (Benötigt Administratorrechte)</target>
<source>Hidden dialogs:</source>
<target>Versteckte Dialoge:</target>
@@ -957,6 +840,9 @@ Transfer file and directory permissions
<source>&Find next</source>
<target>&Weitersuchen</target>
+<source>Operation aborted!</source>
+<target>Vorgang abgebrochen!</target>
+
<source>Main bar</source>
<target>Hauptleiste</target>
@@ -1134,6 +1020,9 @@ Transfer file and directory permissions
<source>File list exported!</source>
<target>Dateiliste exportiert!</target>
+<source>Error writing file:</source>
+<target>Fehler beim Schreiben der Datei:</target>
+
<source>Batch file created successfully!</source>
<target>Batchdatei wurde erfolgreich erstellt!</target>
@@ -1299,6 +1188,105 @@ Transfer file and directory permissions
<source>Move files into a time-stamped subdirectory</source>
<target>Verschiebe Dateien in ein Unterverzeichnis mit Zeitstempel</target>
+<source>%x TB</source>
+<target>%x TB</target>
+
+<source>%x PB</source>
+<target>%x PB</target>
+
+<source>%x%</source>
+<target>%x%</target>
+
+<source>
+<pluralform>1 min</pluralform>
+<pluralform>%x min</pluralform>
+</source>
+<target>
+<pluralform>1 Min.</pluralform>
+<pluralform>%x Min.</pluralform>
+</target>
+
+<source>
+<pluralform>1 hour</pluralform>
+<pluralform>%x hours</pluralform>
+</source>
+<target>
+<pluralform>1 Stunde</pluralform>
+<pluralform>%x Stunden</pluralform>
+</target>
+
+<source>
+<pluralform>1 day</pluralform>
+<pluralform>%x days</pluralform>
+</source>
+<target>
+<pluralform>1 Tag</pluralform>
+<pluralform>%x Tage</pluralform>
+</target>
+
+<source>Could not initialize directory monitoring:</source>
+<target>Die Verzeichnisüberwachung konnte nicht gestartet werden:</target>
+
+<source>Error when monitoring directories.</source>
+<target>Fehler beim Überwachen der Verzeichnisse.</target>
+
+<source>Conversion error:</source>
+<target>Fehler bei Konvertierung:</target>
+
+<source>Error deleting file:</source>
+<target>Fehler beim Löschen der Datei:</target>
+
+<source>Error moving file:</source>
+<target>Fehler beim Verschieben der Datei:</target>
+
+<source>Target file already existing!</source>
+<target>Die Zieldatei existiert bereits!</target>
+
+<source>Error moving directory:</source>
+<target>Fehler beim Verschieben des Verzeichnisses:</target>
+
+<source>Target directory already existing!</source>
+<target>Zielverzeichnis existiert bereits!</target>
+
+<source>Error deleting directory:</source>
+<target>Fehler beim Löschen des Verzeichnisses:</target>
+
+<source>Error changing modification time:</source>
+<target>Fehler beim Setzen der Dateiänderungszeit:</target>
+
+<source>Error loading library function:</source>
+<target>Fehler beim Laden der Bibliotheksfunktion:</target>
+
+<source>Error reading security context:</source>
+<target>Fehler beim Lesen des Sicherheitskontextes:</target>
+
+<source>Error writing security context:</source>
+<target>Fehler beim Schreiben des Sicherheitskontextes:</target>
+
+<source>Error copying file permissions:</source>
+<target>Fehler beim Kopieren der Dateiberechtigungen:</target>
+
+<source>Error creating directory:</source>
+<target>Fehler beim Erstellen des Verzeichnisses:</target>
+
+<source>Error copying symbolic link:</source>
+<target>Fehler beim Kopieren des Symbolischen Links:</target>
+
+<source>Error copying file:</source>
+<target>Fehler beim Kopieren der Datei:</target>
+
+<source>Error opening file:</source>
+<target>Fehler beim Öffnen der Datei:</target>
+
+<source>Endless loop when traversing directory:</source>
+<target>Endlosschleife beim Lesen des Verzeichnisses:</target>
+
+<source>Error traversing directory:</source>
+<target>Fehler beim Durchsuchen des Verzeichnisses:</target>
+
+<source>Error setting privilege:</source>
+<target>Fehler beim Setzen des Privilegs:</target>
+
<source>Both sides have changed since last synchronization!</source>
<target>Beide Seiten wurden seit der letzten Synchronisation verändert!</target>
diff --git a/BUILD/Languages/greek.lng b/BUILD/Languages/greek.lng
index d7305afb..c3a9a44a 100644
--- a/BUILD/Languages/greek.lng
+++ b/BUILD/Languages/greek.lng
@@ -801,26 +801,14 @@ Exclude: \stuff\temp\*
<source>Copy locked files</source>
<target>Αντιγραφή κλειδωμένων αρχείων</target>
-<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
-</source>
-<target>
-Αντιγραφή κλειδωμένων ή διαμοιρασμένων αρχείων με την υπηρεσία Volume Shadow Copy
-(απαιτεί δικαιώματα Administrator)
-</target>
+<source>Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)</source>
+<target>Αντιγραφή κλειδωμένων ή διαμοιρασμένων αρχείων με την υπηρεσία Volume Shadow Copy (απαιτεί δικαιώματα Administrator)</target>
<source>Copy file access permissions</source>
<target>Αντιγραφή των αδειών προσπέλασης των αρχείων</target>
-<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
-</source>
-<target>
-Μεταφορά των αδειών για τα αρχεία και τους υποκαταλόγους
-(Απαιτεί δικαιώματα Aministrator)
-</target>
+<source>Transfer file and directory permissions (Requires Administrator rights)</source>
+<target>Μεταφορά των αδειών για τα αρχεία και τους υποκαταλόγους (Απαιτεί δικαιώματα Aministrator)</target>
<source>Hidden dialogs:</source>
<target>Κρυμμένα παράθυρα διαλόγου:</target>
diff --git a/BUILD/Languages/hebrew.lng b/BUILD/Languages/hebrew.lng
index eaf1aee6..40b6721a 100644
--- a/BUILD/Languages/hebrew.lng
+++ b/BUILD/Languages/hebrew.lng
@@ -907,24 +907,20 @@ Exclude: \stuff\temp\*
<target>העתק קבצים נעולים</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-העתק קבצים בשיתוף או נעולים באמצעות שרות Volume Shadow Copy Service
-(דורש הרשאות מנהל מערכת)
+העתק קבצים בשיתוף או נעולים באמצעות שרות Volume Shadow Copy Service (דורש הרשאות מנהל מערכת)
</target>
<source>Copy file access permissions</source>
<target>העתק הרשאות גישה של הקובץ</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-העבר הרשאות קבצים ומחיצות
-(דורש הרשאות מנהל מערכת)
+העבר הרשאות קבצים ומחיצות (דורש הרשאות מנהל מערכת)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/hungarian.lng b/BUILD/Languages/hungarian.lng
index 22414ea0..b5a14889 100644
--- a/BUILD/Languages/hungarian.lng
+++ b/BUILD/Languages/hungarian.lng
@@ -22,39 +22,6 @@
<source>RealtimeSync - Automated Synchronization</source>
<target>RealtimeSync - Automatikus szinkronizálás</target>
-<source>Browse</source>
-<target>Tallózás</target>
-
-<source>Windows Error Code %x:</source>
-<target>Windows hibakód %x:</target>
-
-<source>Linux Error Code %x:</source>
-<target>Linux hibakód %x:</target>
-
-<source>Invalid command line: %x</source>
-<target>Érvénytelen parancssor: %x</target>
-
-<source>Error resolving symbolic link:</source>
-<target>A szimbolikus link feloldása sikertelen:</target>
-
-<source>Show pop-up</source>
-<target>Párbeszédablak mutatása</target>
-
-<source>Show pop-up on errors or warnings</source>
-<target>Párbeszédablakok mutatása hiba vagy figyelmeztetés esetén</target>
-
-<source>Ignore errors</source>
-<target>Hibák figyelmen kívül hagyása</target>
-
-<source>Hide all error and warning messages</source>
-<target>Összes hibaüzenet és figyelmeztetés elrejtése</target>
-
-<source>Exit instantly</source>
-<target>Kilépés azonnal</target>
-
-<source>Abort synchronization immediately</source>
-<target>Szinkronizáció azonnali megszakítása</target>
-
<source>Select alternate comparison settings</source>
<target>Alternatív összehasonlítás beállításai</target>
@@ -115,6 +82,45 @@
<source>Select time span</source>
<target>Időintervallum kiválasztása</target>
+<source>Show pop-up</source>
+<target>Párbeszédablak mutatása</target>
+
+<source>Show pop-up on errors or warnings</source>
+<target>Párbeszédablakok mutatása hiba vagy figyelmeztetés esetén</target>
+
+<source>Ignore errors</source>
+<target>Hibák figyelmen kívül hagyása</target>
+
+<source>Hide all error and warning messages</source>
+<target>Összes hibaüzenet és figyelmeztetés elrejtése</target>
+
+<source>Exit instantly</source>
+<target>Kilépés azonnal</target>
+
+<source>Abort synchronization immediately</source>
+<target>Szinkronizáció azonnali megszakítása</target>
+
+<source>Browse</source>
+<target>Tallózás</target>
+
+<source>Error reading from synchronization database:</source>
+<target>Hiba történt a szinkronizációs adatbázis olvasása közben:</target>
+
+<source>Error writing to synchronization database:</source>
+<target>Hiba történt a szinkronizációs adatbázis írása közben:</target>
+
+<source>Invalid command line: %x</source>
+<target>Érvénytelen parancssor: %x</target>
+
+<source>Windows Error Code %x:</source>
+<target>Windows hibakód %x:</target>
+
+<source>Linux Error Code %x:</source>
+<target>Linux hibakód %x:</target>
+
+<source>Error resolving symbolic link:</source>
+<target>A szimbolikus link feloldása sikertelen:</target>
+
<source>%x MB</source>
<target>%x MB</target>
@@ -172,9 +178,6 @@
<source>One of the FreeFileSync database files is not yet existing:</source>
<target>A FreeFileSync egyik adatbázisfájlja nem létezik:</target>
-<source>Error reading from synchronization database:</source>
-<target>Hiba történt a szinkronizációs adatbázis olvasása közben:</target>
-
<source>Database files do not share a common synchronization session:</source>
<target>Az adatbázisfájlok nem osztoznak egy közös szinkronizációs munkameneten:</target>
@@ -199,12 +202,18 @@
<pluralform>%x másodperc</pluralform>
</target>
+<source>Drag && drop</source>
+<target>Húzd && Ejtsd</target>
+
<source>Info</source>
<target>Információ</target>
<source>Fatal Error</source>
<target>Kritikus hiba</target>
+<source>Error reading file:</source>
+<target>A fájl olvasása sikertelen:</target>
+
<source>Scanning:</source>
<target>Vizsgálat:</target>
@@ -223,15 +232,36 @@
<source>Invalid FreeFileSync config file!</source>
<target>Érvénytelen a FreeFileSync beállításait tartalmazó fájl!</target>
-<source>File does not exist:</source>
-<target>A következő fájl nem létezik:</target>
-
<source>Error parsing configuration file:</source>
<target>A beállításokat tartalmazó fájl feldolgozása sikertelen:</target>
+<source>Error moving to Recycle Bin:</source>
+<target>A Lomtárba (Recycle Bin) mozgatás sikertelen:</target>
+
+<source>Could not load a required DLL:</source>
+<target>A szükséges DLL betöltése sikertelen:</target>
+
+<source>Error accessing Volume Shadow Copy Service!</source>
+<target>Hiba történt a Volume Shadow Copy szolgáltatás elérése közben!</target>
+
+<source>Making shadow copies on WOW64 is not supported. Please use FreeFileSync 64-bit version.</source>
+<target>A Shadow Copy a WOW64-en nem támogatott. Kérjük, használja a 64-bites FreeFileSync-et.</target>
+
+<source>Could not determine volume name for file:</source>
+<target>A következő fájlnak nem lehet meghatározni a kötetnevét:</target>
+
+<source>Volume name %x not part of filename %y!</source>
+<target>A(z) %x kötetnevet nem tartalmazza a(z) %y fájlnév!</target>
+
<source>/sec</source>
<target>/másodperc</target>
+<source>File does not exist:</source>
+<target>A következő fájl nem létezik:</target>
+
+<source>Could not read values for the following XML nodes:</source>
+<target>A következő XML-csomópontok értékének beolvasása sikertelen:</target>
+
<source>S&ave configuration...</source>
<target>Beállítások mentés&e...</target>
@@ -324,141 +354,6 @@ A parancssor végrehajtódik minden alkalommal, ha:
<source>A directory input field is empty.</source>
<target>Valamelyik mappa megadására szolgáló mező üres.</target>
-<source>Drag && drop</source>
-<target>Húzd && Ejtsd</target>
-
-<source>Could not initialize directory monitoring:</source>
-<target>A mappafigyelés inicializálása sikertelen:</target>
-
-<source>Error when monitoring directories.</source>
-<target>Hiba történt a mappák figyelése közben.</target>
-
-<source>Conversion error:</source>
-<target>Konverziós hiba:</target>
-
-<source>Error deleting file:</source>
-<target>A fájl törlése sikertelen:</target>
-
-<source>Error moving file:</source>
-<target>Hiba a fájl mozgatásakor:</target>
-
-<source>Target file already existing!</source>
-<target>A célként megadott fájl már létezik!</target>
-
-<source>Error moving directory:</source>
-<target>Hiba a mappa mozgatásakor:</target>
-
-<source>Target directory already existing!</source>
-<target>A célmappa már létezik!</target>
-
-<source>Error deleting directory:</source>
-<target>A mappa törlése sikertelen:</target>
-
-<source>Error changing modification time:</source>
-<target>Az utolsó változtatás dátumának módosítása sikertelen:</target>
-
-<source>Error loading library function:</source>
-<target>A könyvtári funkció betöltése sikertelen:</target>
-
-<source>Error reading security context:</source>
-<target>A biztonsági címke olvasása sikertelen:</target>
-
-<source>Error writing security context:</source>
-<target>A biztonsági címke írása sikertelen:</target>
-
-<source>Error copying file permissions:</source>
-<target>Hiba történt a fájl jogosultságainak másolása közben:</target>
-
-<source>Error creating directory:</source>
-<target>A mappa létrehozása sikertelen:</target>
-
-<source>Error copying symbolic link:</source>
-<target>Hiba történt a szimbolikus link másolása közben:</target>
-
-<source>Error copying file:</source>
-<target>A fájl másolása sikertelen:</target>
-
-<source>Error opening file:</source>
-<target>A fájl megnyitása sikertelen:</target>
-
-<source>Error writing file:</source>
-<target>A fájl írása sikertelen:</target>
-
-<source>Error reading file:</source>
-<target>A fájl olvasása sikertelen:</target>
-
-<source>Operation aborted!</source>
-<target>Művelet megszakítva!</target>
-
-<source>Endless loop when traversing directory:</source>
-<target>Végtelen hurok a mappák bejárásakor:</target>
-
-<source>Error traversing directory:</source>
-<target>A mappa átnézése sikertelen:</target>
-
-<source>Error setting privilege:</source>
-<target>Hiba történt a jogok beállítása közben:</target>
-
-<source>Error moving to Recycle Bin:</source>
-<target>A Lomtárba (Recycle Bin) mozgatás sikertelen:</target>
-
-<source>Could not load a required DLL:</source>
-<target>A szükséges DLL betöltése sikertelen:</target>
-
-<source>Error writing to synchronization database:</source>
-<target>Hiba történt a szinkronizációs adatbázis írása közben:</target>
-
-<source>Error accessing Volume Shadow Copy Service!</source>
-<target>Hiba történt a Volume Shadow Copy szolgáltatás elérése közben!</target>
-
-<source>Making shadow copies on WOW64 is not supported. Please use FreeFileSync 64-bit version.</source>
-<target>A Shadow Copy a WOW64-en nem támogatott. Kérjük, használja a 64-bites FreeFileSync-et.</target>
-
-<source>Could not determine volume name for file:</source>
-<target>A következő fájlnak nem lehet meghatározni a kötetnevét:</target>
-
-<source>Volume name %x not part of filename %y!</source>
-<target>A(z) %x kötetnevet nem tartalmazza a(z) %y fájlnév!</target>
-
-<source>%x TB</source>
-<target>%x TB</target>
-
-<source>%x PB</source>
-<target>%x PB</target>
-
-<source>%x%</source>
-<target>%x%</target>
-
-<source>
-<pluralform>1 min</pluralform>
-<pluralform>%x min</pluralform>
-</source>
-<target>
-<pluralform>1 perc</pluralform>
-<pluralform>%x perc</pluralform>
-</target>
-
-<source>
-<pluralform>1 hour</pluralform>
-<pluralform>%x hours</pluralform>
-</source>
-<target>
-<pluralform>1 óra</pluralform>
-<pluralform>%x óra</pluralform>
-</target>
-
-<source>
-<pluralform>1 day</pluralform>
-<pluralform>%x days</pluralform>
-</source>
-<target>
-<pluralform>1 nap</pluralform>
-<pluralform>%x nap</pluralform>
-</target>
-
-<source>Could not read values for the following XML nodes:</source>
-<target>A következő XML-csomópontok értékének beolvasása sikertelen:</target>
-
<source>Logging</source>
<target>Naplózás</target>
@@ -907,26 +802,14 @@ Kizárni: \stuff\temp\*
<source>Copy locked files</source>
<target>Zárolt fájlok másolása</target>
-<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
-</source>
-<target>
-A megosztott vagy zárolt fájlok másolása a Volume Shadow Copy szolgáltatással
-(Adminisztrátori jogok szükségesek)
-</target>
+<source>Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)</source>
+<target>A megosztott vagy zárolt fájlok másolása a Volume Shadow Copy szolgáltatással (Adminisztrátori jogok szükségesek)</target>
<source>Copy file access permissions</source>
<target>Fájl hozzáférési jogosultságainak másolása</target>
-<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
-</source>
-<target>
-Fájlok és mappák jogosultságainak átvitele
-(Adminisztrátori jogok szükségesek)
-</target>
+<source>Transfer file and directory permissions (Requires Administrator rights)</source>
+<target>Fájlok és mappák jogosultságainak átvitele (Adminisztrátori jogok szükségesek)</target>
<source>Hidden dialogs:</source>
<target>Rejtett párbeszédablakok:</target>
@@ -958,6 +841,9 @@ Fájlok és mappák jogosultságainak átvitele
<source>&Find next</source>
<target>&Következő keresése</target>
+<source>Operation aborted!</source>
+<target>Művelet megszakítva!</target>
+
<source>Main bar</source>
<target>Fő panel</target>
@@ -1135,6 +1021,9 @@ Fájlok és mappák jogosultságainak átvitele
<source>File list exported!</source>
<target>A fájllista exportálása befejeződött!</target>
+<source>Error writing file:</source>
+<target>A fájl írása sikertelen:</target>
+
<source>Batch file created successfully!</source>
<target>A kötegelt feladat fájl létrehozása sikerült!</target>
@@ -1300,6 +1189,105 @@ Fájlok és mappák jogosultságainak átvitele
<source>Move files into a time-stamped subdirectory</source>
<target>Fájlok másolása időbélyeggel ellátott almappába</target>
+<source>%x TB</source>
+<target>%x TB</target>
+
+<source>%x PB</source>
+<target>%x PB</target>
+
+<source>%x%</source>
+<target>%x%</target>
+
+<source>
+<pluralform>1 min</pluralform>
+<pluralform>%x min</pluralform>
+</source>
+<target>
+<pluralform>1 perc</pluralform>
+<pluralform>%x perc</pluralform>
+</target>
+
+<source>
+<pluralform>1 hour</pluralform>
+<pluralform>%x hours</pluralform>
+</source>
+<target>
+<pluralform>1 óra</pluralform>
+<pluralform>%x óra</pluralform>
+</target>
+
+<source>
+<pluralform>1 day</pluralform>
+<pluralform>%x days</pluralform>
+</source>
+<target>
+<pluralform>1 nap</pluralform>
+<pluralform>%x nap</pluralform>
+</target>
+
+<source>Could not initialize directory monitoring:</source>
+<target>A mappafigyelés inicializálása sikertelen:</target>
+
+<source>Error when monitoring directories.</source>
+<target>Hiba történt a mappák figyelése közben.</target>
+
+<source>Conversion error:</source>
+<target>Konverziós hiba:</target>
+
+<source>Error deleting file:</source>
+<target>A fájl törlése sikertelen:</target>
+
+<source>Error moving file:</source>
+<target>Hiba a fájl mozgatásakor:</target>
+
+<source>Target file already existing!</source>
+<target>A célként megadott fájl már létezik!</target>
+
+<source>Error moving directory:</source>
+<target>Hiba a mappa mozgatásakor:</target>
+
+<source>Target directory already existing!</source>
+<target>A célmappa már létezik!</target>
+
+<source>Error deleting directory:</source>
+<target>A mappa törlése sikertelen:</target>
+
+<source>Error changing modification time:</source>
+<target>Az utolsó változtatás dátumának módosítása sikertelen:</target>
+
+<source>Error loading library function:</source>
+<target>A könyvtári funkció betöltése sikertelen:</target>
+
+<source>Error reading security context:</source>
+<target>A biztonsági címke olvasása sikertelen:</target>
+
+<source>Error writing security context:</source>
+<target>A biztonsági címke írása sikertelen:</target>
+
+<source>Error copying file permissions:</source>
+<target>Hiba történt a fájl jogosultságainak másolása közben:</target>
+
+<source>Error creating directory:</source>
+<target>A mappa létrehozása sikertelen:</target>
+
+<source>Error copying symbolic link:</source>
+<target>Hiba történt a szimbolikus link másolása közben:</target>
+
+<source>Error copying file:</source>
+<target>A fájl másolása sikertelen:</target>
+
+<source>Error opening file:</source>
+<target>A fájl megnyitása sikertelen:</target>
+
+<source>Endless loop when traversing directory:</source>
+<target>Végtelen hurok a mappák bejárásakor:</target>
+
+<source>Error traversing directory:</source>
+<target>A mappa átnézése sikertelen:</target>
+
+<source>Error setting privilege:</source>
+<target>Hiba történt a jogok beállítása közben:</target>
+
<source>Both sides have changed since last synchronization!</source>
<target>Mindkét oldal megváltozott az utolsó szikronizálás óta!</target>
diff --git a/BUILD/Languages/italian.lng b/BUILD/Languages/italian.lng
index 47224e77..cdf4ef83 100644
--- a/BUILD/Languages/italian.lng
+++ b/BUILD/Languages/italian.lng
@@ -907,24 +907,20 @@ Escludi: \stuff\temp\*
<target>Copia file bloccati</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Copia file condivisi o bloccati usando il Servizio Volume Shadow Copy
-(Richiede diritti di Administrator)
+Copia file condivisi o bloccati usando il Servizio Volume Shadow Copy (Richiede diritti di Administrator)
</target>
<source>Copy file access permissions</source>
<target>Copia permessi di accesso file</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Trasferisci file e permessi sulle cartelle
-(Richiede diritti di Administrator)
+Trasferisci file e permessi sulle cartelle (Richiede diritti di Administrator)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/japanese.lng b/BUILD/Languages/japanese.lng
index 564fb241..fb788c8d 100644
--- a/BUILD/Languages/japanese.lng
+++ b/BUILD/Languages/japanese.lng
@@ -8,7 +8,7 @@
</header>
<source>Searching for directory %x...</source>
-<target></target>
+<target>ディレクトリ %x を検索中...</target>
<source>Show in Explorer</source>
<target>エクスプローラで表示</target>
@@ -22,41 +22,8 @@
<source>RealtimeSync - Automated Synchronization</source>
<target>リアルタイム同期 - 自動同期</target>
-<source>Browse</source>
-<target>参照</target>
-
-<source>Windows Error Code %x:</source>
-<target>Windows エラーコード %x:</target>
-
-<source>Linux Error Code %x:</source>
-<target>Linux エラーコード %x:</target>
-
-<source>Invalid command line: %x</source>
-<target></target>
-
-<source>Error resolving symbolic link:</source>
-<target>シンボリックリンクの解決に失敗:</target>
-
-<source>Show pop-up</source>
-<target></target>
-
-<source>Show pop-up on errors or warnings</source>
-<target></target>
-
-<source>Ignore errors</source>
-<target>エラーを無視</target>
-
-<source>Hide all error and warning messages</source>
-<target>すべてのエラーと警告メッセージを非表示</target>
-
-<source>Exit instantly</source>
-<target>すぐに終了</target>
-
-<source>Abort synchronization immediately</source>
-<target>今すぐに同期処理を中断</target>
-
<source>Select alternate comparison settings</source>
-<target></target>
+<target>代替比較設定を選択</target>
<source>Select alternate synchronization settings</source>
<target>代替同期設定を選択</target>
@@ -115,6 +82,45 @@
<source>Select time span</source>
<target></target>
+<source>Show pop-up</source>
+<target>ポップアップ表示</target>
+
+<source>Show pop-up on errors or warnings</source>
+<target>エラーと警告をポップアップで表示</target>
+
+<source>Ignore errors</source>
+<target>エラーを無視</target>
+
+<source>Hide all error and warning messages</source>
+<target>すべてのエラーと警告メッセージを非表示</target>
+
+<source>Exit instantly</source>
+<target>すぐに終了</target>
+
+<source>Abort synchronization immediately</source>
+<target>今すぐに同期処理を中断</target>
+
+<source>Browse</source>
+<target>参照</target>
+
+<source>Error reading from synchronization database:</source>
+<target>同期データベースからの読み込みエラー:</target>
+
+<source>Error writing to synchronization database:</source>
+<target>同期データベースへの書き込みエラー:</target>
+
+<source>Invalid command line: %x</source>
+<target>無効なコマンドライン: %x</target>
+
+<source>Windows Error Code %x:</source>
+<target>Windows エラーコード %x:</target>
+
+<source>Linux Error Code %x:</source>
+<target>Linux エラーコード %x:</target>
+
+<source>Error resolving symbolic link:</source>
+<target>シンボリックリンクの解決に失敗:</target>
+
<source>%x MB</source>
<target>%x MB</target>
@@ -171,11 +177,8 @@
<source>One of the FreeFileSync database files is not yet existing:</source>
<target>FreeFileSync データベースファイルが存在しません:</target>
-<source>Error reading from synchronization database:</source>
-<target>同期データベースからの読み込みエラー:</target>
-
<source>Database files do not share a common synchronization session:</source>
-<target></target>
+<target>データベースファイルは一般的な同期セッションを共有しません:</target>
<source>An exception occurred!</source>
<target>例外が発生しました!</target>
@@ -197,12 +200,18 @@
<pluralform>%x 秒.</pluralform>
</target>
+<source>Drag && drop</source>
+<target>ドラッグ && ドロップ</target>
+
<source>Info</source>
<target>情報</target>
<source>Fatal Error</source>
<target>致命的なエラー</target>
+<source>Error reading file:</source>
+<target>ファイル読み込みエラー:</target>
+
<source>Scanning:</source>
<target>スキャン:</target>
@@ -213,20 +222,43 @@
<pluralform>[1 Thread]</pluralform>
<pluralform>[%x Threads]</pluralform>
</source>
-<target></target>
+<target>
+<pluralform>[%x スレッド]</pluralform>
+</target>
<source>Invalid FreeFileSync config file!</source>
<target>無効な FreeFileSync 構成ファイルです!</target>
-<source>File does not exist:</source>
-<target>ファイルが存在しません:</target>
-
<source>Error parsing configuration file:</source>
<target>構成ファイルの構文に誤りがあります:</target>
+<source>Error moving to Recycle Bin:</source>
+<target>ゴミ箱への移動に失敗:</target>
+
+<source>Could not load a required DLL:</source>
+<target>必要なDLLを読み込めません:</target>
+
+<source>Error accessing Volume Shadow Copy Service!</source>
+<target></target>
+
+<source>Making shadow copies on WOW64 is not supported. Please use FreeFileSync 64-bit version.</source>
+<target>WOW64 では、ボリュームシャドウコピーに対応していません、FreeFileSync 64-bit 版をお試しください。</target>
+
+<source>Could not determine volume name for file:</source>
+<target>ファイルのボリューム名が決定されていません:</target>
+
+<source>Volume name %x not part of filename %y!</source>
+<target>ボリューム名 %x にファイル名 %y はありません!</target>
+
<source>/sec</source>
<target>/秒</target>
+<source>File does not exist:</source>
+<target>ファイルが存在しません:</target>
+
+<source>Could not read values for the following XML nodes:</source>
+<target>以下の XMLノードの値を読み込むことが出来ません:</target>
+
<source>S&ave configuration...</source>
<target>構成設定を保存(&A)...</target>
@@ -319,138 +351,6 @@ The command line is executed each time:
<source>A directory input field is empty.</source>
<target>ディレクトリが入力されていません</target>
-<source>Drag && drop</source>
-<target>ドラッグ && ドロップ</target>
-
-<source>Could not initialize directory monitoring:</source>
-<target>監視するディレクトリを初期化できません:</target>
-
-<source>Error when monitoring directories.</source>
-<target>ディレクトリの監視エラー</target>
-
-<source>Conversion error:</source>
-<target>変換エラー:</target>
-
-<source>Error deleting file:</source>
-<target>ファイルの削除エラー:</target>
-
-<source>Error moving file:</source>
-<target>ファイルの移動に失敗:</target>
-
-<source>Target file already existing!</source>
-<target>対象ファイルは既に存在します!</target>
-
-<source>Error moving directory:</source>
-<target>ディレクトリ移動に失敗:</target>
-
-<source>Target directory already existing!</source>
-<target>対象ディレクトリはすでに存在します!</target>
-
-<source>Error deleting directory:</source>
-<target>ディレクトリの削除エラー:</target>
-
-<source>Error changing modification time:</source>
-<target>時間の修正中のエラー:</target>
-
-<source>Error loading library function:</source>
-<target>ライブラリ読み込みエラー:</target>
-
-<source>Error reading security context:</source>
-<target>セキュリティ・コンテキストの読み取りエラー:</target>
-
-<source>Error writing security context:</source>
-<target>セキュリティ・コンテキストの書き込みエラー:</target>
-
-<source>Error copying file permissions:</source>
-<target>パーミッションコピー中のエラー</target>
-
-<source>Error creating directory:</source>
-<target>ディレクトリ作成エラー:</target>
-
-<source>Error copying symbolic link:</source>
-<target>シンボリックリンクのコピーに失敗:</target>
-
-<source>Error copying file:</source>
-<target>ファイルのコピーに失敗:</target>
-
-<source>Error opening file:</source>
-<target>ファイルのオープンに失敗:</target>
-
-<source>Error writing file:</source>
-<target>ファイル書き込みエラー:</target>
-
-<source>Error reading file:</source>
-<target>ファイル読み込みエラー:</target>
-
-<source>Operation aborted!</source>
-<target>操作の中断!</target>
-
-<source>Endless loop when traversing directory:</source>
-<target>ディレクトリ移動中に無限ループが発生:</target>
-
-<source>Error traversing directory:</source>
-<target>ディレクトリの移動エラー:</target>
-
-<source>Error setting privilege:</source>
-<target>特権の設定エラー:</target>
-
-<source>Error moving to Recycle Bin:</source>
-<target>ゴミ箱への移動に失敗:</target>
-
-<source>Could not load a required DLL:</source>
-<target>必要なDLLを読み込めません:</target>
-
-<source>Error writing to synchronization database:</source>
-<target>同期データベースへの書き込みエラー:</target>
-
-<source>Error accessing Volume Shadow Copy Service!</source>
-<target></target>
-
-<source>Making shadow copies on WOW64 is not supported. Please use FreeFileSync 64-bit version.</source>
-<target>WOW64 では、ボリュームシャドウコピーに対応していません、FreeFileSync 64-bit 版をお試しください。</target>
-
-<source>Could not determine volume name for file:</source>
-<target>ファイルのボリューム名が決定されていません:</target>
-
-<source>Volume name %x not part of filename %y!</source>
-<target>ボリューム名 %x にファイル名 %y はありません!</target>
-
-<source>%x TB</source>
-<target>%x TB</target>
-
-<source>%x PB</source>
-<target>%x PB</target>
-
-<source>%x%</source>
-<target>%x%</target>
-
-<source>
-<pluralform>1 min</pluralform>
-<pluralform>%x min</pluralform>
-</source>
-<target>
-<pluralform>%x 分.</pluralform>
-</target>
-
-<source>
-<pluralform>1 hour</pluralform>
-<pluralform>%x hours</pluralform>
-</source>
-<target>
-<pluralform>%x 時間</pluralform>
-</target>
-
-<source>
-<pluralform>1 day</pluralform>
-<pluralform>%x days</pluralform>
-</source>
-<target>
-<pluralform>%x 日</pluralform>
-</target>
-
-<source>Could not read values for the following XML nodes:</source>
-<target>以下の XMLノードの値を読み込むことが出来ません:</target>
-
<source>Logging</source>
<target>ログ</target>
@@ -602,7 +502,7 @@ The command line is executed each time:
<target>一括処理</target>
<source>Create a batch file for automated synchronization. To start in batch mode simply double-click the file or execute via command line: FreeFileSync.exe <ffs_batch file>. This can also be scheduled in your operating system's task planner.</source>
-<target></target>
+<target>同期を自動的に実行する一括バッチファイルを作成します。実行方法はファイルをダブルクリックするか、コマンドライン経由で実行します - 例: FreeFileSync.exe <ffs_batch file>. この処理はあなたのシステムのタスクスケジューラでも実行可能です。</target>
<source>Help</source>
<target>ヘルプ</target>
@@ -626,7 +526,7 @@ The command line is executed each time:
<target>状態 フィードバック</target>
<source>Run minimized</source>
-<target></target>
+<target>最小化で起動</target>
<source>Maximum number of logfiles:</source>
<target>ログファイルの最大数:</target>
@@ -635,7 +535,7 @@ The command line is executed each time:
<target>ログファイルの保存先を選択:</target>
<source>Batch settings</source>
-<target></target>
+<target>一括設定</target>
<source>&Save</source>
<target>保存(&S)</target>
@@ -733,10 +633,15 @@ Files are found equal if
- file size
are the same
</source>
-<target></target>
+<target>
+ファイルが同様だった場合
+ - 最終書き込み時刻、日時
+ - ファイルサイズ
+で判断する
+</target>
<source>File time and size</source>
-<target></target>
+<target>ファイル時刻とサイズ</target>
<source>
Files are found equal if
@@ -870,10 +775,10 @@ Exclude: \stuff\temp\*
<target>除外</target>
<source>Minimum file size</source>
-<target></target>
+<target>最小ファイルサイズ</target>
<source>Maximum file size</source>
-<target></target>
+<target>最大ファイルサイズ</target>
<source>&Default</source>
<target>デフォルト(&D)</target>
@@ -885,33 +790,29 @@ Exclude: \stuff\temp\*
<target>列を下に移動</target>
<source>Transactional file copy</source>
-<target></target>
+<target>Transactional ファイルコピー</target>
<source>Write to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of fatal error.</source>
-<target></target>
+<target>最初に一時ファイル(*.ffs_tmp)に書き込み、それをリネームします。これにより、致命的なエラーが起こっても状態は保証されます</target>
<source>Copy locked files</source>
<target>ロックされたファイルをコピー</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-ボリュームシャドーコピーを使用して共有/ロックされたファイルをコピー
-(管理者権限が必要)
+ボリュームシャドーコピーを使用して共有/ロックされたファイルをコピー(管理者権限が必要)
</target>
<source>Copy file access permissions</source>
-<target></target>
+<target>ファイルのアクセスパーミッションをコピー</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-ファイルとディレクトリのパーミッション転送
-(管理者権限が必要)
+ファイルとディレクトリのパーミッション転送(管理者権限が必要)
</target>
<source>Hidden dialogs:</source>
@@ -944,6 +845,9 @@ Transfer file and directory permissions
<source>&Find next</source>
<target>次を検索(&F)</target>
+<source>Operation aborted!</source>
+<target>操作の中断!</target>
+
<source>Main bar</source>
<target>メインバー</target>
@@ -978,22 +882,22 @@ Transfer file and directory permissions
<target>カスタマイズ...</target>
<source>Select time span...</source>
-<target></target>
+<target>タイムスパンを選択</target>
<source>Auto-adjust columns</source>
<target>列の自動調整</target>
<source>Icon size:</source>
-<target></target>
+<target>アイコンサイズ:</target>
<source>Small</source>
-<target></target>
+<target>小</target>
<source>Medium</source>
-<target></target>
+<target>中</target>
<source>Large</source>
-<target></target>
+<target>大</target>
<source>Include all rows</source>
<target>すべての行を含める</target>
@@ -1121,6 +1025,9 @@ Transfer file and directory permissions
<source>File list exported!</source>
<target>ファイル一覧のエクスポートが完了!</target>
+<source>Error writing file:</source>
+<target>ファイル書き込みエラー:</target>
+
<source>Batch file created successfully!</source>
<target>バッチファイルが作成されました!</target>
@@ -1187,19 +1094,19 @@ Transfer file and directory permissions
<target>非アクティブ</target>
<source>Last x hours</source>
-<target></target>
+<target>最後の x 時間</target>
<source>Today</source>
-<target></target>
+<target>今日</target>
<source>This week</source>
-<target></target>
+<target>この週</target>
<source>This month</source>
-<target></target>
+<target>この月</target>
<source>This year</source>
-<target></target>
+<target>この年</target>
<source>Byte</source>
<target>バイト</target>
@@ -1226,7 +1133,7 @@ Transfer file and directory permissions
<target>フォロー</target>
<source>Copy NTFS permissions</source>
-<target></target>
+<target>NTFS パーミッションをコピー</target>
<source>Integrate external applications into context menu. The following macros are available:</source>
<target>外部のアプリケーションをコンテキストメニューに統合、以下のマクロが利用できます:</target>
@@ -1280,6 +1187,102 @@ Transfer file and directory permissions
<source>Move files into a time-stamped subdirectory</source>
<target>ファイルをタイムスタンプ名のサブフォルダに移動</target>
+<source>%x TB</source>
+<target>%x TB</target>
+
+<source>%x PB</source>
+<target>%x PB</target>
+
+<source>%x%</source>
+<target>%x%</target>
+
+<source>
+<pluralform>1 min</pluralform>
+<pluralform>%x min</pluralform>
+</source>
+<target>
+<pluralform>%x 分.</pluralform>
+</target>
+
+<source>
+<pluralform>1 hour</pluralform>
+<pluralform>%x hours</pluralform>
+</source>
+<target>
+<pluralform>%x 時間</pluralform>
+</target>
+
+<source>
+<pluralform>1 day</pluralform>
+<pluralform>%x days</pluralform>
+</source>
+<target>
+<pluralform>%x 日</pluralform>
+</target>
+
+<source>Could not initialize directory monitoring:</source>
+<target>監視するディレクトリを初期化できません:</target>
+
+<source>Error when monitoring directories.</source>
+<target>ディレクトリの監視エラー</target>
+
+<source>Conversion error:</source>
+<target>変換エラー:</target>
+
+<source>Error deleting file:</source>
+<target>ファイルの削除エラー:</target>
+
+<source>Error moving file:</source>
+<target>ファイルの移動に失敗:</target>
+
+<source>Target file already existing!</source>
+<target>対象ファイルは既に存在します!</target>
+
+<source>Error moving directory:</source>
+<target>ディレクトリ移動に失敗:</target>
+
+<source>Target directory already existing!</source>
+<target>対象ディレクトリはすでに存在します!</target>
+
+<source>Error deleting directory:</source>
+<target>ディレクトリの削除エラー:</target>
+
+<source>Error changing modification time:</source>
+<target>時間の修正中のエラー:</target>
+
+<source>Error loading library function:</source>
+<target>ライブラリ読み込みエラー:</target>
+
+<source>Error reading security context:</source>
+<target>セキュリティ・コンテキストの読み取りエラー:</target>
+
+<source>Error writing security context:</source>
+<target>セキュリティ・コンテキストの書き込みエラー:</target>
+
+<source>Error copying file permissions:</source>
+<target>パーミッションコピー中のエラー</target>
+
+<source>Error creating directory:</source>
+<target>ディレクトリ作成エラー:</target>
+
+<source>Error copying symbolic link:</source>
+<target>シンボリックリンクのコピーに失敗:</target>
+
+<source>Error copying file:</source>
+<target>ファイルのコピーに失敗:</target>
+
+<source>Error opening file:</source>
+<target>ファイルのオープンに失敗:</target>
+
+<source>Endless loop when traversing directory:</source>
+<target>ディレクトリ移動中に無限ループが発生:</target>
+
+<source>Error traversing directory:</source>
+<target>ディレクトリの移動エラー:</target>
+
+<source>Error setting privilege:</source>
+<target>特権の設定エラー:</target>
+
<source>Both sides have changed since last synchronization!</source>
<target>前回最後の同期処理以降、両側とも変更があります!</target>
@@ -1377,40 +1380,40 @@ Transfer file and directory permissions
<target>フォルダ %x を削除中</target>
<source>Deleting symbolic link %x</source>
-<target></target>
+<target>シンボリックリンク %x を削除中</target>
<source>Moving file %x to recycle bin</source>
-<target></target>
+<target>ファイル %x をゴミ箱に移動中</target>
<source>Moving folder %x to recycle bin</source>
-<target></target>
+<target>フォルダ %x をゴミ箱に移動中</target>
<source>Moving symbolic link %x to recycle bin</source>
-<target></target>
+<target>シンボリックリンク %x をゴミ箱に移動中</target>
<source>Moving file %x to %y</source>
-<target></target>
+<target>ファイル %x を %y に移動中</target>
<source>Moving folder %x to %y</source>
-<target></target>
+<target>フォルダ %x を %y に移動中</target>
<source>Moving symbolic link %x to %y</source>
-<target></target>
+<target>シンボリックリンク %x を %y に移動中</target>
<source>Creating file %x</source>
-<target></target>
+<target>ファイル %x を作成中</target>
<source>Creating symbolic link %x</source>
-<target></target>
+<target>シンボリックリンク %x を作成中</target>
<source>Creating folder %x</source>
<target>フォルダ %x を作成中</target>
<source>Overwriting file %x</source>
-<target></target>
+<target>ファイル %x を上書き中</target>
<source>Overwriting symbolic link %x</source>
-<target></target>
+<target>シンボリックリンク %x を上書き中</target>
<source>Verifying file %x</source>
<target>ファイル %x の検証中</target>
@@ -1449,7 +1452,7 @@ Transfer file and directory permissions
<target>利用可能なディスク空き容量:</target>
<source>Recycle Bin is not available for the following paths! Files will be deleted permanently instead:</source>
-<target></target>
+<target>以下のパスにあるゴミ箱が利用できません! 代わりにファイルは完全削除されます:</target>
<source>A directory will be modified which is part of multiple folder pairs! Please review synchronization settings!</source>
<target>複数ペアのディレクトリ設定部分に変更された箇所があります! 同期設定を再確認してみてください!</target>
diff --git a/BUILD/Languages/korean.lng b/BUILD/Languages/korean.lng
index d2774556..561c10cd 100644
--- a/BUILD/Languages/korean.lng
+++ b/BUILD/Languages/korean.lng
@@ -901,24 +901,20 @@ Exclude: \stuff\temp\*
<target>락 걸린 파일 복사</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Volume Shadow Copy를 사용하여 공유 또는 락 걸린 파일을 복사
-(관리자 권한 필요)
+Volume Shadow Copy를 사용하여 공유 또는 락 걸린 파일을 복사 (관리자 권한 필요)
</target>
<source>Copy file access permissions</source>
<target>파일 접근 권한 복사</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-파일 및 디렉토리 권한 전송
-(관리자 권한이 필요함)
+파일 및 디렉토리 권한 전송 (관리자 권한이 필요함)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/polish.lng b/BUILD/Languages/polish.lng
index a6034607..6ce2e79b 100644
--- a/BUILD/Languages/polish.lng
+++ b/BUILD/Languages/polish.lng
@@ -913,24 +913,20 @@ Wyklucz: \moje\temp\*
<target>Kopiuj zablokowane pliki</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Kopiuj pliki udostępnione i zablokowane używając usługi Volume Shadow Copy
- (Wymaga uprawnień administratora)
+Kopiuj pliki udostępnione i zablokowane używając usługi Volume Shadow Copy (Wymaga uprawnień administratora)
</target>
<source>Copy file access permissions</source>
<target>Kopiuj uprawnienia plików</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Transfer uprawnień plików i katalogów
-(Wymaga uprawnień Administratora)
+Transfer uprawnień plików i katalogów (Wymaga uprawnień Administratora)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/portuguese.lng b/BUILD/Languages/portuguese.lng
index 393b5257..97603be2 100644
--- a/BUILD/Languages/portuguese.lng
+++ b/BUILD/Languages/portuguese.lng
@@ -906,24 +906,20 @@ Excluir: \stuff\temp\*
<target>Copiar ficheiros bloqueados</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Copiar ficheiros partilhados ou bloqueados usando o serviço Volume Shadow Copy
- (Requer direitos de administrador)
+Copiar ficheiros partilhados ou bloqueados usando o serviço Volume Shadow Copy (Requer direitos de administrador)
</target>
<source>Copy file access permissions</source>
<target>Copiar permissões de acesso do ficheiro</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Transferir ficheiro e permissões
-(Requer direitos de administrador)
+Transferir ficheiro e permissões (Requer direitos de administrador)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/portuguese_br.lng b/BUILD/Languages/portuguese_br.lng
index 6ac527bd..5489adeb 100644
--- a/BUILD/Languages/portuguese_br.lng
+++ b/BUILD/Languages/portuguese_br.lng
@@ -907,24 +907,20 @@ Excluir: \stuff\temp\*
<target>Copiar arquivos bloqueados (em uso)</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Copia os arquivos compartilhados ou bloqueados (em uso) usando o Serviço de Cópia de Sombra de Volume
-(Requer direitos de Administrador)
+Copia os arquivos compartilhados ou bloqueados (em uso) usando o Serviço de Cópia de Sombra de Volume (Requer direitos de Administrador)
</target>
<source>Copy file access permissions</source>
<target>Copiar permissões de acesso aos arquivos</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Transfere as permissões de arquivos e diretórios
-(Requer direitos de Administrador)
+Transfere as permissões de arquivos e diretórios (Requer direitos de Administrador)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/romanian.lng b/BUILD/Languages/romanian.lng
index efc632ac..f9e85c0e 100644
--- a/BUILD/Languages/romanian.lng
+++ b/BUILD/Languages/romanian.lng
@@ -913,24 +913,20 @@ Excluse: \stuff\temp\*
<target>Copiere și a filelor zăvorîte [locked]</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Copiază filele partajate sau zăvorîte folosind Serviciul de Conservare a Volumelor [Volume Shadow Copy]
-(Necesită drepturi de Administrator)
+Copiază filele partajate sau zăvorîte folosind Serviciul de Conservare a Volumelor [Volume Shadow Copy] (Necesită drepturi de Administrator)
</target>
<source>Copy file access permissions</source>
<target>Copiază permisiunile de acces ale filelor</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Transferă permisiunile filelor și dosarelor
-(Necesită drepturi de Administrator)
+Transferă permisiunile filelor și dosarelor (Necesită drepturi de Administrator)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/russian.lng b/BUILD/Languages/russian.lng
index 24b5e0c3..1a4965e8 100644
--- a/BUILD/Languages/russian.lng
+++ b/BUILD/Languages/russian.lng
@@ -757,7 +757,7 @@ are the same
</target>
<source>File time and size</source>
-<target>Дата и разамер файла</target>
+<target>Дата и размер файла</target>
<source>
Files are found equal if
@@ -911,25 +911,20 @@ Exclude: \stuff\temp\*
<target>Копирование заблокированных файлов</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Копирование общих или заблокированных файлов
-с использованием службы Теневого Копирования Тома
-(требуются права Администратора)
+Копирование общих или заблокированных файлов с использованием службы Теневого Копирования Тома (требуются права Администратора)
</target>
<source>Copy file access permissions</source>
<target>Копирование прав доступа к файлам</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Передача прав доступа к файлам/папкам
-(требуются права Администратора)
+Передача прав доступа к файлам/папкам (требуются права Администратора)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/slovenian.lng b/BUILD/Languages/slovenian.lng
index 3fd7a777..bf917426 100644
--- a/BUILD/Languages/slovenian.lng
+++ b/BUILD/Languages/slovenian.lng
@@ -919,24 +919,20 @@ Izključi: \stuff\temp\*
<target>Kopiraj zaklenjene datoteke</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Kopiraj deljene ali zaklenjene datoteke z uporabo servisa Shadow Copy
-(Zahteva pravice skrbnika)
+Kopiraj deljene ali zaklenjene datoteke z uporabo servisa Shadow Copy (Zahteva pravice skrbnika)
</target>
<source>Copy file access permissions</source>
<target>Kopiraj dovoljenja dostopov datoteke</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Prenesi dovoljenja datotek in imenikov
-(Zahteva pravice skrbnika)
+Prenesi dovoljenja datotek in imenikov (Zahteva pravice skrbnika)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/spanish.lng b/BUILD/Languages/spanish.lng
index 5ebb2739..f1072972 100644
--- a/BUILD/Languages/spanish.lng
+++ b/BUILD/Languages/spanish.lng
@@ -907,24 +907,20 @@ Excluir: \stuff\temp\*
<target>Copiar archivos bloqueados</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Copiar archivos compartidos o bloqueados usando el servicio "Volume Shadow Copy"
-(Requiere derechos de administrador)
+Copiar archivos compartidos o bloqueados usando el servicio "Volume Shadow Copy" (Requiere derechos de administrador)
</target>
<source>Copy file access permissions</source>
<target>Copiar permisos de acceso al archivo</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Transferir permisos de archivo y directorio
-(Requiere derechos de administrador)
+Transferir permisos de archivo y directorio (Requiere derechos de administrador)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/swedish.lng b/BUILD/Languages/swedish.lng
index 7991c1e1..acd17992 100644
--- a/BUILD/Languages/swedish.lng
+++ b/BUILD/Languages/swedish.lng
@@ -907,24 +907,20 @@ Undanta: \stuff\temp\*
<target>Kopiera låsta filer</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Kopiera delade eller låsta filer med hjälp av Volume Shadow Copy Service
-(Kräver administratörsrättighet)
+Kopiera delade eller låsta filer med hjälp av Volume Shadow Copy Service (Kräver administratörsrättighet)
</target>
<source>Copy file access permissions</source>
<target>Kopiera filåtkomstbehörigheter</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Överför fil- och katalogrättigheter
-(Kräver administratörsrättigheter)
+Överför fil- och katalogrättigheter (Kräver administratörsrättigheter)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/turkish.lng b/BUILD/Languages/turkish.lng
index f988cd5c..a360bcd1 100644
--- a/BUILD/Languages/turkish.lng
+++ b/BUILD/Languages/turkish.lng
@@ -802,24 +802,20 @@ Katma: \stuff\temp\*
<target>Kilitli dosyaları da kopyala</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Paylaşılan ya da kilitli dosyaları Gölge Kopya Hizmetini
- kullanarak kopyalar (Yönetici izinlerine gerek duyar)
+Paylaşılan ya da kilitli dosyaları Gölge Kopya Hizmetini kullanarak kopyalar (Yönetici izinlerine gerek duyar)
</target>
<source>Copy file access permissions</source>
<target>Dosya erişim izinlerini kopyala</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Dosya ve klasör izinlerini de aktarır
-(Yönetici izinlerine gerek duyar)
+Dosya ve klasör izinlerini de aktarır (Yönetici izinlerine gerek duyar)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Languages/ukrainian.lng b/BUILD/Languages/ukrainian.lng
index 73265e99..4973cf06 100644
--- a/BUILD/Languages/ukrainian.lng
+++ b/BUILD/Languages/ukrainian.lng
@@ -912,25 +912,20 @@ Exclude: \stuff\temp\*
<target>Копіювати заблоковані файли</target>
<source>
-Copy shared or locked files using Volume Shadow Copy Service
-(Requires Administrator rights)
+Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)
</source>
<target>
-Копіювати спільних чи заблокованих файлів
-з використанням послуги Тіньового Копіювання Тому
-(потрібні права Адміністратора)
+Копіювати спільних чи заблокованих файлів з використанням послуги Тіньового Копіювання Тому (потрібні права Адміністратора)
</target>
<source>Copy file access permissions</source>
<target>Копіювати права доступу до файлу</target>
<source>
-Transfer file and directory permissions
-(Requires Administrator rights)
+Transfer file and directory permissions (Requires Administrator rights)
</source>
<target>
-Передача прав доступу файлу/каталогу
-(потрібні права Адміністратора)
+Передача прав доступу файлу/каталогу (потрібні права Адміністратора)
</target>
<source>Hidden dialogs:</source>
diff --git a/BUILD/Resources.zip b/BUILD/Resources.zip
index e1ede907..d1f7ca37 100644
--- a/BUILD/Resources.zip
+++ b/BUILD/Resources.zip
Binary files differ
diff --git a/BUILD/Invisible.vbs b/BUILD/RunSilent.vbs
index 8d1b7b80..a6fe4f6b 100644
--- a/BUILD/Invisible.vbs
+++ b/BUILD/RunSilent.vbs
@@ -3,7 +3,7 @@ num = argIn.Count
if num = 0 then
WScript.Echo "Call a Windows batch file (*.cmd, *.bat) without showing the console window" & VbCrLf & VbCrLf &_
- "Command line:" & VbCrLf & "WScript Invisible.vbs MyBatchfile.cmd <command line arguments>"
+ "Command line:" & VbCrLf & "WScript RunSilent.vbs MyBatchfile.cmd <command line arguments>"
WScript.Quit 1
end if
diff --git a/FreeFileSync.cbp b/FreeFileSync.cbp
index 7273796e..14c02576 100644
--- a/FreeFileSync.cbp
+++ b/FreeFileSync.cbp
@@ -96,11 +96,13 @@
<Add option="-Wmissing-include-dirs" />
<Add option="-Wswitch-enum" />
<Add option="-Wmain" />
+ <Add option="-std=c++0x" />
<Add option="-Wall" />
- <Add option="-std=gnu++0x" />
<Add option="-pipe" />
<Add option="-mthreads" />
+ <Add option="-fno-omit-frame-pointer" />
<Add option='-include &quot;zen/warn_static.h&quot;' />
+ <Add option="-std=gnu++0x" />
<Add option="-D__GNUWIN32__" />
<Add option="-D__WXMSW__" />
<Add option="-DFFS_WIN" />
@@ -111,7 +113,6 @@
<Add directory="C:\Programme\C++\wxWidgets\include" />
<Add directory="C:\Program Files\C++\Boost" />
<Add directory="." />
- <Add directory=".\zenXml" />
</Compiler>
<ResourceCompiler>
<Add directory="C:\Programme\C++\wxWidgets\include" />
@@ -401,7 +402,6 @@
<Unit filename="zen\assert_static.h" />
<Unit filename="zen\base64.h" />
<Unit filename="zen\build_info.h" />
- <Unit filename="zen\c_dll.h" />
<Unit filename="zen\com_error.h" />
<Unit filename="zen\com_ptr.h" />
<Unit filename="zen\com_util.h" />
diff --git a/FreeFileSync.vcxproj b/FreeFileSync.vcxproj
index e16d4f24..a733b7f4 100644
--- a/FreeFileSync.vcxproj
+++ b/FreeFileSync.vcxproj
@@ -100,7 +100,7 @@
<WarningLevel>Level4</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>ZEN_PLATFORM_WINDOWS;wxUSE_UNICODE;__WXMSW__;FFS_WIN;WXINTL_NO_GETTEXT_MACRO;__WXDEBUG__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>.;./zenXml;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc_lib\mswud;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>.;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc_lib\mswud;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
<PrecompiledHeaderFile>wx+\pch.h</PrecompiledHeaderFile>
<DisableSpecificWarnings>4100;4996;4267;4512</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@@ -134,7 +134,7 @@
<WarningLevel>Level4</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>ZEN_PLATFORM_WINDOWS;wxUSE_UNICODE;__WXMSW__;FFS_WIN;WXINTL_NO_GETTEXT_MACRO;__WXDEBUG__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>.;./zenXml;C:\Program Files\C++\wxWidgets-x64\include;C:\Program Files\C++\wxWidgets-x64\lib\vc_lib\mswud;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>.;C:\Program Files\C++\wxWidgets-x64\include;C:\Program Files\C++\wxWidgets-x64\lib\vc_lib\mswud;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
<PrecompiledHeaderFile>wx+\pch.h</PrecompiledHeaderFile>
<DisableSpecificWarnings>4100;4996;4267;4512</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@@ -168,7 +168,7 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PreprocessorDefinitions>ZEN_PLATFORM_WINDOWS;wxUSE_UNICODE;__WXMSW__;FFS_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>.;./zenXml;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc_lib\mswu;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>.;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc_lib\mswu;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<DisableSpecificWarnings>4100;4996;4267;4512</DisableSpecificWarnings>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -202,7 +202,7 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PreprocessorDefinitions>ZEN_PLATFORM_WINDOWS;wxUSE_UNICODE;__WXMSW__;FFS_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>.;./zenXml;C:\Program Files\C++\wxWidgets-x64\include;C:\Program Files\C++\wxWidgets-x64\lib\vc_lib\mswu;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>.;C:\Program Files\C++\wxWidgets-x64\include;C:\Program Files\C++\wxWidgets-x64\lib\vc_lib\mswu;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<DisableSpecificWarnings>4100;4996;4267;4512</DisableSpecificWarnings>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -280,7 +280,7 @@
<ClCompile Include="wx+\graph.cpp" />
<ClCompile Include="wx+\mouse_move_dlg.cpp" />
<ClCompile Include="wx+\tooltip.cpp" />
- <ClCompile Include="zenXml\zenxml\unit_test.cpp" />
+ <ClCompile Include="zenxml\unit_test.cpp" />
<ClCompile Include="zen\dst_hack.cpp" />
<ClCompile Include="zen\file_handling.cpp" />
<ClCompile Include="zen\file_id.cpp" />
diff --git a/Makefile b/Makefile
index fa56ceaa..addbe5e9 100644
--- a/Makefile
+++ b/Makefile
@@ -4,17 +4,17 @@ BINDIR = $(DESTDIR)$(prefix)/bin
SHAREDIR = $(DESTDIR)$(prefix)/share
APPSHAREDIR = $(SHAREDIR)/$(APPNAME)
-COMMON_COMPILE_FLAGS = -Wall -pipe `pkg-config --cflags gtk+-2.0` -O3 -pthread -std=gnu++0x -DNDEBUG -DwxUSE_UNICODE -DFFS_LINUX -DZEN_PLATFORM_OTHER -DWXINTL_NO_GETTEXT_MACRO -I. -I./zenXml
+COMMON_COMPILE_FLAGS = -Wall -pipe `pkg-config --cflags gtk+-2.0` -O3 -pthread -std=gnu++0x -DNDEBUG -DwxUSE_UNICODE -DFFS_LINUX -DZEN_PLATFORM_OTHER -DWXINTL_NO_GETTEXT_MACRO -I. -include "zen/i18n.h"
COMMON_LINK_FLAGS = -O3 -pthread
#default build
FFS_CPPFLAGS = $(COMMON_COMPILE_FLAGS) `wx-config --cxxflags --debug=no --unicode=yes`
-LINKFLAGS = $(COMMON_LINK_FLAGS) `wx-config --libs --debug=no --unicode=yes` -lboost_thread
+LINKFLAGS = $(COMMON_LINK_FLAGS) `wx-config --libs std,aui --debug=no --unicode=yes` -lboost_thread
#static build used for precompiled release
ifeq ($(BUILD),release)
FFS_CPPFLAGS = $(COMMON_COMPILE_FLAGS) `wx-config --cxxflags --debug=no --unicode=yes --static=yes`
-LINKFLAGS = $(COMMON_LINK_FLAGS) `wx-config --libs --debug=no --unicode=yes --static=yes` /usr/local/lib/libboost_thread.a
+LINKFLAGS = $(COMMON_LINK_FLAGS) `wx-config --libs std,aui --debug=no --unicode=yes --static=yes` /usr/local/lib/libboost_thread.a
endif
#####################################################################################################
diff --git a/RealtimeSync/RealtimeSync.cbp b/RealtimeSync/RealtimeSync.cbp
index 5c14d918..c842e6bb 100644
--- a/RealtimeSync/RealtimeSync.cbp
+++ b/RealtimeSync/RealtimeSync.cbp
@@ -61,9 +61,11 @@
<Add option="-Winit-self" />
<Add option="-Wswitch-enum" />
<Add option="-Wmain" />
+ <Add option="-std=c++0x" />
<Add option="-Wall" />
<Add option="-pipe" />
<Add option="-mthreads" />
+ <Add option="-fno-omit-frame-pointer" />
<Add option="-std=gnu++0x" />
<Add option='-include &quot;../zen/warn_static.h&quot;' />
<Add option="-D__GNUWIN32__" />
diff --git a/RealtimeSync/RealtimeSync.vcxproj b/RealtimeSync/RealtimeSync.vcxproj
index 81b51005..8c85de3b 100644
--- a/RealtimeSync/RealtimeSync.vcxproj
+++ b/RealtimeSync/RealtimeSync.vcxproj
@@ -100,7 +100,7 @@
<WarningLevel>Level4</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>ZEN_PLATFORM_WINDOWS;wxUSE_UNICODE;__WXMSW__;FFS_WIN;WXINTL_NO_GETTEXT_MACRO;__WXDEBUG__</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..;../zenXml;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc_lib\mswud;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc_lib\mswud;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
<PrecompiledHeaderFile>wx+/pch.h</PrecompiledHeaderFile>
<DisableSpecificWarnings>4100;4996;4267;4512</DisableSpecificWarnings>
<MultiProcessorCompilation>false</MultiProcessorCompilation>
@@ -130,7 +130,7 @@
<WarningLevel>Level4</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>ZEN_PLATFORM_WINDOWS;wxUSE_UNICODE;__WXMSW__;FFS_WIN;WXINTL_NO_GETTEXT_MACRO;__WXDEBUG__</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..;../zenXml;C:\Program Files\C++\wxWidgets-x64\include;C:\Program Files\C++\wxWidgets-x64\lib\vc_lib\mswud;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..;C:\Program Files\C++\wxWidgets-x64\include;C:\Program Files\C++\wxWidgets-x64\lib\vc_lib\mswud;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
<PrecompiledHeaderFile>wx+/pch.h</PrecompiledHeaderFile>
<DisableSpecificWarnings>4100;4996;4267;4512</DisableSpecificWarnings>
<MultiProcessorCompilation>false</MultiProcessorCompilation>
@@ -163,7 +163,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>ZEN_PLATFORM_WINDOWS;wxUSE_UNICODE;__WXMSW__;FFS_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..;../zenXml;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc_lib\mswu;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..;C:\Program Files\C++\wxWidgets\include;C:\Program Files\C++\wxWidgets\lib\vc_lib\mswu;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<DisableSpecificWarnings>4100;4996;4267;4512</DisableSpecificWarnings>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -198,7 +198,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>ZEN_PLATFORM_WINDOWS;wxUSE_UNICODE;__WXMSW__;FFS_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>..;../zenXml;C:\Program Files\C++\wxWidgets-x64\include;C:\Program Files\C++\wxWidgets-x64\lib\vc_lib\mswu;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..;C:\Program Files\C++\wxWidgets-x64\include;C:\Program Files\C++\wxWidgets-x64\lib\vc_lib\mswu;C:\Program Files\C++\Boost</AdditionalIncludeDirectories>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<DisableSpecificWarnings>4100;4996;4267;4512</DisableSpecificWarnings>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
diff --git a/RealtimeSync/application.cpp b/RealtimeSync/application.cpp
index 55c2e9c3..2f1a8848 100644
--- a/RealtimeSync/application.cpp
+++ b/RealtimeSync/application.cpp
@@ -26,6 +26,7 @@ using namespace zen;
IMPLEMENT_APP(Application);
+
bool Application::OnInit()
{
//do not call wxApp::OnInit() to avoid using default commandline parser
@@ -45,7 +46,12 @@ void Application::OnStartApplication(wxIdleEvent& event)
//if appname is not set, the default is the executable's name!
SetAppName(wxT("FreeFileSync")); //use a different app name, to have "GetUserDataDir()" return the same directory as for FreeFileSync
-#ifdef FFS_LINUX
+#ifdef FFS_WIN
+ //Quote: "Best practice is that all applications call the process-wide SetErrorMode function with a parameter of
+ //SEM_FAILCRITICALERRORS at startup. This is to prevent error mode dialogs from hanging the application."
+ ::SetErrorMode(SEM_FAILCRITICALERRORS);
+
+#elif defined FFS_LINUX
::gtk_rc_parse((zen::utf8CvrtTo<std::string>(zen::getResourceDir()) + "styles.rc").c_str()); //remove inner border from bitmap buttons
#endif
@@ -98,7 +104,7 @@ int Application::OnRun()
catch (const std::exception& e) //catch all STL exceptions
{
//unfortunately it's not always possible to display a message box in this erroneous situation, however (non-stream) file output always works!
- wxFile safeOutput(zen::getConfigDir() + wxT("LastError.txt"), wxFile::write);
+ wxFile safeOutput(toWx(zen::getConfigDir()) + wxT("LastError.txt"), wxFile::write);
safeOutput.Write(wxString::FromAscii(e.what()));
wxSafeShowMessage(_("An exception occurred!") + L" - RTS", wxString::FromAscii(e.what()));
diff --git a/RealtimeSync/application.h b/RealtimeSync/application.h
index 6b5481ad..69a28ef9 100644
--- a/RealtimeSync/application.h
+++ b/RealtimeSync/application.h
@@ -8,7 +8,6 @@
#define REALTIMESYNCAPP_H
#include <wx/app.h>
-#include <memory>
class Application : public wxApp
{
@@ -19,12 +18,7 @@ public:
private:
void OnStartApplication(wxIdleEvent& event);
-
- virtual wxLayoutDirection GetLayoutDirection() const //disable RTL languages for now...
- {
- return wxLayout_LeftToRight;
- }
-
+ //virtual wxLayoutDirection GetLayoutDirection() const { return wxLayout_LeftToRight; }
};
#endif // REALTIMESYNCAPP_H
diff --git a/RealtimeSync/gui_generated.cpp b/RealtimeSync/gui_generated.cpp
index a8514907..51229ebf 100644
--- a/RealtimeSync/gui_generated.cpp
+++ b/RealtimeSync/gui_generated.cpp
@@ -88,14 +88,11 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr
m_staticText21->Wrap( -1 );
sbSizer41->Add( m_staticText21, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
- bSizer1->Add( sbSizer41, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 40 );
+ bSizer1->Add( sbSizer41, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 20 );
m_staticline2 = new wxStaticLine( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizer1->Add( m_staticline2, 0, wxTOP|wxBOTTOM|wxEXPAND, 10 );
- wxBoxSizer* bSizer8;
- bSizer8 = new wxBoxSizer( wxVERTICAL );
-
sbSizerDirToWatch = new wxStaticBoxSizer( new wxStaticBox( m_panelMain, wxID_ANY, _("Directories to watch") ), wxVERTICAL );
m_panelMainFolder = new wxPanel( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
@@ -117,7 +114,7 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr
bSizer114->Add( bSizer781, 0, wxALIGN_CENTER_VERTICAL, 5 );
- m_txtCtrlDirectoryMain = new wxTextCtrl( m_panelMainFolder, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_txtCtrlDirectoryMain = new wxTextCtrl( m_panelMainFolder, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 300,-1 ), 0 );
bSizer114->Add( m_txtCtrlDirectoryMain, 1, wxALIGN_CENTER_VERTICAL, 5 );
m_dirPickerMain = new zen::DirPickerCtrl( m_panelMainFolder, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
@@ -139,9 +136,7 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr
bSizerFolders->Fit( m_scrolledWinFolders );
sbSizerDirToWatch->Add( m_scrolledWinFolders, 0, wxEXPAND, 5 );
- bSizer8->Add( sbSizerDirToWatch, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- bSizer1->Add( bSizer8, 0, wxEXPAND, 5 );
+ bSizer1->Add( sbSizerDirToWatch, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
wxStaticBoxSizer* sbSizer3;
sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( m_panelMain, wxID_ANY, _("Command line") ), wxVERTICAL );
@@ -157,9 +152,9 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr
m_spinCtrlDelay = new wxSpinCtrl( m_panelMain, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
m_spinCtrlDelay->SetToolTip( _("Idle time between detection of last change and execution of command line in seconds") );
- sbSizer4->Add( m_spinCtrlDelay, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 );
+ sbSizer4->Add( m_spinCtrlDelay, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
- bSizer1->Add( sbSizer4, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+ bSizer1->Add( sbSizer4, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_staticline1 = new wxStaticLine( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizer1->Add( m_staticline1, 0, wxEXPAND|wxTOP|wxBOTTOM, 10 );
diff --git a/RealtimeSync/main_dlg.cpp b/RealtimeSync/main_dlg.cpp
index 15623286..30e5f04e 100644
--- a/RealtimeSync/main_dlg.cpp
+++ b/RealtimeSync/main_dlg.cpp
@@ -65,9 +65,9 @@ MainDialog::MainDialog(wxDialog* dlg, const wxString& cfgFileName)
catch (const xmlAccess::FfsXmlError& error)
{
if (error.getSeverity() == xmlAccess::FfsXmlError::WARNING)
- wxMessageBox(error.msg(), _("Warning"), wxOK | wxICON_WARNING);
+ wxMessageBox(error.toString(), _("Warning"), wxOK | wxICON_WARNING);
else
- wxMessageBox(error.msg(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR);
}
const bool startWatchingImmediately = loadCfgSuccess && !cfgFileName.empty();
@@ -75,8 +75,14 @@ MainDialog::MainDialog(wxDialog* dlg, const wxString& 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
- Fit();
Center();
if (startWatchingImmediately) //start watch mode directly
@@ -100,7 +106,7 @@ MainDialog::~MainDialog()
}
catch (const xmlAccess::FfsXmlError& error)
{
- wxMessageBox(error.msg().c_str(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString().c_str(), _("Error"), wxOK | wxICON_ERROR);
}
}
@@ -119,7 +125,7 @@ void MainDialog::OnQuit(wxCommandEvent& event)
const wxString& MainDialog::lastConfigFileName()
{
- static wxString instance = zen::getConfigDir() + wxT("LastRun.ffs_real");
+ static wxString instance = toWx(zen::getConfigDir()) + wxT("LastRun.ffs_real");
return instance;
}
@@ -222,7 +228,7 @@ void MainDialog::OnSaveConfig(wxCommandEvent& event)
}
catch (const zen::FileError& error)
{
- wxMessageBox(error.msg().c_str(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString().c_str(), _("Error"), wxOK | wxICON_ERROR);
}
}
}
@@ -239,10 +245,10 @@ void MainDialog::loadConfig(const wxString& filename)
catch (const xmlAccess::FfsXmlError& error)
{
if (error.getSeverity() == xmlAccess::FfsXmlError::WARNING)
- wxMessageBox(error.msg(), _("Warning"), wxOK | wxICON_WARNING);
+ wxMessageBox(error.toString(), _("Warning"), wxOK | wxICON_WARNING);
else
{
- wxMessageBox(error.msg(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR);
return;
}
}
diff --git a/RealtimeSync/makefile b/RealtimeSync/makefile
index 4cef8c62..a6552b41 100644
--- a/RealtimeSync/makefile
+++ b/RealtimeSync/makefile
@@ -2,7 +2,7 @@ APPNAME = RealtimeSync
prefix = /usr
BINDIR = $(DESTDIR)$(prefix)/bin
-COMMON_COMPILE_FLAGS = -Wall -pipe `pkg-config --cflags gtk+-2.0` -O3 -pthread -std=gnu++0x -DNDEBUG -DwxUSE_UNICODE -DFFS_LINUX -DZEN_PLATFORM_OTHER -DWXINTL_NO_GETTEXT_MACRO -I.. -I../zenXml
+COMMON_COMPILE_FLAGS = -Wall -pipe `pkg-config --cflags gtk+-2.0` -O3 -pthread -std=gnu++0x -DNDEBUG -DwxUSE_UNICODE -DFFS_LINUX -DZEN_PLATFORM_OTHER -DWXINTL_NO_GETTEXT_MACRO -I.. -include "../zen/i18n.h"
COMMON_LINK_FLAGS = -O3 -pthread
#default build
diff --git a/RealtimeSync/resources.cpp b/RealtimeSync/resources.cpp
index 2936b7dc..8566a9d6 100644
--- a/RealtimeSync/resources.cpp
+++ b/RealtimeSync/resources.cpp
@@ -23,7 +23,7 @@ const GlobalResources& GlobalResources::instance()
GlobalResources::GlobalResources()
{
- wxFFileInputStream input(zen::getResourceDir() + wxT("Resources.zip"));
+ wxFFileInputStream input(toWx(zen::getResourceDir()) + wxT("Resources.zip"));
if (input.IsOk()) //if not... we don't want to react too harsh here
{
//activate support for .png files
diff --git a/RealtimeSync/resources.h b/RealtimeSync/resources.h
index 4c41d47d..820ff6a3 100644
--- a/RealtimeSync/resources.h
+++ b/RealtimeSync/resources.h
@@ -27,7 +27,7 @@ private:
GlobalResources(const GlobalResources&); //=delete
GlobalResources& operator=(const GlobalResources&); //=delete
-const wxBitmap& getImageInt(const wxString& name) const;
+ const wxBitmap& getImageInt(const wxString& name) const;
std::map<wxString, wxBitmap> bitmaps;
};
diff --git a/RealtimeSync/tray_menu.cpp b/RealtimeSync/tray_menu.cpp
index 8d43cabc..0cfed18e 100644
--- a/RealtimeSync/tray_menu.cpp
+++ b/RealtimeSync/tray_menu.cpp
@@ -351,7 +351,7 @@ rts::MonitorResponse rts::startDirectoryMonitor(const xmlAccess::XmlRealConfig&
}
catch (const zen::FileError& error)
{
- wxMessageBox(error.msg(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR);
return RESUME;
}
diff --git a/RealtimeSync/xml_ffs.cpp b/RealtimeSync/xml_ffs.cpp
index 32ef3b39..e0433374 100644
--- a/RealtimeSync/xml_ffs.cpp
+++ b/RealtimeSync/xml_ffs.cpp
@@ -39,8 +39,8 @@ xmlAccess::XmlRealConfig convertBatchToReal(const xmlAccess::XmlBatchConfig& bat
std::transform(uniqueFolders.begin(), uniqueFolders.end(), std::back_inserter(output.directories),
[](const Zstring & fn) { return toWx(fn); });
- output.commandline = wxT("\"") + zen::getLauncher() + wxT("\"") +
- wxT(" \"") + filename + wxT("\"");
+ output.commandline = std::wstring(L"\"") + zen::getLauncher() + L"\"" +
+ L" \"" + filename + L"\"";
return output;
}
diff --git a/RealtimeSync/xml_proc.cpp b/RealtimeSync/xml_proc.cpp
index 8e978aed..38ba2a17 100644
--- a/RealtimeSync/xml_proc.cpp
+++ b/RealtimeSync/xml_proc.cpp
@@ -42,19 +42,19 @@ bool isXmlTypeRTS(const XmlDoc& doc) //throw()
void xmlAccess::readRealConfig(const wxString& filename, XmlRealConfig& config)
{
if (!fileExists(toZ(filename)))
- throw FfsXmlError(_("File does not exist:") + "\n\"" + filename.c_str() + "\"");
+ throw FfsXmlError(_("File does not exist:") + L"\n\"" + toZ(filename) + L"\"");
XmlDoc doc;
loadXmlDocument(toZ(filename), doc); //throw (FfsXmlError)
if (!isXmlTypeRTS(doc))
- throw FfsXmlError(_("Error parsing configuration file:") + "\n\"" + filename.c_str() + "\"");
+ throw FfsXmlError(_("Error parsing configuration file:") + L"\n\"" + toZ(filename) + L"\"");
XmlIn in(doc);
::readConfig(in, config);
if (in.errorsOccured())
- throw FfsXmlError(_("Error parsing configuration file:") + "\n\"" + filename.c_str() + "\"\n\n" +
+ throw FfsXmlError(_("Error parsing configuration file:") + L"\n\"" + toZ(filename) + L"\"\n\n" +
getErrorMessageFormatted(in), FfsXmlError::WARNING);
}
diff --git a/algorithm.cpp b/algorithm.cpp
index d2e40f44..7c6dc5d9 100644
--- a/algorithm.cpp
+++ b/algorithm.cpp
@@ -385,7 +385,7 @@ std::pair<DataSetDir, const DirContainer*> retrieveDataSetDir(const Zstring& obj
return std::make_pair(DataSetDir(iter->first), &iter->second);
}
- return std::make_pair(DataSetDir(), static_cast<DirContainer*>(NULL)); //object not found
+ return std::make_pair(DataSetDir(), nullptr); //object not found
}
//----------------------------------------------------------------------------------------------
@@ -454,7 +454,7 @@ private:
catch (FileErrorDatabaseNotExisting&) {} //let's ignore these errors for now...
catch (FileError& error) //e.g. incompatible database version
{
- if (handler_) handler_->reportWarning(error.msg() + wxT(" \n\n") +
+ if (handler_) handler_->reportWarning(error.toString() + wxT(" \n\n") +
_("Setting default synchronization directions: Old files will be overwritten with newer files."));
}
return std::pair<DirInfoPtr, DirInfoPtr>(); //NULL
@@ -1248,7 +1248,7 @@ std::pair<wxString, int> zen::deleteFromGridAndHDPreview( //assemble message con
});
}
- return std::make_pair(cvrtString<wxString>(filesToDelete), totalDelCount);
+ return std::make_pair(copyStringTo<wxString>(filesToDelete), totalDelCount);
}
@@ -1333,7 +1333,7 @@ void deleteFromGridAndHDOneSide(InputIterator first, InputIterator last,
}
catch (const FileError& error)
{
- DeleteFilesHandler::Response rv = statusHandler.reportError(error.msg());
+ DeleteFilesHandler::Response rv = statusHandler.reportError(error.toString());
if (rv == DeleteFilesHandler::IGNORE_ERROR)
break;
@@ -1366,9 +1366,6 @@ void zen::deleteFromGridAndHD(std::vector<FileSystemObject*>& rowsToDeleteOnLeft
for (auto iter = folderCmp.begin(); iter != folderCmp.end(); ++iter)
baseDirCfgs[&** iter] = directCfgs[iter - folderCmp.begin()];
- //ensure cleanup: redetermination of sync-directions and removal of invalid rows
- ZEN_ON_BLOCK_EXIT( std::for_each(begin(folderCmp), end(folderCmp), BaseDirMapping::removeEmpty); );
-
std::set<FileSystemObject*> deleteLeft (rowsToDeleteOnLeft .begin(), rowsToDeleteOnLeft .end());
std::set<FileSystemObject*> deleteRight(rowsToDeleteOnRight.begin(), rowsToDeleteOnRight.end());
@@ -1381,44 +1378,51 @@ void zen::deleteFromGridAndHD(std::vector<FileSystemObject*>& rowsToDeleteOnLeft
set_remove_if(deleteLeft, std::mem_fun(&FileSystemObject::isEmpty<LEFT_SIDE>)); //remove empty rows to ensure correct statistics
set_remove_if(deleteRight, std::mem_fun(&FileSystemObject::isEmpty<RIGHT_SIDE>)); //
-
- deleteFromGridAndHDOneSide<LEFT_SIDE>(deleteLeft.begin(), deleteLeft.end(),
- useRecycleBin,
- statusHandler);
-
- deleteFromGridAndHDOneSide<RIGHT_SIDE>(deleteRight.begin(), deleteRight.end(),
- useRecycleBin,
- statusHandler);
-
- //update sync direction: we cannot do a full redetermination since the user may have committed manual changes
- std::set<FileSystemObject*> deletedTotal = deleteLeft;
- deletedTotal.insert(deleteRight.begin(), deleteRight.end());
-
- for (auto iter = deletedTotal.begin(); iter != deletedTotal.end(); ++iter)
+ //ensure cleanup: redetermination of sync-directions and removal of invalid rows
+ auto updateDirection = [&]()
{
- FileSystemObject& fsObj = **iter; //all pointers are required(!) to be bound
+ //update sync direction: we cannot do a full redetermination since the user may already have entered manual changes
+ std::set<FileSystemObject*> deletedTotal = deleteLeft;
+ deletedTotal.insert(deleteRight.begin(), deleteRight.end());
- if (fsObj.isEmpty<LEFT_SIDE>() != fsObj.isEmpty<RIGHT_SIDE>()) //make sure objects exists on one side only
+ for (auto iter = deletedTotal.begin(); iter != deletedTotal.end(); ++iter)
{
- auto cfgIter = baseDirCfgs.find(&fsObj.root());
- if (cfgIter != baseDirCfgs.end())
- {
- SyncDirection newDir = SYNC_DIR_NONE;
+ FileSystemObject& fsObj = **iter; //all pointers are required(!) to be bound
- if (cfgIter->second.var == DirectionConfig::AUTOMATIC)
- newDir = fsObj.isEmpty<LEFT_SIDE>() ? SYNC_DIR_RIGHT : SYNC_DIR_LEFT;
- else
+ if (fsObj.isEmpty<LEFT_SIDE>() != fsObj.isEmpty<RIGHT_SIDE>()) //make sure objects exists on one side only
+ {
+ auto cfgIter = baseDirCfgs.find(&fsObj.root());
+ if (cfgIter != baseDirCfgs.end())
{
- DirectionSet dirCfg = extractDirections(cfgIter->second);
- newDir = fsObj.isEmpty<LEFT_SIDE>() ? dirCfg.exRightSideOnly : dirCfg.exLeftSideOnly;
- }
+ SyncDirection newDir = SYNC_DIR_NONE;
- setSyncDirectionRec(newDir, fsObj); //set new direction (recursively)
+ if (cfgIter->second.var == DirectionConfig::AUTOMATIC)
+ newDir = fsObj.isEmpty<LEFT_SIDE>() ? SYNC_DIR_RIGHT : SYNC_DIR_LEFT;
+ else
+ {
+ DirectionSet dirCfg = extractDirections(cfgIter->second);
+ newDir = fsObj.isEmpty<LEFT_SIDE>() ? dirCfg.exRightSideOnly : dirCfg.exLeftSideOnly;
+ }
+
+ setSyncDirectionRec(newDir, fsObj); //set new direction (recursively)
+ }
+ else
+ assert(!"this should not happen!");
}
- else
- assert(!"this should not happen!");
}
- }
+
+ //last step: cleanup empty rows: this one invalidates all pointers!
+ std::for_each(begin(folderCmp), end(folderCmp), BaseDirMapping::removeEmpty);
+ };
+ ZEN_ON_BLOCK_EXIT(updateDirection()); //MSVC: assert is a macro and it doesn't play nice with ZEN_ON_BLOCK_EXIT, surprise... wasn't there something about macros being "evil"?
+
+ deleteFromGridAndHDOneSide<LEFT_SIDE>(deleteLeft.begin(), deleteLeft.end(),
+ useRecycleBin,
+ statusHandler);
+
+ deleteFromGridAndHDOneSide<RIGHT_SIDE>(deleteRight.begin(), deleteRight.end(),
+ useRecycleBin,
+ statusHandler);
}
diff --git a/comparison.cpp b/comparison.cpp
index 62267473..79b18ae9 100644
--- a/comparison.cpp
+++ b/comparison.cpp
@@ -77,8 +77,8 @@ void checkForIncompleteInput(const std::vector<FolderPairCfg>& folderPairsForm,
while (true)
{
const std::wstring additionalInfo = _("You can ignore this error to consider the directory as empty.");
- const ProcessCallback::Response rv = procCallback.reportError(_("A directory input field is empty.") + " \n\n" +
- + "(" + additionalInfo + ")");
+ const ProcessCallback::Response rv = procCallback.reportError(_("A directory input field is empty.") + L" \n\n" +
+ + L"(" + additionalInfo + L")");
if (rv == ProcessCallback::IGNORE_ERROR)
break;
else if (rv == ProcessCallback::RETRY)
@@ -103,8 +103,8 @@ void checkDirectoryExistence(const std::set<Zstring, LessFilename>& dirnames,
while (!dirExistsUpdating(dirname, allowUserInteraction, procCallback))
{
const std::wstring additionalInfo = _("You can ignore this error to consider the directory as empty.");
- std::wstring errorMessage = _("Directory does not exist:") + "\n" + "\"" + dirname + "\"";
- ProcessCallback::Response rv = procCallback.reportError(errorMessage + "\n\n" + additionalInfo /* + " " + getLastErrorFormatted()*/);
+ std::wstring errorMessage = _("Directory does not exist:") + L"\n" + L"\"" + dirname + L"\"";
+ ProcessCallback::Response rv = procCallback.reportError(errorMessage + L"\n\n" + additionalInfo /* + L" " + getLastErrorFormatted()*/);
if (rv == ProcessCallback::IGNORE_ERROR)
return;
@@ -153,8 +153,8 @@ wxString checkFolderDependency(const std::vector<FolderPairCfg>& folderPairsForm
warningMsg = _("Directories are dependent! Be careful when setting up synchronization rules:");
for (auto i = dependentDirs.begin(); i != dependentDirs.end(); ++i)
warningMsg += wxString(L"\n\n") +
- "\"" + i->first + "\"\n" +
- "\"" + i->second + "\"";
+ L"\"" + i->first + L"\"\n" +
+ L"\"" + i->second + L"\"";
}
return warningMsg;
}
@@ -208,16 +208,24 @@ bool filesHaveSameContentUpdating(const Zstring& filename1, const Zstring& filen
CompareProcess::CompareProcess(size_t fileTimeTol,
xmlAccess::OptionalDialogs& warnings,
bool allowUserInteraction,
+ bool runWithBackgroundPriority,
ProcessCallback& handler) :
fileTimeTolerance(fileTimeTol),
m_warnings(warnings),
allowUserInteraction_(allowUserInteraction),
- procCallback(handler),
- txtComparingContentOfFiles(toZ(replaceCpy(_("Comparing content of files %x"), L"%x", L"\n\"%x\"", false))) {}
+ procCallback(handler)
+ {
+if (runWithBackgroundPriority)
+procBackground.reset(new ScheduleForBackgroundProcessing);
+ }
void CompareProcess::startCompareProcess(const std::vector<FolderPairCfg>& cfgList, FolderComparison& output)
{
+ //prevent shutdown while (binary) comparison is in progress
+ DisableStandby dummy2;
+ (void)dummy2;
+
/*
#ifdef NDEBUG
wxLogNull noWxLogs; //hide wxWidgets log messages in release build
@@ -225,7 +233,6 @@ void CompareProcess::startCompareProcess(const std::vector<FolderPairCfg>& cfgLi
*/
//PERF_START;
-
//init process: keep at beginning so that all gui elements are initialized properly
procCallback.initNewProcess(-1, 0, ProcessCallback::PROCESS_SCANNING); //it's not known how many files will be scanned => -1 objects
@@ -314,10 +321,6 @@ void CompareProcess::startCompareProcess(const std::vector<FolderPairCfg>& cfgLi
UI_UPDATE_INTERVAL / 4); //every ~25 ms
//-------------------------------------------------------------------------------------------
- //prevent shutdown while (binary) comparison is in progress
- DisableStandby dummy2;
- (void)dummy2;
-
//traverse/process folders
FolderComparison output_tmp; //write to output not before END of process!
@@ -379,11 +382,11 @@ void CompareProcess::startCompareProcess(const std::vector<FolderPairCfg>& cfgLi
}
catch (const std::bad_alloc& e)
{
- procCallback.reportFatalError(_("Memory allocation failed!") + " " + e.what());
+ procCallback.reportFatalError(_("Memory allocation failed!") + L" " + utf8CvrtTo<std::wstring>(e.what()));
}
catch (const std::exception& e)
{
- procCallback.reportFatalError(wxString::FromAscii(e.what()));
+ procCallback.reportFatalError(utf8CvrtTo<std::wstring>(e.what()));
}
}
@@ -393,9 +396,9 @@ void CompareProcess::startCompareProcess(const std::vector<FolderPairCfg>& cfgLi
std::wstring getConflictInvalidDate(const Zstring& fileNameFull, Int64 utcTime)
{
std::wstring msg = _("File %x has an invalid date!");
- replace(msg, L"%x", std::wstring(L"\"") + fileNameFull + "\"");
- msg += L"\n\n" + _("Date") + ": " + utcToLocalTimeString(utcTime);
- return _("Conflict detected:") + "\n" + msg;
+ replace(msg, L"%x", std::wstring(L"\"") + fileNameFull + L"\"");
+ msg += L"\n\n" + _("Date") + L": " + utcToLocalTimeString(utcTime);
+ return _("Conflict detected:") + L"\n" + msg;
}
@@ -414,13 +417,13 @@ void makeSameLength(wxString& first, wxString& second)
std::wstring getConflictSameDateDiffSize(const FileMapping& fileObj)
{
std::wstring msg = _("Files %x have the same date but a different size!");
- replace(msg, wxT("%x"), wxString(wxT("\"")) + fileObj.getRelativeName<LEFT_SIDE>() + "\"");
+ replace(msg, L"%x", std::wstring(L"\"") + fileObj.getRelativeName<LEFT_SIDE>() + L"\"");
msg += L"\n\n";
- msg += L"<-- \t" + _("Date") + ": " + utcToLocalTimeString(fileObj.getLastWriteTime<LEFT_SIDE>()) +
- " \t" + _("Size") + ": " + toStringSep(fileObj.getFileSize<LEFT_SIDE>()) + wxT("\n");
- msg += L"--> \t" + _("Date") + ": " + utcToLocalTimeString(fileObj.getLastWriteTime<RIGHT_SIDE>()) +
- " \t" + _("Size") + ": " + toStringSep(fileObj.getFileSize<RIGHT_SIDE>());
- return _("Conflict detected:") + "\n" + msg;
+ msg += L"<-- \t" + _("Date") + L": " + utcToLocalTimeString(fileObj.getLastWriteTime<LEFT_SIDE>()) +
+ L" \t" + _("Size") + L": " + toStringSep(fileObj.getFileSize<LEFT_SIDE>()) + L"\n";
+ msg += L"--> \t" + _("Date") + L": " + utcToLocalTimeString(fileObj.getLastWriteTime<RIGHT_SIDE>()) +
+ L" \t" + _("Size") + L": " + toStringSep(fileObj.getFileSize<RIGHT_SIDE>());
+ return _("Conflict detected:") + L"\n" + msg;
}
}
@@ -465,8 +468,8 @@ void CompareProcess::categorizeSymlinkByTime(SymLinkMapping& linkObj) const
}
else
{
- std::wstring conflictMsg = _("Conflict detected:") + "\n" + _("Symlinks %x have the same date but a different target!");
- replace(conflictMsg, L"%x", std::wstring(L"\"") + linkObj.getRelativeName<LEFT_SIDE>() + "\"");
+ std::wstring conflictMsg = _("Conflict detected:") + L"\n" + _("Symlinks %x have the same date but a different target!");
+ replace(conflictMsg, L"%x", std::wstring(L"\"") + linkObj.getRelativeName<LEFT_SIDE>() + L"\"");
linkObj.setCategoryConflict(conflictMsg);
}
break;
@@ -622,12 +625,13 @@ void CompareProcess::compareByContent(std::vector<std::pair<FolderPairCfg, BaseD
const CmpFileTime timeCmp(fileTimeTolerance);
+const std::wstring txtComparingContentOfFiles = replaceCpy(_("Comparing content of files %x"), L"%x", L"\n\"%x\"", false);
+
//compare files (that have same size) bytewise...
std::for_each(filesToCompareBytewise.begin(), filesToCompareBytewise.end(),
[&](FileMapping* fileObj)
{
- const Zstring statusText = replaceCpy(txtComparingContentOfFiles, Zstr("%x"), fileObj->getRelativeName<LEFT_SIDE>(), false);
- procCallback.reportStatus(utf8CvrtTo<wxString>(statusText));
+ procCallback.reportStatus(replaceCpy(txtComparingContentOfFiles, L"%x", utf8CvrtTo<std::wstring>(fileObj->getRelativeName<LEFT_SIDE>()), false));
//check files that exist in left and right model but have different content
while (true)
@@ -655,7 +659,7 @@ void CompareProcess::compareByContent(std::vector<std::pair<FolderPairCfg, BaseD
}
catch (FileError& error)
{
- ProcessCallback::Response rv = procCallback.reportError(error.msg());
+ ProcessCallback::Response rv = procCallback.reportError(error.toString());
if (rv == ProcessCallback::IGNORE_ERROR)
{
fileObj->setCategoryConflict(_("Conflict detected:") + L"\n" + _("Comparing files by content failed."));
diff --git a/comparison.h b/comparison.h
index e628e86d..3928f44e 100644
--- a/comparison.h
+++ b/comparison.h
@@ -11,7 +11,7 @@
#include "lib/process_xml.h"
#include "lib/status_handler.h"
#include "structures.h"
-#include <zen/disable_standby.h>
+#include <zen/process_status.h>
#include "lib/norm_filter.h"
#include "lib/parallel_scan.h"
@@ -47,6 +47,8 @@ struct FolderPairCfg
std::vector<FolderPairCfg> extractCompareCfg(const MainConfiguration& mainCfg); //fill FolderPairCfg and resolve folder pairs
+//runComparison
+
//class handling comparison process
class CompareProcess
{
@@ -54,6 +56,7 @@ public:
CompareProcess(size_t fileTimeTol,
xmlAccess::OptionalDialogs& warnings,
bool allowUserInteraction,
+ bool runWithBackgroundPriority,
ProcessCallback& handler);
void startCompareProcess(const std::vector<FolderPairCfg>& cfgList, FolderComparison& output);
@@ -82,7 +85,7 @@ private:
const bool allowUserInteraction_;
ProcessCallback& procCallback;
- const Zstring txtComparingContentOfFiles;
+ std::unique_ptr<ScheduleForBackgroundProcessing> procBackground;
};
}
diff --git a/lib/FindFilePlus/dll_main.cpp b/lib/FindFilePlus/dll_main.cpp
index aca474bc..5d64181b 100644
--- a/lib/FindFilePlus/dll_main.cpp
+++ b/lib/FindFilePlus/dll_main.cpp
@@ -6,7 +6,7 @@
#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
+#include <zen/win.h>
#include "init_dll_binding.h"
diff --git a/lib/FindFilePlus/load_dll.cpp b/lib/FindFilePlus/load_dll.cpp
index 7166223b..20d9a5fe 100644
--- a/lib/FindFilePlus/load_dll.cpp
+++ b/lib/FindFilePlus/load_dll.cpp
@@ -6,7 +6,7 @@
#include "load_dll.h"
#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
+#include <zen/win.h>
void* /*FARPROC*/ dll::loadSymbol(const wchar_t* libraryName, const char* functionName)
{
diff --git a/lib/FindFilePlus/load_dll.h b/lib/FindFilePlus/load_dll.h
index 149b6efe..350de9f8 100644
--- a/lib/FindFilePlus/load_dll.h
+++ b/lib/FindFilePlus/load_dll.h
@@ -44,4 +44,3 @@ void* /*FARPROC*/ loadSymbol(const wchar_t* libraryName, const char* functionNam
}
#endif //LOAD_DLL_HEADER_0312463214872163832174
-
diff --git a/lib/IFileOperation/file_op.cpp b/lib/IFileOperation/file_op.cpp
index 10eac5de..fca802f0 100644
--- a/lib/IFileOperation/file_op.cpp
+++ b/lib/IFileOperation/file_op.cpp
@@ -5,69 +5,38 @@
// **************************************************************************
#include "file_op.h"
+#include <algorithm>
+#include <string>
#define WIN32_LEAN_AND_MEAN
-#include <zen/win.h>
#include <zen/com_ptr.h>
#include <zen/com_error.h>
-#include <Shellapi.h> // Included for shell constants such as FO_* values
-#include <shobjidl.h> // Required for necessary shell dependencies
-#include <algorithm>
-#include <string>
+#include <shellapi.h> //shell constants such as FO_* values
+#include <shobjidl.h>
using namespace zen;
-namespace fileop
+namespace
{
-inline
-void copyString(const std::wstring& input, wchar_t* buffer, size_t bufferSize)
+void moveToRecycleBin(const wchar_t* fileNames[], //throw ComError
+ size_t fileNo) //size of fileNames array
{
- if (bufferSize > 0)
- {
- //size_t endPos = input.copy(buffer, bufferSize - 1);
- //buffer[endPos] = 0;
- const size_t maxSize = std::min(input.length(), bufferSize - 1);
- std::copy(input.begin(), input.begin() + maxSize, buffer);
- buffer[maxSize] = 0;
- }
-}
-
-std::wstring lastErrorMessage; //this should really be thread-local!!!
-}
-
-
-bool fileop::moveToRecycleBin(const wchar_t* fileNames[],
- size_t fileNo) //size of fileNames array
-{
- HRESULT hr;
-
- // Create the IFileOperation interface
ComPtr<IFileOperation> fileOp;
- hr = ::CoCreateInstance(CLSID_FileOperation,
- NULL,
- CLSCTX_ALL,
- IID_PPV_ARGS(fileOp.init()));
- if (FAILED(hr))
- {
- lastErrorMessage = generateErrorMsg(L"Error calling \"CoCreateInstance\".", hr);
- return false;
- }
+ ZEN_CHECK_COM(::CoCreateInstance(CLSID_FileOperation, //throw ComError
+ NULL,
+ CLSCTX_ALL,
+ IID_PPV_ARGS(fileOp.init())));
// Set the operation flags. Turn off all UI
// from being shown to the user during the
// operation. This includes error, confirmation
// and progress dialogs.
- hr = fileOp->SetOperationFlags(FOF_ALLOWUNDO |
- FOF_NOCONFIRMATION |
- FOF_SILENT |
- FOFX_EARLYFAILURE |
- FOF_NOERRORUI);
- if (FAILED(hr))
- {
- lastErrorMessage = generateErrorMsg(L"Error calling \"SetOperationFlags\".", hr);
- return false;
- }
+ ZEN_CHECK_COM(fileOp->SetOperationFlags(FOF_ALLOWUNDO | //throw ComError
+ FOF_NOCONFIRMATION |
+ FOF_SILENT |
+ FOFX_EARLYFAILURE |
+ FOF_NOERRORUI));
int operationCount = 0;
@@ -75,161 +44,142 @@ bool fileop::moveToRecycleBin(const wchar_t* fileNames[],
{
//create file/folder item object
ComPtr<IShellItem> psiFile;
- hr = ::SHCreateItemFromParsingName(fileNames[i],
- NULL,
- IID_PPV_ARGS(psiFile.init()));
+ HRESULT hr = ::SHCreateItemFromParsingName(fileNames[i],
+ NULL,
+ IID_PPV_ARGS(psiFile.init()));
if (FAILED(hr))
{
if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || //file not existing anymore
hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND))
continue;
-
- std::wstring message(L"Error calling \"SHCreateItemFromParsingName\" for file:\n");
- message += std::wstring(L"\"") + fileNames[i] + L"\".";
-
- lastErrorMessage = generateErrorMsg(message, hr);
- return false;
+ throw ComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for file:\n") + L"\"" + fileNames[i] + L"\".", hr);
}
- hr = fileOp->DeleteItem(psiFile.get(), NULL);
- if (FAILED(hr))
- {
- lastErrorMessage = generateErrorMsg(L"Error calling \"DeleteItem\".", hr);
- return false;
- }
+ ZEN_CHECK_COM(fileOp->DeleteItem(psiFile.get(), NULL));
++operationCount;
}
- if (operationCount == 0) //calling PerformOperations() without anything to do results in E_UNEXPECTED
- return true;
+ if (operationCount == 0) //calling PerformOperations() without anything to do would result in E_UNEXPECTED
+ return;
//perform actual operations
- hr = fileOp->PerformOperations();
- if (FAILED(hr))
- {
- lastErrorMessage = generateErrorMsg(L"Error calling \"PerformOperations\".", hr);
- return false;
- }
+ ZEN_CHECK_COM(fileOp->PerformOperations());
//check if errors occured: if FOFX_EARLYFAILURE is not used, PerformOperations() can return with success despite errors!
BOOL pfAnyOperationsAborted = FALSE;
- hr = fileOp->GetAnyOperationsAborted(&pfAnyOperationsAborted);
- if (FAILED(hr))
- {
- lastErrorMessage = generateErrorMsg(L"Error calling \"GetAnyOperationsAborted\".", hr);
- return false;
- }
+ ZEN_CHECK_COM(fileOp->GetAnyOperationsAborted(&pfAnyOperationsAborted));
if (pfAnyOperationsAborted == TRUE)
- {
- lastErrorMessage = L"Operation did not complete successfully.";
- return false;
- }
-
- return true;
+ throw ComError(L"Operation did not complete successfully.");
}
-bool fileop::copyFile(const wchar_t* sourceFile,
- const wchar_t* targetFile)
+void copyFile(const wchar_t* sourceFile, //throw ComError
+ const wchar_t* targetFile)
{
- HRESULT hr;
-
- // Create the IFileOperation interface
ComPtr<IFileOperation> fileOp;
- hr = ::CoCreateInstance(CLSID_FileOperation,
- NULL,
- CLSCTX_ALL,
- IID_PPV_ARGS(fileOp.init()));
- if (FAILED(hr))
- {
- lastErrorMessage = generateErrorMsg(L"Error calling \"CoCreateInstance\".", hr);
- return false;
- }
+ ZEN_CHECK_COM(::CoCreateInstance(CLSID_FileOperation, //throw ComError
+ NULL,
+ CLSCTX_ALL,
+ IID_PPV_ARGS(fileOp.init())));
// Set the operation flags. Turn off all UI
// from being shown to the user during the
// operation. This includes error, confirmation
// and progress dialogs.
- hr = fileOp->SetOperationFlags(FOF_NOCONFIRMATION |
- FOF_SILENT |
- FOFX_EARLYFAILURE |
- FOF_NOERRORUI);
- if (FAILED(hr))
- {
- lastErrorMessage = generateErrorMsg(L"Error calling \"SetOperationFlags\".", hr);
- return false;
- }
-
+ ZEN_CHECK_COM(fileOp->SetOperationFlags(FOF_NOCONFIRMATION | //throw ComError
+ FOF_SILENT |
+ FOFX_EARLYFAILURE |
+ FOF_NOERRORUI));
//create source object
ComPtr<IShellItem> psiSourceFile;
- hr = ::SHCreateItemFromParsingName(sourceFile,
- NULL,
- IID_PPV_ARGS(psiSourceFile.init()));
- if (FAILED(hr))
{
- std::wstring message(L"Error calling \"SHCreateItemFromParsingName\" for file:\n");
- message += std::wstring(L"\"") + sourceFile + L"\".";
- lastErrorMessage = generateErrorMsg(message, hr);
- return false;
+ HRESULT hr = ::SHCreateItemFromParsingName(sourceFile,
+ NULL,
+ IID_PPV_ARGS(psiSourceFile.init()));
+ if (FAILED(hr))
+ throw ComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for file:\n") + L"\"" + sourceFile + L"\".", hr);
}
const size_t pos = std::wstring(targetFile).find_last_of(L'\\');
if (pos == std::wstring::npos)
- {
- lastErrorMessage = L"Target filename does not contain a path separator.";
- return false;
- }
+ throw ComError(L"Target filename does not contain a path separator.");
const std::wstring targetFolder(targetFile, pos);
const std::wstring targetFileNameShort = targetFile + pos + 1;
//create target folder object
ComPtr<IShellItem> psiTargetFolder;
- hr = ::SHCreateItemFromParsingName(targetFolder.c_str(),
- NULL,
- IID_PPV_ARGS(psiTargetFolder.init()));
- if (FAILED(hr))
{
- std::wstring message(L"Error calling \"SHCreateItemFromParsingName\" for folder:\n");
- message += std::wstring(L"\"") + targetFolder + L"\".";
- lastErrorMessage = generateErrorMsg(message, hr);
- return false;
+ HRESULT hr = ::SHCreateItemFromParsingName(targetFolder.c_str(),
+ NULL,
+ IID_PPV_ARGS(psiTargetFolder.init()));
+ if (FAILED(hr))
+ throw ComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for folder:\n") + L"\"" + targetFolder + L"\".", hr);
}
//schedule file copy operation
- hr = fileOp->CopyItem(psiSourceFile.get(), psiTargetFolder.get(), targetFileNameShort.c_str(), NULL);
- if (FAILED(hr))
- {
- lastErrorMessage = generateErrorMsg(L"Error calling \"CopyItem\".", hr);
- return false;
- }
+ ZEN_CHECK_COM(fileOp->CopyItem(psiSourceFile.get(), psiTargetFolder.get(), targetFileNameShort.c_str(), NULL));
//perform actual operations
- hr = fileOp->PerformOperations();
- if (FAILED(hr))
- {
- lastErrorMessage = generateErrorMsg(L"Error calling \"PerformOperations\".", hr);
- return false;
- }
+ ZEN_CHECK_COM(fileOp->PerformOperations());
//check if errors occured: if FOFX_EARLYFAILURE is not used, PerformOperations() can return with success despite errors!
BOOL pfAnyOperationsAborted = FALSE;
- hr = fileOp->GetAnyOperationsAborted(&pfAnyOperationsAborted);
- if (FAILED(hr))
+ ZEN_CHECK_COM(fileOp->GetAnyOperationsAborted(&pfAnyOperationsAborted));
+
+ if (pfAnyOperationsAborted == TRUE)
+ throw ComError(L"Operation did not complete successfully.");
+}
+
+
+inline
+void copyString(const std::wstring& input, wchar_t* buffer, size_t bufferSize)
+{
+ if (bufferSize > 0)
{
- lastErrorMessage = generateErrorMsg(L"Error calling \"GetAnyOperationsAborted\".", hr);
- return false;
+ //size_t endPos = input.copy(buffer, bufferSize - 1);
+ //buffer[endPos] = 0;
+ const size_t maxSize = std::min(input.length(), bufferSize - 1);
+ std::copy(input.begin(), input.begin() + maxSize, buffer);
+ buffer[maxSize] = 0;
}
+}
- if (pfAnyOperationsAborted == TRUE)
+std::wstring lastErrorMessage; //this should really be thread-local!!!
+}
+
+
+bool fileop::moveToRecycleBin(const wchar_t* fileNames[],
+ size_t fileNo) //size of fileNames array
+{
+ try
+ {
+ ::moveToRecycleBin(fileNames, fileNo); //throw ComError
+ return true;
+ }
+ catch (const zen::ComError& e)
{
- lastErrorMessage = L"Operation did not complete successfully.";
+ lastErrorMessage = e.toString();
return false;
}
+}
+
- return true;
+bool fileop::copyFile(const wchar_t* sourceFile,
+ const wchar_t* targetFile)
+{
+ try
+ {
+ ::copyFile(sourceFile, targetFile); //throw ComError
+ return true;
+ }
+ catch (const zen::ComError& e)
+ {
+ lastErrorMessage = e.toString();
+ return false;
+ }
}
diff --git a/lib/ShadowCopy/Shadow_2003.vcxproj b/lib/ShadowCopy/Shadow_Server2003.vcxproj
index a893a389..a893a389 100644
--- a/lib/ShadowCopy/Shadow_2003.vcxproj
+++ b/lib/ShadowCopy/Shadow_Server2003.vcxproj
diff --git a/lib/ShadowCopy/Shadow_Windows7.vcxproj b/lib/ShadowCopy/Shadow_Windows7.vcxproj
new file mode 100644
index 00000000..2392fa99
--- /dev/null
+++ b/lib/ShadowCopy/Shadow_Windows7.vcxproj
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>Windows7</ProjectName>
+ <ProjectGuid>{7E217D76-90A5-4B03-A6F8-E7C3ADD22901}</ProjectGuid>
+ <RootNamespace>ShadowDll</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <UseOfAtl>false</UseOfAtl>
+ <PlatformToolset>Windows7.1SDK</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>Windows7.1SDK</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>Windows7.1SDK</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>Windows7.1SDK</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">OBJ\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">OBJ\$(ProjectName)_$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">OBJ\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">OBJ\$(ProjectName)_$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">OBJ\$(ProjectName)_$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">OBJ\$(ProjectName)_$(Configuration)_$(Platform)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Shadow_$(ProjectName)_$(Platform)</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Shadow_$(ProjectName)_$(Platform)</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Shadow_$(ProjectName)_$(Platform)</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Shadow_$(ProjectName)_$(Platform)</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <BuildLog>
+ <Path>$(IntDir)Build.html</Path>
+ </BuildLog>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;SHADOWDLL_EXPORTS;USE_SHADOW_WINDOWS7;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings>
+ <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <ProfileGuidedDatabase>
+ </ProfileGuidedDatabase>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <BuildLog>
+ <Path>$(IntDir)Build.html</Path>
+ </BuildLog>
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings>
+ <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;SHADOWDLL_EXPORTS;USE_SHADOW_WINDOWS7;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <ProfileGuidedDatabase>
+ </ProfileGuidedDatabase>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <BuildLog>
+ <Path>$(IntDir)Build.html</Path>
+ </BuildLog>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;SHADOWDLL_EXPORTS;USE_SHADOW_WINDOWS7;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings>
+ <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <ProfileGuidedDatabase>
+ </ProfileGuidedDatabase>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <BuildLog>
+ <Path>$(IntDir)Build.html</Path>
+ </BuildLog>
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <DisableSpecificWarnings>4100;4996</DisableSpecificWarnings>
+ <AdditionalIncludeDirectories>../..</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;SHADOWDLL_EXPORTS;USE_SHADOW_WINDOWS7;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <ProfileGuidedDatabase>
+ </ProfileGuidedDatabase>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="dll_main.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ </PrecompiledHeader>
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ </PrecompiledHeader>
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</CompileAsManaged>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ </PrecompiledHeader>
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ </PrecompiledHeader>
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
+ </ClCompile>
+ <ClCompile Include="shadow.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="shadow.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/lib/ShadowCopy/shadow.cpp b/lib/ShadowCopy/shadow.cpp
index 12e9fa60..5047a698 100644
--- a/lib/ShadowCopy/shadow.cpp
+++ b/lib/ShadowCopy/shadow.cpp
@@ -7,12 +7,9 @@
#include "shadow.h"
#include <algorithm>
#include <string>
-#include <comdef.h>
#include <zen/com_ptr.h>
#include <zen/com_error.h>
-
-#define WIN32_LEAN_AND_MEAN
-#include "windows.h"
+#include <zen/scope_guard.h>
#ifdef USE_SHADOW_XP
#include "xp/inc/vss.h"
@@ -23,13 +20,30 @@
#include "Server 2003/inc/vss.h"
#include "Server 2003/inc/vswriter.h"
#include "Server 2003/inc/vsbackup.h"
+
+#elif defined USE_SHADOW_WINDOWS7
+#include <vss.h> //
+#include <vswriter.h> //part of Windows SDK for Windows 7
+#include <vsbackup.h> //
+#pragma comment(lib, "VssApi.lib")
+
#else
-adapt!
+#error adapt!
#endif
using namespace zen;
+struct shadow::ShadowData
+{
+ ShadowData(const ComPtr<IVssBackupComponents>& backupComp,
+ const std::wstring& shadowVolume) : backupComp_(backupComp), shadowVolume_(shadowVolume) {}
+
+ ComPtr<IVssBackupComponents> backupComp_;
+ std::wstring shadowVolume_;
+};
+
+
namespace
{
inline
@@ -45,143 +59,99 @@ void copyString(const std::wstring& input, wchar_t* buffer, size_t bufferSize)
}
}
-inline
-void writeErrorMsg(const wchar_t* input, HRESULT hr, wchar_t* output, unsigned int outputLen)
-{
- copyString(generateErrorMsg(input, hr), output, outputLen);
-}
-}
-
-bool shadow::createShadowCopy(const wchar_t* volumeName,
- wchar_t* shadowVolName,
- unsigned int shadowBufferLen,
- ShadowHandle* handle,
- wchar_t* errorMessage,
- unsigned int errorBufferLen)
+shadow::ShadowData createShadowCopy(const wchar_t* volumeName) //throw ComError
{
- //MessageBox(0, L"backup err", L"", 0); */
- *handle = 0;
- HRESULT hr = NULL;
-
ComPtr<IVssBackupComponents> backupComp;
- if (FAILED(hr = CreateVssBackupComponents(backupComp.init())))
{
- if (hr == E_ACCESSDENIED)
- writeErrorMsg(L"The caller does not have sufficient backup privileges or is not an administrator.", hr, errorMessage, errorBufferLen);
- else
- writeErrorMsg(L"Error calling \"CreateVssBackupComponents\".", hr, errorMessage, errorBufferLen);
- return false;
+ HRESULT hr = ::CreateVssBackupComponents(backupComp.init());
+ if (FAILED(hr))
+ {
+ if (hr == E_ACCESSDENIED)
+ throw ComError(L"The caller does not have sufficient backup privileges or is not an administrator.", hr);
+ throw ComError(L"Error calling \"CreateVssBackupComponents\".", hr);
+ }
}
- if (FAILED(hr = backupComp->InitializeForBackup()))
- {
- writeErrorMsg(L"Error calling \"InitializeForBackup\".", hr, errorMessage, errorBufferLen);
- return false;
- }
+ ZEN_CHECK_COM(backupComp->InitializeForBackup()); //throw ComError
+ ZEN_CHECK_COM(backupComp->SetBackupState(false, false, VSS_BT_FULL)); //throw ComError
- if (FAILED(hr = backupComp->SetBackupState(false, false, VSS_BT_FULL)))
+ auto waitForComFuture = [](IVssAsync& fut)
{
- writeErrorMsg(L"Error calling \"SetBackupState\".", hr, errorMessage, errorBufferLen);
- return false;
- }
+ ZEN_CHECK_COM(fut.Wait());
- ComPtr<IVssAsync> vssWriters;
- if (FAILED(hr = backupComp->GatherWriterMetadata(vssWriters.init())))
- {
- //this can happen if XP-version of VSS is used on Windows Vista (which needs at least VSS-Server2003 build)
- writeErrorMsg(L"Error calling \"GatherWriterMetadata\".", hr, errorMessage, errorBufferLen);
- return false;
- }
+ HRESULT hr = S_OK;
+ ZEN_CHECK_COM(fut.QueryStatus(&hr, NULL)); //check if the async operation succeeded...
+ if (FAILED(hr))
+ throw ComError(L"Error calling \"fut->QueryStatus\".", hr);
+ };
- //wait for shadow copy writers to complete
- if (FAILED(hr = vssWriters->Wait()))
- {
- writeErrorMsg(L"Error calling \"vssWriters->Wait\".", hr, errorMessage, errorBufferLen);
- return false;
- }
+ ComPtr<IVssAsync> gatherAsync;
+ ZEN_CHECK_COM(backupComp->GatherWriterMetadata(gatherAsync.init()));
+ waitForComFuture(*gatherAsync); //failure can happen if XP-version of VSS is used on Windows Vista (which needs at least VSS-Server2003 build)
- vssWriters->QueryStatus(&hr, NULL); //check if the async operation succeeded...
- if (FAILED(hr))
- {
- writeErrorMsg(L"Error calling \"vssWriters->QueryStatus\".", hr, errorMessage, errorBufferLen);
- return false;
- }
+ VSS_ID snapshotSetId = {};
+ ZEN_CHECK_COM(backupComp->StartSnapshotSet(&snapshotSetId));
+ ScopeGuard guardSnapShot = makeGuard([&]() { backupComp->AbortBackup(); });
+ //Quote: "This method must be called if a backup operation terminates after the creation of a
+ //shadow copy set with "StartSnapshotSet" and before "DoSnapshotSet" returns."
- VSS_ID snapshotSetId = {0};
- if (FAILED(hr = backupComp->StartSnapshotSet(&snapshotSetId)))
+ VSS_ID SnapShotId = {};
{
- writeErrorMsg(L"Error calling \"StartSnapshotSet\".", hr, errorMessage, errorBufferLen);
- return false;
+ HRESULT hr = backupComp->AddToSnapshotSet(const_cast<wchar_t*>(volumeName), GUID_NULL, &SnapShotId);
+ if (FAILED(hr))
+ {
+ if (hr == VSS_E_VOLUME_NOT_SUPPORTED)
+ throw ComError(L"Volume Shadow Copy Service is not supported on this volume!");
+ throw ComError(L"Error calling \"backupComp->AddToSnapshotSet\".", hr);
+ }
}
- VSS_ID SnapShotId = {0};
- if (FAILED(hr = backupComp->AddToSnapshotSet(const_cast<wchar_t*>(volumeName), GUID_NULL, &SnapShotId)))
- {
- writeErrorMsg(L"Error calling \"AddToSnapshotSet\".", hr, errorMessage, errorBufferLen);
- return false;
- }
+ ComPtr<IVssAsync> prepareAsync;
+ ZEN_CHECK_COM(backupComp->PrepareForBackup(prepareAsync.init()));
+ waitForComFuture(*prepareAsync);
- ComPtr<IVssAsync> vssPrepare;
- if (FAILED(hr = backupComp->PrepareForBackup(vssPrepare.init())))
- {
- writeErrorMsg(L"Error calling \"PrepareForBackup\".", hr, errorMessage, errorBufferLen);
- return false;
- }
+ ComPtr<IVssAsync> snapshotAsync;
+ ZEN_CHECK_COM(backupComp->DoSnapshotSet(snapshotAsync.init()));
+ guardSnapShot.dismiss();
+ waitForComFuture(*snapshotAsync);
- if (FAILED(hr = vssPrepare->Wait()))
- {
- writeErrorMsg(L"Error calling \"vssPrepare->Wait\".", hr, errorMessage, errorBufferLen);
- return false;
- }
+ VSS_SNAPSHOT_PROP props = {};
+ ZEN_CHECK_COM(backupComp->GetSnapshotProperties(SnapShotId, &props));
+ ZEN_ON_BLOCK_EXIT(::VssFreeSnapshotProperties(&props));
- vssPrepare->QueryStatus(&hr, NULL); //check if the async operation succeeded...
- if (FAILED(hr))
- {
- writeErrorMsg(L"Error calling \"vssPrepare->QueryStatus\".", hr, errorMessage, errorBufferLen);
- return false;
- }
-
- ComPtr<IVssAsync> vssDoShadowCopy;
- if (FAILED(hr = backupComp->DoSnapshotSet(vssDoShadowCopy.init())))
- {
- writeErrorMsg(L"Error calling \"DoSnapshotSet\".", hr, errorMessage, errorBufferLen);
- return false;
- }
+ //finally: write volume name of newly created shadow copy
+ return shadow::ShadowData(backupComp, props.m_pwszSnapshotDeviceObject);
+}
+}
- if (FAILED(hr = vssDoShadowCopy->Wait()))
- {
- writeErrorMsg(L"Error calling \"vssDoShadowCopy->Wait\".", hr, errorMessage, errorBufferLen);
- return false;
- }
- vssDoShadowCopy->QueryStatus(&hr, NULL); //check if the async operation succeeded...
- if (FAILED(hr))
+shadow::ShadowHandle shadow::createShadowCopy(const wchar_t* volumeName,
+ wchar_t* errorMessage,
+ unsigned int errorBufferLen)
+{
+ try
{
- writeErrorMsg(L"Error calling \"vssDoShadowCopy->QueryStatus\".", hr, errorMessage, errorBufferLen);
- return false;
+ ShadowData result = ::createShadowCopy(volumeName); //shadow handle owned by caller! throw ComError
+ return new ShadowData(result);
}
-
- VSS_SNAPSHOT_PROP props;
- if (FAILED(hr = backupComp->GetSnapshotProperties(SnapShotId, &props)))
+ catch (const zen::ComError& e)
{
- writeErrorMsg(L"Error calling \"GetSnapshotProperties\".", hr, errorMessage, errorBufferLen);
- return false;
+ copyString(e.toString(), errorMessage, errorBufferLen);
+ return nullptr;
}
+}
- //finally: write volume name of newly created shadow copy
- copyString(props.m_pwszSnapshotDeviceObject, shadowVolName, shadowBufferLen);
-
- VssFreeSnapshotProperties(&props);
-
- *handle = backupComp.release();
- return true;
+void shadow::getShadowVolume(shadow::ShadowHandle handle,
+ wchar_t* buffer,
+ unsigned int bufferLen)
+{
+ copyString(handle->shadowVolume_, buffer, bufferLen);
}
void shadow::releaseShadowCopy(ShadowHandle handle)
{
- if (handle)
- handle->Release();
+ delete handle;
}
diff --git a/lib/ShadowCopy/shadow.h b/lib/ShadowCopy/shadow.h
index 0dfd39a9..68b7141f 100644
--- a/lib/ShadowCopy/shadow.h
+++ b/lib/ShadowCopy/shadow.h
@@ -26,23 +26,23 @@ namespace shadow
--------------*/
//COM needs to be initialized before calling any of these functions! CoInitializeEx/CoUninitialize
+struct ShadowData;
+typedef ShadowData* ShadowHandle;
-typedef IVssBackupComponents* ShadowHandle;
-
-//volumeName must end with "\", while shadowVolName does not end with "\"
+//volumeName *must* end with "\"
SHADOWDLL_API
-bool createShadowCopy(const wchar_t* volumeName, // in
- wchar_t* shadowVolName, // out
- unsigned int shadowBufferLen, // in
- ShadowHandle* handle, // out
- wchar_t* errorMessage, // out
- unsigned int errorBufferLen); // in
-
+ShadowHandle createShadowCopy(const wchar_t* volumeName, // in Returns nullptr on failure!
+ wchar_t* errorMessage, // out
+ unsigned int errorBufferLen); // in
//don't forget to release the backupHandle after shadow copy is not needed anymore!
SHADOWDLL_API
void releaseShadowCopy(ShadowHandle handle);
+SHADOWDLL_API
+void getShadowVolume(ShadowHandle handle, //shadowVolName does *not* end with "\"
+ wchar_t* buffer,
+ unsigned int bufferLen);
//##########################################################################################
@@ -50,21 +50,24 @@ void releaseShadowCopy(ShadowHandle handle);
/*----------
|typedefs|
----------*/
-typedef bool (*CreateShadowCopyFct)(const wchar_t* volumeName,
- wchar_t* shadowVolName,
- unsigned int shadowBufferLen,
- ShadowHandle* handle,
- wchar_t* errorMessage,
- unsigned int errorBufferLen);
+typedef ShadowHandle (*CreateShadowCopyFct)(const wchar_t* volumeName,
+ wchar_t* errorMessage,
+ unsigned int errorBufferLen);
typedef void (*ReleaseShadowCopyFct)(ShadowHandle handle);
+typedef void (*GetShadowVolumeFct)(ShadowHandle handle,
+ wchar_t* buffer,
+ unsigned int bufferLen);
+
+
/*--------------
|symbol names|
--------------*/
//(use const pointers to ensure internal linkage)
-const char createShadowCopyFctName[] = "createShadowCopy";
+const char createShadowCopyFctName [] = "createShadowCopy";
const char releaseShadowCopyFctName[] = "releaseShadowCopy";
+const char getShadowVolumeFctName [] = "getShadowVolume";
/*---------------
|library names|
@@ -73,21 +76,24 @@ const char releaseShadowCopyFctName[] = "releaseShadowCopy";
inline
const wchar_t* getDllName()
{
- /*
- distinguish a bunch of VSS builds: we use XP and Server 2003 implementations...
- VSS version and compatibility overview: http://msdn.microsoft.com/en-us/library/aa384627(VS.85).aspx
- */
- return zen::winServer2003orLater() ?
- (zen::is64BitBuild ?
- L"Shadow_Server2003_x64.dll" :
- L"Shadow_Server2003_Win32.dll") :
-
- (zen::is64BitBuild ?
- L"Shadow_XP_x64.dll" :
- L"Shadow_XP_Win32.dll");
+ // distinguish a bunch of VSS builds: we use XP, Server 2003 and Server 2008 R2 implementations...
+ // VSS version and compatibility overview: http://msdn.microsoft.com/en-us/library/aa384627(VS.85).aspx
+
+ if (zen::win7OrLater()) //Windows Server 2008 R2 or Windows 7
+ return zen::is64BitBuild ?
+ L"Shadow_Windows7_x64.dll" :
+ L"Shadow_Windows7_Win32.dll";
+ //else if (vistaOrLater()) -> skip Windows Server 2008 and Windows Vista
+ // ;
+ else if (zen::winServer2003orLater()) //Windows Server 2003 and Windows Server 2003 R2
+ return zen::is64BitBuild ?
+ L"Shadow_Server2003_x64.dll" :
+ L"Shadow_Server2003_Win32.dll";
+ else //Windows XP
+ return zen::is64BitBuild ?
+ L"Shadow_XP_x64.dll" :
+ L"Shadow_XP_Win32.dll";
}
}
-
-
#endif //SHADOWCOPY_H
diff --git a/lib/Thumbnail/thumbnail.cpp b/lib/Thumbnail/thumbnail.cpp
index b8d00c38..c3d22cbd 100644
--- a/lib/Thumbnail/thumbnail.cpp
+++ b/lib/Thumbnail/thumbnail.cpp
@@ -5,9 +5,10 @@
// **************************************************************************
#include "thumbnail.h"
+#include <string>
#define WIN32_LEAN_AND_MEAN
-#include "windows.h"
+#include <zen/win.h>
#define STRICT_TYPED_ITEMIDS //better type safety for IDLists
#include <Shlobj.h>
@@ -16,12 +17,12 @@
#include <CommonControls.h>
#include <zen/com_ptr.h>
#include <zen/string_tools.h>
-#include <string>
#include <zen/scope_guard.h>
using namespace zen;
+
thumb::HICON thumb::getThumbnail(const wchar_t* filename, int requestedSize) //return 0 on failure, caller takes ownership!
{
const std::wstring filenameStr(filename);
diff --git a/lib/cmp_filetime.h b/lib/cmp_filetime.h
index e8cd6f50..afc97b9d 100644
--- a/lib/cmp_filetime.h
+++ b/lib/cmp_filetime.h
@@ -18,8 +18,8 @@ bool sameFileTime(const Int64& a, const Int64& b, size_t tolerance)
//---------------------------------------------------------------------------------------------------------------
//number of seconds since Jan 1st 1970 + 1 year (needn't be too precise)
-static const long oneYearFromNow = wxGetUTCTime() + 365 * 24 * 3600; //init at program startup -> avoid MT issues
-
+static const long oneYearFromNow = wxGetUTCTime() + 365 * 24 * 3600; //init at program startup alas in *each* compilation untit -> avoid MT issues
+//refactor when C++11 thread-safe static initialization is availalbe in VS (already in GCC)
class CmpFileTime
{
@@ -37,19 +37,16 @@ public:
Result getResult(const Int64& lhs, const Int64& rhs) const
{
- if (lhs == rhs)
+ if (sameFileTime(lhs, rhs, tolerance_)) //last write time may differ by up to 2 seconds (NTFS vs FAT32)
return TIME_EQUAL;
- //check for erroneous dates (but only if dates are not (EXACTLY) the same)
+ //check for erroneous dates
if (lhs < 0 || lhs > oneYearFromNow) //earlier than Jan 1st 1970 or more than one year in future
return TIME_LEFT_INVALID;
if (rhs < 0 || rhs > oneYearFromNow)
return TIME_RIGHT_INVALID;
- if (sameFileTime(lhs, rhs, tolerance_)) //last write time may differ by up to 2 seconds (NTFS vs FAT32)
- return TIME_EQUAL;
-
//regular time comparison
if (lhs < rhs)
return TIME_RIGHT_NEWER;
diff --git a/lib/custom_grid.cpp b/lib/custom_grid.cpp
index 6da8b275..97db1676 100644
--- a/lib/custom_grid.cpp
+++ b/lib/custom_grid.cpp
@@ -1375,15 +1375,15 @@ void CustomGridRim::setTooltip(const wxMouseEvent& event)
virtual void visit(const FileMapping& fileObj)
{
- tipMsg_ = toWx(fileObj.getRelativeName<side>()) + "\n" +
- _("Size") + ": " + zen::filesizeToShortString(fileObj.getFileSize<side>()) + "\n" +
- _("Date") + ": " + zen::utcToLocalTimeString(fileObj.getLastWriteTime<side>());
+ tipMsg_ = copyStringTo<wxString>(std::wstring() + fileObj.getRelativeName<side>() + L"\n" +
+ _("Size") + L": " + zen::filesizeToShortString(fileObj.getFileSize<side>()) + L"\n" +
+ _("Date") + L": " + zen::utcToLocalTimeString(fileObj.getLastWriteTime<side>()));
}
virtual void visit(const SymLinkMapping& linkObj)
{
- tipMsg_ = toWx(linkObj.getRelativeName<side>()) + "\n" +
- _("Date") + ": " + zen::utcToLocalTimeString(linkObj.getLastWriteTime<side>());
+ tipMsg_ = copyStringTo<wxString>(std::wstring() + linkObj.getRelativeName<side>() + L"\n" +
+ _("Date") + L": " + zen::utcToLocalTimeString(linkObj.getLastWriteTime<side>()));
}
virtual void visit(const DirMapping& dirObj)
diff --git a/lib/db_file.cpp b/lib/db_file.cpp
index 757a95d7..faee4c8a 100644
--- a/lib/db_file.cpp
+++ b/lib/db_file.cpp
@@ -63,7 +63,7 @@ public:
Read(formatDescr, sizeof(formatDescr)); //throw FileError
if (!std::equal(FILE_FORMAT_DESCR, FILE_FORMAT_DESCR + sizeof(FILE_FORMAT_DESCR), formatDescr))
- throw FileError(_("Incompatible synchronization database format:") + " \n" + "\"" + filename + "\"");
+ throw FileError(_("Incompatible synchronization database format:") + L" \n" + L"\"" + filename + L"\"");
}
private:
@@ -89,7 +89,7 @@ private:
class ReadDirInfo : public zen::ReadInputStream
{
public:
- ReadDirInfo(wxInputStream& stream, const wxString& errorObjName, DirInformation& dirInfo) : ReadInputStream(stream, errorObjName)
+ ReadDirInfo(wxInputStream& stream, const Zstring& errorObjName, DirInformation& dirInfo) : ReadInputStream(stream, errorObjName)
{
//|-------------------------------------------------------------------------------------
//| ensure 32/64 bit portability: use fixed size data types only e.g. boost::uint32_t |
@@ -163,7 +163,7 @@ typedef std::map<UniqueId, MemoryStreamPtr> StreamMapping; //list of streams
class ReadFileStream : public zen::ReadInputStream
{
public:
- ReadFileStream(wxInputStream& stream, const wxString& filename, StreamMapping& streamList) : ReadInputStream(stream, filename)
+ ReadFileStream(wxInputStream& stream, const Zstring& filename, StreamMapping& streamList) : ReadInputStream(stream, filename)
{
//|-------------------------------------------------------------------------------------
//| ensure 32/64 bit portability: used fixed size data types only e.g. boost::uint32_t |
@@ -172,7 +172,7 @@ public:
std::int32_t version = readNumberC<std::int32_t>();
if (version != FILE_FORMAT_VER) //read file format version
- throw FileError(_("Incompatible synchronization database format:") + " \n" + "\"" + filename.c_str() + "\"");
+ throw FileError(_("Incompatible synchronization database format:") + L" \n" + L"\"" + filename + L"\"");
streamList.clear();
@@ -195,9 +195,9 @@ namespace
StreamMapping loadStreams(const Zstring& filename) //throw FileError
{
if (!zen::fileExists(filename))
- throw FileErrorDatabaseNotExisting(_("Initial synchronization:") + " \n\n" +
- _("One of the FreeFileSync database files is not yet existing:") + " \n" +
- "\"" + filename + "\"");
+ throw FileErrorDatabaseNotExisting(_("Initial synchronization:") + L" \n\n" +
+ _("One of the FreeFileSync database files is not yet existing:") + L" \n" +
+ L"\"" + filename + L"\"");
try
{
@@ -207,12 +207,12 @@ StreamMapping loadStreams(const Zstring& filename) //throw FileError
wxZlibInputStream input(uncompressed, wxZLIB_ZLIB);
StreamMapping streamList;
- ReadFileStream(input, toWx(filename), streamList);
+ ReadFileStream(input, filename, streamList);
return streamList;
}
catch (const std::bad_alloc&) //this is most likely caused by a corrupted database file
{
- throw FileError(_("Error reading from synchronization database:") + " (bad_alloc)");
+ throw FileError(_("Error reading from synchronization database:") + L" (bad_alloc)");
}
}
@@ -224,12 +224,12 @@ DirInfoPtr parseStream(const std::vector<char>& stream, const Zstring& fileName)
//read streams into DirInfo
auto dirInfo = std::make_shared<DirInformation>();
wxMemoryInputStream buffer(&stream[0], stream.size()); //convert char-array to inputstream: no copying, ownership not transferred
- ReadDirInfo(buffer, toWx(fileName), *dirInfo); //throw FileError
+ ReadDirInfo(buffer, fileName, *dirInfo); //throw FileError
return dirInfo;
}
catch (const std::bad_alloc&) //this is most likely caused by a corrupted database file
{
- throw FileError(_("Error reading from synchronization database:") + " (bad_alloc)");
+ throw FileError(_("Error reading from synchronization database:") + L" (bad_alloc)");
}
}
}
@@ -262,10 +262,10 @@ std::pair<DirInfoPtr, DirInfoPtr> zen::loadFromDisk(const BaseDirMapping& baseMa
streamRight == streamListRight.end() ||
!streamLeft ->second.get() ||
!streamRight->second.get())
- throw FileErrorDatabaseNotExisting(_("Initial synchronization:") + " \n\n" +
- _("Database files do not share a common synchronization session:") + " \n" +
- "\"" + fileNameLeft + "\"\n" +
- "\"" + fileNameRight + "\"");
+ throw FileErrorDatabaseNotExisting(_("Initial synchronization:") + L" \n\n" +
+ _("Database files do not share a common synchronization session:") + L" \n" +
+ L"\"" + fileNameLeft + L"\"\n" +
+ L"\"" + fileNameRight + L"\"");
//read streams into DirInfo
DirInfoPtr dirInfoLeft = parseStream(*streamLeft ->second, fileNameLeft); //throw FileError
DirInfoPtr dirInfoRight = parseStream(*streamRight->second, fileNameRight); //throw FileError
@@ -279,7 +279,7 @@ template <SelectedSide side>
class SaveDirInfo : public WriteOutputStream
{
public:
- SaveDirInfo(const BaseDirMapping& baseMapping, const DirContainer* oldDirInfo, const wxString& errorObjName, wxOutputStream& stream) : WriteOutputStream(errorObjName, stream)
+ SaveDirInfo(const BaseDirMapping& baseMapping, const DirContainer* oldDirInfo, const Zstring& errorObjName, wxOutputStream& stream) : WriteOutputStream(errorObjName, stream)
{
//save filter settings
baseMapping.getFilter()->saveFilter(getStream());
@@ -422,7 +422,7 @@ private:
class WriteFileStream : public WriteOutputStream
{
public:
- WriteFileStream(const StreamMapping& streamList, const wxString& filename, wxOutputStream& stream) : WriteOutputStream(filename, stream)
+ WriteFileStream(const StreamMapping& streamList, const Zstring& filename, wxOutputStream& stream) : WriteOutputStream(filename, stream)
{
//save file format version
writeNumberC<std::int32_t>(FILE_FORMAT_VER);
@@ -456,7 +456,7 @@ void saveFile(const StreamMapping& streamList, const Zstring& filename) //throw
6 1,77 MB - 613 ms
9 (maximal compression) 1,74 MB - 3330 ms */
- WriteFileStream(streamList, toWx(filename), output);
+ WriteFileStream(streamList, filename, output);
}
//(try to) hide database file
#ifdef FFS_WIN
@@ -542,7 +542,7 @@ void zen::saveToDisk(const BaseDirMapping& baseMapping) //throw FileError
{
wxMemoryOutputStream buffer;
const DirContainer* oldDir = oldDirInfoLeft.get() ? &oldDirInfoLeft->baseDirContainer : NULL;
- SaveDirInfo<LEFT_SIDE>(baseMapping, oldDir, toWx(dbNameLeft), buffer);
+ SaveDirInfo<LEFT_SIDE>(baseMapping, oldDir, dbNameLeft, buffer);
newStreamLeft->resize(buffer.GetSize()); //convert output stream to char-array
buffer.CopyTo(&(*newStreamLeft)[0], buffer.GetSize()); //
}
@@ -551,7 +551,7 @@ void zen::saveToDisk(const BaseDirMapping& baseMapping) //throw FileError
{
wxMemoryOutputStream buffer;
const DirContainer* oldDir = oldDirInfoRight.get() ? &oldDirInfoRight->baseDirContainer : NULL;
- SaveDirInfo<RIGHT_SIDE>(baseMapping, oldDir, toWx(dbNameRight), buffer);
+ SaveDirInfo<RIGHT_SIDE>(baseMapping, oldDir, dbNameRight, buffer);
newStreamRight->resize(buffer.GetSize()); //convert output stream to char-array
buffer.CopyTo(&(*newStreamRight)[0], buffer.GetSize()); //
}
diff --git a/lib/dir_lock.cpp b/lib/dir_lock.cpp
index 29c7ffc6..735fd7b6 100644
--- a/lib/dir_lock.cpp
+++ b/lib/dir_lock.cpp
@@ -5,7 +5,6 @@
#include <wx/log.h>
#include <wx/msgdlg.h>
#include <memory>
-#include <boost/weak_ptr.hpp>
#include <wx+/string_conv.h>
#include <zen/last_error.h>
#include <zen/thread.h> //includes <boost/thread.hpp>
@@ -63,7 +62,7 @@ public:
}
catch (const std::exception& e) //exceptions must be catched per thread
{
- wxSafeShowMessage(wxString(_("An exception occurred!")) + wxT("(Dirlock)"), wxString::FromAscii(e.what())); //simple wxMessageBox won't do for threads
+ wxSafeShowMessage(wxString(_("An exception occurred!")) + wxT("(Dirlock)"), utf8CvrtTo<wxString>(e.what())); //simple wxMessageBox won't do for threads
}
}
@@ -127,7 +126,7 @@ UInt64 getLockFileSize(const Zstring& filename) //throw FileError, ErrorNotExist
{
const DWORD lastError = ::GetLastError();
- std::wstring errorMessage = _("Error reading file attributes:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted(lastError);
+ std::wstring errorMessage = _("Error reading file attributes:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted(lastError);
if (lastError == ERROR_FILE_NOT_FOUND ||
lastError == ERROR_PATH_NOT_FOUND ||
@@ -148,7 +147,7 @@ UInt64 getLockFileSize(const Zstring& filename) //throw FileError, ErrorNotExist
{
const int lastError = errno;
- std::wstring errorMessage = _("Error reading file attributes:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted(lastError);
+ std::wstring errorMessage = _("Error reading file attributes:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted(lastError);
if (lastError == ENOENT)
throw ErrorNotExisting(errorMessage);
@@ -201,9 +200,9 @@ std::string getComputerId() //returns empty string on error
const wxString fhn = ::wxGetFullHostName();
if (fhn.empty()) return std::string();
#ifdef FFS_WIN
- return "Windows " + std::string(fhn.ToUTF8());
+ return "Windows " + utf8CvrtTo<std::string>(fhn);
#elif defined FFS_LINUX
- return "Linux " + std::string(fhn.ToUTF8());
+ return "Linux " + utf8CvrtTo<std::string>(fhn);
#endif
}
@@ -342,7 +341,7 @@ std::string retrieveLockId(const Zstring& lockfilename) //throw FileError, Error
void waitOnDirLock(const Zstring& lockfilename, DirLockCallback* callback) //throw FileError
{
std::wstring infoMsg = _("Waiting while directory is locked (%x)...");
- replace(infoMsg, L"%x", std::wstring(L"\"") + lockfilename + "\"");
+ replace(infoMsg, L"%x", std::wstring(L"\"") + lockfilename + L"\"");
if (callback)
callback->reportInfo(infoMsg);
//---------------------------------------------------------------
@@ -411,7 +410,7 @@ void waitOnDirLock(const Zstring& lockfilename, DirLockCallback* callback) //thr
std::wstring remSecMsg = _P("1 sec", "%x sec", remainingSeconds);
replace(remSecMsg, L"%x", toString<std::wstring>(remainingSeconds));
- callback->reportInfo(infoMsg + " " + remSecMsg);
+ callback->reportInfo(infoMsg + L" " + remSecMsg);
}
else
callback->reportInfo(infoMsg); //emit a message in any case (might clear other one)
@@ -455,7 +454,7 @@ bool tryLock(const Zstring& lockfilename) //throw FileError
if (::GetLastError() == ERROR_FILE_EXISTS)
return false;
else
- throw FileError(_("Error setting directory lock:") + "\n\"" + lockfilename + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error setting directory lock:") + L"\n\"" + lockfilename + L"\"" + L"\n\n" + getLastErrorFormatted());
}
::CloseHandle(fileHandle);
@@ -468,7 +467,7 @@ bool tryLock(const Zstring& lockfilename) //throw FileError
if (errno == EEXIST)
return false;
else
- throw FileError(_("Error setting directory lock:") + "\n\"" + lockfilename + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error setting directory lock:") + L"\n\"" + lockfilename + L"\"" + L"\n\n" + getLastErrorFormatted());
}
::close(fileHandle);
#endif
@@ -566,8 +565,7 @@ private:
{
UuidToLockMap::const_iterator iterLock = uuidToLock.find(lockId);
return iterLock != uuidToLock.end() ?
- iterLock->second.lock() : //try to get shared_ptr; throw()
- std::shared_ptr<SharedDirLock>();
+ iterLock->second.lock() : nullptr; //try to get shared_ptr; throw()
}
typedef std::weak_ptr<SharedDirLock> SharedLock;
diff --git a/lib/dir_name.cpp b/lib/dir_name.cpp
index 010fb218..71a3e9ef 100644
--- a/lib/dir_name.cpp
+++ b/lib/dir_name.cpp
@@ -124,7 +124,7 @@ void DirectoryName<NameControl>::OnFilesDropped(FFSFileDropEvent& event)
setDirectoryName(fileName, &dirName_, &dirPicker_, dirName_, staticBox_);
else
{
- wxString parentName = beforeLast(fileName, FILE_NAME_SEPARATOR); //returns empty string if ch not found
+ wxString parentName = beforeLast(fileName, utf8CvrtTo<wxString>(FILE_NAME_SEPARATOR)); //returns empty string if ch not found
#ifdef FFS_WIN
if (endsWith(parentName, L":")) //volume name
parentName += FILE_NAME_SEPARATOR;
diff --git a/lib/error_log.cpp b/lib/error_log.cpp
index fe423479..67584dea 100644
--- a/lib/error_log.cpp
+++ b/lib/error_log.cpp
@@ -5,7 +5,7 @@
// **************************************************************************
#include "error_log.h"
-#include <wx/datetime.h>
+#include <zen/time.h>
#include <zen/i18n.h>
#include <algorithm>
@@ -16,7 +16,7 @@ void ErrorLogging::logMsg(const wxString& message, zen::MessageType type)
{
Entry newEntry;
newEntry.type = type;
- newEntry.time = wxDateTime::GetTimeNow();
+ newEntry.time = std::time(NULL);
newEntry.message = message;
messages.push_back(newEntry);
@@ -76,11 +76,11 @@ wxString ErrorLogging::formatMessage(const Entry& msg)
break;
}
- const wxString prefix = wxString(L"[") + wxDateTime(msg.time).FormatTime() + L"] " + typeName + L": ";
+ const wxString prefix = L"[" + formatTime<wxString>(FORMAT_TIME, localTime(msg.time)) + L"] " + typeName + L": ";
wxString formattedText = prefix;
- for (auto i = msg.message.begin(); i != msg.message.end(); ++i)
- if (*i == wxChar('\n'))
+ for (auto iter = msg.message.begin(); iter != msg.message.end(); )
+ if (*iter == L'\n')
{
formattedText += L'\n';
@@ -88,12 +88,14 @@ wxString ErrorLogging::formatMessage(const Entry& msg)
blanks.resize(prefix.size(), L' ');
formattedText += blanks;
- while (*++i == L'\n') //remove duplicate newlines
- ;
- --i;
+ do //remove duplicate newlines
+ {
+ ++iter;
+ }
+ while (iter != msg.message.end() && *iter == L'\n');
}
else
- formattedText += *i;
+ formattedText += *iter++;
return formattedText;
}
diff --git a/lib/ffs_paths.h b/lib/ffs_paths.h
index faecd2e2..0ad02b15 100644
--- a/lib/ffs_paths.h
+++ b/lib/ffs_paths.h
@@ -9,6 +9,7 @@
#include <wx/stdpaths.h>
#include <zen/zstring.h>
+#include <zen/file_handling.h>
#include <wx+/string_conv.h>
namespace zen
@@ -16,11 +17,11 @@ namespace zen
//------------------------------------------------------------------------------
//global program directories
//------------------------------------------------------------------------------
-wxString getResourceDir(); //resource directory WITH path separator at end
-wxString getConfigDir(); //config directory WITH path separator at end
+Zstring getResourceDir(); //resource directory WITH path separator at end
+Zstring getConfigDir(); //config directory WITH path separator at end
//------------------------------------------------------------------------------
-wxString getLauncher(); //full path to application launcher C:\...\FreeFileSync.exe
+Zstring getLauncher(); //full path to application launcher C:\...\FreeFileSync.exe
bool isPortableVersion();
@@ -34,21 +35,22 @@ bool isPortableVersion();
+
//---------------- implementation ----------------
namespace impl
{
inline
-const wxString& getBinaryDir() //directory containing executable WITH path separator at end
+const Zstring& getBinaryDir() //directory containing executable WITH path separator at end
{
- static wxString instance = beforeLast(wxStandardPaths::Get().GetExecutablePath(), FILE_NAME_SEPARATOR) + toWx(Zstring(FILE_NAME_SEPARATOR)); //extern linkage!
+ static Zstring instance = beforeLast(toZ(wxStandardPaths::Get().GetExecutablePath()), FILE_NAME_SEPARATOR) + Zstring(FILE_NAME_SEPARATOR); //extern linkage!
return instance;
}
#ifdef FFS_WIN
inline
-wxString getInstallDir() //root install directory WITH path separator at end
+Zstring getInstallDir() //root install directory WITH path separator at end
{
- return getBinaryDir().BeforeLast(FILE_NAME_SEPARATOR).BeforeLast(FILE_NAME_SEPARATOR) + FILE_NAME_SEPARATOR;
+ return beforeLast(beforeLast(getBinaryDir(), FILE_NAME_SEPARATOR), FILE_NAME_SEPARATOR) + FILE_NAME_SEPARATOR;
}
#endif
}
@@ -58,25 +60,27 @@ inline
bool isPortableVersion()
{
#ifdef FFS_WIN
- static const bool isPortable = !wxFileExists(impl::getInstallDir() + wxT("uninstall.exe")); //this check is a bit lame...
+ static const bool isPortable = !fileExists(impl::getInstallDir() + L"uninstall.exe"); //this check is a bit lame...
+
#elif defined FFS_LINUX
- static const bool isPortable = !impl::getBinaryDir().EndsWith(wxT("/bin/")); //this check is a bit lame...
+ static const bool isPortable = !endsWith(impl::getBinaryDir(), "/bin/"); //this check is a bit lame...
#endif
return isPortable;
}
inline
-wxString getResourceDir()
+Zstring getResourceDir()
{
#ifdef FFS_WIN
return impl::getInstallDir();
+
#elif defined FFS_LINUX
if (isPortableVersion())
return impl::getBinaryDir();
else //use OS' standard paths
{
- wxString resourceDir = wxStandardPathsBase::Get().GetResourcesDir();
+ Zstring resourceDir = toZ(wxStandardPathsBase::Get().GetResourcesDir());
if (!endsWith(resourceDir, FILE_NAME_SEPARATOR))
resourceDir += FILE_NAME_SEPARATOR;
@@ -88,7 +92,7 @@ wxString getResourceDir()
inline
-wxString getConfigDir()
+Zstring getConfigDir()
{
if (isPortableVersion())
#ifdef FFS_WIN
@@ -100,10 +104,14 @@ wxString getConfigDir()
#endif
else //use OS' standard paths
{
- wxString userDirectory = wxStandardPathsBase::Get().GetUserDataDir();
+ Zstring userDirectory = toZ(wxStandardPathsBase::Get().GetUserDataDir());
- if (!wxDirExists(userDirectory))
- ::wxMkdir(userDirectory); //only top directory needs to be created: no recursion necessary
+ if (!dirExists(userDirectory))
+ try
+ {
+ createDirectory(userDirectory); //only top directory needs to be created: no recursion necessary
+ }
+ catch (const FileError&) {}
if (!endsWith(userDirectory, FILE_NAME_SEPARATOR))
userDirectory += FILE_NAME_SEPARATOR;
@@ -114,12 +122,12 @@ wxString getConfigDir()
inline
-wxString getLauncher()
+Zstring getLauncher()
{
#ifdef FFS_WIN
- return impl::getInstallDir() + wxT("FreeFileSync.exe");
+ return impl::getInstallDir() + Zstr("FreeFileSync.exe");
#elif defined FFS_LINUX
- return impl::getBinaryDir() + wxT("FreeFileSync");
+ return impl::getBinaryDir() + Zstr("FreeFileSync");
#endif
}
}
diff --git a/lib/help_provider.h b/lib/help_provider.h
index 9baf9303..094084b2 100644
--- a/lib/help_provider.h
+++ b/lib/help_provider.h
@@ -35,7 +35,7 @@ wxHelpController& getHelpCtrl()
if (!initialized)
{
initialized = true;
- controller.Initialize(zen::getResourceDir() +
+ controller.Initialize(toWx(zen::getResourceDir()) +
#ifdef FFS_WIN
L"FreeFileSync.chm");
#elif defined FFS_LINUX
diff --git a/lib/icon_buffer.cpp b/lib/icon_buffer.cpp
index bb75a538..4e05e642 100644
--- a/lib/icon_buffer.cpp
+++ b/lib/icon_buffer.cpp
@@ -12,7 +12,6 @@
#include <boost/thread/once.hpp>
#ifdef FFS_WIN
-#include <zen/win.h> //includes "windows.h"
#include <zen/dll.h>
#include "Thumbnail/thumbnail.h"
#include <zen/win_ver.h>
@@ -26,22 +25,24 @@
using namespace zen;
+namespace
+{
const size_t BUFFER_SIZE_MAX = 800; //maximum number of icons to buffer
-int zen::IconBuffer::cvrtSize(IconSize sz) //get size in pixel
+int cvrtSize(IconBuffer::IconSize sz) //get size in pixel
{
switch (sz)
{
- case SIZE_SMALL:
+ case IconBuffer::SIZE_SMALL:
#ifdef FFS_WIN
return 16;
#elif defined FFS_LINUX
return 24;
#endif
- case SIZE_MEDIUM:
+ case IconBuffer::SIZE_MEDIUM:
return 48;
- case SIZE_LARGE:
+ case IconBuffer::SIZE_LARGE:
return 128;
}
assert(false);
@@ -69,9 +70,11 @@ public:
#endif
) {}
- IconHolder& operator=(const IconHolder& other)
+ IconHolder(IconHolder&& other) : handle_(other.handle_) { other.handle_ = NULL; }
+
+ IconHolder& operator=(IconHolder other) //unifying assignment: no need for r-value reference optimization!
{
- IconHolder(other).swap(*this);
+ other.swap(*this);
return *this;
}
@@ -112,7 +115,7 @@ public:
&bmpInfo) != 0) // __out LPVOID lpvObject
{
const int maxExtent = std::max(bmpInfo.bmWidth, bmpInfo.bmHeight);
- if (maxExtent > expectedSize)
+ if (0 < expectedSize && expectedSize < maxExtent)
{
bmpInfo.bmWidth = bmpInfo.bmWidth * expectedSize / maxExtent; //scale those Vista jumbo 256x256 icons down!
bmpInfo.bmHeight = bmpInfo.bmHeight * expectedSize / maxExtent; //
@@ -142,8 +145,6 @@ public:
#ifdef FFS_WIN
-namespace
-{
Zstring getFileExtension(const Zstring& filename)
{
const Zstring shortName = afterLast(filename, Zchar('\\')); //warning: using windows file name separator!
@@ -175,17 +176,11 @@ bool isCheapExtension(const Zstring& extension)
}
-bool wereVistaOrLater = false;
-boost::once_flag initVistaFlagOnce = BOOST_ONCE_INIT;
+const bool wereVistaOrLater = vistaOrLater(); //thread-safety: init at startup
int getShilIconType(IconBuffer::IconSize sz)
{
- boost::call_once(initVistaFlagOnce, []()
- {
- wereVistaOrLater = vistaOrLater();
- });
-
switch (sz)
{
case IconBuffer::SIZE_SMALL:
@@ -234,8 +229,8 @@ IconHolder getAssociatedIconByExt(const Zstring& extension, IconBuffer::IconSize
DllFun<thumb::GetThumbnailFct> getThumbnailIcon;
boost::once_flag initThumbnailOnce = BOOST_ONCE_INIT;
-}
#endif
+}
//################################################################################################################################################
@@ -265,6 +260,51 @@ IconHolder getThumbnail(const Zstring& filename, int requestedSize) //return 0 o
}
+const char* mimeFileIcons[] =
+{
+ "application-x-zerosize", //Kubuntu: /usr/share/icons/oxygen/48x48/mimetypes
+ "empty", //
+ "gtk-file", //Ubuntu: /usr/share/icons/Humanity/mimes/48
+ "gnome-fs-regular", //
+};
+
+
+IconHolder getGenericFileIcon(IconBuffer::IconSize sz)
+{
+#ifdef FFS_WIN
+ return getIconByAttribute(L"dummy", FILE_ATTRIBUTE_NORMAL, sz);
+
+#elif defined FFS_LINUX
+ const int requestedSize = cvrtSize(sz);
+ try
+ {
+ Glib::RefPtr<Gtk::IconTheme> iconTheme = Gtk::IconTheme::get_default();
+ if (iconTheme)
+ {
+ Glib::RefPtr<Gdk::Pixbuf> iconPixbuf;
+ std::find_if(mimeFileIcons, mimeFileIcons + sizeof(mimeFileIcons) / sizeof(mimeFileIcons[0]),
+ [&](const char* mimeName) -> bool
+ {
+ try
+ {
+ iconPixbuf = iconTheme->load_icon(mimeName, requestedSize, Gtk::ICON_LOOKUP_USE_BUILTIN);
+ }
+ catch (const Glib::Error&) { return false; }
+
+ return iconPixbuf;
+ }
+ );
+ if (iconPixbuf)
+ return IconHolder(iconPixbuf->gobj_copy()); // transfer ownership!!
+ }
+ }
+ catch (const Glib::Error&) {}
+
+ return IconHolder();
+#endif
+}
+
+
IconHolder getAssociatedIcon(const Zstring& filename, IconBuffer::IconSize sz)
{
//1. try to load thumbnails
@@ -275,7 +315,7 @@ IconHolder getAssociatedIcon(const Zstring& filename, IconBuffer::IconSize sz)
case IconBuffer::SIZE_MEDIUM:
case IconBuffer::SIZE_LARGE:
{
- IconHolder ico = getThumbnail(filename, IconBuffer::cvrtSize(sz));
+ IconHolder ico = getThumbnail(filename, cvrtSize(sz));
if (ico)
return ico;
//else: fallback to non-thumbnail icon
@@ -314,7 +354,7 @@ IconHolder getAssociatedIcon(const Zstring& filename, IconBuffer::IconSize sz)
return getIconByIndex ? static_cast<HICON>(getIconByIndex(fileInfo.iIcon, getShilIconType(sz))) : NULL;
#elif defined FFS_LINUX
- const int requestedSize = IconBuffer::cvrtSize(sz);
+ const int requestedSize = cvrtSize(sz);
//call Gtk::Main::init_gtkmm_internals() on application startup!!
try
{
@@ -341,27 +381,23 @@ IconHolder getAssociatedIcon(const Zstring& filename, IconBuffer::IconSize sz)
}
catch (const Glib::Error&) {}
- try //fallback: icon lookup may fail because some icons are currently not present on system
- {
- Glib::RefPtr<Gtk::IconTheme> iconTheme = Gtk::IconTheme::get_default();
- if (iconTheme)
- {
- Glib::RefPtr<Gdk::Pixbuf> iconPixbuf = iconTheme->load_icon("misc", requestedSize, Gtk::ICON_LOOKUP_USE_BUILTIN);
- if (!iconPixbuf)
- iconPixbuf = iconTheme->load_icon("text-x-generic", requestedSize, Gtk::ICON_LOOKUP_USE_BUILTIN);
- if (iconPixbuf)
- return IconHolder(iconPixbuf->gobj_copy()); //copy and pass icon ownership (may be 0)
- }
- }
- catch (const Glib::Error&) {}
-
- //fallback fallback
- return IconHolder();
+ //fallback: icon lookup may fail because some icons are currently not present on system
+ return ::getGenericFileIcon(sz);
#endif
}
+/* Dependency Diagram:
-IconHolder getDirectoryIcon(IconBuffer::IconSize sz)
+getGenericFileIcon()
+ /|\
+ |
+getAssociatedIcon()
+ /|\
+ |
+getGenericDirectoryIcon()
+*/
+
+IconHolder getGenericDirectoryIcon(IconBuffer::IconSize sz)
{
#ifdef FFS_WIN
return getIconByAttribute(L"dummy", //Windows 7 doesn't like this parameter to be an empty string!
@@ -372,29 +408,6 @@ IconHolder getDirectoryIcon(IconBuffer::IconSize sz)
}
-IconHolder getFileIcon(IconBuffer::IconSize sz)
-{
-#ifdef FFS_WIN
- return getIconByAttribute(L"dummy", FILE_ATTRIBUTE_NORMAL, sz);
-#elif defined FFS_LINUX
- const int requestedSize = IconBuffer::cvrtSize(sz);
- try
- {
- Glib::RefPtr<Gtk::IconTheme> iconTheme = Gtk::IconTheme::get_default();
- if (iconTheme)
- {
- Glib::RefPtr<Gdk::Pixbuf> iconPixbuf = iconTheme->load_icon("misc", requestedSize, Gtk::ICON_LOOKUP_USE_BUILTIN);
- if (!iconPixbuf)
- iconPixbuf = iconTheme->load_icon("text-x-generic", requestedSize, Gtk::ICON_LOOKUP_USE_BUILTIN);
- if (iconPixbuf)
- return IconHolder(iconPixbuf->gobj_copy()); // transfer ownership!!
- }
- }
- catch (const Glib::Error&) {}
-
- return IconHolder();
-#endif
-}
//################################################################################################################################################
@@ -546,8 +559,8 @@ struct IconBuffer::Pimpl
IconBuffer::IconBuffer(IconSize sz) :
pimpl(new Pimpl),
icoSize(sz),
- genDirIcon(::getDirectoryIcon(sz).toWxIcon(cvrtSize(icoSize))),
- genFileIcon(::getFileIcon(sz).toWxIcon(cvrtSize(icoSize)))
+ genDirIcon(::getGenericDirectoryIcon(sz).toWxIcon(cvrtSize(icoSize))),
+ genFileIcon(::getGenericFileIcon(sz).toWxIcon(cvrtSize(icoSize)))
{
pimpl->worker = boost::thread(WorkerThread(pimpl->workload, pimpl->buffer, sz));
}
@@ -561,6 +574,12 @@ IconBuffer::~IconBuffer()
}
+int IconBuffer::getSize() const
+{
+ return cvrtSize(icoSize);
+}
+
+
bool IconBuffer::requestFileIcon(const Zstring& filename, wxIcon* icon)
{
auto getIcon = [&](const Zstring& entryName) -> bool
diff --git a/lib/icon_buffer.h b/lib/icon_buffer.h
index be8a02d8..a13ad3cd 100644
--- a/lib/icon_buffer.h
+++ b/lib/icon_buffer.h
@@ -27,16 +27,14 @@ public:
IconBuffer(IconSize sz);
~IconBuffer();
- int getSize() const { return cvrtSize(icoSize); } //*maximum* icon size in pixel
-
- const wxIcon& genericDirIcon () { return genDirIcon; }
const wxIcon& genericFileIcon() { return genFileIcon; }
+ const wxIcon& genericDirIcon () { return genDirIcon; }
+
+ int getSize() const; //*maximum* icon size in pixel
bool requestFileIcon(const Zstring& filename, wxIcon* icon = NULL); //returns false if icon is not in buffer
void setWorkload(const std::vector<Zstring>& load); //(re-)set new workload of icons to be retrieved;
- static int cvrtSize(IconSize sz);
-
private:
struct Pimpl;
std::unique_ptr<Pimpl> pimpl;
diff --git a/lib/localization.cpp b/lib/localization.cpp
index 774ee9ec..e8ff6040 100644
--- a/lib/localization.cpp
+++ b/lib/localization.cpp
@@ -132,7 +132,7 @@ public:
}
virtual void onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) {}
- virtual ReturnValDir onDir(const Zchar* shortName, const Zstring& fullName) { return Int2Type<ReturnValDir::TRAVERSING_DIR_IGNORE>(); }
+ virtual std::shared_ptr<TraverseCallback> onDir(const Zchar* shortName, const Zstring& fullName) { return nullptr; }
virtual HandleError onError(const std::wstring& errorText) { return TRAV_ERROR_IGNORE; } //errors are not really critical in this context
private:
@@ -180,7 +180,7 @@ ExistingTranslations::ExistingTranslations()
std::vector<Zstring> lngFiles;
FindLngfiles traverseCallback(lngFiles);
- traverseFolder(toZ(zen::getResourceDir() + wxT("Languages")), //throw();
+ traverseFolder(zen::getResourceDir() + Zstr("Languages"), //throw();
false, //don't follow symlinks
traverseCallback);
@@ -193,6 +193,10 @@ ExistingTranslations::ExistingTranslations()
lngfile::TransHeader lngHeader;
lngfile::parseHeader(stream, lngHeader); //throw ParsingError
+ /*
+ There is some buggy behavior in wxWidgets which maps "zh_TW" to simplified chinese.
+ Fortunately locales can be also entered as description. I changed to "Chinese (Traditional)" which works fine.
+ */
const wxLanguageInfo* locInfo = wxLocale::FindLanguageInfo(utf8CvrtTo<wxString>(lngHeader.localeName));
if (locInfo)
{
@@ -374,10 +378,11 @@ void zen::setLanguage(int language)
{
//(try to) retrieve language file
wxString languageFile;
- for (std::vector<ExistingTranslations::Entry>::const_iterator i = ExistingTranslations::get().begin(); i != ExistingTranslations::get().end(); ++i)
- if (i->languageID == language)
+
+ for (auto iter = ExistingTranslations::get().begin(); iter != ExistingTranslations::get().end(); ++iter)
+ if (iter->languageID == language)
{
- languageFile = i->languageFile;
+ languageFile = iter->languageFile;
break;
}
diff --git a/lib/lock_holder.h b/lib/lock_holder.h
index a7cf3436..d94b0fd6 100644
--- a/lib/lock_holder.h
+++ b/lib/lock_holder.h
@@ -45,7 +45,7 @@ public:
catch (const FileError& e)
{
bool dummy = false; //this warning shall not be shown but logged only
- procCallback.reportWarning(e.msg(), dummy); //may throw!
+ procCallback.reportWarning(e.toString(), dummy); //may throw!
}
}
diff --git a/lib/parallel_scan.cpp b/lib/parallel_scan.cpp
index 29d87ee7..96b167b8 100644
--- a/lib/parallel_scan.cpp
+++ b/lib/parallel_scan.cpp
@@ -171,7 +171,7 @@ std::vector<std::set<DirectoryKey>> separateByDistinctDisk(const std::set<Direct
typedef Zbase<wchar_t, StorageRefCountThreadSafe> BasicWString; //thread safe string class for UI texts
-class AsyncCallback
+class AsyncCallback //actor pattern
{
public:
AsyncCallback() :
@@ -207,7 +207,7 @@ public:
boost::lock_guard<boost::mutex> dummy(lockErrorMsg);
if (!errorMsg.empty() && !errorResponse.get())
{
- FillBufferCallback::HandleError rv = callback.reportError(cvrtString<std::wstring>(errorMsg)); //throw!
+ FillBufferCallback::HandleError rv = callback.reportError(copyStringTo<std::wstring>(errorMsg)); //throw!
errorResponse.reset(new FillBufferCallback::HandleError(rv));
//dummy.unlock();
@@ -244,12 +244,12 @@ public:
if (!currentFile.empty())
filename = utf8CvrtTo<std::wstring>(currentFile);
else if (!currentStatus.empty())
- statusMsg = cvrtString<std::wstring>(currentStatus);
+ statusMsg = copyStringTo<std::wstring>(currentStatus);
}
if (!filename.empty())
{
- std::wstring statusText = cvrtString<std::wstring>(textScanning);
+ std::wstring statusText = copyStringTo<std::wstring>(textScanning);
const long activeCount = activeWorker;
if (activeCount >= 2)
{
@@ -293,8 +293,6 @@ private:
};
//-------------------------------------------------------------------------------------------------
-class DirCallback;
-
struct TraverserShared
{
public:
@@ -309,9 +307,6 @@ public:
acb_(acb),
threadID_(threadID) {}
- typedef std::shared_ptr<DirCallback> CallbackPointer;
- std::vector<CallbackPointer> callBackBox; //collection of callback pointers to handle ownership
-
const SymLinkHandling handleSymlinks_;
const HardFilter::FilterRef filterInstance; //always bound!
@@ -332,10 +327,11 @@ public:
relNameParentPf_(relNameParentPf),
output_(output) {}
- virtual void onFile (const Zchar* shortName, const Zstring& fullName, const FileInfo& details);
- virtual void onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details);
- virtual ReturnValDir onDir (const Zchar* shortName, const Zstring& fullName);
- virtual HandleError onError (const std::wstring& errorText);
+ virtual std::shared_ptr<TraverseCallback>
+ onDir (const Zchar* shortName, const Zstring& fullName);
+ virtual void onFile (const Zchar* shortName, const Zstring& fullName, const FileInfo& details);
+ virtual void onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details);
+ virtual HandleError onError (const std::wstring& errorText);
private:
TraverserShared& cfg;
@@ -405,7 +401,7 @@ void DirCallback::onSymlink(const Zchar* shortName, const Zstring& fullName, con
}
-TraverseCallback::ReturnValDir DirCallback::onDir(const Zchar* shortName, const Zstring& fullName)
+std::shared_ptr<TraverseCallback> DirCallback::onDir(const Zchar* shortName, const Zstring& fullName)
{
boost::this_thread::interruption_point();
@@ -419,16 +415,14 @@ TraverseCallback::ReturnValDir DirCallback::onDir(const Zchar* shortName, const
bool subObjMightMatch = true;
const bool passFilter = cfg.filterInstance->passDirFilter(relName, &subObjMightMatch);
if (!passFilter && !subObjMightMatch)
- return Int2Type<ReturnValDir::TRAVERSING_DIR_IGNORE>(); //do NOT traverse subdirs
+ return nullptr; //do NOT traverse subdirs
//else: attention! ensure directory filtering is applied later to exclude actually filtered directories
DirContainer& subDir = output_.addSubDir(shortName);
if (passFilter)
cfg.acb_.incItemsScanned(); //add 1 element to the progress indicator
- TraverserShared::CallbackPointer subDirCallback = std::make_shared<DirCallback>(cfg, relName + FILE_NAME_SEPARATOR, subDir);
- cfg.callBackBox.push_back(subDirCallback); //handle lifetime
- return ReturnValDir(Int2Type<ReturnValDir::TRAVERSING_DIR_CONTINUE>(), *subDirCallback);
+ return std::make_shared<DirCallback>(cfg, relName + FILE_NAME_SEPARATOR, subDir);
}
diff --git a/lib/parse_plural.h b/lib/parse_plural.h
index 847bec35..960172fa 100644
--- a/lib/parse_plural.h
+++ b/lib/parse_plural.h
@@ -112,7 +112,7 @@ struct NumberN : public Expr<int>
};
-typedef Zbase<char> Wstring;
+typedef zen::Zbase<char> Wstring;
class PluralForm
diff --git a/lib/process_xml.cpp b/lib/process_xml.cpp
index 777c3ed6..78e14ff5 100644
--- a/lib/process_xml.cpp
+++ b/lib/process_xml.cpp
@@ -74,7 +74,7 @@ void setXmlType(XmlDoc& doc, XmlType type) //throw()
wxString xmlAccess::getGlobalConfigFile()
{
- return zen::getConfigDir() + wxT("GlobalSettings.xml");
+ return toWx(zen::getConfigDir()) + wxT("GlobalSettings.xml");
}
@@ -810,6 +810,7 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config)
inShared["CopyFilePermissions" ](config.copyFilePermissions);
inShared["TransactionalFileCopy"](config.transactionalFileCopy);
inShared["VerifyCopiedFiles" ](config.verifyFileCopy);
+ inShared["RunWithBackgroundPriority"](config.runWithBackgroundPriority);
//max. allowed file time deviation
inShared["FileTimeTolerance"](config.fileTimeTolerance);
@@ -888,13 +889,13 @@ void readConfig(const Zstring& filename, XmlType type, ConfigType& config)
loadXmlDocument(filename, doc); //throw FfsXmlError
if (getXmlType(doc) != type) //throw()
- throw FfsXmlError(_("Error parsing configuration file:") + "\n\"" + filename + "\"");
+ throw FfsXmlError(_("Error parsing configuration file:") + L"\n\"" + filename + L"\"");
XmlIn in(doc);
::readConfig(in, config);
if (in.errorsOccured())
- throw FfsXmlError(_("Error parsing configuration file:") + "\n\"" + filename + "\"\n\n" +
+ throw FfsXmlError(_("Error parsing configuration file:") + L"\n\"" + filename + L"\"\n\n" +
getErrorMessageFormatted(in), FfsXmlError::WARNING);
}
}
@@ -1067,6 +1068,7 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out)
outShared["CopyFilePermissions" ](config.copyFilePermissions);
outShared["TransactionalFileCopy"](config.transactionalFileCopy);
outShared["VerifyCopiedFiles" ](config.verifyFileCopy);
+ outShared["RunWithBackgroundPriority"](config.runWithBackgroundPriority);
//max. allowed file time deviation
outShared["FileTimeTolerance"](config.fileTimeTolerance);
diff --git a/lib/process_xml.h b/lib/process_xml.h
index 5f1dfb93..7f8b273b 100644
--- a/lib/process_xml.h
+++ b/lib/process_xml.h
@@ -142,6 +142,7 @@ struct XmlGlobalSettings
programLanguage(zen::retrieveSystemLanguage()),
copyLockedFiles(true),
copyFilePermissions(false),
+ runWithBackgroundPriority(false),
fileTimeTolerance(2), //default 2s: FAT vs NTFS
verifyFileCopy(false),
transactionalFileCopy(true) {}
@@ -150,6 +151,8 @@ struct XmlGlobalSettings
bool copyLockedFiles; //VSS usage
bool copyFilePermissions;
+ bool runWithBackgroundPriority;
+
size_t fileTimeTolerance; //max. allowed file time deviation
bool verifyFileCopy; //verify copied files
bool transactionalFileCopy;
@@ -174,7 +177,7 @@ struct XmlGlobalSettings
#elif defined FFS_LINUX
textSearchRespectCase(true),
#endif
- iconSize(ICON_SIZE_MEDIUM),
+ iconSize(ICON_SIZE_SMALL),
lastUpdateCheck(0)
{
//default external apps will be translated "on the fly"!!!
diff --git a/lib/recycler.cpp b/lib/recycler.cpp
index 30083701..abe63a3e 100644
--- a/lib/recycler.cpp
+++ b/lib/recycler.cpp
@@ -65,8 +65,8 @@ void moveToWindowsRecycler(const std::vector<Zstring>& filesToDelete) //throw F
const DllFun<GetLastErrorFct> getLastError (getDllName(), getLastErrorFctName);
if (!moveToRecycler || !getLastError)
- throw FileError(_("Error moving to Recycle Bin:") + "\n\"" + fileNames[0] + "\"" + //report first file only... better than nothing
- "\n\n" + _("Could not load a required DLL:") + " \"" + getDllName() + "\"");
+ throw FileError(_("Error moving to Recycle Bin:") + L"\n\"" + fileNames[0] + L"\"" + //report first file only... better than nothing
+ L"\n\n" + _("Could not load a required DLL:") + L" \"" + getDllName() + L"\"");
//#warning moving long file paths to recycler does not work! clarify!
// std::vector<Zstring> temp;
@@ -78,8 +78,8 @@ void moveToWindowsRecycler(const std::vector<Zstring>& filesToDelete) //throw F
{
wchar_t errorMessage[2000];
getLastError(errorMessage, 2000);
- throw FileError(_("Error moving to Recycle Bin:") + "\n\"" + fileNames[0] + "\"" + //report first file only... better than nothing
- "\n\n" + "(" + errorMessage + ")");
+ throw FileError(_("Error moving to Recycle Bin:") + L"\n\"" + fileNames[0] + L"\"" + //report first file only... better than nothing
+ L"\n\n" + L"(" + errorMessage + L")");
}
}
else //regular recycle bin usage: available since XP
@@ -106,7 +106,7 @@ void moveToWindowsRecycler(const std::vector<Zstring>& filesToDelete) //throw F
if (::SHFileOperation(&fileOp) != 0 || fileOp.fAnyOperationsAborted)
{
- throw FileError(_("Error moving to Recycle Bin:") + "\n\"" + filenameDoubleNull + "\""); //report first file only... better than nothing
+ throw FileError(_("Error moving to Recycle Bin:") + L"\n\"" + filenameDoubleNull + L"\""); //report first file only... better than nothing
}
}
}
@@ -132,8 +132,8 @@ bool zen::moveToRecycleBin(const Zstring& filename) //throw FileError
try
{
if (!fileObj->trash())
- throw FileError(_("Error moving to Recycle Bin:") + "\n\"" + filename + "\"" +
- "\n\n" + "(unknown error)");
+ throw FileError(_("Error moving to Recycle Bin:") + L"\n\"" + filename + L"\"" +
+ L"\n\n" + L"(unknown error)");
}
catch (const Glib::Error& errorObj)
{
@@ -152,11 +152,11 @@ bool zen::moveToRecycleBin(const Zstring& filename) //throw FileError
}
//assemble error message
- const std::wstring errorMessage = L"Glib Error Code " + toString<std::wstring>(errorObj.code()) + /* ", " +
- g_quark_to_string(errorObj.domain()) + */ ": " + errorObj.what();
+ const std::wstring errorMessage = L"Glib Error Code " + toString<std::wstring>(errorObj.code()) + /* L", " +
+ g_quark_to_string(errorObj.domain()) + */ L": " + utf8CvrtTo<std::wstring>(errorObj.what());
- throw FileError(_("Error moving to Recycle Bin:") + "\n\"" + filename + "\"" +
- "\n\n" + "(" + errorMessage + ")");
+ throw FileError(_("Error moving to Recycle Bin:") + L"\n\"" + filename + L"\"" +
+ L"\n\n" + L"(" + errorMessage + L")");
}
#endif
return true;
diff --git a/lib/resolve_path.cpp b/lib/resolve_path.cpp
index 14ad690e..feeb98e3 100644
--- a/lib/resolve_path.cpp
+++ b/lib/resolve_path.cpp
@@ -1,6 +1,6 @@
#include "resolve_path.h"
#include <wx/utils.h>
-#include <wx/datetime.h>
+#include <zen/time.h>
#include <wx+/string_conv.h>
#include <map>
#include <set>
@@ -178,14 +178,13 @@ bool replaceMacro(wxString& macro) //macro without %-characters, return true if
//there are equally named environment variables %TIME%, %DATE% existing, so replace these first!
if (macro.CmpNoCase(wxT("time")) == 0)
{
- macro = wxDateTime::Now().FormatISOTime();
- macro.Replace(wxT(":"), wxT(""));
+ macro = formatTime<wxString>(L"%H%M%S");
return true;
}
if (macro.CmpNoCase(wxT("date")) == 0)
{
- macro = wxDateTime::Now().FormatISODate();
+ macro = formatTime<wxString>(FORMAT_ISO_DATE);
return true;
}
@@ -193,7 +192,8 @@ bool replaceMacro(wxString& macro) //macro without %-characters, return true if
{
if (macro.CmpNoCase(phrase) != 0)
return false;
- macro = wxDateTime::Now().Format(format);
+
+ macro = formatTime<wxString>(format);
return true;
};
@@ -272,10 +272,10 @@ public:
virtual void onFile(const Zchar* shortName, const Zstring& fullName, const FileInfo& details) {}
virtual void onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) {}
- virtual ReturnValDir onDir(const Zchar* shortName, const Zstring& fullName)
+ virtual std::shared_ptr<TraverseCallback> onDir(const Zchar* shortName, const Zstring& fullName)
{
devices_.insert(std::make_pair(shortName, fullName));
- return Int2Type<ReturnValDir::TRAVERSING_DIR_IGNORE>(); //DON'T traverse into subdirs
+ return nullptr; //DON'T traverse into subdirs
}
virtual HandleError onError(const std::wstring& errorText) { return TRAV_ERROR_IGNORE; }
@@ -379,18 +379,20 @@ void expandVolumeName(Zstring& text) // [volname]:\folder [volname]\folde
{
//this would be a nice job for a C++11 regex...
- size_t posStart = text.find(Zstr("["));
- if (posStart != Zstring::npos)
+
+ //we only expect the [.*] pattern at the beginning => do not touch dir names like "C:\somedir\[stuff]"
+ trim(text, true, false);
+
+ if (startsWith(text, Zstr("[")))
{
- size_t posEnd = text.find(Zstr("]"), posStart);
+ size_t posEnd = text.find(Zstr("]"));
if (posEnd != Zstring::npos)
{
- Zstring before = Zstring(text.c_str(), posStart);
- Zstring volname = Zstring(text.c_str() + posStart + 1, posEnd - posStart - 1);
+ Zstring volname = Zstring(text.c_str() + 1, posEnd - 1);
Zstring after = Zstring(text.c_str() + posEnd + 1);
- if (startsWith(after, ':'))
- after = afterFirst(after, ':');
+ if (startsWith(after, Zstr(':')))
+ after = afterFirst(after, Zstr(':'));
if (startsWith(after, FILE_NAME_SEPARATOR))
after = afterFirst(after, FILE_NAME_SEPARATOR);
@@ -403,7 +405,7 @@ void expandVolumeName(Zstring& text) // [volname]:\folder [volname]\folde
if (!endsWith(volPath, FILE_NAME_SEPARATOR))
volPath += FILE_NAME_SEPARATOR;
- text = before + volPath + after;
+ text = volPath + after;
//successfully replaced pattern
return;
}
diff --git a/lib/resources.cpp b/lib/resources.cpp
index da407920..01a046b1 100644
--- a/lib/resources.cpp
+++ b/lib/resources.cpp
@@ -46,7 +46,7 @@ void loadAnimFromZip(wxZipInputStream& zipInput, wxAnimation& anim)
GlobalResources::GlobalResources()
{
- wxFFileInputStream input(zen::getResourceDir() + wxT("Resources.zip"));
+ wxFFileInputStream input(toWx(zen::getResourceDir()) + wxT("Resources.zip"));
if (input.IsOk()) //if not... we don't want to react too harsh here
{
//activate support for .png files
diff --git a/lib/shadow.cpp b/lib/shadow.cpp
index 73a2e8f7..9bc17aff 100644
--- a/lib/shadow.cpp
+++ b/lib/shadow.cpp
@@ -44,33 +44,32 @@ public:
ShadowVolume(const Zstring& volumeNameFormatted) : //throw(FileError)
createShadowCopy (getDllName(), createShadowCopyFctName),
releaseShadowCopy(getDllName(), releaseShadowCopyFctName),
- backupHandle(0)
+ getShadowVolume (getDllName(), getShadowVolumeFctName),
+ backupHandle(nullptr)
{
//check if shadow copy dll was loaded correctly
- if (!createShadowCopy || !releaseShadowCopy)
- throw FileError(_("Error accessing Volume Shadow Copy Service!") + "\n" +
- _("Could not load a required DLL:") + " \"" + getDllName() + "\"");
+ if (!createShadowCopy || !releaseShadowCopy || !getShadowVolume)
+ throw FileError(_("Error accessing Volume Shadow Copy Service!") + L"\n" +
+ _("Could not load a required DLL:") + L" \"" + getDllName() + L"\"");
//VSS does not support running under WOW64 except for Windows XP and Windows Server 2003
//(Reference: http://msdn.microsoft.com/en-us/library/aa384627(VS.85).aspx)
if (runningWOW64())
- throw FileError(_("Error accessing Volume Shadow Copy Service!") + "\n" +
+ throw FileError(_("Error accessing Volume Shadow Copy Service!") + L"\n" +
_("Making shadow copies on WOW64 is not supported. Please use FreeFileSync 64-bit version."));
//---------------------------------------------------------------------------------------------------------
//start shadow volume copy service:
- wchar_t shadowVolName[1000];
wchar_t errorMessage[1000];
+ backupHandle = createShadowCopy(volumeNameFormatted.c_str(),
+ errorMessage,
+ 1000);
+ if (!backupHandle)
+ throw FileError(_("Error accessing Volume Shadow Copy Service!") + L"\n" +
+ L"(" + errorMessage + L" Volume: \"" + volumeNameFormatted + L"\")");
- if (!createShadowCopy(volumeNameFormatted.c_str(),
- shadowVolName,
- 1000,
- &backupHandle,
- errorMessage,
- 1000))
- throw FileError(_("Error accessing Volume Shadow Copy Service!") + "\n" +
- "(" + errorMessage + " Volume: \"" + volumeNameFormatted + "\")");
-
+ wchar_t shadowVolName[1000];
+ getShadowVolume(backupHandle, shadowVolName, 1000);
shadowVol = Zstring(shadowVolName) + FILE_NAME_SEPARATOR; //shadowVolName NEVER has a trailing backslash
}
@@ -79,7 +78,7 @@ public:
releaseShadowCopy(backupHandle); //fast! no performance optimization necessary
}
- Zstring getShadowVolume() const //trailing path separator
+ Zstring getShadowVolumeName() const //trailing path separator
{
return shadowVol;
}
@@ -90,6 +89,7 @@ private:
const DllFun<CreateShadowCopyFct> createShadowCopy;
const DllFun<ReleaseShadowCopyFct> releaseShadowCopy;
+ const DllFun<GetShadowVolumeFct> getShadowVolume;
Zstring shadowVol;
@@ -105,7 +105,7 @@ Zstring ShadowCopy::makeShadowCopy(const Zstring& inputFile)
if (!::GetVolumePathName(inputFile.c_str(), //__in LPCTSTR lpszFileName,
volumeNameRaw, //__out LPTSTR lpszVolumePathName,
1000)) //__in DWORD cchBufferLength
- throw FileError(_("Could not determine volume name for file:") + "\n\"" + inputFile + "\"");
+ throw FileError(_("Could not determine volume name for file:") + L"\n\"" + inputFile + L"\"");
Zstring volumeNameFormatted = volumeNameRaw;
if (!endsWith(volumeNameFormatted, FILE_NAME_SEPARATOR))
@@ -116,8 +116,8 @@ Zstring ShadowCopy::makeShadowCopy(const Zstring& inputFile)
if (pos == Zstring::npos)
{
std::wstring msg = _("Volume name %x not part of filename %y!");
- replace(msg, L"%x", std::wstring(L"\"") + volumeNameFormatted + "\"", false);
- replace(msg, L"%y", std::wstring(L"\"") + inputFile + "\"", false);
+ replace(msg, L"%x", std::wstring(L"\"") + volumeNameFormatted + L"\"", false);
+ replace(msg, L"%y", std::wstring(L"\"") + inputFile + L"\"", false);
throw FileError(msg);
}
@@ -130,5 +130,5 @@ Zstring ShadowCopy::makeShadowCopy(const Zstring& inputFile)
}
//return filename alias on shadow copy volume
- return iter->second->getShadowVolume() + Zstring(inputFile.c_str() + pos + volumeNameFormatted.length());
+ return iter->second->getShadowVolumeName() + Zstring(inputFile.c_str() + pos + volumeNameFormatted.length());
}
diff --git a/lib/statistics.h b/lib/statistics.h
index 8f974aae..718e4f19 100644
--- a/lib/statistics.h
+++ b/lib/statistics.h
@@ -13,11 +13,12 @@
#include <wx/defs.h>
#include <wx/string.h>
#include <wx/stopwatch.h>
+#include <zen/deprecate.h>
class RetrieveStatistics
{
public:
- wxDEPRECATED(~RetrieveStatistics()); //generate compiler warnings as a reminder to remove code after measurements
+ ZEN_DEPRECATE ~RetrieveStatistics(); //remove code after measurements!
void writeEntry(double value, int objects);
private:
diff --git a/lib/xml_base.cpp b/lib/xml_base.cpp
index b4887dc0..26176776 100644
--- a/lib/xml_base.cpp
+++ b/lib/xml_base.cpp
@@ -31,7 +31,7 @@ void xmlAccess::loadXmlDocument(const Zstring& filename, XmlDoc& doc) //throw Ff
if (!startsWith(fileBegin, xmlBegin) &&
!startsWith(fileBegin, zen::BYTE_ORDER_MARK_UTF8 + xmlBegin)) //respect BOM!
- throw FfsXmlError(_("Error parsing configuration file:") + "\n\"" + filename + "\"");
+ throw FfsXmlError(_("Error parsing configuration file:") + L"\n\"" + filename + L"\"");
}
const zen::UInt64 fs = zen::getFilesize(filename); //throw FileError
@@ -40,14 +40,14 @@ void xmlAccess::loadXmlDocument(const Zstring& filename, XmlDoc& doc) //throw Ff
FileInput inputFile(filename); //throw FileError
const size_t bytesRead = inputFile.read(&stream[0], stream.size()); //throw FileError
if (bytesRead < to<size_t>(fs))
- throw FfsXmlError(_("Error reading file:") + "\n\"" + filename + "\"");
+ throw FfsXmlError(_("Error reading file:") + L"\n\"" + filename + L"\"");
}
catch (const FileError& error)
{
if (!fileExists(filename))
- throw FfsXmlError(_("File does not exist:") + "\n\"" + filename+ "\"");
+ throw FfsXmlError(_("File does not exist:") + L"\n\"" + filename+ L"\"");
- throw FfsXmlError(error.msg());
+ throw FfsXmlError(error.toString());
}
try
@@ -56,14 +56,14 @@ void xmlAccess::loadXmlDocument(const Zstring& filename, XmlDoc& doc) //throw Ff
}
catch (const XmlParsingError&)
{
- throw FfsXmlError(_("Error parsing configuration file:") + "\n\"" + filename + "\"");
+ throw FfsXmlError(_("Error parsing configuration file:") + L"\n\"" + filename + L"\"");
}
}
const std::wstring xmlAccess::getErrorMessageFormatted(const XmlIn& in)
{
- std::wstring errorMessage = _("Could not read values for the following XML nodes:") + "\n";
+ std::wstring errorMessage = _("Could not read values for the following XML nodes:") + L"\n";
std::vector<std::wstring> failedNodes = in.getErrorsAs<std::wstring>();
std::for_each(failedNodes.begin(), failedNodes.end(),
@@ -98,6 +98,6 @@ void xmlAccess::saveXmlDocument(const zen::XmlDoc& doc, const Zstring& filename)
}
catch (const FileError& error) //more detailed error messages than with wxWidgets
{
- throw FfsXmlError(error.msg());
+ throw FfsXmlError(error.toString());
}
}
diff --git a/lib/xml_base.h b/lib/xml_base.h
index 4614615e..dc534dc5 100644
--- a/lib/xml_base.h
+++ b/lib/xml_base.h
@@ -24,9 +24,9 @@ public:
FATAL
};
- FfsXmlError(const std::wstring& message, Severity sev = FATAL) : errorMessage(message), m_severity(sev) {}
+ explicit FfsXmlError(const std::wstring& message, Severity sev = FATAL) : errorMessage(message), m_severity(sev) {}
- const std::wstring& msg() const { return errorMessage; }
+ const std::wstring& toString() const { return errorMessage; }
Severity getSeverity() const { return m_severity; }
private:
const std::wstring errorMessage;
diff --git a/structures.h b/structures.h
index 9b55f20a..47d34d0c 100644
--- a/structures.h
+++ b/structures.h
@@ -372,8 +372,9 @@ struct MainConfiguration
\\$Recycle.Bin\\")) {}
#elif defined FFS_LINUX
globalFilter(Zstr("*"),
- Zstr("/.Trash-*/\n\
- /.recycle/")) {}
+ Zstr("\
+/.Trash-*/\n\
+/.recycle/")) {}
#endif
CompConfig cmpConfig; //global compare settings: may be overwritten by folder pair settings
diff --git a/synchronization.cpp b/synchronization.cpp
index 647da757..66c7d262 100644
--- a/synchronization.cpp
+++ b/synchronization.cpp
@@ -11,7 +11,6 @@
#include <wx/msgdlg.h>
#include <wx/log.h>
#include <wx/file.h>
-#include <boost/bind.hpp>
#include <wx+/string_conv.h>
#include <wx+/format_unit.h>
#include <zen/scope_guard.h>
@@ -19,15 +18,14 @@
#include <zen/file_handling.h>
#include "lib/resolve_path.h"
#include "lib/recycler.h"
-#include <zen/disable_standby.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>
#ifdef FFS_WIN
#include <zen/long_path_prefix.h>
-#include <boost/scoped_ptr.hpp>
#include <zen/perf.h>
#include "lib/shadow.h"
#endif
@@ -311,7 +309,7 @@ bool tryReportingError(ProcessCallback& handler, Function cmd) //return "true" o
}
catch (FileError& error)
{
- ProcessCallback::Response rv = handler.reportError(error.msg()); //may throw!
+ ProcessCallback::Response rv = handler.reportError(error.toString()); //may throw!
if (rv == ProcessCallback::IGNORE_ERROR)
return false;
else if (rv == ProcessCallback::RETRY)
@@ -335,11 +333,8 @@ Zstring getSessionDeletionDir(const Zstring& deletionDirectory, const Zstring& p
if (!endsWith(formattedDir, FILE_NAME_SEPARATOR))
formattedDir += FILE_NAME_SEPARATOR;
- const wxString timeNow = replaceCpy(wxDateTime::Now().FormatISOTime(), L":", L"");
-
- const wxString sessionName = wxDateTime::Now().FormatISODate() + wxChar(' ') + timeNow;
- formattedDir += prefix + toZ(sessionName);
-
+ formattedDir += prefix;
+ formattedDir += formatTime<Zstring>(Zstr("%Y-%m-%d %H%M%S"));
//ensure that session directory does not yet exist (must be unique)
Zstring output = formattedDir;
@@ -358,13 +353,18 @@ SyncProcess::SyncProcess(xmlAccess::OptionalDialogs& warnings,
bool copyLockedFiles,
bool copyFilePermissions,
bool transactionalFileCopy,
+ bool runWithBackgroundPriority,
ProcessCallback& handler) :
verifyCopiedFiles_(verifyCopiedFiles),
copyLockedFiles_(copyLockedFiles),
copyFilePermissions_(copyFilePermissions),
transactionalFileCopy_(transactionalFileCopy),
m_warnings(warnings),
- procCallback(handler) {}
+ procCallback(handler)
+ {
+if (runWithBackgroundPriority)
+procBackground.reset(new ScheduleForBackgroundProcessing);
+ }
//--------------------------------------------------------------------------------------------------------------
namespace
@@ -458,7 +458,7 @@ DeletionHandling::~DeletionHandling()
{
//always (try to) clean up, even if synchronization is aborted!
try { tryCleanup(); }
- catch (...) {} //make sure this stays non-blocking!
+ catch (...) {} //make sure this stays non-blocking!
}
@@ -705,7 +705,9 @@ private:
//[...]
//recurse into sub-dirs
- std::for_each(hierObj.refSubDirs().begin(), hierObj.refSubDirs().end(), boost::bind(&DiskSpaceNeeded::processRecursively, this, _1));
+ std::for_each(hierObj.refSubDirs().begin(), hierObj.refSubDirs().end(), [&](const HierarchyObject& subDir) { this->processRecursively(subDir); });
+ //for (auto& subDir : hierObj.refSubDirs())
+ // processRecursively(subDir);
}
const bool freeSpaceDelLeft_;
@@ -793,13 +795,13 @@ public:
verifyCopiedFiles(syncProc.verifyCopiedFiles_),
copyFilePermissions(syncProc.copyFilePermissions_),
transactionalFileCopy(syncProc.transactionalFileCopy_),
- txtCreatingFile (replaceCpy(_("Creating file %x" ), L"%x", L"\n\"%x\"", false)),
- txtCreatingLink (replaceCpy(_("Creating symbolic link %x" ), L"%x", L"\n\"%x\"", false)),
- txtCreatingFolder (replaceCpy(_("Creating folder %x" ), L"%x", L"\n\"%x\"", false)),
- txtOverwritingFile (replaceCpy(_("Overwriting file %x" ), L"%x", L"\n\"%x\"", false)),
- txtOverwritingLink (replaceCpy(_("Overwriting symbolic link %x"), L"%x", L"\n\"%x\"", false)),
- txtVerifying (replaceCpy(_("Verifying file %x" ), L"%x", L"\n\"%x\"", false)),
- txtWritingAttributes(replaceCpy(_("Updating attributes of %x" ), L"%x", L"\n\"%x\"", false)) {}
+ txtCreatingFile (replaceCpy(_("Creating file %x" ), L"%x", L"\"%x\"", false)),
+ txtCreatingLink (replaceCpy(_("Creating symbolic link %x" ), L"%x", L"\"%x\"", false)),
+ txtCreatingFolder (replaceCpy(_("Creating folder %x" ), L"%x", L"\"%x\"", false)),
+ txtOverwritingFile (replaceCpy(_("Overwriting file %x" ), L"%x", L"\"%x\"", false)),
+ txtOverwritingLink (replaceCpy(_("Overwriting symbolic link %x"), L"%x", L"\"%x\"", false)),
+ txtVerifying (replaceCpy(_("Verifying file %x" ), L"%x", L"\"%x\"", false)),
+ txtWritingAttributes(replaceCpy(_("Updating attributes of %x" ), L"%x", L"\"%x\"", false)) {}
void startSync(BaseDirMapping& baseMap)
{
@@ -1351,42 +1353,15 @@ struct EqualDependentDirectory : public std::binary_function<Zstring, Zstring, b
Zstring(rhs.c_str(), std::min(lhs.length(), rhs.length())));
}
};
-
-
-class EnforceUpdateDatabase
-{
-public:
- EnforceUpdateDatabase(const BaseDirMapping& baseMap) :
- dbWasWritten(false),
- baseMap_(baseMap) {}
-
- ~EnforceUpdateDatabase()
- {
- try
- {
- tryWriteDB(); //throw FileError, keep non-blocking!!!
- }
- catch (...) {}
- }
-
- void tryWriteDB() //(try to gracefully) write db file; throw FileError
- {
- if (!dbWasWritten)
- {
- zen::saveToDisk(baseMap_); //throw FileError
- dbWasWritten = true;
- }
- }
-
-private:
- bool dbWasWritten;
- const BaseDirMapping& baseMap_;
-};
}
void SyncProcess::startSynchronizationProcess(const std::vector<FolderPairSyncCfg>& syncConfig, FolderComparison& folderCmp)
{
+ //prevent shutdown while synchronization is in progress
+ DisableStandby dummy;
+ (void)dummy;
+
#ifdef NDEBUG
wxLogNull noWxLogs; //prevent wxWidgets logging
#endif
@@ -1536,7 +1511,7 @@ void SyncProcess::startSynchronizationProcess(const std::vector<FolderPairSyncCf
if (!missingSrcDir.empty())
{
- procCallback.reportFatalError(_("Source directory does not exist anymore:") + "\n\"" + missingSrcDir + "\"");
+ procCallback.reportFatalError(_("Source directory does not exist anymore:") + L"\n\"" + missingSrcDir + L"\"");
skipFolderPair[folderIndex] = true;
continue;
}
@@ -1599,7 +1574,7 @@ void SyncProcess::startSynchronizationProcess(const std::vector<FolderPairSyncCf
wxString conflictDescription = i->second;
//conflictDescription.Replace(wxT("\n"), wxT(" ")); //remove line-breaks
- warningMessage += wxString(L"\"") + i->first + L"\": " + conflictDescription + "\n\n";
+ warningMessage += std::wstring(L"\"") + i->first + L"\": " + conflictDescription + L"\n\n";
}
if (statisticsTotal.getConflict() > static_cast<int>(firstConflicts.size()))
@@ -1617,10 +1592,10 @@ void SyncProcess::startSynchronizationProcess(const std::vector<FolderPairSyncCf
wxString warningMessage = _("Significant difference detected:");
for (DirPairList::const_iterator i = significantDiff.begin(); i != significantDiff.end(); ++i)
- warningMessage += wxString(wxT("\n\n")) +
- i->first + " <-> " + "\n" +
+ warningMessage += std::wstring(L"\n\n") +
+ i->first + L" <-> " + L"\n" +
i->second;
- warningMessage += wxString(wxT("\n\n")) + _("More than 50% of the total number of files will be copied or deleted!");
+ warningMessage += wxString(L"\n\n") + _("More than 50% of the total number of files will be copied or deleted!");
procCallback.reportWarning(warningMessage, m_warnings.warningSignificantDifference);
}
@@ -1632,9 +1607,9 @@ void SyncProcess::startSynchronizationProcess(const std::vector<FolderPairSyncCf
wxString warningMessage = _("Not enough free disk space available in:");
for (auto i = diskSpaceMissing.begin(); i != diskSpaceMissing.end(); ++i)
- warningMessage += wxString(wxT("\n\n")) +
- "\"" + i->first + "\"\n" +
- _("Free disk space required:") + wxT(" ") + filesizeToShortString(to<UInt64>(i->second.first)) + wxT("\n") +
+ warningMessage += std::wstring(L"\n\n") +
+ L"\"" + i->first + L"\"\n" +
+ _("Free disk space required:") + wxT(" ") + filesizeToShortString(to<UInt64>(i->second.first)) + L"\n" +
_("Free disk space available:") + wxT(" ") + filesizeToShortString(to<UInt64>(i->second.second));
procCallback.reportWarning(warningMessage, m_warnings.warningNotEnoughDiskSpace);
@@ -1666,8 +1641,8 @@ void SyncProcess::startSynchronizationProcess(const std::vector<FolderPairSyncCf
{
wxString warningMessage = wxString(_("A directory will be modified which is part of multiple folder pairs! Please review synchronization settings!")) + wxT("\n");
for (std::vector<Zstring>::const_iterator i = conflictDirs.begin(); i != conflictDirs.end(); ++i)
- warningMessage += wxString(wxT("\n")) +
- "\"" + *i + "\"";
+ warningMessage += std::wstring(L"\n") +
+ L"\"" + *i + L"\"";
procCallback.reportWarning(warningMessage, m_warnings.warningMultiFolderWriteAccess);
}
@@ -1680,10 +1655,6 @@ void SyncProcess::startSynchronizationProcess(const std::vector<FolderPairSyncCf
try
{
- //prevent shutdown while synchronization is in progress
- DisableStandby dummy;
- (void)dummy;
-
//loop through all directory pairs
for (auto j = begin(folderCmp); j != end(folderCmp); ++j)
{
@@ -1701,13 +1672,13 @@ void SyncProcess::startSynchronizationProcess(const std::vector<FolderPairSyncCf
//------------------------------------------------------------------------------------------
//info about folder pair to be processed (useful for logfile)
- std::wstring left = _("Left") + ": ";
- std::wstring right = _("Right") + ": ";
+ std::wstring left = _("Left") + L": ";
+ std::wstring right = _("Right") + L": ";
makeSameLength(left, right);
- const std::wstring statusTxt = _("Processing folder pair:") + " \n" +
- "\t" + left + "\"" + j->getBaseDirPf<LEFT_SIDE>() + "\"" + " \n" +
- "\t" + right + "\"" + j->getBaseDirPf<RIGHT_SIDE>() + "\"";
+ const std::wstring statusTxt = _("Processing folder pair:") + L" \n" +
+ L"\t" + left + L"\"" + j->getBaseDirPf<LEFT_SIDE>() + L"\"" + L" \n" +
+ L"\t" + right + L"\"" + j->getBaseDirPf<RIGHT_SIDE>() + L"\"";
procCallback.reportInfo(statusTxt);
//------------------------------------------------------------------------------------------
@@ -1729,9 +1700,11 @@ void SyncProcess::startSynchronizationProcess(const std::vector<FolderPairSyncCf
//execute synchronization recursively
//update synchronization database (automatic sync only)
- std::unique_ptr<EnforceUpdateDatabase> guardUpdateDb;
- if (folderPairCfg.inAutomaticMode)
- guardUpdateDb.reset(new EnforceUpdateDatabase(*j));
+ zen::ScopeGuard guardUpdateDb = zen::makeGuard([&]()
+ {
+ if (folderPairCfg.inAutomaticMode)
+ zen::saveToDisk(*j); //throw FileError
+ });
//guarantee removal of invalid entries (where element on both sides is empty)
ZEN_ON_BLOCK_EXIT(BaseDirMapping::removeEmpty(*j););
@@ -1749,11 +1722,13 @@ void SyncProcess::startSynchronizationProcess(const std::vector<FolderPairSyncCf
tryReportingError(procCallback, [&]() { delHandlerFp.second.tryCleanup(); }); //
//(try to gracefully) write database file (will be done in ~EnforceUpdateDatabase anyway...)
- if (guardUpdateDb.get())
+ if (folderPairCfg.inAutomaticMode)
{
procCallback.reportStatus(_("Generating database..."));
procCallback.forceUiRefresh();
- tryReportingError(procCallback, [&]() { guardUpdateDb->tryWriteDB(); });
+
+ tryReportingError(procCallback, [&]() { zen::saveToDisk(*j); }); //throw FileError
+ guardUpdateDb.dismiss();
}
}
@@ -1850,8 +1825,8 @@ void SynchronizeFolderPair::copyFileUpdatingTo(const FileMapping& fileObj, const
}
catch (const FileError& e)
{
- const std::wstring errorMsg = replaceCpy(_("Error copying locked file %x!"), L"%x", std::wstring(L"\"") + source + "\"");
- throw FileError(errorMsg + "\n\n" + e.msg());
+ const std::wstring errorMsg = replaceCpy(_("Error copying locked file %x!"), L"%x", std::wstring(L"\"") + source + L"\"");
+ throw FileError(errorMsg + L"\n\n" + e.toString());
}
//now try again
@@ -1915,7 +1890,7 @@ void verifyFiles(const Zstring& source, const Zstring& target, VerifyCallback& c
wxFile file1(::open(source.c_str(), O_RDONLY)); //utilize UTF-8 filename
#endif
if (!file1.IsOpened())
- throw FileError(_("Error opening file:") + " \"" + source + "\"");
+ throw FileError(_("Error opening file:") + L" \"" + source + L"\"");
#ifdef FFS_WIN
wxFile file2(applyLongPathPrefix(target).c_str(), wxFile::read); //don't use buffered file input for verification!
@@ -1923,27 +1898,27 @@ void verifyFiles(const Zstring& source, const Zstring& target, VerifyCallback& c
wxFile file2(::open(target.c_str(), O_RDONLY)); //utilize UTF-8 filename
#endif
if (!file2.IsOpened()) //NO cleanup necessary for (wxFile) file1
- throw FileError(_("Error opening file:") + " \"" + target + "\"");
+ throw FileError(_("Error opening file:") + L" \"" + target + L"\"");
do
{
const size_t length1 = file1.Read(&memory1[0], memory1.size());
if (file1.Error())
- throw FileError(_("Error reading file:") + " \"" + source + "\"");
+ throw FileError(_("Error reading file:") + L" \"" + source + L"\"");
callback.updateStatus(); //send progress updates
const size_t length2 = file2.Read(&memory2[0], memory2.size());
if (file2.Error())
- throw FileError(_("Error reading file:") + " \"" + target + "\"");
+ throw FileError(_("Error reading file:") + L" \"" + target + L"\"");
callback.updateStatus(); //send progress updates
if (length1 != length2 || ::memcmp(&memory1[0], &memory2[0], length1) != 0)
- throw FileError(_("Data verification error: Source and target file have different content!") + "\n" + "\"" + source + "\" -> \n\"" + target + "\"");
+ throw FileError(_("Data verification error: Source and target file have different content!") + L"\n" + L"\"" + source + L"\" -> \n\"" + target + L"\"");
}
while (!file1.Eof());
if (!file2.Eof())
- throw FileError(_("Data verification error: Source and target file have different content!") + "\n" + "\"" + source + "\" -> \n\"" + target + "\"");
+ throw FileError(_("Data verification error: Source and target file have different content!") + L"\n" + L"\"" + source + L"\" -> \n\"" + target + L"\"");
}
diff --git a/synchronization.h b/synchronization.h
index 025b7ab0..4e11d5a9 100644
--- a/synchronization.h
+++ b/synchronization.h
@@ -10,6 +10,7 @@
#include "file_hierarchy.h"
#include "lib/process_xml.h"
#include "lib/status_handler.h"
+#include <zen/process_status.h>
namespace zen
@@ -81,6 +82,7 @@ public:
bool copyLockedFiles,
bool copyFilePermissions,
bool transactionalFileCopy,
+ bool runWithBackgroundPriority,
ProcessCallback& handler);
//CONTRACT: syncConfig must have SAME SIZE folderCmp and correspond row-wise!
@@ -99,8 +101,9 @@ private:
//warnings
xmlAccess::OptionalDialogs& m_warnings;
-
ProcessCallback& procCallback;
+
+std::unique_ptr<ScheduleForBackgroundProcessing> procBackground;
};
diff --git a/ui/Taskbar_Seven/taskbar.cpp b/ui/Taskbar_Seven/taskbar.cpp
index 368152f4..1c5e32bf 100644
--- a/ui/Taskbar_Seven/taskbar.cpp
+++ b/ui/Taskbar_Seven/taskbar.cpp
@@ -5,17 +5,15 @@
// **************************************************************************
#include "taskbar.h"
-
-#define WIN32_LEAN_AND_MEAN
-#include "windows.h"
-#include <ShObjIdl.h>
-
#include <map>
#include <string>
-#include <comdef.h>
+
+#define WIN32_LEAN_AND_MEAN
#include <zen/com_error.h>
#include <zen/com_ptr.h>
+#include <ShObjIdl.h>
+
using namespace zen;
diff --git a/ui/batch_config.cpp b/ui/batch_config.cpp
index 0ef87903..aa3a2168 100644
--- a/ui/batch_config.cpp
+++ b/ui/batch_config.cpp
@@ -355,12 +355,12 @@ void BatchDialog::updateGui() //re-evaluate gui after config changes
//set filter icon
if (isNullFilter(cfg.mainCfg.globalFilter))
{
- setBitmapLabel(*m_bpButtonFilter, GlobalResources::getImage(wxT("filterOff")));
+ setImage(*m_bpButtonFilter, GlobalResources::getImage(wxT("filterOff")));
m_bpButtonFilter->SetToolTip(_("No filter selected"));
}
else
{
- setBitmapLabel(*m_bpButtonFilter, GlobalResources::getImage(wxT("filterOn")));
+ setImage(*m_bpButtonFilter, GlobalResources::getImage(wxT("filterOn")));
m_bpButtonFilter->SetToolTip(_("Filter is active"));
}
@@ -509,7 +509,7 @@ void BatchDialog::OnLoadBatchJob(wxCommandEvent& event)
{
wxFileDialog filePicker(this,
wxEmptyString,
- beforeLast(proposedBatchFileName, FILE_NAME_SEPARATOR), //set default dir: empty string if "currentConfigFileName" is empty or has no path separator
+ beforeLast(proposedBatchFileName, utf8CvrtTo<wxString>(FILE_NAME_SEPARATOR)), //set default dir: empty string if "currentConfigFileName" is empty or has no path separator
wxEmptyString,
wxString(_("FreeFileSync configuration")) + wxT(" (*.ffs_batch;*.ffs_gui)|*.ffs_batch;*.ffs_gui"),
wxFD_OPEN | wxFD_MULTIPLE); //creating this on freestore leads to memleak!
@@ -547,7 +547,7 @@ bool BatchDialog::saveBatchFile(const wxString& filename)
}
catch (const xmlAccess::FfsXmlError& error)
{
- wxMessageBox(error.msg().c_str(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString().c_str(), _("Error"), wxOK | wxICON_ERROR);
return false;
}
@@ -583,10 +583,10 @@ void BatchDialog::loadBatchFile(const std::vector<wxString>& filenames)
catch (const xmlAccess::FfsXmlError& error)
{
if (error.getSeverity() == xmlAccess::FfsXmlError::WARNING)
- wxMessageBox(error.msg(), _("Warning"), wxOK | wxICON_WARNING);
+ wxMessageBox(error.toString(), _("Warning"), wxOK | wxICON_WARNING);
else
{
- wxMessageBox(error.msg(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR);
return;
}
}
diff --git a/ui/batch_status_handler.cpp b/ui/batch_status_handler.cpp
index a8c7b2c5..93237c70 100644
--- a/ui/batch_status_handler.cpp
+++ b/ui/batch_status_handler.cpp
@@ -14,6 +14,7 @@
#include <wx+/string_conv.h>
#include <wx+/app_main.h>
#include <zen/file_traverser.h>
+#include <zen/time.h>
using namespace zen;
@@ -32,77 +33,58 @@ public:
logfiles_.push_back(fullName);
}
- virtual void onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) {}
-
- virtual ReturnValDir onDir(const Zchar* shortName, const Zstring& fullName)
- {
- return Int2Type<ReturnValDir::TRAVERSING_DIR_IGNORE>(); //DON'T traverse into subdirs
- }
-
- virtual HandleError onError(const std::wstring& errorText) { return TRAV_ERROR_IGNORE; } //errors are not really critical in this context
+ virtual std::shared_ptr<TraverseCallback>
+ onDir (const Zchar* shortName, const Zstring& fullName) { return nullptr; } //DON'T traverse into subdirs
+ virtual void onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) {}
+ virtual HandleError onError (const std::wstring& errorText) { return TRAV_ERROR_IGNORE; } //errors are not really critical in this context
private:
const Zstring prefix_;
std::vector<Zstring>& logfiles_;
};
-
-void removeFileNoThrow(const Zstring& filename)
-{
- try
- {
- zen::removeFile(filename);
- }
- catch (...) {}
-}
}
-class LogFile
+class LogFile //throw FileError
{
public:
- LogFile(const wxString& logfileDirectory, const wxString& jobName) : jobName_(jobName) //throw FileError
+ LogFile(const Zstring& logfileDirectory, const wxString& jobName) :
+ jobName_(jobName), //throw FileError
+ logfileName(findUniqueLogname(logfileDirectory, jobName))
{
- logfileName = findUniqueLogname(logfileDirectory, jobName);
-
- logFile.Open(logfileName, wxT("w"));
+ logFile.Open(toWx(logfileName), wxT("w"));
if (!logFile.IsOpened())
- throw FileError(_("Unable to create logfile!") + "\"" + logfileName.c_str() + "\"");
+ throw FileError(_("Unable to create logfile!") + L"\"" + logfileName + L"\"");
//write header
- wxString headerLine = L"FreeFileSync - " + _("Batch execution") +
- " (" + _("Date") + ": " + wxDateTime::Now().FormatDate() + ")"; //"Date" is used at other places, too
+ wxString headerLine = wxString(L"FreeFileSync - ") + _("Batch execution") +
+ L" (" + _("Date") + L": " + formatTime<wxString>(FORMAT_DATE) + L")"; //"Date" is used at other places, too
logFile.Write(headerLine + wxChar('\n'));
logFile.Write(wxString().Pad(headerLine.Len(), wxChar('-')) + wxChar('\n') + wxChar('\n'));
- /*
- wxString caption = _("Log-messages:");
- logFile.Write(caption + wxChar('\n'));
- logFile.Write(wxString().Pad(caption.Len(), wxChar('-')) + wxChar('\n'));
- */
-
- logItemStart = wxString(wxT("[")) + wxDateTime::Now().FormatTime() + wxT("] ") + _("Start");
+ logItemStart = formatTime<wxString>(L"[%X] ") + _("Start");
totalTime.Start(); //measure total time
}
void writeLog(const ErrorLogging& log, const wxString& finalStatus)
{
- logFile.Write(finalStatus + wxChar('\n') + wxChar('\n')); //highlight result by placing at beginning of file
+ logFile.Write(finalStatus + L"\n\n"); //highlight result by placing at beginning of file
- logFile.Write(logItemStart + wxChar('\n') + wxChar('\n'));
+ logFile.Write(logItemStart + L"\n\n");
//write actual logfile
const std::vector<wxString>& messages = log.getFormattedMessages();
for (std::vector<wxString>::const_iterator i = messages.begin(); i != messages.end(); ++i)
- logFile.Write(*i + wxChar('\n'));
+ logFile.Write(*i + L'\n');
//write ending
- logFile.Write(wxChar('\n'));
+ logFile.Write(L'\n');
const long time = totalTime.Time(); //retrieve total time
- logFile.Write(wxString(wxT("[")) + wxDateTime::Now().FormatTime() + wxT("] "));
- logFile.Write(wxString(_("Stop")) + wxT(" (") + _("Total time:") + wxT(" ") + (wxTimeSpan::Milliseconds(time)).Format() + wxT(")"));
+
+ logFile.Write(wxString(L"[") + formatTime<wxString>(FORMAT_TIME) + L"] " + _("Stop") + L" (" + _("Total time:") + L" " + wxTimeSpan::Milliseconds(time).Format() + L")\n");
}
void limitLogfileCount(size_t maxCount) const
@@ -110,7 +92,7 @@ public:
std::vector<Zstring> logFiles;
FindLogfiles traverseCallback(toZ(jobName_), logFiles);
- traverseFolder(beforeLast(toZ(logfileName), FILE_NAME_SEPARATOR), //throw();
+ traverseFolder(beforeLast(logfileName, FILE_NAME_SEPARATOR), //throw();
false, //don't follow symlinks
traverseCallback);
@@ -119,45 +101,40 @@ public:
//delete oldest logfiles
std::sort(logFiles.begin(), logFiles.end()); //take advantage of logfile naming convention to sort by age
- std::for_each(logFiles.begin(), logFiles.end() - maxCount, ::removeFileNoThrow);
+
+ std::for_each(logFiles.begin(), logFiles.end() - maxCount,
+ [](const Zstring& filename) { try { zen::removeFile(filename); } catch (...) {} });
}
+ //Zstring getLogfileName() const { return logfileName; }
+
private:
- static wxString findUniqueLogname(const wxString& logfileDirectory, const wxString& jobName)
+ static Zstring findUniqueLogname(const Zstring& logfileDirectory, const wxString& jobName)
{
//create logfile directory
Zstring logfileDir = logfileDirectory.empty() ?
- toZ(zen::getConfigDir() + wxT("Logs")) :
- zen::getFormattedDirectoryName(toZ(logfileDirectory));
+ zen::getConfigDir() + Zstr("Logs") :
+ zen::getFormattedDirectoryName(logfileDirectory);
if (!zen::dirExists(logfileDir))
- zen::createDirectory(logfileDir); //create recursively if necessary: may throw (FileError&)
+ zen::createDirectory(logfileDir); //throw FileError; create recursively if necessary
//assemble logfile name
if (!endsWith(logfileDir, FILE_NAME_SEPARATOR))
logfileDir += FILE_NAME_SEPARATOR;
- wxString logfileName = toWx(logfileDir);
-
- //add prefix
- logfileName += jobName + wxT(" ");
-
- //add timestamp
- wxString timeNow = wxDateTime::Now().FormatISOTime();
- timeNow.Replace(wxT(":"), wxT(""));
- logfileName += wxDateTime::Now().FormatISODate() + wxChar(' ') + timeNow;
-
- wxString output = logfileName + wxT(".log");
+ const Zstring logfileName = logfileDir + toZ(jobName) + Zstr(" ") + formatTime<Zstring>(Zstr("%Y-%m-%d %H%M%S"));
//ensure uniqueness
- for (int i = 1; zen::somethingExists(toZ(output)); ++i)
- output = logfileName + wxChar('_') + zen::toString<wxString>(i) + wxT(".log");
+ Zstring output = logfileName + Zstr(".log");
+ for (int i = 1; zen::somethingExists(output); ++i)
+ output = logfileName + Zstr('_') + zen::toString<Zstring>(i) + Zstr(".log");
return output;
}
const wxString jobName_;
- wxString logfileName;
+ const Zstring logfileName;
wxFFile logFile;
wxStopWatch totalTime;
wxString logItemStart;
@@ -184,15 +161,18 @@ BatchStatusHandler::BatchStatusHandler(bool runSilent,
{
try
{
- logFile = std::make_shared<LogFile>(logfileDirectory, jobName); //throw FileError
+ logFile = std::make_shared<LogFile>(toZ(logfileDirectory), jobName); //throw FileError
logFile->limitLogfileCount(logFileCountMax); //throw FileError
}
catch (zen::FileError& error)
{
- wxMessageBox(error.msg(), _("Error"), wxOK | wxICON_ERROR);
+ if (handleError_ == xmlAccess::ON_ERROR_POPUP)
+ wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR);
returnValue = -7;
throw BatchAbortProcess();
}
+
+ //::wxSetEnv(L"logfile", logFile->getLogfileName());
}
}
@@ -391,6 +371,7 @@ ProcessCallback::Response BatchStatusHandler::reportError(const wxString& errorM
case xmlAccess::ON_ERROR_EXIT: //abort
errorLog.logMsg(errorMessage, TYPE_ERROR);
abortThisProcess();
+ break;
case xmlAccess::ON_ERROR_IGNORE:
errorLog.logMsg(errorMessage, TYPE_ERROR);
diff --git a/ui/folder_pair.h b/ui/folder_pair.h
index 5d26d724..557be006 100644
--- a/ui/folder_pair.h
+++ b/ui/folder_pair.h
@@ -45,37 +45,37 @@ public:
{
if (altCompConfig.get())
{
- setBitmapLabel(*basicPanel_.m_bpButtonAltCompCfg, GlobalResources::getImage(wxT("cmpConfigSmall")));
+ setImage(*basicPanel_.m_bpButtonAltCompCfg, GlobalResources::getImage(wxT("cmpConfigSmall")));
basicPanel_.m_bpButtonAltCompCfg->SetToolTip(wxString(_("Select alternate comparison settings")) + wxT(" \n") +
wxT("(") + getVariantName(altCompConfig->compareVar) + wxT(")"));
}
else
{
- setBitmapLabel(*basicPanel_.m_bpButtonAltCompCfg, GlobalResources::getImage(wxT("cmpConfigSmallGrey")));
+ setImage(*basicPanel_.m_bpButtonAltCompCfg, GlobalResources::getImage(wxT("cmpConfigSmallGrey")));
basicPanel_.m_bpButtonAltCompCfg->SetToolTip(_("Select alternate comparison settings"));
}
if (altSyncConfig.get())
{
- setBitmapLabel(*basicPanel_.m_bpButtonAltSyncCfg, GlobalResources::getImage(wxT("syncConfigSmall")));
+ setImage(*basicPanel_.m_bpButtonAltSyncCfg, GlobalResources::getImage(wxT("syncConfigSmall")));
basicPanel_.m_bpButtonAltSyncCfg->SetToolTip(wxString(_("Select alternate synchronization settings")) + wxT(" \n") +
wxT("(") + getVariantName(altSyncConfig->directionCfg.var) + wxT(")"));
}
else
{
- setBitmapLabel(*basicPanel_.m_bpButtonAltSyncCfg, GlobalResources::getImage(wxT("syncConfigSmallGrey")));
+ setImage(*basicPanel_.m_bpButtonAltSyncCfg, GlobalResources::getImage(wxT("syncConfigSmallGrey")));
basicPanel_.m_bpButtonAltSyncCfg->SetToolTip(_("Select alternate synchronization settings"));
}
//test for Null-filter
if (isNullFilter(localFilter))
{
- setBitmapLabel(*basicPanel_.m_bpButtonLocalFilter, GlobalResources::getImage(wxT("filterSmallGrey")));
+ setImage(*basicPanel_.m_bpButtonLocalFilter, GlobalResources::getImage(wxT("filterSmallGrey")));
basicPanel_.m_bpButtonLocalFilter->SetToolTip(_("No filter selected"));
}
else
{
- setBitmapLabel(*basicPanel_.m_bpButtonLocalFilter, GlobalResources::getImage(wxT("filterSmall")));
+ setImage(*basicPanel_.m_bpButtonLocalFilter, GlobalResources::getImage(wxT("filterSmall")));
basicPanel_.m_bpButtonLocalFilter->SetToolTip(_("Filter is active"));
}
}
diff --git a/ui/grid_view.cpp b/ui/grid_view.cpp
index 22c158fd..bd2bf4f4 100644
--- a/ui/grid_view.cpp
+++ b/ui/grid_view.cpp
@@ -7,7 +7,6 @@
#include "grid_view.h"
#include "sorting.h"
#include "../synchronization.h"
-#include <boost/bind.hpp>
#include <zen/stl_tools.h>
using namespace zen;
diff --git a/ui/gui_generated.cpp b/ui/gui_generated.cpp
index 5ecb0948..3704d666 100644
--- a/ui/gui_generated.cpp
+++ b/ui/gui_generated.cpp
@@ -19,847 +19,923 @@
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_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("F6"), wxEmptyString, wxITEM_NORMAL );
- m_menuFile->Append( m_menuItem11 );
-
- wxMenuItem* m_separator1;
- m_separator1 = m_menuFile->AppendSeparator();
-
- m_menuItemSwitchView = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("S&witch view") ) + wxT('\t') + wxT("F8"), wxEmptyString, wxITEM_NORMAL );
- m_menuFile->Append( m_menuItemSwitchView );
-
- wxMenuItem* m_separator2;
- m_separator2 = m_menuFile->AppendSeparator();
-
- m_menuItemNew = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("&New") ) + wxT('\t') + wxT("Ctrl-N"), wxEmptyString, wxITEM_NORMAL );
- m_menuFile->Append( m_menuItemNew );
-
- m_menuItemSave = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("S&ave configuration...") ) + wxT('\t') + wxT("Ctrl-S"), wxEmptyString, wxITEM_NORMAL );
- m_menuFile->Append( m_menuItemSave );
-
- m_menuItemLoad = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("&Load configuration...") ) + wxT('\t') + wxT("Ctrl-O"), wxEmptyString, wxITEM_NORMAL );
- m_menuFile->Append( m_menuItemLoad );
-
- wxMenuItem* m_separator3;
- m_separator3 = m_menuFile->AppendSeparator();
-
- wxMenuItem* m_menuItem4;
- m_menuItem4 = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("&Quit") ) + wxT('\t') + wxT("Ctrl-Q"), wxEmptyString, wxITEM_NORMAL );
- m_menuFile->Append( m_menuItem4 );
-
- m_menubar1->Append( m_menuFile, _("&Program") );
-
- m_menuAdvanced = new wxMenu();
- m_menuLanguages = new wxMenu();
- m_menuAdvanced->Append( -1, _("&Language"), m_menuLanguages );
-
- wxMenuItem* m_separator4;
- m_separator4 = m_menuAdvanced->AppendSeparator();
-
- m_menuItemGlobSett = new wxMenuItem( m_menuAdvanced, wxID_ANY, wxString( _("&Global settings...") ) , wxEmptyString, wxITEM_NORMAL );
- m_menuAdvanced->Append( m_menuItemGlobSett );
-
- m_menuItem7 = new wxMenuItem( m_menuAdvanced, wxID_ANY, wxString( _("&Create batch job...") ) , wxEmptyString, wxITEM_NORMAL );
- m_menuAdvanced->Append( m_menuItem7 );
-
- wxMenuItem* m_menuItem5;
- m_menuItem5 = new wxMenuItem( m_menuAdvanced, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL );
- m_menuAdvanced->Append( m_menuItem5 );
-
- m_menubar1->Append( m_menuAdvanced, _("&Advanced") );
-
- m_menuHelp = new wxMenu();
- wxMenuItem* m_menuItemReadme;
- m_menuItemReadme = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Content") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL );
- m_menuHelp->Append( m_menuItemReadme );
-
- m_menuItemCheckVer = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for new version") ) , wxEmptyString, wxITEM_NORMAL );
- m_menuHelp->Append( m_menuItemCheckVer );
-
- wxMenuItem* m_separator5;
- m_separator5 = m_menuHelp->AppendSeparator();
-
- m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About...") ) + wxT('\t') + wxT("Shift-F1"), wxEmptyString, wxITEM_NORMAL );
- m_menuHelp->Append( m_menuItemAbout );
-
- m_menubar1->Append( m_menuHelp, _("&Help") );
-
- this->SetMenuBar( m_menubar1 );
-
- bSizerPanelHolder = new wxBoxSizer( wxVERTICAL );
-
- m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER|wxTAB_TRAVERSAL );
- bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer155;
- bSizer155 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer155->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxFlexGridSizer* fgSizer121;
- fgSizer121 = new wxFlexGridSizer( 2, 2, 0, 0 );
- fgSizer121->SetFlexibleDirection( wxBOTH );
- fgSizer121->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_staticTextCmpVariant = new wxStaticText( m_panelTopButtons, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextCmpVariant->Wrap( -1 );
- m_staticTextCmpVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
- m_staticTextCmpVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
-
- fgSizer121->Add( m_staticTextCmpVariant, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP, 1 );
-
-
- fgSizer121->Add( 0, 0, 1, 0, 5 );
-
- wxBoxSizer* bSizer30;
- bSizer30 = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonCompare = new zen::BitmapButton( m_panelTopButtons, wxID_OK, _("Compare"), wxDefaultPosition, wxSize( 180,42 ), 0 );
- m_buttonCompare->SetDefault();
- m_buttonCompare->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) );
- m_buttonCompare->SetToolTip( _("Compare both sides") );
-
- bSizer30->Add( m_buttonCompare, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonAbort = new wxButton( m_panelTopButtons, wxID_CANCEL, _("&Abort"), wxDefaultPosition, wxSize( 180,42 ), 0 );
- m_buttonAbort->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) );
- m_buttonAbort->Enable( false );
- m_buttonAbort->Hide();
-
- bSizer30->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- fgSizer121->Add( bSizer30, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,42 ), wxBU_AUTODRAW );
- m_bpButtonCmpConfig->SetToolTip( _("Comparison settings") );
-
- fgSizer121->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 3 );
-
- bSizer155->Add( fgSizer121, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
-
- bSizerTopButtons->Add( bSizer155, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* bSizer1551;
- bSizer1551 = new wxBoxSizer( wxHORIZONTAL );
-
- wxFlexGridSizer* fgSizer12;
- fgSizer12 = new wxFlexGridSizer( 2, 2, 0, 0 );
- fgSizer12->SetFlexibleDirection( wxBOTH );
- fgSizer12->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
-
- fgSizer12->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextSyncVariant = new wxStaticText( m_panelTopButtons, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextSyncVariant->Wrap( -1 );
- m_staticTextSyncVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
- m_staticTextSyncVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
-
- fgSizer12->Add( m_staticTextSyncVariant, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP, 1 );
-
- m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,42 ), wxBU_AUTODRAW );
- m_bpButtonSyncConfig->SetToolTip( _("Synchronization settings") );
-
- fgSizer12->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 );
-
- m_buttonStartSync = new zen::BitmapButton( m_panelTopButtons, wxID_ANY, _("Synchronize..."), wxDefaultPosition, wxSize( 180,42 ), 0 );
- m_buttonStartSync->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) );
- m_buttonStartSync->SetToolTip( _("Start synchronization") );
-
- fgSizer12->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer1551->Add( fgSizer12, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
-
-
- bSizer1551->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizerTopButtons->Add( bSizer1551, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelTopButtons->SetSizer( bSizerTopButtons );
- m_panelTopButtons->Layout();
- bSizerTopButtons->Fit( m_panelTopButtons );
- bSizerPanelHolder->Add( m_panelTopButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 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 ) );
-
- sbSizerDirLeft = new wxStaticBoxSizer( new wxStaticBox( m_panelTopLeft, wxID_ANY, _("Drag && drop") ), wxHORIZONTAL );
-
- m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
- m_bpButtonAddPair->SetToolTip( _("Add folder pair") );
-
- sbSizerDirLeft->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 3 );
-
- m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
- m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
-
- sbSizerDirLeft->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_directoryLeft = new FolderHistoryBox( m_panelTopLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- sbSizerDirLeft->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_dirPickerLeft = new zen::DirPickerCtrl( m_panelTopLeft, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dirPickerLeft->SetToolTip( _("Select a folder") );
-
- sbSizerDirLeft->Add( m_dirPickerLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelTopLeft->SetSizer( sbSizerDirLeft );
- m_panelTopLeft->Layout();
- sbSizerDirLeft->Fit( m_panelTopLeft );
- bSizer91->Add( m_panelTopLeft, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelTopMiddle = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer93;
- bSizer93 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer93->Add( 0, 3, 0, 0, 5 );
-
- m_bpButtonSwapSides = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW );
- m_bpButtonSwapSides->SetToolTip( _("Swap sides") );
-
- bSizer93->Add( m_bpButtonSwapSides, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer160;
- bSizer160 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer160->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonAltCompCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
- bSizer160->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
- bSizer160->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 );
-
- m_bpButtonAltSyncCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
- bSizer160->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer160->Add( 0, 0, 1, wxEXPAND, 5 );
-
- bSizer93->Add( bSizer160, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_panelTopMiddle->SetSizer( bSizer93 );
- m_panelTopMiddle->Layout();
- bSizer93->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 ) );
-
- sbSizerDirRight = new wxStaticBoxSizer( new wxStaticBox( m_panelTopRight, wxID_ANY, _("Drag && drop") ), wxHORIZONTAL );
-
- m_directoryRight = new FolderHistoryBox( m_panelTopRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- sbSizerDirRight->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_dirPickerRight = new zen::DirPickerCtrl( m_panelTopRight, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dirPickerRight->SetToolTip( _("Select a folder") );
-
- sbSizerDirRight->Add( m_dirPickerRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelTopRight->SetSizer( sbSizerDirRight );
- m_panelTopRight->Layout();
- sbSizerDirRight->Fit( m_panelTopRight );
- bSizer91->Add( m_panelTopRight, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 );
-
- m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL );
- m_scrolledWindowFolderPairs->SetScrollRate( 5, 5 );
- m_scrolledWindowFolderPairs->SetMinSize( wxSize( -1,0 ) );
-
- 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_panelGrids = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelGrids->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_APPWORKSPACE ) );
-
- bSizerGridHolder = new wxBoxSizer( wxHORIZONTAL );
-
- m_panelLeft = new wxPanel( m_panelGrids, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer7;
- bSizer7 = new wxBoxSizer( wxVERTICAL );
-
- m_gridLeft = new CustomGridLeft( m_panelLeft, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
-
- // Grid
- m_gridLeft->CreateGrid( 15, 4 );
- m_gridLeft->EnableEditing( false );
- m_gridLeft->EnableGridLines( true );
- m_gridLeft->EnableDragGridSize( true );
- m_gridLeft->SetMargins( 0, 0 );
-
- // Columns
- m_gridLeft->EnableDragColMove( false );
- m_gridLeft->EnableDragColSize( true );
- m_gridLeft->SetColLabelSize( 20 );
- m_gridLeft->SetColLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
-
- // Rows
- m_gridLeft->EnableDragRowSize( false );
- m_gridLeft->SetRowLabelSize( 38 );
- m_gridLeft->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
-
- // Label Appearance
-
- // Cell Defaults
- m_gridLeft->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
- m_gridLeft->SetMinSize( wxSize( 1,1 ) );
-
- bSizer7->Add( m_gridLeft, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_panelLeft->SetSizer( bSizer7 );
- m_panelLeft->Layout();
- bSizer7->Fit( m_panelLeft );
- bSizerGridHolder->Add( m_panelLeft, 1, wxEXPAND, 5 );
-
- m_panelMiddle = new wxPanel( m_panelGrids, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer18;
- bSizer18 = new wxBoxSizer( wxVERTICAL );
-
- m_gridMiddle = new CustomGridMiddle( m_panelMiddle, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
-
- // Grid
- m_gridMiddle->CreateGrid( 15, 1 );
- m_gridMiddle->EnableEditing( false );
- m_gridMiddle->EnableGridLines( true );
- m_gridMiddle->EnableDragGridSize( false );
- m_gridMiddle->SetMargins( 0, 0 );
-
- // Columns
- m_gridMiddle->SetColSize( 0, 60 );
- m_gridMiddle->EnableDragColMove( false );
- m_gridMiddle->EnableDragColSize( false );
- m_gridMiddle->SetColLabelSize( 20 );
- m_gridMiddle->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
-
- // Rows
- m_gridMiddle->EnableDragRowSize( false );
- m_gridMiddle->SetRowLabelSize( 0 );
- m_gridMiddle->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
-
- // Label Appearance
-
- // Cell Defaults
- m_gridMiddle->SetDefaultCellFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxT("Arial") ) );
- m_gridMiddle->SetDefaultCellAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
- bSizer18->Add( m_gridMiddle, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- m_panelMiddle->SetSizer( bSizer18 );
- m_panelMiddle->Layout();
- bSizer18->Fit( m_panelMiddle );
- bSizerGridHolder->Add( m_panelMiddle, 0, wxEXPAND, 5 );
-
- m_panelRight = new wxPanel( m_panelGrids, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer10;
- bSizer10 = new wxBoxSizer( wxVERTICAL );
-
- m_gridRight = new CustomGridRight( m_panelRight, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
-
- // Grid
- m_gridRight->CreateGrid( 15, 4 );
- m_gridRight->EnableEditing( false );
- m_gridRight->EnableGridLines( true );
- m_gridRight->EnableDragGridSize( true );
- m_gridRight->SetMargins( 0, 0 );
-
- // Columns
- m_gridRight->EnableDragColMove( false );
- m_gridRight->EnableDragColSize( true );
- m_gridRight->SetColLabelSize( 20 );
- m_gridRight->SetColLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
-
- // Rows
- m_gridRight->EnableDragRowSize( false );
- m_gridRight->SetRowLabelSize( 38 );
- m_gridRight->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
-
- // Label Appearance
-
- // Cell Defaults
- m_gridRight->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
- m_gridRight->SetMinSize( wxSize( 1,1 ) );
-
- bSizer10->Add( m_gridRight, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_panelRight->SetSizer( bSizer10 );
- m_panelRight->Layout();
- bSizer10->Fit( m_panelRight );
- bSizerGridHolder->Add( m_panelRight, 1, wxEXPAND, 5 );
-
- m_panelGrids->SetSizer( bSizerGridHolder );
- m_panelGrids->Layout();
- bSizerGridHolder->Fit( m_panelGrids );
- bSizerPanelHolder->Add( m_panelGrids, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- bSizerConfig = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer151;
- bSizer151 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- m_bpButtonSave->SetToolTip( _("Save current configuration to file") );
-
- bSizer151->Add( m_bpButtonSave, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonLoad = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- m_bpButtonLoad->SetToolTip( _("Load configuration from file") );
-
- bSizer151->Add( m_bpButtonLoad, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizerConfig->Add( bSizer151, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_listBoxHistory = new wxListBox( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB|wxLB_SORT );
- m_listBoxHistory->SetToolTip( _("Last used configurations (press DEL to remove from list)") );
- m_listBoxHistory->SetMinSize( wxSize( -1,40 ) );
-
- bSizerConfig->Add( m_listBoxHistory, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelConfig->SetSizer( bSizerConfig );
- m_panelConfig->Layout();
- bSizerConfig->Fit( m_panelConfig );
- bSizerPanelHolder->Add( m_panelConfig, 0, 0, 5 );
-
- m_panelFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer171;
- bSizer171 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonFilter = new wxBitmapButton( m_panelFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE );
- bSizer171->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_checkBoxHideFilt = new wxCheckBox( m_panelFilter, wxID_ANY, _("Hide excluded items"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxHideFilt->SetToolTip( _("Hide filtered or temporarily excluded files") );
-
- bSizer171->Add( m_checkBoxHideFilt, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelFilter->SetSizer( bSizer171 );
- m_panelFilter->Layout();
- bSizer171->Fit( m_panelFilter );
- bSizerPanelHolder->Add( m_panelFilter, 0, 0, 5 );
-
- m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- bSizerStatistics = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizerStatistics->Add( 0, 0, 1, wxEXPAND, 5 );
-
- wxFlexGridSizer* fgSizer5;
- fgSizer5 = new wxFlexGridSizer( 2, 2, 0, 5 );
- fgSizer5->SetFlexibleDirection( wxHORIZONTAL );
- fgSizer5->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_bitmapCreate = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapCreate->SetToolTip( _("Number of files and directories that will be created") );
-
- fgSizer5->Add( m_bitmapCreate, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_textCtrlCreate = new wxTextCtrl( m_panelStatistics, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
- m_textCtrlCreate->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlCreate->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlCreate->SetToolTip( _("Number of files and directories that will be created") );
-
- fgSizer5->Add( m_textCtrlCreate, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapUpdate = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapUpdate->SetToolTip( _("Number of files that will be overwritten") );
-
- fgSizer5->Add( m_bitmapUpdate, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_textCtrlUpdate = new wxTextCtrl( m_panelStatistics, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
- m_textCtrlUpdate->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlUpdate->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlUpdate->SetToolTip( _("Number of files that will be overwritten") );
-
- fgSizer5->Add( m_textCtrlUpdate, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizerStatistics->Add( fgSizer5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
-
- wxFlexGridSizer* fgSizer6;
- fgSizer6 = new wxFlexGridSizer( 2, 2, 0, 5 );
- fgSizer6->SetFlexibleDirection( wxHORIZONTAL );
- fgSizer6->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_bitmapDelete = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapDelete->SetToolTip( _("Number of files and directories that will be deleted") );
-
- fgSizer6->Add( m_bitmapDelete, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrlDelete = new wxTextCtrl( m_panelStatistics, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
- m_textCtrlDelete->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlDelete->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlDelete->SetToolTip( _("Number of files and directories that will be deleted") );
-
- fgSizer6->Add( m_textCtrlDelete, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapData->SetToolTip( _("Total amount of data that will be transferred") );
-
- fgSizer6->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_textCtrlData = new wxTextCtrl( m_panelStatistics, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
- m_textCtrlData->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlData->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlData->SetToolTip( _("Total amount of data that will be transferred") );
-
- fgSizer6->Add( m_textCtrlData, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizerStatistics->Add( fgSizer6, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
-
-
- bSizerStatistics->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_panelStatistics->SetSizer( bSizerStatistics );
- m_panelStatistics->Layout();
- bSizerStatistics->Fit( m_panelStatistics );
- bSizerPanelHolder->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_bpButtonSyncCreateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonSyncCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonSyncDirOverwLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonSyncDirOverwLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonSyncDeleteLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonSyncDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonLeftOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonLeftNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonEqual = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonDifferent = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonSyncDirNone = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonSyncDirNone, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonRightNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonRightOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonSyncDeleteRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonSyncDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonSyncDirOverwRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonSyncDirOverwRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonSyncCreateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonSyncCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonConflict = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_panelViewFilter->SetSizer( bSizerViewFilter );
- m_panelViewFilter->Layout();
- bSizerViewFilter->Fit( m_panelViewFilter );
- bSizerPanelHolder->Add( m_panelViewFilter, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelStatusBar = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer451;
- bSizer451 = new wxBoxSizer( wxHORIZONTAL );
-
- bSizer451->SetMinSize( wxSize( -1,22 ) );
- wxBoxSizer* bSizer53;
- bSizer53 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextStatusLeft = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatusLeft->Wrap( -1 );
- m_staticTextStatusLeft->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer53->Add( m_staticTextStatusLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer451->Add( bSizer53, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer451->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxEXPAND, 2 );
-
-
- bSizer451->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextStatusMiddle = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatusMiddle->Wrap( -1 );
- m_staticTextStatusMiddle->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer451->Add( m_staticTextStatusMiddle, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer451->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer451->Add( m_staticline10, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP, 2 );
-
- wxBoxSizer* bSizer52;
- bSizer52 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextStatusRight = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatusRight->Wrap( -1 );
- m_staticTextStatusRight->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer52->Add( m_staticTextStatusRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* bSizer50;
- bSizer50 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer50->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmap15 = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 10,10 ), 0 );
- bSizer50->Add( m_bitmap15, 0, wxALIGN_BOTTOM, 2 );
-
- bSizer52->Add( bSizer50, 1, wxALIGN_BOTTOM|wxEXPAND, 5 );
-
- bSizer451->Add( bSizer52, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelStatusBar->SetSizer( bSizer451 );
- m_panelStatusBar->Layout();
- bSizer451->Fit( m_panelStatusBar );
- bSizerPanelHolder->Add( m_panelStatusBar, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- this->SetSizer( bSizerPanelHolder );
- this->Layout();
- bSizerPanelHolder->Fit( this );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) );
- 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_menuItemSwitchView->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSwitchView ) );
- this->Connect( m_menuItemNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnNewConfig ) );
- this->Connect( m_menuItemSave->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveConfig ) );
- this->Connect( m_menuItemLoad->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadConfig ) );
- 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_menuItem7->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuBatchJob ) );
- this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) );
- this->Connect( m_menuItemReadme->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) );
- this->Connect( m_menuItemCheckVer->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) );
- this->Connect( m_menuItemAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) );
- m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this );
- m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this );
- m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this );
- m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this );
- m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this );
- m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this );
- m_dirPickerLeft->Connect( wxEVT_COMMAND_DIRPICKER_CHANGED, wxFileDirPickerEventHandler( MainDialogGenerated::OnDirSelected ), NULL, this );
- m_bpButtonSwapSides->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this );
- m_dirPickerRight->Connect( wxEVT_COMMAND_DIRPICKER_CHANGED, wxFileDirPickerEventHandler( MainDialogGenerated::OnDirSelected ), NULL, this );
- m_gridLeft->Connect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( MainDialogGenerated::OnLeftGridDoubleClick ), NULL, this );
- m_gridLeft->Connect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRim ), NULL, this );
- m_gridLeft->Connect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortLeftGrid ), NULL, this );
- m_gridLeft->Connect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRimLabelLeft ), NULL, this );
- m_gridMiddle->Connect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextMiddle ), NULL, this );
- m_gridMiddle->Connect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortMiddleGrid ), NULL, this );
- m_gridMiddle->Connect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextMiddleLabel ), NULL, this );
- m_gridRight->Connect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( MainDialogGenerated::OnRightGridDoubleClick ), NULL, this );
- m_gridRight->Connect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRim ), NULL, this );
- m_gridRight->Connect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortRightGrid ), NULL, this );
- m_gridRight->Connect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRimLabelRight ), NULL, this );
- m_bpButtonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveConfig ), NULL, this );
- m_bpButtonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadConfig ), 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_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this );
- m_checkBoxHideFilt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnHideFilteredButton ), NULL, this );
- m_bpButtonSyncCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateLeft ), NULL, this );
- m_bpButtonSyncDirOverwLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirLeft ), NULL, this );
- m_bpButtonSyncDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteLeft ), NULL, this );
- m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftOnlyFiles ), NULL, this );
- m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftNewerFiles ), NULL, this );
- m_bpButtonEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnEqualFiles ), NULL, this );
- m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnDifferentFiles ), NULL, this );
- m_bpButtonSyncDirNone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirNone ), NULL, this );
- m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightNewerFiles ), NULL, this );
- m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightOnlyFiles ), NULL, this );
- m_bpButtonSyncDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteRight ), NULL, this );
- m_bpButtonSyncDirOverwRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirRight ), NULL, this );
- m_bpButtonSyncCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateRight ), NULL, this );
- m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConflictFiles ), NULL, this );
+ this->SetSizeHints( wxSize( 640,400 ), wxDefaultSize );
+
+ m_menubar1 = new wxMenuBar( 0 );
+ m_menuFile = new wxMenu();
+ m_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("F6"), wxEmptyString, wxITEM_NORMAL );
+ m_menuFile->Append( m_menuItem11 );
+
+ wxMenuItem* m_separator1;
+ m_separator1 = m_menuFile->AppendSeparator();
+
+ m_menuItemSwitchView = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("S&witch view") ) + wxT('\t') + wxT("F8"), wxEmptyString, wxITEM_NORMAL );
+ m_menuFile->Append( m_menuItemSwitchView );
+
+ wxMenuItem* m_separator2;
+ m_separator2 = m_menuFile->AppendSeparator();
+
+ m_menuItemNew = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("&New") ) + wxT('\t') + wxT("Ctrl-N"), wxEmptyString, wxITEM_NORMAL );
+ m_menuFile->Append( m_menuItemNew );
+
+ m_menuItemSave = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("S&ave configuration...") ) + wxT('\t') + wxT("Ctrl-S"), wxEmptyString, wxITEM_NORMAL );
+ m_menuFile->Append( m_menuItemSave );
+
+ m_menuItemLoad = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("&Load configuration...") ) + wxT('\t') + wxT("Ctrl-O"), wxEmptyString, wxITEM_NORMAL );
+ m_menuFile->Append( m_menuItemLoad );
+
+ wxMenuItem* m_separator3;
+ m_separator3 = m_menuFile->AppendSeparator();
+
+ wxMenuItem* m_menuItem4;
+ m_menuItem4 = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("&Quit") ) + wxT('\t') + wxT("Ctrl-Q"), wxEmptyString, wxITEM_NORMAL );
+ m_menuFile->Append( m_menuItem4 );
+
+ m_menubar1->Append( m_menuFile, _("&Program") );
+
+ m_menuAdvanced = new wxMenu();
+ m_menuLanguages = new wxMenu();
+ m_menuAdvanced->Append( -1, _("&Language"), m_menuLanguages );
+
+ wxMenuItem* m_separator4;
+ m_separator4 = m_menuAdvanced->AppendSeparator();
+
+ m_menuItemGlobSett = new wxMenuItem( m_menuAdvanced, wxID_ANY, wxString( _("&Global settings...") ) , wxEmptyString, wxITEM_NORMAL );
+ m_menuAdvanced->Append( m_menuItemGlobSett );
+
+ m_menuItem7 = new wxMenuItem( m_menuAdvanced, wxID_ANY, wxString( _("&Create batch job...") ) , wxEmptyString, wxITEM_NORMAL );
+ m_menuAdvanced->Append( m_menuItem7 );
+
+ wxMenuItem* m_menuItem5;
+ m_menuItem5 = new wxMenuItem( m_menuAdvanced, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL );
+ m_menuAdvanced->Append( m_menuItem5 );
+
+ m_menubar1->Append( m_menuAdvanced, _("&Advanced") );
+
+ m_menuHelp = new wxMenu();
+ wxMenuItem* m_menuItemReadme;
+ m_menuItemReadme = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Content") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL );
+ m_menuHelp->Append( m_menuItemReadme );
+
+ m_menuItemCheckVer = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for new version") ) , wxEmptyString, wxITEM_NORMAL );
+ m_menuHelp->Append( m_menuItemCheckVer );
+
+ wxMenuItem* m_separator5;
+ m_separator5 = m_menuHelp->AppendSeparator();
+
+ m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About...") ) + wxT('\t') + wxT("Shift-F1"), wxEmptyString, wxITEM_NORMAL );
+ m_menuHelp->Append( m_menuItemAbout );
+
+ m_menubar1->Append( m_menuHelp, _("&Help") );
+
+ this->SetMenuBar( m_menubar1 );
+
+ bSizerPanelHolder = new wxBoxSizer( wxVERTICAL );
+
+ m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER|wxTAB_TRAVERSAL );
+ bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer155;
+ bSizer155 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer155->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxFlexGridSizer* fgSizer121;
+ fgSizer121 = new wxFlexGridSizer( 2, 2, 0, 0 );
+ fgSizer121->SetFlexibleDirection( wxBOTH );
+ fgSizer121->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_staticTextCmpVariant = new wxStaticText( m_panelTopButtons, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextCmpVariant->Wrap( -1 );
+ m_staticTextCmpVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+ m_staticTextCmpVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+
+ fgSizer121->Add( m_staticTextCmpVariant, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP, 1 );
+
+
+ fgSizer121->Add( 0, 0, 1, 0, 5 );
+
+ wxBoxSizer* bSizer30;
+ bSizer30 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonCompare = new zen::BitmapButton( m_panelTopButtons, wxID_OK, _("Compare"), wxDefaultPosition, wxSize( 180,42 ), 0 );
+ m_buttonCompare->SetDefault();
+ m_buttonCompare->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) );
+ m_buttonCompare->SetToolTip( _("Compare both sides") );
+
+ bSizer30->Add( m_buttonCompare, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonAbort = new wxButton( m_panelTopButtons, wxID_CANCEL, _("&Abort"), wxDefaultPosition, wxSize( 180,42 ), 0 );
+ m_buttonAbort->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) );
+ m_buttonAbort->Enable( false );
+ m_buttonAbort->Hide();
+
+ bSizer30->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ fgSizer121->Add( bSizer30, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,42 ), wxBU_AUTODRAW );
+ m_bpButtonCmpConfig->SetToolTip( _("Comparison settings") );
+
+ fgSizer121->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 3 );
+
+ bSizer155->Add( fgSizer121, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+ bSizerTopButtons->Add( bSizer155, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* bSizer1551;
+ bSizer1551 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxFlexGridSizer* fgSizer12;
+ fgSizer12 = new wxFlexGridSizer( 2, 2, 0, 0 );
+ fgSizer12->SetFlexibleDirection( wxBOTH );
+ fgSizer12->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+
+ fgSizer12->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextSyncVariant = new wxStaticText( m_panelTopButtons, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextSyncVariant->Wrap( -1 );
+ m_staticTextSyncVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+ m_staticTextSyncVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+
+ fgSizer12->Add( m_staticTextSyncVariant, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP, 1 );
+
+ m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,42 ), wxBU_AUTODRAW );
+ m_bpButtonSyncConfig->SetToolTip( _("Synchronization settings") );
+
+ fgSizer12->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 );
+
+ m_buttonStartSync = new zen::BitmapButton( m_panelTopButtons, wxID_ANY, _("Synchronize..."), wxDefaultPosition, wxSize( 180,42 ), 0 );
+ m_buttonStartSync->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) );
+ m_buttonStartSync->SetToolTip( _("Start synchronization") );
+
+ fgSizer12->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer1551->Add( fgSizer12, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+
+ bSizer1551->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerTopButtons->Add( bSizer1551, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelTopButtons->SetSizer( bSizerTopButtons );
+ m_panelTopButtons->Layout();
+ bSizerTopButtons->Fit( m_panelTopButtons );
+ bSizerPanelHolder->Add( m_panelTopButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 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 ) );
+
+ sbSizerDirLeft = new wxStaticBoxSizer( new wxStaticBox( m_panelTopLeft, wxID_ANY, _("Drag && drop") ), wxHORIZONTAL );
+
+ m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
+ m_bpButtonAddPair->SetToolTip( _("Add folder pair") );
+
+ sbSizerDirLeft->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 3 );
+
+ m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
+ m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
+
+ sbSizerDirLeft->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_directoryLeft = new FolderHistoryBox( m_panelTopLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ sbSizerDirLeft->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_dirPickerLeft = new zen::DirPickerCtrl( m_panelTopLeft, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_dirPickerLeft->SetToolTip( _("Select a folder") );
+
+ sbSizerDirLeft->Add( m_dirPickerLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelTopLeft->SetSizer( sbSizerDirLeft );
+ m_panelTopLeft->Layout();
+ sbSizerDirLeft->Fit( m_panelTopLeft );
+ bSizer91->Add( m_panelTopLeft, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelTopMiddle = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer93;
+ bSizer93 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer93->Add( 0, 3, 0, 0, 5 );
+
+ m_bpButtonSwapSides = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW );
+ m_bpButtonSwapSides->SetToolTip( _("Swap sides") );
+
+ bSizer93->Add( m_bpButtonSwapSides, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer160;
+ bSizer160 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer160->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonAltCompCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
+ bSizer160->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
+ bSizer160->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 );
+
+ m_bpButtonAltSyncCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
+ bSizer160->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer160->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ bSizer93->Add( bSizer160, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_panelTopMiddle->SetSizer( bSizer93 );
+ m_panelTopMiddle->Layout();
+ bSizer93->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 ) );
+
+ sbSizerDirRight = new wxStaticBoxSizer( new wxStaticBox( m_panelTopRight, wxID_ANY, _("Drag && drop") ), wxHORIZONTAL );
+
+ m_directoryRight = new FolderHistoryBox( m_panelTopRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ sbSizerDirRight->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_dirPickerRight = new zen::DirPickerCtrl( m_panelTopRight, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_dirPickerRight->SetToolTip( _("Select a folder") );
+
+ sbSizerDirRight->Add( m_dirPickerRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelTopRight->SetSizer( sbSizerDirRight );
+ m_panelTopRight->Layout();
+ sbSizerDirRight->Fit( m_panelTopRight );
+ bSizer91->Add( m_panelTopRight, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 );
+
+ m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL );
+ m_scrolledWindowFolderPairs->SetScrollRate( 5, 5 );
+ m_scrolledWindowFolderPairs->SetMinSize( wxSize( -1,0 ) );
+
+ 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_panelGrids = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelGrids->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_APPWORKSPACE ) );
+
+ bSizerGridHolder = new wxBoxSizer( wxHORIZONTAL );
+
+ m_panelLeft = new wxPanel( m_panelGrids, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer7;
+ bSizer7 = new wxBoxSizer( wxVERTICAL );
+
+ m_gridLeft = new CustomGridLeft( m_panelLeft, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+
+ // Grid
+ m_gridLeft->CreateGrid( 15, 4 );
+ m_gridLeft->EnableEditing( false );
+ m_gridLeft->EnableGridLines( true );
+ m_gridLeft->EnableDragGridSize( true );
+ m_gridLeft->SetMargins( 0, 0 );
+
+ // Columns
+ m_gridLeft->EnableDragColMove( false );
+ m_gridLeft->EnableDragColSize( true );
+ m_gridLeft->SetColLabelSize( 20 );
+ m_gridLeft->SetColLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
+
+ // Rows
+ m_gridLeft->EnableDragRowSize( false );
+ m_gridLeft->SetRowLabelSize( 38 );
+ m_gridLeft->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+
+ // Label Appearance
+
+ // Cell Defaults
+ m_gridLeft->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
+ m_gridLeft->SetMinSize( wxSize( 1,1 ) );
+
+ bSizer7->Add( m_gridLeft, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_panelLeft->SetSizer( bSizer7 );
+ m_panelLeft->Layout();
+ bSizer7->Fit( m_panelLeft );
+ bSizerGridHolder->Add( m_panelLeft, 1, wxEXPAND, 5 );
+
+ m_panelMiddle = new wxPanel( m_panelGrids, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer18;
+ bSizer18 = new wxBoxSizer( wxVERTICAL );
+
+ m_gridMiddle = new CustomGridMiddle( m_panelMiddle, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+
+ // Grid
+ m_gridMiddle->CreateGrid( 15, 1 );
+ m_gridMiddle->EnableEditing( false );
+ m_gridMiddle->EnableGridLines( true );
+ m_gridMiddle->EnableDragGridSize( false );
+ m_gridMiddle->SetMargins( 0, 0 );
+
+ // Columns
+ m_gridMiddle->SetColSize( 0, 60 );
+ m_gridMiddle->EnableDragColMove( false );
+ m_gridMiddle->EnableDragColSize( false );
+ m_gridMiddle->SetColLabelSize( 20 );
+ m_gridMiddle->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+
+ // Rows
+ m_gridMiddle->EnableDragRowSize( false );
+ m_gridMiddle->SetRowLabelSize( 0 );
+ m_gridMiddle->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+
+ // Label Appearance
+
+ // Cell Defaults
+ m_gridMiddle->SetDefaultCellFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxT("Arial") ) );
+ m_gridMiddle->SetDefaultCellAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+ bSizer18->Add( m_gridMiddle, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ m_panelMiddle->SetSizer( bSizer18 );
+ m_panelMiddle->Layout();
+ bSizer18->Fit( m_panelMiddle );
+ bSizerGridHolder->Add( m_panelMiddle, 0, wxEXPAND, 5 );
+
+ m_panelRight = new wxPanel( m_panelGrids, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer10;
+ bSizer10 = new wxBoxSizer( wxVERTICAL );
+
+ m_gridRight = new CustomGridRight( m_panelRight, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+
+ // Grid
+ m_gridRight->CreateGrid( 15, 4 );
+ m_gridRight->EnableEditing( false );
+ m_gridRight->EnableGridLines( true );
+ m_gridRight->EnableDragGridSize( true );
+ m_gridRight->SetMargins( 0, 0 );
+
+ // Columns
+ m_gridRight->EnableDragColMove( false );
+ m_gridRight->EnableDragColSize( true );
+ m_gridRight->SetColLabelSize( 20 );
+ m_gridRight->SetColLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
+
+ // Rows
+ m_gridRight->EnableDragRowSize( false );
+ m_gridRight->SetRowLabelSize( 38 );
+ m_gridRight->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+
+ // Label Appearance
+
+ // Cell Defaults
+ m_gridRight->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
+ m_gridRight->SetMinSize( wxSize( 1,1 ) );
+
+ bSizer10->Add( m_gridRight, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_panelRight->SetSizer( bSizer10 );
+ m_panelRight->Layout();
+ bSizer10->Fit( m_panelRight );
+ bSizerGridHolder->Add( m_panelRight, 1, wxEXPAND, 5 );
+
+ m_panelGrids->SetSizer( bSizerGridHolder );
+ m_panelGrids->Layout();
+ bSizerGridHolder->Fit( m_panelGrids );
+ bSizerPanelHolder->Add( m_panelGrids, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ bSizerConfig = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer151;
+ bSizer151 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ m_bpButtonSave->SetToolTip( _("Save current configuration to file") );
+
+ bSizer151->Add( m_bpButtonSave, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonLoad = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ m_bpButtonLoad->SetToolTip( _("Load configuration from file") );
+
+ bSizer151->Add( m_bpButtonLoad, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerConfig->Add( bSizer151, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_listBoxHistory = new wxListBox( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB|wxLB_SORT );
+ m_listBoxHistory->SetToolTip( _("Last used configurations (press DEL to remove from list)") );
+ m_listBoxHistory->SetMinSize( wxSize( -1,40 ) );
+
+ bSizerConfig->Add( m_listBoxHistory, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelConfig->SetSizer( bSizerConfig );
+ m_panelConfig->Layout();
+ bSizerConfig->Fit( m_panelConfig );
+ bSizerPanelHolder->Add( m_panelConfig, 0, 0, 5 );
+
+ m_panelFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer171;
+ bSizer171 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonFilter = new wxBitmapButton( m_panelFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE );
+ bSizer171->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_checkBoxHideFilt = new wxCheckBox( m_panelFilter, wxID_ANY, _("Hide excluded items"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxHideFilt->SetToolTip( _("Hide filtered or temporarily excluded files") );
+
+ bSizer171->Add( m_checkBoxHideFilt, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelFilter->SetSizer( bSizer171 );
+ m_panelFilter->Layout();
+ bSizer171->Fit( m_panelFilter );
+ bSizerPanelHolder->Add( m_panelFilter, 0, 0, 5 );
+
+ m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ bSizerStatistics = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizerStatistics->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ wxFlexGridSizer* fgSizer5;
+ fgSizer5 = new wxFlexGridSizer( 2, 2, 0, 5 );
+ fgSizer5->SetFlexibleDirection( wxHORIZONTAL );
+ fgSizer5->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_bitmapCreate = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapCreate->SetToolTip( _("Number of files and directories that will be created") );
+
+ fgSizer5->Add( m_bitmapCreate, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_textCtrlCreate = new wxTextCtrl( m_panelStatistics, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
+ m_textCtrlCreate->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlCreate->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlCreate->SetToolTip( _("Number of files and directories that will be created") );
+
+ fgSizer5->Add( m_textCtrlCreate, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapUpdate = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapUpdate->SetToolTip( _("Number of files that will be overwritten") );
+
+ fgSizer5->Add( m_bitmapUpdate, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_textCtrlUpdate = new wxTextCtrl( m_panelStatistics, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
+ m_textCtrlUpdate->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlUpdate->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlUpdate->SetToolTip( _("Number of files that will be overwritten") );
+
+ fgSizer5->Add( m_textCtrlUpdate, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerStatistics->Add( fgSizer5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
+
+ wxFlexGridSizer* fgSizer6;
+ fgSizer6 = new wxFlexGridSizer( 2, 2, 0, 5 );
+ fgSizer6->SetFlexibleDirection( wxHORIZONTAL );
+ fgSizer6->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_bitmapDelete = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapDelete->SetToolTip( _("Number of files and directories that will be deleted") );
+
+ fgSizer6->Add( m_bitmapDelete, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlDelete = new wxTextCtrl( m_panelStatistics, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
+ m_textCtrlDelete->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlDelete->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlDelete->SetToolTip( _("Number of files and directories that will be deleted") );
+
+ fgSizer6->Add( m_textCtrlDelete, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapData->SetToolTip( _("Total amount of data that will be transferred") );
+
+ fgSizer6->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_textCtrlData = new wxTextCtrl( m_panelStatistics, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
+ m_textCtrlData->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlData->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlData->SetToolTip( _("Total amount of data that will be transferred") );
+
+ fgSizer6->Add( m_textCtrlData, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerStatistics->Add( fgSizer6, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizerStatistics->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_panelStatistics->SetSizer( bSizerStatistics );
+ m_panelStatistics->Layout();
+ bSizerStatistics->Fit( m_panelStatistics );
+ bSizerPanelHolder->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bpButtonSyncCreateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonSyncCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonSyncDirOverwLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonSyncDirOverwLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonSyncDeleteLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonSyncDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonLeftOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonLeftNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonEqual = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonDifferent = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonSyncDirNone = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonSyncDirNone, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonRightNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonRightOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonSyncDeleteRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonSyncDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonSyncDirOverwRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonSyncDirOverwRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonSyncCreateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonSyncCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonConflict = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_panelViewFilter->SetSizer( bSizerViewFilter );
+ m_panelViewFilter->Layout();
+ bSizerViewFilter->Fit( m_panelViewFilter );
+ bSizerPanelHolder->Add( m_panelViewFilter, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelStatusBar = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer451;
+ bSizer451 = new wxBoxSizer( wxHORIZONTAL );
+
+ bSizer451->SetMinSize( wxSize( -1,22 ) );
+ wxBoxSizer* bSizer53;
+ bSizer53 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerStatusLeftDirectories = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapSmallDirectoryLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerStatusLeftDirectories->Add( m_bitmapSmallDirectoryLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusLeftDirectories->Add( 2, 0, 0, 0, 5 );
+
+ m_staticTextStatusLeftDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusLeftDirs->Wrap( -1 );
+ m_staticTextStatusLeftDirs->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ 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 );
+ m_staticTextStatusLeftFiles->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerStatusLeftFiles->Add( m_staticTextStatusLeftFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusLeftFiles->Add( 10, 0, 0, 0, 5 );
+
+ m_staticTextStatusLeftBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusLeftBytes->Wrap( -1 );
+ m_staticTextStatusLeftBytes->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerStatusLeftFiles->Add( m_staticTextStatusLeftBytes, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer53->Add( bSizerStatusLeftFiles, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer451->Add( bSizer53, 1, wxALIGN_BOTTOM|wxEXPAND, 5 );
+
+ m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer451->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxEXPAND, 2 );
+
+
+ bSizer451->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextStatusMiddle = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusMiddle->Wrap( -1 );
+ m_staticTextStatusMiddle->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer451->Add( m_staticTextStatusMiddle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer451->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer451->Add( m_staticline10, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP, 2 );
+
+ wxBoxSizer* bSizer52;
+ bSizer52 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerStatusRightDirectories = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapSmallDirectoryRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerStatusRightDirectories->Add( m_bitmapSmallDirectoryRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusRightDirectories->Add( 2, 0, 0, 0, 5 );
+
+ m_staticTextStatusRightDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusRightDirs->Wrap( -1 );
+ m_staticTextStatusRightDirs->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ 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 );
+ m_staticTextStatusRightFiles->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerStatusRightFiles->Add( m_staticTextStatusRightFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusRightFiles->Add( 10, 0, 0, 0, 5 );
+
+ m_staticTextStatusRightBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusRightBytes->Wrap( -1 );
+ m_staticTextStatusRightBytes->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerStatusRightFiles->Add( m_staticTextStatusRightBytes, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer52->Add( bSizerStatusRightFiles, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* bSizer50;
+ bSizer50 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer50->Add( 0, 0, 1, wxALIGN_BOTTOM, 5 );
+
+ m_bitmap15 = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 10,10 ), 0 );
+ bSizer50->Add( m_bitmap15, 0, wxALIGN_BOTTOM, 5 );
+
+ bSizer52->Add( bSizer50, 1, wxALIGN_BOTTOM, 5 );
+
+ bSizer451->Add( bSizer52, 1, wxALIGN_BOTTOM|wxEXPAND, 5 );
+
+ m_panelStatusBar->SetSizer( bSizer451 );
+ m_panelStatusBar->Layout();
+ bSizer451->Fit( m_panelStatusBar );
+ bSizerPanelHolder->Add( m_panelStatusBar, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ this->SetSizer( bSizerPanelHolder );
+ this->Layout();
+ bSizerPanelHolder->Fit( this );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) );
+ 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_menuItemSwitchView->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSwitchView ) );
+ this->Connect( m_menuItemNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnNewConfig ) );
+ this->Connect( m_menuItemSave->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveConfig ) );
+ this->Connect( m_menuItemLoad->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadConfig ) );
+ 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_menuItem7->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuBatchJob ) );
+ this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) );
+ this->Connect( m_menuItemReadme->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) );
+ this->Connect( m_menuItemCheckVer->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) );
+ this->Connect( m_menuItemAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) );
+ m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this );
+ m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this );
+ m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this );
+ m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this );
+ m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this );
+ m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this );
+ m_dirPickerLeft->Connect( wxEVT_COMMAND_DIRPICKER_CHANGED, wxFileDirPickerEventHandler( MainDialogGenerated::OnDirSelected ), NULL, this );
+ m_bpButtonSwapSides->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this );
+ m_dirPickerRight->Connect( wxEVT_COMMAND_DIRPICKER_CHANGED, wxFileDirPickerEventHandler( MainDialogGenerated::OnDirSelected ), NULL, this );
+ m_gridLeft->Connect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( MainDialogGenerated::OnLeftGridDoubleClick ), NULL, this );
+ m_gridLeft->Connect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRim ), NULL, this );
+ m_gridLeft->Connect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortLeftGrid ), NULL, this );
+ m_gridLeft->Connect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRimLabelLeft ), NULL, this );
+ m_gridMiddle->Connect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextMiddle ), NULL, this );
+ m_gridMiddle->Connect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortMiddleGrid ), NULL, this );
+ m_gridMiddle->Connect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextMiddleLabel ), NULL, this );
+ m_gridRight->Connect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( MainDialogGenerated::OnRightGridDoubleClick ), NULL, this );
+ m_gridRight->Connect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRim ), NULL, this );
+ m_gridRight->Connect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortRightGrid ), NULL, this );
+ m_gridRight->Connect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRimLabelRight ), NULL, this );
+ m_bpButtonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveConfig ), NULL, this );
+ m_bpButtonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadConfig ), 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_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this );
+ m_checkBoxHideFilt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnHideFilteredButton ), NULL, this );
+ m_bpButtonSyncCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateLeft ), NULL, this );
+ m_bpButtonSyncDirOverwLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirLeft ), NULL, this );
+ m_bpButtonSyncDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteLeft ), NULL, this );
+ m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftOnlyFiles ), NULL, this );
+ m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftNewerFiles ), NULL, this );
+ m_bpButtonEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnEqualFiles ), NULL, this );
+ m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnDifferentFiles ), NULL, this );
+ m_bpButtonSyncDirNone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirNone ), NULL, this );
+ m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightNewerFiles ), NULL, this );
+ m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightOnlyFiles ), NULL, this );
+ m_bpButtonSyncDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteRight ), NULL, this );
+ m_bpButtonSyncDirOverwRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirRight ), NULL, this );
+ m_bpButtonSyncCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateRight ), NULL, this );
+ m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConflictFiles ), NULL, this );
}
MainDialogGenerated::~MainDialogGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSwitchView ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnNewConfig ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveConfig ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadConfig ) );
- this->Disconnect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuBatchJob ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) );
- this->Disconnect( wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) );
- m_buttonCompare->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this );
- m_bpButtonCmpConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this );
- m_bpButtonSyncConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this );
- m_buttonStartSync->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this );
- m_bpButtonAddPair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this );
- m_bpButtonRemovePair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this );
- m_dirPickerLeft->Disconnect( wxEVT_COMMAND_DIRPICKER_CHANGED, wxFileDirPickerEventHandler( MainDialogGenerated::OnDirSelected ), NULL, this );
- m_bpButtonSwapSides->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this );
- m_dirPickerRight->Disconnect( wxEVT_COMMAND_DIRPICKER_CHANGED, wxFileDirPickerEventHandler( MainDialogGenerated::OnDirSelected ), NULL, this );
- m_gridLeft->Disconnect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( MainDialogGenerated::OnLeftGridDoubleClick ), NULL, this );
- m_gridLeft->Disconnect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRim ), NULL, this );
- m_gridLeft->Disconnect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortLeftGrid ), NULL, this );
- m_gridLeft->Disconnect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRimLabelLeft ), NULL, this );
- m_gridMiddle->Disconnect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextMiddle ), NULL, this );
- m_gridMiddle->Disconnect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortMiddleGrid ), NULL, this );
- m_gridMiddle->Disconnect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextMiddleLabel ), NULL, this );
- m_gridRight->Disconnect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( MainDialogGenerated::OnRightGridDoubleClick ), NULL, this );
- m_gridRight->Disconnect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRim ), NULL, this );
- m_gridRight->Disconnect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortRightGrid ), NULL, this );
- m_gridRight->Disconnect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRimLabelRight ), NULL, this );
- m_bpButtonSave->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveConfig ), NULL, this );
- m_bpButtonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadConfig ), 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_bpButtonFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this );
- m_checkBoxHideFilt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnHideFilteredButton ), NULL, this );
- m_bpButtonSyncCreateLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateLeft ), NULL, this );
- m_bpButtonSyncDirOverwLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirLeft ), NULL, this );
- m_bpButtonSyncDeleteLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteLeft ), NULL, this );
- m_bpButtonLeftOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftOnlyFiles ), NULL, this );
- m_bpButtonLeftNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftNewerFiles ), NULL, this );
- m_bpButtonEqual->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnEqualFiles ), NULL, this );
- m_bpButtonDifferent->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnDifferentFiles ), NULL, this );
- m_bpButtonSyncDirNone->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirNone ), NULL, this );
- m_bpButtonRightNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightNewerFiles ), NULL, this );
- m_bpButtonRightOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightOnlyFiles ), NULL, this );
- m_bpButtonSyncDeleteRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteRight ), NULL, this );
- m_bpButtonSyncDirOverwRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirRight ), NULL, this );
- m_bpButtonSyncCreateRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateRight ), NULL, this );
- m_bpButtonConflict->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConflictFiles ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSwitchView ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnNewConfig ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveConfig ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadConfig ) );
+ this->Disconnect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuBatchJob ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) );
+ this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) );
+ this->Disconnect( wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) );
+ m_buttonCompare->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this );
+ m_bpButtonCmpConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this );
+ m_bpButtonSyncConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this );
+ m_buttonStartSync->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this );
+ m_bpButtonAddPair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this );
+ m_bpButtonRemovePair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this );
+ m_dirPickerLeft->Disconnect( wxEVT_COMMAND_DIRPICKER_CHANGED, wxFileDirPickerEventHandler( MainDialogGenerated::OnDirSelected ), NULL, this );
+ m_bpButtonSwapSides->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this );
+ m_dirPickerRight->Disconnect( wxEVT_COMMAND_DIRPICKER_CHANGED, wxFileDirPickerEventHandler( MainDialogGenerated::OnDirSelected ), NULL, this );
+ m_gridLeft->Disconnect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( MainDialogGenerated::OnLeftGridDoubleClick ), NULL, this );
+ m_gridLeft->Disconnect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRim ), NULL, this );
+ m_gridLeft->Disconnect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortLeftGrid ), NULL, this );
+ m_gridLeft->Disconnect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRimLabelLeft ), NULL, this );
+ m_gridMiddle->Disconnect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextMiddle ), NULL, this );
+ m_gridMiddle->Disconnect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortMiddleGrid ), NULL, this );
+ m_gridMiddle->Disconnect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextMiddleLabel ), NULL, this );
+ m_gridRight->Disconnect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( MainDialogGenerated::OnRightGridDoubleClick ), NULL, this );
+ m_gridRight->Disconnect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRim ), NULL, this );
+ m_gridRight->Disconnect( wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler( MainDialogGenerated::OnSortRightGrid ), NULL, this );
+ m_gridRight->Disconnect( wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler( MainDialogGenerated::OnContextRimLabelRight ), NULL, this );
+ m_bpButtonSave->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveConfig ), NULL, this );
+ m_bpButtonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadConfig ), 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_bpButtonFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this );
+ m_checkBoxHideFilt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnHideFilteredButton ), NULL, this );
+ m_bpButtonSyncCreateLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateLeft ), NULL, this );
+ m_bpButtonSyncDirOverwLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirLeft ), NULL, this );
+ m_bpButtonSyncDeleteLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteLeft ), NULL, this );
+ m_bpButtonLeftOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftOnlyFiles ), NULL, this );
+ m_bpButtonLeftNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftNewerFiles ), NULL, this );
+ m_bpButtonEqual->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnEqualFiles ), NULL, this );
+ m_bpButtonDifferent->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnDifferentFiles ), NULL, this );
+ m_bpButtonSyncDirNone->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirNone ), NULL, this );
+ m_bpButtonRightNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightNewerFiles ), NULL, this );
+ m_bpButtonRightOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightOnlyFiles ), NULL, this );
+ m_bpButtonSyncDeleteRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteRight ), NULL, this );
+ m_bpButtonSyncDirOverwRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirRight ), NULL, this );
+ m_bpButtonSyncCreateRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateRight ), NULL, this );
+ m_bpButtonConflict->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConflictFiles ), NULL, this );
+
}
FolderPairGenerated::FolderPairGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
- wxBoxSizer* bSizer74;
- bSizer74 = new wxBoxSizer( wxHORIZONTAL );
-
- m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer134;
- bSizer134 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
- m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
-
- bSizer134->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 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_dirPickerLeft = new zen::DirPickerCtrl( m_panelLeft, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dirPickerLeft->SetToolTip( _("Select a folder") );
-
- bSizer134->Add( m_dirPickerLeft, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_panelLeft->SetSizer( bSizer134 );
- m_panelLeft->Layout();
- bSizer134->Fit( m_panelLeft );
- bSizer74->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL, 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( 20,20 ), wxBU_AUTODRAW );
- bSizer95->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
- bSizer95->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 );
-
- m_bpButtonAltSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), 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 );
- 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|wxLEFT, 5 );
-
- m_dirPickerRight = new zen::DirPickerCtrl( m_panelRight, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dirPickerRight->SetToolTip( _("Select a folder") );
-
- bSizer135->Add( m_dirPickerRight, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_panelRight->SetSizer( bSizer135 );
- m_panelRight->Layout();
- bSizer135->Fit( m_panelRight );
- bSizer74->Add( m_panelRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- this->SetSizer( bSizer74 );
- this->Layout();
- bSizer74->Fit( this );
+ wxBoxSizer* bSizer74;
+ bSizer74 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer134;
+ bSizer134 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
+ m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
+
+ bSizer134->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 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_dirPickerLeft = new zen::DirPickerCtrl( m_panelLeft, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_dirPickerLeft->SetToolTip( _("Select a folder") );
+
+ bSizer134->Add( m_dirPickerLeft, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_panelLeft->SetSizer( bSizer134 );
+ m_panelLeft->Layout();
+ bSizer134->Fit( m_panelLeft );
+ bSizer74->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL, 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( 20,20 ), wxBU_AUTODRAW );
+ bSizer95->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
+ bSizer95->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 );
+
+ m_bpButtonAltSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), 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 );
+ 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|wxLEFT, 5 );
+
+ m_dirPickerRight = new zen::DirPickerCtrl( m_panelRight, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_dirPickerRight->SetToolTip( _("Select a folder") );
+
+ bSizer135->Add( m_dirPickerRight, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_panelRight->SetSizer( bSizer135 );
+ m_panelRight->Layout();
+ bSizer135->Fit( m_panelRight );
+ bSizer74->Add( m_panelRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ this->SetSizer( bSizer74 );
+ this->Layout();
+ bSizer74->Fit( this );
}
FolderPairGenerated::~FolderPairGenerated()
@@ -868,520 +944,520 @@ FolderPairGenerated::~FolderPairGenerated()
BatchDlgGenerated::BatchDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxSize( 560,320 ), wxDefaultSize );
-
- wxBoxSizer* bSizer54;
- bSizer54 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer87;
- bSizer87 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmap27 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), 0 );
- bSizer87->Add( m_bitmap27, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_panel8 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER|wxTAB_TRAVERSAL );
- m_panel8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
-
- wxBoxSizer* bSizer72;
- bSizer72 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText56 = new wxStaticText( m_panel8, wxID_ANY, _("Batch job"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText56->Wrap( -1 );
- m_staticText56->SetFont( wxFont( 16, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer72->Add( m_staticText56, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_panel8->SetSizer( bSizer72 );
- m_panel8->Layout();
- bSizer72->Fit( m_panel8 );
- bSizer87->Add( m_panel8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
-
- bSizer87->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* bSizer70;
- bSizer70 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText44 = new wxStaticText( this, wxID_ANY, _("Create a batch file for automated synchronization. To start in batch mode simply double-click the file or execute via command line: FreeFileSync.exe <ffs_batch file>. This can also be scheduled in your operating system's task planner."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText44->Wrap( 460 );
- bSizer70->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- m_bpButtonHelp->SetToolTip( _("Help") );
-
- bSizer70->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- bSizer87->Add( bSizer70, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizer54->Add( bSizer87, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
-
- m_listbook1 = new wxListbook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLB_DEFAULT );
- m_panelOverview = new wxPanel( m_listbook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer67;
- bSizer67 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer120;
- bSizer120 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer175;
- bSizer175 = new wxBoxSizer( wxHORIZONTAL );
-
- wxStaticBoxSizer* sbSizer241;
- sbSizer241 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Compare") ), wxHORIZONTAL );
-
- m_bpButtonCmpConfig = new wxBitmapButton( m_panelOverview, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,42 ), wxBU_AUTODRAW );
- m_bpButtonCmpConfig->SetToolTip( _("Comparison settings") );
-
- sbSizer241->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL, 3 );
-
-
- sbSizer241->Add( 10, 0, 0, 0, 5 );
-
- m_staticTextCmpVariant = new wxStaticText( m_panelOverview, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextCmpVariant->Wrap( -1 );
- m_staticTextCmpVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
- m_staticTextCmpVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
-
- sbSizer241->Add( m_staticTextCmpVariant, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer175->Add( sbSizer241, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer175->Add( 0, 0, 1, wxEXPAND, 5 );
-
- wxStaticBoxSizer* sbSizer26;
- sbSizer26 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Filter files") ), wxVERTICAL );
-
- m_bpButtonFilter = new wxBitmapButton( m_panelOverview, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE );
- sbSizer26->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 15 );
-
- bSizer175->Add( sbSizer26, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer175->Add( 0, 0, 1, wxEXPAND, 5 );
-
- wxStaticBoxSizer* sbSizer252;
- sbSizer252 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Synchronize...") ), wxHORIZONTAL );
-
- m_staticTextSyncVariant = new wxStaticText( m_panelOverview, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextSyncVariant->Wrap( -1 );
- m_staticTextSyncVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
- m_staticTextSyncVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
-
- sbSizer252->Add( m_staticTextSyncVariant, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- sbSizer252->Add( 10, 0, 0, 0, 5 );
-
- m_bpButtonSyncConfig = new wxBitmapButton( m_panelOverview, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,42 ), wxBU_AUTODRAW );
- m_bpButtonSyncConfig->SetToolTip( _("Synchronization settings") );
-
- sbSizer252->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL, 3 );
-
- bSizer175->Add( sbSizer252, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer175->Add( 15, 0, 0, 0, 5 );
-
- wxStaticBoxSizer* sbSizer25;
- sbSizer25 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Error handling") ), wxHORIZONTAL );
-
- wxArrayString m_choiceHandleErrorChoices;
- m_choiceHandleError = new wxChoice( m_panelOverview, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleErrorChoices, 0 );
- m_choiceHandleError->SetSelection( 0 );
- sbSizer25->Add( m_choiceHandleError, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer175->Add( sbSizer25, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- bSizer120->Add( bSizer175, 0, wxEXPAND, 5 );
-
-
- bSizer120->Add( 0, 5, 0, 0, 5 );
-
- m_scrolledWindow6 = new wxScrolledWindow( m_panelOverview, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
- m_scrolledWindow6->SetScrollRate( 5, 5 );
- wxBoxSizer* bSizer141;
- bSizer141 = new wxBoxSizer( wxVERTICAL );
-
- sbSizerMainPair = new wxBoxSizer( wxHORIZONTAL );
-
- m_panelMainPair = new wxPanel( m_scrolledWindow6, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDOUBLE_BORDER );
- wxBoxSizer* bSizer147;
- bSizer147 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer1361;
- bSizer1361 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonAddPair = new wxBitmapButton( m_panelMainPair, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
- m_bpButtonAddPair->SetToolTip( _("Add folder pair") );
-
- bSizer1361->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 3 );
-
- m_bpButtonRemovePair = new wxBitmapButton( m_panelMainPair, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
- m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
-
- bSizer1361->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizer147->Add( bSizer1361, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* bSizer143;
- bSizer143 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer145;
- bSizer145 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText532 = new wxStaticText( m_panelMainPair, wxID_ANY, _("Left"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText532->Wrap( -1 );
- m_staticText532->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer145->Add( m_staticText532, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer143->Add( bSizer145, 1, 0, 5 );
-
- wxBoxSizer* bSizer146;
- bSizer146 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText5411 = new wxStaticText( m_panelMainPair, wxID_ANY, _("Right"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText5411->Wrap( -1 );
- m_staticText5411->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer146->Add( m_staticText5411, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer143->Add( bSizer146, 1, 0, 5 );
-
- bSizer147->Add( bSizer143, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- m_panelMainPair->SetSizer( bSizer147 );
- m_panelMainPair->Layout();
- bSizer147->Fit( m_panelMainPair );
- sbSizerMainPair->Add( m_panelMainPair, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer158;
- bSizer158 = new wxBoxSizer( wxVERTICAL );
-
- m_panelLeft = new wxPanel( m_scrolledWindow6, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer1141;
- bSizer1141 = new wxBoxSizer( wxHORIZONTAL );
-
- m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer1141->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_dirPickerLeft = new zen::DirPickerCtrl( m_panelLeft, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dirPickerLeft->SetToolTip( _("Select a folder") );
-
- bSizer1141->Add( m_dirPickerLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelLeft->SetSizer( bSizer1141 );
- m_panelLeft->Layout();
- bSizer1141->Fit( m_panelLeft );
- bSizer158->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_panelRight = new wxPanel( m_scrolledWindow6, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer115;
- bSizer115 = new wxBoxSizer( wxHORIZONTAL );
-
- m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer115->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_dirPickerRight = new zen::DirPickerCtrl( m_panelRight, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dirPickerRight->SetToolTip( _("Select a folder") );
-
- bSizer115->Add( m_dirPickerRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelRight->SetSizer( bSizer115 );
- m_panelRight->Layout();
- bSizer115->Fit( m_panelRight );
- bSizer158->Add( m_panelRight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- sbSizerMainPair->Add( bSizer158, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer177;
- bSizer177 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonAltCompCfg = new wxBitmapButton( m_scrolledWindow6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
- bSizer177->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonLocalFilter = new wxBitmapButton( m_scrolledWindow6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
- bSizer177->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 3 );
-
- m_bpButtonAltSyncCfg = new wxBitmapButton( m_scrolledWindow6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
- bSizer177->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- sbSizerMainPair->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- bSizer141->Add( sbSizerMainPair, 0, wxEXPAND, 5 );
-
- bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL );
-
- bSizer141->Add( bSizerAddFolderPairs, 1, wxEXPAND, 5 );
-
- m_scrolledWindow6->SetSizer( bSizer141 );
- m_scrolledWindow6->Layout();
- bSizer141->Fit( m_scrolledWindow6 );
- bSizer120->Add( m_scrolledWindow6, 1, wxEXPAND, 5 );
-
-
- bSizer120->Add( 0, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizer67->Add( bSizer120, 1, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 10 );
-
- m_panelOverview->SetSizer( bSizer67 );
- m_panelOverview->Layout();
- bSizer67->Fit( m_panelOverview );
- m_listbook1->AddPage( m_panelOverview, _("Overview"), true );
- m_panelBatchSettings = new wxPanel( m_listbook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer117;
- bSizer117 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer172;
- bSizer172 = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBoxSizer* sbSizer24;
- sbSizer24 = new wxStaticBoxSizer( new wxStaticBox( m_panelBatchSettings, wxID_ANY, _("Status feedback") ), wxVERTICAL );
-
- m_checkBoxSilent = new wxCheckBox( m_panelBatchSettings, wxID_ANY, _("Run minimized"), wxDefaultPosition, wxDefaultSize, 0 );
- sbSizer24->Add( m_checkBoxSilent, 0, wxALL|wxEXPAND, 5 );
-
- bSizer172->Add( sbSizer24, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer172->Add( 0, 5, 0, 0, 5 );
-
- sbSizerLogfileDir = new wxStaticBoxSizer( new wxStaticBox( m_panelBatchSettings, wxID_ANY, _("Logging") ), wxVERTICAL );
-
- wxBoxSizer* bSizer152;
- bSizer152 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText96 = new wxStaticText( m_panelBatchSettings, wxID_ANY, _("Maximum number of logfiles:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText96->Wrap( -1 );
- bSizer152->Add( m_staticText96, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
-
- bSizer152->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_spinCtrlLogCountMax = new wxSpinCtrl( m_panelBatchSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
- bSizer152->Add( m_spinCtrlLogCountMax, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- sbSizerLogfileDir->Add( bSizer152, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_panelLogfile = new wxPanel( m_panelBatchSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer1721;
- bSizer1721 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText94 = new wxStaticText( m_panelLogfile, wxID_ANY, _("Select logfile directory:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText94->Wrap( -1 );
- bSizer1721->Add( m_staticText94, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- wxBoxSizer* bSizer170;
- bSizer170 = new wxBoxSizer( wxHORIZONTAL );
-
- m_comboBoxLogfileDir = new FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer170->Add( m_comboBoxLogfileDir, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_dirPickerLogfileDir = new zen::DirPickerCtrl( m_panelLogfile, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dirPickerLogfileDir->SetToolTip( _("Select a folder") );
-
- bSizer170->Add( m_dirPickerLogfileDir, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer1721->Add( bSizer170, 0, wxEXPAND, 5 );
-
- m_panelLogfile->SetSizer( bSizer1721 );
- m_panelLogfile->Layout();
- bSizer1721->Fit( m_panelLogfile );
- sbSizerLogfileDir->Add( m_panelLogfile, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- bSizer172->Add( sbSizerLogfileDir, 0, wxEXPAND, 5 );
-
- bSizer117->Add( bSizer172, 1, wxEXPAND|wxALL, 10 );
-
- m_panelBatchSettings->SetSizer( bSizer117 );
- m_panelBatchSettings->Layout();
- bSizer117->Fit( m_panelBatchSettings );
- m_listbook1->AddPage( m_panelBatchSettings, _("Batch settings"), false );
- #ifndef __WXGTK__ // Small icon style not supported in GTK
- wxListView* m_listbook1ListView = m_listbook1->GetListView();
- long m_listbook1Flags = m_listbook1ListView->GetWindowStyleFlag();
- m_listbook1Flags = ( m_listbook1Flags & ~wxLC_ICON ) | wxLC_SMALL_ICON;
- m_listbook1ListView->SetWindowStyleFlag( m_listbook1Flags );
- #endif
-
- bSizer54->Add( m_listbook1, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- wxBoxSizer* bSizer68;
- bSizer68 = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonSave = new wxButton( this, wxID_SAVE, _("&Save"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonSave->SetDefault();
- m_buttonSave->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer68->Add( m_buttonSave, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_buttonLoad = new wxButton( this, wxID_OPEN, _("&Load"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonLoad->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer68->Add( m_buttonLoad, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_button6 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button6->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer68->Add( m_button6, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer54->Add( bSizer68, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
-
- this->SetSizer( bSizer54 );
- this->Layout();
- bSizer54->Fit( this );
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) );
- m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnHelp ), NULL, this );
- m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCmpSettings ), NULL, this );
- m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnConfigureFilter ), NULL, this );
- m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSyncSettings ), NULL, this );
- m_choiceHandleError->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeErrorHandling ), NULL, this );
- m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnAddFolderPair ), NULL, this );
- m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnRemoveTopFolderPair ), NULL, this );
- m_spinCtrlLogCountMax->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnChangeMaxLogCountTxt ), NULL, this );
- m_buttonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this );
- m_buttonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnLoadBatchJob ), NULL, this );
- m_button6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxSize( 560,320 ), wxDefaultSize );
+
+ wxBoxSizer* bSizer54;
+ bSizer54 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer87;
+ bSizer87 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmap27 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), 0 );
+ bSizer87->Add( m_bitmap27, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_panel8 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER|wxTAB_TRAVERSAL );
+ m_panel8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
+
+ wxBoxSizer* bSizer72;
+ bSizer72 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText56 = new wxStaticText( m_panel8, wxID_ANY, _("Batch job"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText56->Wrap( -1 );
+ m_staticText56->SetFont( wxFont( 16, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer72->Add( m_staticText56, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_panel8->SetSizer( bSizer72 );
+ m_panel8->Layout();
+ bSizer72->Fit( m_panel8 );
+ bSizer87->Add( m_panel8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ bSizer87->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* bSizer70;
+ bSizer70 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText44 = new wxStaticText( this, wxID_ANY, _("Create a batch file for automated synchronization. To start in batch mode simply double-click the file or execute via command line: FreeFileSync.exe <ffs_batch file>. This can also be scheduled in your operating system's task planner."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText44->Wrap( 460 );
+ bSizer70->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ m_bpButtonHelp->SetToolTip( _("Help") );
+
+ bSizer70->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ bSizer87->Add( bSizer70, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizer54->Add( bSizer87, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
+
+ m_listbook1 = new wxListbook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLB_DEFAULT );
+ m_panelOverview = new wxPanel( m_listbook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer67;
+ bSizer67 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer120;
+ bSizer120 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer175;
+ bSizer175 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxStaticBoxSizer* sbSizer241;
+ sbSizer241 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Compare") ), wxHORIZONTAL );
+
+ m_bpButtonCmpConfig = new wxBitmapButton( m_panelOverview, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,42 ), wxBU_AUTODRAW );
+ m_bpButtonCmpConfig->SetToolTip( _("Comparison settings") );
+
+ sbSizer241->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL, 3 );
+
+
+ sbSizer241->Add( 10, 0, 0, 0, 5 );
+
+ m_staticTextCmpVariant = new wxStaticText( m_panelOverview, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextCmpVariant->Wrap( -1 );
+ m_staticTextCmpVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+ m_staticTextCmpVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+
+ sbSizer241->Add( m_staticTextCmpVariant, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer175->Add( sbSizer241, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer175->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ wxStaticBoxSizer* sbSizer26;
+ sbSizer26 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Filter files") ), wxVERTICAL );
+
+ m_bpButtonFilter = new wxBitmapButton( m_panelOverview, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE );
+ sbSizer26->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 15 );
+
+ bSizer175->Add( sbSizer26, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer175->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ wxStaticBoxSizer* sbSizer252;
+ sbSizer252 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Synchronize...") ), wxHORIZONTAL );
+
+ m_staticTextSyncVariant = new wxStaticText( m_panelOverview, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextSyncVariant->Wrap( -1 );
+ m_staticTextSyncVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+ m_staticTextSyncVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+
+ sbSizer252->Add( m_staticTextSyncVariant, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ sbSizer252->Add( 10, 0, 0, 0, 5 );
+
+ m_bpButtonSyncConfig = new wxBitmapButton( m_panelOverview, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,42 ), wxBU_AUTODRAW );
+ m_bpButtonSyncConfig->SetToolTip( _("Synchronization settings") );
+
+ sbSizer252->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL, 3 );
+
+ bSizer175->Add( sbSizer252, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer175->Add( 15, 0, 0, 0, 5 );
+
+ wxStaticBoxSizer* sbSizer25;
+ sbSizer25 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Error handling") ), wxHORIZONTAL );
+
+ wxArrayString m_choiceHandleErrorChoices;
+ m_choiceHandleError = new wxChoice( m_panelOverview, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleErrorChoices, 0 );
+ m_choiceHandleError->SetSelection( 0 );
+ sbSizer25->Add( m_choiceHandleError, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer175->Add( sbSizer25, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ bSizer120->Add( bSizer175, 0, wxEXPAND, 5 );
+
+
+ bSizer120->Add( 0, 5, 0, 0, 5 );
+
+ m_scrolledWindow6 = new wxScrolledWindow( m_panelOverview, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
+ m_scrolledWindow6->SetScrollRate( 5, 5 );
+ wxBoxSizer* bSizer141;
+ bSizer141 = new wxBoxSizer( wxVERTICAL );
+
+ sbSizerMainPair = new wxBoxSizer( wxHORIZONTAL );
+
+ m_panelMainPair = new wxPanel( m_scrolledWindow6, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDOUBLE_BORDER );
+ wxBoxSizer* bSizer147;
+ bSizer147 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer1361;
+ bSizer1361 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonAddPair = new wxBitmapButton( m_panelMainPair, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
+ m_bpButtonAddPair->SetToolTip( _("Add folder pair") );
+
+ bSizer1361->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 3 );
+
+ m_bpButtonRemovePair = new wxBitmapButton( m_panelMainPair, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
+ m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
+
+ bSizer1361->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizer147->Add( bSizer1361, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* bSizer143;
+ bSizer143 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer145;
+ bSizer145 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText532 = new wxStaticText( m_panelMainPair, wxID_ANY, _("Left"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText532->Wrap( -1 );
+ m_staticText532->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer145->Add( m_staticText532, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer143->Add( bSizer145, 1, 0, 5 );
+
+ wxBoxSizer* bSizer146;
+ bSizer146 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText5411 = new wxStaticText( m_panelMainPair, wxID_ANY, _("Right"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText5411->Wrap( -1 );
+ m_staticText5411->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer146->Add( m_staticText5411, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer143->Add( bSizer146, 1, 0, 5 );
+
+ bSizer147->Add( bSizer143, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ m_panelMainPair->SetSizer( bSizer147 );
+ m_panelMainPair->Layout();
+ bSizer147->Fit( m_panelMainPair );
+ sbSizerMainPair->Add( m_panelMainPair, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer158;
+ bSizer158 = new wxBoxSizer( wxVERTICAL );
+
+ m_panelLeft = new wxPanel( m_scrolledWindow6, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer1141;
+ bSizer1141 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer1141->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_dirPickerLeft = new zen::DirPickerCtrl( m_panelLeft, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_dirPickerLeft->SetToolTip( _("Select a folder") );
+
+ bSizer1141->Add( m_dirPickerLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelLeft->SetSizer( bSizer1141 );
+ m_panelLeft->Layout();
+ bSizer1141->Fit( m_panelLeft );
+ bSizer158->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_panelRight = new wxPanel( m_scrolledWindow6, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer115;
+ bSizer115 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer115->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_dirPickerRight = new zen::DirPickerCtrl( m_panelRight, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_dirPickerRight->SetToolTip( _("Select a folder") );
+
+ bSizer115->Add( m_dirPickerRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelRight->SetSizer( bSizer115 );
+ m_panelRight->Layout();
+ bSizer115->Fit( m_panelRight );
+ bSizer158->Add( m_panelRight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ sbSizerMainPair->Add( bSizer158, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer177;
+ bSizer177 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonAltCompCfg = new wxBitmapButton( m_scrolledWindow6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
+ bSizer177->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonLocalFilter = new wxBitmapButton( m_scrolledWindow6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
+ bSizer177->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 3 );
+
+ m_bpButtonAltSyncCfg = new wxBitmapButton( m_scrolledWindow6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
+ bSizer177->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ sbSizerMainPair->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ bSizer141->Add( sbSizerMainPair, 0, wxEXPAND, 5 );
+
+ bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL );
+
+ bSizer141->Add( bSizerAddFolderPairs, 1, wxEXPAND, 5 );
+
+ m_scrolledWindow6->SetSizer( bSizer141 );
+ m_scrolledWindow6->Layout();
+ bSizer141->Fit( m_scrolledWindow6 );
+ bSizer120->Add( m_scrolledWindow6, 1, wxEXPAND, 5 );
+
+
+ bSizer120->Add( 0, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizer67->Add( bSizer120, 1, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 10 );
+
+ m_panelOverview->SetSizer( bSizer67 );
+ m_panelOverview->Layout();
+ bSizer67->Fit( m_panelOverview );
+ m_listbook1->AddPage( m_panelOverview, _("Overview"), true );
+ m_panelBatchSettings = new wxPanel( m_listbook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer117;
+ bSizer117 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer172;
+ bSizer172 = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBoxSizer* sbSizer24;
+ sbSizer24 = new wxStaticBoxSizer( new wxStaticBox( m_panelBatchSettings, wxID_ANY, _("Status feedback") ), wxVERTICAL );
+
+ m_checkBoxSilent = new wxCheckBox( m_panelBatchSettings, wxID_ANY, _("Run minimized"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbSizer24->Add( m_checkBoxSilent, 0, wxALL|wxEXPAND, 5 );
+
+ bSizer172->Add( sbSizer24, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer172->Add( 0, 5, 0, 0, 5 );
+
+ sbSizerLogfileDir = new wxStaticBoxSizer( new wxStaticBox( m_panelBatchSettings, wxID_ANY, _("Logging") ), wxVERTICAL );
+
+ wxBoxSizer* bSizer152;
+ bSizer152 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText96 = new wxStaticText( m_panelBatchSettings, wxID_ANY, _("Maximum number of logfiles:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText96->Wrap( -1 );
+ bSizer152->Add( m_staticText96, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+
+ bSizer152->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_spinCtrlLogCountMax = new wxSpinCtrl( m_panelBatchSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
+ bSizer152->Add( m_spinCtrlLogCountMax, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ sbSizerLogfileDir->Add( bSizer152, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_panelLogfile = new wxPanel( m_panelBatchSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer1721;
+ bSizer1721 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText94 = new wxStaticText( m_panelLogfile, wxID_ANY, _("Select logfile directory:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText94->Wrap( -1 );
+ bSizer1721->Add( m_staticText94, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer170;
+ bSizer170 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_comboBoxLogfileDir = new FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer170->Add( m_comboBoxLogfileDir, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_dirPickerLogfileDir = new zen::DirPickerCtrl( m_panelLogfile, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_dirPickerLogfileDir->SetToolTip( _("Select a folder") );
+
+ bSizer170->Add( m_dirPickerLogfileDir, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer1721->Add( bSizer170, 0, wxEXPAND, 5 );
+
+ m_panelLogfile->SetSizer( bSizer1721 );
+ m_panelLogfile->Layout();
+ bSizer1721->Fit( m_panelLogfile );
+ sbSizerLogfileDir->Add( m_panelLogfile, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ bSizer172->Add( sbSizerLogfileDir, 0, wxEXPAND, 5 );
+
+ bSizer117->Add( bSizer172, 1, wxEXPAND|wxALL, 10 );
+
+ m_panelBatchSettings->SetSizer( bSizer117 );
+ m_panelBatchSettings->Layout();
+ bSizer117->Fit( m_panelBatchSettings );
+ m_listbook1->AddPage( m_panelBatchSettings, _("Batch settings"), false );
+#ifndef __WXGTK__ // Small icon style not supported in GTK
+ wxListView* m_listbook1ListView = m_listbook1->GetListView();
+ long m_listbook1Flags = m_listbook1ListView->GetWindowStyleFlag();
+ m_listbook1Flags = ( m_listbook1Flags & ~wxLC_ICON ) | wxLC_SMALL_ICON;
+ m_listbook1ListView->SetWindowStyleFlag( m_listbook1Flags );
+#endif
+
+ bSizer54->Add( m_listbook1, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer68;
+ bSizer68 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonSave = new wxButton( this, wxID_SAVE, _("&Save"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonSave->SetDefault();
+ m_buttonSave->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer68->Add( m_buttonSave, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_buttonLoad = new wxButton( this, wxID_OPEN, _("&Load"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonLoad->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer68->Add( m_buttonLoad, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_button6 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button6->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer68->Add( m_button6, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer54->Add( bSizer68, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
+
+ this->SetSizer( bSizer54 );
+ this->Layout();
+ bSizer54->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) );
+ m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnHelp ), NULL, this );
+ m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCmpSettings ), NULL, this );
+ m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnConfigureFilter ), NULL, this );
+ m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSyncSettings ), NULL, this );
+ m_choiceHandleError->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeErrorHandling ), NULL, this );
+ m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnAddFolderPair ), NULL, this );
+ m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnRemoveTopFolderPair ), NULL, this );
+ m_spinCtrlLogCountMax->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnChangeMaxLogCountTxt ), NULL, this );
+ m_buttonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this );
+ m_buttonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnLoadBatchJob ), NULL, this );
+ m_button6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this );
}
BatchDlgGenerated::~BatchDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) );
- m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnHelp ), NULL, this );
- m_bpButtonCmpConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCmpSettings ), NULL, this );
- m_bpButtonFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnConfigureFilter ), NULL, this );
- m_bpButtonSyncConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSyncSettings ), NULL, this );
- m_choiceHandleError->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeErrorHandling ), NULL, this );
- m_bpButtonAddPair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnAddFolderPair ), NULL, this );
- m_bpButtonRemovePair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnRemoveTopFolderPair ), NULL, this );
- m_spinCtrlLogCountMax->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnChangeMaxLogCountTxt ), NULL, this );
- m_buttonSave->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this );
- m_buttonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnLoadBatchJob ), NULL, this );
- m_button6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) );
+ m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnHelp ), NULL, this );
+ m_bpButtonCmpConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCmpSettings ), NULL, this );
+ m_bpButtonFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnConfigureFilter ), NULL, this );
+ m_bpButtonSyncConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSyncSettings ), NULL, this );
+ m_choiceHandleError->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeErrorHandling ), NULL, this );
+ m_bpButtonAddPair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnAddFolderPair ), NULL, this );
+ m_bpButtonRemovePair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnRemoveTopFolderPair ), NULL, this );
+ m_spinCtrlLogCountMax->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnChangeMaxLogCountTxt ), NULL, this );
+ m_buttonSave->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this );
+ m_buttonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnLoadBatchJob ), NULL, this );
+ m_button6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this );
+
}
BatchFolderPairGenerated::BatchFolderPairGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
- wxBoxSizer* bSizer142;
- bSizer142 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer140;
- bSizer140 = new wxBoxSizer( wxHORIZONTAL );
-
- m_panel32 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDOUBLE_BORDER );
- wxBoxSizer* bSizer147;
- bSizer147 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer136;
- bSizer136 = new wxBoxSizer( wxVERTICAL );
-
- m_bpButtonRemovePair = new wxBitmapButton( m_panel32, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
- m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
-
- bSizer136->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer147->Add( bSizer136, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* bSizer143;
- bSizer143 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer145;
- bSizer145 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText53 = new wxStaticText( m_panel32, wxID_ANY, _("Left"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText53->Wrap( -1 );
- m_staticText53->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer145->Add( m_staticText53, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer143->Add( bSizer145, 1, 0, 5 );
-
- wxBoxSizer* bSizer146;
- bSizer146 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText541 = new wxStaticText( m_panel32, wxID_ANY, _("Right"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText541->Wrap( -1 );
- m_staticText541->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer146->Add( m_staticText541, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer143->Add( bSizer146, 1, 0, 5 );
-
- bSizer147->Add( bSizer143, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- m_panel32->SetSizer( bSizer147 );
- m_panel32->Layout();
- bSizer147->Fit( m_panel32 );
- bSizer140->Add( m_panel32, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer144;
- bSizer144 = new wxBoxSizer( wxVERTICAL );
-
- m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer114;
- bSizer114 = new wxBoxSizer( wxHORIZONTAL );
-
- m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer114->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_dirPickerLeft = new zen::DirPickerCtrl( m_panelLeft, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dirPickerLeft->SetToolTip( _("Select a folder") );
-
- bSizer114->Add( m_dirPickerLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelLeft->SetSizer( bSizer114 );
- m_panelLeft->Layout();
- bSizer114->Fit( m_panelLeft );
- bSizer144->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer115;
- bSizer115 = new wxBoxSizer( wxHORIZONTAL );
-
- m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer115->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_dirPickerRight = new zen::DirPickerCtrl( m_panelRight, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dirPickerRight->SetToolTip( _("Select a folder") );
-
- bSizer115->Add( m_dirPickerRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelRight->SetSizer( bSizer115 );
- m_panelRight->Layout();
- bSizer115->Fit( m_panelRight );
- bSizer144->Add( m_panelRight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer140->Add( bSizer144, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* bSizer176;
- bSizer176 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonAltCompCfg = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
- bSizer176->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonLocalFilter = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
- bSizer176->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 3 );
-
- m_bpButtonAltSyncCfg = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
- bSizer176->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer140->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- bSizer142->Add( bSizer140, 0, wxEXPAND, 5 );
-
-
- bSizer142->Add( 0, 5, 0, 0, 5 );
-
- this->SetSizer( bSizer142 );
- this->Layout();
- bSizer142->Fit( this );
+ wxBoxSizer* bSizer142;
+ bSizer142 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer140;
+ bSizer140 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_panel32 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDOUBLE_BORDER );
+ wxBoxSizer* bSizer147;
+ bSizer147 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer136;
+ bSizer136 = new wxBoxSizer( wxVERTICAL );
+
+ m_bpButtonRemovePair = new wxBitmapButton( m_panel32, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
+ m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
+
+ bSizer136->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer147->Add( bSizer136, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* bSizer143;
+ bSizer143 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer145;
+ bSizer145 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText53 = new wxStaticText( m_panel32, wxID_ANY, _("Left"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText53->Wrap( -1 );
+ m_staticText53->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer145->Add( m_staticText53, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer143->Add( bSizer145, 1, 0, 5 );
+
+ wxBoxSizer* bSizer146;
+ bSizer146 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText541 = new wxStaticText( m_panel32, wxID_ANY, _("Right"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText541->Wrap( -1 );
+ m_staticText541->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer146->Add( m_staticText541, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer143->Add( bSizer146, 1, 0, 5 );
+
+ bSizer147->Add( bSizer143, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ m_panel32->SetSizer( bSizer147 );
+ m_panel32->Layout();
+ bSizer147->Fit( m_panel32 );
+ bSizer140->Add( m_panel32, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer144;
+ bSizer144 = new wxBoxSizer( wxVERTICAL );
+
+ m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer114;
+ bSizer114 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer114->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_dirPickerLeft = new zen::DirPickerCtrl( m_panelLeft, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_dirPickerLeft->SetToolTip( _("Select a folder") );
+
+ bSizer114->Add( m_dirPickerLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelLeft->SetSizer( bSizer114 );
+ m_panelLeft->Layout();
+ bSizer114->Fit( m_panelLeft );
+ bSizer144->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer115;
+ bSizer115 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer115->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_dirPickerRight = new zen::DirPickerCtrl( m_panelRight, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_dirPickerRight->SetToolTip( _("Select a folder") );
+
+ bSizer115->Add( m_dirPickerRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelRight->SetSizer( bSizer115 );
+ m_panelRight->Layout();
+ bSizer115->Fit( m_panelRight );
+ bSizer144->Add( m_panelRight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer140->Add( bSizer144, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* bSizer176;
+ bSizer176 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonAltCompCfg = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
+ bSizer176->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonLocalFilter = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
+ bSizer176->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 3 );
+
+ m_bpButtonAltSyncCfg = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 20,20 ), wxBU_AUTODRAW );
+ bSizer176->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer140->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ bSizer142->Add( bSizer140, 0, wxEXPAND, 5 );
+
+
+ bSizer142->Add( 0, 5, 0, 0, 5 );
+
+ this->SetSizer( bSizer142 );
+ this->Layout();
+ bSizer142->Fit( this );
}
BatchFolderPairGenerated::~BatchFolderPairGenerated()
@@ -1390,159 +1466,159 @@ BatchFolderPairGenerated::~BatchFolderPairGenerated()
CompareStatusGenerated::CompareStatusGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
- wxBoxSizer* bSizer40;
- bSizer40 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer40->Add( 0, 0, 1, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer48;
- bSizer48 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText30 = new wxStaticText( this, wxID_ANY, _("Operation:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText30->Wrap( -1 );
- m_staticText30->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer48->Add( m_staticText30, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrlStatus = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
- m_textCtrlStatus->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer48->Add( m_textCtrlStatus, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer40->Add( bSizer48, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|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|wxRIGHT|wxLEFT, 5 );
-
- bSizer42 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer157;
- bSizer157 = new wxBoxSizer( wxVERTICAL );
-
- bSizerFilesFound = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText321 = new wxStaticText( this, wxID_ANY, _("Items found:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText321->Wrap( -1 );
- m_staticText321->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizerFilesFound->Add( m_staticText321, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextScanned = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextScanned->Wrap( -1 );
- m_staticTextScanned->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- bSizerFilesFound->Add( m_staticTextScanned, 0, wxALIGN_BOTTOM|wxLEFT, 5 );
-
- bSizer157->Add( bSizerFilesFound, 0, 0, 5 );
-
- bSizerFilesRemaining = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText46 = new wxStaticText( this, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText46->Wrap( -1 );
- m_staticText46->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizerFilesRemaining->Add( m_staticText46, 0, wxALIGN_BOTTOM, 5 );
-
- wxBoxSizer* bSizer154;
- bSizer154 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticTextFilesRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextFilesRemaining->Wrap( -1 );
- m_staticTextFilesRemaining->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- bSizer154->Add( m_staticTextFilesRemaining, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticText117 = new wxStaticText( this, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText117->Wrap( -1 );
- m_staticText117->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
-
- bSizer154->Add( m_staticText117, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
-
- m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDataRemaining->Wrap( -1 );
- m_staticTextDataRemaining->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
-
- bSizer154->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticText118 = new wxStaticText( this, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText118->Wrap( -1 );
- m_staticText118->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
-
- bSizer154->Add( m_staticText118, 0, wxALIGN_BOTTOM, 5 );
-
- bSizerFilesRemaining->Add( bSizer154, 0, wxALIGN_BOTTOM|wxLEFT, 5 );
-
- bSizer157->Add( bSizerFilesRemaining, 0, 0, 5 );
-
- bSizer42->Add( bSizer157, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer42->Add( 0, 0, 1, wxEXPAND, 5 );
-
- sSizerSpeed = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText104 = new wxStaticText( this, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText104->Wrap( -1 );
- m_staticText104->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- sSizerSpeed->Add( m_staticText104, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextSpeed->Wrap( -1 );
- m_staticTextSpeed->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- sSizerSpeed->Add( m_staticTextSpeed, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
-
- bSizer42->Add( sSizerSpeed, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer42->Add( 10, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- sSizerTimeRemaining = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticTextTimeRemFixed = new wxStaticText( this, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextTimeRemFixed->Wrap( -1 );
- m_staticTextTimeRemFixed->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- sSizerTimeRemaining->Add( m_staticTextTimeRemFixed, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextRemTime = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextRemTime->Wrap( -1 );
- m_staticTextRemTime->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- sSizerTimeRemaining->Add( m_staticTextRemTime, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
-
- bSizer42->Add( sSizerTimeRemaining, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer42->Add( 0, 0, 1, wxEXPAND, 5 );
-
- sSizerTimeElapsed = new wxBoxSizer( wxHORIZONTAL );
-
- wxStaticText* m_staticText37;
- m_staticText37 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText37->Wrap( -1 );
- m_staticText37->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- sSizerTimeElapsed->Add( m_staticText37, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextTimeElapsed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextTimeElapsed->Wrap( -1 );
- m_staticTextTimeElapsed->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- sSizerTimeElapsed->Add( m_staticTextTimeElapsed, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
-
- bSizer42->Add( sSizerTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer40->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer40->Add( 0, 0, 1, wxEXPAND, 5 );
-
- this->SetSizer( bSizer40 );
- this->Layout();
- bSizer40->Fit( this );
+ wxBoxSizer* bSizer40;
+ bSizer40 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer40->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer48;
+ bSizer48 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText30 = new wxStaticText( this, wxID_ANY, _("Operation:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText30->Wrap( -1 );
+ m_staticText30->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer48->Add( m_staticText30, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlStatus = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
+ m_textCtrlStatus->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer48->Add( m_textCtrlStatus, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer40->Add( bSizer48, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|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|wxRIGHT|wxLEFT, 5 );
+
+ bSizer42 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer157;
+ bSizer157 = new wxBoxSizer( wxVERTICAL );
+
+ bSizerFilesFound = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText321 = new wxStaticText( this, wxID_ANY, _("Items found:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText321->Wrap( -1 );
+ m_staticText321->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizerFilesFound->Add( m_staticText321, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextScanned = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextScanned->Wrap( -1 );
+ m_staticTextScanned->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
+
+ bSizerFilesFound->Add( m_staticTextScanned, 0, wxALIGN_BOTTOM|wxLEFT, 5 );
+
+ bSizer157->Add( bSizerFilesFound, 0, 0, 5 );
+
+ bSizerFilesRemaining = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText46 = new wxStaticText( this, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText46->Wrap( -1 );
+ m_staticText46->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizerFilesRemaining->Add( m_staticText46, 0, wxALIGN_BOTTOM, 5 );
+
+ wxBoxSizer* bSizer154;
+ bSizer154 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextFilesRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextFilesRemaining->Wrap( -1 );
+ m_staticTextFilesRemaining->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
+
+ bSizer154->Add( m_staticTextFilesRemaining, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticText117 = new wxStaticText( this, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText117->Wrap( -1 );
+ m_staticText117->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
+
+ bSizer154->Add( m_staticText117, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
+
+ m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDataRemaining->Wrap( -1 );
+ m_staticTextDataRemaining->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
+
+ bSizer154->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticText118 = new wxStaticText( this, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText118->Wrap( -1 );
+ m_staticText118->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
+
+ bSizer154->Add( m_staticText118, 0, wxALIGN_BOTTOM, 5 );
+
+ bSizerFilesRemaining->Add( bSizer154, 0, wxALIGN_BOTTOM|wxLEFT, 5 );
+
+ bSizer157->Add( bSizerFilesRemaining, 0, 0, 5 );
+
+ bSizer42->Add( bSizer157, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer42->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ sSizerSpeed = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText104 = new wxStaticText( this, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText104->Wrap( -1 );
+ m_staticText104->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ sSizerSpeed->Add( m_staticText104, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextSpeed->Wrap( -1 );
+ m_staticTextSpeed->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
+
+ sSizerSpeed->Add( m_staticTextSpeed, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
+
+ bSizer42->Add( sSizerSpeed, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer42->Add( 10, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ sSizerTimeRemaining = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextTimeRemFixed = new wxStaticText( this, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTimeRemFixed->Wrap( -1 );
+ m_staticTextTimeRemFixed->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ sSizerTimeRemaining->Add( m_staticTextTimeRemFixed, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextRemTime = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRemTime->Wrap( -1 );
+ m_staticTextRemTime->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
+
+ sSizerTimeRemaining->Add( m_staticTextRemTime, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
+
+ bSizer42->Add( sSizerTimeRemaining, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer42->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ sSizerTimeElapsed = new wxBoxSizer( wxHORIZONTAL );
+
+ wxStaticText* m_staticText37;
+ m_staticText37 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText37->Wrap( -1 );
+ m_staticText37->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ sSizerTimeElapsed->Add( m_staticText37, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextTimeElapsed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTimeElapsed->Wrap( -1 );
+ m_staticTextTimeElapsed->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
+
+ sSizerTimeElapsed->Add( m_staticTextTimeElapsed, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
+
+ bSizer42->Add( sSizerTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer40->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer40->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ this->SetSizer( bSizer40 );
+ this->Layout();
+ bSizer40->Fit( this );
}
CompareStatusGenerated::~CompareStatusGenerated()
@@ -1551,2178 +1627,2170 @@ CompareStatusGenerated::~CompareStatusGenerated()
SyncCfgDlgGenerated::SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer7;
- bSizer7 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer181;
- bSizer181 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer29;
- bSizer29 = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBoxSizer* sbSizer7;
- sbSizer7 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL );
-
- m_staticText1 = new wxStaticText( this, wxID_ANY, _("Select variant:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText1->Wrap( -1 );
- m_staticText1->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- sbSizer7->Add( m_staticText1, 0, wxALL, 5 );
-
- wxFlexGridSizer* fgSizer1;
- fgSizer1 = new wxFlexGridSizer( 4, 3, 8, 5 );
- fgSizer1->SetFlexibleDirection( wxHORIZONTAL );
- fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_radioBtnAutomatic = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_radioBtnAutomatic->SetValue( true );
- m_radioBtnAutomatic->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer1->Add( m_radioBtnAutomatic, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonAutomatic = new wxButton( this, wxID_ANY, _("<Automatic>"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonAutomatic->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer1->Add( m_buttonAutomatic, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_staticText81 = new wxStaticText( this, wxID_ANY, _("Identify and propagate changes on both sides using a database. Deletions and conflicts are detected automatically."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText81->Wrap( 400 );
- fgSizer1->Add( m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- m_radioBtnMirror = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_radioBtnMirror->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer1->Add( m_radioBtnMirror, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonOneWay = new wxButton( this, wxID_ANY, _("Mirror ->>"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonOneWay->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer1->Add( m_buttonOneWay, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_staticText8 = new wxStaticText( this, wxID_ANY, _("Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText8->Wrap( 400 );
- fgSizer1->Add( m_staticText8, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_radioBtnUpdate = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_radioBtnUpdate->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer1->Add( m_radioBtnUpdate, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonUpdate = new wxButton( this, wxID_ANY, _("Update ->"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonUpdate->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer1->Add( m_buttonUpdate, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_staticText101 = new wxStaticText( this, wxID_ANY, _("Copy new or updated files to right folder."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText101->Wrap( 400 );
- fgSizer1->Add( m_staticText101, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- m_radioBtnCustom = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_radioBtnCustom->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer1->Add( m_radioBtnCustom, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonUpdate1 = new wxButton( this, wxID_ANY, _("Custom"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonUpdate1->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer1->Add( m_buttonUpdate1, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_staticText9 = new wxStaticText( this, wxID_ANY, _("Configure your own synchronization rules."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText9->Wrap( 400 );
- fgSizer1->Add( m_staticText9, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- sbSizer7->Add( fgSizer1, 0, 0, 5 );
-
- bSizer29->Add( sbSizer7, 0, wxEXPAND, 5 );
-
-
- bSizer29->Add( 0, 5, 1, 0, 5 );
-
- bSizer201 = new wxBoxSizer( wxHORIZONTAL );
-
- sbSizerErrorHandling = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Error handling") ), wxHORIZONTAL );
-
- wxArrayString m_choiceHandleErrorChoices;
- m_choiceHandleError = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleErrorChoices, 0 );
- m_choiceHandleError->SetSelection( 0 );
- sbSizerErrorHandling->Add( m_choiceHandleError, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer201->Add( sbSizerErrorHandling, 0, wxEXPAND|wxRIGHT, 10 );
-
- sbSizerCustDelDir = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Deletion handling") ), wxVERTICAL );
-
- wxArrayString m_choiceHandleDeletionChoices;
- m_choiceHandleDeletion = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleDeletionChoices, 0 );
- m_choiceHandleDeletion->SetSelection( 0 );
- sbSizerCustDelDir->Add( m_choiceHandleDeletion, 0, wxBOTTOM, 5 );
-
- m_panelCustomDeletionDir = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer1151;
- bSizer1151 = new wxBoxSizer( wxHORIZONTAL );
-
- m_customDelFolder = new FolderHistoryBox( m_panelCustomDeletionDir, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer1151->Add( m_customDelFolder, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_dirPickerCustomDelFolder = new zen::DirPickerCtrl( m_panelCustomDeletionDir, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer1151->Add( m_dirPickerCustomDelFolder, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelCustomDeletionDir->SetSizer( bSizer1151 );
- m_panelCustomDeletionDir->Layout();
- bSizer1151->Fit( m_panelCustomDeletionDir );
- sbSizerCustDelDir->Add( m_panelCustomDeletionDir, 0, wxEXPAND, 5 );
-
- bSizer201->Add( sbSizerCustDelDir, 1, wxEXPAND, 5 );
-
- bSizer29->Add( bSizer201, 0, wxTOP|wxBOTTOM|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer291;
- bSizer291 = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonOK = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonOK->SetDefault();
- m_buttonOK->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer291->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_button16 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button16->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer291->Add( m_button16, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer291->Add( 20, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer29->Add( bSizer291, 0, wxEXPAND, 5 );
-
- bSizer181->Add( bSizer29, 0, wxEXPAND, 5 );
-
-
- bSizer181->Add( 10, 0, 0, 0, 5 );
-
- wxStaticBoxSizer* sbSizer2453245;
- sbSizer2453245 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Configuration") ), wxVERTICAL );
-
-
- sbSizer2453245->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_bitmapDatabase = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 70,70 ), 0 );
- sbSizer2453245->Add( m_bitmapDatabase, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 10 );
-
- sbSizerSyncDirections = new wxBoxSizer( wxVERTICAL );
-
- wxGridSizer* gSizer3;
- gSizer3 = new wxGridSizer( 1, 2, 0, 5 );
-
- m_staticText21 = new wxStaticText( this, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText21->Wrap( -1 );
- m_staticText21->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
-
- gSizer3->Add( m_staticText21, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticText31 = new wxStaticText( this, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText31->Wrap( -1 );
- m_staticText31->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
-
- gSizer3->Add( m_staticText31, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- sbSizerSyncDirections->Add( gSizer3, 0, wxEXPAND, 5 );
-
- m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- sbSizerSyncDirections->Add( m_staticline3, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer121;
- bSizer121 = new wxBoxSizer( wxVERTICAL );
-
- bSizerLeftOnly = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapLeftOnly = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapLeftOnly->SetToolTip( _("File/folder exists on left side only") );
-
- bSizerLeftOnly->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerLeftOnly->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonLeftOnly = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerLeftOnly->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer121->Add( bSizerLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizerRightOnly = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapRightOnly = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapRightOnly->SetToolTip( _("File/folder exists on right side only") );
-
- bSizerRightOnly->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerRightOnly->Add( 5, 0, 0, 0, 5 );
-
- m_bpButtonRightOnly = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerRightOnly->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer121->Add( bSizerRightOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizerLeftNewer = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapLeftNewer = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapLeftNewer->SetToolTip( _("Left file is newer") );
-
- bSizerLeftNewer->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerLeftNewer->Add( 5, 0, 0, 0, 5 );
-
- m_bpButtonLeftNewer = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerLeftNewer->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer121->Add( bSizerLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizerRightNewer = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapRightNewer = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapRightNewer->SetToolTip( _("Right file is newer") );
-
- bSizerRightNewer->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerRightNewer->Add( 5, 0, 0, 0, 5 );
-
- m_bpButtonRightNewer = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerRightNewer->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer121->Add( bSizerRightNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizerDifferent = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapDifferent = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapDifferent->SetToolTip( _("Files have different content") );
-
- bSizerDifferent->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerDifferent->Add( 5, 0, 0, 0, 5 );
-
- m_bpButtonDifferent = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerDifferent->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer121->Add( bSizerDifferent, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizerConflict = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapConflict = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapConflict->SetToolTip( _("Conflict/file cannot be categorized") );
-
- bSizerConflict->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerConflict->Add( 5, 0, 0, 0, 5 );
-
- m_bpButtonConflict = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerConflict->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer121->Add( bSizerConflict, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- sbSizerSyncDirections->Add( bSizer121, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- sbSizer2453245->Add( sbSizerSyncDirections, 0, wxEXPAND, 5 );
-
-
- sbSizer2453245->Add( 0, 0, 1, wxEXPAND, 5 );
-
- bSizer181->Add( sbSizer2453245, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizer7->Add( bSizer181, 0, wxALL, 5 );
-
- this->SetSizer( bSizer7 );
- this->Layout();
- bSizer7->Fit( this );
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) );
- m_radioBtnAutomatic->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this );
- m_buttonAutomatic->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this );
- m_buttonAutomatic->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncAutomaticDouble ), NULL, this );
- m_radioBtnMirror->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this );
- m_buttonOneWay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this );
- m_buttonOneWay->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this );
- m_radioBtnUpdate->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this );
- m_buttonUpdate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this );
- m_buttonUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this );
- m_radioBtnCustom->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this );
- m_buttonUpdate1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this );
- m_buttonUpdate1->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this );
- m_choiceHandleError->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnChangeErrorHandling ), NULL, this );
- m_choiceHandleDeletion->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnChangeDeletionHandling ), NULL, this );
- m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnApply ), NULL, this );
- m_button16->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this );
- 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 );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer7;
+ bSizer7 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer181;
+ bSizer181 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer29;
+ bSizer29 = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBoxSizer* sbSizer7;
+ sbSizer7 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL );
+
+ m_staticText1 = new wxStaticText( this, wxID_ANY, _("Select variant:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText1->Wrap( -1 );
+ m_staticText1->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ sbSizer7->Add( m_staticText1, 0, wxALL, 5 );
+
+ wxFlexGridSizer* fgSizer1;
+ fgSizer1 = new wxFlexGridSizer( 4, 3, 8, 5 );
+ fgSizer1->SetFlexibleDirection( wxHORIZONTAL );
+ fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_radioBtnAutomatic = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+ m_radioBtnAutomatic->SetValue( true );
+ m_radioBtnAutomatic->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer1->Add( m_radioBtnAutomatic, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonAutomatic = new wxButton( this, wxID_ANY, _("<Automatic>"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonAutomatic->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer1->Add( m_buttonAutomatic, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_staticText81 = new wxStaticText( this, wxID_ANY, _("Identify and propagate changes on both sides using a database. Deletions and conflicts are detected automatically."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText81->Wrap( 400 );
+ fgSizer1->Add( m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_radioBtnMirror = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_radioBtnMirror->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer1->Add( m_radioBtnMirror, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonOneWay = new wxButton( this, wxID_ANY, _("Mirror ->>"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonOneWay->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer1->Add( m_buttonOneWay, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_staticText8 = new wxStaticText( this, wxID_ANY, _("Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText8->Wrap( 400 );
+ fgSizer1->Add( m_staticText8, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_radioBtnUpdate = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_radioBtnUpdate->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer1->Add( m_radioBtnUpdate, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonUpdate = new wxButton( this, wxID_ANY, _("Update ->"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonUpdate->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer1->Add( m_buttonUpdate, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_staticText101 = new wxStaticText( this, wxID_ANY, _("Copy new or updated files to right folder."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText101->Wrap( 400 );
+ fgSizer1->Add( m_staticText101, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_radioBtnCustom = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_radioBtnCustom->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer1->Add( m_radioBtnCustom, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonUpdate1 = new wxButton( this, wxID_ANY, _("Custom"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonUpdate1->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer1->Add( m_buttonUpdate1, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_staticText9 = new wxStaticText( this, wxID_ANY, _("Configure your own synchronization rules."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText9->Wrap( 400 );
+ fgSizer1->Add( m_staticText9, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ sbSizer7->Add( fgSizer1, 0, 0, 5 );
+
+ bSizer29->Add( sbSizer7, 0, wxEXPAND, 5 );
+
+
+ bSizer29->Add( 0, 5, 1, 0, 5 );
+
+ bSizer201 = new wxBoxSizer( wxHORIZONTAL );
+
+ sbSizerErrorHandling = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Error handling") ), wxHORIZONTAL );
+
+ wxArrayString m_choiceHandleErrorChoices;
+ m_choiceHandleError = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleErrorChoices, 0 );
+ m_choiceHandleError->SetSelection( 0 );
+ sbSizerErrorHandling->Add( m_choiceHandleError, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer201->Add( sbSizerErrorHandling, 0, wxEXPAND|wxRIGHT, 10 );
+
+ sbSizerCustDelDir = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Deletion handling") ), wxVERTICAL );
+
+ wxArrayString m_choiceHandleDeletionChoices;
+ m_choiceHandleDeletion = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleDeletionChoices, 0 );
+ m_choiceHandleDeletion->SetSelection( 0 );
+ sbSizerCustDelDir->Add( m_choiceHandleDeletion, 0, wxBOTTOM, 5 );
+
+ m_panelCustomDeletionDir = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer1151;
+ bSizer1151 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_customDelFolder = new FolderHistoryBox( m_panelCustomDeletionDir, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer1151->Add( m_customDelFolder, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_dirPickerCustomDelFolder = new zen::DirPickerCtrl( m_panelCustomDeletionDir, wxID_ANY, wxEmptyString, _("Select a folder"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer1151->Add( m_dirPickerCustomDelFolder, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelCustomDeletionDir->SetSizer( bSizer1151 );
+ m_panelCustomDeletionDir->Layout();
+ bSizer1151->Fit( m_panelCustomDeletionDir );
+ sbSizerCustDelDir->Add( m_panelCustomDeletionDir, 0, wxEXPAND, 5 );
+
+ bSizer201->Add( sbSizerCustDelDir, 1, wxEXPAND, 5 );
+
+ bSizer29->Add( bSizer201, 0, wxTOP|wxBOTTOM|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer291;
+ bSizer291 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonOK = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonOK->SetDefault();
+ m_buttonOK->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer291->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_button16 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button16->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer291->Add( m_button16, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer291->Add( 20, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer29->Add( bSizer291, 0, wxEXPAND, 5 );
+
+ bSizer181->Add( bSizer29, 0, wxEXPAND, 5 );
+
+
+ bSizer181->Add( 10, 0, 0, 0, 5 );
+
+ wxStaticBoxSizer* sbSizer2453245;
+ sbSizer2453245 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Configuration") ), wxVERTICAL );
+
+
+ sbSizer2453245->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bitmapDatabase = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 70,70 ), 0 );
+ sbSizer2453245->Add( m_bitmapDatabase, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 10 );
+
+ sbSizerSyncDirections = new wxBoxSizer( wxVERTICAL );
+
+ wxGridSizer* gSizer3;
+ gSizer3 = new wxGridSizer( 1, 2, 0, 5 );
+
+ m_staticText21 = new wxStaticText( this, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText21->Wrap( -1 );
+ m_staticText21->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ gSizer3->Add( m_staticText21, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticText31 = new wxStaticText( this, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText31->Wrap( -1 );
+ m_staticText31->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ gSizer3->Add( m_staticText31, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ sbSizerSyncDirections->Add( gSizer3, 0, wxEXPAND, 5 );
+
+ m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ sbSizerSyncDirections->Add( m_staticline3, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer121;
+ bSizer121 = new wxBoxSizer( wxVERTICAL );
+
+ bSizerLeftOnly = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapLeftOnly = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapLeftOnly->SetToolTip( _("File/folder exists on left side only") );
+
+ bSizerLeftOnly->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerLeftOnly->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonLeftOnly = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerLeftOnly->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer121->Add( bSizerLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizerRightOnly = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapRightOnly = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapRightOnly->SetToolTip( _("File/folder exists on right side only") );
+
+ bSizerRightOnly->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerRightOnly->Add( 5, 0, 0, 0, 5 );
+
+ m_bpButtonRightOnly = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerRightOnly->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer121->Add( bSizerRightOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizerLeftNewer = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapLeftNewer = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapLeftNewer->SetToolTip( _("Left file is newer") );
+
+ bSizerLeftNewer->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerLeftNewer->Add( 5, 0, 0, 0, 5 );
+
+ m_bpButtonLeftNewer = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerLeftNewer->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer121->Add( bSizerLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizerRightNewer = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapRightNewer = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapRightNewer->SetToolTip( _("Right file is newer") );
+
+ bSizerRightNewer->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerRightNewer->Add( 5, 0, 0, 0, 5 );
+
+ m_bpButtonRightNewer = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerRightNewer->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer121->Add( bSizerRightNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizerDifferent = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapDifferent = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapDifferent->SetToolTip( _("Files have different content") );
+
+ bSizerDifferent->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerDifferent->Add( 5, 0, 0, 0, 5 );
+
+ m_bpButtonDifferent = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerDifferent->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer121->Add( bSizerDifferent, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizerConflict = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapConflict = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapConflict->SetToolTip( _("Conflict/file cannot be categorized") );
+
+ bSizerConflict->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerConflict->Add( 5, 0, 0, 0, 5 );
+
+ m_bpButtonConflict = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerConflict->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer121->Add( bSizerConflict, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ sbSizerSyncDirections->Add( bSizer121, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ sbSizer2453245->Add( sbSizerSyncDirections, 0, wxEXPAND, 5 );
+
+
+ sbSizer2453245->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ bSizer181->Add( sbSizer2453245, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizer7->Add( bSizer181, 0, wxALL, 5 );
+
+ this->SetSizer( bSizer7 );
+ this->Layout();
+ bSizer7->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) );
+ m_radioBtnAutomatic->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this );
+ m_buttonAutomatic->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this );
+ m_buttonAutomatic->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncAutomaticDouble ), NULL, this );
+ m_radioBtnMirror->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this );
+ m_buttonOneWay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this );
+ m_buttonOneWay->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this );
+ m_radioBtnUpdate->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this );
+ m_buttonUpdate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this );
+ m_buttonUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this );
+ m_radioBtnCustom->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this );
+ m_buttonUpdate1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this );
+ m_buttonUpdate1->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this );
+ m_choiceHandleError->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnChangeErrorHandling ), NULL, this );
+ m_choiceHandleDeletion->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnChangeDeletionHandling ), NULL, this );
+ m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnApply ), NULL, this );
+ m_button16->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this );
+ 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 );
}
SyncCfgDlgGenerated::~SyncCfgDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) );
- m_radioBtnAutomatic->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this );
- m_buttonAutomatic->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this );
- m_buttonAutomatic->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncAutomaticDouble ), NULL, this );
- m_radioBtnMirror->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this );
- m_buttonOneWay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this );
- m_buttonOneWay->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this );
- m_radioBtnUpdate->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this );
- m_buttonUpdate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this );
- m_buttonUpdate->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this );
- m_radioBtnCustom->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this );
- m_buttonUpdate1->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this );
- m_buttonUpdate1->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this );
- m_choiceHandleError->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnChangeErrorHandling ), NULL, this );
- m_choiceHandleDeletion->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnChangeDeletionHandling ), NULL, this );
- m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnApply ), NULL, this );
- m_button16->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this );
- 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 );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) );
+ m_radioBtnAutomatic->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this );
+ m_buttonAutomatic->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this );
+ m_buttonAutomatic->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncAutomaticDouble ), NULL, this );
+ m_radioBtnMirror->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this );
+ m_buttonOneWay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this );
+ m_buttonOneWay->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this );
+ m_radioBtnUpdate->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this );
+ m_buttonUpdate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this );
+ m_buttonUpdate->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this );
+ m_radioBtnCustom->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this );
+ m_buttonUpdate1->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this );
+ m_buttonUpdate1->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this );
+ m_choiceHandleError->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnChangeErrorHandling ), NULL, this );
+ m_choiceHandleDeletion->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnChangeDeletionHandling ), NULL, this );
+ m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnApply ), NULL, this );
+ m_button16->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this );
+ 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 );
+
}
CmpCfgDlgGenerated::CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer136;
- bSizer136 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer55;
- bSizer55 = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBoxSizer* sbSizer6;
- sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Compare by...") ), wxHORIZONTAL );
-
- wxFlexGridSizer* fgSizer16;
- fgSizer16 = new wxFlexGridSizer( 2, 3, 0, 0 );
- fgSizer16->SetFlexibleDirection( wxBOTH );
- fgSizer16->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_radioBtnSizeDate = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
- m_radioBtnSizeDate->SetValue( true );
- m_radioBtnSizeDate->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") );
-
- fgSizer16->Add( m_radioBtnSizeDate, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapByTime = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapByTime->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") );
-
- fgSizer16->Add( m_bitmapByTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_buttonTimeSize = new wxButton( this, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,42 ), 0 );
- m_buttonTimeSize->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
- m_buttonTimeSize->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") );
-
- fgSizer16->Add( m_buttonTimeSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 );
-
- m_radioBtnContent = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_radioBtnContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") );
-
- fgSizer16->Add( m_radioBtnContent, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapByContent = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapByContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") );
-
- fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_buttonContent = new wxButton( this, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,42 ), 0 );
- m_buttonContent->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
- m_buttonContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") );
-
- fgSizer16->Add( m_buttonContent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- sbSizer6->Add( fgSizer16, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- bSizer55->Add( sbSizer6, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 2 );
-
-
- bSizer55->Add( 0, 4, 0, 0, 5 );
-
- wxBoxSizer* bSizer177;
- bSizer177 = new wxBoxSizer( wxHORIZONTAL );
-
- wxStaticBoxSizer* sbSizer25;
- sbSizer25 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Symbolic Link handling") ), wxVERTICAL );
-
- wxArrayString m_choiceHandleSymlinksChoices;
- m_choiceHandleSymlinks = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleSymlinksChoices, 0 );
- m_choiceHandleSymlinks->SetSelection( -1 );
- sbSizer25->Add( m_choiceHandleSymlinks, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizer177->Add( sbSizer25, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- m_bpButtonHelp->SetToolTip( _("Help") );
-
- bSizer177->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- bSizer55->Add( bSizer177, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer22;
- bSizer22 = new wxBoxSizer( wxHORIZONTAL );
-
- m_button10 = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button10->SetDefault();
- m_button10->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer22->Add( m_button10, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_button6 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button6->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer22->Add( m_button6, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer55->Add( bSizer22, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizer136->Add( bSizer55, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- this->SetSizer( bSizer136 );
- this->Layout();
- bSizer136->Fit( this );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) );
- m_radioBtnSizeDate->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this );
- m_buttonTimeSize->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this );
- m_buttonTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this );
- m_radioBtnContent->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this );
- m_buttonContent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this );
- m_buttonContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this );
- m_choiceHandleSymlinks->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this );
- m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnShowHelp ), NULL, this );
- m_button10->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this );
- m_button6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer136;
+ bSizer136 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer55;
+ bSizer55 = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBoxSizer* sbSizer6;
+ sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Compare by...") ), wxHORIZONTAL );
+
+ wxFlexGridSizer* fgSizer16;
+ fgSizer16 = new wxFlexGridSizer( 2, 3, 0, 0 );
+ fgSizer16->SetFlexibleDirection( wxBOTH );
+ fgSizer16->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_radioBtnSizeDate = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+ m_radioBtnSizeDate->SetValue( true );
+ m_radioBtnSizeDate->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") );
+
+ fgSizer16->Add( m_radioBtnSizeDate, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapByTime = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapByTime->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") );
+
+ fgSizer16->Add( m_bitmapByTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_buttonTimeSize = new wxButton( this, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,42 ), 0 );
+ m_buttonTimeSize->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+ m_buttonTimeSize->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") );
+
+ fgSizer16->Add( m_buttonTimeSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 );
+
+ m_radioBtnContent = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_radioBtnContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") );
+
+ fgSizer16->Add( m_radioBtnContent, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapByContent = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapByContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") );
+
+ fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_buttonContent = new wxButton( this, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,42 ), 0 );
+ m_buttonContent->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+ m_buttonContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") );
+
+ fgSizer16->Add( m_buttonContent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ sbSizer6->Add( fgSizer16, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ bSizer55->Add( sbSizer6, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 2 );
+
+
+ bSizer55->Add( 0, 4, 0, 0, 5 );
+
+ wxBoxSizer* bSizer177;
+ bSizer177 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxStaticBoxSizer* sbSizer25;
+ sbSizer25 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Symbolic Link handling") ), wxVERTICAL );
+
+ wxArrayString m_choiceHandleSymlinksChoices;
+ m_choiceHandleSymlinks = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleSymlinksChoices, 0 );
+ m_choiceHandleSymlinks->SetSelection( -1 );
+ sbSizer25->Add( m_choiceHandleSymlinks, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizer177->Add( sbSizer25, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ m_bpButtonHelp->SetToolTip( _("Help") );
+
+ bSizer177->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ bSizer55->Add( bSizer177, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer22;
+ bSizer22 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_button10 = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button10->SetDefault();
+ m_button10->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer22->Add( m_button10, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_button6 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button6->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer22->Add( m_button6, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer55->Add( bSizer22, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizer136->Add( bSizer55, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ this->SetSizer( bSizer136 );
+ this->Layout();
+ bSizer136->Fit( this );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) );
+ m_radioBtnSizeDate->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this );
+ m_buttonTimeSize->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this );
+ m_buttonTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this );
+ m_radioBtnContent->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this );
+ m_buttonContent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this );
+ m_buttonContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this );
+ m_choiceHandleSymlinks->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this );
+ m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnShowHelp ), NULL, this );
+ m_button10->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this );
+ m_button6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this );
}
CmpCfgDlgGenerated::~CmpCfgDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) );
- m_radioBtnSizeDate->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this );
- m_buttonTimeSize->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this );
- m_buttonTimeSize->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this );
- m_radioBtnContent->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this );
- m_buttonContent->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this );
- m_buttonContent->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this );
- m_choiceHandleSymlinks->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this );
- m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnShowHelp ), NULL, this );
- m_button10->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this );
- m_button6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) );
+ m_radioBtnSizeDate->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this );
+ m_buttonTimeSize->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this );
+ m_buttonTimeSize->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this );
+ m_radioBtnContent->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this );
+ m_buttonContent->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this );
+ m_buttonContent->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this );
+ m_choiceHandleSymlinks->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this );
+ m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnShowHelp ), NULL, this );
+ m_button10->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this );
+ m_button6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this );
+
}
SyncStatusDlgGenerated::SyncStatusDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxSize( 470,200 ), wxDefaultSize );
- this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- bSizer27 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer42;
- bSizer42 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer42->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_bitmapStatus = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 28,28 ), 0 );
- bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
-
- m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatus->Wrap( -1 );
- m_staticTextStatus->SetFont( wxFont( 14, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer42->Add( m_staticTextStatus, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_animationControl1 = new wxAnimationCtrl( this, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxDefaultSize, wxAC_DEFAULT_STYLE );
- m_animationControl1->SetMinSize( wxSize( 45,45 ) );
-
- bSizer42->Add( m_animationControl1, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
-
- bSizer42->Add( 0, 0, 1, wxEXPAND, 5 );
-
- bSizer27->Add( bSizer42, 0, wxEXPAND, 5 );
-
- bSizerCurrentOperation = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText2511 = new wxStaticText( this, wxID_ANY, _("Operation:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText2511->Wrap( -1 );
- m_staticText2511->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) );
-
- bSizerCurrentOperation->Add( m_staticText2511, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrlInfo = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
- m_textCtrlInfo->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizerCurrentOperation->Add( m_textCtrlInfo, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer27->Add( bSizerCurrentOperation, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- bSizerHoldStretch = new wxBoxSizer( wxVERTICAL );
-
- bSizer27->Add( bSizerHoldStretch, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- bSizerProgressMain = new wxBoxSizer( wxHORIZONTAL );
-
- bSizerProgressStat = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxHORIZONTAL );
-
- wxFlexGridSizer* fgSizer10;
- fgSizer10 = new wxFlexGridSizer( 0, 2, 0, 10 );
- fgSizer10->SetFlexibleDirection( wxBOTH );
- fgSizer10->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_staticTextItemsRem = new wxStaticText( this, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextItemsRem->Wrap( -1 );
- m_staticTextItemsRem->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- fgSizer10->Add( m_staticTextItemsRem, 0, wxALIGN_BOTTOM, 5 );
-
- bSizerItemsRem = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticTextRemainingObj = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_staticTextRemainingObj->Wrap( -1 );
- m_staticTextRemainingObj->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- bSizerItemsRem->Add( m_staticTextRemainingObj, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticText96 = new wxStaticText( this, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText96->Wrap( -1 );
- m_staticText96->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
-
- bSizerItemsRem->Add( m_staticText96, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
-
- m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDataRemaining->Wrap( -1 );
- m_staticTextDataRemaining->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
-
- bSizerItemsRem->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticText97 = new wxStaticText( this, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText97->Wrap( -1 );
- m_staticText97->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
-
- bSizerItemsRem->Add( m_staticText97, 0, wxALIGN_BOTTOM, 5 );
-
- fgSizer10->Add( bSizerItemsRem, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextSpeedDescr = new wxStaticText( this, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextSpeedDescr->Wrap( -1 );
- m_staticTextSpeedDescr->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- fgSizer10->Add( m_staticTextSpeedDescr, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextSpeed->Wrap( -1 );
- m_staticTextSpeed->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- fgSizer10->Add( m_staticTextSpeed, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticText55 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText55->Wrap( -1 );
- m_staticText55->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- fgSizer10->Add( m_staticText55, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextTimeElapsed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextTimeElapsed->Wrap( -1 );
- m_staticTextTimeElapsed->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- fgSizer10->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextRemTimeDescr = new wxStaticText( this, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextRemTimeDescr->Wrap( -1 );
- m_staticTextRemTimeDescr->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- fgSizer10->Add( m_staticTextRemTimeDescr, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextRemTime = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextRemTime->Wrap( -1 );
- m_staticTextRemTime->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- fgSizer10->Add( m_staticTextRemTime, 0, wxALIGN_BOTTOM, 5 );
-
- bSizerProgressStat->Add( fgSizer10, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- bSizerProgressMain->Add( bSizerProgressStat, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
-
-
- bSizerProgressMain->Add( 10, 0, 0, 0, 5 );
-
- m_panelGraph = new zen::Graph2D( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelGraph->SetBackgroundColour( wxColour( 255, 255, 255 ) );
-
- bSizerProgressMain->Add( m_panelGraph, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 5 );
-
- bSizer27->Add( bSizerProgressMain, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- bSizerFinalStat = new wxBoxSizer( wxVERTICAL );
-
- m_listbookResult = new wxListbook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLB_TOP );
- #ifndef __WXGTK__ // Small icon style not supported in GTK
- wxListView* m_listbookResultListView = m_listbookResult->GetListView();
- long m_listbookResultFlags = m_listbookResultListView->GetWindowStyleFlag();
- m_listbookResultFlags = ( m_listbookResultFlags & ~wxLC_ICON ) | wxLC_SMALL_ICON;
- m_listbookResultListView->SetWindowStyleFlag( m_listbookResultFlags );
- #endif
-
- bSizerFinalStat->Add( m_listbookResult, 1, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer182;
- bSizer182 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer180;
- bSizer180 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticTextItemsProc = new wxStaticText( this, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextItemsProc->Wrap( -1 );
- m_staticTextItemsProc->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer180->Add( m_staticTextItemsProc, 0, wxALIGN_BOTTOM, 5 );
-
-
- bSizer180->Add( 10, 0, 0, 0, 5 );
-
- bSizerItemsProc = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticTextProcessedObj = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_staticTextProcessedObj->Wrap( -1 );
- m_staticTextProcessedObj->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- bSizerItemsProc->Add( m_staticTextProcessedObj, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticText98 = new wxStaticText( this, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText98->Wrap( -1 );
- m_staticText98->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
-
- bSizerItemsProc->Add( m_staticText98, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
-
- m_staticTextDataProcessed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDataProcessed->Wrap( -1 );
- m_staticTextDataProcessed->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
-
- bSizerItemsProc->Add( m_staticTextDataProcessed, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticText99 = new wxStaticText( this, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText99->Wrap( -1 );
- m_staticText99->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
-
- bSizerItemsProc->Add( m_staticText99, 0, wxALIGN_BOTTOM, 5 );
-
- bSizer180->Add( bSizerItemsProc, 0, wxALIGN_BOTTOM, 5 );
-
- bSizer182->Add( bSizer180, 0, wxALIGN_BOTTOM, 5 );
-
-
- bSizer182->Add( 0, 0, 1, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer181;
- bSizer181 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText551 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText551->Wrap( -1 );
- m_staticText551->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer181->Add( m_staticText551, 0, wxALIGN_BOTTOM, 5 );
-
-
- bSizer181->Add( 10, 0, 0, 0, 5 );
-
- m_staticTextTimeTotal = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextTimeTotal->Wrap( -1 );
- m_staticTextTimeTotal->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
-
- bSizer181->Add( m_staticTextTimeTotal, 0, wxALIGN_BOTTOM, 5 );
-
- bSizer182->Add( bSizer181, 0, wxALIGN_BOTTOM, 5 );
-
- bSizerFinalStat->Add( bSizer182, 0, wxEXPAND, 5 );
-
- bSizer27->Add( bSizerFinalStat, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- m_gauge1 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL );
- bSizer27->Add( m_gauge1, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- bSizer28 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer28->Add( 0, 0, 1, 0, 5 );
-
- m_buttonOK = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( 100,32 ), 0 );
- m_buttonOK->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
- m_buttonOK->Enable( false );
- m_buttonOK->Hide();
-
- bSizer28->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_buttonPause = new wxButton( this, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( 100,32 ), 0 );
- m_buttonPause->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer28->Add( m_buttonPause, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonAbort = new wxButton( this, wxID_CANCEL, _("&Abort"), wxDefaultPosition, wxSize( 100,32 ), 0 );
- m_buttonAbort->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer28->Add( m_buttonAbort, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer28->Add( 0, 0, 1, wxEXPAND, 5 );
-
- bSizer27->Add( bSizer28, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
-
- this->SetSizer( bSizer27 );
- this->Layout();
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncStatusDlgGenerated::OnClose ) );
- this->Connect( wxEVT_ICONIZE, wxIconizeEventHandler( SyncStatusDlgGenerated::OnIconize ) );
- m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnOkay ), NULL, this );
- m_buttonPause->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnPause ), NULL, this );
- m_buttonAbort->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnAbort ), NULL, this );
+ this->SetSizeHints( wxSize( 470,200 ), wxDefaultSize );
+
+ wxBoxSizer* bSizer172;
+ bSizer172 = new wxBoxSizer( wxVERTICAL );
+
+ m_panelBackground = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ bSizerTop = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer42;
+ bSizer42 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapStatus = new wxStaticBitmap( m_panelBackground, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 28,28 ), 0 );
+ bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
+
+ m_staticTextStatus = new wxStaticText( m_panelBackground, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatus->Wrap( -1 );
+ m_staticTextStatus->SetFont( wxFont( 14, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer42->Add( m_staticTextStatus, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_animationControl1 = new wxAnimationCtrl( m_panelBackground, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxDefaultSize, wxAC_DEFAULT_STYLE );
+ m_animationControl1->SetMinSize( wxSize( 45,45 ) );
+
+ bSizer42->Add( m_animationControl1, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ bSizerTop->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizerCurrentOperation = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText2511 = new wxStaticText( m_panelBackground, wxID_ANY, _("Operation:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText2511->Wrap( -1 );
+ m_staticText2511->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) );
+
+ bSizerCurrentOperation->Add( m_staticText2511, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlInfo = new wxTextCtrl( m_panelBackground, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
+ m_textCtrlInfo->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizerCurrentOperation->Add( m_textCtrlInfo, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerTop->Add( bSizerCurrentOperation, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ m_panelProgress = new wxPanel( m_panelBackground, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ bSizer171 = new wxBoxSizer( wxHORIZONTAL );
+
+ bSizerProgressStat = new wxStaticBoxSizer( new wxStaticBox( m_panelProgress, wxID_ANY, wxEmptyString ), wxHORIZONTAL );
+
+ wxFlexGridSizer* fgSizer10;
+ fgSizer10 = new wxFlexGridSizer( 0, 2, 0, 10 );
+ fgSizer10->SetFlexibleDirection( wxBOTH );
+ fgSizer10->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_staticTextItemsRem = new wxStaticText( m_panelProgress, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextItemsRem->Wrap( -1 );
+ m_staticTextItemsRem->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ fgSizer10->Add( m_staticTextItemsRem, 0, wxALIGN_BOTTOM, 5 );
+
+ bSizerItemsRem = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextRemainingObj = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_staticTextRemainingObj->Wrap( -1 );
+ m_staticTextRemainingObj->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
+
+ bSizerItemsRem->Add( m_staticTextRemainingObj, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticText96 = new wxStaticText( m_panelProgress, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText96->Wrap( -1 );
+ m_staticText96->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
+
+ bSizerItemsRem->Add( m_staticText96, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
+
+ m_staticTextDataRemaining = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDataRemaining->Wrap( -1 );
+ m_staticTextDataRemaining->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
+
+ bSizerItemsRem->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticText97 = new wxStaticText( m_panelProgress, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText97->Wrap( -1 );
+ m_staticText97->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
+
+ bSizerItemsRem->Add( m_staticText97, 0, wxALIGN_BOTTOM, 5 );
+
+ fgSizer10->Add( bSizerItemsRem, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextItemsProc = new wxStaticText( m_panelProgress, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextItemsProc->Wrap( -1 );
+ m_staticTextItemsProc->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ fgSizer10->Add( m_staticTextItemsProc, 0, wxALIGN_BOTTOM, 5 );
+
+ bSizerItemsProc = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextProcessedObj = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_staticTextProcessedObj->Wrap( -1 );
+ m_staticTextProcessedObj->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
+
+ bSizerItemsProc->Add( m_staticTextProcessedObj, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticText98 = new wxStaticText( m_panelProgress, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText98->Wrap( -1 );
+ m_staticText98->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
+
+ bSizerItemsProc->Add( m_staticText98, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
+
+ m_staticTextDataProcessed = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDataProcessed->Wrap( -1 );
+ m_staticTextDataProcessed->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
+
+ bSizerItemsProc->Add( m_staticTextDataProcessed, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticText99 = new wxStaticText( m_panelProgress, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText99->Wrap( -1 );
+ m_staticText99->SetFont( wxFont( 9, 74, 90, 90, false, wxT("Arial") ) );
+
+ bSizerItemsProc->Add( m_staticText99, 0, wxALIGN_BOTTOM, 5 );
+
+ fgSizer10->Add( bSizerItemsProc, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextSpeedDescr = new wxStaticText( m_panelProgress, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextSpeedDescr->Wrap( -1 );
+ m_staticTextSpeedDescr->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ fgSizer10->Add( m_staticTextSpeedDescr, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextSpeed = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextSpeed->Wrap( -1 );
+ m_staticTextSpeed->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
+
+ fgSizer10->Add( m_staticTextSpeed, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticText55 = new wxStaticText( m_panelProgress, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText55->Wrap( -1 );
+ m_staticText55->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ fgSizer10->Add( m_staticText55, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextTimeElapsed = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTimeElapsed->Wrap( -1 );
+ m_staticTextTimeElapsed->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
+
+ fgSizer10->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextRemTimeDescr = new wxStaticText( m_panelProgress, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRemTimeDescr->Wrap( -1 );
+ m_staticTextRemTimeDescr->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ fgSizer10->Add( m_staticTextRemTimeDescr, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextRemTime = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRemTime->Wrap( -1 );
+ m_staticTextRemTime->SetFont( wxFont( 9, 74, 90, 92, false, wxT("Arial") ) );
+
+ fgSizer10->Add( m_staticTextRemTime, 0, wxALIGN_BOTTOM, 5 );
+
+ bSizerProgressStat->Add( fgSizer10, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ bSizer171->Add( bSizerProgressStat, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
+
+
+ bSizer171->Add( 10, 0, 0, 0, 5 );
+
+ m_panelGraph = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelGraph->SetBackgroundColour( wxColour( 255, 255, 255 ) );
+
+ bSizer171->Add( m_panelGraph, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 5 );
+
+ m_panelProgress->SetSizer( bSizer171 );
+ m_panelProgress->Layout();
+ bSizer171->Fit( m_panelProgress );
+ bSizerTop->Add( m_panelProgress, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ bSizerFinalStat = new wxBoxSizer( wxVERTICAL );
+
+ m_listbookResult = new wxListbook( m_panelBackground, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLB_TOP );
+#ifndef __WXGTK__ // Small icon style not supported in GTK
+ wxListView* m_listbookResultListView = m_listbookResult->GetListView();
+ long m_listbookResultFlags = m_listbookResultListView->GetWindowStyleFlag();
+ m_listbookResultFlags = ( m_listbookResultFlags & ~wxLC_ICON ) | wxLC_SMALL_ICON;
+ m_listbookResultListView->SetWindowStyleFlag( m_listbookResultFlags );
+#endif
+
+ bSizerFinalStat->Add( m_listbookResult, 1, wxEXPAND, 5 );
+
+ bSizerTop->Add( bSizerFinalStat, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_gauge1 = new wxGauge( m_panelBackground, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL );
+ bSizerTop->Add( m_gauge1, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ bSizer28 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer28->Add( 0, 0, 1, 0, 5 );
+
+ m_buttonOK = new wxButton( m_panelBackground, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( 100,32 ), 0 );
+ m_buttonOK->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+ m_buttonOK->Enable( false );
+
+ bSizer28->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_buttonPause = new wxButton( m_panelBackground, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( 100,32 ), 0 );
+ m_buttonPause->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer28->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_buttonAbort = new wxButton( m_panelBackground, wxID_CANCEL, _("&Abort"), wxDefaultPosition, wxSize( 100,32 ), 0 );
+ m_buttonAbort->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer28->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizer28->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ bSizerTop->Add( bSizer28, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_panelBackground->SetSizer( bSizerTop );
+ m_panelBackground->Layout();
+ bSizerTop->Fit( m_panelBackground );
+ bSizer172->Add( m_panelBackground, 1, wxEXPAND, 5 );
+
+ this->SetSizer( bSizer172 );
+ this->Layout();
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncStatusDlgGenerated::OnClose ) );
+ this->Connect( wxEVT_ICONIZE, wxIconizeEventHandler( SyncStatusDlgGenerated::OnIconize ) );
+ m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnOkay ), NULL, this );
+ m_buttonPause->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnPause ), NULL, this );
+ m_buttonAbort->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnAbort ), NULL, this );
}
SyncStatusDlgGenerated::~SyncStatusDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncStatusDlgGenerated::OnClose ) );
- this->Disconnect( wxEVT_ICONIZE, wxIconizeEventHandler( SyncStatusDlgGenerated::OnIconize ) );
- m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnOkay ), NULL, this );
- m_buttonPause->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnPause ), NULL, this );
- m_buttonAbort->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnAbort ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncStatusDlgGenerated::OnClose ) );
+ this->Disconnect( wxEVT_ICONIZE, wxIconizeEventHandler( SyncStatusDlgGenerated::OnIconize ) );
+ m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnOkay ), NULL, this );
+ m_buttonPause->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnPause ), NULL, this );
+ m_buttonAbort->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnAbort ), NULL, this );
+
+}
+
+MyPanel5::MyPanel5( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
+{
+}
+
+MyPanel5::~MyPanel5()
+{
}
LogControlGenerated::LogControlGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
- wxBoxSizer* bSizer153;
- bSizer153 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer154;
- bSizer154 = new wxBoxSizer( wxVERTICAL );
-
- m_bpButtonErrors = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), wxBU_AUTODRAW );
- bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonWarnings = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), wxBU_AUTODRAW );
- bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonInfo = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), wxBU_AUTODRAW );
- bSizer154->Add( m_bpButtonInfo, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizer153->Add( bSizer154, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_textCtrlInfo = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY );
- m_textCtrlInfo->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer153->Add( m_textCtrlInfo, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- this->SetSizer( bSizer153 );
- this->Layout();
- bSizer153->Fit( this );
-
- // Connect Events
- m_bpButtonErrors->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnErrors ), NULL, this );
- m_bpButtonWarnings->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnWarnings ), NULL, this );
- m_bpButtonInfo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnInfo ), NULL, this );
+ wxBoxSizer* bSizer153;
+ bSizer153 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer154;
+ bSizer154 = new wxBoxSizer( wxVERTICAL );
+
+ m_bpButtonErrors = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), wxBU_AUTODRAW );
+ bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonWarnings = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), wxBU_AUTODRAW );
+ bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonInfo = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), wxBU_AUTODRAW );
+ bSizer154->Add( m_bpButtonInfo, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizer153->Add( bSizer154, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_textCtrlInfo = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY );
+ m_textCtrlInfo->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer153->Add( m_textCtrlInfo, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ this->SetSizer( bSizer153 );
+ this->Layout();
+ bSizer153->Fit( this );
+
+ // Connect Events
+ m_bpButtonErrors->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnErrors ), NULL, this );
+ m_bpButtonWarnings->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnWarnings ), NULL, this );
+ m_bpButtonInfo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnInfo ), NULL, this );
}
LogControlGenerated::~LogControlGenerated()
{
- // Disconnect Events
- m_bpButtonErrors->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnErrors ), NULL, this );
- m_bpButtonWarnings->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnWarnings ), NULL, this );
- m_bpButtonInfo->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnInfo ), NULL, this );
-
+ // Disconnect Events
+ m_bpButtonErrors->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnErrors ), NULL, this );
+ m_bpButtonWarnings->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnWarnings ), NULL, this );
+ m_bpButtonInfo->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnInfo ), NULL, this );
+
}
AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer31;
- bSizer31 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer31->Add( 0, 5, 0, 0, 5 );
-
- m_panel5 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxSIMPLE_BORDER|wxTAB_TRAVERSAL );
- m_panel5->SetBackgroundColour( wxColour( 255, 255, 255 ) );
-
- wxBoxSizer* bSizer36;
- bSizer36 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmap11 = new wxStaticBitmap( m_panel5, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 404,55 ), 0 );
- bSizer36->Add( m_bitmap11, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panel5->SetSizer( bSizer36 );
- m_panel5->Layout();
- bSizer36->Fit( m_panel5 );
- bSizer31->Add( m_panel5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_build = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_build->Wrap( -1 );
- m_build->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer31->Add( m_build, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
-
- bSizer31->Add( 0, 10, 0, 0, 5 );
-
- wxBoxSizer* bSizer53;
- bSizer53 = new wxBoxSizer( wxVERTICAL );
-
- m_panel33 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDOUBLE_BORDER|wxTAB_TRAVERSAL );
- m_panel33->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizerCodeInfo = new wxBoxSizer( wxVERTICAL );
-
- m_staticText72 = new wxStaticText( m_panel33, wxID_ANY, _("Source code written in C++ utilizing:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText72->Wrap( -1 );
- m_staticText72->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizerCodeInfo->Add( m_staticText72, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- wxBoxSizer* bSizer167;
- bSizer167 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer171;
- bSizer171 = new wxBoxSizer( wxHORIZONTAL );
-
- m_hyperlink9 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("MinGW"), wxT("http://www.mingw.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink9->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer171->Add( m_hyperlink9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink11 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("MS Visual C++"), wxT("http://msdn.microsoft.com/library/60k1461a.aspx"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink11->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer171->Add( m_hyperlink11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink10 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Code::Blocks"), wxT("http://www.codeblocks.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink10->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer171->Add( m_hyperlink10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink13 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Boost"), wxT("http://www.boost.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink13->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer171->Add( m_hyperlink13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink7 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("wxWidgets"), wxT("http://www.wxwidgets.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink7->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer171->Add( m_hyperlink7, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink16 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Artistic Style"), wxT("http://astyle.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink16->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer171->Add( m_hyperlink16, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- bSizer167->Add( bSizer171, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer172;
- bSizer172 = new wxBoxSizer( wxHORIZONTAL );
-
- m_hyperlink8 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Loki"), wxT("http://sourceforge.net/projects/loki-lib"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink8->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer172->Add( m_hyperlink8, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink15 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("zenXML"), wxT("http://sourceforge.net/projects/zenxml/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink15->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer172->Add( m_hyperlink15, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink12 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Google Test"), wxT("http://code.google.com/p/googletest"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink12->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer172->Add( m_hyperlink12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink18 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Unicode NSIS"), wxT("http://www.scratchpaper.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink18->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer172->Add( m_hyperlink18, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink14 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("wxFormBuilder"), wxT("http://wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink14->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer172->Add( m_hyperlink14, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- bSizer167->Add( bSizer172, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizerCodeInfo->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_hyperlink21 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("- ZenJu -"), wxT("mailto:zhnmju123@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink21->SetFont( wxFont( 10, 74, 93, 92, false, wxT("Segoe Print") ) );
- m_hyperlink21->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_hyperlink21->SetToolTip( _("zhnmju123@gmx.de") );
-
- bSizerCodeInfo->Add( m_hyperlink21, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_panel33->SetSizer( bSizerCodeInfo );
- m_panel33->Layout();
- bSizerCodeInfo->Fit( m_panel33 );
- bSizer53->Add( m_panel33, 0, wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_scrolledWindowTranslators = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxDOUBLE_BORDER|wxHSCROLL|wxVSCROLL );
- m_scrolledWindowTranslators->SetScrollRate( 5, 5 );
- m_scrolledWindowTranslators->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_scrolledWindowTranslators->SetMinSize( wxSize( -1,180 ) );
-
- bSizerTranslators = new wxBoxSizer( wxVERTICAL );
-
- m_staticText54 = new wxStaticText( m_scrolledWindowTranslators, wxID_ANY, _("Big thanks for localizing FreeFileSync goes out to:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText54->Wrap( -1 );
- m_staticText54->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
-
- bSizerTranslators->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM, 5 );
-
-
- bSizerTranslators->Add( 0, 5, 0, 0, 5 );
-
- fgSizerTranslators = new wxFlexGridSizer( 50, 3, 5, 20 );
- fgSizerTranslators->SetFlexibleDirection( wxBOTH );
- fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- bSizerTranslators->Add( fgSizerTranslators, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_scrolledWindowTranslators->SetSizer( bSizerTranslators );
- m_scrolledWindowTranslators->Layout();
- bSizerTranslators->Fit( m_scrolledWindowTranslators );
- bSizer53->Add( m_scrolledWindowTranslators, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM, 5 );
-
- bSizer31->Add( bSizer53, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 25 );
-
- m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer31->Add( m_staticline3, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
-
- m_staticText131 = new wxStaticText( this, wxID_ANY, _("Feedback and suggestions are welcome at:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText131->Wrap( -1 );
- m_staticText131->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer31->Add( m_staticText131, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer31->Add( m_staticline12, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer156;
- bSizer156 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmap9 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
- m_bitmap9->SetToolTip( _("FreeFileSync at Sourceforge") );
-
- bSizer156->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_hyperlink1 = new wxHyperlinkCtrl( this, wxID_ANY, _("Homepage"), wxT("http://sourceforge.net/projects/freefilesync/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink1->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) );
- m_hyperlink1->SetToolTip( _("http://sourceforge.net/projects/freefilesync/") );
-
- bSizer156->Add( m_hyperlink1, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer156->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_hyperlink3 = new wxHyperlinkCtrl( this, wxID_ANY, _("If you like FFS"), wxT("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zhnmju123@gmx.de&lc=US&currency_code=EUR"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink3->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) );
- m_hyperlink3->SetToolTip( _("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zhnmju123@gmx.de&lc=US&currency_code=EUR") );
-
- bSizer156->Add( m_hyperlink3, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_animationControl1 = new wxAnimationCtrl( this, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( -1,-1 ), wxAC_DEFAULT_STYLE );
- m_animationControl1->SetToolTip( _("Donate with PayPal") );
- m_animationControl1->SetMinSize( wxSize( 48,48 ) );
-
- bSizer156->Add( m_animationControl1, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- bSizer31->Add( bSizer156, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 10 );
-
- wxBoxSizer* bSizer158;
- bSizer158 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmap10 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
- m_bitmap10->SetToolTip( _("Email") );
-
- bSizer158->Add( m_bitmap10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_hyperlink2 = new wxHyperlinkCtrl( this, wxID_ANY, _("Email"), wxT("mailto:zhnmju123@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink2->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) );
- m_hyperlink2->SetToolTip( _("zhnmju123@gmx.de") );
-
- bSizer158->Add( m_hyperlink2, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer158->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_hyperlink6 = new wxHyperlinkCtrl( this, wxID_ANY, _("Report translation error"), wxT("http://sourceforge.net/projects/freefilesync/forums/forum/976976"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink6->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) );
- m_hyperlink6->SetToolTip( _("http://sourceforge.net/projects/freefilesync/forums/forum/976976") );
-
- bSizer158->Add( m_hyperlink6, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapTransl = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
- m_bitmapTransl->SetToolTip( _("Report translation error") );
-
- bSizer158->Add( m_bitmapTransl, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- bSizer31->Add( bSizer158, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 10 );
-
- m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer31->Add( m_staticline2, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
-
- wxStaticBoxSizer* sbSizer14;
- sbSizer14 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Published under the GNU General Public License:") ), wxHORIZONTAL );
-
-
- sbSizer14->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmap13 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 88,31 ), 0 );
- sbSizer14->Add( m_bitmap13, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_hyperlink5 = new wxHyperlinkCtrl( this, wxID_ANY, _("http://www.gnu.org/licenses/gpl.html"), wxT("http://www.gnu.org/licenses/gpl.html"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- sbSizer14->Add( m_hyperlink5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- sbSizer14->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer31->Add( sbSizer14, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- m_buttonOkay = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( 100,32 ), 0 );
- m_buttonOkay->SetDefault();
- m_buttonOkay->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer31->Add( m_buttonOkay, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
-
- this->SetSizer( bSizer31 );
- this->Layout();
- bSizer31->Fit( this );
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) );
- m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer31;
+ bSizer31 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer31->Add( 0, 5, 0, 0, 5 );
+
+ m_panel5 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxSIMPLE_BORDER|wxTAB_TRAVERSAL );
+ m_panel5->SetBackgroundColour( wxColour( 255, 255, 255 ) );
+
+ wxBoxSizer* bSizer36;
+ bSizer36 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmap11 = new wxStaticBitmap( m_panel5, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 404,55 ), 0 );
+ bSizer36->Add( m_bitmap11, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panel5->SetSizer( bSizer36 );
+ m_panel5->Layout();
+ bSizer36->Fit( m_panel5 );
+ bSizer31->Add( m_panel5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_build = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_build->Wrap( -1 );
+ m_build->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer31->Add( m_build, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ bSizer31->Add( 0, 10, 0, 0, 5 );
+
+ wxBoxSizer* bSizer53;
+ bSizer53 = new wxBoxSizer( wxVERTICAL );
+
+ m_panel33 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDOUBLE_BORDER|wxTAB_TRAVERSAL );
+ m_panel33->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizerCodeInfo = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText72 = new wxStaticText( m_panel33, wxID_ANY, _("Source code written in C++ utilizing:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText72->Wrap( -1 );
+ m_staticText72->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerCodeInfo->Add( m_staticText72, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer167;
+ bSizer167 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer171;
+ bSizer171 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_hyperlink9 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("MinGW"), wxT("http://www.mingw.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink9->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer171->Add( m_hyperlink9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink11 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("MS Visual C++"), wxT("http://msdn.microsoft.com/library/60k1461a.aspx"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink11->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer171->Add( m_hyperlink11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink10 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Code::Blocks"), wxT("http://www.codeblocks.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink10->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer171->Add( m_hyperlink10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink13 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Boost"), wxT("http://www.boost.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink13->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer171->Add( m_hyperlink13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink7 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("wxWidgets"), wxT("http://www.wxwidgets.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink7->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer171->Add( m_hyperlink7, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink16 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Artistic Style"), wxT("http://astyle.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink16->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer171->Add( m_hyperlink16, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ bSizer167->Add( bSizer171, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer172;
+ bSizer172 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_hyperlink8 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Loki"), wxT("http://sourceforge.net/projects/loki-lib"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink8->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer172->Add( m_hyperlink8, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink15 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("zenXML"), wxT("http://sourceforge.net/projects/zenxml/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink15->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer172->Add( m_hyperlink15, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink12 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Google Test"), wxT("http://code.google.com/p/googletest"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink12->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer172->Add( m_hyperlink12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink18 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Unicode NSIS"), wxT("http://www.scratchpaper.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink18->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer172->Add( m_hyperlink18, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink14 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("wxFormBuilder"), wxT("http://wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink14->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer172->Add( m_hyperlink14, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ bSizer167->Add( bSizer172, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizerCodeInfo->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_hyperlink21 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("- ZenJu -"), wxT("mailto:zhnmju123@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink21->SetFont( wxFont( 10, 74, 93, 92, false, wxT("Segoe Print") ) );
+ m_hyperlink21->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_hyperlink21->SetToolTip( _("zhnmju123@gmx.de") );
+
+ bSizerCodeInfo->Add( m_hyperlink21, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_panel33->SetSizer( bSizerCodeInfo );
+ m_panel33->Layout();
+ bSizerCodeInfo->Fit( m_panel33 );
+ bSizer53->Add( m_panel33, 0, wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_scrolledWindowTranslators = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxDOUBLE_BORDER|wxHSCROLL|wxVSCROLL );
+ m_scrolledWindowTranslators->SetScrollRate( 5, 5 );
+ m_scrolledWindowTranslators->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_scrolledWindowTranslators->SetMinSize( wxSize( -1,180 ) );
+
+ bSizerTranslators = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText54 = new wxStaticText( m_scrolledWindowTranslators, wxID_ANY, _("Big thanks for localizing FreeFileSync goes out to:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText54->Wrap( -1 );
+ m_staticText54->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerTranslators->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM, 5 );
+
+
+ bSizerTranslators->Add( 0, 5, 0, 0, 5 );
+
+ fgSizerTranslators = new wxFlexGridSizer( 50, 3, 5, 20 );
+ fgSizerTranslators->SetFlexibleDirection( wxBOTH );
+ fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ bSizerTranslators->Add( fgSizerTranslators, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_scrolledWindowTranslators->SetSizer( bSizerTranslators );
+ m_scrolledWindowTranslators->Layout();
+ bSizerTranslators->Fit( m_scrolledWindowTranslators );
+ bSizer53->Add( m_scrolledWindowTranslators, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM, 5 );
+
+ bSizer31->Add( bSizer53, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 25 );
+
+ m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer31->Add( m_staticline3, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
+
+ m_staticText131 = new wxStaticText( this, wxID_ANY, _("Feedback and suggestions are welcome at:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText131->Wrap( -1 );
+ m_staticText131->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer31->Add( m_staticText131, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer31->Add( m_staticline12, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer156;
+ bSizer156 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmap9 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
+ m_bitmap9->SetToolTip( _("FreeFileSync at Sourceforge") );
+
+ bSizer156->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_hyperlink1 = new wxHyperlinkCtrl( this, wxID_ANY, _("Homepage"), wxT("http://sourceforge.net/projects/freefilesync/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink1->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) );
+ m_hyperlink1->SetToolTip( _("http://sourceforge.net/projects/freefilesync/") );
+
+ bSizer156->Add( m_hyperlink1, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer156->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_hyperlink3 = new wxHyperlinkCtrl( this, wxID_ANY, _("If you like FFS"), wxT("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zhnmju123@gmx.de&lc=US&currency_code=EUR"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink3->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) );
+ m_hyperlink3->SetToolTip( _("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zhnmju123@gmx.de&lc=US&currency_code=EUR") );
+
+ bSizer156->Add( m_hyperlink3, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_animationControl1 = new wxAnimationCtrl( this, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( -1,-1 ), wxAC_DEFAULT_STYLE );
+ m_animationControl1->SetToolTip( _("Donate with PayPal") );
+ m_animationControl1->SetMinSize( wxSize( 48,48 ) );
+
+ bSizer156->Add( m_animationControl1, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ bSizer31->Add( bSizer156, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 10 );
+
+ wxBoxSizer* bSizer158;
+ bSizer158 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmap10 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
+ m_bitmap10->SetToolTip( _("Email") );
+
+ bSizer158->Add( m_bitmap10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_hyperlink2 = new wxHyperlinkCtrl( this, wxID_ANY, _("Email"), wxT("mailto:zhnmju123@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink2->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) );
+ m_hyperlink2->SetToolTip( _("zhnmju123@gmx.de") );
+
+ bSizer158->Add( m_hyperlink2, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer158->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_hyperlink6 = new wxHyperlinkCtrl( this, wxID_ANY, _("Report translation error"), wxT("http://sourceforge.net/projects/freefilesync/forums/forum/976976"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink6->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) );
+ m_hyperlink6->SetToolTip( _("http://sourceforge.net/projects/freefilesync/forums/forum/976976") );
+
+ bSizer158->Add( m_hyperlink6, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapTransl = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
+ m_bitmapTransl->SetToolTip( _("Report translation error") );
+
+ bSizer158->Add( m_bitmapTransl, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ bSizer31->Add( bSizer158, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 10 );
+
+ m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer31->Add( m_staticline2, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
+
+ wxStaticBoxSizer* sbSizer14;
+ sbSizer14 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Published under the GNU General Public License:") ), wxHORIZONTAL );
+
+
+ sbSizer14->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmap13 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 88,31 ), 0 );
+ sbSizer14->Add( m_bitmap13, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_hyperlink5 = new wxHyperlinkCtrl( this, wxID_ANY, _("http://www.gnu.org/licenses/gpl.html"), wxT("http://www.gnu.org/licenses/gpl.html"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ sbSizer14->Add( m_hyperlink5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ sbSizer14->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer31->Add( sbSizer14, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ m_buttonOkay = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( 100,32 ), 0 );
+ m_buttonOkay->SetDefault();
+ m_buttonOkay->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer31->Add( m_buttonOkay, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+ this->SetSizer( bSizer31 );
+ this->Layout();
+ bSizer31->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) );
+ m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this );
}
AboutDlgGenerated::~AboutDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) );
- m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) );
+ m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this );
+
}
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( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer24;
- bSizer24 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer24->Add( 0, 10, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer26;
- bSizer26 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmap10 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
- bSizer26->Add( m_bitmap10, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrl8 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE|wxTE_READONLY );
- m_textCtrl8->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer26->Add( m_textCtrl8, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- bSizer24->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_checkBoxIgnoreErrors = new wxCheckBox( this, wxID_ANY, _("Ignore subsequent errors"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxIgnoreErrors->SetToolTip( _("Hide further error messages during the current process") );
-
- bSizer24->Add( m_checkBoxIgnoreErrors, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 );
-
-
- bSizer24->Add( 0, 5, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer25;
- bSizer25 = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonIgnore = new wxButton( this, wxID_OK, _("&Ignore"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonIgnore->SetDefault();
- m_buttonIgnore->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonIgnore, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_buttonRetry = new wxButton( this, wxID_RETRY, _("&Retry"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonRetry->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonRetry, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_buttonAbort = new wxButton( this, wxID_CANCEL, _("&Abort"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonAbort->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonAbort, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
-
- bSizer25->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer24->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- this->SetSizer( bSizer24 );
- this->Layout();
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ErrorDlgGenerated::OnClose ) );
- m_buttonIgnore->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnIgnore ), NULL, this );
- m_buttonRetry->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnRetry ), NULL, this );
- m_buttonAbort->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnAbort ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer24;
+ bSizer24 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer24->Add( 0, 10, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer26;
+ bSizer26 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmap10 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
+ bSizer26->Add( m_bitmap10, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrl8 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE|wxTE_READONLY );
+ m_textCtrl8->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer26->Add( m_textCtrl8, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ bSizer24->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_checkBoxIgnoreErrors = new wxCheckBox( this, wxID_ANY, _("Ignore subsequent errors"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxIgnoreErrors->SetToolTip( _("Hide further error messages during the current process") );
+
+ bSizer24->Add( m_checkBoxIgnoreErrors, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 );
+
+
+ bSizer24->Add( 0, 5, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer25;
+ bSizer25 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonIgnore = new wxButton( this, wxID_OK, _("&Ignore"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonIgnore->SetDefault();
+ m_buttonIgnore->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonIgnore, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_buttonRetry = new wxButton( this, wxID_RETRY, _("&Retry"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonRetry->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonRetry, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_buttonAbort = new wxButton( this, wxID_CANCEL, _("&Abort"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonAbort->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonAbort, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+
+ bSizer25->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer24->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ this->SetSizer( bSizer24 );
+ this->Layout();
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ErrorDlgGenerated::OnClose ) );
+ m_buttonIgnore->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnIgnore ), NULL, this );
+ m_buttonRetry->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnRetry ), NULL, this );
+ m_buttonAbort->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnAbort ), NULL, this );
}
ErrorDlgGenerated::~ErrorDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ErrorDlgGenerated::OnClose ) );
- m_buttonIgnore->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnIgnore ), NULL, this );
- m_buttonRetry->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnRetry ), NULL, this );
- m_buttonAbort->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnAbort ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ErrorDlgGenerated::OnClose ) );
+ m_buttonIgnore->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnIgnore ), NULL, this );
+ m_buttonRetry->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnRetry ), NULL, this );
+ m_buttonAbort->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ErrorDlgGenerated::OnAbort ), NULL, this );
+
}
WarningDlgGenerated::WarningDlgGenerated( 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* bSizer24;
- bSizer24 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer24->Add( 0, 10, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer26;
- bSizer26 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmap10 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
- bSizer26->Add( m_bitmap10, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrl8 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE|wxTE_READONLY );
- m_textCtrl8->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer26->Add( m_textCtrl8, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- bSizer24->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("Do not show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer24->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 );
-
-
- bSizer24->Add( 0, 5, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer25;
- bSizer25 = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonIgnore = new wxButton( this, wxID_IGNORE, _("&Ignore"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonIgnore->SetDefault();
- m_buttonIgnore->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonIgnore, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_buttonSwitch = new wxButton( this, wxID_MORE, _("&Switch"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonSwitch->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonSwitch, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_buttonAbort = new wxButton( this, wxID_CANCEL, _("&Abort"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonAbort->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonAbort, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
-
- bSizer25->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer24->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- this->SetSizer( bSizer24 );
- this->Layout();
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( WarningDlgGenerated::OnClose ) );
- m_buttonIgnore->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnIgnore ), NULL, this );
- m_buttonSwitch->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnSwitch ), NULL, this );
- m_buttonAbort->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnAbort ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer24;
+ bSizer24 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer24->Add( 0, 10, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer26;
+ bSizer26 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmap10 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
+ bSizer26->Add( m_bitmap10, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrl8 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE|wxTE_READONLY );
+ m_textCtrl8->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer26->Add( m_textCtrl8, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ bSizer24->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("Do not show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer24->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 );
+
+
+ bSizer24->Add( 0, 5, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer25;
+ bSizer25 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonIgnore = new wxButton( this, wxID_IGNORE, _("&Ignore"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonIgnore->SetDefault();
+ m_buttonIgnore->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonIgnore, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_buttonSwitch = new wxButton( this, wxID_MORE, _("&Switch"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonSwitch->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonSwitch, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_buttonAbort = new wxButton( this, wxID_CANCEL, _("&Abort"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonAbort->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonAbort, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+
+ bSizer25->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer24->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ this->SetSizer( bSizer24 );
+ this->Layout();
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( WarningDlgGenerated::OnClose ) );
+ m_buttonIgnore->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnIgnore ), NULL, this );
+ m_buttonSwitch->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnSwitch ), NULL, this );
+ m_buttonAbort->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnAbort ), NULL, this );
}
WarningDlgGenerated::~WarningDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( WarningDlgGenerated::OnClose ) );
- m_buttonIgnore->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnIgnore ), NULL, this );
- m_buttonSwitch->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnSwitch ), NULL, this );
- m_buttonAbort->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnAbort ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( WarningDlgGenerated::OnClose ) );
+ m_buttonIgnore->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnIgnore ), NULL, this );
+ m_buttonSwitch->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnSwitch ), NULL, this );
+ m_buttonAbort->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarningDlgGenerated::OnAbort ), NULL, this );
+
}
QuestionDlgGenerated::QuestionDlgGenerated( 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* bSizer24;
- bSizer24 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer24->Add( 0, 10, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer26;
- bSizer26 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmap10 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
- bSizer26->Add( m_bitmap10, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrl8 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE|wxTE_READONLY );
- m_textCtrl8->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer26->Add( m_textCtrl8, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- bSizer24->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_checkBoxDontAskAgain = new wxCheckBox( this, wxID_ANY, _("Do not show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer24->Add( m_checkBoxDontAskAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 );
-
-
- bSizer24->Add( 0, 5, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer25;
- bSizer25 = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonYes = new wxButton( this, wxID_YES, _("&Yes"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonYes->SetDefault();
- m_buttonYes->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonYes, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_buttonNo = new wxButton( this, wxID_NO, _("&No"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonNo->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonNo, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_buttonCancel = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonCancel->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonCancel, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
-
- bSizer25->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer24->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- this->SetSizer( bSizer24 );
- this->Layout();
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( QuestionDlgGenerated::OnClose ) );
- m_checkBoxDontAskAgain->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnCheckBoxDontShowAgain ), NULL, this );
- m_buttonYes->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnYes ), NULL, this );
- m_buttonNo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnNo ), NULL, this );
- m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer24;
+ bSizer24 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer24->Add( 0, 10, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer26;
+ bSizer26 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmap10 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
+ bSizer26->Add( m_bitmap10, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrl8 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE|wxTE_READONLY );
+ m_textCtrl8->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer26->Add( m_textCtrl8, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ bSizer24->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_checkBoxDontAskAgain = new wxCheckBox( this, wxID_ANY, _("Do not show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer24->Add( m_checkBoxDontAskAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 );
+
+
+ bSizer24->Add( 0, 5, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer25;
+ bSizer25 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonYes = new wxButton( this, wxID_YES, _("&Yes"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonYes->SetDefault();
+ m_buttonYes->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonYes, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_buttonNo = new wxButton( this, wxID_NO, _("&No"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonNo->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonNo, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_buttonCancel = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonCancel->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonCancel, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+
+ bSizer25->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer24->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ this->SetSizer( bSizer24 );
+ this->Layout();
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( QuestionDlgGenerated::OnClose ) );
+ m_checkBoxDontAskAgain->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnCheckBoxDontShowAgain ), NULL, this );
+ m_buttonYes->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnYes ), NULL, this );
+ m_buttonNo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnNo ), NULL, this );
+ m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnCancel ), NULL, this );
}
QuestionDlgGenerated::~QuestionDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( QuestionDlgGenerated::OnClose ) );
- m_checkBoxDontAskAgain->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnCheckBoxDontShowAgain ), NULL, this );
- m_buttonYes->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnYes ), NULL, this );
- m_buttonNo->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnNo ), NULL, this );
- m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnCancel ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( QuestionDlgGenerated::OnClose ) );
+ m_checkBoxDontAskAgain->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnCheckBoxDontShowAgain ), NULL, this );
+ m_buttonYes->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnYes ), NULL, this );
+ m_buttonNo->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::OnNo ), NULL, this );
+ m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( QuestionDlgGenerated::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( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer24;
- bSizer24 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer24->Add( 0, 10, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer41;
- bSizer41 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer41->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_bitmap12 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), 0 );
- bSizer41->Add( m_bitmap12, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextHeader->Wrap( -1 );
- m_staticTextHeader->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer41->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
-
- bSizer41->Add( 0, 0, 1, wxEXPAND, 5 );
-
- bSizer24->Add( bSizer41, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer99;
- bSizer99 = new wxBoxSizer( wxHORIZONTAL );
-
- m_checkBoxDeleteBothSides = new wxCheckBox( this, wxID_ANY, _("Delete on both sides"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxDeleteBothSides->SetToolTip( _("Delete on both sides even if the file is selected on one side only") );
-
- bSizer99->Add( m_checkBoxDeleteBothSides, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer99->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("Use Recycle Bin"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxUseRecycler->SetValue(true);
- bSizer99->Add( m_checkBoxUseRecycler, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer24->Add( bSizer99, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 10 );
-
- m_textCtrlMessage = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY );
- m_textCtrlMessage->SetBackgroundColour( wxColour( 208, 208, 208 ) );
-
- bSizer24->Add( m_textCtrlMessage, 1, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer25;
- bSizer25 = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonOK = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonOK->SetDefault();
- m_buttonOK->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonOK, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_buttonCancel = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonCancel->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer25->Add( m_buttonCancel, 0, wxALL, 5 );
-
- bSizer24->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- this->SetSizer( bSizer24 );
- this->Layout();
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) );
- m_checkBoxDeleteBothSides->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this );
- m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this );
- m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this );
- m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer24;
+ bSizer24 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer24->Add( 0, 10, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer41;
+ bSizer41 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer41->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bitmap12 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), 0 );
+ bSizer41->Add( m_bitmap12, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextHeader->Wrap( -1 );
+ m_staticTextHeader->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer41->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ bSizer41->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ bSizer24->Add( bSizer41, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer99;
+ bSizer99 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_checkBoxDeleteBothSides = new wxCheckBox( this, wxID_ANY, _("Delete on both sides"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxDeleteBothSides->SetToolTip( _("Delete on both sides even if the file is selected on one side only") );
+
+ bSizer99->Add( m_checkBoxDeleteBothSides, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer99->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("Use Recycle Bin"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxUseRecycler->SetValue(true);
+ bSizer99->Add( m_checkBoxUseRecycler, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer24->Add( bSizer99, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 10 );
+
+ m_textCtrlMessage = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY );
+ m_textCtrlMessage->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+
+ bSizer24->Add( m_textCtrlMessage, 1, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer25;
+ bSizer25 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonOK = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonOK->SetDefault();
+ m_buttonOK->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonOK, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_buttonCancel = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonCancel->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer25->Add( m_buttonCancel, 0, wxALL, 5 );
+
+ bSizer24->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ this->SetSizer( bSizer24 );
+ this->Layout();
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) );
+ m_checkBoxDeleteBothSides->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this );
+ m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this );
+ m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this );
+ m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this );
}
DeleteDlgGenerated::~DeleteDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) );
- m_checkBoxDeleteBothSides->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this );
- m_checkBoxUseRecycler->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this );
- m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this );
- m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) );
+ m_checkBoxDeleteBothSides->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this );
+ m_checkBoxUseRecycler->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), 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( 370,380 ), wxDefaultSize );
-
- wxBoxSizer* bSizer21;
- bSizer21 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer86;
- bSizer86 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmap26 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), 0 );
- bSizer86->Add( m_bitmap26, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_panel8 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER|wxTAB_TRAVERSAL );
- m_panel8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
-
- wxBoxSizer* bSizer72;
- bSizer72 = new wxBoxSizer( wxVERTICAL );
-
- m_staticTexHeader = new wxStaticText( m_panel8, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTexHeader->Wrap( -1 );
- m_staticTexHeader->SetFont( wxFont( 16, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer72->Add( m_staticTexHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
-
- m_panel8->SetSizer( bSizer72 );
- m_panel8->Layout();
- bSizer72->Fit( m_panel8 );
- bSizer86->Add( m_panel8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
-
- bSizer86->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer21->Add( bSizer86, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer70;
- bSizer70 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText44 = new wxStaticText( this, wxID_ANY, _("Only files/directories that match all filter settings will be selected for synchronization.\nNote: The name filter must be specified relative(!) to main synchronization directories."), wxDefaultPosition, wxSize( 550,-1 ), wxALIGN_CENTRE );
- m_staticText44->Wrap( 550 );
- bSizer70->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- m_bpButtonHelp->SetToolTip( _("Help") );
-
- bSizer70->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- bSizer21->Add( bSizer70, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 10 );
-
-
- bSizer21->Add( 0, 5, 0, 0, 5 );
-
- m_panel13 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer69;
- bSizer69 = new wxBoxSizer( wxVERTICAL );
-
- m_staticline10 = new wxStaticLine( m_panel13, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer69->Add( m_staticline10, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer52;
- bSizer52 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText45 = new wxStaticText( m_panel13, wxID_ANY, _("Hints:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText45->Wrap( -1 );
- m_staticText45->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) );
-
- bSizer52->Add( m_staticText45, 0, wxBOTTOM, 5 );
-
- m_staticText83 = new wxStaticText( m_panel13, wxID_ANY, _("1. Enter relative file or directory names separated by ';' or a new line."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText83->Wrap( -1 );
- bSizer52->Add( m_staticText83, 0, 0, 5 );
-
- m_staticText84 = new wxStaticText( m_panel13, wxID_ANY, _("2. Use wildcard characters '*' and '?'."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText84->Wrap( -1 );
- bSizer52->Add( m_staticText84, 0, 0, 5 );
-
- m_staticText85 = new wxStaticText( m_panel13, wxID_ANY, _("3. Exclude files directly on main grid via context menu."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText85->Wrap( -1 );
- bSizer52->Add( m_staticText85, 0, 0, 5 );
-
- bSizer69->Add( bSizer52, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 10 );
-
- wxStaticBoxSizer* sbSizer21;
- sbSizer21 = new wxStaticBoxSizer( new wxStaticBox( m_panel13, wxID_ANY, _("Example") ), wxVERTICAL );
-
- wxBoxSizer* bSizer66;
- bSizer66 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText181 = new wxStaticText( m_panel13, wxID_ANY, _("Include: *.doc;*.zip;*.exe\nExclude: \\stuff\\temp\\*"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText181->Wrap( -1 );
- bSizer66->Add( m_staticText181, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticText1811 = new wxStaticText( m_panel13, wxID_ANY, _("Synchronize all .doc, .zip and .exe files except everything in subfolder \"temp\"."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText1811->Wrap( 250 );
- m_staticText1811->SetFont( wxFont( 8, 70, 93, 90, false, wxEmptyString ) );
-
- bSizer66->Add( m_staticText1811, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- sbSizer21->Add( bSizer66, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
-
- bSizer69->Add( sbSizer21, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_panel13->SetSizer( bSizer69 );
- m_panel13->Layout();
- bSizer69->Fit( m_panel13 );
- bSizer21->Add( m_panel13, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxEXPAND, 5 );
-
-
- bSizer21->Add( 0, 0, 0, 0, 5 );
-
- wxBoxSizer* bSizer159;
- bSizer159 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer166;
- bSizer166 = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBoxSizer* sbSizer8;
- sbSizer8 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Include") ), wxHORIZONTAL );
-
- m_bitmapInclude = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 );
- sbSizer8->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 );
-
- m_textCtrlInclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE );
- sbSizer8->Add( m_textCtrlInclude, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- bSizer166->Add( sbSizer8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- wxStaticBoxSizer* sbSizer26;
- sbSizer26 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Exclude") ), wxHORIZONTAL );
-
- m_bitmapExclude = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 );
- sbSizer26->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_textCtrlExclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE );
- sbSizer26->Add( m_textCtrlExclude, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizer166->Add( sbSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- bSizer159->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer159->Add( 5, 0, 0, 0, 5 );
-
- wxBoxSizer* bSizer160;
- bSizer160 = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBoxSizer* sbSizer25;
- sbSizer25 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Date") ), wxHORIZONTAL );
-
- wxBoxSizer* bSizer169;
- bSizer169 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapFilterDate = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 34,34 ), 0 );
- bSizer169->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- wxBoxSizer* bSizer165;
- bSizer165 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText103 = new wxStaticText( this, wxID_ANY, _("Select time span"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText103->Wrap( -1 );
- bSizer165->Add( m_staticText103, 0, 0, 5 );
-
- wxBoxSizer* bSizer164;
- bSizer164 = new wxBoxSizer( wxVERTICAL );
-
- wxArrayString m_choiceUnitTimespanChoices;
- m_choiceUnitTimespan = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 );
- m_choiceUnitTimespan->SetSelection( 0 );
- bSizer164->Add( m_choiceUnitTimespan, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_spinCtrlTimespan = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
- m_spinCtrlTimespan->Hide();
-
- bSizer164->Add( m_spinCtrlTimespan, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer165->Add( bSizer164, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer169->Add( bSizer165, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- sbSizer25->Add( bSizer169, 0, 0, 5 );
-
- bSizer160->Add( sbSizer25, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- wxStaticBoxSizer* sbSizer81;
- sbSizer81 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Size") ), wxHORIZONTAL );
-
- wxBoxSizer* bSizer170;
- bSizer170 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapFilterSize = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 );
- bSizer170->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 );
-
- wxBoxSizer* bSizer158;
- bSizer158 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText101 = new wxStaticText( this, wxID_ANY, _("Minimum file size"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText101->Wrap( -1 );
- bSizer158->Add( m_staticText101, 0, 0, 5 );
-
- wxBoxSizer* bSizer162;
- bSizer162 = new wxBoxSizer( wxVERTICAL );
-
- m_spinCtrlMinSize = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
- bSizer162->Add( m_spinCtrlMinSize, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxArrayString m_choiceUnitMinSizeChoices;
- m_choiceUnitMinSize = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 );
- m_choiceUnitMinSize->SetSelection( 0 );
- bSizer162->Add( m_choiceUnitMinSize, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer158->Add( bSizer162, 0, wxBOTTOM, 5 );
-
- m_staticText102 = new wxStaticText( this, wxID_ANY, _("Maximum file size"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText102->Wrap( -1 );
- bSizer158->Add( m_staticText102, 0, 0, 5 );
-
- wxBoxSizer* bSizer163;
- bSizer163 = new wxBoxSizer( wxVERTICAL );
-
- m_spinCtrlMaxSize = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
- bSizer163->Add( m_spinCtrlMaxSize, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxArrayString m_choiceUnitMaxSizeChoices;
- m_choiceUnitMaxSize = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 );
- m_choiceUnitMaxSize->SetSelection( 0 );
- bSizer163->Add( m_choiceUnitMaxSize, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer158->Add( bSizer163, 0, wxTOP, 5 );
-
- bSizer170->Add( bSizer158, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- sbSizer81->Add( bSizer170, 0, 0, 5 );
-
- bSizer160->Add( sbSizer81, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- bSizer159->Add( bSizer160, 0, wxEXPAND, 5 );
-
- bSizer21->Add( bSizer159, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- wxBoxSizer* bSizer22;
- bSizer22 = new wxBoxSizer( wxHORIZONTAL );
-
- m_button9 = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button9->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer22->Add( m_button9, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer22->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_button10 = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button10->SetDefault();
- m_button10->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer22->Add( m_button10, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_button17 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button17->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer22->Add( m_button17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- bSizer21->Add( bSizer22, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM|wxEXPAND, 5 );
-
- this->SetSizer( bSizer21 );
- this->Layout();
- bSizer21->Fit( this );
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) );
- m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this );
- m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this );
- m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this );
- m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
- m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
- m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
- m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this );
- m_button10->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this );
- m_button17->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxSize( 370,380 ), wxDefaultSize );
+
+ wxBoxSizer* bSizer21;
+ bSizer21 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer86;
+ bSizer86 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmap26 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), 0 );
+ bSizer86->Add( m_bitmap26, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_panel8 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER|wxTAB_TRAVERSAL );
+ m_panel8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
+
+ wxBoxSizer* bSizer72;
+ bSizer72 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTexHeader = new wxStaticText( m_panel8, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTexHeader->Wrap( -1 );
+ m_staticTexHeader->SetFont( wxFont( 16, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer72->Add( m_staticTexHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+ m_panel8->SetSizer( bSizer72 );
+ m_panel8->Layout();
+ bSizer72->Fit( m_panel8 );
+ bSizer86->Add( m_panel8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ bSizer86->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer21->Add( bSizer86, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer70;
+ bSizer70 = new wxBoxSizer( wxHORIZONTAL );
+
+ bSizer70->SetMinSize( wxSize( 550,-1 ) );
+
+ bSizer70->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticText44 = new wxStaticText( this, wxID_ANY, _("Only files/directories that match all filter settings will be selected for synchronization.\nNote: The name filter must be specified relative(!) to main synchronization directories."), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_staticText44->Wrap( 550 );
+ bSizer70->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer70->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ m_bpButtonHelp->SetToolTip( _("Help") );
+
+ bSizer70->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ bSizer21->Add( bSizer70, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 10 );
+
+
+ bSizer21->Add( 0, 5, 0, 0, 5 );
+
+ m_panel13 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer69;
+ bSizer69 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticline10 = new wxStaticLine( m_panel13, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer69->Add( m_staticline10, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer52;
+ bSizer52 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText45 = new wxStaticText( m_panel13, wxID_ANY, _("Hints:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText45->Wrap( -1 );
+ m_staticText45->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) );
+
+ bSizer52->Add( m_staticText45, 0, wxBOTTOM, 5 );
+
+ m_staticText83 = new wxStaticText( m_panel13, wxID_ANY, _("1. Enter relative file or directory names separated by ';' or a new line."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText83->Wrap( -1 );
+ bSizer52->Add( m_staticText83, 0, 0, 5 );
+
+ m_staticText84 = new wxStaticText( m_panel13, wxID_ANY, _("2. Use wildcard characters '*' and '?'."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText84->Wrap( -1 );
+ bSizer52->Add( m_staticText84, 0, 0, 5 );
+
+ m_staticText85 = new wxStaticText( m_panel13, wxID_ANY, _("3. Exclude files directly on main grid via context menu."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText85->Wrap( -1 );
+ bSizer52->Add( m_staticText85, 0, 0, 5 );
+
+ bSizer69->Add( bSizer52, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 10 );
+
+ wxStaticBoxSizer* sbSizer21;
+ sbSizer21 = new wxStaticBoxSizer( new wxStaticBox( m_panel13, wxID_ANY, _("Example") ), wxVERTICAL );
+
+ wxBoxSizer* bSizer66;
+ bSizer66 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText181 = new wxStaticText( m_panel13, wxID_ANY, _("Include: *.doc;*.zip;*.exe\nExclude: \\stuff\\temp\\*"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText181->Wrap( -1 );
+ bSizer66->Add( m_staticText181, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticText1811 = new wxStaticText( m_panel13, wxID_ANY, _("Synchronize all .doc, .zip and .exe files except everything in subfolder \"temp\"."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText1811->Wrap( 250 );
+ m_staticText1811->SetFont( wxFont( 8, 70, 93, 90, false, wxEmptyString ) );
+
+ bSizer66->Add( m_staticText1811, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ sbSizer21->Add( bSizer66, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
+
+ bSizer69->Add( sbSizer21, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_panel13->SetSizer( bSizer69 );
+ m_panel13->Layout();
+ bSizer69->Fit( m_panel13 );
+ bSizer21->Add( m_panel13, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxEXPAND, 5 );
+
+
+ bSizer21->Add( 0, 0, 0, 0, 5 );
+
+ wxBoxSizer* bSizer159;
+ bSizer159 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer166;
+ bSizer166 = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBoxSizer* sbSizer8;
+ sbSizer8 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Include") ), wxHORIZONTAL );
+
+ m_bitmapInclude = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 );
+ sbSizer8->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 );
+
+ m_textCtrlInclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE );
+ sbSizer8->Add( m_textCtrlInclude, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ bSizer166->Add( sbSizer8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ wxStaticBoxSizer* sbSizer26;
+ sbSizer26 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Exclude") ), wxHORIZONTAL );
+
+ m_bitmapExclude = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 );
+ sbSizer26->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_textCtrlExclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE );
+ sbSizer26->Add( m_textCtrlExclude, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizer166->Add( sbSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ bSizer159->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer159->Add( 5, 0, 0, 0, 5 );
+
+ wxBoxSizer* bSizer160;
+ bSizer160 = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBoxSizer* sbSizer25;
+ sbSizer25 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Date") ), wxHORIZONTAL );
+
+ wxBoxSizer* bSizer169;
+ bSizer169 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapFilterDate = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 34,34 ), 0 );
+ bSizer169->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ wxBoxSizer* bSizer165;
+ bSizer165 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText103 = new wxStaticText( this, wxID_ANY, _("Select time span"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText103->Wrap( -1 );
+ bSizer165->Add( m_staticText103, 0, 0, 5 );
+
+ wxBoxSizer* bSizer164;
+ bSizer164 = new wxBoxSizer( wxVERTICAL );
+
+ wxArrayString m_choiceUnitTimespanChoices;
+ m_choiceUnitTimespan = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 );
+ m_choiceUnitTimespan->SetSelection( 0 );
+ bSizer164->Add( m_choiceUnitTimespan, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spinCtrlTimespan = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
+ m_spinCtrlTimespan->Hide();
+
+ bSizer164->Add( m_spinCtrlTimespan, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer165->Add( bSizer164, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer169->Add( bSizer165, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ sbSizer25->Add( bSizer169, 0, 0, 5 );
+
+ bSizer160->Add( sbSizer25, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ wxStaticBoxSizer* sbSizer81;
+ sbSizer81 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Size") ), wxHORIZONTAL );
+
+ wxBoxSizer* bSizer170;
+ bSizer170 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapFilterSize = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 );
+ bSizer170->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 );
+
+ wxBoxSizer* bSizer158;
+ bSizer158 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText101 = new wxStaticText( this, wxID_ANY, _("Minimum file size"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText101->Wrap( -1 );
+ bSizer158->Add( m_staticText101, 0, 0, 5 );
+
+ wxBoxSizer* bSizer162;
+ bSizer162 = new wxBoxSizer( wxVERTICAL );
+
+ m_spinCtrlMinSize = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
+ bSizer162->Add( m_spinCtrlMinSize, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxArrayString m_choiceUnitMinSizeChoices;
+ m_choiceUnitMinSize = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 );
+ m_choiceUnitMinSize->SetSelection( 0 );
+ bSizer162->Add( m_choiceUnitMinSize, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer158->Add( bSizer162, 0, wxBOTTOM, 5 );
+
+ m_staticText102 = new wxStaticText( this, wxID_ANY, _("Maximum file size"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText102->Wrap( -1 );
+ bSizer158->Add( m_staticText102, 0, 0, 5 );
+
+ wxBoxSizer* bSizer163;
+ bSizer163 = new wxBoxSizer( wxVERTICAL );
+
+ m_spinCtrlMaxSize = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
+ bSizer163->Add( m_spinCtrlMaxSize, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxArrayString m_choiceUnitMaxSizeChoices;
+ m_choiceUnitMaxSize = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 );
+ m_choiceUnitMaxSize->SetSelection( 0 );
+ bSizer163->Add( m_choiceUnitMaxSize, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer158->Add( bSizer163, 0, wxTOP, 5 );
+
+ bSizer170->Add( bSizer158, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ sbSizer81->Add( bSizer170, 0, 0, 5 );
+
+ bSizer160->Add( sbSizer81, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ bSizer159->Add( bSizer160, 0, wxEXPAND, 5 );
+
+ bSizer21->Add( bSizer159, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer22;
+ bSizer22 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_button9 = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button9->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer22->Add( m_button9, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer22->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_button10 = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button10->SetDefault();
+ m_button10->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer22->Add( m_button10, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_button17 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button17->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer22->Add( m_button17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ bSizer21->Add( bSizer22, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM|wxEXPAND, 5 );
+
+ this->SetSizer( bSizer21 );
+ this->Layout();
+ bSizer21->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) );
+ m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this );
+ m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this );
+ m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this );
+ m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
+ m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
+ m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
+ m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this );
+ m_button10->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this );
+ m_button17->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this );
}
FilterDlgGenerated::~FilterDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) );
- m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this );
- m_textCtrlInclude->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this );
- m_textCtrlExclude->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this );
- m_choiceUnitTimespan->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
- m_choiceUnitMinSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
- m_choiceUnitMaxSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
- m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this );
- m_button10->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this );
- m_button17->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) );
+ m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this );
+ m_textCtrlInclude->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this );
+ m_textCtrlExclude->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this );
+ m_choiceUnitTimespan->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
+ m_choiceUnitMinSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
+ m_choiceUnitMaxSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this );
+ m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this );
+ m_button10->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this );
+ m_button17->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this );
+
}
CustomizeColsDlgGenerated::CustomizeColsDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer96;
- bSizer96 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer99;
- bSizer99 = new wxBoxSizer( wxHORIZONTAL );
-
- wxArrayString m_checkListColumnsChoices;
- m_checkListColumns = new wxCheckListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_checkListColumnsChoices, 0 );
- bSizer99->Add( m_checkListColumns, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* bSizer98;
- bSizer98 = new wxBoxSizer( wxVERTICAL );
-
- m_bpButton29 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- m_bpButton29->SetToolTip( _("Move column up") );
-
- bSizer98->Add( m_bpButton29, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_bpButton30 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
- m_bpButton30->SetToolTip( _("Move column down") );
-
- bSizer98->Add( m_bpButton30, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- bSizer99->Add( bSizer98, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer96->Add( bSizer99, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- wxBoxSizer* bSizer97;
- bSizer97 = new wxBoxSizer( wxHORIZONTAL );
-
- m_button9 = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button9->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer97->Add( m_button9, 0, wxALL, 5 );
-
-
- bSizer97->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_button28 = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button28->SetDefault();
- m_button28->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer97->Add( m_button28, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_button29 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer97->Add( m_button29, 0, wxALL, 5 );
-
- bSizer96->Add( bSizer97, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- this->SetSizer( bSizer96 );
- this->Layout();
- bSizer96->Fit( this );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CustomizeColsDlgGenerated::OnClose ) );
- m_bpButton29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnMoveUp ), NULL, this );
- m_bpButton30->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnMoveDown ), NULL, this );
- m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnDefault ), NULL, this );
- m_button28->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnOkay ), NULL, this );
- m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer96;
+ bSizer96 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer99;
+ bSizer99 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxArrayString m_checkListColumnsChoices;
+ m_checkListColumns = new wxCheckListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_checkListColumnsChoices, 0 );
+ bSizer99->Add( m_checkListColumns, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* bSizer98;
+ bSizer98 = new wxBoxSizer( wxVERTICAL );
+
+ m_bpButton29 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ m_bpButton29->SetToolTip( _("Move column up") );
+
+ bSizer98->Add( m_bpButton29, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_bpButton30 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
+ m_bpButton30->SetToolTip( _("Move column down") );
+
+ bSizer98->Add( m_bpButton30, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ bSizer99->Add( bSizer98, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer96->Add( bSizer99, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ wxBoxSizer* bSizer97;
+ bSizer97 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_button9 = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button9->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer97->Add( m_button9, 0, wxALL, 5 );
+
+
+ bSizer97->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_button28 = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button28->SetDefault();
+ m_button28->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer97->Add( m_button28, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_button29 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer97->Add( m_button29, 0, wxALL, 5 );
+
+ bSizer96->Add( bSizer97, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ this->SetSizer( bSizer96 );
+ this->Layout();
+ bSizer96->Fit( this );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CustomizeColsDlgGenerated::OnClose ) );
+ m_bpButton29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnMoveUp ), NULL, this );
+ m_bpButton30->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnMoveDown ), NULL, this );
+ m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnDefault ), NULL, this );
+ m_button28->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnOkay ), NULL, this );
+ m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnCancel ), NULL, this );
}
CustomizeColsDlgGenerated::~CustomizeColsDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CustomizeColsDlgGenerated::OnClose ) );
- m_bpButton29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnMoveUp ), NULL, this );
- m_bpButton30->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnMoveDown ), NULL, this );
- m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnDefault ), NULL, this );
- m_button28->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnOkay ), NULL, this );
- m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnCancel ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CustomizeColsDlgGenerated::OnClose ) );
+ m_bpButton29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnMoveUp ), NULL, this );
+ m_bpButton30->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnMoveDown ), NULL, this );
+ m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnDefault ), NULL, this );
+ m_button28->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::OnOkay ), NULL, this );
+ m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CustomizeColsDlgGenerated::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( 280,230 ), wxDefaultSize );
-
- wxBoxSizer* bSizer95;
- bSizer95 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer86;
- bSizer86 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapSettings = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), 0 );
- bSizer86->Add( m_bitmapSettings, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer86->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panel8 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER|wxTAB_TRAVERSAL );
- m_panel8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
-
- wxBoxSizer* bSizer72;
- bSizer72 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText56 = new wxStaticText( m_panel8, wxID_ANY, _("Global settings"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText56->Wrap( -1 );
- m_staticText56->SetFont( wxFont( 16, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer72->Add( m_staticText56, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
-
- m_panel8->SetSizer( bSizer72 );
- m_panel8->Layout();
- bSizer72->Fit( m_panel8 );
- bSizer86->Add( m_panel8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- bSizer95->Add( bSizer86, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer95->Add( 0, 10, 0, 0, 5 );
-
- wxStaticBoxSizer* sbSizer23;
- sbSizer23 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL );
-
- m_checkBoxTransCopy = new wxCheckBox( this, wxID_ANY, _("Transactional file copy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxTransCopy->SetToolTip( _("Write to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of fatal error.") );
-
- sbSizer23->Add( m_checkBoxTransCopy, 0, wxALL|wxEXPAND, 5 );
-
- m_checkBoxCopyLocked = new wxCheckBox( this, wxID_ANY, _("Copy locked files"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxCopyLocked->SetToolTip( _("Copy shared or locked files using Volume Shadow Copy Service\n(Requires Administrator rights)") );
-
- sbSizer23->Add( m_checkBoxCopyLocked, 0, wxALL|wxEXPAND, 5 );
-
- m_checkBoxCopyPermissions = new wxCheckBox( this, wxID_ANY, _("Copy file access permissions"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxCopyPermissions->SetToolTip( _("Transfer file and directory permissions\n(Requires Administrator rights)") );
-
- sbSizer23->Add( m_checkBoxCopyPermissions, 0, wxALL|wxEXPAND, 5 );
-
- m_staticline10 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- sbSizer23->Add( m_staticline10, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer101;
- bSizer101 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText100 = new wxStaticText( this, wxID_ANY, _("Hidden dialogs:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText100->Wrap( -1 );
- bSizer101->Add( m_staticText100, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer101->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_buttonResetDialogs = new zen::BitmapButton( this, wxID_ANY, _("Reset"), wxDefaultPosition, wxSize( 80,-1 ), 0 );
- m_buttonResetDialogs->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
- m_buttonResetDialogs->SetToolTip( _("Show hidden dialogs") );
-
- bSizer101->Add( m_buttonResetDialogs, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- sbSizer23->Add( bSizer101, 0, wxEXPAND, 5 );
-
- bSizer95->Add( sbSizer23, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
-
- bSizer95->Add( 0, 10, 0, 0, 5 );
-
- wxStaticBoxSizer* sbSizer26;
- sbSizer26 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("External applications") ), wxHORIZONTAL );
-
-
- sbSizer26->Add( 5, 0, 0, 0, 5 );
-
- m_gridCustomCommand = new wxGrid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
-
- // Grid
- m_gridCustomCommand->CreateGrid( 5, 2 );
- m_gridCustomCommand->EnableEditing( true );
- m_gridCustomCommand->EnableGridLines( true );
- m_gridCustomCommand->EnableDragGridSize( false );
- m_gridCustomCommand->SetMargins( 0, 0 );
-
- // Columns
- m_gridCustomCommand->SetColSize( 0, 129 );
- m_gridCustomCommand->SetColSize( 1, 179 );
- 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( 0 );
- m_gridCustomCommand->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
-
- // Label Appearance
-
- // Cell Defaults
- m_gridCustomCommand->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
- sbSizer26->Add( m_gridCustomCommand, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer157;
- bSizer157 = new wxBoxSizer( wxVERTICAL );
-
- m_bpButtonAddRow = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
- bSizer157->Add( m_bpButtonAddRow, 0, 0, 5 );
-
- m_bpButtonRemoveRow = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
- bSizer157->Add( m_bpButtonRemoveRow, 0, 0, 5 );
-
- sbSizer26->Add( bSizer157, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- sbSizer26->Add( 5, 0, 0, 0, 5 );
-
- bSizer95->Add( sbSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer97;
- bSizer97 = new wxBoxSizer( wxHORIZONTAL );
-
- m_button9 = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button9->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer97->Add( m_button9, 0, wxALL, 5 );
-
-
- bSizer97->Add( 0, 0, 1, 0, 5 );
-
- m_buttonOkay = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonOkay->SetDefault();
- m_buttonOkay->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer97->Add( m_buttonOkay, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_button29 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer97->Add( m_button29, 0, wxALL, 5 );
-
- bSizer95->Add( bSizer97, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- this->SetSizer( bSizer95 );
- this->Layout();
- bSizer95->Fit( this );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) );
- m_buttonResetDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this );
- m_bpButtonAddRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this );
- m_bpButtonRemoveRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this );
- m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this );
- m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this );
- m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxSize( 280,230 ), wxDefaultSize );
+
+ wxBoxSizer* bSizer95;
+ bSizer95 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer86;
+ bSizer86 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapSettings = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), 0 );
+ bSizer86->Add( m_bitmapSettings, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer86->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panel8 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER|wxTAB_TRAVERSAL );
+ m_panel8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
+
+ wxBoxSizer* bSizer72;
+ bSizer72 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText56 = new wxStaticText( m_panel8, wxID_ANY, _("Global settings"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText56->Wrap( -1 );
+ m_staticText56->SetFont( wxFont( 16, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer72->Add( m_staticText56, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+ m_panel8->SetSizer( bSizer72 );
+ m_panel8->Layout();
+ bSizer72->Fit( m_panel8 );
+ bSizer86->Add( m_panel8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ bSizer95->Add( bSizer86, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer95->Add( 0, 5, 0, 0, 5 );
+
+ wxStaticBoxSizer* sbSizer23;
+ sbSizer23 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL );
+
+ m_checkBoxTransCopy = new wxCheckBox( this, wxID_ANY, _("Transactional file copy"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbSizer23->Add( m_checkBoxTransCopy, 0, wxEXPAND|wxALL, 5 );
+
+ m_textCtrl22 = new wxTextCtrl( this, wxID_ANY, _("Write to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of fatal error."), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_NO_VSCROLL|wxTE_READONLY|wxNO_BORDER );
+ m_textCtrl22->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+ m_textCtrl22->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+ m_textCtrl22->SetMinSize( wxSize( 400,-1 ) );
+
+ sbSizer23->Add( m_textCtrl22, 0, wxLEFT|wxEXPAND, 20 );
+
+ m_checkBoxCopyLocked = new wxCheckBox( this, wxID_ANY, _("Copy locked files"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbSizer23->Add( m_checkBoxCopyLocked, 0, wxALL|wxEXPAND, 5 );
+
+ m_textCtrlCopyLocked = new wxTextCtrl( this, wxID_ANY, _("Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)"), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_NO_VSCROLL|wxTE_READONLY|wxNO_BORDER );
+ m_textCtrlCopyLocked->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+ m_textCtrlCopyLocked->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ sbSizer23->Add( m_textCtrlCopyLocked, 0, wxLEFT|wxEXPAND, 20 );
+
+ m_checkBoxCopyPermissions = new wxCheckBox( this, wxID_ANY, _("Copy file access permissions"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbSizer23->Add( m_checkBoxCopyPermissions, 0, wxALL|wxEXPAND, 5 );
+
+ m_textCtrl2211 = new wxTextCtrl( this, wxID_ANY, _("Transfer file and directory permissions (Requires Administrator rights)"), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_NO_VSCROLL|wxTE_READONLY|wxNO_BORDER );
+ m_textCtrl2211->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+ m_textCtrl2211->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ sbSizer23->Add( m_textCtrl2211, 0, wxLEFT|wxEXPAND, 20 );
+
+ bSizer95->Add( sbSizer23, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ wxStaticBoxSizer* sbSizer261;
+ sbSizer261 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL );
+
+ wxBoxSizer* bSizer101;
+ bSizer101 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText100 = new wxStaticText( this, wxID_ANY, _("Hidden dialogs:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText100->Wrap( -1 );
+ bSizer101->Add( m_staticText100, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer101->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_buttonResetDialogs = new zen::BitmapButton( this, wxID_ANY, _("Reset"), wxDefaultPosition, wxSize( 80,-1 ), 0 );
+ m_buttonResetDialogs->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+ m_buttonResetDialogs->SetToolTip( _("Show hidden dialogs") );
+
+ bSizer101->Add( m_buttonResetDialogs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ sbSizer261->Add( bSizer101, 0, wxEXPAND, 5 );
+
+ bSizer95->Add( sbSizer261, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+ wxStaticBoxSizer* sbSizer26;
+ sbSizer26 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("External applications") ), wxHORIZONTAL );
+
+
+ sbSizer26->Add( 5, 0, 0, 0, 5 );
+
+ m_gridCustomCommand = new wxGrid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+
+ // Grid
+ m_gridCustomCommand->CreateGrid( 5, 2 );
+ m_gridCustomCommand->EnableEditing( true );
+ m_gridCustomCommand->EnableGridLines( true );
+ m_gridCustomCommand->EnableDragGridSize( false );
+ m_gridCustomCommand->SetMargins( 0, 0 );
+
+ // Columns
+ m_gridCustomCommand->SetColSize( 0, 165 );
+ m_gridCustomCommand->SetColSize( 1, 196 );
+ m_gridCustomCommand->EnableDragColMove( false );
+ m_gridCustomCommand->EnableDragColSize( true );
+ m_gridCustomCommand->SetColLabelSize( 20 );
+ m_gridCustomCommand->SetColLabelValue( 0, _("Description") );
+ m_gridCustomCommand->SetColLabelValue( 1, _("Command line") );
+ m_gridCustomCommand->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+
+ // Rows
+ m_gridCustomCommand->EnableDragRowSize( false );
+ m_gridCustomCommand->SetRowLabelSize( 0 );
+ m_gridCustomCommand->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+
+ // Label Appearance
+
+ // Cell Defaults
+ m_gridCustomCommand->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
+ sbSizer26->Add( m_gridCustomCommand, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer157;
+ bSizer157 = new wxBoxSizer( wxVERTICAL );
+
+ m_bpButtonAddRow = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
+ bSizer157->Add( m_bpButtonAddRow, 0, 0, 5 );
+
+ m_bpButtonRemoveRow = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 19,21 ), wxBU_AUTODRAW );
+ bSizer157->Add( m_bpButtonRemoveRow, 0, 0, 5 );
+
+ sbSizer26->Add( bSizer157, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ sbSizer26->Add( 5, 0, 0, 0, 5 );
+
+ bSizer95->Add( sbSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer97;
+ bSizer97 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_button9 = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button9->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer97->Add( m_button9, 0, wxALL, 5 );
+
+
+ bSizer97->Add( 0, 0, 1, 0, 5 );
+
+ m_buttonOkay = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonOkay->SetDefault();
+ m_buttonOkay->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer97->Add( m_buttonOkay, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+ m_button29 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer97->Add( m_button29, 0, wxALL, 5 );
+
+ bSizer95->Add( bSizer97, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ this->SetSizer( bSizer95 );
+ this->Layout();
+ bSizer95->Fit( this );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) );
+ m_buttonResetDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this );
+ m_bpButtonAddRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this );
+ m_bpButtonRemoveRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this );
+ m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this );
+ m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this );
+ m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this );
}
GlobalSettingsDlgGenerated::~GlobalSettingsDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) );
- m_buttonResetDialogs->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this );
- m_bpButtonAddRow->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this );
- m_bpButtonRemoveRow->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this );
- m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this );
- m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this );
- m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) );
+ m_buttonResetDialogs->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this );
+ m_bpButtonAddRow->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this );
+ m_bpButtonRemoveRow->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this );
+ m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this );
+ m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this );
+ m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this );
+
}
SyncPreviewDlgGenerated::SyncPreviewDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer134;
- bSizer134 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer158;
- bSizer158 = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonStartSync = new zen::BitmapButton( this, wxID_ANY, _("Start"), wxDefaultPosition, wxSize( -1,40 ), 0 );
- m_buttonStartSync->SetDefault();
- m_buttonStartSync->SetFont( wxFont( 14, 70, 90, 92, false, wxT("Arial Black") ) );
- m_buttonStartSync->SetToolTip( _("Start synchronization") );
-
- bSizer158->Add( m_buttonStartSync, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticline16 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer158->Add( m_staticline16, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- wxStaticBoxSizer* sbSizer28;
- sbSizer28 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Variant") ), wxVERTICAL );
-
- m_staticTextVariant = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextVariant->Wrap( -1 );
- m_staticTextVariant->SetFont( wxFont( 10, 70, 90, 92, false, wxT("Arial Black") ) );
-
- sbSizer28->Add( m_staticTextVariant, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizer158->Add( sbSizer28, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- bSizer134->Add( bSizer158, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_staticline14 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer134->Add( m_staticline14, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer141;
- bSizer141 = new wxBoxSizer( wxHORIZONTAL );
-
- wxStaticBoxSizer* sbSizer161;
- sbSizer161 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Statistics") ), wxVERTICAL );
-
- wxBoxSizer* bSizer157;
- bSizer157 = new wxBoxSizer( wxHORIZONTAL );
-
- wxFlexGridSizer* fgSizer5;
- fgSizer5 = new wxFlexGridSizer( 4, 2, 0, 5 );
- fgSizer5->SetFlexibleDirection( wxHORIZONTAL );
- fgSizer5->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
-
- fgSizer5->Add( 0, 0, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_staticText94 = new wxStaticText( this, wxID_ANY, _("Left"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText94->Wrap( -1 );
- m_staticText94->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer5->Add( m_staticText94, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapCreate = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapCreate->SetToolTip( _("Number of files and directories that will be created") );
-
- fgSizer5->Add( m_bitmapCreate, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_textCtrlCreateL = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
- m_textCtrlCreateL->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlCreateL->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlCreateL->SetToolTip( _("Number of files and directories that will be created") );
-
- fgSizer5->Add( m_textCtrlCreateL, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapUpdate = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapUpdate->SetToolTip( _("Number of files that will be overwritten") );
-
- fgSizer5->Add( m_bitmapUpdate, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_textCtrlUpdateL = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
- m_textCtrlUpdateL->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlUpdateL->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlUpdateL->SetToolTip( _("Number of files that will be overwritten") );
-
- fgSizer5->Add( m_textCtrlUpdateL, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapDelete = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapDelete->SetToolTip( _("Number of files and directories that will be deleted") );
-
- fgSizer5->Add( m_bitmapDelete, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrlDeleteL = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
- m_textCtrlDeleteL->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlDeleteL->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlDeleteL->SetToolTip( _("Number of files and directories that will be deleted") );
-
- fgSizer5->Add( m_textCtrlDeleteL, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer157->Add( fgSizer5, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- wxFlexGridSizer* fgSizer51;
- fgSizer51 = new wxFlexGridSizer( 3, 1, 0, 5 );
- fgSizer51->SetFlexibleDirection( wxHORIZONTAL );
- fgSizer51->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_staticText95 = new wxStaticText( this, wxID_ANY, _("Right"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText95->Wrap( -1 );
- m_staticText95->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer51->Add( m_staticText95, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrlCreateR = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
- m_textCtrlCreateR->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlCreateR->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlCreateR->SetToolTip( _("Number of files and directories that will be created") );
-
- fgSizer51->Add( m_textCtrlCreateR, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrlUpdateR = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
- m_textCtrlUpdateR->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlUpdateR->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlUpdateR->SetToolTip( _("Number of files that will be overwritten") );
-
- fgSizer51->Add( m_textCtrlUpdateR, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrlDeleteR = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
- m_textCtrlDeleteR->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlDeleteR->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlDeleteR->SetToolTip( _("Number of files and directories that will be deleted") );
-
- fgSizer51->Add( m_textCtrlDeleteR, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer157->Add( fgSizer51, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- sbSizer161->Add( bSizer157, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- sbSizer161->Add( 0, 10, 0, 0, 5 );
-
- wxBoxSizer* bSizer156;
- bSizer156 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapData = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapData->SetToolTip( _("Total amount of data that will be transferred") );
-
- bSizer156->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 );
-
-
- bSizer156->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_textCtrlData = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_CENTRE|wxTE_READONLY );
- m_textCtrlData->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
- m_textCtrlData->SetBackgroundColour( wxColour( 208, 208, 208 ) );
- m_textCtrlData->SetToolTip( _("Total amount of data that will be transferred") );
-
- bSizer156->Add( m_textCtrlData, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer156->Add( 0, 0, 1, wxEXPAND, 5 );
-
- sbSizer161->Add( bSizer156, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- bSizer141->Add( sbSizer161, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
-
- bSizer134->Add( bSizer141, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer134->Add( m_staticline12, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer142;
- bSizer142 = new wxBoxSizer( wxHORIZONTAL );
-
- m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("Do not show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer142->Add( m_checkBoxDontShowAgain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer142->Add( 10, 0, 1, 0, 5 );
-
- m_button16 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button16->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer142->Add( m_button16, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- bSizer134->Add( bSizer142, 0, wxEXPAND, 5 );
-
- this->SetSizer( bSizer134 );
- this->Layout();
- bSizer134->Fit( this );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncPreviewDlgGenerated::OnClose ) );
- m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnStartSync ), NULL, this );
- m_button16->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer134;
+ bSizer134 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer158;
+ bSizer158 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonStartSync = new zen::BitmapButton( this, wxID_ANY, _("Start"), wxDefaultPosition, wxSize( -1,40 ), 0 );
+ m_buttonStartSync->SetDefault();
+ m_buttonStartSync->SetFont( wxFont( 14, 70, 90, 92, false, wxT("Arial Black") ) );
+ m_buttonStartSync->SetToolTip( _("Start synchronization") );
+
+ bSizer158->Add( m_buttonStartSync, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticline16 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer158->Add( m_staticline16, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxStaticBoxSizer* sbSizer28;
+ sbSizer28 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Variant") ), wxVERTICAL );
+
+ m_staticTextVariant = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextVariant->Wrap( -1 );
+ m_staticTextVariant->SetFont( wxFont( 10, 70, 90, 92, false, wxT("Arial Black") ) );
+
+ sbSizer28->Add( m_staticTextVariant, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizer158->Add( sbSizer28, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ bSizer134->Add( bSizer158, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_staticline14 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer134->Add( m_staticline14, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer141;
+ bSizer141 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxStaticBoxSizer* sbSizer161;
+ sbSizer161 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Statistics") ), wxVERTICAL );
+
+ wxBoxSizer* bSizer157;
+ bSizer157 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxFlexGridSizer* fgSizer5;
+ fgSizer5 = new wxFlexGridSizer( 0, 2, 0, 5 );
+ fgSizer5->SetFlexibleDirection( wxHORIZONTAL );
+ fgSizer5->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+
+ fgSizer5->Add( 0, 0, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_staticText94 = new wxStaticText( this, wxID_ANY, _("Left"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText94->Wrap( -1 );
+ m_staticText94->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer5->Add( m_staticText94, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapCreate = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapCreate->SetToolTip( _("Number of files and directories that will be created") );
+
+ fgSizer5->Add( m_bitmapCreate, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_textCtrlCreateL = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
+ m_textCtrlCreateL->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlCreateL->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlCreateL->SetToolTip( _("Number of files and directories that will be created") );
+
+ fgSizer5->Add( m_textCtrlCreateL, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapUpdate = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapUpdate->SetToolTip( _("Number of files that will be overwritten") );
+
+ fgSizer5->Add( m_bitmapUpdate, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_textCtrlUpdateL = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
+ m_textCtrlUpdateL->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlUpdateL->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlUpdateL->SetToolTip( _("Number of files that will be overwritten") );
+
+ fgSizer5->Add( m_textCtrlUpdateL, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapDelete = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapDelete->SetToolTip( _("Number of files and directories that will be deleted") );
+
+ fgSizer5->Add( m_bitmapDelete, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlDeleteL = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
+ m_textCtrlDeleteL->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlDeleteL->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlDeleteL->SetToolTip( _("Number of files and directories that will be deleted") );
+
+ fgSizer5->Add( m_textCtrlDeleteL, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer157->Add( fgSizer5, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ wxFlexGridSizer* fgSizer51;
+ fgSizer51 = new wxFlexGridSizer( 0, 1, 0, 5 );
+ fgSizer51->SetFlexibleDirection( wxHORIZONTAL );
+ fgSizer51->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_staticText95 = new wxStaticText( this, wxID_ANY, _("Right"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText95->Wrap( -1 );
+ m_staticText95->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer51->Add( m_staticText95, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlCreateR = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
+ m_textCtrlCreateR->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlCreateR->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlCreateR->SetToolTip( _("Number of files and directories that will be created") );
+
+ fgSizer51->Add( m_textCtrlCreateR, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlUpdateR = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
+ m_textCtrlUpdateR->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlUpdateR->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlUpdateR->SetToolTip( _("Number of files that will be overwritten") );
+
+ fgSizer51->Add( m_textCtrlUpdateR, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlDeleteR = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_READONLY|wxTE_RIGHT );
+ m_textCtrlDeleteR->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlDeleteR->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlDeleteR->SetToolTip( _("Number of files and directories that will be deleted") );
+
+ fgSizer51->Add( m_textCtrlDeleteR, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer157->Add( fgSizer51, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ sbSizer161->Add( bSizer157, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ sbSizer161->Add( 0, 10, 0, 0, 5 );
+
+ wxBoxSizer* bSizer156;
+ bSizer156 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapData = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapData->SetToolTip( _("Total amount of data that will be transferred") );
+
+ bSizer156->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 );
+
+
+ bSizer156->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_textCtrlData = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), wxTE_CENTRE|wxTE_READONLY );
+ m_textCtrlData->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
+ m_textCtrlData->SetBackgroundColour( wxColour( 208, 208, 208 ) );
+ m_textCtrlData->SetToolTip( _("Total amount of data that will be transferred") );
+
+ bSizer156->Add( m_textCtrlData, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer156->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ sbSizer161->Add( bSizer156, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ bSizer141->Add( sbSizer161, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+ bSizer134->Add( bSizer141, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer134->Add( m_staticline12, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer142;
+ bSizer142 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("Do not show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer142->Add( m_checkBoxDontShowAgain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer142->Add( 10, 0, 1, 0, 5 );
+
+ m_button16 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button16->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer142->Add( m_button16, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ bSizer134->Add( bSizer142, 0, wxEXPAND, 5 );
+
+ this->SetSizer( bSizer134 );
+ this->Layout();
+ bSizer134->Fit( this );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncPreviewDlgGenerated::OnClose ) );
+ m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnStartSync ), NULL, this );
+ m_button16->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnCancel ), NULL, this );
}
SyncPreviewDlgGenerated::~SyncPreviewDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncPreviewDlgGenerated::OnClose ) );
- m_buttonStartSync->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnStartSync ), NULL, this );
- m_button16->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnCancel ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncPreviewDlgGenerated::OnClose ) );
+ m_buttonStartSync->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnStartSync ), NULL, this );
+ m_button16->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnCancel ), NULL, this );
+
}
PopupFrameGenerated1::PopupFrameGenerated1( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer158;
- bSizer158 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- bSizer158->Add( m_bitmapLeft, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextMain = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextMain->Wrap( 600 );
- bSizer158->Add( m_staticTextMain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- this->SetSizer( bSizer158 );
- this->Layout();
- bSizer158->Fit( this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer158;
+ bSizer158 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer158->Add( m_bitmapLeft, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextMain = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextMain->Wrap( 600 );
+ bSizer158->Add( m_staticTextMain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ this->SetSizer( bSizer158 );
+ this->Layout();
+ bSizer158->Fit( this );
}
PopupFrameGenerated1::~PopupFrameGenerated1()
@@ -3731,130 +3799,130 @@ PopupFrameGenerated1::~PopupFrameGenerated1()
SearchDialogGenerated::SearchDialogGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer161;
- bSizer161 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer166;
- bSizer166 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer162;
- bSizer162 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText101 = new wxStaticText( this, wxID_ANY, _("Find what:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText101->Wrap( -1 );
- bSizer162->Add( m_staticText101, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrlSearchTxt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220,-1 ), 0 );
- bSizer162->Add( m_textCtrlSearchTxt, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizer166->Add( bSizer162, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer166->Add( 0, 5, 0, 0, 5 );
-
- m_checkBoxMatchCase = new wxCheckBox( this, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer166->Add( m_checkBoxMatchCase, 0, wxALL, 5 );
-
- bSizer161->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer97;
- bSizer97 = new wxBoxSizer( wxVERTICAL );
-
- m_buttonFindNext = new wxButton( this, wxID_OK, _("&Find next"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonFindNext->SetDefault();
- m_buttonFindNext->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer97->Add( m_buttonFindNext, 0, wxEXPAND|wxTOP|wxRIGHT, 5 );
-
- m_button29 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer97->Add( m_button29, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
-
- bSizer161->Add( bSizer97, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- this->SetSizer( bSizer161 );
- this->Layout();
- bSizer161->Fit( this );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SearchDialogGenerated::OnClose ) );
- m_textCtrlSearchTxt->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( SearchDialogGenerated::OnText ), NULL, this );
- m_buttonFindNext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnFindNext ), NULL, this );
- m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer161;
+ bSizer161 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer166;
+ bSizer166 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer162;
+ bSizer162 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText101 = new wxStaticText( this, wxID_ANY, _("Find what:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText101->Wrap( -1 );
+ bSizer162->Add( m_staticText101, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlSearchTxt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220,-1 ), 0 );
+ bSizer162->Add( m_textCtrlSearchTxt, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizer166->Add( bSizer162, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer166->Add( 0, 5, 0, 0, 5 );
+
+ m_checkBoxMatchCase = new wxCheckBox( this, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer166->Add( m_checkBoxMatchCase, 0, wxALL, 5 );
+
+ bSizer161->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer97;
+ bSizer97 = new wxBoxSizer( wxVERTICAL );
+
+ m_buttonFindNext = new wxButton( this, wxID_OK, _("&Find next"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonFindNext->SetDefault();
+ m_buttonFindNext->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer97->Add( m_buttonFindNext, 0, wxEXPAND|wxTOP|wxRIGHT, 5 );
+
+ m_button29 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer97->Add( m_button29, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+
+ bSizer161->Add( bSizer97, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ this->SetSizer( bSizer161 );
+ this->Layout();
+ bSizer161->Fit( this );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SearchDialogGenerated::OnClose ) );
+ m_textCtrlSearchTxt->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( SearchDialogGenerated::OnText ), NULL, this );
+ m_buttonFindNext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnFindNext ), NULL, this );
+ m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnCancel ), NULL, this );
}
SearchDialogGenerated::~SearchDialogGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SearchDialogGenerated::OnClose ) );
- m_textCtrlSearchTxt->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( SearchDialogGenerated::OnText ), NULL, this );
- m_buttonFindNext->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnFindNext ), NULL, this );
- m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnCancel ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SearchDialogGenerated::OnClose ) );
+ m_textCtrlSearchTxt->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( SearchDialogGenerated::OnText ), NULL, this );
+ m_buttonFindNext->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnFindNext ), NULL, this );
+ m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnCancel ), NULL, this );
+
}
SelectTimespanDlgGenerated::SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer96;
- bSizer96 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer98;
- bSizer98 = new wxBoxSizer( wxHORIZONTAL );
-
- m_calendarFrom = new wxCalendarCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS );
- bSizer98->Add( m_calendarFrom, 0, wxALL, 5 );
-
- m_calendarTo = new wxCalendarCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS );
- bSizer98->Add( m_calendarTo, 0, wxALL, 5 );
-
- bSizer96->Add( bSizer98, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* bSizer97;
- bSizer97 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer97->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_buttonOkay = new wxButton( this, wxID_ANY, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_buttonOkay->SetDefault();
- m_buttonOkay->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
-
- bSizer97->Add( m_buttonOkay, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_button29 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
-
- bSizer97->Add( m_button29, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
-
- bSizer97->Add( 0, 0, 1, wxEXPAND, 5 );
-
- bSizer96->Add( bSizer97, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- this->SetSizer( bSizer96 );
- this->Layout();
- bSizer96->Fit( this );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) );
- m_calendarFrom->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this );
- m_calendarTo->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this );
- m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this );
- m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer96;
+ bSizer96 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer98;
+ bSizer98 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_calendarFrom = new wxCalendarCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS );
+ bSizer98->Add( m_calendarFrom, 0, wxALL, 5 );
+
+ m_calendarTo = new wxCalendarCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS );
+ bSizer98->Add( m_calendarTo, 0, wxALL, 5 );
+
+ bSizer96->Add( bSizer98, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* bSizer97;
+ bSizer97 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer97->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_buttonOkay = new wxButton( this, wxID_ANY, _("&OK"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_buttonOkay->SetDefault();
+ m_buttonOkay->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer97->Add( m_buttonOkay, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_button29 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+
+ bSizer97->Add( m_button29, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ bSizer97->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ bSizer96->Add( bSizer97, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ this->SetSizer( bSizer96 );
+ this->Layout();
+ bSizer96->Fit( this );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) );
+ m_calendarFrom->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this );
+ m_calendarTo->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this );
+ m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this );
+ m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this );
}
SelectTimespanDlgGenerated::~SelectTimespanDlgGenerated()
{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) );
- m_calendarFrom->Disconnect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this );
- m_calendarTo->Disconnect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this );
- m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this );
- m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this );
-
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) );
+ m_calendarFrom->Disconnect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this );
+ m_calendarTo->Disconnect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this );
+ m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this );
+ m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this );
+
}
diff --git a/ui/gui_generated.h b/ui/gui_generated.h
index 3d0d3daa..de1dc89b 100644
--- a/ui/gui_generated.h
+++ b/ui/gui_generated.h
@@ -17,9 +17,9 @@ class CustomGridRight;
class FolderHistoryBox;
class ToggleButton;
class wxStaticText;
-namespace zen{ class BitmapButton; }
-namespace zen{ class DirPickerCtrl; }
-namespace zen{ class Graph2D; }
+namespace zen { class BitmapButton; }
+namespace zen { class DirPickerCtrl; }
+namespace zen { class Graph2D; }
#include <wx/string.h>
#include <wx/bitmap.h>
@@ -66,961 +66,990 @@ namespace zen{ class Graph2D; }
///////////////////////////////////////////////////////////////////////////////
/// Class MainDialogGenerated
///////////////////////////////////////////////////////////////////////////////
-class MainDialogGenerated : public wxFrame
+class MainDialogGenerated : public wxFrame
{
- private:
-
- protected:
- wxMenuBar* m_menubar1;
- wxMenu* m_menuFile;
- wxMenuItem* m_menuItem10;
- wxMenuItem* m_menuItem11;
- wxMenuItem* m_menuItemSwitchView;
- wxMenuItem* m_menuItemNew;
- wxMenuItem* m_menuItemSave;
- wxMenuItem* m_menuItemLoad;
- wxMenu* m_menuAdvanced;
- wxMenu* m_menuLanguages;
- wxMenuItem* m_menuItemGlobSett;
- wxMenuItem* m_menuItem7;
- wxMenu* m_menuHelp;
- wxMenuItem* m_menuItemCheckVer;
- wxMenuItem* m_menuItemAbout;
- wxBoxSizer* bSizerPanelHolder;
- wxPanel* m_panelTopButtons;
- wxBoxSizer* bSizerTopButtons;
- wxStaticText* m_staticTextCmpVariant;
- zen::BitmapButton* m_buttonCompare;
- wxButton* m_buttonAbort;
- wxBitmapButton* m_bpButtonCmpConfig;
- wxStaticText* m_staticTextSyncVariant;
- wxBitmapButton* m_bpButtonSyncConfig;
- zen::BitmapButton* m_buttonStartSync;
- wxPanel* m_panelDirectoryPairs;
- wxStaticBoxSizer* sbSizerDirLeft;
- wxBitmapButton* m_bpButtonAddPair;
- wxPanel* m_panelTopMiddle;
- wxBitmapButton* m_bpButtonSwapSides;
- wxStaticBoxSizer* sbSizerDirRight;
- wxScrolledWindow* m_scrolledWindowFolderPairs;
- wxBoxSizer* bSizerAddFolderPairs;
- wxPanel* m_panelGrids;
- wxBoxSizer* bSizerGridHolder;
- CustomGridLeft* m_gridLeft;
- wxPanel* m_panelMiddle;
- CustomGridMiddle* m_gridMiddle;
- CustomGridRight* m_gridRight;
- wxPanel* m_panelConfig;
- wxBoxSizer* bSizerConfig;
- wxBitmapButton* m_bpButtonSave;
- wxBitmapButton* m_bpButtonLoad;
- wxListBox* m_listBoxHistory;
- wxPanel* m_panelFilter;
- wxBitmapButton* m_bpButtonFilter;
- wxCheckBox* m_checkBoxHideFilt;
- wxPanel* m_panelStatistics;
- wxBoxSizer* bSizerStatistics;
- wxStaticBitmap* m_bitmapCreate;
- wxTextCtrl* m_textCtrlCreate;
- wxStaticBitmap* m_bitmapUpdate;
- wxTextCtrl* m_textCtrlUpdate;
- wxStaticBitmap* m_bitmapDelete;
- wxTextCtrl* m_textCtrlDelete;
- wxStaticBitmap* m_bitmapData;
- wxTextCtrl* m_textCtrlData;
- wxPanel* m_panelViewFilter;
- wxBoxSizer* bSizerViewFilter;
- ToggleButton* m_bpButtonSyncCreateLeft;
- ToggleButton* m_bpButtonSyncDirOverwLeft;
- ToggleButton* m_bpButtonSyncDeleteLeft;
- ToggleButton* m_bpButtonLeftOnly;
- ToggleButton* m_bpButtonLeftNewer;
- ToggleButton* m_bpButtonEqual;
- ToggleButton* m_bpButtonDifferent;
- ToggleButton* m_bpButtonSyncDirNone;
- ToggleButton* m_bpButtonRightNewer;
- ToggleButton* m_bpButtonRightOnly;
- ToggleButton* m_bpButtonSyncDeleteRight;
- ToggleButton* m_bpButtonSyncDirOverwRight;
- ToggleButton* m_bpButtonSyncCreateRight;
- ToggleButton* m_bpButtonConflict;
- wxPanel* m_panelStatusBar;
- wxStaticText* m_staticTextStatusLeft;
- wxStaticLine* m_staticline9;
- wxStaticText* m_staticTextStatusMiddle;
- wxStaticLine* m_staticline10;
- wxStaticText* m_staticTextStatusRight;
- wxStaticBitmap* m_bitmap15;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnCompare( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSwitchView( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnNewConfig( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSaveConfig( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnLoadConfig( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuQuit( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuGlobalSettings( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuBatchJob( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncSettings( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnDirSelected( wxFileDirPickerEvent& event ) { event.Skip(); }
- virtual void OnSwapSides( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnLeftGridDoubleClick( wxGridEvent& event ) { event.Skip(); }
- virtual void OnContextRim( wxGridEvent& event ) { event.Skip(); }
- virtual void OnSortLeftGrid( wxGridEvent& event ) { event.Skip(); }
- virtual void OnContextRimLabelLeft( wxGridEvent& event ) { event.Skip(); }
- virtual void OnContextMiddle( wxGridEvent& event ) { event.Skip(); }
- virtual void OnSortMiddleGrid( wxGridEvent& event ) { event.Skip(); }
- virtual void OnContextMiddleLabel( wxGridEvent& event ) { event.Skip(); }
- virtual void OnRightGridDoubleClick( wxGridEvent& event ) { event.Skip(); }
- virtual void OnSortRightGrid( wxGridEvent& event ) { event.Skip(); }
- virtual void OnContextRimLabelRight( wxGridEvent& event ) { event.Skip(); }
- virtual void OnCfgHistoryKeyEvent( wxKeyEvent& event ) { event.Skip(); }
- virtual void OnLoadFromHistory( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnConfigureFilter( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnHideFilteredButton( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncCreateLeft( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncDirLeft( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncDeleteLeft( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnLeftOnlyFiles( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnLeftNewerFiles( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnEqualFiles( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnDifferentFiles( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncDirNone( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnRightNewerFiles( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnRightOnlyFiles( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncDeleteRight( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncDirRight( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncCreateRight( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnConflictFiles( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
- wxPanel* m_panelTopLeft;
- wxBitmapButton* m_bpButtonRemovePair;
- FolderHistoryBox* m_directoryLeft;
- zen::DirPickerCtrl* m_dirPickerLeft;
- wxBitmapButton* m_bpButtonAltCompCfg;
- wxBitmapButton* m_bpButtonLocalFilter;
- wxBitmapButton* m_bpButtonAltSyncCfg;
- wxPanel* m_panelTopRight;
- FolderHistoryBox* m_directoryRight;
- zen::DirPickerCtrl* m_dirPickerRight;
- wxPanel* m_panelLeft;
- wxPanel* m_panelRight;
-
- MainDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
-
- ~MainDialogGenerated();
-
+private:
+
+protected:
+ wxMenuBar* m_menubar1;
+ wxMenu* m_menuFile;
+ wxMenuItem* m_menuItem10;
+ wxMenuItem* m_menuItem11;
+ wxMenuItem* m_menuItemSwitchView;
+ wxMenuItem* m_menuItemNew;
+ wxMenuItem* m_menuItemSave;
+ wxMenuItem* m_menuItemLoad;
+ wxMenu* m_menuAdvanced;
+ wxMenu* m_menuLanguages;
+ wxMenuItem* m_menuItemGlobSett;
+ wxMenuItem* m_menuItem7;
+ wxMenu* m_menuHelp;
+ wxMenuItem* m_menuItemCheckVer;
+ wxMenuItem* m_menuItemAbout;
+ wxBoxSizer* bSizerPanelHolder;
+ wxPanel* m_panelTopButtons;
+ wxBoxSizer* bSizerTopButtons;
+ wxStaticText* m_staticTextCmpVariant;
+ zen::BitmapButton* m_buttonCompare;
+ wxButton* m_buttonAbort;
+ wxBitmapButton* m_bpButtonCmpConfig;
+ wxStaticText* m_staticTextSyncVariant;
+ wxBitmapButton* m_bpButtonSyncConfig;
+ zen::BitmapButton* m_buttonStartSync;
+ wxPanel* m_panelDirectoryPairs;
+ wxStaticBoxSizer* sbSizerDirLeft;
+ wxBitmapButton* m_bpButtonAddPair;
+ wxPanel* m_panelTopMiddle;
+ wxBitmapButton* m_bpButtonSwapSides;
+ wxStaticBoxSizer* sbSizerDirRight;
+ wxScrolledWindow* m_scrolledWindowFolderPairs;
+ wxBoxSizer* bSizerAddFolderPairs;
+ wxPanel* m_panelGrids;
+ wxBoxSizer* bSizerGridHolder;
+ CustomGridLeft* m_gridLeft;
+ wxPanel* m_panelMiddle;
+ CustomGridMiddle* m_gridMiddle;
+ CustomGridRight* m_gridRight;
+ wxPanel* m_panelConfig;
+ wxBoxSizer* bSizerConfig;
+ wxBitmapButton* m_bpButtonSave;
+ wxBitmapButton* m_bpButtonLoad;
+ wxListBox* m_listBoxHistory;
+ wxPanel* m_panelFilter;
+ wxBitmapButton* m_bpButtonFilter;
+ wxCheckBox* m_checkBoxHideFilt;
+ wxPanel* m_panelStatistics;
+ wxBoxSizer* bSizerStatistics;
+ wxStaticBitmap* m_bitmapCreate;
+ wxTextCtrl* m_textCtrlCreate;
+ wxStaticBitmap* m_bitmapUpdate;
+ wxTextCtrl* m_textCtrlUpdate;
+ wxStaticBitmap* m_bitmapDelete;
+ wxTextCtrl* m_textCtrlDelete;
+ wxStaticBitmap* m_bitmapData;
+ wxTextCtrl* m_textCtrlData;
+ wxPanel* m_panelViewFilter;
+ wxBoxSizer* bSizerViewFilter;
+ ToggleButton* m_bpButtonSyncCreateLeft;
+ ToggleButton* m_bpButtonSyncDirOverwLeft;
+ ToggleButton* m_bpButtonSyncDeleteLeft;
+ ToggleButton* m_bpButtonLeftOnly;
+ ToggleButton* m_bpButtonLeftNewer;
+ ToggleButton* m_bpButtonEqual;
+ ToggleButton* m_bpButtonDifferent;
+ ToggleButton* m_bpButtonSyncDirNone;
+ ToggleButton* m_bpButtonRightNewer;
+ ToggleButton* m_bpButtonRightOnly;
+ ToggleButton* m_bpButtonSyncDeleteRight;
+ ToggleButton* m_bpButtonSyncDirOverwRight;
+ ToggleButton* m_bpButtonSyncCreateRight;
+ ToggleButton* m_bpButtonConflict;
+ wxPanel* m_panelStatusBar;
+ wxBoxSizer* bSizerStatusLeftDirectories;
+ wxStaticBitmap* m_bitmapSmallDirectoryLeft;
+ wxStaticText* m_staticTextStatusLeftDirs;
+ wxBoxSizer* bSizerStatusLeftFiles;
+ wxStaticBitmap* m_bitmapSmallFileLeft;
+ wxStaticText* m_staticTextStatusLeftFiles;
+ wxStaticText* m_staticTextStatusLeftBytes;
+ wxStaticLine* m_staticline9;
+ wxStaticText* m_staticTextStatusMiddle;
+ wxStaticLine* m_staticline10;
+ wxBoxSizer* bSizerStatusRightDirectories;
+ wxStaticBitmap* m_bitmapSmallDirectoryRight;
+ wxStaticText* m_staticTextStatusRightDirs;
+ wxBoxSizer* bSizerStatusRightFiles;
+ wxStaticBitmap* m_bitmapSmallFileRight;
+ wxStaticText* m_staticTextStatusRightFiles;
+ wxStaticText* m_staticTextStatusRightBytes;
+ wxStaticBitmap* m_bitmap15;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnCompare( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSwitchView( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnNewConfig( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSaveConfig( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnLoadConfig( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuQuit( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuGlobalSettings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuBatchJob( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncSettings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnDirSelected( wxFileDirPickerEvent& event ) { event.Skip(); }
+ virtual void OnSwapSides( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnLeftGridDoubleClick( wxGridEvent& event ) { event.Skip(); }
+ virtual void OnContextRim( wxGridEvent& event ) { event.Skip(); }
+ virtual void OnSortLeftGrid( wxGridEvent& event ) { event.Skip(); }
+ virtual void OnContextRimLabelLeft( wxGridEvent& event ) { event.Skip(); }
+ virtual void OnContextMiddle( wxGridEvent& event ) { event.Skip(); }
+ virtual void OnSortMiddleGrid( wxGridEvent& event ) { event.Skip(); }
+ virtual void OnContextMiddleLabel( wxGridEvent& event ) { event.Skip(); }
+ virtual void OnRightGridDoubleClick( wxGridEvent& event ) { event.Skip(); }
+ virtual void OnSortRightGrid( wxGridEvent& event ) { event.Skip(); }
+ virtual void OnContextRimLabelRight( wxGridEvent& event ) { event.Skip(); }
+ virtual void OnCfgHistoryKeyEvent( wxKeyEvent& event ) { event.Skip(); }
+ virtual void OnLoadFromHistory( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnConfigureFilter( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnHideFilteredButton( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncCreateLeft( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncDirLeft( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncDeleteLeft( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnLeftOnlyFiles( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnLeftNewerFiles( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnEqualFiles( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnDifferentFiles( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncDirNone( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnRightNewerFiles( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnRightOnlyFiles( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncDeleteRight( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncDirRight( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncCreateRight( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnConflictFiles( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+ wxPanel* m_panelTopLeft;
+ wxBitmapButton* m_bpButtonRemovePair;
+ FolderHistoryBox* m_directoryLeft;
+ zen::DirPickerCtrl* m_dirPickerLeft;
+ wxBitmapButton* m_bpButtonAltCompCfg;
+ wxBitmapButton* m_bpButtonLocalFilter;
+ wxBitmapButton* m_bpButtonAltSyncCfg;
+ wxPanel* m_panelTopRight;
+ FolderHistoryBox* m_directoryRight;
+ zen::DirPickerCtrl* m_dirPickerRight;
+ wxPanel* m_panelLeft;
+ wxPanel* m_panelRight;
+
+ MainDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
+
+ ~MainDialogGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class FolderPairGenerated
///////////////////////////////////////////////////////////////////////////////
-class FolderPairGenerated : public wxPanel
+class FolderPairGenerated : public wxPanel
{
- private:
-
- protected:
-
- public:
- wxPanel* m_panelLeft;
- wxBitmapButton* m_bpButtonRemovePair;
- FolderHistoryBox* m_directoryLeft;
- zen::DirPickerCtrl* m_dirPickerLeft;
- wxPanel* m_panel20;
- wxBitmapButton* m_bpButtonAltCompCfg;
- wxBitmapButton* m_bpButtonLocalFilter;
- wxBitmapButton* m_bpButtonAltSyncCfg;
- wxPanel* m_panelRight;
- FolderHistoryBox* m_directoryRight;
- zen::DirPickerCtrl* m_dirPickerRight;
-
- FolderPairGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
- ~FolderPairGenerated();
-
+private:
+
+protected:
+
+public:
+ wxPanel* m_panelLeft;
+ wxBitmapButton* m_bpButtonRemovePair;
+ FolderHistoryBox* m_directoryLeft;
+ zen::DirPickerCtrl* m_dirPickerLeft;
+ wxPanel* m_panel20;
+ wxBitmapButton* m_bpButtonAltCompCfg;
+ wxBitmapButton* m_bpButtonLocalFilter;
+ wxBitmapButton* m_bpButtonAltSyncCfg;
+ wxPanel* m_panelRight;
+ FolderHistoryBox* m_directoryRight;
+ zen::DirPickerCtrl* m_dirPickerRight;
+
+ FolderPairGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
+ ~FolderPairGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class BatchDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class BatchDlgGenerated : public wxDialog
+class BatchDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxStaticBitmap* m_bitmap27;
- wxPanel* m_panel8;
- wxStaticText* m_staticText56;
- wxStaticText* m_staticText44;
- wxBitmapButton* m_bpButtonHelp;
- wxListbook* m_listbook1;
- wxPanel* m_panelOverview;
- wxBitmapButton* m_bpButtonCmpConfig;
- wxStaticText* m_staticTextCmpVariant;
- wxBitmapButton* m_bpButtonFilter;
- wxStaticText* m_staticTextSyncVariant;
- wxBitmapButton* m_bpButtonSyncConfig;
- wxChoice* m_choiceHandleError;
- wxBoxSizer* sbSizerMainPair;
- wxPanel* m_panelMainPair;
- wxStaticText* m_staticText532;
- wxStaticText* m_staticText5411;
- wxBoxSizer* bSizerAddFolderPairs;
- wxPanel* m_panelBatchSettings;
- wxCheckBox* m_checkBoxSilent;
- wxStaticBoxSizer* sbSizerLogfileDir;
- wxStaticText* m_staticText96;
- wxSpinCtrl* m_spinCtrlLogCountMax;
- wxPanel* m_panelLogfile;
- wxStaticText* m_staticText94;
- zen::DirPickerCtrl* m_dirPickerLogfileDir;
- wxButton* m_buttonSave;
- wxButton* m_buttonLoad;
- wxButton* m_button6;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnConfigureFilter( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncSettings( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnChangeMaxLogCountTxt( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSaveBatchJob( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnLoadBatchJob( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
- wxScrolledWindow* m_scrolledWindow6;
- wxBitmapButton* m_bpButtonAddPair;
- wxBitmapButton* m_bpButtonRemovePair;
- wxPanel* m_panelLeft;
- FolderHistoryBox* m_directoryLeft;
- zen::DirPickerCtrl* m_dirPickerLeft;
- wxPanel* m_panelRight;
- FolderHistoryBox* m_directoryRight;
- zen::DirPickerCtrl* m_dirPickerRight;
- wxBitmapButton* m_bpButtonAltCompCfg;
- wxBitmapButton* m_bpButtonLocalFilter;
- wxBitmapButton* m_bpButtonAltSyncCfg;
- FolderHistoryBox* m_comboBoxLogfileDir;
-
- BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Create a batch job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
- ~BatchDlgGenerated();
-
+private:
+
+protected:
+ wxStaticBitmap* m_bitmap27;
+ wxPanel* m_panel8;
+ wxStaticText* m_staticText56;
+ wxStaticText* m_staticText44;
+ wxBitmapButton* m_bpButtonHelp;
+ wxListbook* m_listbook1;
+ wxPanel* m_panelOverview;
+ wxBitmapButton* m_bpButtonCmpConfig;
+ wxStaticText* m_staticTextCmpVariant;
+ wxBitmapButton* m_bpButtonFilter;
+ wxStaticText* m_staticTextSyncVariant;
+ wxBitmapButton* m_bpButtonSyncConfig;
+ wxChoice* m_choiceHandleError;
+ wxBoxSizer* sbSizerMainPair;
+ wxPanel* m_panelMainPair;
+ wxStaticText* m_staticText532;
+ wxStaticText* m_staticText5411;
+ wxBoxSizer* bSizerAddFolderPairs;
+ wxPanel* m_panelBatchSettings;
+ wxCheckBox* m_checkBoxSilent;
+ wxStaticBoxSizer* sbSizerLogfileDir;
+ wxStaticText* m_staticText96;
+ wxSpinCtrl* m_spinCtrlLogCountMax;
+ wxPanel* m_panelLogfile;
+ wxStaticText* m_staticText94;
+ zen::DirPickerCtrl* m_dirPickerLogfileDir;
+ wxButton* m_buttonSave;
+ wxButton* m_buttonLoad;
+ wxButton* m_button6;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnConfigureFilter( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncSettings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnChangeMaxLogCountTxt( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSaveBatchJob( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnLoadBatchJob( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+ wxScrolledWindow* m_scrolledWindow6;
+ wxBitmapButton* m_bpButtonAddPair;
+ wxBitmapButton* m_bpButtonRemovePair;
+ wxPanel* m_panelLeft;
+ FolderHistoryBox* m_directoryLeft;
+ zen::DirPickerCtrl* m_dirPickerLeft;
+ wxPanel* m_panelRight;
+ FolderHistoryBox* m_directoryRight;
+ zen::DirPickerCtrl* m_dirPickerRight;
+ wxBitmapButton* m_bpButtonAltCompCfg;
+ wxBitmapButton* m_bpButtonLocalFilter;
+ wxBitmapButton* m_bpButtonAltSyncCfg;
+ FolderHistoryBox* m_comboBoxLogfileDir;
+
+ BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Create a batch job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~BatchDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class BatchFolderPairGenerated
///////////////////////////////////////////////////////////////////////////////
-class BatchFolderPairGenerated : public wxPanel
+class BatchFolderPairGenerated : public wxPanel
{
- private:
-
- protected:
- wxPanel* m_panel32;
- wxStaticText* m_staticText53;
- wxStaticText* m_staticText541;
- wxPanel* m_panelLeft;
- wxPanel* m_panelRight;
-
- public:
- wxBitmapButton* m_bpButtonRemovePair;
- FolderHistoryBox* m_directoryLeft;
- zen::DirPickerCtrl* m_dirPickerLeft;
- FolderHistoryBox* m_directoryRight;
- zen::DirPickerCtrl* m_dirPickerRight;
- wxBitmapButton* m_bpButtonAltCompCfg;
- wxBitmapButton* m_bpButtonLocalFilter;
- wxBitmapButton* m_bpButtonAltSyncCfg;
-
- BatchFolderPairGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
- ~BatchFolderPairGenerated();
-
+private:
+
+protected:
+ wxPanel* m_panel32;
+ wxStaticText* m_staticText53;
+ wxStaticText* m_staticText541;
+ wxPanel* m_panelLeft;
+ wxPanel* m_panelRight;
+
+public:
+ wxBitmapButton* m_bpButtonRemovePair;
+ FolderHistoryBox* m_directoryLeft;
+ zen::DirPickerCtrl* m_dirPickerLeft;
+ FolderHistoryBox* m_directoryRight;
+ zen::DirPickerCtrl* m_dirPickerRight;
+ wxBitmapButton* m_bpButtonAltCompCfg;
+ wxBitmapButton* m_bpButtonLocalFilter;
+ wxBitmapButton* m_bpButtonAltSyncCfg;
+
+ BatchFolderPairGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
+ ~BatchFolderPairGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class CompareStatusGenerated
///////////////////////////////////////////////////////////////////////////////
-class CompareStatusGenerated : public wxPanel
+class CompareStatusGenerated : public wxPanel
{
- private:
-
- protected:
- wxStaticText* m_staticText30;
- 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_staticText117;
- wxStaticText* m_staticTextDataRemaining;
- wxStaticText* m_staticText118;
- wxBoxSizer* sSizerSpeed;
- wxStaticText* m_staticText104;
- wxStaticText* m_staticTextSpeed;
- wxBoxSizer* sSizerTimeRemaining;
- wxStaticText* m_staticTextTimeRemFixed;
- wxStaticText* m_staticTextRemTime;
- wxBoxSizer* sSizerTimeElapsed;
- wxStaticText* m_staticTextTimeElapsed;
-
- public:
-
- CompareStatusGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxRAISED_BORDER|wxTAB_TRAVERSAL );
- ~CompareStatusGenerated();
-
+private:
+
+protected:
+ wxStaticText* m_staticText30;
+ 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_staticText117;
+ wxStaticText* m_staticTextDataRemaining;
+ wxStaticText* m_staticText118;
+ wxBoxSizer* sSizerSpeed;
+ wxStaticText* m_staticText104;
+ wxStaticText* m_staticTextSpeed;
+ wxBoxSizer* sSizerTimeRemaining;
+ wxStaticText* m_staticTextTimeRemFixed;
+ wxStaticText* m_staticTextRemTime;
+ wxBoxSizer* sSizerTimeElapsed;
+ wxStaticText* m_staticTextTimeElapsed;
+
+public:
+
+ CompareStatusGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxRAISED_BORDER|wxTAB_TRAVERSAL );
+ ~CompareStatusGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class SyncCfgDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class SyncCfgDlgGenerated : public wxDialog
+class SyncCfgDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxStaticText* m_staticText1;
- wxRadioButton* m_radioBtnAutomatic;
- wxButton* m_buttonAutomatic;
- wxStaticText* m_staticText81;
- wxRadioButton* m_radioBtnMirror;
- wxButton* m_buttonOneWay;
- wxStaticText* m_staticText8;
- wxRadioButton* m_radioBtnUpdate;
- wxButton* m_buttonUpdate;
- wxStaticText* m_staticText101;
- wxRadioButton* m_radioBtnCustom;
- wxButton* m_buttonUpdate1;
- wxStaticText* m_staticText9;
- wxBoxSizer* bSizer201;
- wxStaticBoxSizer* sbSizerErrorHandling;
- wxChoice* m_choiceHandleError;
- wxStaticBoxSizer* sbSizerCustDelDir;
- wxChoice* m_choiceHandleDeletion;
- wxPanel* m_panelCustomDeletionDir;
- FolderHistoryBox* m_customDelFolder;
- zen::DirPickerCtrl* m_dirPickerCustomDelFolder;
- wxButton* m_buttonOK;
- wxButton* m_button16;
- wxStaticBitmap* m_bitmapDatabase;
- wxBoxSizer* sbSizerSyncDirections;
- wxStaticText* m_staticText21;
- wxStaticText* m_staticText31;
- wxStaticLine* m_staticline3;
- 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;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnSyncAutomatic( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncAutomaticDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnSyncMirror( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncMirrorDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnSyncUpdate( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncUpdateDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnSyncCustom( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncCustomDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnChangeDeletionHandling( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnApply( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( 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(); }
-
-
- public:
-
- SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Synchronization settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE );
- ~SyncCfgDlgGenerated();
-
+private:
+
+protected:
+ wxStaticText* m_staticText1;
+ wxRadioButton* m_radioBtnAutomatic;
+ wxButton* m_buttonAutomatic;
+ wxStaticText* m_staticText81;
+ wxRadioButton* m_radioBtnMirror;
+ wxButton* m_buttonOneWay;
+ wxStaticText* m_staticText8;
+ wxRadioButton* m_radioBtnUpdate;
+ wxButton* m_buttonUpdate;
+ wxStaticText* m_staticText101;
+ wxRadioButton* m_radioBtnCustom;
+ wxButton* m_buttonUpdate1;
+ wxStaticText* m_staticText9;
+ wxBoxSizer* bSizer201;
+ wxStaticBoxSizer* sbSizerErrorHandling;
+ wxChoice* m_choiceHandleError;
+ wxStaticBoxSizer* sbSizerCustDelDir;
+ wxChoice* m_choiceHandleDeletion;
+ wxPanel* m_panelCustomDeletionDir;
+ FolderHistoryBox* m_customDelFolder;
+ zen::DirPickerCtrl* m_dirPickerCustomDelFolder;
+ wxButton* m_buttonOK;
+ wxButton* m_button16;
+ wxStaticBitmap* m_bitmapDatabase;
+ wxBoxSizer* sbSizerSyncDirections;
+ wxStaticText* m_staticText21;
+ wxStaticText* m_staticText31;
+ wxStaticLine* m_staticline3;
+ 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;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnSyncAutomatic( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncAutomaticDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnSyncMirror( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncMirrorDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnSyncUpdate( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncUpdateDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnSyncCustom( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncCustomDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnChangeDeletionHandling( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnApply( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( 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(); }
+
+
+public:
+
+ SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Synchronization settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE );
+ ~SyncCfgDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class CmpCfgDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class CmpCfgDlgGenerated : public wxDialog
+class CmpCfgDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxRadioButton* m_radioBtnSizeDate;
- wxStaticBitmap* m_bitmapByTime;
- wxButton* m_buttonTimeSize;
- wxRadioButton* m_radioBtnContent;
- wxStaticBitmap* m_bitmapByContent;
- wxButton* m_buttonContent;
- wxChoice* m_choiceHandleSymlinks;
- wxBitmapButton* m_bpButtonHelp;
- wxButton* m_button10;
- wxButton* m_button6;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnTimeSize( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnContent( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnContentDouble( wxMouseEvent& 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:
+ wxRadioButton* m_radioBtnSizeDate;
+ wxStaticBitmap* m_bitmapByTime;
+ wxButton* m_buttonTimeSize;
+ wxRadioButton* m_radioBtnContent;
+ wxStaticBitmap* m_bitmapByContent;
+ wxButton* m_buttonContent;
+ wxChoice* m_choiceHandleSymlinks;
+ wxBitmapButton* m_bpButtonHelp;
+ wxButton* m_button10;
+ wxButton* m_button6;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnTimeSize( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnContent( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnContentDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+
+ CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Comparison settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
+ ~CmpCfgDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class SyncStatusDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class SyncStatusDlgGenerated : public wxFrame
+class SyncStatusDlgGenerated : public wxFrame
+{
+private:
+
+protected:
+ wxPanel* m_panelBackground;
+ wxBoxSizer* bSizerTop;
+ wxStaticBitmap* m_bitmapStatus;
+ wxStaticText* m_staticTextStatus;
+ wxAnimationCtrl* m_animationControl1;
+ wxBoxSizer* bSizerCurrentOperation;
+ wxStaticText* m_staticText2511;
+ wxTextCtrl* m_textCtrlInfo;
+ wxPanel* m_panelProgress;
+ wxBoxSizer* bSizer171;
+ wxStaticBoxSizer* bSizerProgressStat;
+ wxStaticText* m_staticTextItemsRem;
+ wxBoxSizer* bSizerItemsRem;
+ wxStaticText* m_staticTextRemainingObj;
+ wxStaticText* m_staticText96;
+ wxStaticText* m_staticTextDataRemaining;
+ wxStaticText* m_staticText97;
+ wxStaticText* m_staticTextItemsProc;
+ wxBoxSizer* bSizerItemsProc;
+ wxStaticText* m_staticTextProcessedObj;
+ wxStaticText* m_staticText98;
+ wxStaticText* m_staticTextDataProcessed;
+ wxStaticText* m_staticText99;
+ wxStaticText* m_staticTextSpeedDescr;
+ wxStaticText* m_staticTextSpeed;
+ wxStaticText* m_staticText55;
+ wxStaticText* m_staticTextTimeElapsed;
+ wxStaticText* m_staticTextRemTimeDescr;
+ wxStaticText* m_staticTextRemTime;
+ zen::Graph2D* m_panelGraph;
+ wxBoxSizer* bSizerFinalStat;
+ wxListbook* m_listbookResult;
+ wxBoxSizer* bSizer28;
+ wxButton* m_buttonOK;
+ wxButton* m_buttonPause;
+ wxButton* m_buttonAbort;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnIconize( wxIconizeEvent& event ) { event.Skip(); }
+ virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnPause( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnAbort( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+ wxGauge* m_gauge1;
+
+ SyncStatusDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 620,330 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
+
+ ~SyncStatusDlgGenerated();
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class MyPanel5
+///////////////////////////////////////////////////////////////////////////////
+class MyPanel5 : public wxPanel
{
- private:
-
- protected:
- wxBoxSizer* bSizer27;
- wxStaticBitmap* m_bitmapStatus;
- wxStaticText* m_staticTextStatus;
- wxAnimationCtrl* m_animationControl1;
- wxBoxSizer* bSizerCurrentOperation;
- wxStaticText* m_staticText2511;
- wxTextCtrl* m_textCtrlInfo;
- wxBoxSizer* bSizerHoldStretch;
- wxBoxSizer* bSizerProgressMain;
- wxStaticBoxSizer* bSizerProgressStat;
- wxStaticText* m_staticTextItemsRem;
- wxBoxSizer* bSizerItemsRem;
- wxStaticText* m_staticTextRemainingObj;
- wxStaticText* m_staticText96;
- wxStaticText* m_staticTextDataRemaining;
- wxStaticText* m_staticText97;
- wxStaticText* m_staticTextSpeedDescr;
- wxStaticText* m_staticTextSpeed;
- wxStaticText* m_staticText55;
- wxStaticText* m_staticTextTimeElapsed;
- wxStaticText* m_staticTextRemTimeDescr;
- wxStaticText* m_staticTextRemTime;
- zen::Graph2D* m_panelGraph;
- wxBoxSizer* bSizerFinalStat;
- wxListbook* m_listbookResult;
- wxStaticText* m_staticTextItemsProc;
- wxBoxSizer* bSizerItemsProc;
- wxStaticText* m_staticTextProcessedObj;
- wxStaticText* m_staticText98;
- wxStaticText* m_staticTextDataProcessed;
- wxStaticText* m_staticText99;
- wxStaticText* m_staticText551;
- wxStaticText* m_staticTextTimeTotal;
- wxBoxSizer* bSizer28;
- wxButton* m_buttonOK;
- wxButton* m_buttonPause;
- wxButton* m_buttonAbort;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnIconize( wxIconizeEvent& event ) { event.Skip(); }
- virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnPause( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnAbort( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
- wxGauge* m_gauge1;
-
- SyncStatusDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 620,330 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
-
- ~SyncStatusDlgGenerated();
-
+private:
+
+protected:
+
+public:
+
+ MyPanel5( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,300 ), long style = wxTAB_TRAVERSAL );
+ ~MyPanel5();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class LogControlGenerated
///////////////////////////////////////////////////////////////////////////////
-class LogControlGenerated : public wxPanel
+class LogControlGenerated : public wxPanel
{
- private:
-
- protected:
- ToggleButton* m_bpButtonErrors;
- ToggleButton* m_bpButtonWarnings;
- ToggleButton* m_bpButtonInfo;
- wxTextCtrl* m_textCtrlInfo;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnErrors( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnWarnings( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnInfo( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
-
- LogControlGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
- ~LogControlGenerated();
-
+private:
+
+protected:
+ ToggleButton* m_bpButtonErrors;
+ ToggleButton* m_bpButtonWarnings;
+ ToggleButton* m_bpButtonInfo;
+ wxTextCtrl* m_textCtrlInfo;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnErrors( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnWarnings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnInfo( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+
+ LogControlGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
+ ~LogControlGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class AboutDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class AboutDlgGenerated : public wxDialog
+class AboutDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxPanel* m_panel5;
- wxStaticBitmap* m_bitmap11;
- wxStaticText* m_build;
- wxPanel* m_panel33;
- wxBoxSizer* bSizerCodeInfo;
- wxStaticText* m_staticText72;
- wxHyperlinkCtrl* m_hyperlink9;
- wxHyperlinkCtrl* m_hyperlink11;
- wxHyperlinkCtrl* m_hyperlink10;
- wxHyperlinkCtrl* m_hyperlink13;
- wxHyperlinkCtrl* m_hyperlink7;
- wxHyperlinkCtrl* m_hyperlink16;
- wxHyperlinkCtrl* m_hyperlink8;
- wxHyperlinkCtrl* m_hyperlink15;
- wxHyperlinkCtrl* m_hyperlink12;
- wxHyperlinkCtrl* m_hyperlink18;
- wxHyperlinkCtrl* m_hyperlink14;
- wxHyperlinkCtrl* m_hyperlink21;
- wxScrolledWindow* m_scrolledWindowTranslators;
- wxBoxSizer* bSizerTranslators;
- wxStaticText* m_staticText54;
- wxFlexGridSizer* fgSizerTranslators;
- wxStaticLine* m_staticline3;
- wxStaticText* m_staticText131;
- wxStaticLine* m_staticline12;
- wxStaticBitmap* m_bitmap9;
- wxHyperlinkCtrl* m_hyperlink1;
- wxHyperlinkCtrl* m_hyperlink3;
- wxAnimationCtrl* m_animationControl1;
- wxStaticBitmap* m_bitmap10;
- wxHyperlinkCtrl* m_hyperlink2;
- wxHyperlinkCtrl* m_hyperlink6;
- wxStaticBitmap* m_bitmapTransl;
- wxStaticLine* m_staticline2;
- wxStaticBitmap* m_bitmap13;
- wxHyperlinkCtrl* m_hyperlink5;
- wxButton* m_buttonOkay;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnOK( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
-
- AboutDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE );
- ~AboutDlgGenerated();
-
+private:
+
+protected:
+ wxPanel* m_panel5;
+ wxStaticBitmap* m_bitmap11;
+ wxStaticText* m_build;
+ wxPanel* m_panel33;
+ wxBoxSizer* bSizerCodeInfo;
+ wxStaticText* m_staticText72;
+ wxHyperlinkCtrl* m_hyperlink9;
+ wxHyperlinkCtrl* m_hyperlink11;
+ wxHyperlinkCtrl* m_hyperlink10;
+ wxHyperlinkCtrl* m_hyperlink13;
+ wxHyperlinkCtrl* m_hyperlink7;
+ wxHyperlinkCtrl* m_hyperlink16;
+ wxHyperlinkCtrl* m_hyperlink8;
+ wxHyperlinkCtrl* m_hyperlink15;
+ wxHyperlinkCtrl* m_hyperlink12;
+ wxHyperlinkCtrl* m_hyperlink18;
+ wxHyperlinkCtrl* m_hyperlink14;
+ wxHyperlinkCtrl* m_hyperlink21;
+ wxScrolledWindow* m_scrolledWindowTranslators;
+ wxBoxSizer* bSizerTranslators;
+ wxStaticText* m_staticText54;
+ wxFlexGridSizer* fgSizerTranslators;
+ wxStaticLine* m_staticline3;
+ wxStaticText* m_staticText131;
+ wxStaticLine* m_staticline12;
+ wxStaticBitmap* m_bitmap9;
+ wxHyperlinkCtrl* m_hyperlink1;
+ wxHyperlinkCtrl* m_hyperlink3;
+ wxAnimationCtrl* m_animationControl1;
+ wxStaticBitmap* m_bitmap10;
+ wxHyperlinkCtrl* m_hyperlink2;
+ wxHyperlinkCtrl* m_hyperlink6;
+ wxStaticBitmap* m_bitmapTransl;
+ wxStaticLine* m_staticline2;
+ wxStaticBitmap* m_bitmap13;
+ wxHyperlinkCtrl* m_hyperlink5;
+ wxButton* m_buttonOkay;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnOK( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+
+ AboutDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE );
+ ~AboutDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class ErrorDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class ErrorDlgGenerated : public wxDialog
+class ErrorDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxStaticBitmap* m_bitmap10;
- wxTextCtrl* m_textCtrl8;
- wxCheckBox* m_checkBoxIgnoreErrors;
- wxButton* m_buttonIgnore;
- wxButton* m_buttonRetry;
- wxButton* m_buttonAbort;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnIgnore( wxCommandEvent& 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( 460,250 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER );
- ~ErrorDlgGenerated();
-
+private:
+
+protected:
+ wxStaticBitmap* m_bitmap10;
+ wxTextCtrl* m_textCtrl8;
+ wxCheckBox* m_checkBoxIgnoreErrors;
+ wxButton* m_buttonIgnore;
+ wxButton* m_buttonRetry;
+ wxButton* m_buttonAbort;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnIgnore( wxCommandEvent& 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( 460,250 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER );
+ ~ErrorDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class WarningDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class WarningDlgGenerated : public wxDialog
+class WarningDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxTextCtrl* m_textCtrl8;
- wxCheckBox* m_checkBoxDontShowAgain;
- wxButton* m_buttonIgnore;
- wxButton* m_buttonSwitch;
- wxButton* m_buttonAbort;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnIgnore( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSwitch( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnAbort( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
- wxStaticBitmap* m_bitmap10;
-
- WarningDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Warning"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 460,250 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER );
- ~WarningDlgGenerated();
-
+private:
+
+protected:
+ wxTextCtrl* m_textCtrl8;
+ wxCheckBox* m_checkBoxDontShowAgain;
+ wxButton* m_buttonIgnore;
+ wxButton* m_buttonSwitch;
+ wxButton* m_buttonAbort;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnIgnore( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSwitch( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnAbort( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+ wxStaticBitmap* m_bitmap10;
+
+ WarningDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Warning"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 460,250 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER );
+ ~WarningDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class QuestionDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class QuestionDlgGenerated : public wxDialog
+class QuestionDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxStaticBitmap* m_bitmap10;
- wxTextCtrl* m_textCtrl8;
- wxCheckBox* m_checkBoxDontAskAgain;
- wxButton* m_buttonYes;
- wxButton* m_buttonNo;
- wxButton* m_buttonCancel;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnCheckBoxDontShowAgain( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnYes( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnNo( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
-
- QuestionDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Question"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 420,198 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER );
- ~QuestionDlgGenerated();
-
+private:
+
+protected:
+ wxStaticBitmap* m_bitmap10;
+ wxTextCtrl* m_textCtrl8;
+ wxCheckBox* m_checkBoxDontAskAgain;
+ wxButton* m_buttonYes;
+ wxButton* m_buttonNo;
+ wxButton* m_buttonCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnCheckBoxDontShowAgain( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnYes( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnNo( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+
+ QuestionDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Question"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 420,198 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER );
+ ~QuestionDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class DeleteDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class DeleteDlgGenerated : public wxDialog
+class DeleteDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxStaticBitmap* m_bitmap12;
- wxStaticText* m_staticTextHeader;
- wxCheckBox* m_checkBoxDeleteBothSides;
- wxCheckBox* m_checkBoxUseRecycler;
- wxTextCtrl* m_textCtrlMessage;
- wxButton* m_buttonOK;
- wxButton* m_buttonCancel;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnDelOnBothSides( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnUseRecycler( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnOK( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
-
- DeleteDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Confirm"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 553,336 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER );
- ~DeleteDlgGenerated();
-
+private:
+
+protected:
+ wxStaticBitmap* m_bitmap12;
+ wxStaticText* m_staticTextHeader;
+ wxCheckBox* m_checkBoxDeleteBothSides;
+ wxCheckBox* m_checkBoxUseRecycler;
+ wxTextCtrl* m_textCtrlMessage;
+ wxButton* m_buttonOK;
+ wxButton* m_buttonCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnDelOnBothSides( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnUseRecycler( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOK( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+
+ DeleteDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Confirm"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 553,336 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER );
+ ~DeleteDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class FilterDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class FilterDlgGenerated : public wxDialog
+class FilterDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxStaticBitmap* m_bitmap26;
- wxPanel* m_panel8;
- wxStaticText* m_staticTexHeader;
- wxStaticText* m_staticText44;
- wxBitmapButton* m_bpButtonHelp;
- wxPanel* m_panel13;
- wxStaticLine* m_staticline10;
- wxStaticText* m_staticText45;
- wxStaticText* m_staticText83;
- wxStaticText* m_staticText84;
- wxStaticText* m_staticText85;
- wxStaticText* m_staticText181;
- wxStaticText* m_staticText1811;
- wxStaticBitmap* m_bitmapInclude;
- wxTextCtrl* m_textCtrlInclude;
- wxStaticBitmap* m_bitmapExclude;
- wxTextCtrl* m_textCtrlExclude;
- wxStaticBitmap* m_bitmapFilterDate;
- wxStaticText* m_staticText103;
- wxChoice* m_choiceUnitTimespan;
- wxSpinCtrl* m_spinCtrlTimespan;
- wxStaticBitmap* m_bitmapFilterSize;
- wxStaticText* m_staticText101;
- wxSpinCtrl* m_spinCtrlMinSize;
- wxChoice* m_choiceUnitMinSize;
- wxStaticText* m_staticText102;
- wxSpinCtrl* m_spinCtrlMaxSize;
- wxChoice* m_choiceUnitMaxSize;
- wxButton* m_button9;
- wxButton* m_button10;
- wxButton* m_button17;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnUpdateNameFilter( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnUpdateChoice( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnApply( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
-
- FilterDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Configure filter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
- ~FilterDlgGenerated();
-
+private:
+
+protected:
+ wxStaticBitmap* m_bitmap26;
+ wxPanel* m_panel8;
+ wxStaticText* m_staticTexHeader;
+ wxStaticText* m_staticText44;
+ wxBitmapButton* m_bpButtonHelp;
+ wxPanel* m_panel13;
+ wxStaticLine* m_staticline10;
+ wxStaticText* m_staticText45;
+ wxStaticText* m_staticText83;
+ wxStaticText* m_staticText84;
+ wxStaticText* m_staticText85;
+ wxStaticText* m_staticText181;
+ wxStaticText* m_staticText1811;
+ wxStaticBitmap* m_bitmapInclude;
+ wxTextCtrl* m_textCtrlInclude;
+ wxStaticBitmap* m_bitmapExclude;
+ wxTextCtrl* m_textCtrlExclude;
+ wxStaticBitmap* m_bitmapFilterDate;
+ wxStaticText* m_staticText103;
+ wxChoice* m_choiceUnitTimespan;
+ wxSpinCtrl* m_spinCtrlTimespan;
+ wxStaticBitmap* m_bitmapFilterSize;
+ wxStaticText* m_staticText101;
+ wxSpinCtrl* m_spinCtrlMinSize;
+ wxChoice* m_choiceUnitMinSize;
+ wxStaticText* m_staticText102;
+ wxSpinCtrl* m_spinCtrlMaxSize;
+ wxChoice* m_choiceUnitMaxSize;
+ wxButton* m_button9;
+ wxButton* m_button10;
+ wxButton* m_button17;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnUpdateNameFilter( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnUpdateChoice( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnApply( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+
+ FilterDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Configure filter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~FilterDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class CustomizeColsDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class CustomizeColsDlgGenerated : public wxDialog
+class CustomizeColsDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxCheckListBox* m_checkListColumns;
- wxBitmapButton* m_bpButton29;
- wxBitmapButton* m_bpButton30;
- wxButton* m_button9;
- wxButton* m_button28;
- wxButton* m_button29;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnMoveUp( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMoveDown( 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:
-
- CustomizeColsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Customize columns"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
- ~CustomizeColsDlgGenerated();
-
+private:
+
+protected:
+ wxCheckListBox* m_checkListColumns;
+ wxBitmapButton* m_bpButton29;
+ wxBitmapButton* m_bpButton30;
+ wxButton* m_button9;
+ wxButton* m_button28;
+ wxButton* m_button29;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnMoveUp( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMoveDown( 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:
+
+ CustomizeColsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Customize columns"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
+ ~CustomizeColsDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class GlobalSettingsDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class GlobalSettingsDlgGenerated : public wxDialog
+class GlobalSettingsDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxStaticBitmap* m_bitmapSettings;
- wxPanel* m_panel8;
- wxStaticText* m_staticText56;
- wxCheckBox* m_checkBoxTransCopy;
- wxCheckBox* m_checkBoxCopyLocked;
- wxCheckBox* m_checkBoxCopyPermissions;
- wxStaticLine* m_staticline10;
- wxStaticText* m_staticText100;
- zen::BitmapButton* m_buttonResetDialogs;
- wxGrid* m_gridCustomCommand;
- wxBitmapButton* m_bpButtonAddRow;
- wxBitmapButton* m_bpButtonRemoveRow;
- wxButton* m_button9;
- wxButton* m_buttonOkay;
- wxButton* m_button29;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnResetDialogs( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnRemoveRow( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
-
- GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Global settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
- ~GlobalSettingsDlgGenerated();
-
+private:
+
+protected:
+ wxStaticBitmap* m_bitmapSettings;
+ wxPanel* m_panel8;
+ wxStaticText* m_staticText56;
+ wxCheckBox* m_checkBoxTransCopy;
+ wxTextCtrl* m_textCtrl22;
+ wxCheckBox* m_checkBoxCopyLocked;
+ wxTextCtrl* m_textCtrlCopyLocked;
+ wxCheckBox* m_checkBoxCopyPermissions;
+ wxTextCtrl* m_textCtrl2211;
+ wxStaticText* m_staticText100;
+ zen::BitmapButton* m_buttonResetDialogs;
+ wxGrid* m_gridCustomCommand;
+ wxBitmapButton* m_bpButtonAddRow;
+ wxBitmapButton* m_bpButtonRemoveRow;
+ wxButton* m_button9;
+ wxButton* m_buttonOkay;
+ wxButton* m_button29;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnResetDialogs( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnRemoveRow( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+
+ GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Global settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~GlobalSettingsDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class SyncPreviewDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class SyncPreviewDlgGenerated : public wxDialog
+class SyncPreviewDlgGenerated : public wxDialog
{
- private:
-
- protected:
- zen::BitmapButton* m_buttonStartSync;
- wxStaticLine* m_staticline16;
- wxStaticText* m_staticTextVariant;
- wxStaticLine* m_staticline14;
- wxStaticText* m_staticText94;
- wxStaticBitmap* m_bitmapCreate;
- wxTextCtrl* m_textCtrlCreateL;
- wxStaticBitmap* m_bitmapUpdate;
- wxTextCtrl* m_textCtrlUpdateL;
- wxStaticBitmap* m_bitmapDelete;
- wxTextCtrl* m_textCtrlDeleteL;
- wxStaticText* m_staticText95;
- wxTextCtrl* m_textCtrlCreateR;
- wxTextCtrl* m_textCtrlUpdateR;
- wxTextCtrl* m_textCtrlDeleteR;
- wxStaticBitmap* m_bitmapData;
- wxTextCtrl* m_textCtrlData;
- wxStaticLine* m_staticline12;
- wxCheckBox* m_checkBoxDontShowAgain;
- wxButton* m_button16;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
-
- SyncPreviewDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Synchronization Preview"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
- ~SyncPreviewDlgGenerated();
-
+private:
+
+protected:
+ zen::BitmapButton* m_buttonStartSync;
+ wxStaticLine* m_staticline16;
+ wxStaticText* m_staticTextVariant;
+ wxStaticLine* m_staticline14;
+ wxStaticText* m_staticText94;
+ wxStaticBitmap* m_bitmapCreate;
+ wxTextCtrl* m_textCtrlCreateL;
+ wxStaticBitmap* m_bitmapUpdate;
+ wxTextCtrl* m_textCtrlUpdateL;
+ wxStaticBitmap* m_bitmapDelete;
+ wxTextCtrl* m_textCtrlDeleteL;
+ wxStaticText* m_staticText95;
+ wxTextCtrl* m_textCtrlCreateR;
+ wxTextCtrl* m_textCtrlUpdateR;
+ wxTextCtrl* m_textCtrlDeleteR;
+ wxStaticBitmap* m_bitmapData;
+ wxTextCtrl* m_textCtrlData;
+ wxStaticLine* m_staticline12;
+ wxCheckBox* m_checkBoxDontShowAgain;
+ wxButton* m_button16;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+
+ SyncPreviewDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Synchronization Preview"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
+ ~SyncPreviewDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class PopupFrameGenerated1
///////////////////////////////////////////////////////////////////////////////
-class PopupFrameGenerated1 : public wxFrame
+class PopupFrameGenerated1 : public wxFrame
{
- private:
-
- protected:
-
- public:
- wxStaticBitmap* m_bitmapLeft;
- wxStaticText* m_staticTextMain;
-
- PopupFrameGenerated1( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxSTATIC_BORDER );
-
- ~PopupFrameGenerated1();
-
+private:
+
+protected:
+
+public:
+ wxStaticBitmap* m_bitmapLeft;
+ wxStaticText* m_staticTextMain;
+
+ PopupFrameGenerated1( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxSTATIC_BORDER );
+
+ ~PopupFrameGenerated1();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class SearchDialogGenerated
///////////////////////////////////////////////////////////////////////////////
-class SearchDialogGenerated : public wxDialog
+class SearchDialogGenerated : public wxDialog
{
- private:
-
- protected:
- wxStaticText* m_staticText101;
- wxTextCtrl* m_textCtrlSearchTxt;
- wxCheckBox* m_checkBoxMatchCase;
- wxButton* m_buttonFindNext;
- wxButton* m_button29;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnText( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnFindNext( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
-
- SearchDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Find"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE );
- ~SearchDialogGenerated();
-
+private:
+
+protected:
+ wxStaticText* m_staticText101;
+ wxTextCtrl* m_textCtrlSearchTxt;
+ wxCheckBox* m_checkBoxMatchCase;
+ wxButton* m_buttonFindNext;
+ wxButton* m_button29;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnText( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnFindNext( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+
+ SearchDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Find"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE );
+ ~SearchDialogGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class SelectTimespanDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class SelectTimespanDlgGenerated : public wxDialog
+class SelectTimespanDlgGenerated : public wxDialog
{
- private:
-
- protected:
- wxCalendarCtrl* m_calendarFrom;
- wxCalendarCtrl* m_calendarTo;
- wxButton* m_buttonOkay;
- wxButton* m_button29;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnChangeSelectionFrom( wxCalendarEvent& event ) { event.Skip(); }
- virtual void OnChangeSelectionTo( wxCalendarEvent& event ) { event.Skip(); }
- virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
-
- SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select time span"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
- ~SelectTimespanDlgGenerated();
-
+private:
+
+protected:
+ wxCalendarCtrl* m_calendarFrom;
+ wxCalendarCtrl* m_calendarTo;
+ wxButton* m_buttonOkay;
+ wxButton* m_button29;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnChangeSelectionFrom( wxCalendarEvent& event ) { event.Skip(); }
+ virtual void OnChangeSelectionTo( wxCalendarEvent& event ) { event.Skip(); }
+ virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+public:
+
+ SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select time span"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
+ ~SelectTimespanDlgGenerated();
+
};
#endif //__GUI_GENERATED_H__
diff --git a/ui/gui_status_handler.cpp b/ui/gui_status_handler.cpp
index 824c8084..b353e918 100644
--- a/ui/gui_status_handler.cpp
+++ b/ui/gui_status_handler.cpp
@@ -311,6 +311,7 @@ ProcessCallback::Response SyncStatusHandler::reportError(const wxString& errorMe
case ReturnErrorDlg::BUTTON_ABORT:
errorLog.logMsg(errorMessage, TYPE_ERROR);
abortThisProcess();
+ break;
}
assert (false);
diff --git a/ui/main_dlg.cpp b/ui/main_dlg.cpp
index 30d1a3b4..e1227509 100644
--- a/ui/main_dlg.cpp
+++ b/ui/main_dlg.cpp
@@ -17,7 +17,6 @@
#include <wx/display.h>
#include <wx/app.h>
#include <wx/dcmemory.h>
-#include <boost/bind.hpp>
#include "../lib/folder_history_box.h"
#include "../lib/custom_grid.h"
#include <wx+/button.h>
@@ -54,6 +53,8 @@
#include <wx+/shell_execute.h>
#include "../lib/localization.h"
#include <wx+/image_tools.h>
+#include <wx+/no_flicker.h>
+
using namespace zen;
using namespace std::rel_ops;
@@ -263,39 +264,45 @@ private:
class MenuItemUpdater
{
public:
- MenuItemUpdater(wxMenu* menuToUpdate) : menuToUpdate_(menuToUpdate) {}
+ MenuItemUpdater(wxMenu& menuToUpdate) : menuToUpdate_(menuToUpdate) {}
~MenuItemUpdater()
{
- //start updating menu icons
- const wxMenuItemList& allItems = menuToUpdate_->GetMenuItems();
+ wxMenuItemList allItems = menuToUpdate_.GetMenuItems();
//retrieve menu item positions: unfortunately wxMenu doesn't offer a better way
- MenuItemMap::iterator j;
int index = 0;
- for (wxMenuItemList::const_iterator i = allItems.begin(); i != allItems.end(); ++i, ++index)
- if ((j = menuItems.find(*i)) != menuItems.end())
- j->second = index;
+ for (auto itemIter = allItems.begin(); itemIter != allItems.end(); ++itemIter, ++index) //wxMenuItemList + std::for_each screws up with VS2010!
+ {
+ wxMenuItem* item = *itemIter;
- //finally update items
- for (MenuItemMap::const_iterator i = menuItems.begin(); i != menuItems.end(); ++i)
- if (i->second >= 0)
+ auto iter = menuItems.find(item);
+ if (iter != menuItems.end())
{
- menuToUpdate_->Remove(i->first); //actual workaround
- menuToUpdate_->Insert(i->second, i->first); //
+ /*
+ menuToUpdate_.Remove(item); ->this simple sequence crashes on Kubuntu x64, wxWidgets 2.9.2
+ menuToUpdate_.Insert(index, item);
+ */
+
+ const wxBitmap& bmp = iter->second;
+
+ wxMenuItem* newItem = new wxMenuItem(&menuToUpdate_, item->GetId(), item->GetItemLabel());
+ newItem->SetBitmap(bmp);
+
+ menuToUpdate_.Destroy(item); //actual workaround
+ menuToUpdate_.Insert(index, newItem); //
}
+ }
}
- void addForUpdate(wxMenuItem* newEntry, const wxBitmap& newBitmap)
+ void markForUpdate(wxMenuItem* newEntry, const wxBitmap& bmp)
{
- newEntry->SetBitmap(newBitmap);
- menuItems.insert(std::pair<wxMenuItem*, int>(newEntry, -1));
+ menuItems.insert(std::make_pair(newEntry, bmp));
}
private:
- typedef std::map<wxMenuItem*, int> MenuItemMap;
- wxMenu* menuToUpdate_;
- MenuItemMap menuItems;
+ wxMenu& menuToUpdate_;
+ std::map<wxMenuItem*, wxBitmap> menuItems;
};
@@ -377,9 +384,9 @@ MainDialog::MainDialog(const std::vector<wxString>& cfgFileNames, xmlAccess::Xml
catch (const xmlAccess::FfsXmlError& error)
{
if (error.getSeverity() == xmlAccess::FfsXmlError::WARNING)
- wxMessageBox(error.msg(), _("Warning"), wxOK | wxICON_WARNING);
+ wxMessageBox(error.toString(), _("Warning"), wxOK | wxICON_WARNING);
else
- wxMessageBox(error.msg(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR);
}
const bool startComparisonImmediately = !cfgFileNames.empty() && loadCfgSuccess;
@@ -525,13 +532,23 @@ void MainDialog::init(const xmlAccess::XmlGuiConfig guiCfg,
setConfig(guiCfg);
//set icons for this dialog
- m_buttonCompare->setBitmapFront(GlobalResources::getImage(wxT("compare")));
+ m_buttonCompare ->setBitmapFront(GlobalResources::getImage(wxT("compare")));
m_bpButtonSyncConfig->SetBitmapLabel(GlobalResources::getImage(wxT("syncConfig")));
- m_bpButtonCmpConfig->SetBitmapLabel(GlobalResources::getImage(wxT("cmpConfig")));
- m_bpButtonSave->SetBitmapLabel(GlobalResources::getImage(wxT("save")));
- m_bpButtonLoad->SetBitmapLabel(GlobalResources::getImage(wxT("load")));
- m_bpButtonAddPair->SetBitmapLabel(GlobalResources::getImage(wxT("addFolderPair")));
- m_bitmap15->SetBitmap(GlobalResources::getImage(wxT("statusEdge")));
+ m_bpButtonCmpConfig ->SetBitmapLabel(GlobalResources::getImage(wxT("cmpConfig")));
+ m_bpButtonSave ->SetBitmapLabel(GlobalResources::getImage(wxT("save")));
+ m_bpButtonLoad ->SetBitmapLabel(GlobalResources::getImage(wxT("load")));
+ m_bpButtonAddPair ->SetBitmapLabel(GlobalResources::getImage(wxT("addFolderPair")));
+ m_bitmap15 ->SetBitmap(GlobalResources::getImage(wxT("statusEdge")));
+ {
+ IconBuffer tmp(IconBuffer::SIZE_SMALL);
+ const wxBitmap bmpFile = tmp.genericFileIcon();
+ const wxBitmap bmpDir = tmp.genericDirIcon();
+
+ m_bitmapSmallDirectoryLeft ->SetBitmap(bmpDir);
+ m_bitmapSmallFileLeft ->SetBitmap(bmpFile);
+ m_bitmapSmallDirectoryRight->SetBitmap(bmpDir);
+ m_bitmapSmallFileRight ->SetBitmap(bmpFile);
+ }
m_bitmapCreate->SetBitmap(GlobalResources::getImage(wxT("create")));
m_bitmapUpdate->SetBitmap(GlobalResources::getImage(wxT("update")));
@@ -541,19 +558,19 @@ void MainDialog::init(const xmlAccess::XmlGuiConfig guiCfg,
m_panelTopButtons->Layout(); //wxButtonWithImage size might have changed
//menu icons: workaround for wxWidgets: small hack to update menu items: actually this is a wxWidgets bug (affects Windows- and Linux-build)
- MenuItemUpdater updateMenuFile(m_menuFile);
- updateMenuFile.addForUpdate(m_menuItem10, GlobalResources::getImage(wxT("compareSmall")));
- updateMenuFile.addForUpdate(m_menuItem11, GlobalResources::getImage(wxT("syncSmall")));
- updateMenuFile.addForUpdate(m_menuItemNew, GlobalResources::getImage(wxT("newSmall")));
- updateMenuFile.addForUpdate(m_menuItemSave, GlobalResources::getImage(wxT("saveSmall")));
- updateMenuFile.addForUpdate(m_menuItemLoad, GlobalResources::getImage(wxT("loadSmall")));
+ MenuItemUpdater updateMenuFile(*m_menuFile);
+ updateMenuFile.markForUpdate(m_menuItem10, GlobalResources::getImage(wxT("compareSmall")));
+ updateMenuFile.markForUpdate(m_menuItem11, GlobalResources::getImage(wxT("syncSmall")));
+ updateMenuFile.markForUpdate(m_menuItemNew, GlobalResources::getImage(wxT("newSmall")));
+ updateMenuFile.markForUpdate(m_menuItemSave, GlobalResources::getImage(wxT("saveSmall")));
+ updateMenuFile.markForUpdate(m_menuItemLoad, GlobalResources::getImage(wxT("loadSmall")));
- MenuItemUpdater updateMenuAdv(m_menuAdvanced);
- updateMenuAdv.addForUpdate(m_menuItemGlobSett, GlobalResources::getImage(wxT("settingsSmall")));
- updateMenuAdv.addForUpdate(m_menuItem7, GlobalResources::getImage(wxT("batchSmall")));
+ MenuItemUpdater updateMenuAdv(*m_menuAdvanced);
+ updateMenuAdv.markForUpdate(m_menuItemGlobSett, GlobalResources::getImage(wxT("settingsSmall")));
+ updateMenuAdv.markForUpdate(m_menuItem7, GlobalResources::getImage(wxT("batchSmall")));
- MenuItemUpdater updateMenuHelp(m_menuHelp);
- updateMenuHelp.addForUpdate(m_menuItemAbout, GlobalResources::getImage(wxT("aboutSmall")));
+ MenuItemUpdater updateMenuHelp(*m_menuHelp);
+ updateMenuHelp.markForUpdate(m_menuItemAbout, GlobalResources::getImage(wxT("aboutSmall")));
#ifdef FFS_LINUX
if (!zen::isPortableVersion()) //disable update check for Linux installer-based version -> handled by .deb
@@ -885,7 +902,7 @@ void MainDialog::copySelectionToClipboard(CustomGrid& selectedGrid)
{
for (int k = 0; k < colCount; ++k)
{
- clipboardString += cvrtString<zxString>(selectedGrid.GetCellValue(static_cast<int>(*i), k));
+ clipboardString += copyStringTo<zxString>(selectedGrid.GetCellValue(static_cast<int>(*i), k));
if (k != colCount - 1)
clipboardString += wxT('\t');
}
@@ -898,7 +915,7 @@ void MainDialog::copySelectionToClipboard(CustomGrid& selectedGrid)
{
// these data objects are held by the clipboard,
// so do not delete them in the app.
- wxTheClipboard->SetData(new wxTextDataObject(cvrtString<wxString>(clipboardString)));
+ wxTheClipboard->SetData(new wxTextDataObject(copyStringTo<wxString>(clipboardString)));
wxTheClipboard->Close();
}
}
@@ -1192,9 +1209,13 @@ void MainDialog::clearStatusBar()
stackObjects.pop();
m_staticTextStatusMiddle->SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); //reset color
- m_staticTextStatusLeft ->SetLabel(wxEmptyString);
+ bSizerStatusLeftDirectories->Show(false);
+ bSizerStatusLeftFiles ->Show(false);
+
m_staticTextStatusMiddle->SetLabel(wxEmptyString);
- m_staticTextStatusRight ->SetLabel(wxEmptyString);
+
+ bSizerStatusRightDirectories->Show(false);
+ bSizerStatusRightFiles ->Show(false);
}
@@ -1838,7 +1859,7 @@ void MainDialog::OnContextRim(wxGridEvent& event)
const Zstring extension = afterLast(filename, Zchar('.'));
//add context menu item
- wxMenuItem* menuItemExclExt = new wxMenuItem(contextMenu.get(), wxID_ANY, wxString(_("Exclude via filter:")) + " " + "*." + extension);
+ wxMenuItem* menuItemExclExt = new wxMenuItem(contextMenu.get(), wxID_ANY, _("Exclude via filter:") + L" *." + extension);
menuItemExclExt->SetBitmap(GlobalResources::getImage(wxT("filterSmall")));
contextMenu->Append(menuItemExclExt);
@@ -1855,9 +1876,9 @@ void MainDialog::OnContextRim(wxGridEvent& event)
//CONTEXT_EXCLUDE_OBJ
wxMenuItem* menuItemExclObj = NULL;
if (exFilterCandidateObj.size() == 1)
- menuItemExclObj = new wxMenuItem(contextMenu.get(), wxID_ANY, wxString(_("Exclude via filter:")) + " " + afterLast(exFilterCandidateObj.begin()->first, FILE_NAME_SEPARATOR));
+ menuItemExclObj = new wxMenuItem(contextMenu.get(), wxID_ANY, _("Exclude via filter:") + L" " + afterLast(exFilterCandidateObj.begin()->first, FILE_NAME_SEPARATOR));
else if (exFilterCandidateObj.size() > 1)
- menuItemExclObj = new wxMenuItem(contextMenu.get(), wxID_ANY, wxString(_("Exclude via filter:")) + " " + _("<multiple selection>"));
+ menuItemExclObj = new wxMenuItem(contextMenu.get(), wxID_ANY, _("Exclude via filter:") + L" " + _("<multiple selection>"));
if (menuItemExclObj != NULL)
{
@@ -1887,7 +1908,7 @@ void MainDialog::OnContextRim(wxGridEvent& event)
{
//some trick to translate default external apps on the fly: 1. "open in explorer" 2. "start directly"
//wxString description = wxGetTranslation(i->first);
- wxString description = zen::implementation::translate(i->first.c_str());
+ wxString description = zen::implementation::translate(std::wstring(i->first.c_str()));
if (description.empty())
description = wxT(" "); //wxWidgets doesn't like empty items
@@ -2495,9 +2516,9 @@ void MainDialog::OnDirSelected(wxFileDirPickerEvent& event)
wxString getFormattedHistoryElement(const wxString& filename)
{
- wxString output = afterLast(filename, FILE_NAME_SEPARATOR);
+ wxString output = afterLast(filename, utf8CvrtTo<wxString>(FILE_NAME_SEPARATOR));
if (endsWith(output, ".ffs_gui"))
- output = beforeLast(output, '.');
+ output = beforeLast(output, L'.');
return output;
}
@@ -2613,7 +2634,7 @@ bool MainDialog::trySaveConfig() //return true if saved successfully
}
catch (const xmlAccess::FfsXmlError& error)
{
- wxMessageBox(error.msg().c_str(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString().c_str(), _("Error"), wxOK | wxICON_ERROR);
}
}
@@ -2625,7 +2646,7 @@ void MainDialog::OnLoadConfig(wxCommandEvent& event)
{
wxFileDialog filePicker(this,
wxEmptyString,
- beforeLast(activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(), FILE_NAME_SEPARATOR), //set default dir: empty string if "activeConfigFiles" is empty or has no path separator
+ beforeLast(activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(), utf8CvrtTo<wxString>(FILE_NAME_SEPARATOR)), //set default dir: empty string if "activeConfigFiles" is empty or has no path separator
wxEmptyString,
wxString(_("FreeFileSync configuration")) + wxT(" (*.ffs_gui;*.ffs_batch)|*.ffs_gui;*.ffs_batch"),
wxFD_OPEN | wxFD_MULTIPLE);
@@ -2743,11 +2764,11 @@ void MainDialog::loadConfiguration(const std::vector<wxString>& filenames)
if (error.getSeverity() == xmlAccess::FfsXmlError::WARNING)
{
setLastUsedConfig(filenames, xmlAccess::XmlGuiConfig()); //simulate changed config on parsing errors
- wxMessageBox(error.msg(), _("Warning"), wxOK | wxICON_WARNING);
+ wxMessageBox(error.toString(), _("Warning"), wxOK | wxICON_WARNING);
}
else
{
- wxMessageBox(error.msg(), _("Error"), wxOK | wxICON_ERROR);
+ wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR);
return;
}
}
@@ -2972,7 +2993,7 @@ xmlAccess::XmlGuiConfig MainDialog::getConfig() const
const wxString& MainDialog::lastRunConfigName()
{
- static wxString instance = zen::getConfigDir() + wxT("LastRun.ffs_gui");
+ static wxString instance = toWx(zen::getConfigDir()) + wxT("LastRun.ffs_gui");
return instance;
}
@@ -3269,12 +3290,12 @@ void MainDialog::updateFilterButtons()
//global filter: test for Null-filter
if (isNullFilter(currentCfg.mainCfg.globalFilter))
{
- setBitmapLabel(*m_bpButtonFilter, GlobalResources::getImage(wxT("filterOff")));
+ setImage(*m_bpButtonFilter, GlobalResources::getImage(wxT("filterOff")));
m_bpButtonFilter->SetToolTip(_("No filter selected"));
}
else
{
- setBitmapLabel(*m_bpButtonFilter, GlobalResources::getImage(wxT("filterOn")));
+ setImage(*m_bpButtonFilter, GlobalResources::getImage(wxT("filterOn")));
m_bpButtonFilter->SetToolTip(_("Filter is active"));
}
@@ -3320,6 +3341,7 @@ void MainDialog::OnCompare(wxCommandEvent& event)
zen::CompareProcess compProc(globalSettings->fileTimeTolerance,
globalSettings->optDialogs,
true, //allow pw prompt
+ globalSettings->runWithBackgroundPriority,
statusHandler);
//technical representation of comparison data
@@ -3329,7 +3351,7 @@ void MainDialog::OnCompare(wxCommandEvent& event)
gridDataView->setData(newCompareData); //newCompareData is invalidated after this call
//play (optional) sound notification after sync has completed (GUI and batch mode)
- const wxString soundFile = zen::getResourceDir() + wxT("Compare_Complete.wav");
+ const wxString soundFile = toWx(zen::getResourceDir()) + wxT("Compare_Complete.wav");
if (fileExists(toZ(soundFile)))
wxSound::Play(soundFile, wxSOUND_ASYNC);
}
@@ -3541,6 +3563,7 @@ void MainDialog::OnStartSync(wxCommandEvent& event)
globalSettings->copyLockedFiles,
globalSettings->copyFilePermissions,
globalSettings->transactionalFileCopy,
+ globalSettings->runWithBackgroundPriority,
statusHandler);
const std::vector<zen::FolderPairSyncCfg> syncProcessCfg = zen::extractSyncCfg(getConfig().mainCfg);
@@ -3552,7 +3575,7 @@ void MainDialog::OnStartSync(wxCommandEvent& event)
syncProc.startSynchronizationProcess(syncProcessCfg, dataToSync);
//play (optional) sound notification after sync has completed (GUI and batch mode)
- const wxString soundFile = zen::getResourceDir() + wxT("Sync_Complete.wav");
+ const wxString soundFile = toWx(zen::getResourceDir()) + wxT("Sync_Complete.wav");
if (fileExists(toZ(soundFile)))
wxSound::Play(soundFile, wxSOUND_ASYNC);
}
@@ -3904,59 +3927,30 @@ void MainDialog::updateGridViewData()
//clear status information
clearStatusBar();
- wxString statusLeftNew;
- wxString statusMiddleNew;
- wxString statusRightNew;
-
//#################################################
//format numbers to text:
//show status information on "root" level.
- if (foldersOnLeftView)
- {
- statusLeftNew += replaceCpy(_P("1 directory", "%x directories", foldersOnLeftView), L"%x", zen::toStringSep(foldersOnLeftView), false);
+ bSizerStatusLeftDirectories->Show(foldersOnLeftView > 0);
+ bSizerStatusLeftFiles ->Show(filesOnLeftView > 0);
- if (filesOnLeftView)
- statusLeftNew += wxT(" - ");
- }
-
- if (filesOnLeftView)
- {
- statusLeftNew += replaceCpy(_P("1 file", "%x files", filesOnLeftView), L"%x", zen::toStringSep(filesOnLeftView), false);
- statusLeftNew += wxT(" - ");
- statusLeftNew += zen::filesizeToShortString(filesizeLeftView);
- }
-
- {
- wxString tmp = _P("%x of 1 row in view", "%x of %y rows in view", gridDataView->rowsTotal());
- replace(tmp, L"%x", toStringSep(gridDataView->rowsOnView()), false);
- replace(tmp, L"%y", toStringSep(gridDataView->rowsTotal()), false);
- statusMiddleNew = tmp;
- }
-
- if (foldersOnRightView)
- {
- statusRightNew += replaceCpy(_P("1 directory", "%x directories", foldersOnRightView), L"%x", zen::toStringSep(foldersOnRightView), false);
-
- if (filesOnRightView)
- statusRightNew += wxT(" - ");
- }
+ setText(*m_staticTextStatusLeftDirs, replaceCpy(_P("1 directory", "%x directories", foldersOnLeftView), L"%x", zen::toStringSep(foldersOnLeftView), false));
+ setText(*m_staticTextStatusLeftFiles, replaceCpy(_P("1 file", "%x files", filesOnLeftView), L"%x", zen::toStringSep(filesOnLeftView), false));
+ setText(*m_staticTextStatusLeftBytes, zen::filesizeToShortString(filesizeLeftView));
- if (filesOnRightView)
{
- statusRightNew += replaceCpy(_P("1 file", "%x files", filesOnRightView), L"%x", zen::toStringSep(filesOnRightView), false);
- statusRightNew += wxT(" - ");
- statusRightNew += zen::filesizeToShortString(filesizeRightView);
+ wxString statusMiddleNew = _P("%x of 1 row in view", "%x of %y rows in view", gridDataView->rowsTotal());
+ replace(statusMiddleNew, L"%x", toStringSep(gridDataView->rowsOnView()), false);
+ replace(statusMiddleNew, L"%y", toStringSep(gridDataView->rowsTotal()), false);
+ setText(*m_staticTextStatusMiddle, statusMiddleNew);
}
+ bSizerStatusRightDirectories->Show(foldersOnRightView > 0);
+ bSizerStatusRightFiles ->Show(filesOnRightView > 0);
- //avoid screen flicker
- if (m_staticTextStatusLeft->GetLabel() != statusLeftNew)
- m_staticTextStatusLeft->SetLabel(statusLeftNew);
- if (m_staticTextStatusMiddle->GetLabel() != statusMiddleNew)
- m_staticTextStatusMiddle->SetLabel(statusMiddleNew);
- if (m_staticTextStatusRight->GetLabel() != statusRightNew)
- m_staticTextStatusRight->SetLabel(statusRightNew);
+ setText(*m_staticTextStatusRightDirs, replaceCpy(_P("1 directory", "%x directories", foldersOnRightView), L"%x", zen::toStringSep(foldersOnRightView), false));
+ setText(*m_staticTextStatusRightFiles, replaceCpy(_P("1 file", "%x files", filesOnRightView), L"%x", zen::toStringSep(filesOnRightView), false));
+ setText(*m_staticTextStatusRightBytes, zen::filesizeToShortString(filesizeRightView));
m_panelStatusBar->Layout();
}
@@ -4078,7 +4072,7 @@ void MainDialog::updateGuiForFolderPair()
m_bpButtonAltSyncCfg ->Hide();
m_bpButtonLocalFilter->Hide();
- setBitmapLabel(*m_bpButtonSwapSides, GlobalResources::getImage(wxT("swap")));
+ setImage(*m_bpButtonSwapSides, GlobalResources::getImage(wxT("swap")));
}
else
{
@@ -4086,7 +4080,7 @@ void MainDialog::updateGuiForFolderPair()
m_bpButtonAltSyncCfg ->Show();
m_bpButtonLocalFilter->Show();
- setBitmapLabel(*m_bpButtonSwapSides, GlobalResources::getImage(wxT("swapSlim")));
+ setImage(*m_bpButtonSwapSides, GlobalResources::getImage(wxT("swapSlim")));
}
m_panelTopMiddle->Layout();
@@ -4246,9 +4240,9 @@ inline
void addCellValue(zxString& exportString, const wxString& cellVal)
{
if (cellVal.find(wxT(';')) != wxString::npos)
- exportString += wxT('\"') + cvrtString<zxString>(cellVal) + wxT('\"');
+ exportString += wxT('\"') + copyStringTo<zxString>(cellVal) + wxT('\"');
else
- exportString += cvrtString<zxString>(cellVal);
+ exportString += copyStringTo<zxString>(cellVal);
}
}
@@ -4271,28 +4265,28 @@ void MainDialog::OnMenuExportFileList(wxCommandEvent& event)
zxString exportString; //perf: wxString doesn't model exponential growth and so is out
//write legend
- exportString += cvrtString<zxString>(_("Legend")) + wxT('\n');
+ exportString += copyStringTo<zxString>(_("Legend")) + wxT('\n');
if (syncPreview->previewIsEnabled())
{
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(SO_CREATE_NEW_LEFT)) + wxT("\";") + cvrtString<zxString>(getSymbol(SO_CREATE_NEW_LEFT)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(SO_CREATE_NEW_RIGHT)) + wxT("\";") + cvrtString<zxString>(getSymbol(SO_CREATE_NEW_RIGHT)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(SO_DELETE_LEFT)) + wxT("\";") + cvrtString<zxString>(getSymbol(SO_DELETE_LEFT)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(SO_DELETE_RIGHT)) + wxT("\";") + cvrtString<zxString>(getSymbol(SO_DELETE_RIGHT)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(SO_OVERWRITE_LEFT)) + wxT("\";") + cvrtString<zxString>(getSymbol(SO_OVERWRITE_LEFT)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(SO_OVERWRITE_RIGHT)) + wxT("\";") + cvrtString<zxString>(getSymbol(SO_OVERWRITE_RIGHT)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(SO_DO_NOTHING)) + wxT("\";") + cvrtString<zxString>(getSymbol(SO_DO_NOTHING)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(SO_EQUAL)) + wxT("\";") + cvrtString<zxString>(getSymbol(SO_EQUAL)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(SO_UNRESOLVED_CONFLICT)) + wxT("\";") + cvrtString<zxString>(getSymbol(SO_UNRESOLVED_CONFLICT)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(SO_CREATE_NEW_LEFT)) + wxT("\";") + copyStringTo<zxString>(getSymbol(SO_CREATE_NEW_LEFT)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(SO_CREATE_NEW_RIGHT)) + wxT("\";") + copyStringTo<zxString>(getSymbol(SO_CREATE_NEW_RIGHT)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(SO_DELETE_LEFT)) + wxT("\";") + copyStringTo<zxString>(getSymbol(SO_DELETE_LEFT)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(SO_DELETE_RIGHT)) + wxT("\";") + copyStringTo<zxString>(getSymbol(SO_DELETE_RIGHT)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(SO_OVERWRITE_LEFT)) + wxT("\";") + copyStringTo<zxString>(getSymbol(SO_OVERWRITE_LEFT)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(SO_OVERWRITE_RIGHT)) + wxT("\";") + copyStringTo<zxString>(getSymbol(SO_OVERWRITE_RIGHT)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(SO_DO_NOTHING)) + wxT("\";") + copyStringTo<zxString>(getSymbol(SO_DO_NOTHING)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(SO_EQUAL)) + wxT("\";") + copyStringTo<zxString>(getSymbol(SO_EQUAL)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(SO_UNRESOLVED_CONFLICT)) + wxT("\";") + copyStringTo<zxString>(getSymbol(SO_UNRESOLVED_CONFLICT)) + wxT('\n');
}
else
{
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(FILE_LEFT_SIDE_ONLY)) + wxT("\";") + cvrtString<zxString>(getSymbol(FILE_LEFT_SIDE_ONLY)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(FILE_RIGHT_SIDE_ONLY)) + wxT("\";") + cvrtString<zxString>(getSymbol(FILE_RIGHT_SIDE_ONLY)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(FILE_LEFT_NEWER)) + wxT("\";") + cvrtString<zxString>(getSymbol(FILE_LEFT_NEWER)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(FILE_RIGHT_NEWER)) + wxT("\";") + cvrtString<zxString>(getSymbol(FILE_RIGHT_NEWER)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(FILE_DIFFERENT)) + wxT("\";") + cvrtString<zxString>(getSymbol(FILE_DIFFERENT)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(FILE_EQUAL)) + wxT("\";") + cvrtString<zxString>(getSymbol(FILE_EQUAL)) + wxT('\n');
- exportString += wxT("\"") + cvrtString<zxString>(getDescription(FILE_CONFLICT)) + wxT("\";") + cvrtString<zxString>(getSymbol(FILE_CONFLICT)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(FILE_LEFT_SIDE_ONLY)) + wxT("\";") + copyStringTo<zxString>(getSymbol(FILE_LEFT_SIDE_ONLY)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(FILE_RIGHT_SIDE_ONLY)) + wxT("\";") + copyStringTo<zxString>(getSymbol(FILE_RIGHT_SIDE_ONLY)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(FILE_LEFT_NEWER)) + wxT("\";") + copyStringTo<zxString>(getSymbol(FILE_LEFT_NEWER)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(FILE_RIGHT_NEWER)) + wxT("\";") + copyStringTo<zxString>(getSymbol(FILE_RIGHT_NEWER)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(FILE_DIFFERENT)) + wxT("\";") + copyStringTo<zxString>(getSymbol(FILE_DIFFERENT)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(FILE_EQUAL)) + wxT("\";") + copyStringTo<zxString>(getSymbol(FILE_EQUAL)) + wxT('\n');
+ exportString += wxT("\"") + copyStringTo<zxString>(getDescription(FILE_CONFLICT)) + wxT("\";") + copyStringTo<zxString>(getSymbol(FILE_CONFLICT)) + wxT('\n');
}
exportString += wxT('\n');
diff --git a/ui/progress_indicator.cpp b/ui/progress_indicator.cpp
index 4102db9d..25b9d6e8 100644
--- a/ui/progress_indicator.cpp
+++ b/ui/progress_indicator.cpp
@@ -22,6 +22,9 @@
#include "taskbar.h"
#include <wx+/image_tools.h>
#include <wx+/graph.h>
+#include <wx+/no_flicker.h>
+#include <zen/basic_math.h>
+
using namespace zen;
@@ -33,25 +36,6 @@ const int GAUGE_FULL_RANGE = 50000;
//window size used for statistics in milliseconds
const int windowSizeRemainingTime = 60000; //some usecases have dropouts of 40 seconds -> 60 sec. window size handles them well
const int windowSizeBytesPerSec = 5000; //
-
-
-void setNewText(const wxString& newText, wxTextCtrl& control, bool& updateLayout)
-{
- if (control.GetValue().length() != newText.length())
- updateLayout = true; //avoid screen flicker: apply only when necessary
-
- if (control.GetValue() != newText)
- control.ChangeValue(newText);
-}
-
-void setNewText(const wxString& newText, wxStaticText& control, bool& updateLayout)
-{
- if (control.GetLabel().length() != newText.length())
- updateLayout = true; //avoid screen flicker
-
- if (control.GetLabel() != newText)
- control.SetLabel(newText);
-}
}
@@ -309,7 +293,7 @@ void CompareStatus::CompareStatusImpl::updateStatusPanelNow()
break;
}
- bool updateLayout = false; //avoid screen flicker by calling layout() only if necessary
+ bool layoutChanged = false; //avoid screen flicker by calling layout() only if necessary
//remove linebreaks from currentStatusText
wxString statusTextFmt = currentStatusText;
@@ -320,18 +304,18 @@ void CompareStatus::CompareStatusImpl::updateStatusPanelNow()
m_textCtrlStatus->ChangeValue(statusTextFmt);
//nr of scanned objects
- setNewText(toStringSep(scannedObjects), *m_staticTextScanned, updateLayout);
+ setText(*m_staticTextScanned, toStringSep(scannedObjects), &layoutChanged);
//progress indicator for "compare file content"
m_gauge2->SetValue(numeric::round(fraction * GAUGE_FULL_RANGE));
//remaining files left for file comparison
const wxString filesToCompareTmp = toStringSep(totalObjects - currentObjects);
- setNewText(filesToCompareTmp, *m_staticTextFilesRemaining, updateLayout);
+ setText(*m_staticTextFilesRemaining, filesToCompareTmp, &layoutChanged);
//remaining bytes left for file comparison
const wxString remainingBytesTmp = zen::filesizeToShortString(to<zen::UInt64>(totalData - currentData));
- setNewText(remainingBytesTmp, *m_staticTextDataRemaining, updateLayout);
+ setText(*m_staticTextDataRemaining, remainingBytesTmp, &layoutChanged);
if (statistics.get())
{
@@ -342,23 +326,23 @@ void CompareStatus::CompareStatusImpl::updateStatusPanelNow()
statistics->addMeasurement(currentObjects, to<double>(currentData));
//current speed
- setNewText(statistics->getBytesPerSecond(), *m_staticTextSpeed, updateLayout);
+ setText(*m_staticTextSpeed, statistics->getBytesPerSecond(), &layoutChanged);
if (timeElapsed.Time() - lastStatCallRemTime >= 2000) //call method every two seconds only
{
lastStatCallRemTime = timeElapsed.Time();
//remaining time
- setNewText(statistics->getRemainingTime(), *m_staticTextRemTime, updateLayout);
+ setText(*m_staticTextRemTime, statistics->getRemainingTime(), &layoutChanged);
}
}
}
//time elapsed
- setNewText(wxTimeSpan::Milliseconds(timeElapsed.Time()).Format(), *m_staticTextTimeElapsed, updateLayout);
+ setText(*m_staticTextTimeElapsed, wxTimeSpan::Milliseconds(timeElapsed.Time()).Format(), &layoutChanged);
//do the ui update
- if (updateLayout)
+ if (layoutChanged)
bSizer42->Layout();
}
updateUiNow();
@@ -398,14 +382,14 @@ public:
const int warningCount = log_.typeCount(TYPE_WARNING);
const int infoCount = log_.typeCount(TYPE_INFO);
- m_bpButtonErrors->init(buttonPressed ("error"), _("Error") + wxString::Format(wxT(" (%d)"), errorCount),
- buttonReleased("error"), _("Error") + wxString::Format(wxT(" (%d)"), errorCount));
+ m_bpButtonErrors->init(buttonPressed ("error"), wxString(_("Error")) + wxString::Format(wxT(" (%d)"), errorCount),
+ buttonReleased("error"), wxString(_("Error")) + wxString::Format(wxT(" (%d)"), errorCount));
- m_bpButtonWarnings->init(buttonPressed ("warning"), _("Warning") + wxString::Format(wxT(" (%d)"), warningCount),
- buttonReleased("warning"), _("Warning") + wxString::Format(wxT(" (%d)"), warningCount));
+ m_bpButtonWarnings->init(buttonPressed ("warning"), wxString(_("Warning")) + wxString::Format(wxT(" (%d)"), warningCount),
+ buttonReleased("warning"), wxString(_("Warning")) + wxString::Format(wxT(" (%d)"), warningCount));
- m_bpButtonInfo->init(buttonPressed ("info"), _("Info") + wxString::Format(wxT(" (%d)"), infoCount),
- buttonReleased("info"), _("Info") + wxString::Format(wxT(" (%d)"), infoCount));
+ m_bpButtonInfo->init(buttonPressed ("info"), wxString(_("Info")) + wxString::Format(wxT(" (%d)"), infoCount),
+ buttonReleased("info"), wxString(_("Info")) + wxString::Format(wxT(" (%d)"), infoCount));
m_bpButtonErrors ->setActive(true);
m_bpButtonWarnings->setActive(true);
@@ -459,18 +443,18 @@ private:
if (!messages.empty())
for (std::vector<wxString>::const_iterator i = messages.begin(); i != messages.end(); ++i)
{
- newLogText += cvrtString<zxString>(*i);
- newLogText += wxT("\n\n");
+ newLogText += copyStringTo<zxString>(*i);
+ newLogText += wxT("\n");
}
else //if no messages match selected view filter, show final status message at least
{
const std::vector<wxString>& allMessages = log_.getFormattedMessages();
if (!allMessages.empty())
- newLogText = cvrtString<zxString>(allMessages.back());
+ newLogText = copyStringTo<zxString>(allMessages.back());
}
wxWindowUpdateLocker dummy(m_textCtrlInfo);
- m_textCtrlInfo->ChangeValue(cvrtString<wxString>(newLogText));
+ m_textCtrlInfo->ChangeValue(copyStringTo<wxString>(newLogText));
m_textCtrlInfo->ShowPosition(m_textCtrlInfo->GetLastPosition());
}
@@ -517,6 +501,10 @@ private:
};
+inline
+double bestFit(double val, double low, double high) { return val < (high + low) / 2 ? low : high; }
+
+
struct LabelFormatterBytes : public LabelFormatter
{
virtual double getOptimalBlockSize(double bytesProposed) const
@@ -527,18 +515,17 @@ struct LabelFormatterBytes : public LabelFormatter
const double k = std::floor(std::log(bytesProposed) / std::log(2.0));
const double e = std::pow(2.0, k);
+ if (numeric::isNull(e))
+ return 0;
const double a = bytesProposed / e; //bytesProposed = a * 2^k with a in (1, 2)
- return (a < 1.5 ? 1 : 2) * e;
+
+ return bestFit(a, 1, 2) * e;
}
virtual wxString formatText(double value, double optimalBlockSize) const { return filesizeToShortString(UInt64(value)); };
};
-inline
-double bestFit(double val, double low, double high) { return val < (high + low) / 2 ? low : high; }
-
-
struct LabelFormatterTimeElapsed : public LabelFormatter
{
virtual double getOptimalBlockSize(double secProposed) const
@@ -765,9 +752,6 @@ SyncStatus::SyncStatusImpl::SyncStatusImpl(AbortCallback& abortCb,
m_animationControl1->SetAnimation(GlobalResources::instance().animationSync);
m_animationControl1->Play();
- m_staticTextSpeed->SetLabel(wxT("-"));
- m_staticTextRemTime->SetLabel(wxT("-"));
-
//initialize gauge
m_gauge1->SetRange(GAUGE_FULL_RANGE);
m_gauge1->SetValue(0);
@@ -791,6 +775,9 @@ SyncStatus::SyncStatusImpl::SyncStatusImpl(AbortCallback& abortCb,
//hide "processed" statistics until end of process
bSizerFinalStat->Show(false);
+ m_buttonOK->Show(false);
+ m_staticTextItemsProc->Show(false);
+ bSizerItemsProc->Show(false);
SetIcon(GlobalResources::instance().programIcon); //set application icon
@@ -953,7 +940,7 @@ enum Zorder
ZORDER_INDEFINITE,
};
-Zorder validateZorder(const wxWindow& top, const wxWindow& bottom)
+Zorder evaluateZorder(const wxWindow& top, const wxWindow& bottom)
{
HWND hTop = static_cast<HWND>(top.GetHWND());
HWND hBottom = static_cast<HWND>(bottom.GetHWND());
@@ -987,16 +974,16 @@ void SyncStatus::SyncStatusImpl::updateStatusDialogNow(bool allowYield)
switch (currentStatus)
{
case SyncStatus::SCANNING:
- showProgressExternally(toStringSep(scannedObjects) + wxT(" - ") + _("Scanning...") + postFix);
+ showProgressExternally(wxString() + toStringSep(scannedObjects) + wxT(" - ") + _("Scanning...") + postFix);
break;
case SyncStatus::COMPARING_CONTENT:
- showProgressExternally(percentageToShortString(fraction) + wxT(" - ") + _("Comparing content...") + postFix, fraction);
+ showProgressExternally(wxString() + percentageToShortString(fraction) + wxT(" - ") + _("Comparing content...") + postFix, fraction);
break;
case SyncStatus::SYNCHRONIZING:
- showProgressExternally(percentageToShortString(fraction) + wxT(" - ") + _("Synchronizing...") + postFix, fraction);
+ showProgressExternally(wxString() + percentageToShortString(fraction) + wxT(" - ") + _("Synchronizing...") + postFix, fraction);
break;
case SyncStatus::PAUSE:
- showProgressExternally(percentageToShortString(fraction) + wxT(" - ") + _("Paused") + postFix, fraction);
+ showProgressExternally(wxString() + percentageToShortString(fraction) + wxT(" - ") + _("Paused") + postFix, fraction);
break;
case SyncStatus::ABORTED:
showProgressExternally(_("Aborted") + postFix, fraction);
@@ -1011,7 +998,7 @@ void SyncStatus::SyncStatusImpl::updateStatusDialogNow(bool allowYield)
{
//wxWindowUpdateLocker dummy(this); -> not needed
- bool updateLayout = false; //avoid screen flicker by calling layout() only if necessary
+ bool layoutChanged = false; //avoid screen flicker by calling layout() only if necessary
//progress indicator
switch (currentStatus)
@@ -1040,11 +1027,11 @@ void SyncStatus::SyncStatusImpl::updateStatusDialogNow(bool allowYield)
//remaining objects
const wxString remainingObjTmp = toStringSep(totalObjects - currentObjects);
- setNewText(remainingObjTmp, *m_staticTextRemainingObj, updateLayout);
+ setText(*m_staticTextRemainingObj, remainingObjTmp, &layoutChanged);
//remaining bytes left for copy
const wxString remainingBytesTmp = zen::filesizeToShortString(to<zen::UInt64>(totalData - currentData));
- setNewText(remainingBytesTmp, *m_staticTextDataRemaining, updateLayout);
+ setText(*m_staticTextDataRemaining, remainingBytesTmp, &layoutChanged);
//statistics
if (statistics.get())
@@ -1056,14 +1043,14 @@ void SyncStatus::SyncStatusImpl::updateStatusDialogNow(bool allowYield)
statistics->addMeasurement(currentObjects, to<double>(currentData));
//current speed
- setNewText(statistics->getBytesPerSecond(), *m_staticTextSpeed, updateLayout);
+ setText(*m_staticTextSpeed, statistics->getBytesPerSecond(), &layoutChanged);
if (timeElapsed.Time() - lastStatCallRemTime >= 2000) //call method every two seconds only
{
lastStatCallRemTime = timeElapsed.Time();
//remaining time
- setNewText(statistics->getRemainingTime(), *m_staticTextRemTime, updateLayout);
+ setText(*m_staticTextRemTime, statistics->getRemainingTime(), &layoutChanged);
}
}
}
@@ -1071,23 +1058,28 @@ void SyncStatus::SyncStatusImpl::updateStatusDialogNow(bool allowYield)
m_panelGraph->Refresh();
//time elapsed
- const int timeElapSec = timeElapsed.Time() / 1000;
- setNewText(timeElapSec < 3600 ?
- wxTimeSpan::Seconds(timeElapSec).Format( L"%M:%S") :
- wxTimeSpan::Seconds(timeElapSec).Format(L"%H:%M:%S"), *m_staticTextTimeElapsed, updateLayout);
+ const long timeElapSec = timeElapsed.Time() / 1000;
+ setText(*m_staticTextTimeElapsed,
+ timeElapSec < 3600 ?
+ wxTimeSpan::Seconds(timeElapSec).Format( L"%M:%S") :
+ wxTimeSpan::Seconds(timeElapSec).Format(L"%H:%M:%S"), &layoutChanged);
//do the ui update
- if (updateLayout)
+ if (layoutChanged)
{
- bSizerProgressStat->Layout();
- bSizerProgressMain->Layout();
+ // Layout();
+ // bSizerItemsRem->Layout();
+ // bSizer171->Layout();
+ bSizerProgressStat->Layout(); //
+ m_panelProgress->Layout(); //both needed
+ m_panelBackground->Layout(); //we use a dummy panel as actual background: replaces simple "Layout()" call
}
}
#ifdef FFS_WIN
//workaround Windows 7 bug messing up z-order after temporary application hangs: https://sourceforge.net/tracker/index.php?func=detail&aid=3376523&group_id=234430&atid=1093080
if (mainDialog)
- if (validateZorder(*this, *mainDialog) == ZORDER_WRONG)
+ if (evaluateZorder(*this, *mainDialog) == ZORDER_WRONG)
{
HWND hProgress = static_cast<HWND>(GetHWND());
@@ -1104,17 +1096,11 @@ void SyncStatus::SyncStatusImpl::updateStatusDialogNow(bool allowYield)
//support for pause button
if (processPaused)
{
- if (statistics.get()) statistics->pauseTimer();
- graphDataBytes->pauseTimer();
-
while (processPaused && currentProcessIsRunning())
{
wxMilliSleep(UI_UPDATE_INTERVAL);
updateUiNow();
}
-
- if (statistics.get()) statistics->resumeTimer();
- graphDataBytes->resumeTimer();
}
/*
@@ -1174,7 +1160,8 @@ void SyncStatus::SyncStatusImpl::setCurrentStatus(SyncStatus::SyncStatusID id)
}
currentStatus = id;
- Layout();
+
+ m_panelBackground->Layout(); //we use a dummy panel as actual background: replaces simple "Layout()" call
}
@@ -1207,35 +1194,42 @@ void SyncStatus::SyncStatusImpl::processHasFinished(SyncStatus::SyncStatusID id,
//hide current operation status
bSizerCurrentOperation->Show(false);
- //hide progress statistics
- bSizerProgressMain->Show(false);
-
//show and prepare final statistics
bSizerFinalStat->Show(true);
- m_staticTextProcessedObj->SetLabel(toStringSep(currentObjects));
- m_staticTextDataProcessed->SetLabel(zen::filesizeToShortString(to<zen::UInt64>(currentData)));
- m_staticTextTimeTotal->SetLabel(m_staticTextTimeElapsed->GetLabel());
+ if (totalObjects == currentObjects && //if everything was processed successfully
+ totalData == currentData)
+ {
+ m_staticTextItemsRem->Show(false);
+ bSizerItemsRem ->Show(false);
+ }
- // if (totalObjects == currentObjects && ->if everything was processed successfully
- // totalData == currentData)
- // ;
+ m_staticTextItemsProc->Show(true);
+ bSizerItemsProc ->Show(true);
+ m_staticTextProcessedObj ->SetLabel(toStringSep(currentObjects));
+ m_staticTextDataProcessed->SetLabel(zen::filesizeToShortString(to<zen::UInt64>(currentData)));
+
+ m_staticTextRemTimeDescr->Show(false);
+ m_staticTextRemTime ->Show(false);
updateStatusDialogNow(false); //keep this sequence to avoid display distortion, if e.g. only 1 item is sync'ed
+ //changed meaning: overall speed: -> make sure to call after "updateStatusDialogNow"
+ const long timeElapMs = timeElapsed.Time();
+ m_staticTextSpeed->SetLabel(timeElapMs <= 0 ? L"-" : zen::filesizeToShortString(zen::to<UInt64>(currentData * 1000 / timeElapMs)) + _("/sec"));
+
//fill result listbox:
- //1. log file
+ //1. re-arrange graph into results listbook
+ bSizerTop->Detach(m_panelProgress);
+ m_panelProgress->Reparent(m_listbookResult);
+ m_listbookResult->AddPage(m_panelProgress, _("Statistics"), true);
+
+ //2. log file
LogControl* logControl = new LogControl(m_listbookResult, log);
- m_listbookResult->AddPage(logControl, _("Logging"), true);
+ m_listbookResult->AddPage(logControl, _("Logging"), false);
//bSizerHoldStretch->Insert(0, logControl, 1, wxEXPAND);
- //2. re-arrange graph into results listbook
- bSizerProgressMain->Detach(m_panelGraph);
- m_panelGraph->Reparent(m_listbookResult);
- m_listbookResult->AddPage(m_panelGraph, _("Statistics"), false);
-
- //fitHeight(*this);
- Layout();
+ m_panelBackground->Layout(); //we use a dummy panel as actual background: replaces simple "Layout()" call
//Raise(); -> don't! user may be watching a movie in the meantime ;)
}
@@ -1281,6 +1275,8 @@ void SyncStatus::SyncStatusImpl::OnPause(wxCommandEvent& event)
//pause timers
timeElapsed.Pause();
+ if (statistics.get()) statistics->pauseTimer();
+ graphDataBytes->pauseTimer();
}
else
{
@@ -1291,6 +1287,8 @@ void SyncStatus::SyncStatusImpl::OnPause(wxCommandEvent& event)
//resume timers
timeElapsed.Resume();
+ if (statistics.get()) statistics->resumeTimer();
+ graphDataBytes->resumeTimer();
}
}
diff --git a/ui/small_dlgs.cpp b/ui/small_dlgs.cpp
index ac949132..779bc427 100644
--- a/ui/small_dlgs.cpp
+++ b/ui/small_dlgs.cpp
@@ -802,13 +802,13 @@ GlobalSettingsDlg::GlobalSettingsDlg(wxWindow* parent, xmlAccess::XmlGlobalSetti
settings(globalSettings)
{
#ifdef FFS_WIN
- new zen::MouseMoveWindow(*this); //allow moving main dialog by clicking (nearly) anywhere...; ownership passed to "this"
+ new zen::MouseMoveWindow(*this); //allow moving dialog by clicking (nearly) anywhere...; ownership passed to "this"
#endif
- m_bitmapSettings->SetBitmap(GlobalResources::getImage(wxT("settings")));
+ m_bitmapSettings ->SetBitmap (GlobalResources::getImage(wxT("settings")));
m_buttonResetDialogs->setBitmapFront(GlobalResources::getImage(wxT("warningSmall")), 5);
- m_bpButtonAddRow->SetBitmapLabel(GlobalResources::getImage(wxT("addFolderPair")));
- m_bpButtonRemoveRow->SetBitmapLabel(GlobalResources::getImage(wxT("removeFolderPair")));
+ m_bpButtonAddRow ->SetBitmapLabel(GlobalResources::getImage(wxT("addFolderPair")));
+ m_bpButtonRemoveRow ->SetBitmapLabel(GlobalResources::getImage(wxT("removeFolderPair")));
m_checkBoxCopyLocked ->SetValue(globalSettings.copyLockedFiles);
m_checkBoxTransCopy ->SetValue(globalSettings.transactionalFileCopy);
@@ -818,6 +818,7 @@ GlobalSettingsDlg::GlobalSettingsDlg(wxWindow* parent, xmlAccess::XmlGlobalSetti
m_checkBoxCopyPermissions->SetLabel(_("Copy NTFS permissions"));
#else
m_checkBoxCopyLocked->Hide();
+ m_textCtrlCopyLocked->Hide();
#endif
set(globalSettings.gui.externelApplications);
diff --git a/version/version.h b/version/version.h
index 7f320af2..e1117ea0 100644
--- a/version/version.h
+++ b/version/version.h
@@ -1,6 +1,9 @@
-#include <wx/string.h>
+#ifndef VERSION_HEADER_434343489702544325
+#define VERSION_HEADER_434343489702544325
namespace zen
{
- const wxString currentVersion = wxT("4.2"); //internal linkage!
+const wchar_t currentVersion[] = L"4.2"; //internal linkage!
}
+
+#endif
diff --git a/wx+/button.cpp b/wx+/button.cpp
index 7edfdea8..a4d543cf 100644
--- a/wx+/button.cpp
+++ b/wx+/button.cpp
@@ -15,7 +15,7 @@
using namespace zen;
-void zen::setBitmapLabel(wxBitmapButton& button, const wxBitmap& bmp)
+void zen::setImage(wxBitmapButton& button, const wxBitmap& bmp)
{
if (!isEqual(button.GetBitmapLabel(), bmp))
button.SetBitmapLabel(bmp);
diff --git a/wx+/button.h b/wx+/button.h
index e5d63a19..15ebc5a0 100644
--- a/wx+/button.h
+++ b/wx+/button.h
@@ -40,7 +40,7 @@ private:
};
//set bitmap label flicker free!
-void setBitmapLabel(wxBitmapButton& button, const wxBitmap& bmp);
+void setImage(wxBitmapButton& button, const wxBitmap& bmp);
}
diff --git a/wx+/format_unit.cpp b/wx+/format_unit.cpp
index 771778aa..994a2b29 100644
--- a/wx+/format_unit.cpp
+++ b/wx+/format_unit.cpp
@@ -7,6 +7,7 @@
#include "format_unit.h"
#include <zen/basic_math.h>
#include <zen/i18n.h>
+#include <zen/time.h>
#include <cwchar> //swprintf
#include <ctime>
#include <cstdio>
@@ -211,22 +212,17 @@ std::wstring zen::utcToLocalTimeString(Int64 utcTime)
return _("Error");
}
- struct tm loc = {};
- loc.tm_year = systemTimeLocal.wYear - 1900;
- loc.tm_mon = systemTimeLocal.wMonth - 1;
- loc.tm_mday = systemTimeLocal.wDay;
- loc.tm_hour = systemTimeLocal.wHour;
- loc.tm_min = systemTimeLocal.wMinute;
- loc.tm_sec = systemTimeLocal.wSecond;
- const struct tm* timePtr = &loc;
+ zen::TimeComp loc;
+ loc.year = systemTimeLocal.wYear;
+ loc.month = systemTimeLocal.wMonth;
+ loc.day = systemTimeLocal.wDay;
+ loc.hour = systemTimeLocal.wHour;
+ loc.minute = systemTimeLocal.wMinute;
+ loc.second = systemTimeLocal.wSecond;
#elif defined FFS_LINUX
- const time_t fileTime = to<time_t>(utcTime);
- const struct tm* timePtr = ::localtime(&fileTime); //convert to local time
+ zen::TimeComp loc = zen::localTime(to<time_t>(utcTime));
#endif
- wchar_t buffer[1000];
- size_t charsWritten = std::wcsftime(buffer, 1000, L"%x %X", timePtr);
-
- return std::wstring(buffer, charsWritten);
+ return formatTime<std::wstring>(L"%x %X", loc);
}
diff --git a/wx+/graph.cpp b/wx+/graph.cpp
index 584ef0ea..2e000389 100644
--- a/wx+/graph.cpp
+++ b/wx+/graph.cpp
@@ -35,6 +35,8 @@ double zen::nextNiceNumber(double blockSize) //round to next number which is a c
const double k = std::floor(std::log10(blockSize));
const double e = std::pow(10, k);
+ if (isNull(e))
+ return 0;
const double a = blockSize / e; //blockSize = a * 10^k with a in (1, 10)
//have a look at leading two digits: "nice" numbers start with 1, 2, 2.5 and 5
@@ -90,13 +92,15 @@ wxColor getDefaultColor(size_t pos)
void drawYLabel(wxDC& dc, double& yMin, double& yMax, const wxRect& clientArea, int labelWidth, bool drawLeft, const LabelFormatter& labelFmt) //clientArea := y-label + data window
{
//note: DON'T use wxDC::GetSize()! DC may be larger than visible area!
- if (clientArea.GetHeight() <= 0 || clientArea.GetWidth() <= 0) return;
+ if (clientArea.GetHeight() <= 0 || clientArea.GetWidth() <= 0)
+ return;
int optimalBlockHeight = 3 * dc.GetMultiLineTextExtent(wxT("1")).GetHeight();;
double valRangePerBlock = (yMax - yMin) * optimalBlockHeight / clientArea.GetHeight();
valRangePerBlock = labelFmt.getOptimalBlockSize(valRangePerBlock);
- if (numeric::isNull(valRangePerBlock)) return;
+ if (isNull(valRangePerBlock))
+ return;
double yMinNew = std::floor(yMin / valRangePerBlock) * valRangePerBlock;
double yMaxNew = std::ceil (yMax / valRangePerBlock) * valRangePerBlock;
@@ -139,18 +143,21 @@ void drawYLabel(wxDC& dc, double& yMin, double& yMax, const wxRect& clientArea,
void drawXLabel(wxDC& dc, double& xMin, double& xMax, const wxRect& clientArea, int labelHeight, bool drawBottom, const LabelFormatter& labelFmt) //clientArea := x-label + data window
{
//note: DON'T use wxDC::GetSize()! DC may be larger than visible area!
- if (clientArea.GetHeight() <= 0 || clientArea.GetWidth() <= 0) return;
+ if (clientArea.GetHeight() <= 0 || clientArea.GetWidth() <= 0)
+ return;
int optimalBlockWidth = dc.GetMultiLineTextExtent(wxT("100000000000000")).GetWidth();
double valRangePerBlock = (xMax - xMin) * optimalBlockWidth / clientArea.GetWidth();
valRangePerBlock = labelFmt.getOptimalBlockSize(valRangePerBlock);
- if (numeric::isNull(valRangePerBlock)) return;
+ if (isNull(valRangePerBlock))
+ return;
double xMinNew = std::floor(xMin / valRangePerBlock) * valRangePerBlock;
double xMaxNew = std::ceil (xMax / valRangePerBlock) * valRangePerBlock;
int blockCount = numeric::round((xMaxNew - xMinNew) / valRangePerBlock);
- if (blockCount == 0) return;
+ if (blockCount == 0)
+ return;
xMin = xMinNew; //inform about adjusted x value range
xMax = xMaxNew;
@@ -190,8 +197,8 @@ class ConvertCoord //convert between screen and actual coordinates
public:
ConvertCoord(double valMin, double valMax, size_t screenSize) :
min_(valMin),
- scaleToReal(screenSize == 0 ? 0 : (valMax - valMin) / screenSize),
- scaleToScr(numeric::isNull(valMax - valMin) ? 0 : screenSize / (valMax - valMin)) {}
+ scaleToReal(screenSize == 0 ? 0 : (valMax - valMin) / screenSize),
+ scaleToScr(isNull(valMax - valMin) ? 0 : screenSize / (valMax - valMin)) {}
double screenToReal(double screenPos) const //input value: [0, screenSize - 1]
{
@@ -333,8 +340,11 @@ void Graph2D::render(wxDC& dc) const
{
{
//have everything including label background in natural window color by default (overwriting current background color)
- DcBackgroundChanger dummy(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); //sigh, who *invents* this stuff??? -> workaround for issue with wxBufferedPaintDC
- //wxDCBrushChanger dummy(dc, *wxTRANSPARENT_BRUSH);
+ const wxColor backColor = wxPanel::GetClassDefaultAttributes().colBg != wxNullColour ?
+ wxPanel::GetClassDefaultAttributes().colBg :
+ wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE);
+ //wxDCBrushChanger dummy(dc, *wxTRANSPARENT_BRUSH); //sigh, who *invents* this stuff??? -> workaround for issue with wxBufferedPaintDC
+ DcBackgroundChanger dummy(dc, backColor);
dc.Clear();
}
@@ -418,8 +428,8 @@ void Graph2D::render(wxDC& dc) const
double maxWndY = attr.maxYauto ? -HUGE_VAL : attr.maxY; //
if (!curves_.empty())
{
- const int avgFactor = 2; //some averaging of edgy input data to smoothen behavior on window resize
- const ConvertCoord cvrtX(minWndX, maxWndX, dataArea.width * avgFactor);
+ const int AVG_FACTOR = 2; //some averaging of edgy input data to smoothen behavior on window resize
+ const ConvertCoord cvrtX(minWndX, maxWndX, dataArea.width * AVG_FACTOR);
for (GraphList::const_iterator j = curves_.begin(); j != curves_.end(); ++j)
{
@@ -430,13 +440,13 @@ void Graph2D::render(wxDC& dc) const
int& offset = yValuesList[j - curves_.begin()].second; //x-value offset in pixel
{
const int posFirst = std::max<int>(std::ceil(cvrtX.realToScreen(graph.getXBegin())), 0); //evaluate visible area only and make sure to not step one pixel before xbegin()!
- const int postLast = std::min<int>(std::floor(cvrtX.realToScreen(graph.getXEnd())), dataArea.width * avgFactor); //
+ const int postLast = std::min<int>(std::floor(cvrtX.realToScreen(graph.getXEnd())), dataArea.width * AVG_FACTOR); //
for (int i = posFirst; i < postLast; ++i)
yValues.push_back(graph.getValue(cvrtX.screenToReal(i)));
- subsample(yValues, avgFactor);
- offset = posFirst / avgFactor;
+ subsample(yValues, AVG_FACTOR);
+ offset = posFirst / AVG_FACTOR;
}
if (!yValues.empty())
diff --git a/wx+/graph.h b/wx+/graph.h
index 61a90ca1..34ef196e 100644
--- a/wx+/graph.h
+++ b/wx+/graph.h
@@ -25,7 +25,7 @@ Example:
setLabelX(Graph2D::POSLX_BOTTOM, 20, std::make_shared<LabelFormatterTimeElapsed>()).
setLabelY(Graph2D::POSLY_RIGHT, 60, std::make_shared<LabelFormatterBytes>()));
//set graph data
- std::shared_ptr<GraphData>() graphDataBytes = ...
+ std::shared_ptr<GraphData> graphDataBytes = ...
m_panelGraph->setData(graphDataBytes, Graph2D::LineAttributes().setLineWidth(2).setColor(wxColor(0, 192, 0)));
*/
@@ -33,9 +33,9 @@ Example:
struct GraphData
{
virtual ~GraphData() {}
- virtual double getValue(double x) const = 0;
- virtual double getXBegin() const = 0;
- virtual double getXEnd() const = 0; //upper bound for x, getValue() is NOT evaluated at this position! Similar to std::vector::end()
+ virtual double getValue (double x) const = 0;
+ virtual double getXBegin() const = 0;
+ virtual double getXEnd () const = 0; //upper bound for x, getValue() is NOT evaluated at this position! Similar to std::vector::end()
};
@@ -99,7 +99,7 @@ struct DecimalNumberFormatter : public LabelFormatter
//------------------------------------------------------------------------------------------------------------
//emit data selection event
-//usage: wnd.Connect(wxEVT_GRAPH_SELECTION, GraphSelectEventHandler(MyDlg::OnGraphSelection), NULL, this);
+//Usage: wnd.Connect(wxEVT_GRAPH_SELECTION, GraphSelectEventHandler(MyDlg::OnGraphSelection), NULL, this);
// void MyDlg::OnGraphSelection(GraphSelectEvent& event);
diff --git a/wx+/image_tools.h b/wx+/image_tools.h
index e78e7ced..23a363df 100644
--- a/wx+/image_tools.h
+++ b/wx+/image_tools.h
@@ -10,7 +10,7 @@
#include <numeric>
#include <wx/bitmap.h>
#include <wx/dcmemory.h>
-
+#include <zen/basic_math.h>
namespace zen
{
@@ -64,7 +64,8 @@ double getAvgBrightness(const wxImage& img)
{
const int pixelCount = img.GetWidth() * img.GetHeight();
auto pixBegin = img.GetData();
- if (pixBegin)
+
+ if (pixelCount > 0 && pixBegin)
{
auto pixEnd = pixBegin + 3 * pixelCount; //RGB
@@ -77,9 +78,9 @@ double getAvgBrightness(const wxImage& img)
for (auto iter = pixBegin; iter != pixEnd; ++iter)
dividend += *iter * static_cast<double>(alphaFirst[(iter - pixBegin) / 3]);
- const int divisor = 3.0 * std::accumulate(alphaFirst, alphaFirst + pixelCount, 0.0);
+ const double divisor = 3.0 * std::accumulate(alphaFirst, alphaFirst + pixelCount, 0.0);
- return dividend / divisor;
+ return numeric::isNull(divisor) ? 0 : dividend / divisor;
}
else
return std::accumulate(pixBegin, pixEnd, 0.0) / (3.0 * pixelCount);
diff --git a/wx+/mouse_move_dlg.cpp b/wx+/mouse_move_dlg.cpp
index 3f7ca755..7edaa5db 100644
--- a/wx+/mouse_move_dlg.cpp
+++ b/wx+/mouse_move_dlg.cpp
@@ -14,6 +14,8 @@
#include <wx/panel.h>
#include <wx/gauge.h>
#include <wx/statusbr.h>
+#include <wx/frame.h>
+#include <wx/dialog.h>
using namespace zen;
@@ -35,7 +37,7 @@ void forEachChild(wxWindow& parent, Fun f)
MouseMoveWindow::MouseMoveWindow(wxWindow& parent, bool includeParent) : wxWindow(&parent, wxID_ANY)
{
- wxObjectEventFunction memFunMouseDown = wxMouseEventHandler(MouseMoveWindow::LeftButtonDown);
+ wxObjectEventFunction memFunMouseDown = wxMouseEventHandler(MouseMoveWindow::LeftButtonDown); //wxWidgets macros are obviously not C++11 ready
auto connect = [&](wxWindow& wnd)
{
if (dynamic_cast<wxStaticText*> (&wnd) || //redirect clicks on these "dead" controls to move dialog instead
@@ -44,8 +46,10 @@ MouseMoveWindow::MouseMoveWindow(wxWindow& parent, bool includeParent) : wxWindo
dynamic_cast<wxGauge*> (&wnd) ||
dynamic_cast<wxStaticLine*> (&wnd) ||
dynamic_cast<wxStatusBar*> (&wnd) ||
- dynamic_cast<wxPanel*> (&wnd))
- wnd.Connect(wxEVT_LEFT_DOWN, memFunMouseDown, NULL, this); //wxWidgets macros are obviously not C++11 ready
+ dynamic_cast<wxPanel*> (&wnd) ||
+ dynamic_cast<wxFrame*> (&wnd) ||
+ dynamic_cast<wxDialog*> (&wnd))
+ wnd.Connect(wxEVT_LEFT_DOWN, memFunMouseDown, NULL, this);
};
if (includeParent)
diff --git a/wx+/mouse_move_dlg.h b/wx+/mouse_move_dlg.h
index 44988e3a..c97ef19c 100644
--- a/wx+/mouse_move_dlg.h
+++ b/wx+/mouse_move_dlg.h
@@ -11,7 +11,6 @@
namespace zen
{
-
/*
move dialog by mouse-dragging contained sub-windows: just attach to parent via new in constructor:
diff --git a/wx+/no_flicker.h b/wx+/no_flicker.h
new file mode 100644
index 00000000..0dceba97
--- /dev/null
+++ b/wx+/no_flicker.h
@@ -0,0 +1,35 @@
+// **************************************************************************
+// * 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) 2008-2011 ZenJu (zhnmju123 AT gmx.de) *
+// **************************************************************************
+
+#ifndef NO_FLICKER_HEADER_893421590321532
+#define NO_FLICKER_HEADER_893421590321532
+
+#include <wx/window.h>
+
+namespace zen
+{
+inline
+void setText(wxTextCtrl& control, const wxString& newText, bool* additionalLayoutChange = NULL)
+{
+ if (additionalLayoutChange && !*additionalLayoutChange) //never revert from true to false!
+ *additionalLayoutChange = control.GetValue().length() != newText.length(); //avoid screen flicker: update layout only when necessary
+
+ if (control.GetValue() != newText)
+ control.ChangeValue(newText);
+}
+
+inline
+void setText(wxStaticText& control, const wxString& newText, bool* additionalLayoutChange = NULL)
+{
+ if (additionalLayoutChange && !*additionalLayoutChange)
+ *additionalLayoutChange = control.GetLabel().length() != newText.length(); //avoid screen flicker: update layout only when necessary
+
+ if (control.GetLabel() != newText)
+ control.SetLabel(newText);
+}
+}
+
+#endif //NO_FLICKER_HEADER_893421590321532
diff --git a/wx+/pch.h b/wx+/pch.h
index acc03012..0a799217 100644
--- a/wx+/pch.h
+++ b/wx+/pch.h
@@ -18,7 +18,7 @@
#define WX_PRECOMP
#endif
-#include <wx/wxprec.h> //#includes <wx/msw/wrapwin.h>
+#include <wx/wxprec.h> //includes <wx/msw/wrapwin.h>
//other wxWidgets headers
#include <wx/log.h>
diff --git a/wx+/serialize.h b/wx+/serialize.h
index c15e963d..cec70278 100644
--- a/wx+/serialize.h
+++ b/wx+/serialize.h
@@ -64,7 +64,7 @@ private:
class ReadInputStream //throw FileError
{
protected:
- ReadInputStream(wxInputStream& stream, const wxString& errorObjName) : stream_(stream), errorObjName_(errorObjName) {}
+ ReadInputStream(wxInputStream& stream, const Zstring& errorObjName) : stream_(stream), errorObjName_(errorObjName) {}
template <class T>
T readNumberC() const; //throw FileError, checked read operation
@@ -81,14 +81,14 @@ protected:
private:
wxInputStream& stream_;
- const wxString& errorObjName_; //used for error text only
+ const Zstring& errorObjName_; //used for error text only
};
class WriteOutputStream //throw FileError
{
protected:
- WriteOutputStream(const wxString& errorObjName, wxOutputStream& stream) : stream_(stream), errorObjName_(errorObjName) {}
+ WriteOutputStream(const Zstring& errorObjName, wxOutputStream& stream) : stream_(stream), errorObjName_(errorObjName) {}
template <class T>
void writeNumberC(T number) const; //throw FileError, checked write operation
@@ -104,7 +104,7 @@ protected:
private:
wxOutputStream& stream_;
- const wxString& errorObjName_; //used for error text only!
+ const Zstring& errorObjName_; //used for error text only!
};
@@ -185,7 +185,7 @@ inline
void ReadInputStream::check() const
{
if (stream_.GetLastError() != wxSTREAM_NO_ERROR)
- throw zen::FileError(_("Error reading from synchronization database:") + " \n" + "\"" + errorObjName_.c_str() + "\"");
+ throw zen::FileError(_("Error reading from synchronization database:") + L" \n" + L"\"" + errorObjName_ + L"\"");
}
@@ -210,7 +210,7 @@ S ReadInputStream::readStringC() const //checked read operation
}
catch (std::exception&)
{
- throw FileError(_("Error reading from synchronization database:") + " \n" + "\"" + errorObjName_.c_str() + "\"");
+ throw FileError(_("Error reading from synchronization database:") + L" \n" + L"\"" + errorObjName_ + L"\"");
}
return output;
}
@@ -226,7 +226,7 @@ ReadInputStream::CharArray ReadInputStream::readArrayC() const
stream_.Read(&(*buffer)[0], byteCount);
check();
if (stream_.LastRead() != byteCount) //some additional check
- throw FileError(_("Error reading from synchronization database:") + " \n" + "\"" + errorObjName_.c_str() + "\"");
+ throw FileError(_("Error reading from synchronization database:") + L" \n" + L"\"" + errorObjName_ + L"\"");
}
return buffer;
}
@@ -257,7 +257,7 @@ void WriteOutputStream::writeArrayC(const std::vector<char>& buffer) const
stream_.Write(&buffer[0], buffer.size());
check();
if (stream_.LastWrite() != buffer.size()) //some additional check
- throw FileError(_("Error writing to synchronization database:") + " \n" + "\"" + errorObjName_.c_str() + "\"");
+ throw FileError(_("Error writing to synchronization database:") + L" \n" + L"\"" + errorObjName_ + L"\"");
}
}
@@ -266,7 +266,7 @@ inline
void WriteOutputStream::check() const
{
if (stream_.GetLastError() != wxSTREAM_NO_ERROR)
- throw FileError(_("Error writing to synchronization database:") + " \n" + "\"" + errorObjName_.c_str() + "\"");
+ throw FileError(_("Error writing to synchronization database:") + L" \n" + L"\"" + errorObjName_ + L"\"");
}
}
diff --git a/wx+/string_conv.h b/wx+/string_conv.h
index 3f4574ab..76249aca 100644
--- a/wx+/string_conv.h
+++ b/wx+/string_conv.h
@@ -13,10 +13,6 @@
namespace zen
{
-inline wxString operator+(const wxString& lhs, const char* rhs) { return wxString(lhs) += utf8CvrtTo<wxString>(rhs); }
-inline wxString operator+(const wxString& lhs, const Zstring& rhs) { return wxString(lhs) += utf8CvrtTo<wxString>(rhs); }
-
-
//conversion between Zstring and wxString
inline wxString toWx(const Zstring& str) { return utf8CvrtTo<wxString>(str); }
inline Zstring toZ(const wxString& str) { return utf8CvrtTo<Zstring>(str); }
diff --git a/wx+/timespan.h b/wx+/timespan.h
index d11b328e..698171fa 100644
--- a/wx+/timespan.h
+++ b/wx+/timespan.h
@@ -19,9 +19,9 @@
namespace zen
{
inline
-wxEventType getEventType() //external linkage
+wxEventType getEventType()
{
- static wxEventType evt = wxNewEventType();
+ static wxEventType evt = wxNewEventType(); //external linkage!
return evt;
}
const wxEventType wxEVT_TIMESPAN_CHANGE = getEventType();
diff --git a/zen/assert_static.h b/zen/assert_static.h
index 00c4c5c8..5a2dc4a6 100644
--- a/zen/assert_static.h
+++ b/zen/assert_static.h
@@ -25,8 +25,8 @@ template<>
struct CompileTimeError<true> {};
}
-#define LOKI_CONCAT( X, Y ) LOKI_CONCAT_SUB( X, Y )
-#define LOKI_CONCAT_SUB( X, Y ) X##Y
+#define LOKI_CONCAT(X, Y) LOKI_CONCAT_SUB(X, Y)
+#define LOKI_CONCAT_SUB(X, Y) X ## Y
#define assert_static(expr) \
enum { LOKI_CONCAT(loki_enum_dummy_value, __LINE__) = sizeof(StaticCheckImpl::CompileTimeError<static_cast<bool>(expr) >) }
@@ -37,7 +37,7 @@ struct CompileTimeError<true> {};
#endif
*/
-//C++11:
+//C++11: at least get rid of this pointless string literal requirement
#define assert_static(X) \
static_assert(X, "Static assert has failed!");
diff --git a/zen/basic_math.h b/zen/basic_math.h
index 24bcf27a..606d90ad 100644
--- a/zen/basic_math.h
+++ b/zen/basic_math.h
@@ -1,7 +1,8 @@
// **************************************************************************
-// * 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) 2008-2011 ZenJu (zhnmju123 AT gmx.de) *
+// * This file is part of the zenXML project. It is distributed under the *
+// * Boost Software License, Version 1.0. See accompanying file *
+// * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt. *
+// * Copyright (C) 2011 ZenJu (zhnmju123 AT gmx.de) *
// **************************************************************************
#ifndef BASIC_MATH_HEADER_34726398432
diff --git a/zen/com_error.h b/zen/com_error.h
index 2ba76c0f..4546bd8a 100644
--- a/zen/com_error.h
+++ b/zen/com_error.h
@@ -16,6 +16,29 @@ namespace zen
std::wstring generateErrorMsg(const std::wstring& input, HRESULT hr);
std::wstring formatWin32Msg(DWORD dwMessageId); //return empty string on error
+class ComError
+{
+public:
+ explicit ComError(const std::wstring& msg, HRESULT hr = S_OK) : msg_(hr == S_OK ? msg : generateErrorMsg(msg, hr)) {}
+ const std::wstring& toString() const { return msg_; }
+
+private:
+ std::wstring msg_;
+};
+
+#define ZEN_CHECK_COM(func) ZEN_CHECK_COM_ERROR(func, #func) //throw ComError
+/*Convenience Macro checking for COM errors:
+
+Example: ZEN_CHECK_COM(backupComp->InitializeForBackup());
+
+Equivalent to:
+{
+ HRESULT hrInternal = backupComp->InitializeForBackup();
+ if (FAILED(hrInternal))
+ throw ComError(L"Error calling \"backupComp->InitializeForBackup()\".", hrInternal);
+}
+*/
+
@@ -202,5 +225,18 @@ std::wstring generateErrorMsg(const std::wstring& input, HRESULT hr)
}
return output;
}
+
+
+#define ZEN_CHECK_COM_ERROR(func, txt) \
+ { \
+ HRESULT hrInternal = func; \
+ if (FAILED(hrInternal)) \
+ throw ComError(L"Error calling \"" ## ZEN_CONCAT_SUB(L, txt) ## L"\".", hrInternal); \
+ }
+
+#ifndef ZEN_CONCAT //redeclare those macros: avoid dependency to scope_guard.h
+#define ZEN_CONCAT_SUB(X, Y) X ## Y
+#define ZEN_CONCAT(X, Y) ZEN_CONCAT_SUB(X, Y)
+#endif
}
#endif //COM_ERROR_HEADER
diff --git a/zen/com_ptr.h b/zen/com_ptr.h
index 380f4536..de8dbe64 100644
--- a/zen/com_ptr.h
+++ b/zen/com_ptr.h
@@ -8,6 +8,7 @@
#define SMART_COM_PTR_H
#include <algorithm>
+#include "win.h" //includes "windows.h" -> always include before other headers that also might include "windows.h"!
#include <Objbase.h>
namespace zen
@@ -16,7 +17,7 @@ namespace zen
ComPtr: RAII class handling COM objects
Example:
- --------
+--------
ComPtr<IUPnPDeviceFinder> devFinder;
if (FAILED(::CoCreateInstance(CLSID_UPnPDeviceFinder,
NULL,
@@ -33,16 +34,17 @@ template <class T>
class ComPtr
{
public:
- ComPtr() : ptr(NULL) {}
+ ComPtr() : ptr(nullptr) {}
ComPtr(const ComPtr& other) : ptr(other.ptr) { if (ptr) ptr->AddRef(); }
- ComPtr( ComPtr&& other) : ptr(other.release()) {}
-
- ComPtr& operator=(const ComPtr& other) { ComPtr(other).swap(*this); return *this; }
- ComPtr& operator=( ComPtr&& other) { swap(other); return *this; }
+ ComPtr( ComPtr&& other) : ptr(other.ptr) { other.ptr = nullptr; }
~ComPtr() { if (ptr) ptr->Release(); }
+ ComPtr& operator=(ComPtr other) { swap(other); return *this; } //unifying assignment: no need for r-value reference assignment!
+
+ void swap(ComPtr& rhs) { std::swap(ptr, rhs.ptr); } //throw()
+
T** init() //get pointer for use with ::CoCreateInstance()
{
ComPtr<T>().swap(*this);
@@ -51,24 +53,23 @@ public:
T* get() const { return ptr; }
+ T* operator->() const { return ptr; }
+ T& operator* () const { return *ptr; }
+
T* release() //throw()
{
T* tmp = ptr;
- ptr = NULL;
+ ptr = nullptr;
return tmp;
}
- void swap(ComPtr& rhs) { std::swap(ptr, rhs.ptr); } //throw()
-
- T* operator->() const { return ptr; }
-
private:
T* ptr;
struct ConversionToBool { int dummy; };
public:
//use member pointer as implicit conversion to bool (C++ Templates - Vandevoorde/Josuttis; chapter 20)
- operator int ConversionToBool::* () const { return ptr != NULL ? &ConversionToBool::dummy : NULL; }
+ operator int ConversionToBool::* () const { return ptr != nullptr ? &ConversionToBool::dummy : nullptr; }
};
@@ -96,10 +97,7 @@ ComPtr<S> com_dynamic_cast(const ComPtr<T>& other); //throw()
-
-
-
-//################# Inline Implementation #############################
+//################# implementation #############################
//we cannot specialize std::swap() for a class template and are not allowed to overload it => offer swap in own namespace
template <class T> inline
diff --git a/zen/debug_log.h b/zen/debug_log.h
index d8871ef9..bd9af25f 100644
--- a/zen/debug_log.h
+++ b/zen/debug_log.h
@@ -7,76 +7,93 @@
#ifndef DEBUG_LOG_HEADER_017324601673246392184621895740256342
#define DEBUG_LOG_HEADER_017324601673246392184621895740256342
-#include "zstring.h"
+#include <string>
+#include <cstdio>
+#include <memory>
+#include "deprecate.h"
+#include "string_tools.h"
+#include "time.h"
-cleanup this mess + remove any wxWidgets dependency!
//small macro for writing debug information into a logfile
-#define WRITE_DEBUG_LOG(x) globalLogFile().write(getCodeLocation(__TFILE__, __LINE__) + x);
+#define WRITE_LOG(x) globalLogFile().write(__FILE__, __LINE__, x);
+
//speed alternative: wxLogDebug(wxT("text")) + DebugView
+namespace zen
+{
+#ifdef FFS_WIN
+const char ZEN_FILE_NAME_SEPARATOR = '\\';
+
+#elif defined FFS_LINUX
+const char ZEN_FILE_NAME_SEPARATOR = '/';
+
+#else
+#error specify platform!
+#endif
+
+
class DebugLog
{
public:
- wxDEPRECATED(DebugLog(const wxString& filePrefix = wxString()))
- prefix(filePrefix),
- lineCount(0)
- {
- logfileName = assembleFileName();
- logFile.Open(logfileName, wxFile::write);
- }
+ class LogError {};
- void write(const std::string& logText)
+ ZEN_DEPRECATE
+ DebugLog(const std::string& filePrefix = std::string()) :
+ filename(filePrefix + "DEBUG_" + formatTime<std::string>("%Y-%m-%d %H%M%S") + ".log"),
+ rowCount(0),
+ handle(std::fopen(filename.c_str(), "w")) //Windows: non binary mode: automatically convert "\n" to "\r\n"; Linux: binary is default!
{
- todo;
+ if (!handle)
+ throw LogError();
}
- void write(const wxString& logText)
+ ~DebugLog() { std::fclose(handle); }
+
+ void write(const std::string& sourceFile,
+ int sourceRow,
+ const std::string& message)
{
- ++lineCount;
- if (lineCount % 50000 == 0) //prevent logfile from becoming too big
- {
- logFile.Close();
- wxRemoveFile(logfileName);
+ const std::string logEntry = "[" + formatTime<std::string>(FORMAT_TIME()) + "] " + afterLast(sourceFile, ZEN_FILE_NAME_SEPARATOR) +
+ ", line " + toString<std::string>(sourceRow) + ": " + message + "\n";
- logfileName = assembleFileName();
- logFile.Open(logfileName, wxFile::write);
- }
+ const size_t bytesWritten = ::fwrite(logEntry.c_str(), 1, logEntry.size(), handle);
+ if (std::ferror(handle) != 0 || bytesWritten != logEntry.size())
+ throw LogError();
-ersetze wxDateTime::Now() durch eigene lib:
- z.b. iso_time.h
+ if (std::fflush(handle) != 0)
+ throw LogError();
- logFile.Write(wxString(wxT("[")) + wxDateTime::Now().FormatTime() + wxT("] "));
- logFile.Write(logText + LINE_BREAK);
+ ++rowCount;
}
-private:
- wxString assembleFileName()
- {
- wxString tmp = wxDateTime::Now().FormatISOTime();
- tmp.Replace(wxT(":"), wxEmptyString);
- return prefix + wxString(wxT("DEBUG_")) + wxDateTime::Now().FormatISODate() + wxChar('_') + tmp + wxT(".log");
- }
+ size_t getRows() const { return rowCount; }
- wxString logfileName;
- wxString prefix;
- int lineCount;
- wxFile logFile; //logFile.close(); <- not needed
+ std::string getFileName() const { return filename; }
+
+private:
+ std::string filename;
+ size_t rowCount;
+ FILE* handle;
};
+
inline
DebugLog& globalLogFile()
{
- static DebugLog inst; //external linkage despite header definition!
- return inst;
-}
+ static std::unique_ptr<DebugLog> inst(new DebugLog); //external linkage despite header definition!
-inline
-wxString getCodeLocation(const wxString& file, int line)
-{
- return wxString(file).AfterLast(FILE_NAME_SEPARATOR) + wxT(", LINE ") + toString<wxString>(line) + wxT(" | ");
-}
+ if (inst->getRows() > 50000) //prevent logfile from becoming too big
+ {
+ const std::string oldName = inst->getFileName();
+ inst.reset();
+ std::remove(oldName.c_str()); //unchecked deletion!
+ inst.reset(new DebugLog);
+ }
+ return *inst;
+}
+}
#endif //DEBUG_LOG_HEADER_017324601673246392184621895740256342
diff --git a/zen/debug_new.cpp b/zen/debug_new.cpp
index c830a36b..2017dcd2 100644
--- a/zen/debug_new.cpp
+++ b/zen/debug_new.cpp
@@ -6,7 +6,7 @@
#include "debug_new.h"
-#include "win.h" //includes "windows.h"
+#include "win.h" //includes "windows.h"
#include "DbgHelp.h" //available for MSC only
#pragma comment(lib, "Dbghelp.lib")
@@ -16,35 +16,30 @@ namespace
LONG WINAPI writeDumpOnException(EXCEPTION_POINTERS* pExceptionInfo)
{
HANDLE hFile = ::CreateFile(L"exception.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
-
- MINIDUMP_EXCEPTION_INFORMATION exInfo = {};
- exInfo.ThreadId = ::GetCurrentThreadId();
- exInfo.ExceptionPointers = pExceptionInfo;
- exInfo.ClientPointers = NULL;
-
- MINIDUMP_EXCEPTION_INFORMATION* exceptParam = pExceptionInfo ? &exInfo : NULL;
-
- ::MiniDumpWriteDump(::GetCurrentProcess(), //__in HANDLE hProcess,
- ::GetCurrentProcessId(), //__in DWORD ProcessId,
- hFile, //__in HANDLE hFile,
- MiniDumpWithDataSegs, //__in MINIDUMP_TYPE DumpType, ->Standard: MiniDumpNormal, Medium: MiniDumpWithDataSegs, Full: MiniDumpWithFullMemory
- exceptParam, //__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
- NULL, //__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
- NULL); //__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam
-
- ::CloseHandle(hFile);
-
+ if (hFile != INVALID_HANDLE_VALUE)
+ {
+ MINIDUMP_EXCEPTION_INFORMATION exInfo = {};
+ exInfo.ThreadId = ::GetCurrentThreadId();
+ exInfo.ExceptionPointers = pExceptionInfo;
+
+ MINIDUMP_EXCEPTION_INFORMATION* exceptParam = pExceptionInfo ? &exInfo : NULL;
+
+ /*bool rv = */
+ ::MiniDumpWriteDump(::GetCurrentProcess(), //__in HANDLE hProcess,
+ ::GetCurrentProcessId(), //__in DWORD ProcessId,
+ hFile, //__in HANDLE hFile,
+ MiniDumpWithDataSegs, //__in MINIDUMP_TYPE DumpType, ->Standard: MiniDumpNormal, Medium: MiniDumpWithDataSegs, Full: MiniDumpWithFullMemory
+ exceptParam, //__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
+ NULL, //__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
+ NULL); //__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam
+
+ ::CloseHandle(hFile);
+ }
return EXCEPTION_EXECUTE_HANDLER;
}
-
-struct WriteDumpOnUnhandledException
-{
- WriteDumpOnUnhandledException()
- {
- ::SetUnhandledExceptionFilter(writeDumpOnException);
- }
-} dummy; //ensure that a dump-file is written for uncaught exceptions
+//ensure that a dump-file is written for uncaught exceptions
+struct Dummy { Dummy() { ::SetUnhandledExceptionFilter(writeDumpOnException); }} dummy;
}
diff --git a/zen/deprecate.h b/zen/deprecate.h
new file mode 100644
index 00000000..3481a062
--- /dev/null
+++ b/zen/deprecate.h
@@ -0,0 +1,20 @@
+// **************************************************************************
+// * 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) 2008-2011 ZenJu (zhnmju123 AT gmx.de) *
+// **************************************************************************
+
+#ifndef DEPRECATE_HEADER_2348970348
+#define DEPRECATE_HEADER_2348970348
+
+#ifdef __GNUC__
+#define ZEN_DEPRECATE __attribute__ ((deprecated))
+
+#elif defined _MSC_VER
+#define ZEN_DEPRECATE __declspec(deprecated)
+
+#else
+#error add your platform here!
+#endif
+
+#endif //DEPRECATE_HEADER_2348970348
diff --git a/zen/dir_watcher.cpp b/zen/dir_watcher.cpp
index 7b45b014..81e49f89 100644
--- a/zen/dir_watcher.cpp
+++ b/zen/dir_watcher.cpp
@@ -52,7 +52,7 @@ public:
else
{
const char* bufPos = &buffer[0];
- for(;;)
+ for (;;)
{
const FILE_NOTIFY_INFORMATION& notifyInfo = reinterpret_cast<const FILE_NOTIFY_INFORMATION&>(*bufPos);
@@ -115,7 +115,7 @@ public:
void reportError(const std::wstring& msg, DWORD errorCode) //throw()
{
boost::lock_guard<boost::mutex> dummy(lockAccess);
- errorMsg = std::make_pair(cvrtString<BasicWString>(msg), errorCode);
+ errorMsg = std::make_pair(copyStringTo<BasicWString>(msg), errorCode);
}
private:
@@ -157,7 +157,7 @@ public:
NULL);
if (hDir == INVALID_HANDLE_VALUE )
{
- const std::wstring errorMsg = _("Could not initialize directory monitoring:") + "\n\"" + utf8CvrtTo<std::wstring>(dirname) + "\"" + "\n\n" + zen::getLastErrorFormatted();
+ const std::wstring errorMsg = _("Could not initialize directory monitoring:") + L"\n\"" + dirname + L"\"" + L"\n\n" + zen::getLastErrorFormatted();
if (errorCodeForNotExisting(::GetLastError()))
throw ErrorNotExisting(errorMsg);
throw FileError(errorMsg);
@@ -178,7 +178,7 @@ public:
{
std::vector<char> buffer(64 * 1024); //needs to be aligned on a DWORD boundary; maximum buffer size restricted by some networks protocols (according to docu)
- for(;;)
+ for (;;)
{
boost::this_thread::interruption_point();
@@ -189,7 +189,7 @@ public:
false, //__in BOOL bInitialState,
NULL); //__in_opt LPCTSTR lpName
if (overlapped.hEvent == NULL)
- return shared_->reportError(_("Error when monitoring directories.") + " (CreateEvent)" + "\n\n" + getLastErrorFormatted(), ::GetLastError());
+ return shared_->reportError(_("Error when monitoring directories.") + L" (CreateEvent)" + L"\n\n" + getLastErrorFormatted(), ::GetLastError());
ZEN_ON_BLOCK_EXIT(::CloseHandle(overlapped.hEvent));
//asynchronous variant: runs on this thread's APC queue!
@@ -204,7 +204,7 @@ public:
NULL, // __out_opt LPDWORD lpBytesReturned,
&overlapped, // __inout_opt LPOVERLAPPED lpOverlapped,
NULL)) // __in_opt LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
- return shared_->reportError(_("Error when monitoring directories.") + " (ReadDirectoryChangesW)" + "\n\n" + getLastErrorFormatted(), ::GetLastError());
+ return shared_->reportError(_("Error when monitoring directories.") + L" (ReadDirectoryChangesW)" + L"\n\n" + getLastErrorFormatted(), ::GetLastError());
//async I/O is a resource that needs to be guarded since it will write to local variable "buffer"!
zen::ScopeGuard lockAio = zen::makeGuard([&]()
@@ -226,7 +226,7 @@ public:
false)) //__in BOOL bWait
{
if (::GetLastError() != ERROR_IO_INCOMPLETE)
- return shared_->reportError(_("Error when monitoring directories.") + " (GetOverlappedResult)" + "\n\n" + getLastErrorFormatted(), ::GetLastError());
+ return shared_->reportError(_("Error when monitoring directories.") + L" (GetOverlappedResult)" + L"\n\n" + getLastErrorFormatted(), ::GetLastError());
//execute asynchronous procedure calls (APC) queued on this thread
::SleepEx(50, // __in DWORD dwMilliseconds,
@@ -365,18 +365,20 @@ namespace
class DirsOnlyTraverser : public zen::TraverseCallback
{
public:
- DirsOnlyTraverser(std::vector<Zstring>& dirs) : dirs_(dirs) {}
+ DirsOnlyTraverser(std::vector<Zstring>& dirs,
+ const std::shared_ptr<TraverseCallback>& otherMe) : otherMe_(otherMe), dirs_(dirs) {}
virtual void onFile (const Zchar* shortName, const Zstring& fullName, const FileInfo& details) {}
virtual void onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) {}
- virtual ReturnValDir onDir (const Zchar* shortName, const Zstring& fullName)
+ virtual std::shared_ptr<TraverseCallback> onDir(const Zchar* shortName, const Zstring& fullName)
{
dirs_.push_back(fullName);
- return ReturnValDir(zen::Int2Type<ReturnValDir::TRAVERSING_DIR_CONTINUE>(), *this);
+ return otherMe_;
}
virtual HandleError onError(const std::wstring& errorText) { throw FileError(errorText); }
private:
+ const std::shared_ptr<TraverseCallback>& otherMe_; //lifetime management, two options: 1. use std::weak_ptr 2. ref to shared_ptr
std::vector<Zstring>& dirs_;
};
}
@@ -394,13 +396,15 @@ DirWatcher::DirWatcher(const Zstring& directory) : //throw FileError
std::vector<Zstring> fullDirList;
fullDirList.push_back(dirname);
- DirsOnlyTraverser traverser(fullDirList); //throw FileError
- zen::traverseFolder(dirname, false, traverser); //don't traverse into symlinks (analog to windows build)
+ std::shared_ptr<TraverseCallback> traverser;
+ traverser = std::make_shared<DirsOnlyTraverser>(fullDirList, traverser); //throw FileError
+
+ zen::traverseFolder(dirname, false, *traverser); //don't traverse into symlinks (analog to windows build)
//init
pimpl_->notifDescr = ::inotify_init();
if (pimpl_->notifDescr == -1)
- throw FileError(_("Could not initialize directory monitoring:") + "\n\"" + dirname + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Could not initialize directory monitoring:") + L"\n\"" + dirname + L"\"" + L"\n\n" + getLastErrorFormatted());
zen::ScopeGuard guardDescr = zen::makeGuard([&]() { ::close(pimpl_->notifDescr); });
@@ -411,7 +415,7 @@ DirWatcher::DirWatcher(const Zstring& directory) : //throw FileError
initSuccess = ::fcntl(pimpl_->notifDescr, F_SETFL, flags | O_NONBLOCK) != -1;
if (!initSuccess)
- throw FileError(_("Could not initialize directory monitoring:") + "\n\"" + dirname + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Could not initialize directory monitoring:") + L"\n\"" + dirname + L"\"" + L"\n\n" + getLastErrorFormatted());
//add watches
std::for_each(fullDirList.begin(), fullDirList.end(),
@@ -429,7 +433,7 @@ DirWatcher::DirWatcher(const Zstring& directory) : //throw FileError
IN_MOVE_SELF);
if (wd == -1)
{
- std::wstring errorMsg = _("Could not initialize directory monitoring:") + "\n\"" + subdir + "\"" + "\n\n" + getLastErrorFormatted();
+ std::wstring errorMsg = _("Could not initialize directory monitoring:") + L"\n\"" + subdir + L"\"" + L"\n\n" + getLastErrorFormatted();
if (errno == ENOENT)
throw ErrorNotExisting(errorMsg);
throw FileError(errorMsg);
@@ -463,7 +467,7 @@ std::vector<Zstring> DirWatcher::getChanges() //throw FileError
errno == EAGAIN) //Non-blocking I/O has been selected using O_NONBLOCK and no data was immediately available for reading
return std::vector<Zstring>();
- throw FileError(_("Error when monitoring directories.") + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error when monitoring directories.") + L"\n\n" + getLastErrorFormatted());
}
std::set<Zstring> tmp; //get rid of duplicate entries (actually occur!)
diff --git a/zen/disable_standby.h b/zen/disable_standby.h
deleted file mode 100644
index ec112427..00000000
--- a/zen/disable_standby.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef PREVENTSTANDBY_H_INCLUDED
-#define PREVENTSTANDBY_H_INCLUDED
-
-#ifdef FFS_WIN
-#include "win.h" //includes "windows.h"
-#endif
-
-namespace zen
-{
-class DisableStandby
-{
-public:
-#ifdef FFS_WIN
- DisableStandby()
- {
- ::SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED /* | ES_AWAYMODE_REQUIRED*/ );
- }
-
- ~DisableStandby()
- {
- ::SetThreadExecutionState(ES_CONTINUOUS);
- }
-#endif
-};
-}
-
-#endif // PREVENTSTANDBY_H_INCLUDED
diff --git a/zen/dst_hack.cpp b/zen/dst_hack.cpp
index f6579441..e4f48c2f 100644
--- a/zen/dst_hack.cpp
+++ b/zen/dst_hack.cpp
@@ -166,9 +166,9 @@ FILETIME utcToLocal(const FILETIME& utcTime) //throw (std::runtime_error)
&utcTime, //__in const FILETIME *lpFileTime,
&localTime)) //__out LPFILETIME lpLocalFileTime
{
- const std::wstring errorMessage = _("Conversion error:") + " FILETIME -> local FILETIME: " + "(" +
- "High: " + toString<std::wstring>(utcTime.dwHighDateTime) + " " +
- "Low: " + toString<std::wstring>(utcTime.dwLowDateTime) + ") " + "\n\n" + getLastErrorFormatted();
+ const std::wstring errorMessage = _("Conversion error:") + L" FILETIME -> local FILETIME: " + L"(" +
+ L"High: " + toString<std::wstring>(utcTime.dwHighDateTime) + L" " +
+ L"Low: " + toString<std::wstring>(utcTime.dwLowDateTime) + L") " + L"\n\n" + getLastErrorFormatted();
throw std::runtime_error(wideToUtf8<std::string>(errorMessage));
}
return localTime;
@@ -183,9 +183,9 @@ FILETIME localToUtc(const FILETIME& localTime) //throw (std::runtime_error)
&localTime, //__in const FILETIME *lpLocalFileTime,
&utcTime)) //__out LPFILETIME lpFileTime
{
- const std::wstring errorMessage = _("Conversion error:") + " local FILETIME -> FILETIME: " + "(" +
- "High: " + toString<std::wstring>(localTime.dwHighDateTime) + " " +
- "Low: " + toString<std::wstring>(localTime.dwLowDateTime) + ") " + "\n\n" + getLastErrorFormatted();
+ const std::wstring errorMessage = _("Conversion error:") + L" local FILETIME -> FILETIME: " + L"(" +
+ L"High: " + toString<std::wstring>(localTime.dwHighDateTime) + L" " +
+ L"Low: " + toString<std::wstring>(localTime.dwLowDateTime) + L") " + L"\n\n" + getLastErrorFormatted();
throw std::runtime_error(wideToUtf8<std::string>(errorMessage));
}
return utcTime;
@@ -283,8 +283,8 @@ std::bitset<UTC_LOCAL_OFFSET_BITS> getUtcLocalShift()
if (std::bitset < UTC_LOCAL_OFFSET_BITS - 1 > (absValue).to_ulong() != static_cast<unsigned long>(absValue) || //time shifts that big shouldn't be possible!
timeShiftSec % (60 * 15) != 0) //all known time shift have at least 15 minute granularity!
{
- const std::wstring errorMessage = _("Conversion error:") + " Unexpected UTC <-> local time shift: " +
- "(" + toString<std::wstring>(timeShiftSec) + ") " + "\n\n" + getLastErrorFormatted();
+ const std::wstring errorMessage = _("Conversion error:") + L" Unexpected UTC <-> local time shift: " +
+ L"(" + toString<std::wstring>(timeShiftSec) + L") " + L"\n\n" + getLastErrorFormatted();
throw std::runtime_error(wideToUtf8<std::string>(errorMessage));
}
diff --git a/zen/file_error.h b/zen/file_error.h
index 8c49937c..2992fbbe 100644
--- a/zen/file_error.h
+++ b/zen/file_error.h
@@ -17,10 +17,10 @@ namespace zen
class FileError //Exception base class used to notify file/directory copy/delete errors
{
public:
- FileError(const std::wstring& message) : errorMessage(message) {}
+ explicit FileError(const std::wstring& message) : errorMessage(message) {}
virtual ~FileError() {}
- const std::wstring& msg() const { return errorMessage; }
+ const std::wstring& toString() const { return errorMessage; }
private:
std::wstring errorMessage;
@@ -38,11 +38,9 @@ DEFINE_NEW_FILE_ERROR(ErrorFileLocked);
//----------- facilitate usage of std::wstring for error messages --------------------
//allow implicit UTF8 conversion: since std::wstring models a GUI string, convenience is more important than performance
-inline std::wstring operator+(const std::wstring& lhs, const Zstring& rhs) { return std::wstring(lhs) += zen::utf8CvrtTo<std::wstring>(rhs); }
+inline std::wstring operator+(const std::wstring& lhs, const Zstring& rhs) { return std::wstring(lhs) += zen::utf8CvrtTo<std::wstring>(rhs); }
//we musn't put our overloads in namespace std, but namespace zen (+ using directive) is sufficient
-inline std::wstring operator+(const std::wstring& lhs, const char* rhs) { return std::wstring(lhs) += utf8CvrtTo<std::wstring>(rhs); }
-inline std::wstring operator+(const std::wstring& lhs, const std::string& rhs) { return std::wstring(lhs) += utf8CvrtTo<std::wstring>(rhs); }
}
#endif // FILEERROR_H_INCLUDED
diff --git a/zen/file_handling.cpp b/zen/file_handling.cpp
index 7b46181b..5d57938a 100644
--- a/zen/file_handling.cpp
+++ b/zen/file_handling.cpp
@@ -107,7 +107,7 @@ void getFileAttrib(const Zstring& filename, FileAttrib& attr, ProcSymlink procSl
{
const HANDLE searchHandle = ::FindFirstFile(applyLongPathPrefix(filename).c_str(), &fileInfo);
if (searchHandle == INVALID_HANDLE_VALUE)
- throw FileError(_("Error reading file attributes:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error reading file attributes:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted());
::FindClose(searchHandle);
}
// WIN32_FILE_ATTRIBUTE_DATA sourceAttr = {};
@@ -144,12 +144,12 @@ void getFileAttrib(const Zstring& filename, FileAttrib& attr, ProcSymlink procSl
FILE_FLAG_BACKUP_SEMANTICS,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
- throw FileError(_("Error reading file attributes:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error reading file attributes:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted());
ZEN_ON_BLOCK_EXIT(::CloseHandle(hFile));
BY_HANDLE_FILE_INFORMATION fileInfoHnd = {};
if (!::GetFileInformationByHandle(hFile, &fileInfoHnd))
- throw FileError(_("Error reading file attributes:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error reading file attributes:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted());
attr.fileSize = UInt64(fileInfoHnd.nFileSizeLow, fileInfoHnd.nFileSizeHigh);
attr.modificationTime = toTimeT(fileInfoHnd.ftLastWriteTime);
@@ -162,7 +162,7 @@ void getFileAttrib(const Zstring& filename, FileAttrib& attr, ProcSymlink procSl
:: stat(filename.c_str(), &fileInfo) :
::lstat(filename.c_str(), &fileInfo);
if (rv != 0) //follow symbolic links
- throw FileError(_("Error reading file attributes:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error reading file attributes:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted());
attr.fileSize = UInt64(fileInfo.st_size);
attr.modificationTime = fileInfo.st_mtime;
@@ -287,7 +287,7 @@ bool zen::removeFile(const Zstring& filename) //throw FileError;
if (!somethingExists(filename))
return false; //neither file nor any other object (e.g. broken symlink) with that name existing
- throw FileError(_("Error deleting file:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted(lastError));
+ throw FileError(_("Error deleting file:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted(lastError));
}
return true;
}
@@ -343,7 +343,7 @@ void renameFile_sub(const Zstring& oldName, const Zstring& newName) //throw File
}
}
- std::wstring errorMessage = _("Error moving file:") + "\n\"" + oldName + "\" ->\n\"" + newName + "\"" + "\n\n" + getLastErrorFormatted(lastError);
+ std::wstring errorMessage = _("Error moving file:") + L"\n\"" + oldName + L"\" ->\n\"" + newName + L"\"" + L"\n\n" + getLastErrorFormatted(lastError);
if (lastError == ERROR_NOT_SAME_DEVICE)
throw ErrorDifferentVolume(errorMessage);
@@ -358,7 +358,7 @@ void renameFile_sub(const Zstring& oldName, const Zstring& newName) //throw File
{
const int lastError = errno;
- std::wstring errorMessage = _("Error moving file:") + "\n\"" + oldName + "\" ->\n\"" + newName + "\"" + "\n\n" + getLastErrorFormatted(lastError);
+ std::wstring errorMessage = _("Error moving file:") + L"\n\"" + oldName + L"\" ->\n\"" + newName + L"\"" + L"\n\n" + getLastErrorFormatted(lastError);
if (lastError == EXDEV)
throw ErrorDifferentVolume(errorMessage);
@@ -529,8 +529,8 @@ void zen::moveFile(const Zstring& sourceFile, const Zstring& targetFile, bool ig
const bool targetExisting = fileExists(targetFile);
if (targetExisting && !ignoreExisting) //test file existence: e.g. Linux might silently overwrite existing symlinks
- throw FileError(_("Error moving file:") + "\n\"" + sourceFile + "\" ->\n\"" + targetFile + "\"" +
- "\n\n" + _("Target file already existing!"));
+ throw FileError(_("Error moving file:") + L"\n\"" + sourceFile + L"\" ->\n\"" + targetFile + L"\"" +
+ L"\n\n" + _("Target file already existing!"));
if (!targetExisting)
{
@@ -583,10 +583,10 @@ public:
files_.push_back(NamePair(shortName, fullName));
}
- virtual ReturnValDir onDir(const Zchar* shortName, const Zstring& fullName)
+ virtual std::shared_ptr<TraverseCallback> onDir(const Zchar* shortName, const Zstring& fullName)
{
dirs_.push_back(NamePair(shortName, fullName));
- return Int2Type<ReturnValDir::TRAVERSING_DIR_IGNORE>(); //DON'T traverse into subdirs; moveDirectory works recursively!
+ return nullptr; //DON'T traverse into subdirs; moveDirectory works recursively!
}
virtual HandleError onError(const std::wstring& errorText) { throw FileError(errorText); }
@@ -629,8 +629,8 @@ void moveDirectoryImpl(const Zstring& sourceDir, const Zstring& targetDir, bool
const bool targetExisting = dirExists(targetDir);
if (targetExisting && !ignoreExisting) //directory or symlink exists (or even a file... this error will be caught later)
- throw FileError(_("Error moving directory:") + "\n\"" + sourceDir + "\" ->\n\"" + targetDir + "\"" +
- "\n\n" + _("Target directory already existing!"));
+ throw FileError(_("Error moving directory:") + L"\n\"" + sourceDir + L"\" ->\n\"" + targetDir + L"\"" +
+ L"\n\n" + _("Target directory already existing!"));
const bool isSymlink = symlinkExists(sourceDir);
@@ -722,10 +722,10 @@ public:
else
m_files.push_back(fullName);
}
- virtual ReturnValDir onDir(const Zchar* shortName, const Zstring& fullName)
+ virtual std::shared_ptr<TraverseCallback> onDir(const Zchar* shortName, const Zstring& fullName)
{
m_dirs.push_back(fullName);
- return Int2Type<ReturnValDir::TRAVERSING_DIR_IGNORE>(); //DON'T traverse into subdirs; removeDirectory works recursively!
+ return nullptr; //DON'T traverse into subdirs; removeDirectory works recursively!
}
virtual HandleError onError(const std::wstring& errorText) { throw FileError(errorText); }
@@ -759,7 +759,7 @@ void zen::removeDirectory(const Zstring& directory, CallbackRemoveDir* callback)
#elif defined FFS_LINUX
if (::unlink(directory.c_str()) != 0)
#endif
- throw FileError(_("Error deleting directory:") + "\n\"" + directory + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error deleting directory:") + L"\n\"" + directory + L"\"" + L"\n\n" + getLastErrorFormatted());
if (callback)
callback->notifyDirDeletion(directory); //once per symlink
@@ -792,7 +792,7 @@ void zen::removeDirectory(const Zstring& directory, CallbackRemoveDir* callback)
if (::rmdir(directory.c_str()) != 0)
#endif
{
- throw FileError(_("Error deleting directory:") + "\n\"" + directory + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error deleting directory:") + L"\n\"" + directory + L"\"" + L"\n\n" + getLastErrorFormatted());
}
if (callback)
callback->notifyDirDeletion(directory); //and once per folder
@@ -841,7 +841,7 @@ void zen::setFileTime(const Zstring& filename, const Int64& modificationTime, Pr
});
if (targetHandle.get() == INVALID_HANDLE_VALUE)
- throw FileError(_("Error changing modification time:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error changing modification time:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted());
/*
if (hTarget == INVALID_HANDLE_VALUE && ::GetLastError() == ERROR_SHARING_VIOLATION)
@@ -857,7 +857,7 @@ void zen::setFileTime(const Zstring& filename, const Int64& modificationTime, Pr
isNullTime(creationTime) ? NULL : &creationTime,
NULL,
&lastWriteTime))
- throw FileError(_("Error changing modification time:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error changing modification time:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted());
#ifndef NDEBUG //dst hack: verify data written
if (dst::isFatDrive(filename) && !dirExists(filename)) //throw()
@@ -881,7 +881,7 @@ void zen::setFileTime(const Zstring& filename, const Int64& modificationTime, Pr
// set new "last write time"
if (::utime(filename.c_str(), &newTimes) != 0)
- throw FileError(_("Error changing modification time:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error changing modification time:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted());
}
else
{
@@ -893,7 +893,7 @@ void zen::setFileTime(const Zstring& filename, const Int64& modificationTime, Pr
newTimes[1].tv_usec = 0;
if (::lutimes(filename.c_str(), newTimes) != 0)
- throw FileError(_("Error changing modification time:") + "\n\"" + filename + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error changing modification time:") + L"\n\"" + filename + L"\"" + L"\n\n" + getLastErrorFormatted());
}
#endif
}
@@ -902,10 +902,10 @@ void zen::setFileTime(const Zstring& filename, const Int64& modificationTime, Pr
namespace
{
#ifdef FFS_WIN
-Zstring resolveDirectorySymlink(const Zstring& dirLinkName) //get full target path of symbolic link to a directory; throw (FileError)
+Zstring getSymlinkTargetPath(const Zstring& symlink) //throw FileError
{
//open handle to target of symbolic link
- const HANDLE hDir = ::CreateFile(applyLongPathPrefix(dirLinkName).c_str(),
+ const HANDLE hDir = ::CreateFile(applyLongPathPrefix(symlink).c_str(),
0,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
0,
@@ -913,12 +913,9 @@ Zstring resolveDirectorySymlink(const Zstring& dirLinkName) //get full target pa
FILE_FLAG_BACKUP_SEMANTICS, //needed to open a directory
NULL);
if (hDir == INVALID_HANDLE_VALUE)
- throw FileError(_("Error resolving symbolic link:") + "\n\"" + dirLinkName + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error resolving symbolic link:") + L"\n\"" + symlink + L"\"" + L"\n\n" + getLastErrorFormatted());
ZEN_ON_BLOCK_EXIT(::CloseHandle(hDir));
- const DWORD BUFFER_SIZE = 10000;
- std::vector<wchar_t> targetPath(BUFFER_SIZE);
-
//dynamically load windows API function
typedef DWORD (WINAPI *GetFinalPathNameByHandleWFunc)(HANDLE hFile,
LPTSTR lpszFilePath,
@@ -926,15 +923,17 @@ Zstring resolveDirectorySymlink(const Zstring& dirLinkName) //get full target pa
DWORD dwFlags);
const SysDllFun<GetFinalPathNameByHandleWFunc> getFinalPathNameByHandle(L"kernel32.dll", "GetFinalPathNameByHandleW");
if (!getFinalPathNameByHandle)
- throw FileError(_("Error loading library function:") + "\n\"" + "GetFinalPathNameByHandleW" + "\"");
+ throw FileError(_("Error loading library function:") + L"\n\"" + L"GetFinalPathNameByHandleW" + L"\"");
+ const DWORD BUFFER_SIZE = 10000;
+ std::vector<wchar_t> targetPath(BUFFER_SIZE);
const DWORD charsWritten = getFinalPathNameByHandle(hDir, //__in HANDLE hFile,
&targetPath[0], //__out LPTSTR lpszFilePath,
BUFFER_SIZE, //__in DWORD cchFilePath,
FILE_NAME_NORMALIZED); //__in DWORD dwFlags
if (charsWritten >= BUFFER_SIZE || charsWritten == 0)
{
- std::wstring errorMessage = _("Error resolving symbolic link:") + "\n\"" + dirLinkName + "\"";
+ std::wstring errorMessage = _("Error resolving symbolic link:") + L"\n\"" + symlink + L"\"";
if (charsWritten == 0)
errorMessage += L"\n\n" + getLastErrorFormatted();
throw FileError(errorMessage);
@@ -959,7 +958,7 @@ void copySecurityContext(const Zstring& source, const Zstring& target, ProcSymli
errno == EOPNOTSUPP) //extended attributes are not supported by the filesystem
return;
- throw FileError(_("Error reading security context:") + "\n\"" + source + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error reading security context:") + L"\n\"" + source + L"\"" + L"\n\n" + getLastErrorFormatted());
}
ZEN_ON_BLOCK_EXIT(::freecon(contextSource));
@@ -987,7 +986,7 @@ void copySecurityContext(const Zstring& source, const Zstring& target, ProcSymli
::setfilecon(target.c_str(), contextSource) :
::lsetfilecon(target.c_str(), contextSource);
if (rv3 < 0)
- throw FileError(_("Error writing security context:") + "\n\"" + target + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error writing security context:") + L"\n\"" + target + L"\"" + L"\n\n" + getLastErrorFormatted());
}
#endif //HAVE_SELINUX
@@ -1010,16 +1009,65 @@ void copyObjectPermissions(const Zstring& source, const Zstring& target, ProcSym
}
catch (const FileError& e)
{
- throw FileError(_("Error copying file permissions:") + "\n\"" + source + "\" ->\n\"" + target + "\"" + "\n\n" + e.msg());
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + source + L"\" ->\n\"" + target + L"\"" + L"\n\n" + e.toString());
}
+ //in contrast to ::SetSecurityInfo(), ::SetFileSecurity() seems to honor the "inherit DACL/SACL" flags
+
+ //NOTE: ::GetFileSecurity()/::SetFileSecurity() do NOT follow Symlinks!
+ const Zstring sourceResolved = procSl == SYMLINK_FOLLOW && symlinkExists(source) ? getSymlinkTargetPath(source) : source;
+ const Zstring targetResolved = procSl == SYMLINK_FOLLOW && symlinkExists(target) ? getSymlinkTargetPath(target) : target;
+
+ std::vector<char> buffer(10000); //example of actually required buffer size: 192 bytes
+ for (;;)
+ {
+ DWORD bytesNeeded = 0;
+ if (::GetFileSecurity(applyLongPathPrefix(sourceResolved).c_str(), //__in LPCTSTR lpFileName, -> long path prefix IS needed, although it is NOT mentioned on MSDN!!!
+ OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION |
+ DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION, //__in SECURITY_INFORMATION RequestedInformation,
+ reinterpret_cast<PSECURITY_DESCRIPTOR>(&buffer[0]), //__out_opt PSECURITY_DESCRIPTOR pSecurityDescriptor,
+ static_cast<DWORD>(buffer.size()), //__in DWORD nLength,
+ &bytesNeeded)) //__out LPDWORD lpnLengthNeeded
+ break;
+ //failure: ...
+ if (bytesNeeded > buffer.size())
+ buffer.resize(bytesNeeded);
+ else
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + sourceResolved + L"\" ->\n\"" + targetResolved + L"\"" + L"\n\n" + getLastErrorFormatted() + L" (R)");
+ }
+ SECURITY_DESCRIPTOR& secDescr = reinterpret_cast<SECURITY_DESCRIPTOR&>(buffer[0]);
+
+ /*
+ SECURITY_DESCRIPTOR_CONTROL secCtrl = 0;
+ {
+ DWORD ctrlRev = 0;
+ if (!::GetSecurityDescriptorControl(&secDescr, // __in PSECURITY_DESCRIPTOR pSecurityDescriptor,
+ &secCtrl, // __out PSECURITY_DESCRIPTOR_CONTROL pControl,
+ &ctrlRev)) //__out LPDWORD lpdwRevision
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + sourceResolved + L"\" ->\n\"" + targetResolved + L"\"" + L"\n\n" + getLastErrorFormatted() + L" (C)");
+ }
+ //interesting flags:
+ //#define SE_DACL_PRESENT (0x0004)
+ //#define SE_SACL_PRESENT (0x0010)
+ //#define SE_DACL_PROTECTED (0x1000)
+ //#define SE_SACL_PROTECTED (0x2000)
+ */
+
+ if (!::SetFileSecurity(applyLongPathPrefix(targetResolved).c_str(), //__in LPCTSTR lpFileName, -> long path prefix IS needed, although it is NOT mentioned on MSDN!!!
+ OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION |
+ DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION, //__in SECURITY_INFORMATION SecurityInformation,
+ &secDescr)) //__in PSECURITY_DESCRIPTOR pSecurityDescriptor
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + sourceResolved + L"\" ->\n\"" + targetResolved + L"\"" + L"\n\n" + getLastErrorFormatted() + L" (W)");
+
+ /*
PSECURITY_DESCRIPTOR buffer = NULL;
PSID owner = NULL;
PSID group = NULL;
PACL dacl = NULL;
PACL sacl = NULL;
- //http://msdn.microsoft.com/en-us/library/aa364399(v=VS.85).aspx
+ //File Security and Access Rights: http://msdn.microsoft.com/en-us/library/aa364399(v=VS.85).aspx
+ //SECURITY_INFORMATION Access Rights: http://msdn.microsoft.com/en-us/library/windows/desktop/aa379573(v=vs.85).aspx
const HANDLE hSource = ::CreateFile(applyLongPathPrefix(source).c_str(),
READ_CONTROL | ACCESS_SYSTEM_SECURITY, //ACCESS_SYSTEM_SECURITY required for SACL access
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
@@ -1028,23 +1076,33 @@ void copyObjectPermissions(const Zstring& source, const Zstring& target, ProcSym
FILE_FLAG_BACKUP_SEMANTICS | (procSl == SYMLINK_DIRECT ? FILE_FLAG_OPEN_REPARSE_POINT : 0), //FILE_FLAG_BACKUP_SEMANTICS needed to open a directory
NULL);
if (hSource == INVALID_HANDLE_VALUE)
- throw FileError(_("Error copying file permissions:") + "\n\"" + source + "\" ->\n\"" + target + "\"" + "\n\n" + getLastErrorFormatted() + " (OR)");
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + source + L"\" ->\n\"" + target + L"\"" + L"\n\n" + getLastErrorFormatted() + L" (OR)");
ZEN_ON_BLOCK_EXIT(::CloseHandle(hSource));
// DWORD rc = ::GetNamedSecurityInfo(const_cast<WCHAR*>(applyLongPathPrefix(source).c_str()), -> does NOT dereference symlinks!
DWORD rc = ::GetSecurityInfo(hSource, //__in LPTSTR pObjectName,
SE_FILE_OBJECT, //__in SE_OBJECT_TYPE ObjectType,
- OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION, //__in SECURITY_INFORMATION SecurityInfo,
+ OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION |
+ DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION, //__in SECURITY_INFORMATION SecurityInfo,
&owner, //__out_opt PSID *ppsidOwner,
&group, //__out_opt PSID *ppsidGroup,
&dacl, //__out_opt PACL *ppDacl,
&sacl, //__out_opt PACL *ppSacl,
&buffer); //__out_opt PSECURITY_DESCRIPTOR *ppSecurityDescriptor
if (rc != ERROR_SUCCESS)
- throw FileError(_("Error copying file permissions:") + "\n\"" + source + "\" ->\n\"" + target + "\"" + "\n\n" + getLastErrorFormatted(rc) + " (R)");
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + source + L"\" ->\n\"" + target + L"\"" + L"\n\n" + getLastErrorFormatted(rc) + L" (R)");
ZEN_ON_BLOCK_EXIT(::LocalFree(buffer));
- //may need to remove the readonly-attribute (e.g. FAT usb drives)
+ SECURITY_DESCRIPTOR_CONTROL secCtrl = 0;
+ {
+ DWORD ctrlRev = 0;
+ if (!::GetSecurityDescriptorControl(buffer, // __in PSECURITY_DESCRIPTOR pSecurityDescriptor,
+ &secCtrl, // __out PSECURITY_DESCRIPTOR_CONTROL pControl,
+ &ctrlRev))//__out LPDWORD lpdwRevision
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + source + L"\" ->\n\"" + target + L"\"" + L"\n\n" + getLastErrorFormatted(rc) + L" (C)");
+ }
+
+ //may need to remove the readonly-attribute
FileUpdateHandle targetHandle(target, [ = ]()
{
return ::CreateFile(applyLongPathPrefix(target).c_str(), // lpFileName
@@ -1057,19 +1115,29 @@ void copyObjectPermissions(const Zstring& source, const Zstring& target, ProcSym
});
if (targetHandle.get() == INVALID_HANDLE_VALUE)
- throw FileError(_("Error copying file permissions:") + "\n\"" + source + "\" ->\n\"" + target + "\"" + "\n\n" + getLastErrorFormatted() + " (OW)");
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + source + L"\" ->\n\"" + target + L"\"" + L"\n\n" + getLastErrorFormatted() + L" (OW)");
+
+ SECURITY_INFORMATION secFlags = OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION;
+
+ //SACL/DACL inheritence flag is NOT copied by default: we have to tell ::SetSecurityInfo(() to enable/disable it manually!
+ //if (secCtrl & SE_DACL_PRESENT)
+ secFlags |= (secCtrl & SE_DACL_PROTECTED) ? PROTECTED_DACL_SECURITY_INFORMATION : UNPROTECTED_DACL_SECURITY_INFORMATION;
+ //if (secCtrl & SE_SACL_PRESENT)
+ secFlags |= (secCtrl & SE_SACL_PROTECTED) ? PROTECTED_SACL_SECURITY_INFORMATION : UNPROTECTED_SACL_SECURITY_INFORMATION;
+
// rc = ::SetNamedSecurityInfo(const_cast<WCHAR*>(applyLongPathPrefix(target).c_str()), //__in LPTSTR pObjectName, -> does NOT dereference symlinks!
rc = ::SetSecurityInfo(targetHandle.get(), //__in LPTSTR pObjectName,
SE_FILE_OBJECT, //__in SE_OBJECT_TYPE ObjectType,
- OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION, //__in SECURITY_INFORMATION SecurityInfo,
+ secFlags, //__in SECURITY_INFORMATION SecurityInfo,
owner, //__in_opt PSID psidOwner,
group, //__in_opt PSID psidGroup,
dacl, //__in_opt PACL pDacl,
sacl); //__in_opt PACL pSacl
if (rc != ERROR_SUCCESS)
- throw FileError(_("Error copying file permissions:") + "\n\"" + source + "\" ->\n\"" + target + "\"" + "\n\n" + getLastErrorFormatted(rc) + " (W)");
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + source + L"\" ->\n\"" + target + L"\"" + L"\n\n" + getLastErrorFormatted(rc) + L" (W)");
+ */
#elif defined FFS_LINUX
@@ -1083,14 +1151,14 @@ void copyObjectPermissions(const Zstring& source, const Zstring& target, ProcSym
if (::stat(source.c_str(), &fileInfo) != 0 ||
::chown(target.c_str(), fileInfo.st_uid, fileInfo.st_gid) != 0 || // may require admin rights!
::chmod(target.c_str(), fileInfo.st_mode) != 0)
- throw FileError(_("Error copying file permissions:") + "\n\"" + source + "\" ->\n\"" + target + "\"" + "\n\n" + getLastErrorFormatted() + " (R)");
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + source + L"\" ->\n\"" + target + L"\"" + L"\n\n" + getLastErrorFormatted() + L" (R)");
}
else
{
if (::lstat(source.c_str(), &fileInfo) != 0 ||
::lchown(target.c_str(), fileInfo.st_uid, fileInfo.st_gid) != 0 || // may require admin rights!
(!symlinkExists(target) && ::chmod(target.c_str(), fileInfo.st_mode) != 0)) //setting access permissions doesn't make sense for symlinks on Linux: there is no lchmod()
- throw FileError(_("Error copying file permissions:") + "\n\"" + source + "\" ->\n\"" + target + "\"" + "\n\n" + getLastErrorFormatted() + " (W)");
+ throw FileError(_("Error copying file permissions:") + L"\n\"" + source + L"\" ->\n\"" + target + L"\"" + L"\n\n" + getLastErrorFormatted() + L" (W)");
}
#endif
}
@@ -1110,7 +1178,7 @@ void createDirectory_straight(const Zstring& directory, const Zstring& templateD
#endif
{
if (level != 0) return;
- throw FileError(_("Error creating directory:") + "\n\"" + directory + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error creating directory:") + L"\n\"" + directory + L"\"" + L"\n\n" + getLastErrorFormatted());
}
if (!templateDir.empty())
@@ -1124,7 +1192,7 @@ void createDirectory_straight(const Zstring& directory, const Zstring& templateD
try
{
//get target directory of symbolic link
- sourcePath = resolveDirectorySymlink(templateDir); //throw FileError
+ sourcePath = getSymlinkTargetPath(templateDir); //throw FileError
}
catch (FileError&) {} //dereferencing a symbolic link usually fails if it is located on network drive or client is XP: NOT really an error...
}
@@ -1259,7 +1327,7 @@ void zen::copySymlink(const Zstring& sourceLink, const Zstring& targetLink, bool
const SysDllFun<CreateSymbolicLinkFunc> createSymbolicLink(L"kernel32.dll", "CreateSymbolicLinkW");
if (!createSymbolicLink)
- throw FileError(_("Error loading library function:") + "\n\"" + "CreateSymbolicLinkW" + "\"");
+ throw FileError(_("Error loading library function:") + L"\n\"" + L"CreateSymbolicLinkW" + L"\"");
if (!createSymbolicLink(targetLink.c_str(), //__in LPTSTR lpSymlinkFileName, - seems no long path prefix is required...
linkPath.c_str(), //__in LPTSTR lpTargetFileName,
@@ -1267,7 +1335,7 @@ void zen::copySymlink(const Zstring& sourceLink, const Zstring& targetLink, bool
#elif defined FFS_LINUX
if (::symlink(linkPath.c_str(), targetLink.c_str()) != 0)
#endif
- throw FileError(_("Error copying symbolic link:") + "\n\"" + sourceLink + "\" ->\n\"" + targetLink + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error copying symbolic link:") + L"\n\"" + sourceLink + L"\" ->\n\"" + targetLink + L"\"" + L"\n\n" + getLastErrorFormatted());
//allow only consistent objects to be created -> don't place before ::symlink, targetLink may already exist
zen::ScopeGuard guardNewDir = zen::makeGuard([&]()
@@ -1391,7 +1459,7 @@ DWORD CALLBACK copyCallbackInternal(
BY_HANDLE_FILE_INFORMATION fileInfo = {};
if (!::GetFileInformationByHandle(hSourceFile, &fileInfo))
{
- cbd.reportError(_("Error reading file attributes:") + "\n\"" + cbd.sourceFile_ + "\"" + "\n\n" + getLastErrorFormatted());
+ cbd.reportError(_("Error reading file attributes:") + L"\n\"" + cbd.sourceFile_ + L"\"" + L"\n\n" + getLastErrorFormatted());
return PROGRESS_CANCEL;
}
@@ -1410,7 +1478,7 @@ DWORD CALLBACK copyCallbackInternal(
NULL, //__out_opt LPFILETIME lpLastAccessTime,
NULL)) //__out_opt LPFILETIME lpLastWriteTime
{
- cbd.reportError(_("Error reading file attributes:") + "\n\"" + cbd.sourceFile_ + "\"" + "\n\n" + getLastErrorFormatted());
+ cbd.reportError(_("Error reading file attributes:") + L"\n\"" + cbd.sourceFile_ + L"\"" + L"\n\n" + getLastErrorFormatted());
return PROGRESS_CANCEL;
}
@@ -1419,7 +1487,7 @@ DWORD CALLBACK copyCallbackInternal(
NULL,
NULL))
{
- cbd.reportError(_("Error changing modification time:") + "\n\"" + cbd.targetFile_ + "\"" + "\n\n" + getLastErrorFormatted());
+ cbd.reportError(_("Error changing modification time:") + L"\n\"" + cbd.targetFile_ + L"\"" + L"\n\n" + getLastErrorFormatted());
return PROGRESS_CANCEL;
}
//##############################################################################
@@ -1498,8 +1566,8 @@ void rawCopyWinApi_sub(const Zstring& sourceFile,
//don't suppress "lastError == ERROR_REQUEST_ABORTED": a user aborted operation IS an error condition!
//assemble error message...
- std::wstring errorMessage = _("Error copying file:") + "\n\"" + sourceFile + "\" ->\n\"" + targetFile + "\"" +
- "\n\n" + getLastErrorFormatted(lastError);
+ std::wstring errorMessage = _("Error copying file:") + L"\n\"" + sourceFile + L"\" ->\n\"" + targetFile + L"\"" +
+ L"\n\n" + getLastErrorFormatted(lastError);
//if file is locked (try to) use Windows Volume Shadow Copy Service
if (lastError == ERROR_SHARING_VIOLATION ||
@@ -1946,7 +2014,7 @@ void rawCopyStream(const Zstring& sourceFile,
{
struct stat srcInfo = {};
if (::stat(sourceFile.c_str(), &srcInfo) != 0) //read file attributes from source directory
- throw FileError(_("Error reading file attributes:") + "\n\"" + sourceFile + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error reading file attributes:") + L"\n\"" + sourceFile + L"\"" + L"\n\n" + getLastErrorFormatted());
if (sourceAttr)
{
@@ -1960,7 +2028,7 @@ void rawCopyStream(const Zstring& sourceFile,
//set new "last write time"
if (::utime(targetFile.c_str(), &newTimes) != 0)
- throw FileError(_("Error changing modification time:") + "\n\"" + targetFile + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error changing modification time:") + L"\n\"" + targetFile + L"\"" + L"\n\n" + getLastErrorFormatted());
}
guardTarget.dismiss(); //target has been created successfully!
@@ -2055,6 +2123,17 @@ void zen::copyFile(const Zstring& sourceFile, //throw FileError, ErrorTargetPath
{
zen::ScopeGuard guardTargetFile = zen::makeGuard([&]() { removeFile(targetFile);});
copyObjectPermissions(sourceFile, targetFile, SYMLINK_FOLLOW); //throw FileError
+
+
+ /*
+ warn_static("fix!!")
+ try
+ {
+ copyObjectPermissions(targetFile, L"kfsdaj", SYMLINK_FOLLOW); //throw FileError
+ }
+ catch (...) {}
+ */
+
guardTargetFile.dismiss(); //target has been created successfully!
}
}
diff --git a/zen/file_handling.h b/zen/file_handling.h
index baa51516..02f3e532 100644
--- a/zen/file_handling.h
+++ b/zen/file_handling.h
@@ -7,7 +7,7 @@
#ifndef FILE_HANDLING_H_INCLUDED
#define FILE_HANDLING_H_INCLUDED
-#include "string.h"
+#include "zstring.h"
#include "file_error.h"
#include "int64.h"
diff --git a/zen/file_id.cpp b/zen/file_id.cpp
index c9f422ac..acbdcd7b 100644
--- a/zen/file_id.cpp
+++ b/zen/file_id.cpp
@@ -47,7 +47,6 @@ std::string zen::getFileID(const Zstring& filename)
return extractFileID(fileInfo);
#endif
- assert(false);
return std::string();
}
diff --git a/zen/file_io.cpp b/zen/file_io.cpp
index 6b3a5214..ba8ab955 100644
--- a/zen/file_io.cpp
+++ b/zen/file_io.cpp
@@ -8,6 +8,7 @@
#ifdef FFS_WIN
#include "long_path_prefix.h"
+
#elif defined FFS_LINUX
#include <cerrno>
#endif
@@ -61,7 +62,7 @@ FileInput::FileInput(const Zstring& filename) : //throw FileError, ErrorNotExis
{
const DWORD lastError = ::GetLastError();
- std::wstring errorMessage = _("Error opening file:") + "\n\"" + filename_ + "\"" + "\n\n" + zen::getLastErrorFormatted(lastError);
+ std::wstring errorMessage = _("Error opening file:") + L"\n\"" + filename_ + L"\"" + L"\n\n" + zen::getLastErrorFormatted(lastError);
if (lastError == ERROR_FILE_NOT_FOUND ||
lastError == ERROR_PATH_NOT_FOUND ||
@@ -78,7 +79,7 @@ FileInput::FileInput(const Zstring& filename) : //throw FileError, ErrorNotExis
{
const int lastError = errno;
- std::wstring errorMessage = _("Error opening file:") + "\n\"" + filename_ + "\"" + "\n\n" + zen::getLastErrorFormatted(lastError);
+ std::wstring errorMessage = _("Error opening file:") + L"\n\"" + filename_ + L"\"" + L"\n\n" + zen::getLastErrorFormatted(lastError);
if (lastError == ENOENT)
throw ErrorNotExisting(errorMessage);
@@ -112,7 +113,7 @@ size_t FileInput::read(void* buffer, size_t bytesToRead) //returns actual number
const size_t bytesRead = ::fread(buffer, 1, bytesToRead, fileHandle);
if (::ferror(fileHandle) != 0)
#endif
- throw FileError(_("Error reading file:") + "\n\"" + filename_ + "\"" + "\n\n" + zen::getLastErrorFormatted() + " (r)");
+ throw FileError(_("Error reading file:") + L"\n\"" + filename_ + L"\"" + L"\n\n" + zen::getLastErrorFormatted() + L" (r)");
#ifdef FFS_WIN
if (bytesRead < bytesToRead) //falsify only!
@@ -122,7 +123,7 @@ size_t FileInput::read(void* buffer, size_t bytesToRead) //returns actual number
eofReached = true;
if (bytesRead > bytesToRead)
- throw FileError(_("Error reading file:") + "\n\"" + filename_ + "\"" + "\n\n" + "buffer overflow");
+ throw FileError(_("Error reading file:") + L"\n\"" + filename_ + L"\"" + L"\n\n" + L"buffer overflow");
return bytesRead;
}
@@ -156,7 +157,7 @@ FileOutput::FileOutput(const Zstring& filename, AccessFlag access) : //throw Fil
if (fileHandle == INVALID_HANDLE_VALUE)
{
const DWORD lastError = ::GetLastError();
- std::wstring errorMessage = _("Error writing file:") + "\n\"" + filename_ + "\"" + "\n\n" + zen::getLastErrorFormatted(lastError);
+ std::wstring errorMessage = _("Error writing file:") + L"\n\"" + filename_ + L"\"" + L"\n\n" + zen::getLastErrorFormatted(lastError);
if (lastError == ERROR_FILE_EXISTS)
throw ErrorTargetExisting(errorMessage);
@@ -174,7 +175,7 @@ FileOutput::FileOutput(const Zstring& filename, AccessFlag access) : //throw Fil
if (fileHandle == NULL)
{
const int lastError = errno;
- std::wstring errorMessage = _("Error writing file:") + "\n\"" + filename_ + "\"" + "\n\n" + zen::getLastErrorFormatted(lastError);
+ std::wstring errorMessage = _("Error writing file:") + L"\n\"" + filename_ + L"\"" + L"\n\n" + zen::getLastErrorFormatted(lastError);
if (lastError == EEXIST)
throw ErrorTargetExisting(errorMessage);
@@ -210,8 +211,8 @@ void FileOutput::write(const void* buffer, size_t bytesToWrite) //throw FileErro
const size_t bytesWritten = ::fwrite(buffer, 1, bytesToWrite, fileHandle);
if (::ferror(fileHandle) != 0)
#endif
- throw FileError(_("Error writing file:") + "\n\"" + filename_ + "\"" + "\n\n" + zen::getLastErrorFormatted() + " (w)"); //w -> distinguish from fopen error message!
+ throw FileError(_("Error writing file:") + L"\n\"" + filename_ + L"\"" + L"\n\n" + zen::getLastErrorFormatted() + L" (w)"); //w -> distinguish from fopen error message!
if (bytesWritten != bytesToWrite) //must be fulfilled for synchronous writes!
- throw FileError(_("Error writing file:") + "\n\"" + filename_ + "\"" + "\n\n" + "incomplete write");
+ throw FileError(_("Error writing file:") + L"\n\"" + filename_ + L"\"" + L"\n\n" + L"incomplete write");
}
diff --git a/zen/file_io.h b/zen/file_io.h
index 26964ae8..7ce6d901 100644
--- a/zen/file_io.h
+++ b/zen/file_io.h
@@ -14,7 +14,7 @@
#include <cstdio>
#endif
-#include "string.h"
+#include "zstring.h"
#include "file_error.h"
namespace zen
diff --git a/zen/file_traverser.cpp b/zen/file_traverser.cpp
index 44b9d184..7a2df695 100644
--- a/zen/file_traverser.cpp
+++ b/zen/file_traverser.cpp
@@ -131,7 +131,7 @@ private:
{
if (level == 100) //notify endless recursion
{
- errorMsg = _("Endless loop when traversing directory:") + "\n\"" + directory + "\"";
+ errorMsg = _("Endless loop when traversing directory:") + L"\n\"" + directory + L"\"";
return false;
}
return true;
@@ -221,16 +221,9 @@ private:
}
else if (fileInfo.fileAttributes & FILE_ATTRIBUTE_DIRECTORY) //a directory... or symlink that needs to be followed (for directory symlinks this flag is set too!)
{
- const TraverseCallback::ReturnValDir rv = sink.onDir(shortName, fullName);
- switch (rv.returnCode)
- {
- case TraverseCallback::ReturnValDir::TRAVERSING_DIR_IGNORE:
- break;
-
- case TraverseCallback::ReturnValDir::TRAVERSING_DIR_CONTINUE:
- traverse<followSymlinks_>(fullName, *rv.subDirCb, level + 1);
- break;
- }
+ const std::shared_ptr<TraverseCallback> rv = sink.onDir(shortName, fullName);
+ if (rv)
+ traverse<followSymlinks_>(fullName, *rv, level + 1);
}
else //a file or symlink that is followed...
{
@@ -289,7 +282,7 @@ private:
//return true; //fine: empty directory
//else: we have a problem... report it:
- errorMsg = _("Error traversing directory:") + "\n\"" + directory + "\"" + "\n\n" + zen::getLastErrorFormatted();
+ errorMsg = _("Error traversing directory:") + L"\n\"" + directory + L"\"" + L"\n\n" + zen::getLastErrorFormatted();
return false;
}
return true;
@@ -322,7 +315,7 @@ private:
{
(void)e;
#ifndef NDEBUG //show broken symlink / access errors in debug build!
- sink.onError(e.msg());
+ sink.onError(e.toString());
#endif
}
@@ -332,16 +325,9 @@ private:
}
else if (fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //a directory... or symlink that needs to be followed (for directory symlinks this flag is set too!)
{
- const TraverseCallback::ReturnValDir rv = sink.onDir(shortName, fullName);
- switch (rv.returnCode)
- {
- case TraverseCallback::ReturnValDir::TRAVERSING_DIR_IGNORE:
- break;
-
- case TraverseCallback::ReturnValDir::TRAVERSING_DIR_CONTINUE:
- traverse(fullName, *rv.subDirCb, level + 1);
- break;
- }
+ const std::shared_ptr<TraverseCallback> rv = sink.onDir(shortName, fullName);
+ if (rv)
+ traverse(fullName, *rv, level + 1);
}
else //a file or symlink that is followed...
{
@@ -389,7 +375,7 @@ private:
return true;
//else we have a problem... report it:
- errorMsg = _("Error traversing directory:") + "\n\"" + directory + "\"" + "\n\n" + zen::getLastErrorFormatted();
+ errorMsg = _("Error traversing directory:") + L"\n\"" + directory + L"\"" + L"\n\n" + zen::getLastErrorFormatted();
return false;
}
@@ -407,7 +393,7 @@ private:
dirObj = ::opendir(directory.c_str()); //directory must NOT end with path separator, except "/"
if (dirObj == NULL)
{
- errorMsg = _("Error traversing directory:") + "\n\"" + directory + "\"" + "\n\n" + zen::getLastErrorFormatted();
+ errorMsg = _("Error traversing directory:") + L"\n\"" + directory + L"\"" + L"\n\n" + zen::getLastErrorFormatted();
return false;
}
return true;
@@ -428,7 +414,7 @@ private:
return true; //everything okay, not more items
//else: we have a problem... report it:
- errorMsg = _("Error traversing directory:") + "\n\"" + directory + "\"" + "\n\n" + zen::getLastErrorFormatted();
+ errorMsg = _("Error traversing directory:") + L"\n\"" + directory + L"\"" + L"\n\n" + zen::getLastErrorFormatted();
return false;
}
return true;
@@ -453,7 +439,7 @@ private:
{
if (::lstat(fullName.c_str(), &fileInfo) != 0) //lstat() does not resolve symlinks
{
- errorMsg = _("Error reading file attributes:") + "\n\"" + fullName + "\"" + "\n\n" + zen::getLastErrorFormatted();
+ errorMsg = _("Error reading file attributes:") + L"\n\"" + fullName + L"\"" + L"\n\n" + zen::getLastErrorFormatted();
return false;
}
return true;
@@ -482,7 +468,7 @@ private:
catch (FileError& e)
{
#ifndef NDEBUG //show broken symlink / access errors in debug build!
- sink.onError(e.msg());
+ sink.onError(e.toString());
#endif
}
@@ -497,16 +483,9 @@ private:
if (S_ISDIR(fileInfo.st_mode)) //a directory... cannot be a symlink on Linux in this case
{
- const TraverseCallback::ReturnValDir rv = sink.onDir(shortName, fullName);
- switch (rv.returnCode)
- {
- case TraverseCallback::ReturnValDir::TRAVERSING_DIR_IGNORE:
- break;
-
- case TraverseCallback::ReturnValDir::TRAVERSING_DIR_CONTINUE:
- traverse(fullName, *rv.subDirCb, level + 1);
- break;
- }
+ const std::shared_ptr<TraverseCallback> rv = sink.onDir(shortName, fullName);
+ if (rv)
+ traverse(fullName, *rv, level + 1);
}
else //a file... (or symlink; pathological!)
{
diff --git a/zen/file_traverser.h b/zen/file_traverser.h
index 4dbed9f9..3f4f47d5 100644
--- a/zen/file_traverser.h
+++ b/zen/file_traverser.h
@@ -7,8 +7,8 @@
#ifndef FILETRAVERSER_H_INCLUDED
#define FILETRAVERSER_H_INCLUDED
+#include <memory>
#include "zstring.h"
-#include "type_tools.h"
#include "int64.h"
//advanced file traverser returning metadata and hierarchical information on files and directories
@@ -28,24 +28,9 @@ public:
struct SymlinkInfo
{
- Int64 lastWriteTimeRaw; //number of seconds since Jan. 1st 1970 UTC
- Zstring targetPath; //may be empty if something goes wrong
- bool dirLink; //"true": point to dir; "false": point to file (or broken Link on Linux)
- };
-
- struct ReturnValDir
- {
- enum ReturnValueEnh
- {
- TRAVERSING_DIR_IGNORE,
- TRAVERSING_DIR_CONTINUE
- };
-
- ReturnValDir(Int2Type<TRAVERSING_DIR_IGNORE>) : returnCode(TRAVERSING_DIR_IGNORE), subDirCb(NULL) {}
- ReturnValDir(Int2Type<TRAVERSING_DIR_CONTINUE>, TraverseCallback& subDirCallback) : returnCode(TRAVERSING_DIR_CONTINUE), subDirCb(&subDirCallback) {}
-
- ReturnValueEnh returnCode;
- TraverseCallback* subDirCb;
+ Int64 lastWriteTimeRaw; //number of seconds since Jan. 1st 1970 UTC
+ Zstring targetPath; //may be empty if something goes wrong
+ bool dirLink; //"true": point to dir; "false": point to file (or broken Link on Linux)
};
enum HandleError
@@ -55,10 +40,11 @@ public:
};
//overwrite these virtual methods
- virtual void onFile (const Zchar* shortName, const Zstring& fullName, const FileInfo& details) = 0;
- virtual void onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) = 0;
- virtual ReturnValDir onDir (const Zchar* shortName, const Zstring& fullName) = 0;
- virtual HandleError onError (const std::wstring& errorText) = 0;
+ virtual std::shared_ptr<TraverseCallback> //nullptr: ignore directory, non-nullptr: traverse into
+ /**/ onDir (const Zchar* shortName, const Zstring& fullName) = 0;
+ virtual void onFile (const Zchar* shortName, const Zstring& fullName, const FileInfo& details) = 0;
+ virtual void onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) = 0;
+ virtual HandleError onError (const std::wstring& errorText) = 0;
};
diff --git a/zen/fixed_list.h b/zen/fixed_list.h
index c17ce0da..e80adb99 100644
--- a/zen/fixed_list.h
+++ b/zen/fixed_list.h
@@ -11,7 +11,7 @@
namespace zen
{
-//std::list(C++11) compatible class supporting inplace element construction for non-copyable/movable types
+//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
template <class T>
class FixedList
diff --git a/zen/int64.h b/zen/int64.h
index f7a7e800..e8a9cbe0 100644
--- a/zen/int64.h
+++ b/zen/int64.h
@@ -52,7 +52,7 @@ public:
Int64(const Int64& rhs) : value(rhs.value) {}
Int64(int rhs) : value(rhs) {} //ambiguity intentional for types other than these
Int64(long rhs) : value(rhs) {}
- Int64(Select<IsSameType<std::int64_t, long>::result, DummyClass, std::int64_t>::Result rhs) :
+ Int64(SelectIf<IsSameType<std::int64_t, long>::result, DummyClass, std::int64_t>::Result rhs) :
value(rhs) {} //-> std::int64_t equals long int on x64 Linux! Still we want implicit behavior for all other systems!
//unsafe explicit but checked conversion from arbitrary integer type
@@ -111,13 +111,13 @@ private:
std::int64_t value;
};
-inline Int64 operator+(const Int64& lhs, const Int64& rhs) { return Int64(lhs) += rhs; }
-inline Int64 operator-(const Int64& lhs, const Int64& rhs) { return Int64(lhs) -= rhs; }
-inline Int64 operator*(const Int64& lhs, const Int64& rhs) { return Int64(lhs) *= rhs; }
-inline Int64 operator/(const Int64& lhs, const Int64& rhs) { return Int64(lhs) /= rhs; }
-inline Int64 operator%(const Int64& lhs, const Int64& rhs) { return Int64(lhs) %= rhs; }
-inline Int64 operator&(const Int64& lhs, const Int64& rhs) { return Int64(lhs) &= rhs; }
-inline Int64 operator|(const Int64& lhs, const Int64& rhs) { return Int64(lhs) |= rhs; }
+inline Int64 operator+ (const Int64& lhs, const Int64& rhs) { return Int64(lhs) += rhs; }
+inline Int64 operator- (const Int64& lhs, const Int64& rhs) { return Int64(lhs) -= rhs; }
+inline Int64 operator* (const Int64& lhs, const Int64& rhs) { return Int64(lhs) *= rhs; }
+inline Int64 operator/ (const Int64& lhs, const Int64& rhs) { return Int64(lhs) /= rhs; }
+inline Int64 operator% (const Int64& lhs, const Int64& rhs) { return Int64(lhs) %= rhs; }
+inline Int64 operator& (const Int64& lhs, const Int64& rhs) { return Int64(lhs) &= rhs; }
+inline Int64 operator| (const Int64& lhs, const Int64& rhs) { return Int64(lhs) |= rhs; }
inline Int64 operator<<(const Int64& lhs, int rhs) { return Int64(lhs) <<= rhs; }
inline Int64 operator>>(const Int64& lhs, int rhs) { return Int64(lhs) >>= rhs; }
@@ -131,7 +131,7 @@ public:
UInt64(const UInt64& rhs) : value(rhs.value) {}
UInt64(unsigned int rhs) : value(rhs) {} //ambiguity intentional for types other than these
UInt64(unsigned long rhs) : value(rhs) {}
- UInt64(Select<IsSameType<std::uint64_t, unsigned long>::result, DummyClass, std::uint64_t>::Result rhs) :
+ UInt64(SelectIf<IsSameType<std::uint64_t, unsigned long>::result, DummyClass, std::uint64_t>::Result rhs) :
value(rhs) {} //-> std::uint64_t equals unsigned long int on x64 Linux! Still we want implicit behavior for all other systems!
//unsafe explicit but checked conversion from arbitrary integer type
@@ -190,13 +190,13 @@ private:
std::uint64_t value;
};
-inline UInt64 operator+(const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) += rhs; }
-inline UInt64 operator-(const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) -= rhs; }
-inline UInt64 operator*(const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) *= rhs; }
-inline UInt64 operator/(const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) /= rhs; }
-inline UInt64 operator%(const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) %= rhs; }
-inline UInt64 operator&(const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) &= rhs; }
-inline UInt64 operator|(const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) |= rhs; }
+inline UInt64 operator+ (const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) += rhs; }
+inline UInt64 operator- (const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) -= rhs; }
+inline UInt64 operator* (const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) *= rhs; }
+inline UInt64 operator/ (const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) /= rhs; }
+inline UInt64 operator% (const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) %= rhs; }
+inline UInt64 operator& (const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) &= rhs; }
+inline UInt64 operator| (const UInt64& lhs, const UInt64& rhs) { return UInt64(lhs) |= rhs; }
inline UInt64 operator<<(const UInt64& lhs, int rhs) { return UInt64(lhs) <<= rhs; }
inline UInt64 operator>>(const UInt64& lhs, int rhs) { return UInt64(lhs) >>= rhs; }
diff --git a/zen/notify_removal.cpp b/zen/notify_removal.cpp
index 805c1c09..8d8eeb90 100644
--- a/zen/notify_removal.cpp
+++ b/zen/notify_removal.cpp
@@ -96,7 +96,7 @@ MessageProvider::MessageProvider() :
windowHandle(NULL)
{
if (process == NULL)
- throw zen::FileError(std::wstring(L"Could not start monitoring window notifications:") + "\n\n" + getLastErrorFormatted() + " (GetModuleHandle)");
+ throw zen::FileError(std::wstring(L"Could not start monitoring window notifications:") + L"\n\n" + getLastErrorFormatted() + L" (GetModuleHandle)");
//register the main window class
WNDCLASS wc = {};
@@ -105,7 +105,7 @@ MessageProvider::MessageProvider() :
wc.lpszClassName = WINDOW_NAME;
if (::RegisterClass(&wc) == 0)
- throw zen::FileError(std::wstring(L"Could not start monitoring window notifications:") + "\n\n" + getLastErrorFormatted() + " (RegisterClass)");
+ throw zen::FileError(std::wstring(L"Could not start monitoring window notifications:") + L"\n\n" + getLastErrorFormatted() + L" (RegisterClass)");
zen::ScopeGuard guardClass = zen::makeGuard([&]() { ::UnregisterClass(WINDOW_NAME, process); });
@@ -123,7 +123,7 @@ MessageProvider::MessageProvider() :
process, //HINSTANCE hInstance,
NULL); //LPVOID lpParam
if (windowHandle == NULL)
- throw zen::FileError(std::wstring(L"Could not start monitoring window notifications:") + "\n\n" + getLastErrorFormatted() + " (CreateWindow)");
+ throw zen::FileError(std::wstring(L"Could not start monitoring window notifications:") + L"\n\n" + getLastErrorFormatted() + L" (CreateWindow)");
guardClass.dismiss();
}
@@ -170,7 +170,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(std::wstring(L"Could not register device removal notifications:") + "\n\n" + getLastErrorFormatted(lastError));
+ throw zen::FileError(std::wstring(L"Could not register device removal notifications:") + L"\n\n" + getLastErrorFormatted(lastError));
}
}
diff --git a/zen/perf.h b/zen/perf.h
index f9970d0a..688043a7 100644
--- a/zen/perf.h
+++ b/zen/perf.h
@@ -8,15 +8,9 @@
#define DEBUG_PERF_HEADER
#include <sstream>
+#include "deprecate.h"
#include "win.h" //includes "windows.h"
-#ifdef __MINGW32__
-#define DEPRECATED(x) x __attribute__ ((deprecated))
-#elif defined _MSC_VER
-#define DEPRECATED(x) __declspec(deprecated) x
-#endif
-
-
//two macros for quick performance measurements
#define PERF_START CpuTimer perfTest;
#define PERF_STOP perfTest.showResult();
@@ -26,7 +20,8 @@ class CpuTimer
public:
class TimerError {};
- DEPRECATED(CpuTimer()) : frequency(), startTime(), resultShown(false)
+ ZEN_DEPRECATE
+ CpuTimer() : frequency(), startTime(), resultShown(false)
{
SetThreadAffinity dummy;
if (!::QueryPerformanceFrequency(&frequency)) throw TimerError();
diff --git a/zen/privilege.cpp b/zen/privilege.cpp
index 495b1254..809202b7 100644
--- a/zen/privilege.cpp
+++ b/zen/privilege.cpp
@@ -17,15 +17,14 @@ bool Privileges::privilegeIsActive(LPCTSTR privilege) //throw FileError
if (!::OpenProcessToken(::GetCurrentProcess(), //__in HANDLE ProcessHandle,
TOKEN_QUERY, //__in DWORD DesiredAccess,
&hToken)) //__out PHANDLE TokenHandle
- throw FileError(_("Error setting privilege:") + " \"" + privilege + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error setting privilege:") + L" \"" + privilege + L"\"" + L"\n\n" + getLastErrorFormatted());
ZEN_ON_BLOCK_EXIT(::CloseHandle(hToken));
LUID luid = {};
- if (!::LookupPrivilegeValue(
- NULL, //__in_opt LPCTSTR lpSystemName,
- privilege, //__in LPCTSTR lpName,
- &luid )) //__out PLUID lpLuid
- throw FileError(_("Error setting privilege:") + " \"" + privilege + "\"" + "\n\n" + getLastErrorFormatted());
+ if (!::LookupPrivilegeValue(NULL, //__in_opt LPCTSTR lpSystemName,
+ privilege, //__in LPCTSTR lpName,
+ &luid )) //__out PLUID lpLuid
+ throw FileError(_("Error setting privilege:") + L" \"" + privilege + L"\"" + L"\n\n" + getLastErrorFormatted());
PRIVILEGE_SET priv = {};
priv.PrivilegeCount = 1;
@@ -34,11 +33,10 @@ bool Privileges::privilegeIsActive(LPCTSTR privilege) //throw FileError
priv.Privilege[0].Attributes = SE_PRIVILEGE_ENABLED;
BOOL alreadyGranted = FALSE;
- if (!::PrivilegeCheck(
- hToken, //__in HANDLE ClientToken,
- &priv, //__inout PPRIVILEGE_SET RequiredPrivileges,
- &alreadyGranted)) //__out LPBOOL pfResult
- throw FileError(_("Error setting privilege:") + " \"" + privilege + "\"" + "\n\n" + getLastErrorFormatted());
+ if (!::PrivilegeCheck(hToken, //__in HANDLE ClientToken,
+ &priv, //__inout PPRIVILEGE_SET RequiredPrivileges,
+ &alreadyGranted)) //__out LPBOOL pfResult
+ throw FileError(_("Error setting privilege:") + L" \"" + privilege + L"\"" + L"\n\n" + getLastErrorFormatted());
return alreadyGranted == TRUE;
}
@@ -50,15 +48,14 @@ void Privileges::setPrivilege(LPCTSTR privilege, bool enable) //throw FileError
if (!::OpenProcessToken(::GetCurrentProcess(), //__in HANDLE ProcessHandle,
TOKEN_ADJUST_PRIVILEGES, //__in DWORD DesiredAccess,
&hToken)) //__out PHANDLE TokenHandle
- throw FileError(_("Error setting privilege:") + " \"" + privilege + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error setting privilege:") + L" \"" + privilege + L"\"" + L"\n\n" + getLastErrorFormatted());
ZEN_ON_BLOCK_EXIT(::CloseHandle(hToken));
LUID luid = {};
- if (!::LookupPrivilegeValue(
- NULL, //__in_opt LPCTSTR lpSystemName,
- privilege, //__in LPCTSTR lpName,
- &luid )) //__out PLUID lpLuid
- throw FileError(_("Error setting privilege:") + " \"" + privilege + "\"" + "\n\n" + getLastErrorFormatted());
+ if (!::LookupPrivilegeValue(NULL, //__in_opt LPCTSTR lpSystemName,
+ privilege, //__in LPCTSTR lpName,
+ &luid )) //__out PLUID lpLuid
+ throw FileError(_("Error setting privilege:") + L" \"" + privilege + L"\"" + L"\n\n" + getLastErrorFormatted());
TOKEN_PRIVILEGES tp = {};
tp.PrivilegeCount = 1;
@@ -72,8 +69,8 @@ void Privileges::setPrivilege(LPCTSTR privilege, bool enable) //throw FileError
0, //__in DWORD BufferLength,
NULL, //__out_opt PTOKEN_PRIVILEGES PreviousState,
NULL)) //__out_opt PDWORD ReturnLength
- throw FileError(_("Error setting privilege:") + " \"" + privilege + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error setting privilege:") + L" \"" + privilege + L"\"" + L"\n\n" + getLastErrorFormatted());
if (::GetLastError() == ERROR_NOT_ALL_ASSIGNED) //check although previous function returned with success!
- throw FileError(_("Error setting privilege:") + " \"" + privilege + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error setting privilege:") + L" \"" + privilege + L"\"" + L"\n\n" + getLastErrorFormatted());
}
diff --git a/zen/process_status.h b/zen/process_status.h
new file mode 100644
index 00000000..cc5825aa
--- /dev/null
+++ b/zen/process_status.h
@@ -0,0 +1,33 @@
+#ifndef PREVENTSTANDBY_H_INCLUDED
+#define PREVENTSTANDBY_H_INCLUDED
+
+#ifdef FFS_WIN
+#include "win.h" //includes "windows.h"
+#endif
+
+namespace zen
+{
+struct DisableStandby //signal a "busy" state to the operating system
+{
+#ifdef FFS_WIN
+ DisableStandby() { ::SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED /* | ES_AWAYMODE_REQUIRED*/ ); }
+ ~DisableStandby() { ::SetThreadExecutionState(ES_CONTINUOUS); }
+#endif
+};
+
+
+#ifndef PROCESS_MODE_BACKGROUND_BEGIN
+#define PROCESS_MODE_BACKGROUND_BEGIN 0x00100000 // Windows Server 2003 and Windows XP/2000: This value is not supported!
+#define PROCESS_MODE_BACKGROUND_END 0x00200000 //
+#endif
+
+struct ScheduleForBackgroundProcessing //lower CPU and file I/O priorities
+{
+#ifdef FFS_WIN
+ ScheduleForBackgroundProcessing() { ::SetPriorityClass(::GetCurrentProcess(), PROCESS_MODE_BACKGROUND_BEGIN); }
+ ~ScheduleForBackgroundProcessing() { ::SetPriorityClass(::GetCurrentProcess(), PROCESS_MODE_BACKGROUND_END); }
+#endif
+};
+}
+
+#endif // PREVENTSTANDBY_H_INCLUDED
diff --git a/zen/stl_tools.h b/zen/stl_tools.h
index 6cfe35f8..1707a1eb 100644
--- a/zen/stl_tools.h
+++ b/zen/stl_tools.h
@@ -1,16 +1,68 @@
// **************************************************************************
-// * 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) 2008-2011 ZenJu (zhnmju123 AT gmx.de) *
+// * This file is part of the zenXML project. It is distributed under the *
+// * Boost Software License, Version 1.0. See accompanying file *
+// * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt. *
+// * Copyright (C) 2011 ZenJu (zhnmju123 AT gmx.de) *
// **************************************************************************
#ifndef STL_TOOLS_HEADER_84567184321434
#define STL_TOOLS_HEADER_84567184321434
-//no need to drag in any STL includes :)
+//no need to drag in any STL includes
+
+//enhancements for <algorithm>
namespace zen
{
+//idomatic remove selected elements from container
+template <class V, class Predicate>
+void vector_remove_if(V& vec, Predicate p);
+
+template <class S, class Predicate>
+void set_remove_if(S& set, Predicate p);
+
+template <class M, class Predicate>
+void map_remove_if(M& map, Predicate p);
+
+//binary search returning an iterator
+template <class ForwardIterator, class T, typename Compare>
+ForwardIterator binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp);
+
+template<class BidirectionalIterator, class T>
+BidirectionalIterator find_last(BidirectionalIterator first, BidirectionalIterator last, const T& value);
+
+//replacement for std::find_end taking advantage of bidirectional iterators (and giving the algorithm a reasonable name)
+template<class BidirectionalIterator1, class BidirectionalIterator2>
+BidirectionalIterator1 search_last(BidirectionalIterator1 first1, BidirectionalIterator1 last1,
+ BidirectionalIterator2 first2, BidirectionalIterator2 last2);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//######################## implementation ########################
+
template <class V, class Predicate> inline
void vector_remove_if(V& vec, Predicate p)
{
@@ -33,9 +85,8 @@ template <class M, class Predicate> inline
void map_remove_if(M& map, Predicate p) { set_remove_if(map, p); }
-// binary search returning an iterator
template <class ForwardIterator, class T, typename Compare> inline
-ForwardIterator custom_binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp)
+ForwardIterator binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp)
{
first = std::lower_bound(first, last, value, comp);
if (first != last && !comp(value, *first))
@@ -43,7 +94,48 @@ ForwardIterator custom_binary_search(ForwardIterator first, ForwardIterator last
else
return last;
}
+
+
+template<class BidirectionalIterator, class T> inline
+BidirectionalIterator find_last(const BidirectionalIterator first, BidirectionalIterator last, const T& value)
+{
+ const BidirectionalIterator iterNotFound = last;
+ do
+ {
+ if (last == first)
+ return iterNotFound;
+ --last;
+ }
+ while (!(*last == value)); //loop over "last": 1. check 2. decrement 3. evaluate
+ return last;
}
-#endif //STL_TOOLS_HEADER_84567184321434 \ No newline at end of file
+template<class BidirectionalIterator1, class BidirectionalIterator2> inline
+BidirectionalIterator1 search_last(const BidirectionalIterator1 first1, BidirectionalIterator1 last1,
+ const BidirectionalIterator2 first2, BidirectionalIterator2 last2)
+{
+ if (first1 == last1 ||
+ first2 == last2)
+ return last1;
+
+ int diff = static_cast<int>(std::distance(first1, last1)) -
+ static_cast<int>(std::distance(first2, last2));
+
+ const BidirectionalIterator1 iterNotFound = last1;
+ --last2;
+
+ while (diff-- >= 0) //loop over "last1": 1. check 2. decrement 3. evaluate
+ {
+ --last1;
+
+ BidirectionalIterator1 iter1 = last1;
+ for (BidirectionalIterator2 iter2 = last2; *iter1 == *iter2; --iter1, --iter2)
+ if (iter2 == first2)
+ return iter1;
+ }
+ return iterNotFound;
+}
+}
+
+#endif //STL_TOOLS_HEADER_84567184321434
diff --git a/zen/string_base.h b/zen/string_base.h
index 914e0434..ffc2f839 100644
--- a/zen/string_base.h
+++ b/zen/string_base.h
@@ -12,9 +12,11 @@
#include "string_tools.h"
#include <boost/detail/atomic_count.hpp>
-//Zbase - a policy based string class
+//Zbase - a policy based string class optimizing performance and genericity
+namespace zen
+{
/*
Allocator Policy:
-----------------
@@ -28,7 +30,7 @@ public:
//::operator new/ ::operator delete show same performance characterisics like malloc()/free()!
static void* allocate(size_t size) { return ::operator new(size); } //throw (std::bad_alloc)
static void deallocate(void* ptr) { ::operator delete(ptr); }
- static size_t calcCapacity(size_t length) { return std::max<size_t>(16, length + length / 2); }
+ static size_t calcCapacity(size_t length) { return std::max<size_t>(16, length + length / 2); } //any growth rate should not exceed golden ratio: 1.618033989
};
@@ -43,54 +45,54 @@ public:
/*
Storage Policy:
---------------
-template <typename T, //Character Type
- class AP> //Allocator Policy
-
- T* create(size_t size)
- T* create(size_t size, size_t minCapacity)
- T* clone(T* ptr)
- void destroy(T* ptr)
- bool canWrite(const T* ptr, size_t minCapacity) //needs to be checked before writing to "ptr"
- size_t length(const T* ptr)
- void setLength(T* ptr, size_t newLength)
+template <typename Char, //Character Type
+ class AP> //Allocator Policy
+
+ Char* create(size_t size)
+ Char* create(size_t size, size_t minCapacity)
+ Char* clone(Char* ptr)
+ void destroy(Char* ptr)
+ bool canWrite(const Char* ptr, size_t minCapacity) //needs to be checked before writing to "ptr"
+ size_t length(const Char* ptr)
+ void setLength(Char* ptr, size_t newLength)
*/
-template <typename T, //Character Type
- class AP> //Allocator Policy
+template <typename Char, //Character Type
+ class AP> //Allocator Policy
class StorageDeepCopy : public AP
{
protected:
~StorageDeepCopy() {}
- static T* create(size_t size) { return create(size, size); }
- static T* create(size_t size, size_t minCapacity)
+ static Char* create(size_t size) { return create(size, size); }
+ static Char* create(size_t size, size_t minCapacity)
{
const size_t newCapacity = AP::calcCapacity(minCapacity);
assert(newCapacity >= minCapacity);
assert(minCapacity >= size);
- Descriptor* const newDescr = static_cast<Descriptor*>(AP::allocate(sizeof(Descriptor) + (newCapacity + 1) * sizeof(T)));
+ Descriptor* const newDescr = static_cast<Descriptor*>(AP::allocate(sizeof(Descriptor) + (newCapacity + 1) * sizeof(Char)));
newDescr->length = size;
newDescr->capacity = newCapacity;
- return reinterpret_cast<T*>(newDescr + 1);
+ return reinterpret_cast<Char*>(newDescr + 1);
}
- static T* clone(T* ptr)
+ static Char* clone(Char* ptr)
{
- T* newData = create(length(ptr));
+ Char* newData = create(length(ptr));
std::copy(ptr, ptr + length(ptr) + 1, newData);
return newData;
}
- static void destroy(T* ptr) { AP::deallocate(descr(ptr)); }
+ static void destroy(Char* ptr) { AP::deallocate(descr(ptr)); }
//this needs to be checked before writing to "ptr"
- static bool canWrite(const T* ptr, size_t minCapacity) { return minCapacity <= descr(ptr)->capacity; }
- static size_t length(const T* ptr) { return descr(ptr)->length; }
+ static bool canWrite(const Char* ptr, size_t minCapacity) { return minCapacity <= descr(ptr)->capacity; }
+ static size_t length(const Char* ptr) { return descr(ptr)->length; }
- static void setLength(T* ptr, size_t newLength)
+ static void setLength(Char* ptr, size_t newLength)
{
assert(canWrite(ptr, newLength));
descr(ptr)->length = newLength;
@@ -103,43 +105,43 @@ private:
size_t capacity; //allocated size without null-termination
};
- static Descriptor* descr( T* ptr) { return reinterpret_cast< Descriptor*>(ptr) - 1; }
- static const Descriptor* descr(const T* ptr) { return reinterpret_cast<const Descriptor*>(ptr) - 1; }
+ static Descriptor* descr( Char* ptr) { return reinterpret_cast< Descriptor*>(ptr) - 1; }
+ static const Descriptor* descr(const Char* ptr) { return reinterpret_cast<const Descriptor*>(ptr) - 1; }
};
-template <typename T, //Character Type
- class AP> //Allocator Policy
+template <typename Char, //Character Type
+ class AP> //Allocator Policy
class StorageRefCountThreadSafe : public AP
{
protected:
~StorageRefCountThreadSafe() {}
- static T* create(size_t size)
+ static Char* create(size_t size)
{
return create(size, size);
}
- static T* create(size_t size, size_t minCapacity)
+ static Char* create(size_t size, size_t minCapacity)
{
const size_t newCapacity = AP::calcCapacity(minCapacity);
assert(newCapacity >= minCapacity);
assert(minCapacity >= size);
- Descriptor* const newDescr = static_cast<Descriptor*>(AP::allocate(sizeof(Descriptor) + (newCapacity + 1) * sizeof(T)));
+ Descriptor* const newDescr = static_cast<Descriptor*>(AP::allocate(sizeof(Descriptor) + (newCapacity + 1) * sizeof(Char)));
new (newDescr) Descriptor(1, size, newCapacity);
- return reinterpret_cast<T*>(newDescr + 1);
+ return reinterpret_cast<Char*>(newDescr + 1);
}
- static T* clone(T* ptr)
+ static Char* clone(Char* ptr)
{
assert(descr(ptr)->refCount > 0);
++descr(ptr)->refCount;
return ptr;
}
- static void destroy(T* ptr)
+ static void destroy(Char* ptr)
{
if (--descr(ptr)->refCount == 0)
{
@@ -148,18 +150,18 @@ protected:
}
}
- static bool canWrite(const T* ptr, size_t minCapacity) //needs to be checked before writing to "ptr"
+ static bool canWrite(const Char* ptr, size_t minCapacity) //needs to be checked before writing to "ptr"
{
assert(descr(ptr)->refCount > 0);
return descr(ptr)->refCount == 1 && minCapacity <= descr(ptr)->capacity;
}
- static size_t length(const T* ptr)
+ static size_t length(const Char* ptr)
{
return descr(ptr)->length;
}
- static void setLength(T* ptr, size_t newLength)
+ static void setLength(Char* ptr, size_t newLength)
{
assert(canWrite(ptr, newLength));
descr(ptr)->length = newLength;
@@ -175,97 +177,99 @@ private:
size_t capacity; //allocated size without null-termination
};
- static Descriptor* descr( T* ptr) { return reinterpret_cast< Descriptor*>(ptr) - 1; }
- static const Descriptor* descr(const T* ptr) { return reinterpret_cast<const Descriptor*>(ptr) - 1; }
+ static Descriptor* descr( Char* ptr) { return reinterpret_cast< Descriptor*>(ptr) - 1; }
+ static const Descriptor* descr(const Char* ptr) { return reinterpret_cast<const Descriptor*>(ptr) - 1; }
};
//################################################################################################################################################################
//perf note: interstingly StorageDeepCopy and StorageRefCountThreadSafe show same performance in FFS comparison
-template <class T, //Character Type
+template <class Char, //Character Type
template <class, class> class SP = StorageRefCountThreadSafe, //Storage Policy
- class AP = AllocatorOptimalSpeed> //Allocator Policy
-class Zbase : public SP<T, AP>
+ class AP = AllocatorOptimalSpeed> //Allocator Policy
+class Zbase : public SP<Char, AP>
{
public:
Zbase();
- Zbase(const T* source); //implicit conversion from a C-string
- Zbase(const T* source, size_t length);
+ Zbase(const Char* source); //implicit conversion from a C-string
+ Zbase(const Char* source, size_t length);
Zbase(const Zbase& source);
Zbase(Zbase&& tmp);
- explicit Zbase(T source); //dangerous if implicit: T buffer[]; Zbase name = buffer; ups...
+ explicit Zbase(Char source); //dangerous if implicit: Char buffer[]; Zbase name = buffer; ups...
//allow explicit construction from different string type, prevent ambiguity via SFINAE
template <class S> explicit Zbase(const S& other, typename S::value_type = 0);
~Zbase();
- //operator const T* () const; //NO implicit conversion to a C-string!! Many problems... one of them: if we forget to provide operator overloads, it'll just work with a T*...
+ //operator const Char* () const; //NO implicit conversion to a C-string!! Many problems... one of them: if we forget to provide operator overloads, it'll just work with a Char*...
//STL accessors
- typedef T* iterator;
- typedef const T* const_iterator;
- typedef T& reference;
- typedef const T& const_reference;
- typedef T value_type;
- const T* begin() const;
- const T* end() const;
- T* begin();
- T* end();
+ typedef Char* iterator;
+ typedef const Char* const_iterator;
+ typedef Char& reference;
+ typedef const Char& const_reference;
+ typedef Char value_type;
+ const Char* begin() const;
+ const Char* end() const;
+ Char* begin();
+ Char* end();
//std::string functions
size_t length() const;
size_t size() const;
- const T* c_str() const; //C-string format with NULL-termination
- const T* data() const; //internal representation, NULL-termination not guaranteed
- const T operator[](size_t pos) const;
+ const Char* c_str() const; //C-string format with NULL-termination
+ const Char* data() const; //internal representation, NULL-termination not guaranteed
+ const Char operator[](size_t pos) const;
bool empty() const;
void clear();
- size_t find(const Zbase& str, size_t pos = 0) const; //
- size_t find(const T* str, size_t pos = 0) const; //returns "npos" if not found
- size_t find(T ch, size_t pos = 0) const; //
- size_t rfind(T ch, size_t pos = npos) const; //
- size_t rfind(const T* str, size_t pos = npos) const; //
+ size_t find (const Zbase& str, size_t pos = 0) const; //
+ size_t find (const Char* str, size_t pos = 0) const; //returns "npos" if not found
+ size_t find (Char ch, size_t pos = 0) const; //
+ size_t rfind(Char ch, size_t pos = npos) const; //
+ size_t rfind(const Char* str, size_t pos = npos) const; //
Zbase& replace(size_t pos1, size_t n1, const Zbase& str);
void reserve(size_t minCapacity);
- Zbase& assign(const T* source, size_t len);
- void resize(size_t newSize, T fillChar = 0);
+ Zbase& assign(const Char* source, size_t len);
+ Zbase& append(const Char* source, size_t len);
+ void resize(size_t newSize, Char fillChar = 0);
void swap(Zbase& other);
- void push_back(T val); //STL access
+ void push_back(Char val); //STL access
- Zbase& operator=(const Zbase& source);
- Zbase& operator=(Zbase&& tmp);
- Zbase& operator=(const T* source);
- Zbase& operator=(T source);
+ Zbase& operator=(Zbase source);
+ Zbase& operator=(const Char* source);
+ Zbase& operator=(Char source);
Zbase& operator+=(const Zbase& other);
- Zbase& operator+=(const T* other);
- Zbase& operator+=(T ch);
+ Zbase& operator+=(const Char* other);
+ Zbase& operator+=(Char ch);
static const size_t npos = static_cast<size_t>(-1);
private:
- Zbase(int); //detect usage errors
- Zbase& operator=(int); //
+ Zbase(int); //
+ Zbase& operator=(int); //detect usage errors
+ Zbase& operator+=(int); //
+ void push_back(int); //
- T* rawStr;
+ Char* rawStr;
};
-template <class T, template <class, class> class SP, class AP> bool operator==(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs);
-template <class T, template <class, class> class SP, class AP> bool operator==(const Zbase<T, SP, AP>& lhs, const T* rhs);
-template <class T, template <class, class> class SP, class AP> bool operator==(const T* lhs, const Zbase<T, SP, AP>& rhs);
+template <class Char, template <class, class> class SP, class AP> bool operator==(const Zbase<Char, SP, AP>& lhs, const Zbase<Char, SP, AP>& rhs);
+template <class Char, template <class, class> class SP, class AP> bool operator==(const Zbase<Char, SP, AP>& lhs, const Char* rhs);
+template <class Char, template <class, class> class SP, class AP> bool operator==(const Char* lhs, const Zbase<Char, SP, AP>& rhs);
-template <class T, template <class, class> class SP, class AP> bool operator!=(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs);
-template <class T, template <class, class> class SP, class AP> bool operator!=(const Zbase<T, SP, AP>& lhs, const T* rhs);
-template <class T, template <class, class> class SP, class AP> bool operator!=(const T* lhs, const Zbase<T, SP, AP>& rhs);
+template <class Char, template <class, class> class SP, class AP> bool operator!=(const Zbase<Char, SP, AP>& lhs, const Zbase<Char, SP, AP>& rhs);
+template <class Char, template <class, class> class SP, class AP> bool operator!=(const Zbase<Char, SP, AP>& lhs, const Char* rhs);
+template <class Char, template <class, class> class SP, class AP> bool operator!=(const Char* lhs, const Zbase<Char, SP, AP>& rhs);
-template <class T, template <class, class> class SP, class AP> bool operator< (const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs);
-template <class T, template <class, class> class SP, class AP> bool operator< (const Zbase<T, SP, AP>& lhs, const T* rhs);
-template <class T, template <class, class> class SP, class AP> bool operator< (const T* lhs, const Zbase<T, SP, AP>& rhs);
+template <class Char, template <class, class> class SP, class AP> bool operator< (const Zbase<Char, SP, AP>& lhs, const Zbase<Char, SP, AP>& rhs);
+template <class Char, template <class, class> class SP, class AP> bool operator< (const Zbase<Char, SP, AP>& lhs, const Char* rhs);
+template <class Char, template <class, class> class SP, class AP> bool operator< (const Char* lhs, const Zbase<Char, SP, AP>& rhs);
-template <class T, template <class, class> class SP, class AP> const Zbase<T, SP, AP> operator+(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs);
-template <class T, template <class, class> class SP, class AP> const Zbase<T, SP, AP> operator+(const Zbase<T, SP, AP>& lhs, const T* rhs);
-template <class T, template <class, class> class SP, class AP> const Zbase<T, SP, AP> operator+(const T* lhs, const Zbase<T, SP, AP>& rhs);
-template <class T, template <class, class> class SP, class AP> const Zbase<T, SP, AP> operator+( T lhs, const Zbase<T, SP, AP>& rhs);
-template <class T, template <class, class> class SP, class AP> const Zbase<T, SP, AP> operator+(const Zbase<T, SP, AP>& lhs, T rhs);
+template <class Char, template <class, class> class SP, class AP> const Zbase<Char, SP, AP> operator+(const Zbase<Char, SP, AP>& lhs, const Zbase<Char, SP, AP>& rhs);
+template <class Char, template <class, class> class SP, class AP> const Zbase<Char, SP, AP> operator+(const Zbase<Char, SP, AP>& lhs, const Char* rhs);
+template <class Char, template <class, class> class SP, class AP> const Zbase<Char, SP, AP> operator+(const Char* lhs, const Zbase<Char, SP, AP>& rhs);
+template <class Char, template <class, class> class SP, class AP> const Zbase<Char, SP, AP> operator+( Char lhs, const Zbase<Char, SP, AP>& rhs);
+template <class Char, template <class, class> class SP, class AP> const Zbase<Char, SP, AP> operator+(const Zbase<Char, SP, AP>& lhs, Char rhs);
@@ -304,8 +308,8 @@ template <class T, template <class, class> class SP, class AP> const Zbase<T, SP
//################################# inline implementation ########################################
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>::Zbase()
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>::Zbase()
{
//resist the temptation to avoid this allocation by referening a static global: NO performance advantage, MT issues!
rawStr = this->create(0);
@@ -313,8 +317,8 @@ Zbase<T, SP, AP>::Zbase()
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>::Zbase(T source)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>::Zbase(Char source)
{
rawStr = this->create(1);
rawStr[0] = source;
@@ -322,17 +326,17 @@ Zbase<T, SP, AP>::Zbase(T source)
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>::Zbase(const T* source)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>::Zbase(const Char* source)
{
- const size_t sourceLen = zen::strLength(source);
+ const size_t sourceLen = strLength(source);
rawStr = this->create(sourceLen);
std::copy(source, source + sourceLen + 1, rawStr); //include null-termination
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>::Zbase(const T* source, size_t sourceLen)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>::Zbase(const Char* source, size_t sourceLen)
{
rawStr = this->create(sourceLen);
std::copy(source, source + sourceLen, rawStr);
@@ -340,23 +344,23 @@ Zbase<T, SP, AP>::Zbase(const T* source, size_t sourceLen)
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>::Zbase(const Zbase<T, SP, AP>& source)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>::Zbase(const Zbase<Char, SP, AP>& source)
{
rawStr = this->clone(source.rawStr);
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>::Zbase(Zbase<T, SP, AP>&& tmp)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>::Zbase(Zbase<Char, SP, AP>&& tmp)
{
rawStr = this->clone(tmp.rawStr); //for a ref-counting string there probably isn't a faster way, even with r-value references
}
-template <class T, template <class, class> class SP, class AP>
+template <class Char, template <class, class> class SP, class AP>
template <class S> inline
-Zbase<T, SP, AP>::Zbase(const S& other, typename S::value_type)
+Zbase<Char, SP, AP>::Zbase(const S& other, typename S::value_type)
{
const size_t sourceLen = other.size();
rawStr = this->create(sourceLen);
@@ -365,80 +369,73 @@ Zbase<T, SP, AP>::Zbase(const S& other, typename S::value_type)
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>::~Zbase()
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>::~Zbase()
{
this->destroy(rawStr);
}
-template <class T, template <class, class> class SP, class AP> inline
-size_t Zbase<T, SP, AP>::find(const Zbase& str, size_t pos) const
+template <class Char, template <class, class> class SP, class AP> inline
+size_t Zbase<Char, SP, AP>::find(const Zbase& str, size_t pos) const
{
assert(pos <= length());
- const T* thisEnd = end(); //respect embedded 0
- const T* iter = std::search(begin() + pos, thisEnd,
- str.begin(), str.end());
+ const Char* thisEnd = end(); //respect embedded 0
+ const Char* iter = std::search(begin() + pos, thisEnd,
+ str.begin(), str.end());
return iter == thisEnd ? npos : iter - begin();
}
-template <class T, template <class, class> class SP, class AP> inline
-size_t Zbase<T, SP, AP>::find(const T* str, size_t pos) const
+template <class Char, template <class, class> class SP, class AP> inline
+size_t Zbase<Char, SP, AP>::find(const Char* str, size_t pos) const
{
assert(pos <= length());
- const T* thisEnd = end(); //respect embedded 0
- const T* iter = std::search(begin() + pos, thisEnd,
- str, str + zen::strLength(str));
+ const Char* thisEnd = end(); //respect embedded 0
+ const Char* iter = std::search(begin() + pos, thisEnd,
+ str, str + strLength(str));
return iter == thisEnd ? npos : iter - begin();
}
-template <class T, template <class, class> class SP, class AP> inline
-size_t Zbase<T, SP, AP>::find(T ch, size_t pos) const
+template <class Char, template <class, class> class SP, class AP> inline
+size_t Zbase<Char, SP, AP>::find(Char ch, size_t pos) const
{
assert(pos <= length());
- const T* thisEnd = end();
- const T* iter = std::find(begin() + pos, thisEnd, ch); //respect embedded 0
+ const Char* thisEnd = end();
+ const Char* iter = std::find(begin() + pos, thisEnd, ch); //respect embedded 0
return iter == thisEnd ? npos : iter - begin();
}
-template <class T, template <class, class> class SP, class AP> inline
-size_t Zbase<T, SP, AP>::rfind(T ch, size_t pos) const
+template <class Char, template <class, class> class SP, class AP> inline
+size_t Zbase<Char, SP, AP>::rfind(Char ch, size_t pos) const
{
assert(pos == npos || pos <= length());
- const size_t thisLen = length();
- if (thisLen == 0) return npos;
- pos = std::min(thisLen - 1, pos); //handle "npos" and "pos == length()" implicitly
+ const Char* currEnd = pos == npos ? end() : begin() + std::min(pos + 1, length());
- while (rawStr[pos] != ch) //pos points to last char of the string
- {
- if (pos == 0)
- return npos;
- --pos;
- }
- return pos;
+ const Char* iter = find_last(begin(), currEnd, ch);
+ return iter == currEnd ? npos : iter - begin();
}
-template <class T, template <class, class> class SP, class AP> inline
-size_t Zbase<T, SP, AP>::rfind(const T* str, size_t pos) const
+template <class Char, template <class, class> class SP, class AP> inline
+size_t Zbase<Char, SP, AP>::rfind(const Char* str, size_t pos) const
{
assert(pos == npos || pos <= length());
- const size_t strLen = zen::strLength(str);
- const T* currEnd = pos == npos ? end() : begin() + std::min(pos + strLen, length());
+ const size_t strLen = strLength(str);
+ const Char* currEnd = pos == npos ? end() : begin() + std::min(pos + strLen, length());
- const T* iter = std::find_end(begin(), currEnd,
- str, str + strLen);
+ const Char* iter = search_last(begin(), currEnd,
+ str, str + strLen);
return iter == currEnd ? npos : iter - begin();
}
-template <class T, template <class, class> class SP, class AP>
-Zbase<T, SP, AP>& Zbase<T, SP, AP>::replace(size_t pos1, size_t n1, const Zbase& str)
+template <class Char, template <class, class> class SP, class AP>
+Zbase<Char, SP, AP>& Zbase<Char, SP, AP>::replace(size_t pos1, size_t n1, const Zbase& str)
{
assert(str.data() < rawStr || rawStr + length() < str.data()); //str mustn't point to data in this string
assert(pos1 + n1 <= length());
@@ -469,7 +466,7 @@ Zbase<T, SP, AP>& Zbase<T, SP, AP>::replace(size_t pos1, size_t n1, const Zbase&
else
{
//copy directly into new string
- T* const newStr = this->create(newLen);
+ Char* const newStr = this->create(newLen);
std::copy(rawStr, rawStr + pos1, newStr);
std::copy(str.data(), str.data() + n2, newStr + pos1);
@@ -482,8 +479,8 @@ Zbase<T, SP, AP>& Zbase<T, SP, AP>::replace(size_t pos1, size_t n1, const Zbase&
}
-template <class T, template <class, class> class SP, class AP> inline
-void Zbase<T, SP, AP>::resize(size_t newSize, T fillChar)
+template <class Char, template <class, class> class SP, class AP> inline
+void Zbase<Char, SP, AP>::resize(size_t newSize, Char fillChar)
{
if (canWrite(rawStr, newSize))
{
@@ -494,7 +491,7 @@ void Zbase<T, SP, AP>::resize(size_t newSize, T fillChar)
}
else
{
- T* newStr = this->create(newSize);
+ Char* newStr = this->create(newSize);
newStr[newSize] = 0;
if (length() < newSize)
@@ -511,153 +508,153 @@ void Zbase<T, SP, AP>::resize(size_t newSize, T fillChar)
}
-template <class T, template <class, class> class SP, class AP> inline
-bool operator==(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+bool operator==(const Zbase<Char, SP, AP>& lhs, const Zbase<Char, SP, AP>& rhs)
{
return lhs.length() == rhs.length() && std::equal(lhs.begin(), lhs.end(), rhs.begin()); //respect embedded 0
}
-template <class T, template <class, class> class SP, class AP> inline
-bool operator==(const Zbase<T, SP, AP>& lhs, const T* rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+bool operator==(const Zbase<Char, SP, AP>& lhs, const Char* rhs)
{
- return lhs.length() == zen::strLength(rhs) && std::equal(lhs.begin(), lhs.end(), rhs); //respect embedded 0
+ return lhs.length() == strLength(rhs) && std::equal(lhs.begin(), lhs.end(), rhs); //respect embedded 0
}
-template <class T, template <class, class> class SP, class AP> inline
-bool operator==(const T* lhs, const Zbase<T, SP, AP>& rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+bool operator==(const Char* lhs, const Zbase<Char, SP, AP>& rhs)
{
return operator==(rhs, lhs);
}
-template <class T, template <class, class> class SP, class AP> inline
-bool operator!=(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+bool operator!=(const Zbase<Char, SP, AP>& lhs, const Zbase<Char, SP, AP>& rhs)
{
return !operator==(lhs, rhs);
}
-template <class T, template <class, class> class SP, class AP> inline
-bool operator!=(const Zbase<T, SP, AP>& lhs, const T* rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+bool operator!=(const Zbase<Char, SP, AP>& lhs, const Char* rhs)
{
return !operator==(lhs, rhs);
}
-template <class T, template <class, class> class SP, class AP> inline
-bool operator!=(const T* lhs, const Zbase<T, SP, AP>& rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+bool operator!=(const Char* lhs, const Zbase<Char, SP, AP>& rhs)
{
return !operator==(lhs, rhs);
}
-template <class T, template <class, class> class SP, class AP> inline
-bool operator<(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+bool operator<(const Zbase<Char, SP, AP>& lhs, const Zbase<Char, SP, AP>& rhs)
{
return std::lexicographical_compare(lhs.begin(), lhs.end(), //respect embedded 0
rhs.begin(), rhs.end());
}
-template <class T, template <class, class> class SP, class AP> inline
-bool operator<(const Zbase<T, SP, AP>& lhs, const T* rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+bool operator<(const Zbase<Char, SP, AP>& lhs, const Char* rhs)
{
return std::lexicographical_compare(lhs.begin(), lhs.end(), //respect embedded 0
- rhs, rhs + zen::strLength(rhs));
+ rhs, rhs + strLength(rhs));
}
-template <class T, template <class, class> class SP, class AP> inline
-bool operator<(const T* lhs, const Zbase<T, SP, AP>& rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+bool operator<(const Char* lhs, const Zbase<Char, SP, AP>& rhs)
{
- return std::lexicographical_compare(lhs, lhs + zen::strLength(lhs), //respect embedded 0
+ return std::lexicographical_compare(lhs, lhs + strLength(lhs), //respect embedded 0
rhs.begin(), rhs.end());
}
-template <class T, template <class, class> class SP, class AP> inline
-size_t Zbase<T, SP, AP>::length() const
+template <class Char, template <class, class> class SP, class AP> inline
+size_t Zbase<Char, SP, AP>::length() const
{
- return SP<T, AP>::length(rawStr);
+ return SP<Char, AP>::length(rawStr);
}
-template <class T, template <class, class> class SP, class AP> inline
-size_t Zbase<T, SP, AP>::size() const
+template <class Char, template <class, class> class SP, class AP> inline
+size_t Zbase<Char, SP, AP>::size() const
{
return length();
}
-template <class T, template <class, class> class SP, class AP> inline
-const T* Zbase<T, SP, AP>::c_str() const
+template <class Char, template <class, class> class SP, class AP> inline
+const Char* Zbase<Char, SP, AP>::c_str() const
{
return rawStr;
}
-template <class T, template <class, class> class SP, class AP> inline
-const T* Zbase<T, SP, AP>::data() const
+template <class Char, template <class, class> class SP, class AP> inline
+const Char* Zbase<Char, SP, AP>::data() const
{
return rawStr;
}
-template <class T, template <class, class> class SP, class AP> inline
-const T Zbase<T, SP, AP>::operator[](size_t pos) const
+template <class Char, template <class, class> class SP, class AP> inline
+const Char Zbase<Char, SP, AP>::operator[](size_t pos) const
{
assert(pos < length());
return rawStr[pos];
}
-template <class T, template <class, class> class SP, class AP> inline
-const T* Zbase<T, SP, AP>::begin() const
+template <class Char, template <class, class> class SP, class AP> inline
+const Char* Zbase<Char, SP, AP>::begin() const
{
return rawStr;
}
-template <class T, template <class, class> class SP, class AP> inline
-const T* Zbase<T, SP, AP>::end() const
+template <class Char, template <class, class> class SP, class AP> inline
+const Char* Zbase<Char, SP, AP>::end() const
{
return rawStr + length();
}
-template <class T, template <class, class> class SP, class AP> inline
-T* Zbase<T, SP, AP>::begin()
+template <class Char, template <class, class> class SP, class AP> inline
+Char* Zbase<Char, SP, AP>::begin()
{
- reserve(length());
+ reserve(length()); //make unshared!
return rawStr;
}
-template <class T, template <class, class> class SP, class AP> inline
-T* Zbase<T, SP, AP>::end()
+template <class Char, template <class, class> class SP, class AP> inline
+Char* Zbase<Char, SP, AP>::end()
{
return begin() + length();
}
-template <class T, template <class, class> class SP, class AP> inline
-void Zbase<T, SP, AP>::push_back(T val)
+template <class Char, template <class, class> class SP, class AP> inline
+void Zbase<Char, SP, AP>::push_back(Char val)
{
operator+=(val);
}
-template <class T, template <class, class> class SP, class AP> inline
-bool Zbase<T, SP, AP>::empty() const
+template <class Char, template <class, class> class SP, class AP> inline
+bool Zbase<Char, SP, AP>::empty() const
{
return length() == 0;
}
-template <class T, template <class, class> class SP, class AP> inline
-void Zbase<T, SP, AP>::clear()
+template <class Char, template <class, class> class SP, class AP> inline
+void Zbase<Char, SP, AP>::clear()
{
if (!empty())
{
@@ -672,55 +669,55 @@ void Zbase<T, SP, AP>::clear()
}
-template <class T, template <class, class> class SP, class AP> inline
-const Zbase<T, SP, AP> operator+(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+const Zbase<Char, SP, AP> operator+(const Zbase<Char, SP, AP>& lhs, const Zbase<Char, SP, AP>& rhs)
{
- return Zbase<T, SP, AP>(lhs) += rhs;
+ return Zbase<Char, SP, AP>(lhs) += rhs;
}
-template <class T, template <class, class> class SP, class AP> inline
-const Zbase<T, SP, AP> operator+(const Zbase<T, SP, AP>& lhs, const T* rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+const Zbase<Char, SP, AP> operator+(const Zbase<Char, SP, AP>& lhs, const Char* rhs)
{
- return Zbase<T, SP, AP>(lhs) += rhs;
+ return Zbase<Char, SP, AP>(lhs) += rhs;
}
-template <class T, template <class, class> class SP, class AP> inline
-const Zbase<T, SP, AP> operator+(const T* lhs, const Zbase<T, SP, AP>& rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+const Zbase<Char, SP, AP> operator+(const Char* lhs, const Zbase<Char, SP, AP>& rhs)
{
- return Zbase<T, SP, AP>(lhs) += rhs;
+ return Zbase<Char, SP, AP>(lhs) += rhs;
}
-template <class T, template <class, class> class SP, class AP> inline
-const Zbase<T, SP, AP> operator+(T lhs, const Zbase<T, SP, AP>& rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+const Zbase<Char, SP, AP> operator+(Char lhs, const Zbase<Char, SP, AP>& rhs)
{
- return (Zbase<T, SP, AP>() += lhs) += rhs;
+ return Zbase<Char, SP, AP>(lhs) += rhs;
}
-template <class T, template <class, class> class SP, class AP> inline
-const Zbase<T, SP, AP> operator+(const Zbase<T, SP, AP>& lhs, T rhs)
+template <class Char, template <class, class> class SP, class AP> inline
+const Zbase<Char, SP, AP> operator+(const Zbase<Char, SP, AP>& lhs, Char rhs)
{
- return Zbase<T, SP, AP>(lhs) += rhs;
+ return Zbase<Char, SP, AP>(lhs) += rhs;
}
-template <class T, template <class, class> class SP, class AP> inline
-void Zbase<T, SP, AP>::swap(Zbase<T, SP, AP>& other)
+template <class Char, template <class, class> class SP, class AP> inline
+void Zbase<Char, SP, AP>::swap(Zbase<Char, SP, AP>& other)
{
std::swap(rawStr, other.rawStr);
}
-template <class T, template <class, class> class SP, class AP> inline
-void Zbase<T, SP, AP>::reserve(size_t minCapacity) //make unshared and check capacity
+template <class Char, template <class, class> class SP, class AP> inline
+void Zbase<Char, SP, AP>::reserve(size_t minCapacity) //make unshared and check capacity
{
if (!canWrite(rawStr, minCapacity))
{
//allocate a new string
- T* newStr = create(length(), std::max(minCapacity, length())); //reserve() must NEVER shrink the string: logical const!
+ Char* newStr = create(length(), std::max(minCapacity, length())); //reserve() must NEVER shrink the string: logical const!
std::copy(rawStr, rawStr + length() + 1, newStr); //include NULL-termination
destroy(rawStr);
@@ -729,8 +726,8 @@ void Zbase<T, SP, AP>::reserve(size_t minCapacity) //make unshared and check cap
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>& Zbase<T, SP, AP>::assign(const T* source, size_t len)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>& Zbase<Char, SP, AP>::assign(const Char* source, size_t len)
{
if (canWrite(rawStr, len))
{
@@ -745,80 +742,60 @@ Zbase<T, SP, AP>& Zbase<T, SP, AP>::assign(const T* source, size_t len)
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>& Zbase<T, SP, AP>::operator=(const Zbase<T, SP, AP>& source)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>& Zbase<Char, SP, AP>::append(const Char* source, size_t len)
{
- Zbase(source).swap(*this);
+ const size_t thisLen = length();
+ reserve(thisLen + len); //make unshared and check capacity
+
+ std::copy(source, source + len, rawStr + thisLen);
+ rawStr[thisLen + len] = 0;
+ setLength(rawStr, thisLen + len);
return *this;
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>& Zbase<T, SP, AP>::operator=(Zbase<T, SP, AP>&& tmp)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>& Zbase<Char, SP, AP>::operator=(Zbase<Char, SP, AP> other) //unifying assignment: no need for r-value reference optimization!
{
- swap(tmp);
+ swap(other);
return *this;
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>& Zbase<T, SP, AP>::operator=(const T* source)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>& Zbase<Char, SP, AP>::operator=(const Char* source)
{
- return assign(source, zen::strLength(source));
+ return assign(source, strLength(source));
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>& Zbase<T, SP, AP>::operator=(T source)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>& Zbase<Char, SP, AP>::operator=(Char ch)
{
- if (canWrite(rawStr, 1))
- {
- rawStr[0] = source;
- rawStr[1] = 0; //include null-termination
- setLength(rawStr, 1);
- }
- else
- *this = Zbase(source);
-
- return *this;
+ return assign(&ch, 1);
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>& Zbase<T, SP, AP>::operator+=(const Zbase<T, SP, AP>& other)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>& Zbase<Char, SP, AP>::operator+=(const Zbase<Char, SP, AP>& other)
{
- const size_t thisLen = length();
- const size_t otherLen = other.length();
- reserve(thisLen + otherLen); //make unshared and check capacity
-
- std::copy(other.rawStr, other.rawStr + otherLen + 1, rawStr + thisLen); //include null-termination
- setLength(rawStr, thisLen + otherLen);
- return *this;
+ return append(other.c_str(), other.length());
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>& Zbase<T, SP, AP>::operator+=(const T* other)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>& Zbase<Char, SP, AP>::operator+=(const Char* other)
{
- const size_t thisLen = length();
- const size_t otherLen = zen::strLength(other);
- reserve(thisLen + otherLen); //make unshared and check capacity
-
- std::copy(other, other + otherLen + 1, rawStr + thisLen); //include null-termination
- setLength(rawStr, thisLen + otherLen);
- return *this;
+ return append(other, strLength(other));
}
-template <class T, template <class, class> class SP, class AP> inline
-Zbase<T, SP, AP>& Zbase<T, SP, AP>::operator+=(T ch)
+template <class Char, template <class, class> class SP, class AP> inline
+Zbase<Char, SP, AP>& Zbase<Char, SP, AP>::operator+=(Char ch)
{
- const size_t thisLen = length();
- reserve(thisLen + 1); //make unshared and check capacity
- rawStr[thisLen] = ch;
- rawStr[thisLen + 1] = 0;
- setLength(rawStr, thisLen + 1);
- return *this;
+ return append(&ch, 1);
+}
}
#endif //Z_BASE_H_INCLUDED
diff --git a/zen/string_tools.h b/zen/string_tools.h
index 8cafad07..5f20a2de 100644
--- a/zen/string_tools.h
+++ b/zen/string_tools.h
@@ -14,17 +14,18 @@
#include <cwchar> //swprintf
#include <algorithm>
#include <cassert>
-#include <sstream>
#include <vector>
+#include <sstream>
+#include "stl_tools.h"
#include "string_traits.h"
-#include "type_traits.h"
//enhance arbitray string class with useful non-member functions:
namespace zen
{
-template <class C> bool cStringIsWhiteSpace(C ch);
-template <class C> bool cStringIsDigit(C ch);
+template <class Char> bool cStringIsWhiteSpace(Char ch);
+template <class Char> bool cStringIsDigit (Char ch); //not exactly the same as "std::isdigit" -> we consider '0'-'9' only!
+
template <class S, class T> bool startsWith(const S& str, const T& prefix); //both S and T can be strings or char/wchar_t arrays or simple char/wchar_t
template <class S, class T> bool endsWith (const S& str, const T& postfix); //
@@ -40,14 +41,14 @@ template <class S> void trim(S& str, bool fromLeft = true, bool fromRight = true
template <class S, class T, class U> void replace ( S& str, const T& oldOne, const U& newOne, bool replaceAll = true);
template <class S, class T, class U> S replaceCpy(const S& str, const T& oldOne, const U& newOne, bool replaceAll = true);
-//high-performance conversion from numbers to strings
-template <class S, class T, class Num> S printNumber(const T& format, const Num& number); //format a single number using ::sprintf
+//high-performance conversion between numbers and strings
+template <class S, class T, class Num> S printNumber(const T& format, const Num& number); //format a single number using std::snprintf()
template <class S, class Num> S toString(const Num& number);
template <class Num, class S > Num toNumber(const S& str);
-//string to string conversion: converst string-like type into char-compatible target string class
-template <class T, class S> T cvrtString(const S& str);
+//string to string conversion: converts string-like type into char-compatible target string class
+template <class T, class S> T copyStringTo(const S& str);
@@ -90,35 +91,30 @@ bool cStringIsWhiteSpace(char ch)
std::isspace(static_cast<unsigned char>(ch)) != 0;
}
-//template <> inline bool cStringIsWhiteSpace(unsigned char ch) { return cStringIsWhiteSpace<char>(ch); } -> not character types!
-//template <> inline bool cStringIsWhiteSpace(signed char ch) { return cStringIsWhiteSpace<char>(ch); }
-template <> inline bool cStringIsWhiteSpace(wchar_t ch) { return std::iswspace(ch) != 0; }
-
-template <> inline
-bool cStringIsDigit(char ch)
-{
- return std::isdigit(static_cast<unsigned char>(ch)) != 0; //caveat: takes an int, but expects an unsigned char
-}
+template <> inline bool cStringIsWhiteSpace(wchar_t ch) { return std::iswspace(ch) != 0; }
-template <> inline
-bool cStringIsDigit(wchar_t ch)
+template <class Char> inline
+bool cStringIsDigit(Char ch) //similar to implmenetation of std::::isdigit()!
{
- return std::iswdigit(ch) != 0;
+ assert_static((IsSameType<Char, char>::result || IsSameType<Char, wchar_t>::result));
+ return static_cast<Char>('0') <= ch && ch <= static_cast<Char>('9');
}
template <class S, class T> inline
bool startsWith(const S& str, const T& prefix)
{
- assert_static(StringTraits<S>::isStringLike);
- assert_static(StringTraits<T>::isStringLike);
+ assert_static(IsStringLike<S>::result);
+ assert_static(IsStringLike<T>::result);
+ typedef typename GetCharType<S>::Result CharType;
const size_t pfLength = strLength(prefix);
if (strLength(str) < pfLength)
return false;
- return std::equal(strBegin(str), strBegin(str) + pfLength,
+ const CharType* const strFirst = strBegin(str);
+ return std::equal(strFirst, strFirst + pfLength,
strBegin(prefix));
}
@@ -126,18 +122,17 @@ bool startsWith(const S& str, const T& prefix)
template <class S, class T> inline
bool endsWith(const S& str, const T& postfix)
{
- assert_static(StringTraits<S>::isStringLike);
- assert_static(StringTraits<T>::isStringLike);
+ assert_static(IsStringLike<S>::result);
+ assert_static(IsStringLike<T>::result);
+ typedef typename GetCharType<S>::Result CharType;
- size_t strLen = strLength(str);
- size_t pfLen = strLength(postfix);
+ const size_t strLen = strLength(str);
+ const size_t pfLen = strLength(postfix);
if (strLen < pfLen)
return false;
- typedef typename StringTraits<S>::CharType CharType;
-
- const CharType* cmpBegin = strBegin(str) + strLen - pfLen;
- return std::equal(cmpBegin, cmpBegin + pfLen,
+ const CharType* const cmpFirst = strBegin(str) + strLen - pfLen;
+ return std::equal(cmpFirst, cmpFirst + pfLen,
strBegin(postfix));
}
@@ -146,16 +141,22 @@ bool endsWith(const S& str, const T& postfix)
template <class S, class T> inline
S afterLast(const S& str, const T& ch)
{
- assert_static(StringTraits<T>::isStringLike);
+ assert_static(IsStringLike<T>::result);
+ typedef typename GetCharType<S>::Result CharType;
- const size_t pos = str.rfind(ch);
- if (pos != S::npos)
- {
- size_t chLen = strLength(ch);
- return S(str.c_str() + pos + chLen, str.length() - pos - chLen);
- }
- else
+ const size_t chLen = strLength(ch);
+
+ const CharType* const strFirst = strBegin(str);
+ const CharType* const strLast = strFirst + strLength(str);
+ const CharType* const chFirst = strBegin(ch);
+
+ const CharType* iter = search_last(strFirst, strLast,
+ chFirst, chFirst + chLen);
+ if (iter == strLast)
return str;
+
+ iter += chLen;
+ return S(iter, strLast - iter);
}
@@ -163,13 +164,19 @@ S afterLast(const S& str, const T& ch)
template <class S, class T> inline
S beforeLast(const S& str, const T& ch)
{
- assert_static(StringTraits<T>::isStringLike);
+ assert_static(IsStringLike<T>::result);
+ typedef typename GetCharType<S>::Result CharType;
- const size_t pos = str.rfind(ch);
- if (pos != S::npos)
- return S(str.c_str(), pos); //data is non-empty string in this context: else ch would not have been found!
- else
+ const CharType* const strFirst = strBegin(str);
+ const CharType* const strLast = strFirst + strLength(str);
+ const CharType* const chFirst = strBegin(ch);
+
+ const CharType* iter = search_last(strFirst, strLast,
+ chFirst, chFirst + strLength(ch));
+ if (iter == strLast)
return S();
+
+ return S(strFirst, iter - strFirst);
}
@@ -177,17 +184,21 @@ S beforeLast(const S& str, const T& ch)
template <class S, class T> inline
S afterFirst(const S& str, const T& ch)
{
- assert_static(StringTraits<T>::isStringLike);
+ assert_static(IsStringLike<T>::result);
+ typedef typename GetCharType<S>::Result CharType;
- const size_t pos = str.find(ch);
- if (pos != S::npos)
- {
- size_t chLen = strLength(ch);
- return S(str.c_str() + pos + chLen, str.length() - pos - chLen);
- }
- else
+ const size_t chLen = strLength(ch);
+ const CharType* const strFirst = strBegin(str);
+ const CharType* const strLast = strFirst + strLength(str);
+ const CharType* const chFirst = strBegin(ch);
+
+ const CharType* iter = std::search(strFirst, strLast,
+ chFirst, chFirst + chLen);
+ if (iter == strLast)
return S();
+ iter += chLen;
+ return S(iter, strLast - iter);
}
@@ -195,34 +206,48 @@ S afterFirst(const S& str, const T& ch)
template <class S, class T> inline
S beforeFirst(const S& str, const T& ch)
{
- assert_static(StringTraits<T>::isStringLike);
+ assert_static(IsStringLike<T>::result);
+ typedef typename GetCharType<S>::Result CharType;
- const size_t pos = str.find(ch);
- if (pos != S::npos)
- return S(str.c_str(), pos); //data is non-empty string in this context: else ch would not have been found!
- else
- return str;
+ const CharType* const strFirst = strBegin(str);
+ const CharType* const chFirst = strBegin(ch);
+
+ return S(strFirst, std::search(strFirst, strFirst + strLength(str),
+ chFirst, chFirst + strLength(ch)) - strFirst);
}
template <class S, class T> inline
std::vector<S> split(const S& str, const T& delimiter)
{
- assert_static(StringTraits<T>::isStringLike);
+ assert_static(IsStringLike<T>::result);
+ typedef typename GetCharType<S>::Result CharType;
std::vector<S> output;
- size_t bockStart = 0;
- size_t delimLen = strLength(delimiter);
- if (delimLen != 0)
+
+ const size_t delimLen = strLength(delimiter);
+
+ if (delimLen == 0)
+ output.push_back(str);
+ else
{
- for (size_t blockEnd = str.find(delimiter, bockStart);
- blockEnd != S::npos;
- bockStart = blockEnd + delimLen, blockEnd = str.find(delimiter, bockStart))
+ const CharType* const delimFirst = strBegin(delimiter);
+ const CharType* const delimLast = delimFirst + delimLen;
+
+ const CharType* blockStart = strBegin(str);
+ const CharType* const strLast = blockStart + strLength(str);
+
+ for (;;)
{
- output.push_back(S(str.c_str() + bockStart, blockEnd - bockStart));
+ const CharType* const blockEnd = std::search(blockStart, strLast,
+ delimFirst, delimLast);
+
+ output.push_back(S(blockStart, blockEnd - blockStart));
+ if (blockEnd == strLast)
+ break;
+ blockStart = blockEnd + delimLen;
}
}
- output.push_back(S(str.c_str() + bockStart, str.length() - bockStart));
return output;
}
@@ -235,38 +260,54 @@ void truncate(S& str, size_t newLen)
}
+namespace implementation
+{
+ZEN_INIT_DETECT_MEMBER(append);
+
+//either call operator+=(S(str, len)) or append(str, len)
+template <class S, class Char> inline
+typename EnableIf<HasMember_append<S>::result>::Result stringAppend(S& str, const Char* other, size_t len) { str.append(other, len); }
+
+template <class S, class Char> inline
+typename EnableIf<!HasMember_append<S>::result>::Result stringAppend(S& str, const Char* other, size_t len) { str += S(other, len); }
+}
+
+
template <class S, class T, class U> inline
S replaceCpy(const S& str, const T& oldOne, const U& newOne, bool replaceAll)
{
- assert_static(StringTraits<T>::isStringLike);
- assert_static(StringTraits<U>::isStringLike);
+ assert_static(IsStringLike<T>::result);
+ assert_static(IsStringLike<U>::result);
- typedef typename StringTraits<S>::CharType CharType;
+ typedef typename GetCharType<S>::Result CharType;
const size_t oldLen = strLength(oldOne);
const size_t newLen = strLength(newOne);
S output;
- const CharType* strPos = strBegin(str);
- const CharType* strEnd = strPos + strLength(str);
+ const CharType* strPos = strBegin(str);
+ const CharType* const strEnd = strPos + strLength(str);
+
+ const CharType* const oldBegin = strBegin(oldOne);
+ const CharType* const newBegin = strBegin(newOne);
for (;;)
{
const CharType* ptr = std::search(strPos, strEnd,
- strBegin(oldOne), strBegin(oldOne) + oldLen);
+ oldBegin, oldBegin + oldLen);
if (ptr == strEnd)
break;
- output += S(strPos, ptr - strPos);
- output += S(strBegin(newOne), newLen);
+ implementation::stringAppend(output, strPos, ptr - strPos);
+ implementation::stringAppend(output, newBegin, newLen);
strPos = ptr + oldLen;
if (!replaceAll)
break;
}
- output += S(strPos, strEnd - strPos);
+ implementation::stringAppend(output, strPos, strEnd - strPos);
return output;
}
@@ -284,10 +325,11 @@ void trim(S& str, bool fromLeft, bool fromRight)
{
assert(fromLeft || fromRight);
- typedef typename S::value_type CharType;
+ typedef typename GetCharType<S>::Result CharType; //don't use value_type! (wxString, Glib::ustring)
- const CharType* newBegin = str.c_str();
- const CharType* newEnd = str.c_str() + str.length();
+ const CharType* const oldBegin = str.c_str();
+ const CharType* newBegin = oldBegin;
+ const CharType* newEnd = oldBegin + str.length();
if (fromRight)
while (newBegin != newEnd && cStringIsWhiteSpace(newEnd[-1]))
@@ -300,7 +342,7 @@ void trim(S& str, bool fromLeft, bool fromRight)
const size_t newLength = newEnd - newBegin;
if (newLength != str.length())
{
- if (newBegin != str.c_str())
+ if (newBegin != oldBegin)
str = S(newBegin, newLength); //minor inefficiency: in case "str" is not shared, we could save an allocation and do a memory move only
else
str.resize(newLength);
@@ -311,20 +353,20 @@ void trim(S& str, bool fromLeft, bool fromRight)
namespace implementation
{
template <class S, class T>
-struct CnvtStringToString
+struct CopyStringToString
{
- T convert(const S& src) const { return T(strBegin(src), strLength(src)); }
+ T copy(const S& src) const { return T(strBegin(src), strLength(src)); }
};
template <class S>
-struct CnvtStringToString<S, S> //perf: we don't need a deep copy if string types match
+struct CopyStringToString<S, S> //perf: we don't need a deep copy if string types match
{
- const S& convert(const S& src) const { return src; }
+ const S& copy(const S& src) const { return src; }
};
}
template <class T, class S> inline
-T cvrtString(const S& str) { return implementation::CnvtStringToString<S, T>().convert(str); }
+T copyStringTo(const S& str) { return implementation::CopyStringToString<S, T>().copy(str); }
namespace implementation
@@ -333,7 +375,7 @@ template <class Num> inline
int saferPrintf(char* buffer, size_t bufferSize, const char* format, const Num& number) //there is no such thing as a "safe" printf ;)
{
#ifdef _MSC_VER
- return ::_snprintf(buffer, bufferSize, format, number); //VS2010 doesn't respect ISO C
+ return ::_snprintf(buffer, bufferSize, format, number); //VS2010 doesn't respect ISO C
#else
return std::snprintf(buffer, bufferSize, format, number); //C99
#endif
@@ -342,8 +384,8 @@ int saferPrintf(char* buffer, size_t bufferSize, const char* format, const Num&
template <class Num> inline
int saferPrintf(wchar_t* buffer, size_t bufferSize, const wchar_t* format, const Num& number)
{
-#ifdef __MINGW32__ //MinGW doesn't respect ISO C
- return ::snwprintf(buffer, bufferSize, format, number);
+#ifdef __MINGW32__
+ return ::snwprintf(buffer, bufferSize, format, number); //MinGW doesn't respect ISO C
#else
return std::swprintf(buffer, bufferSize, format, number); //C99
#endif
@@ -353,12 +395,12 @@ int saferPrintf(wchar_t* buffer, size_t bufferSize, const wchar_t* format, const
template <class S, class T, class Num> inline
S printNumber(const T& format, const Num& number) //format a single number using ::sprintf
{
- assert_static(StringTraits<T>::isStringLike);
+ assert_static(IsStringLike<T>::result);
assert_static((IsSameType<
- typename StringTraits<S>::CharType,
- typename StringTraits<T>::CharType>::result));
+ typename GetCharType<S>::Result,
+ typename GetCharType<T>::Result>::result));
- typedef typename StringTraits<S>::CharType CharType;
+ typedef typename GetCharType<S>::Result CharType;
const int BUFFER_SIZE = 128;
CharType buffer[BUFFER_SIZE];
@@ -379,29 +421,26 @@ enum NumberType
};
-template <class S, class Num, NumberType>
-struct CvrtNumberToString
+template <class S, class Num> inline
+S toString(const Num& number, Int2Type<NUM_TYPE_OTHER>) //default number to string conversion using streams: convenient, but SLOW, SLOW, SLOW!!!! (~ factor of 20)
{
- S convert(const Num& number) const //default number to string conversion using streams: convenient, but SLOW, SLOW, SLOW!!!! (~ factor of 20)
- {
- typedef typename StringTraits<S>::CharType CharType;
+ typedef typename GetCharType<S>::Result CharType;
+
+ std::basic_ostringstream<CharType> ss;
+ ss << number;
+ return copyStringTo<S>(ss.str());
+}
- std::basic_ostringstream<CharType> ss;
- ss << number;
- return cvrtString<S>(ss.str());
- }
-};
+template <class S, class Num> inline S floatToString(const Num& number, char ) { return printNumber<S>( "%g", static_cast<double>(number)); }
+template <class S, class Num> inline S floatToString(const Num& number, wchar_t) { return printNumber<S>(L"%g", static_cast<double>(number)); }
-template <class S, class Num>
-struct CvrtNumberToString<S, Num, NUM_TYPE_FLOATING_POINT>
+template <class S, class Num> inline
+S toString(const Num& number, Int2Type<NUM_TYPE_FLOATING_POINT>)
{
- S convert(const Num& number) const { return convertFloat(number, typename StringTraits<S>::CharType()); }
+ return floatToString<S>(number, typename GetCharType<S>::Result());
+}
-private:
- S convertFloat(const Num& number, char ) const { return printNumber<S>( "%g", static_cast<double>(number)); }
- S convertFloat(const Num& number, wchar_t) const { return printNumber<S>(L"%g", static_cast<double>(number)); }
-};
/*
perf: integer to string: (executed 10 mio. times)
@@ -413,62 +452,62 @@ perf: integer to string: (executed 10 mio. times)
template <class S, class Num> inline
S formatInteger(Num n, bool hasMinus)
{
+ typedef typename GetCharType<S>::Result CharType;
+
assert(n >= 0);
S output;
do
{
- output += '0' + n % 10;
+ output += static_cast<CharType>('0' + n % 10);
n /= 10;
}
while (n != 0);
if (hasMinus)
- output += '-';
+ output += static_cast<CharType>('-');
std::reverse(output.begin(), output.end());
return output;
}
-template <class S, class Num>
-struct CvrtNumberToString<S, Num, NUM_TYPE_SIGNED_INT>
+template <class S, class Num> inline
+S toString(const Num& number, Int2Type<NUM_TYPE_SIGNED_INT>)
{
- S convert(const Num& number) const { return formatInteger<S>(number < 0 ? -number : number, number < 0); }
-};
+ return formatInteger<S>(number < 0 ? -number : number, number < 0);
+}
+
-template <class S, class Num>
-struct CvrtNumberToString<S, Num, NUM_TYPE_UNSIGNED_INT>
+template <class S, class Num> inline
+S toString(const Num& number, Int2Type<NUM_TYPE_UNSIGNED_INT>)
{
- S convert(const Num& number) const { return formatInteger<S>(number, false); }
-};
+ return formatInteger<S>(number, false);
+}
//--------------------------------------------------------------------------------
-template <class S, class Num, NumberType>
-struct CvrtStringToNumber
+
+template <class Num, class S> inline
+Num toNumber(const S& str, Int2Type<NUM_TYPE_OTHER>) //default string to number conversion using streams: convenient, but SLOW
{
- Num convert(const S& str) const //default string to number conversion using streams: convenient, but SLOW
- {
- typedef typename StringTraits<S>::CharType CharType;
- Num number = 0;
- std::basic_istringstream<CharType>(cvrtString<std::basic_string<CharType> >(str)) >> number;
- return number;
- }
-};
+ typedef typename GetCharType<S>::Result CharType;
+ Num number = 0;
+ std::basic_istringstream<CharType>(copyStringTo<std::basic_string<CharType> >(str)) >> number;
+ return number;
+}
-template <class S, class Num>
-struct CvrtStringToNumber<S, Num, NUM_TYPE_FLOATING_POINT>
-{
- Num convert(const S& str) const { return convertFloat(strBegin(str)); }
+template <class Num> inline Num stringToFloat(const char* str) { return std::strtod(str, NULL); }
+template <class Num> inline Num stringToFloat(const wchar_t* str) { return std::wcstod(str, NULL); }
-private:
- Num convertFloat(const char* str) const { return std::strtod(str, NULL); }
- Num convertFloat(const wchar_t* str) const { return std::wcstod(str, NULL); }
-};
+template <class Num, class S> inline
+Num toNumber(const S& str, Int2Type<NUM_TYPE_FLOATING_POINT>)
+{
+ return stringToFloat<Num>(strBegin(str));
+}
template <class Num, class S>
Num extractInteger(const S& str, bool& hasMinusSign) //very fast conversion to integers: slightly faster than std::atoi, but more importantly: generic
{
- typedef typename StringTraits<S>::CharType CharType;
+ typedef typename GetCharType<S>::Result CharType;
const CharType* first = strBegin(str);
const CharType* last = first + strLength(str);
@@ -476,15 +515,16 @@ Num extractInteger(const S& str, bool& hasMinusSign) //very fast conversion to i
while (first != last && cStringIsWhiteSpace(*first)) //skip leading whitespace
++first;
- hasMinusSign = false; //handle minus sign
+ //handle minus sign
+ hasMinusSign = false;
if (first != last)
{
- if (*first == '-')
+ if (*first == static_cast<CharType>('-'))
{
hasMinusSign = true;
++first;
}
- else if (*first == '+')
+ else if (*first == static_cast<CharType>('+'))
++first;
}
@@ -492,14 +532,15 @@ Num extractInteger(const S& str, bool& hasMinusSign) //very fast conversion to i
for (const CharType* iter = first; iter != last; ++iter)
{
const CharType c = *iter;
- if ('0' <= c && c <= '9')
+ if (static_cast<CharType>('0') <= c && c <= static_cast<CharType>('9'))
{
number *= 10;
- number += c - '0';
+ number += c - static_cast<CharType>('0');
}
else
{
- assert(std::find_if(iter, last, std::not1(std::ptr_fun(&cStringIsWhiteSpace<CharType>))) == last); //rest of string should contain whitespace only
+ //rest of string should contain whitespace only
+ //assert(std::find_if(iter, last, std::not1(std::ptr_fun(&cStringIsWhiteSpace<CharType>))) == last); -> this is NO assert situation
break;
}
}
@@ -507,61 +548,53 @@ Num extractInteger(const S& str, bool& hasMinusSign) //very fast conversion to i
}
-template <class S, class Num>
-struct CvrtStringToNumber<S, Num, NUM_TYPE_SIGNED_INT>
+template <class Num, class S> inline
+Num toNumber(const S& str, Int2Type<NUM_TYPE_SIGNED_INT>)
{
- Num convert(const S& str) const
- {
- bool hasMinusSign = false; //handle minus sign
- const Num number = extractInteger<Num>(str, hasMinusSign);
- return hasMinusSign ? -number : number;
- }
-};
+ bool hasMinusSign = false; //handle minus sign
+ const Num number = extractInteger<Num>(str, hasMinusSign);
+ return hasMinusSign ? -number : number;
+}
-template <class S, class Num>
-struct CvrtStringToNumber<S, Num, NUM_TYPE_UNSIGNED_INT>
+template <class Num, class S> inline
+Num toNumber(const S& str, Int2Type<NUM_TYPE_UNSIGNED_INT>) //very fast conversion to integers: slightly faster than std::atoi, but more importantly: generic
{
- Num convert(const S& str) const //very fast conversion to integers: slightly faster than std::atoi, but more importantly: generic
+ bool hasMinusSign = false; //handle minus sign
+ const Num number = extractInteger<Num>(str, hasMinusSign);
+ if (hasMinusSign)
{
- bool hasMinusSign = false; //handle minus sign
- const Num number = extractInteger<Num>(str, hasMinusSign);
- if (hasMinusSign)
- {
- assert(false);
- return 0U;
- }
- return number;
+ assert(false);
+ return 0U;
}
-};
+ return number;
+}
}
-template <class S, class Num>
-inline
+template <class S, class Num> inline
S toString(const Num& number) //convert number to string the C++ way
{
- using namespace implementation;
- return CvrtNumberToString<S, Num,
- IsSignedInt <Num>::result ? NUM_TYPE_SIGNED_INT :
- IsUnsignedInt<Num>::result ? NUM_TYPE_UNSIGNED_INT :
- IsFloat <Num>::result ? NUM_TYPE_FLOATING_POINT :
- NUM_TYPE_OTHER
- >().convert(number);
+ typedef Int2Type<
+ IsSignedInt <Num>::result ? implementation::NUM_TYPE_SIGNED_INT :
+ IsUnsignedInt<Num>::result ? implementation::NUM_TYPE_UNSIGNED_INT :
+ IsFloat <Num>::result ? implementation::NUM_TYPE_FLOATING_POINT :
+ implementation::NUM_TYPE_OTHER> TypeTag;
+
+ return implementation::toString<S>(number, TypeTag());
}
-template <class Num, class S>
-inline
+template <class Num, class S> inline
Num toNumber(const S& str) //convert string to number the C++ way
{
- using namespace implementation;
- return CvrtStringToNumber<S, Num,
- IsSignedInt <Num>::result ? NUM_TYPE_SIGNED_INT :
- IsUnsignedInt<Num>::result ? NUM_TYPE_UNSIGNED_INT :
- IsFloat <Num>::result ? NUM_TYPE_FLOATING_POINT :
- NUM_TYPE_OTHER
- >().convert(str);
+ typedef Int2Type<
+ IsSignedInt <Num>::result ? implementation::NUM_TYPE_SIGNED_INT :
+ IsUnsignedInt<Num>::result ? implementation::NUM_TYPE_UNSIGNED_INT :
+ IsFloat <Num>::result ? implementation::NUM_TYPE_FLOATING_POINT :
+ implementation::NUM_TYPE_OTHER> TypeTag;
+
+ return implementation::toNumber<Num>(str, TypeTag());
}
}
diff --git a/zen/string_traits.h b/zen/string_traits.h
index 59da2f79..6c51f6dd 100644
--- a/zen/string_traits.h
+++ b/zen/string_traits.h
@@ -9,35 +9,48 @@
#define STRING_TRAITS_HEADER_813274321443234
#include "type_tools.h"
+#include "type_traits.h"
#include "assert_static.h"
-//uniform access to string-like types: classes and character arrays
+//uniform access to string-like types, both classes and character arrays
namespace zen
{
/*
+IsStringLike<>::result:
+ IsStringLike<const wchar_t*>::result; //equals "true"
+ IsStringLike<const int*> ::result; //equals "false"
+
+GetCharType<>::Result:
+ GetCharType<std::wstring>::Result //equals wchar_t
+ GetCharType<wchar_t[5]> ::Result //equals wchar_t
+
strBegin():
std::wstring str(L"dummy");
char array[] = "dummy";
- const wchar_t* iter = strBegin(str); //returns str.c_str()
- const char* iter2 = strBegin(array); //returns array
+ strBegin(str); //returns str.c_str()
+ strBegin(array); //returns array
strLength():
- strLength(str); //equals str.size()
+ strLength(str); //equals str.length()
strLength(array); //equals cStringLength(array)
+*/
-StringTraits<>::CharType:
- StringTraits<std::wstring>::CharType //equals wchar_t
- StringTraits<wchar_t[5]> ::CharType //equals wchar_t
+//wrap a sub-string or a char* as an intermediate string class when the length is already known
+template <class Char>
+class StringProxy
+{
+public:
+ StringProxy(const Char* cstr, size_t len ) : cstr_(cstr), length_(len) {}
+ StringProxy(const Char* cstrBegin, const Char* cstrEnd) : cstr_(cstrBegin), length_(cstrEnd - cstrBegin) {}
-StringTraits<>::isStringLike:
- StringTraits<const wchar_t*>::isStringLike; //equals "true"
- StringTraits<const int*> ::isStringLike; //equals "false"
+ const Char* c_str() const { return cstr_; }
+ size_t length() const { return length_; }
-StringTraits<>::isStringClass:
- StringTraits<std::wstring>::isStringClass //equals "true"
- StringTraits<wchar_t[5]> ::isStringClass //equals "false"
-*/
+private:
+ const Char* cstr_;
+ size_t length_;
+};
@@ -54,91 +67,87 @@ StringTraits<>::isStringClass:
//---------------------- implementation ----------------------
namespace implementation
{
-template<typename T>
-class HasValueTypedef
-{
- typedef char Yes[1];
- typedef char No [2];
-
- template <typename U> class HelperTp {};
+ZEN_INIT_DETECT_MEMBER(c_str) //we don't know the exact declaration of the member attribute and it may be in a base class!
+ZEN_INIT_DETECT_MEMBER(length) //
- //detect presence of a member type called value_type
- template <class U> static Yes& hasMemberValueType(HelperTp<typename U::value_type>*);
- template <class U> static No& hasMemberValueType(...);
+template<typename T, bool isClassType>
+struct HasStringMembers { enum { result = false }; };
-public:
- enum { result = sizeof(hasMemberValueType<T>(NULL)) == sizeof(Yes)
+template<typename T>
+struct HasStringMembers<T, true> //Note: we can apply non-typed member-check on class types only!
+{
+ enum { result = HasMember_c_str <T>::result &&
+ HasMember_length<T>::result
};
};
-template<typename T, bool isClassType>
-class HasStringMembers
-{
-public:
- enum { result = false };
-};
-
-template<typename T>
-class HasStringMembers<T, true>
+template<class S, class Char> //test if result of S::c_str() can convert to const Char*
+class HasConversion
{
typedef char Yes[1];
typedef char No [2];
- //detect presence of member functions (without specific restriction on return type, within T or one of it's base classes)
- template <typename U, U t> class HelperFn {};
+ static Yes& hasConversion(const Char*);
+ static No& hasConversion(...);
- struct Fallback
- {
- int c_str;
- int length;
- };
+ static S createInstance();
- template <class U>
- struct Helper2 : public U, public Fallback {}; //U must be a class-type!
+public:
+ enum { result = sizeof(hasConversion(createInstance().c_str())) == sizeof(Yes) };
+};
- //we don't know the exact declaration of the member attribute (may be in base class), but we know what NOT to expect:
- template <class U> static No& hasMemberCstr(HelperFn<int Fallback::*, &Helper2<U>::c_str>*);
- template <class U> static Yes& hasMemberCstr(...);
- template <class U> static No& hasMemberLength(HelperFn<int Fallback::*, &Helper2<U>::length>*);
- template <class U> static Yes& hasMemberLength(...);
-public:
- enum { result = sizeof(hasMemberCstr <T>(NULL)) == sizeof(Yes) &&
- sizeof(hasMemberLength<T>(NULL)) == sizeof(Yes)
- };
+template <class S, bool isStringClass> struct GetCharTypeImpl { typedef EmptyType Result; };
+template <class S> struct GetCharTypeImpl<S, true >
+{
+ //typedef typename S::value_type Result;
+ /*DON'T use S::value_type:
+ 1. support Glib::ustring: value_type is "unsigned int" but c_str() returns "const char*"
+ 2. wxString, wxWidgets v2.9, has some questionable string design: wxString::c_str() returns a proxy (wxCStrData) which
+ is implicitly convertible to *both* "const char*" and "const wchar_t*" while wxString::value_type is a wrapper around an unsigned int
+ */
+ typedef typename SelectIf<HasConversion<S, wchar_t>::result, wchar_t,
+ typename SelectIf<HasConversion<S, char>::result, char, EmptyType>::Result
+ >::Result Result;
};
-template <class S, bool isStringClass> struct StringTraits2 { typedef EmptyType Result; }; //"StringTraits2": fix some VS bug with namespace and partial template specialization
-template <class S> struct StringTraits2<S, true > { typedef typename S::value_type Result; };
-template <> struct StringTraits2<char, false> { typedef char Result; };
-template <> struct StringTraits2<wchar_t, false> { typedef wchar_t Result; };
-}
+template <> struct GetCharTypeImpl<char, false> { typedef char Result; };
+template <> struct GetCharTypeImpl<wchar_t, false> { typedef wchar_t Result; };
+ZEN_INIT_DETECT_MEMBER_TYPE(value_type);
template <class S>
-struct StringTraits
+class StringTraits
{
-private:
typedef typename RemoveRef <S >::Result NonRefType;
typedef typename RemoveConst <NonRefType >::Result NonConstType;
typedef typename RemoveArray <NonConstType>::Result NonArrayType;
typedef typename RemovePointer<NonArrayType>::Result NonPtrType;
typedef typename RemoveConst <NonPtrType >::Result UndecoratedType; //handle "const char* const"
+
public:
enum
{
- isStringClass = implementation::HasStringMembers<NonConstType, implementation::HasValueTypedef<NonConstType>::result>::result
+ isStringClass = HasStringMembers<NonConstType, HasMemberType_value_type<NonConstType>::result>::result
};
- typedef typename implementation::StringTraits2<UndecoratedType, isStringClass>::Result CharType;
+ typedef typename GetCharTypeImpl<UndecoratedType, isStringClass>::Result CharType;
enum
{
- isStringLike = IsSameType<CharType, char>::result || IsSameType<CharType, wchar_t>::result
+ isStringLike = IsSameType<CharType, char>::result ||
+ IsSameType<CharType, wchar_t>::result
};
};
+}
+
+template <class T>
+struct IsStringLike { enum { result = implementation::StringTraits<T>::isStringLike }; };
+
+template <class T>
+struct GetCharType { typedef typename implementation::StringTraits<T>::CharType Result; };
namespace implementation
@@ -156,19 +165,25 @@ size_t cStringLength(const C* str) //strlen()
template <class S> inline
-const typename StringTraits<S>::CharType* strBegin(const S& str, typename S::value_type dummy = 0) { return str.c_str(); } //SFINAE: T must be a "string"
+const typename GetCharType<S>::Result* strBegin(const S& str, typename EnableIf<implementation::StringTraits<S>::isStringClass>::Result* = NULL) //SFINAE: T must be a "string"
+{
+ return str.c_str();
+}
-template <class Char>
-inline const typename StringTraits<Char>::CharType* strBegin(const Char* str) { return str; }
-inline const char* strBegin(const char& ch) { return &ch; }
-inline const wchar_t* strBegin(const wchar_t& ch) { return &ch; }
+inline const char* strBegin(const char* str) { return str; }
+inline const wchar_t* strBegin(const wchar_t* str) { return str; }
+inline const char* strBegin(const char& ch) { return &ch; }
+inline const wchar_t* strBegin(const wchar_t& ch) { return &ch; }
template <class S> inline
-size_t strLength(const S& str, typename S::value_type dummy = 0) { return str.length(); } //SFINAE: T must be a "string"
+size_t strLength(const S& str, typename EnableIf<implementation::StringTraits<S>::isStringClass>::Result* = NULL) //SFINAE: T must be a "string"
+{
+ return str.length();
+}
-template <class Char>
-inline size_t strLength(const Char* str) { return implementation::cStringLength(str); }
+inline size_t strLength(const char* str) { return implementation::cStringLength(str); }
+inline size_t strLength(const wchar_t* str) { return implementation::cStringLength(str); }
inline size_t strLength(char) { return 1; }
inline size_t strLength(wchar_t) { return 1; }
}
diff --git a/zen/symlink_target.h b/zen/symlink_target.h
index 3704eebe..370a0c56 100644
--- a/zen/symlink_target.h
+++ b/zen/symlink_target.h
@@ -78,7 +78,7 @@ Zstring getSymlinkRawTargetString(const Zstring& linkPath) //throw FileError
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT,
NULL);
if (hLink == INVALID_HANDLE_VALUE)
- throw FileError(_("Error resolving symbolic link:") + "\n\"" + linkPath + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error resolving symbolic link:") + L"\n\"" + linkPath + L"\"" + L"\n\n" + getLastErrorFormatted());
ZEN_ON_BLOCK_EXIT(::CloseHandle(hLink));
//respect alignment issues...
@@ -94,7 +94,7 @@ Zstring getSymlinkRawTargetString(const Zstring& linkPath) //throw FileError
bufferSize, //__in DWORD nOutBufferSize,
&bytesReturned, //__out_opt LPDWORD lpBytesReturned,
NULL)) //__inout_opt LPOVERLAPPED lpOverlapped
- throw FileError(_("Error resolving symbolic link:") + "\n\"" + linkPath + "\"" + "\n\n" + getLastErrorFormatted());
+ throw FileError(_("Error resolving symbolic link:") + L"\n\"" + linkPath + L"\"" + L"\n\n" + getLastErrorFormatted());
REPARSE_DATA_BUFFER& reparseData = *reinterpret_cast<REPARSE_DATA_BUFFER*>(&buffer[0]); //REPARSE_DATA_BUFFER needs to be artificially enlarged!
@@ -110,7 +110,7 @@ Zstring getSymlinkRawTargetString(const Zstring& linkPath) //throw FileError
reparseData.MountPointReparseBuffer.SubstituteNameLength / sizeof(WCHAR));
}
else
- throw FileError(_("Error resolving symbolic link:") + "\n\"" + linkPath + "\"" + "\n\n" + "Not a symbolic link or junction!");
+ throw FileError(_("Error resolving symbolic link:") + L"\n\"" + linkPath + L"\"" + L"\n\n" + L"Not a symbolic link or junction!");
//absolute symlinks and junctions technically start with \??\ while relative ones do not
if (startsWith(output, Zstr("\\??\\")))
@@ -125,7 +125,7 @@ Zstring getSymlinkRawTargetString(const Zstring& linkPath) //throw FileError
const int bytesWritten = ::readlink(linkPath.c_str(), &buffer[0], BUFFER_SIZE);
if (bytesWritten < 0 || bytesWritten >= BUFFER_SIZE)
{
- std::wstring errorMessage = _("Error resolving symbolic link:") + "\n\"" + linkPath + "\"";
+ std::wstring errorMessage = _("Error resolving symbolic link:") + L"\n\"" + linkPath + L"\"";
if (bytesWritten < 0)
errorMessage += L"\n\n" + getLastErrorFormatted();
throw FileError(errorMessage);
diff --git a/zen/time.h b/zen/time.h
new file mode 100644
index 00000000..f08f6ef8
--- /dev/null
+++ b/zen/time.h
@@ -0,0 +1,304 @@
+// **************************************************************************
+// * This file is part of the zenXML project. It is distributed under the *
+// * Boost Software License, Version 1.0. See accompanying file *
+// * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt. *
+// * Copyright (C) 2011 ZenJu (zhnmju123 AT gmx.de) *
+// **************************************************************************
+
+#ifndef ZEN_TIME_HEADER_845709281432434
+#define ZEN_TIME_HEADER_845709281432434
+
+#include <ctime>
+#include "string_tools.h"
+
+namespace zen
+{
+struct TimeComp //replaces "struct std::tm" and SYSTEMTIME
+{
+ TimeComp() : year(0), month(0), day(0), hour(0), minute(0), second(0) {}
+
+ int year; // -
+ int month; //1-12
+ int day; //1-31
+ int hour; //0-23
+ int minute; //0-59
+ int second; //0-61
+};
+
+TimeComp localTime (time_t utc = std::time(NULL)); //convert time_t (UTC) to local time components
+time_t localToTimeT(const TimeComp& comp); //convert local time components to time_t (UTC), returns -1 on error
+
+//----------------------------------------------------------------------------------------------------------------------------------
+
+/*
+format (current) date and time; example:
+ formatTime<std::wstring>(L"%Y*%m*%d"); -> "2011*10*29"
+ formatTime<std::wstring>(FORMAT_DATE); -> "2011-10-29"
+ formatTime<std::wstring>(FORMAT_TIME); -> "17:55:34"
+*/
+template <class String, class String2>
+String formatTime(const String2& format, const TimeComp& comp = localTime()); //format as specified by "std::strftime", returns empty string on failure
+
+//the "format" parameter of formatTime() is partially specialized with the following type tags:
+const struct FormatDateTag {} FORMAT_DATE = {}; //%x - locale dependent date representation: e.g. 08/23/01
+const struct FormatTimeTag {} FORMAT_TIME = {}; //%X - locale dependent time representation: e.g. 14:55:02
+const struct FormatDateTimeTag {} FORMAT_DATE_TIME = {}; //%c - locale dependent date and time: e.g. Thu Aug 23 14:55:02 2001
+
+const struct FormatIsoDateTag {} FORMAT_ISO_DATE = {}; //%Y-%m-%d - e.g. 2001-08-23
+const struct FormatIsoTimeTag {} FORMAT_ISO_TIME = {}; //%H:%M:%S - e.g. 14:55:02
+const struct FormatIsoDateTimeTag {} FORMAT_ISO_DATE_TIME = {}; //%Y-%m-%d %H:%M:%S - e.g. 2001-08-23 14:55:02
+
+//----------------------------------------------------------------------------------------------------------------------------------
+
+template <class String>
+bool parseTime(const String& format, const String& str, TimeComp& comp); //similar to ::strptime(), return true on success
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//############################ implementation ##############################
+namespace implementation
+{
+inline
+struct std::tm toClibTimeComponents(const TimeComp& comp)
+{
+ struct std::tm ctc = {};
+ ctc.tm_year = comp.year - 1900; //years since 1900
+ ctc.tm_mon = comp.month - 1; //0-11
+ ctc.tm_mday = comp.day; //1-31
+ ctc.tm_hour = comp.hour; //0-23
+ ctc.tm_min = comp.minute; //0-59
+ ctc.tm_sec = comp.second; //0-61
+ ctc.tm_isdst = -1; //> 0 if DST is active, == 0 if DST is not active, < 0 if the information is not available
+ return ctc;
+}
+
+inline
+TimeComp toZenTimeComponents(const struct std::tm& ctc)
+{
+ TimeComp comp;
+ comp.year = ctc.tm_year + 1900;
+ comp.month = ctc.tm_mon + 1;
+ comp.day = ctc.tm_mday;
+ comp.hour = ctc.tm_hour;
+ comp.minute = ctc.tm_min;
+ comp.second = ctc.tm_sec;
+ return comp;
+}
+
+
+template <class T>
+struct GetFormat; //get default time formats as char* or wchar_t*
+
+template <>
+struct GetFormat<FormatDateTag> //%x - locale dependent date representation: e.g. 08/23/01
+{
+ const char* format(char) const { return "%x"; }
+ const wchar_t* format(wchar_t) const { return L"%x"; }
+};
+
+template <>
+struct GetFormat<FormatTimeTag> //%X - locale dependent time representation: e.g. 14:55:02
+{
+ const char* format(char) const { return "%X"; }
+ const wchar_t* format(wchar_t) const { return L"%X"; }
+};
+
+template <>
+struct GetFormat<FormatDateTimeTag> //%c - locale dependent date and time: e.g. Thu Aug 23 14:55:02 2001
+{
+ const char* format(char) const { return "%c"; }
+ const wchar_t* format(wchar_t) const { return L"%c"; }
+};
+
+template <>
+struct GetFormat<FormatIsoDateTag> //%Y-%m-%d - e.g. 2001-08-23
+{
+ const char* format(char) const { return "%Y-%m-%d"; }
+ const wchar_t* format(wchar_t) const { return L"%Y-%m-%d"; }
+};
+
+template <>
+struct GetFormat<FormatIsoTimeTag> //%H:%M:%S - e.g. 14:55:02
+{
+ const char* format(char) const { return "%H:%M:%S"; }
+ const wchar_t* format(wchar_t) const { return L"%H:%M:%S"; }
+};
+
+template <>
+struct GetFormat<FormatIsoDateTimeTag> //%Y-%m-%d %H:%M:%S - e.g. 2001-08-23 14:55:02
+{
+ const char* format(char) const { return "%Y-%m-%d %H:%M:%S"; }
+ const wchar_t* format(wchar_t) const { return L"%Y-%m-%d %H:%M:%S"; }
+};
+
+
+inline
+size_t strftimeWrap(char* buffer, size_t bufferSize, const char* format, const struct std::tm* timeptr)
+{
+ return std::strftime(buffer, bufferSize, format, timeptr);
+}
+
+
+inline
+size_t strftimeWrap(wchar_t* buffer, size_t bufferSize, const wchar_t* format, const struct std::tm* timeptr)
+{
+ return std::wcsftime(buffer, bufferSize, format, timeptr);
+}
+
+
+struct UserDefinedFormatTag {};
+struct PredefinedFormatTag {};
+
+template <class String, class String2> inline
+String formatTime(const String2& format, const TimeComp& comp, UserDefinedFormatTag) //format as specified by "std::strftime", returns empty string on failure
+{
+ typedef typename GetCharType<String>::Result CharType;
+
+ const struct std::tm& ctc = toClibTimeComponents(comp);
+ CharType buffer[256];
+ const size_t charsWritten = strftimeWrap(buffer, 256, strBegin(format), &ctc);
+ return String(buffer, charsWritten);
+}
+
+template <class String, class FormatType> inline
+String formatTime(FormatType, const TimeComp& comp, PredefinedFormatTag)
+{
+ typedef typename GetCharType<String>::Result CharType;
+ return formatTime<String>(GetFormat<FormatType>().format(CharType()), comp, UserDefinedFormatTag());
+}
+}
+
+
+inline
+TimeComp localTime(time_t utc)
+{
+ return implementation::toZenTimeComponents(*std::localtime (&utc));
+}
+
+
+inline
+time_t localToTimeT(const TimeComp& comp) //returns -1 on error
+{
+ struct std::tm ctc = implementation::toClibTimeComponents(comp);
+ return std::mktime(&ctc);
+}
+
+
+template <class String, class String2> inline
+String formatTime(const String2& format, const TimeComp& comp)
+{
+ typedef typename SelectIf<
+ IsSameType<String2, FormatDateTag >::result ||
+ IsSameType<String2, FormatTimeTag >::result ||
+ IsSameType<String2, FormatDateTimeTag >::result ||
+ IsSameType<String2, FormatIsoDateTag >::result ||
+ IsSameType<String2, FormatIsoTimeTag >::result ||
+ IsSameType<String2, FormatIsoDateTimeTag>::result, implementation::PredefinedFormatTag, implementation::UserDefinedFormatTag>::Result FormatTag;
+
+ return implementation::formatTime<String>(format, comp, FormatTag());
+}
+
+
+template <class String>
+bool parseTime(const String& format, const String& str, TimeComp& comp) //return true on success
+{
+ typedef typename GetCharType<String>::Result CharType;
+
+ const CharType* iterFmt = strBegin(format);
+ const CharType* const fmtLast = iterFmt + strLength(format);
+
+ const CharType* iterStr = strBegin(str);
+ const CharType* const strLast = iterStr + strLength(str);
+
+ auto extractNumber = [&](int& result, size_t digitCount) -> bool
+ {
+ if (strLast - iterStr < digitCount)
+ return false;
+
+ if (std::find_if(iterStr, iterStr + digitCount, [](CharType c) { return !cStringIsDigit(c); }) != str.end())
+ return false;
+
+ result = zen::toNumber<int>(StringProxy<CharType>(iterStr, digitCount));
+ iterStr += digitCount;
+ return true;
+ };
+
+ for (; iterFmt != fmtLast; ++iterFmt)
+ {
+ const CharType fmt = *iterFmt;
+
+ if (fmt == '%')
+ {
+ ++iterFmt;
+ if (iterFmt == fmtLast)
+ return false;
+
+ switch (*iterFmt)
+ {
+ case 'Y':
+ if (!extractNumber(comp.year, 4))
+ return false;
+ break;
+ case 'm':
+ if (!extractNumber(comp.month, 2))
+ return false;
+ break;
+ case 'd':
+ if (!extractNumber(comp.day, 2))
+ return false;
+ break;
+ case 'H':
+ if (!extractNumber(comp.hour, 2))
+ return false;
+ break;
+ case 'M':
+ if (!extractNumber(comp.minute, 2))
+ return false;
+ break;
+ case 'S':
+ if (!extractNumber(comp.second, 2))
+ return false;
+ break;
+ default:
+ return false;
+ }
+ }
+ else if (cStringIsWhiteSpace(fmt)) //single whitespace in format => skip 0..n whitespace chars
+ {
+ while (iterStr != strLast && cStringIsWhiteSpace(*iterStr))
+ ++iterStr;
+ }
+ else
+ {
+ if (iterStr == strLast || *iterStr != fmt)
+ return false;
+ ++iterStr;
+ }
+ }
+
+ return iterStr == strLast;
+}
+}
+
+#endif //ZEN_TIME_HEADER_845709281432434
diff --git a/zen/type_tools.h b/zen/type_tools.h
index 06ef76e1..03ccb5f2 100644
--- a/zen/type_tools.h
+++ b/zen/type_tools.h
@@ -23,12 +23,12 @@ struct Type2Type {};
//########## Control Structures ########################
template <bool flag, class T, class U>
-struct Select
+struct SelectIf
{
typedef T Result;
};
template <class T, class U>
-struct Select<false, T, U>
+struct SelectIf<false, T, U>
{
typedef U Result;
};
@@ -45,6 +45,15 @@ struct IsSameType<T, T>
enum { result = true };
};
+//------------------------------------------------------
+template <bool, class T = void>
+struct EnableIf {};
+template <class T>
+struct EnableIf<true, T>
+{
+ typedef T Result;
+};
+
//########## Type Cleanup ##############################
template <class T>
struct RemoveRef { typedef T Result; };
diff --git a/zen/type_traits.h b/zen/type_traits.h
index 0a705def..0dacbb9a 100644
--- a/zen/type_traits.h
+++ b/zen/type_traits.h
@@ -10,6 +10,7 @@
namespace zen
{
+//################# Built-in Types ########################
//Example: "IsSignedInt<int>::result" evaluates to "true"
template <class T> struct IsUnsignedInt;
@@ -23,8 +24,26 @@ template <class T> struct IsArithmetic; //IsInteger or IsFloat
//optional: specialize new types like:
//template <> struct IsUnsignedInt<UInt64> { enum { result = true }; };
+//################# Class Members ########################
+/* Detect data or function members of a class by name: ZEN_INIT_DETECT_MEMBER + HasMember_
+ !!! Note: this may ONLY be used for class types: fails to compile for non-class types !!!
+ Example: 1. ZEN_INIT_DETECT_MEMBER(c_str);
+ 2. HasMember_c_str<T>::result -> use as boolean
+*/
+
+/* Detect data or function members of a class by name and type: ZEN_INIT_DETECT_MEMBER2 + HasMember_
+
+ Example: 1. ZEN_INIT_DETECT_MEMBER2(size, size_t (T::*)() const);
+ 2. HasMember_size<T>::result -> use as boolean
+*/
+
+/* Detect member type of a class: ZEN_INIT_DETECT_MEMBER_TYPE + HasMemberType_
+
+ Example: 1. ZEN_INIT_DETECT_MEMBER_TYPE(value_type);
+ 2. HasMemberType_value_type<T>::result -> use as boolean
+*/
@@ -83,6 +102,61 @@ struct IsInteger { enum { result = IsUnsignedInt<T>::result || IsSignedInt<T>::r
template <class T>
struct IsArithmetic { enum { result = IsInteger<T>::result || IsFloat<T>::result }; };
+//####################################################################
+
+#define ZEN_INIT_DETECT_MEMBER(NAME) \
+ \
+ template<typename T> \
+ class HasMember_##NAME \
+ { \
+ typedef char Yes[1]; \
+ typedef char No [2]; \
+ \
+ template <typename U, U t> class Helper {}; \
+ struct Fallback { int NAME; }; \
+ \
+ template <class U> \
+ struct Helper2 : public U, public Fallback {}; \
+ \
+ template <class U> static No& hasMember(Helper<int Fallback::*, &Helper2<U>::NAME>*); \
+ template <class U> static Yes& hasMember(...); \
+ public: \
+ enum { result = sizeof(hasMember<T>(NULL)) == sizeof(Yes) }; \
+ };
+//####################################################################
+
+#define ZEN_INIT_DETECT_MEMBER2(NAME, TYPE) \
+ \
+ template<typename U> \
+ class HasMember_##NAME \
+ { \
+ typedef char Yes[1]; \
+ typedef char No [2]; \
+ \
+ template <typename T, T t> class Helper {}; \
+ \
+ template <class T> static Yes& hasMember(Helper<TYPE, &T::NAME>*); \
+ template <class T> static No& hasMember(...); \
+ public: \
+ enum { result = sizeof(hasMember<U>(NULL)) == sizeof(Yes) }; \
+ };
+//####################################################################
+
+#define ZEN_INIT_DETECT_MEMBER_TYPE(TYPENAME) \
+ \
+ template<typename T> \
+ class HasMemberType_##TYPENAME \
+ { \
+ typedef char Yes[1]; \
+ typedef char No [2]; \
+ \
+ template <typename U> class Helper {}; \
+ \
+ template <class U> static Yes& hasMemberType(Helper<typename U::TYPENAME>*); \
+ template <class U> static No& hasMemberType(...); \
+ public: \
+ enum { result = sizeof(hasMemberType<T>(NULL)) == sizeof(Yes) }; \
+ };
}
#endif //TYPE_TRAITS_HEADER_3425628658765467
diff --git a/zen/utf8.h b/zen/utf8.h
index e72a8e3c..66c6df46 100644
--- a/zen/utf8.h
+++ b/zen/utf8.h
@@ -9,9 +9,7 @@
#define STRING_UTF8_HEADER_01832479146991573473545
#include <iterator>
-#include "string_tools.h"
-//#include "type_tools.h"
-//#include "string_traits.h"
+#include "string_tools.h" //copyStringTo
namespace zen
{
@@ -64,7 +62,7 @@ const char BYTE_ORDER_MARK_UTF8[] = "\xEF\xBB\xBF";
//----------------------- implementation ----------------------------------
namespace implementation
{
-typedef unsigned int CodePoint;
+typedef unsigned int CodePoint; //must be at least four bytes
const CodePoint CODE_POINT_MAX = 0x10ffff;
@@ -265,7 +263,7 @@ WideString utf8ToWide(const CharString& str, Int2Type<4>) //other OS: convert ut
{
WideString output;
utf8ToCodePoint(strBegin(str), strBegin(str) + strLength(str),
- [&](CodePoint cp) { output += cp; });
+ [&](CodePoint cp) { output += static_cast<wchar_t>(cp); });
return output;
}
@@ -294,8 +292,8 @@ CharString wideToUtf8(const WideString& str, Int2Type<4>) //other OS: convert ut
template <class WideString, class CharString> inline
WideString utf8ToWide(const CharString& str)
{
- assert_static((IsSameType<typename StringTraits<CharString>::CharType, char >::result));
- assert_static((IsSameType<typename StringTraits<WideString>::CharType, wchar_t>::result));
+ assert_static((IsSameType<typename GetCharType<CharString>::Result, char >::result));
+ assert_static((IsSameType<typename GetCharType<WideString>::Result, wchar_t>::result));
return implementation::utf8ToWide<WideString>(str, Int2Type<sizeof(wchar_t)>());
}
@@ -304,8 +302,8 @@ WideString utf8ToWide(const CharString& str)
template <class CharString, class WideString> inline
CharString wideToUtf8(const WideString& str)
{
- assert_static((IsSameType<typename StringTraits<CharString>::CharType, char >::result));
- assert_static((IsSameType<typename StringTraits<WideString>::CharType, wchar_t>::result));
+ assert_static((IsSameType<typename GetCharType<CharString>::Result, char >::result));
+ assert_static((IsSameType<typename GetCharType<WideString>::Result, wchar_t>::result));
return implementation::wideToUtf8<CharString>(str, Int2Type<sizeof(wchar_t)>());
}
@@ -319,17 +317,17 @@ template <class TargetString, class SourceString> inline
TargetString utf8CvrtTo(const SourceString& str, wchar_t, char) { return wideToUtf8<TargetString>(str); }
template <class TargetString, class SourceString> inline
-TargetString utf8CvrtTo(const SourceString& str, char, char) { return cvrtString<TargetString>(str); }
+TargetString utf8CvrtTo(const SourceString& str, char, char) { return copyStringTo<TargetString>(str); }
template <class TargetString, class SourceString> inline
-TargetString utf8CvrtTo(const SourceString& str, wchar_t, wchar_t) { return cvrtString<TargetString>(str); }
+TargetString utf8CvrtTo(const SourceString& str, wchar_t, wchar_t) { return copyStringTo<TargetString>(str); }
template <class TargetString, class SourceString> inline
TargetString utf8CvrtTo(const SourceString& str)
{
return utf8CvrtTo<TargetString>(str,
- typename StringTraits<SourceString>::CharType(),
- typename StringTraits<TargetString>::CharType());
+ typename GetCharType<SourceString>::Result(),
+ typename GetCharType<TargetString>::Result());
}
}
diff --git a/zen/win_ver.h b/zen/win_ver.h
index ca075bbe..6f2639c6 100644
--- a/zen/win_ver.h
+++ b/zen/win_ver.h
@@ -37,7 +37,7 @@ bool win7OrLater();
namespace impl
{
inline
-bool winXyOrLater(DWORD major, DWORD minor)
+bool winXyOrLater(DWORD major, DWORD minor) //migrate: hold version data as static variable, as soon as C++11 thread safe statics are available in VS
{
OSVERSIONINFO osvi = {};
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
diff --git a/zen/zstring.cpp b/zen/zstring.cpp
index 5331499f..a559f9de 100644
--- a/zen/zstring.cpp
+++ b/zen/zstring.cpp
@@ -6,7 +6,7 @@
#include "zstring.h"
#include <stdexcept>
-#include <boost/thread/once.hpp>
+#include <zen/stl_tools.h>
#ifdef FFS_WIN
#include "dll.h"
@@ -55,14 +55,14 @@ LeakChecker& LeakChecker::instance()
//caveat: function scope static initialization is not thread-safe in VS 2010! => make sure to call at app start!
namespace
{
-struct Dummy { Dummy() { LeakChecker::instance(); }} blah;
+const LeakChecker& dummy = LeakChecker::instance();
}
std::string LeakChecker::rawMemToString(const void* ptr, size_t size)
{
std::string output = std::string(reinterpret_cast<const char*>(ptr), size);
- output.erase(std::remove(output.begin(), output.end(), 0), output.end()); //remove intermediate 0-termination
+ vector_remove_if(output, [](char& c) { return c == 0; }); //remove intermediate 0-termination
if (output.size() > 100)
output.resize(100);
return output;
@@ -102,15 +102,13 @@ typedef int (WINAPI* CompareStringOrdinalFunc)(LPCWSTR lpString1,
LPCWSTR lpString2,
int cchCount2,
BOOL bIgnoreCase);
-SysDllFun<CompareStringOrdinalFunc> ordinalCompare; //caveat: function scope static initialization is not thread-safe in VS 2010!
-boost::once_flag initCmpStrOrdOnce = BOOST_ONCE_INIT;
+const SysDllFun<CompareStringOrdinalFunc> ordinalCompare = SysDllFun<CompareStringOrdinalFunc>(L"kernel32.dll", "CompareStringOrdinal");
}
int z_impl::compareFilenamesWin(const wchar_t* a, const wchar_t* b, size_t sizeA, size_t sizeB)
{
- boost::call_once(initCmpStrOrdOnce, []() { ordinalCompare = SysDllFun<CompareStringOrdinalFunc>(L"kernel32.dll", "CompareStringOrdinal"); });
-
+ //caveat: function scope static initialization is not thread-safe in VS 2010!
if (ordinalCompare) //this additional test has no noticeable performance impact
{
const int rv = ordinalCompare(a, //pointer to first string
diff --git a/zen/zstring.h b/zen/zstring.h
index 0ba9f108..ca5d99c8 100644
--- a/zen/zstring.h
+++ b/zen/zstring.h
@@ -85,24 +85,24 @@ public:
//############################## helper functions #############################################
#if defined(FFS_WIN) || defined(FFS_LINUX)
//Compare filenames: Windows does NOT distinguish between upper/lower-case, while Linux DOES
-template <class T, template <class, class> class SP, class AP> int cmpFileName(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs);
+template <class T, template <class, class> class SP, class AP> int cmpFileName(const zen::Zbase<T, SP, AP>& lhs, const zen::Zbase<T, SP, AP>& rhs);
struct LessFilename //case-insensitive on Windows, case-sensitive on Linux
{
template <class T, template <class, class> class SP, class AP>
- bool operator()(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs) const;
+ bool operator()(const zen::Zbase<T, SP, AP>& lhs, const zen::Zbase<T, SP, AP>& rhs) const;
};
struct EqualFilename //case-insensitive on Windows, case-sensitive on Linux
{
template <class T, template <class, class> class SP, class AP>
- bool operator()(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs) const;
+ bool operator()(const zen::Zbase<T, SP, AP>& lhs, const zen::Zbase<T, SP, AP>& rhs) const;
};
#endif
#ifdef FFS_WIN
template <template <class, class> class SP, class AP>
-void makeUpper(Zbase<wchar_t, SP, AP>& str);
+void makeUpper(zen::Zbase<wchar_t, SP, AP>& str);
#endif
#ifdef FFS_WIN //Windows stores filenames in wide character format
@@ -121,7 +121,7 @@ const Zchar FILE_NAME_SEPARATOR = '/';
//"The reason for all the fuss above" - Loki/SmartPtr
//a high-performant string for use as file name in multithreaded contexts
-typedef Zbase<Zchar, StorageRefCountThreadSafe, AllocatorFreeStoreChecked> Zstring;
+typedef zen::Zbase<Zchar, zen::StorageRefCountThreadSafe, AllocatorFreeStoreChecked> Zstring;
@@ -159,7 +159,7 @@ void makeUpperCaseWin(wchar_t* str, size_t size);
template <class T, template <class, class> class SP, class AP>
inline
-int cmpFileName(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs)
+int cmpFileName(const zen::Zbase<T, SP, AP>& lhs, const zen::Zbase<T, SP, AP>& rhs)
{
#ifdef FFS_WIN
return z_impl::compareFilenamesWin(lhs.data(), rhs.data(), lhs.length(), rhs.length());
@@ -171,7 +171,7 @@ int cmpFileName(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs)
template <class T, template <class, class> class SP, class AP>
inline
-bool LessFilename::operator()(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs) const
+bool LessFilename::operator()(const zen::Zbase<T, SP, AP>& lhs, const zen::Zbase<T, SP, AP>& rhs) const
{
#ifdef FFS_WIN
return z_impl::compareFilenamesWin(lhs.data(), rhs.data(), lhs.length(), rhs.length()) < 0;
@@ -183,7 +183,7 @@ bool LessFilename::operator()(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP
template <class T, template <class, class> class SP, class AP>
inline
-bool EqualFilename::operator()(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, AP>& rhs) const
+bool EqualFilename::operator()(const zen::Zbase<T, SP, AP>& lhs, const zen::Zbase<T, SP, AP>& rhs) const
{
#ifdef FFS_WIN
return z_impl::compareFilenamesWin(lhs.data(), rhs.data(), lhs.length(), rhs.length()) == 0;
@@ -197,7 +197,7 @@ bool EqualFilename::operator()(const Zbase<T, SP, AP>& lhs, const Zbase<T, SP, A
#ifdef FFS_WIN
template <template <class, class> class SP, class AP>
inline
-void makeUpper(Zbase<wchar_t, SP, AP>& str)
+void makeUpper(zen::Zbase<wchar_t, SP, AP>& str)
{
z_impl::makeUpperCaseWin(str.begin(), str.length());
}
bgstack15