diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/MainDialog.cpp | 530 | ||||
-rw-r--r-- | ui/MainDialog.h | 25 | ||||
-rw-r--r-- | ui/SmallDialogs.cpp | 113 | ||||
-rw-r--r-- | ui/SmallDialogs.h | 11 | ||||
-rw-r--r-- | ui/SyncDialog.cpp | 206 | ||||
-rw-r--r-- | ui/SyncDialog.h | 5 | ||||
-rw-r--r-- | ui/guiGenerated.cpp | 1047 | ||||
-rw-r--r-- | ui/guiGenerated.h | 212 |
8 files changed, 1469 insertions, 680 deletions
diff --git a/ui/MainDialog.cpp b/ui/MainDialog.cpp index 186126e2..94ad4708 100644 --- a/ui/MainDialog.cpp +++ b/ui/MainDialog.cpp @@ -15,6 +15,8 @@ #include <wx/file.h> #include "../library/customGrid.h" #include <algorithm> +#include "../library/tinyxml/tinyxml.h" +#include <wx/msgdlg.h> using namespace globalFunctions; @@ -32,8 +34,21 @@ MainDialog::MainDialog(wxFrame* frame, const wxString& cfgFileName, CustomLocale m_bpButtonCompare->SetLabel(_("&Compare")); m_bpButtonSync->SetLabel(_("&Synchronize")); - //initialize sync configuration - readConfigurationFromHD(cfgFileName, true); + //load list of last used configuration files + cfgFileHistory = new wxConfig(wxT("FreeFileSync")); + for (int i = CfgHistroyLength - 1; i >= 0; --i) //put files in reverse order to history + { + const wxString key = wxString(wxT("Selection")) + numberToWxString(i); + + wxString value; + if (cfgFileHistory->Read(key, &value)) + addCfgFileToHistory(value); + } + m_choiceLoad->SetSelection(0); + + //initialize and load configuration + readConfigurationFromXml(cfgFileName, true); + //readConfigurationFromHD(cfgFileName, true); leftOnlyFilesActive = true; leftNewerFilesActive = true; @@ -149,18 +164,6 @@ MainDialog::MainDialog(wxFrame* frame, const wxString& cfgFileName, CustomLocale //mainly to update row label sizes... writeGrid(currentGridData); - //load list of last used configuration files - cfgFileHistory = new wxConfig(wxT("FreeFileSync")); - for (int i = CfgHistroyLength - 1; i >= 0; --i) //put files in reverse order to history - { - const wxString key = wxString(wxT("Selection")) + numberToWxString(i); - - wxString value; - if (cfgFileHistory->Read(key, &value)) - addCfgFileToHistory(value); - } - m_choiceLoad->SetSelection(0); - //select rows only m_grid1->SetSelectionMode(wxGrid::wxGridSelectRows); m_grid2->SetSelectionMode(wxGrid::wxGridSelectRows); @@ -186,9 +189,23 @@ MainDialog::MainDialog(wxFrame* frame, const wxString& cfgFileName, CustomLocale case wxLANGUAGE_FRENCH: m_menuItemFrench->Check(); break; + case wxLANGUAGE_JAPANESE: + m_menuItemJapanese->Check(); + break; default: m_menuItemEnglish->Check(); } + + //create the compare status panel + compareStatus = new CompareStatus(this); + bSizer1->Insert(1, compareStatus, 0, wxEXPAND | wxBOTTOM, 5 ); + Layout(); //avoid screen flicker when panel is shown + compareStatus->Hide(); + + //correct height of middle grid + wxSize dirPickersize = sbSizer2->GetSize(); + wxSize swapButtonsize = bSizer69->GetSize(); + bSizer18->Insert(1, 0, dirPickersize.GetY() - swapButtonsize.GetY(), 0); } @@ -256,12 +273,14 @@ MainDialog::~MainDialog() else { if (cfgFileHistory->Exists(key)) - cfgFileHistory->DeleteEntry(key); + cfgFileHistory->DeleteEntry(key, false); } } delete cfgFileHistory; - writeConfigurationToHD(FreeFileSync::FfsLastConfigFile); //don't trow exceptions in destructors + //save configuration + writeConfigurationToXml(FreeFileSync::FfsLastConfigFile); //don't trow exceptions in destructors + //writeConfigurationToHD(FreeFileSync::FfsLastConfigFile); if (restartOnExit) //this is needed so that restart happens AFTER configuration was written! { //create new dialog @@ -638,9 +657,10 @@ public: void updateStatusText(const wxString& text) {} void initNewProcess(int objectsTotal, double dataTotal, int processID) {} void updateProcessedData(int objectsProcessed, double dataProcessed) {} - void triggerUI_Refresh(bool asyncProcessActive) {} - + void forceUiRefresh() {} private: + void abortThisProcess() {} + bool continueOnError; bool& unsolvedErrors; }; @@ -907,8 +927,9 @@ void MainDialog::onContextMenuSelection(wxCommandEvent& event) void MainDialog::OnEnterLeftDir( wxCommandEvent& event ) { - wxString newDir = m_directoryPanel1->GetValue(); - m_dirPicker1->SetPath(newDir); + wxString newDir = FreeFileSync::getFormattedDirectoryName(m_directoryPanel1->GetValue()); + if (wxDirExists(newDir)) + m_dirPicker1->SetPath(newDir); event.Skip(); } @@ -916,8 +937,9 @@ void MainDialog::OnEnterLeftDir( wxCommandEvent& event ) void MainDialog::OnEnterRightDir( wxCommandEvent& event ) { - wxString newDir = m_directoryPanel2->GetValue(); - m_dirPicker2->SetPath(newDir); + wxString newDir = FreeFileSync::getFormattedDirectoryName(m_directoryPanel2->GetValue()); + if (wxDirExists(newDir)) + m_dirPicker2->SetPath(newDir); event.Skip(); } @@ -1060,12 +1082,11 @@ bool FileDropEvent::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filen const wxString droppedFileName = filenames[0]; //test if ffs config file has been dropped - if (FreeFileSync::isFFS_ConfigFile(droppedFileName)) + if (FreeFileSync::isFfsConfigFile(droppedFileName)) { - mainDlg->readConfigurationFromHD(droppedFileName); + mainDlg->readConfigurationFromXml(droppedFileName); mainDlg->pushStatusInformation(_("Configuration loaded!")); } - else if (targetGrid == 1) onFilesDropped(droppedFileName, mainDlg->m_directoryPanel1, mainDlg->m_dirPicker1); @@ -1104,7 +1125,7 @@ void MainDialog::OnSaveConfig(wxCommandEvent& event) return; } } - writeConfigurationToHD(newFileName); + writeConfigurationToXml(newFileName); pushStatusInformation(_("Configuration saved!")); } @@ -1145,11 +1166,11 @@ void MainDialog::OnLoadConfiguration(wxCommandEvent& event) { if (!wxFileExists(newCfgFile)) wxMessageBox(_("The selected file does not exist anymore!"), _("Warning"), wxOK); - else if (!FreeFileSync::isFFS_ConfigFile(newCfgFile)) + else if (!FreeFileSync::isFfsConfigFile(newCfgFile)) wxMessageBox(_("The selected file does not contain a valid configuration!"), _("Warning"), wxOK); else { - readConfigurationFromHD(newCfgFile); + readConfigurationFromXml(newCfgFile); pushStatusInformation(_("Configuration loaded!")); } } @@ -1169,6 +1190,7 @@ void MainDialog::OnChoiceKeyEvent(wxKeyEvent& event) { //delete selected row cfgFileNames.erase(cfgFileNames.begin() + selectedItem - 1); m_choiceLoad->Delete(selectedItem); + m_choiceLoad->SetSelection(0); } } event.Skip(); @@ -1213,8 +1235,8 @@ void MainDialog::loadDefaultConfiguration() cfg.compareVar = CMP_BY_TIME_SIZE; //compare algorithm updateCompareButtons(); - cfg.includeFilter = wxT("*"); //include all files/folders - cfg.excludeFilter = wxEmptyString; //exlude nothing + cfg.includeFilter = wxT("*"); //include all files/folders + cfg.excludeFilter = wxEmptyString; //exclude nothing //set status of filter button cfg.filterIsActive = false; //do not filter by default @@ -1224,7 +1246,7 @@ void MainDialog::loadDefaultConfiguration() cfg.hideFiltered = false; //show filtered items m_checkBoxHideFilt->SetValue(cfg.hideFiltered); - cfg.useRecycleBin = false; //do not use: in case OS doesn't support this, user will have to activate first and then get the error message + cfg.useRecycleBin = FreeFileSync::recycleBinExists(); //set if OS supports it; else user will have to activate first and then get the error message cfg.continueOnError = false; widthNotMaximized = wxDefaultCoord; @@ -1234,8 +1256,378 @@ void MainDialog::loadDefaultConfiguration() } +inline +bool readXmlElementValue(string& output, const TiXmlElement* parent, const string& name) +{ + if (parent) + { + const TiXmlElement* child = parent->FirstChildElement(name); + if (child) + { + const char* text = child->GetText(); + if (text) //may be NULL!! + output = text; + else + output.clear(); + return true; + } + } + + return false; +} + + +inline +bool readXmlElementValue(int& output, const TiXmlElement* parent, const string& name) +{ + string temp; + if (readXmlElementValue(temp, parent, name)) + { + output = stringToInt(temp); + return true; + } + else + return false; +} + + +inline +bool readXmlElementValue(CompareVariant& output, const TiXmlElement* parent, const string& name) +{ + int dummy = 0; + if (readXmlElementValue(dummy, parent, name)) + { + output = CompareVariant(dummy); + return true; + } + else + return false; +} + + +inline +bool readXmlElementValue(SyncDirection& output, const TiXmlElement* parent, const string& name) +{ + int dummy = 0; + if (readXmlElementValue(dummy, parent, name)) + { + output = SyncDirection(dummy); + return true; + } + else + return false; +} + + +inline +bool readXmlElementValue(bool& output, const TiXmlElement* parent, const string& name) +{ + int dummy = 0; + if (readXmlElementValue(dummy, parent, name)) + { + output = bool(dummy); + return true; + } + else + return false; +} + + +bool MainDialog::parseXmlData(TiXmlElement* root, bool programStartup) +{ + if (root && (root->ValueStr() == string("FreeFileSync"))) //check for FFS configuration xml + { + TiXmlHandle hRoot(root); + + TiXmlElement* cmpSettings = hRoot.FirstChild("settings").FirstChild("comparison").ToElement(); + TiXmlElement* syncConfig = hRoot.FirstChild("settings").FirstChild("synchronization").FirstChild("directions").ToElement(); + TiXmlElement* miscSettings = hRoot.FirstChild("settings").FirstChild("miscellaneous").ToElement(); + TiXmlElement* filter = TiXmlHandle(miscSettings).FirstChild("filter").ToElement(); + + if (cmpSettings && syncConfig && miscSettings && filter) + { + string tempString; +//########################################################### + //read compare variant + if (!readXmlElementValue(cfg.compareVar, cmpSettings, "variant")) return false; + updateCompareButtons(); + + //read folder pair(s) - currently only one folderpair supported + TiXmlElement* folderPair = TiXmlHandle(cmpSettings).FirstChild("folders").FirstChild("pair").ToElement(); + if (!folderPair) return false; + + //read directories for comparison + if (!readXmlElementValue(tempString, folderPair, "left")) return false; + wxString leftDir = wxString::FromUTF8(tempString.c_str()); + m_directoryPanel1->SetValue(leftDir); + wxString leftDirFormatted = FreeFileSync::getFormattedDirectoryName(leftDir); + if (wxDirExists(leftDirFormatted)) + m_dirPicker1->SetPath(leftDirFormatted); + + if (!readXmlElementValue(tempString, folderPair, "right")) return false; + wxString rightDir = wxString::FromUTF8(tempString.c_str()); + m_directoryPanel2->SetValue(rightDir); + wxString rightDirFormatted = FreeFileSync::getFormattedDirectoryName(rightDir); + if (wxDirExists(rightDirFormatted)) + m_dirPicker2->SetPath(rightDirFormatted); +//########################################################### + //read sync configuration + if (!readXmlElementValue(cfg.syncConfiguration.exLeftSideOnly, syncConfig, "leftonly")) return false; + if (!readXmlElementValue(cfg.syncConfiguration.exRightSideOnly, syncConfig, "rightonly")) return false; + if (!readXmlElementValue(cfg.syncConfiguration.leftNewer, syncConfig, "leftnewer")) return false; + if (!readXmlElementValue(cfg.syncConfiguration.rightNewer, syncConfig, "rightnewer")) return false; + if (!readXmlElementValue(cfg.syncConfiguration.different, syncConfig, "different")) return false; +//########################################################### + //read filter settings + if (!readXmlElementValue(cfg.filterIsActive, filter, "active")) return false; + updateFilterButton(m_bpButtonFilter, cfg.filterIsActive); + + if (!readXmlElementValue(cfg.hideFiltered, filter, "hidefiltered")) return false; + m_checkBoxHideFilt->SetValue(cfg.hideFiltered); + + if (!readXmlElementValue(tempString, filter, "include")) return false; + cfg.includeFilter = wxString::FromUTF8(tempString.c_str()); + + if (!readXmlElementValue(tempString, filter, "exclude")) return false; + cfg.excludeFilter = wxString::FromUTF8(tempString.c_str()); +//########################################################### + //other + if (!readXmlElementValue(cfg.useRecycleBin, miscSettings, "recycler")) return false; + if (!readXmlElementValue(cfg.continueOnError, miscSettings, "continue")) return false; + +//########################################################### + //read GUI layout (optional!) + //apply window size and position at program startup ONLY + if (programStartup) + { + TiXmlElement* mainWindow = hRoot.FirstChild("layout").FirstChild("windows").FirstChild("main").ToElement(); + if (mainWindow) + { + //read application window size and position + int widthTmp = 0; // + int heighthTmp = 0; // + int posxTmp = 0; // read all parameters "at once" + int posyTmp = 0; // + bool maximizedTmp = false; + + if ( readXmlElementValue(widthTmp, mainWindow, "width") && + readXmlElementValue(heighthTmp, mainWindow, "height") && + readXmlElementValue(posxTmp, mainWindow, "posx") && + readXmlElementValue(posyTmp, mainWindow, "posy") && + readXmlElementValue(maximizedTmp, mainWindow, "maximized")) + { + widthNotMaximized = widthTmp; + heightNotMaximized = heighthTmp; + posXNotMaximized = posxTmp; + posYNotMaximized = posyTmp; + + //apply window size and position + SetSize(posXNotMaximized, posYNotMaximized, widthNotMaximized, heightNotMaximized); + Maximize(maximizedTmp); + } +//########################################################### + //read column widths + TiXmlElement* leftColumn = TiXmlHandle(mainWindow).FirstChild("leftcolumns").FirstChild("width").ToElement(); + for (int i = 0; i < m_grid1->GetNumberCols(); ++i) + { + if (leftColumn) + { + const char* width = leftColumn->GetText(); + if (width) //may be NULL!! + m_grid1->SetColSize(i, stringToInt(width)); + leftColumn = leftColumn->NextSiblingElement(); + } + else break; + } + + TiXmlElement* rightColumn = TiXmlHandle(mainWindow).FirstChild("rightcolumns").FirstChild("width").ToElement(); + for (int i = 0; i < m_grid2->GetNumberCols(); ++i) + { + if (rightColumn) + { + const char* width = rightColumn->GetText(); + if (width) //may be NULL!! + m_grid2->SetColSize(i, stringToInt(width)); + + rightColumn = rightColumn->NextSiblingElement(); + } + else break; + } + } + } + return true; +//########################################################### + } + } + return false; +} + + +void MainDialog::readConfigurationFromXml(const wxString& filename, bool programStartup) +{ + if (wxFileExists(filename)) + { //workaround to get a FILE* from a unicode filename + wxFFile dummyFile(filename, wxT("rb")); + if (dummyFile.IsOpened()) + { + FILE* inputFile = dummyFile.fp(); + + TiXmlBase::SetCondenseWhiteSpace(false); //do not condense whitespace characters + TiXmlDocument doc; + if ( doc.LoadFile(inputFile) && //fails if inputFile is no proper XML + parseXmlData(doc.RootElement(), programStartup)) + addCfgFileToHistory(filename); //put filename on list of last used config files + else + { //handle error: parsing + wxMessageBox(wxString(_("Error parsing configuration file ")) + wxT("\"") + filename + wxT("\""), _("Error"), wxOK | wxICON_ERROR); + if (programStartup) + loadDefaultConfiguration(); + } + return; + } + } + + //handle error: file load + if (programStartup) + loadDefaultConfiguration(); + else + wxMessageBox(wxString(_("Could not open configuration file ")) + wxT("\"") + filename + wxT("\""), _("Error"), wxOK | wxICON_ERROR); +} + + +void addXmlElement(TiXmlElement* parent, const string& name, const string& value) +{ + if (parent) + { + TiXmlElement* subElement = new TiXmlElement(name); + parent->LinkEndChild(subElement); + subElement->LinkEndChild(new TiXmlText(value)); + } +} + + +void addXmlElement(TiXmlElement* parent, const string& name, const int value) +{ + addXmlElement(parent, name, numberToString(value)); +} + + +void MainDialog::writeConfigurationToXml(const wxString& filename) +{ + //workaround to get a FILE* from a unicode filename + wxFFile dummyFile(filename, wxT("wb")); + if (!dummyFile.IsOpened()) + { + wxMessageBox(wxString(_("Could not write configuration file ")) + wxT("\"") + filename + wxT("\""), _("Error"), wxOK | wxICON_ERROR); + return; + } + FILE* outputFile = dummyFile.fp(); + + TiXmlBase::SetCondenseWhiteSpace(false); //do not condense whitespace characters + TiXmlDocument xmlDoc; + TiXmlDeclaration* decl = new TiXmlDeclaration("1.0", "UTF-8", ""); //delete won't be necessary later; ownership passed to TiXmlDocument! + xmlDoc.LinkEndChild(decl); + + TiXmlElement* root = new TiXmlElement("FreeFileSync"); + xmlDoc.LinkEndChild(root); + + TiXmlElement* settings = new TiXmlElement("settings"); + root->LinkEndChild(settings); + +//########################################################### + TiXmlElement* cmpSettings = new TiXmlElement("comparison"); + settings->LinkEndChild(cmpSettings); + + //write compare algorithm + addXmlElement(cmpSettings, "variant", cfg.compareVar); + + //write folder pair(s) + TiXmlElement* folders = new TiXmlElement("folders"); + cmpSettings->LinkEndChild(folders); + + TiXmlElement* folderPair = new TiXmlElement("pair"); + folders->LinkEndChild(folderPair); + + addXmlElement(folderPair, "left", string((m_directoryPanel1->GetValue()).ToUTF8())); + addXmlElement(folderPair, "right", string((m_directoryPanel2->GetValue()).ToUTF8())); + +//########################################################### + TiXmlElement* syncSettings = new TiXmlElement("synchronization"); + settings->LinkEndChild(syncSettings); + + //write sync configuration + TiXmlElement* syncConfig = new TiXmlElement("directions"); + syncSettings->LinkEndChild(syncConfig); + + addXmlElement(syncConfig, "leftonly", cfg.syncConfiguration.exLeftSideOnly); + addXmlElement(syncConfig, "rightonly", cfg.syncConfiguration.exRightSideOnly); + addXmlElement(syncConfig, "leftnewer", cfg.syncConfiguration.leftNewer); + addXmlElement(syncConfig, "rightnewer", cfg.syncConfiguration.rightNewer); + addXmlElement(syncConfig, "different", cfg.syncConfiguration.different); + +//########################################################### + TiXmlElement* miscSettings = new TiXmlElement("miscellaneous"); + settings->LinkEndChild(miscSettings); + + //write filter settings + TiXmlElement* filter = new TiXmlElement("filter"); + miscSettings->LinkEndChild(filter); + + addXmlElement(filter, "active", cfg.filterIsActive); + addXmlElement(filter, "hidefiltered", cfg.hideFiltered); + addXmlElement(filter, "include", string((cfg.includeFilter).ToUTF8())); + addXmlElement(filter, "exclude", string((cfg.excludeFilter).ToUTF8())); + + //other + addXmlElement(miscSettings, "recycler", cfg.useRecycleBin); + addXmlElement(miscSettings, "continue", cfg.continueOnError); +//########################################################### + TiXmlElement* guiLayout = new TiXmlElement("layout"); + root->LinkEndChild(guiLayout); + + TiXmlElement* windows = new TiXmlElement("windows"); + guiLayout->LinkEndChild(windows); + + TiXmlElement* mainWindow = new TiXmlElement("main"); + windows->LinkEndChild(mainWindow); + + //window size + addXmlElement(mainWindow, "width", widthNotMaximized); + addXmlElement(mainWindow, "height", heightNotMaximized); + + //window position + addXmlElement(mainWindow, "posx", posXNotMaximized); + addXmlElement(mainWindow, "posy", posYNotMaximized); + addXmlElement(mainWindow, "maximized", IsMaximized()); + + //write column sizes + TiXmlElement* leftColumn = new TiXmlElement("leftcolumns"); + mainWindow->LinkEndChild(leftColumn); + + for (int i = 0; i < m_grid1->GetNumberCols(); ++i) + addXmlElement(leftColumn, "width", m_grid1->GetColSize(i)); + + TiXmlElement* rightColumn = new TiXmlElement("rightcolumns"); + mainWindow->LinkEndChild(rightColumn); + + for (int i = 0; i < m_grid2->GetNumberCols(); ++i) + addXmlElement(rightColumn, "width", m_grid2->GetColSize(i)); + + if (!xmlDoc.SaveFile(outputFile)) + { + wxMessageBox(wxString(_("Could not write configuration file ")) + wxT("\"") + filename + wxT("\""), _("Error"), wxOK | wxICON_ERROR); + return; + } + + //put filename on list of last used config files + addCfgFileToHistory(filename); +} + + void MainDialog::readConfigurationFromHD(const wxString& filename, bool programStartup) { + assert(false); //deprecated + char bigBuffer[10000]; if (wxFileExists(filename)) @@ -1243,7 +1635,6 @@ void MainDialog::readConfigurationFromHD(const wxString& filename, bool programS wxFFileInputStream config(filename); if (config.IsOk()) { - //read FFS identifier config.Read(bigBuffer, FreeFileSync::FfsConfigFileID.size()); bigBuffer[FreeFileSync::FfsConfigFileID.size()] = 0; @@ -1340,12 +1731,14 @@ void MainDialog::readConfigurationFromHD(const wxString& filename, bool programS if (programStartup) loadDefaultConfiguration(); else - wxMessageBox(wxString(_("Could not read configuration file ")) + wxT("\"") + filename + wxT("\""), _("An exception occured!"), wxOK | wxICON_ERROR); + wxMessageBox(wxString(_("Could not read configuration file ")) + wxT("\"") + filename + wxT("\""), _("Error"), wxOK | wxICON_ERROR); } void MainDialog::writeConfigurationToHD(const wxString& filename) { + assert(false); //deprecated + wxFFileOutputStream config(filename); if (!config.IsOk()) { @@ -1609,19 +2002,19 @@ void MainDialog::OnCompare(wxCommandEvent &event) { if (m_directoryPanel1->GetValue().IsEmpty() || m_directoryPanel2->GetValue().IsEmpty()) { - wxMessageBox(_("Please select directories for both sides!"), _("Information")); + wxMessageBox(_("Please select both left and right directories!"), _("Information")); return; } clearStatusBar(); - //check if directories exist if loaded by config file - if (!wxDirExists(m_directoryPanel1->GetValue())) + //check if directories exist (if loaded by config file) + if (!wxDirExists(FreeFileSync::getFormattedDirectoryName(m_directoryPanel1->GetValue()))) { wxMessageBox(_("Directory on the left does not exist. Please select a new one!"), _("Warning"), wxICON_WARNING); return; } - else if (!wxDirExists(m_directoryPanel2->GetValue())) + else if (!wxDirExists(FreeFileSync::getFormattedDirectoryName(m_directoryPanel2->GetValue()))) { wxMessageBox(_("Directory on the right does not exist. Please select a new one!"), _("Warning"), wxICON_WARNING); return; @@ -2267,9 +2660,8 @@ CompareStatusUpdater::CompareStatusUpdater(MainDialog* dlg) : mainDialog->m_menubar1->EnableTop(2, false); //display status panel during compare - statusPanel = new CompareStatus(mainDialog); - mainDialog->bSizer1->Insert(1, statusPanel, 0, wxEXPAND | wxBOTTOM, 5 ); - + mainDialog->compareStatus->init(); //clear old values + mainDialog->compareStatus->Show(); //show abort button mainDialog->m_buttonAbort->Enable(); @@ -2278,7 +2670,7 @@ CompareStatusUpdater::CompareStatusUpdater(MainDialog* dlg) : mainDialog->m_bpButtonCompare->Hide(); mainDialog->m_buttonAbort->SetFocus(); - //updateUI_Now(); + //updateUiNow(); mainDialog->bSizer1->Layout(); //both sizers need to recalculate! mainDialog->bSizer6->Layout(); } @@ -2321,10 +2713,9 @@ CompareStatusUpdater::~CompareStatusUpdater() mainDialog->m_bpButtonCompare->Enable(); mainDialog->m_bpButtonCompare->Show(); - //remove status panel from main window - mainDialog->bSizer1->Detach(statusPanel); - statusPanel->Destroy(); - updateUI_Now(); + //hide status panel from main window + mainDialog->compareStatus->Hide(); + updateUiNow(); mainDialog->Layout(); mainDialog->Refresh(); } @@ -2333,7 +2724,7 @@ CompareStatusUpdater::~CompareStatusUpdater() inline void CompareStatusUpdater::updateStatusText(const wxString& text) { - statusPanel->setStatusText_NoUpdate(text); + mainDialog->compareStatus->setStatusText_NoUpdate(text); } @@ -2344,7 +2735,11 @@ void CompareStatusUpdater::initNewProcess(int objectsTotal, double dataTotal, in if (currentProcess == FreeFileSync::scanningFilesProcess) ; else if (currentProcess == FreeFileSync::compareFileContentProcess) - statusPanel->resetCmpGauge(objectsTotal, dataTotal); + { + mainDialog->compareStatus->switchToCompareBytewise(objectsTotal, dataTotal); + mainDialog->Layout(); + } + else assert(false); } @@ -2353,9 +2748,9 @@ inline void CompareStatusUpdater::updateProcessedData(int objectsProcessed, double dataProcessed) { if (currentProcess == FreeFileSync::scanningFilesProcess) - statusPanel->incScannedObjects_NoUpdate(objectsProcessed); + mainDialog->compareStatus->incScannedObjects_NoUpdate(objectsProcessed); else if (currentProcess == FreeFileSync::compareFileContentProcess) - statusPanel->incProcessedCmpData_NoUpdate(objectsProcessed, dataProcessed); + mainDialog->compareStatus->incProcessedCmpData_NoUpdate(objectsProcessed, dataProcessed); else assert(false); } @@ -2365,7 +2760,7 @@ int CompareStatusUpdater::reportError(const wxString& text) if (continueOnError) return StatusUpdater::continueNext; - statusPanel->updateStatusPanelNow(); + mainDialog->compareStatus->updateStatusPanelNow(); wxString errorMessage = text + _("\n\nContinue with next object, retry or abort comparison?"); @@ -2394,13 +2789,15 @@ int CompareStatusUpdater::reportError(const wxString& text) inline -void CompareStatusUpdater::triggerUI_Refresh(bool asyncProcessActive) +void CompareStatusUpdater::forceUiRefresh() { - if (abortionRequested && !asyncProcessActive) - throw AbortThisProcess(); //abort can be triggered by syncStatusFrame + mainDialog->compareStatus->updateStatusPanelNow(); +} + - if (updateUI_IsAllowed()) //test if specific time span between ui updates is over - statusPanel->updateStatusPanelNow(); +void CompareStatusUpdater::abortThisProcess() +{ + throw AbortThisProcess(); //abort can be triggered by syncStatusFrame } //######################################################################################################## @@ -2410,7 +2807,7 @@ SyncStatusUpdater::SyncStatusUpdater(wxWindow* dlg, bool continueOnError) : { syncStatusFrame = new SyncStatus(this, dlg); syncStatusFrame->Show(); - updateUI_Now(); + updateUiNow(); } @@ -2507,15 +2904,16 @@ int SyncStatusUpdater::reportError(const wxString& text) } -void SyncStatusUpdater::triggerUI_Refresh(bool asyncProcessActive) +void SyncStatusUpdater::forceUiRefresh() { - if (abortionRequested && !asyncProcessActive) - throw AbortThisProcess(); //abort can be triggered by syncStatusFrame - - if (updateUI_IsAllowed()) //test if specific time span between ui updates is over - syncStatusFrame->updateStatusDialogNow(); + syncStatusFrame->updateStatusDialogNow(); } + +void SyncStatusUpdater::abortThisProcess() +{ + throw AbortThisProcess(); //abort can be triggered by syncStatusFrame +} //######################################################################################################## @@ -2635,3 +3033,11 @@ void MainDialog::OnMenuLangFrench(wxCommandEvent& event) event.Skip(); } + +void MainDialog::OnMenuLangJapanese(wxCommandEvent& event) +{ + programLanguage->loadLanguageFile(wxLANGUAGE_JAPANESE); //language is a global attribute + restartOnExit = true; + Destroy(); + event.Skip(); +} diff --git a/ui/MainDialog.h b/ui/MainDialog.h index 3ef7dbf5..4bf5504c 100644 --- a/ui/MainDialog.h +++ b/ui/MainDialog.h @@ -10,7 +10,6 @@ #ifndef MAINDIALOG_H #define MAINDIALOG_H -#include "../library/wxWidgets.h" #include "guiGenerated.h" #include "../FreeFileSync.h" #include "syncDialog.h" @@ -36,6 +35,7 @@ extern int leadingPanel; class CompareStatusUpdater; class FileDropEvent; +class TiXmlElement; class MainDialog : public GuiGenerated { @@ -47,9 +47,16 @@ public: ~MainDialog(); private: + void loadDefaultConfiguration(); + + void readConfigurationFromXml(const wxString& filename, bool programStartup = false); + bool parseXmlData(TiXmlElement* root, bool programStartup); + void writeConfigurationToXml(const wxString& filename); + + //deprecated void readConfigurationFromHD(const wxString& filename, bool programStartup = false); void writeConfigurationToHD(const wxString& filename); - void loadDefaultConfiguration(); + // void updateViewFilterButtons(); void updateFilterButton(wxBitmapButton* filterButton, bool isActive); @@ -137,6 +144,7 @@ private: void OnMenuLangEnglish( wxCommandEvent& event); void OnMenuLangGerman( wxCommandEvent& event); void OnMenuLangFrench( wxCommandEvent& event); + void OnMenuLangJapanese( wxCommandEvent& event); void enableSynchronization(bool value); @@ -174,6 +182,9 @@ private: wxLongLong lastStatusChange; stack<wxString> stackObjects; + //compare status panel (hidden on start, shown when comparing) + CompareStatus* compareStatus; + //save the last used config filenames wxConfig* cfgFileHistory; vector<wxString> cfgFileNames; @@ -228,11 +239,12 @@ public: void updateProcessedData(int objectsProcessed, double dataProcessed); int reportError(const wxString& text); - void triggerUI_Refresh(bool asyncProcessActive); + void forceUiRefresh(); private: + void abortThisProcess(); + MainDialog* mainDialog; - CompareStatus* statusPanel; bool continueOnError; int currentProcess; }; @@ -249,11 +261,12 @@ public: void updateProcessedData(int objectsProcessed, double dataProcessed); int reportError(const wxString& text); - void triggerUI_Refresh(bool asyncProcessActive); + void forceUiRefresh(); private: - SyncStatus* syncStatusFrame; + void abortThisProcess(); + SyncStatus* syncStatusFrame; bool continueError; wxArrayString unhandledErrors; //list of non-resolved errors }; diff --git a/ui/SmallDialogs.cpp b/ui/SmallDialogs.cpp index 7965a5c9..dfd16108 100644 --- a/ui/SmallDialogs.cpp +++ b/ui/SmallDialogs.cpp @@ -25,9 +25,10 @@ AboutDlg::AboutDlg(wxWindow* window) : AboutDlgGenerated(window) m_animationControl1->SetAnimation(*GlobalResources::animationMoney); m_animationControl1->Play(); //Note: The animation is created hidden(!) to not disturb constraint based window creation; - m_animationControl1->Show(); //an empty animation consumes a lot of space that later is NOT removed anymore. + m_animationControl1->Show(); // m_button8->SetFocus(); + Fit(); } @@ -49,9 +50,40 @@ void AboutDlg::OnOK(wxCommandEvent& event) HelpDlg::HelpDlg(wxWindow* window) : HelpDlgGenerated(window) { - m_button8->SetFocus(); + m_notebook1->SetFocus(); + + //populate decision trees: "compare by date" + wxTreeItemId treeRoot = m_treeCtrl1->AddRoot(_("DECISION TREE")); + wxTreeItemId treeBothSides = m_treeCtrl1->AppendItem(treeRoot, _("file exists on both sides")); + wxTreeItemId treeOneSide = m_treeCtrl1->AppendItem(treeRoot, _("on one side only")); + + m_treeCtrl1->AppendItem(treeOneSide, _("- left")); + m_treeCtrl1->AppendItem(treeOneSide, _("- right")); + + m_treeCtrl1->AppendItem(treeBothSides, _("- equal")); + wxTreeItemId treeDifferent = m_treeCtrl1->AppendItem(treeBothSides, _("different")); + + m_treeCtrl1->AppendItem(treeDifferent, _("- left newer")); + m_treeCtrl1->AppendItem(treeDifferent, _("- right newer")); + m_treeCtrl1->AppendItem(treeDifferent, _("- same date (different size)")); + + m_treeCtrl1->ExpandAll(); + + //populate decision trees: "compare by content" + wxTreeItemId tree2Root = m_treeCtrl2->AddRoot(_("DECISION TREE")); + wxTreeItemId tree2BothSides = m_treeCtrl2->AppendItem(tree2Root, _("file exists on both sides")); + wxTreeItemId tree2OneSide = m_treeCtrl2->AppendItem(tree2Root, _("on one side only")); + + m_treeCtrl2->AppendItem(tree2OneSide, _("- left")); + m_treeCtrl2->AppendItem(tree2OneSide, _("- right")); + + m_treeCtrl2->AppendItem(tree2BothSides, _("- equal")); + m_treeCtrl2->AppendItem(tree2BothSides, _("- different")); + + m_treeCtrl2->ExpandAll(); } + HelpDlg::~HelpDlg() {} @@ -76,17 +108,35 @@ FilterDlg::FilterDlg(wxWindow* window, wxString& filterIncl, wxString& filterExc m_bitmap8->SetBitmap(*GlobalResources::bitmapInclude); m_bitmap9->SetBitmap(*GlobalResources::bitmapExclude); + m_bpButtonHelp->SetBitmapLabel(*GlobalResources::bitmapHelp); m_textCtrlInclude->SetValue(includeFilter); m_textCtrlExclude->SetValue(excludeFilter); + + m_panel13->Hide(); + Fit(); } FilterDlg::~FilterDlg() {} -void FilterDlg::OnClose(wxCloseEvent& event) +void FilterDlg::OnHelp(wxCommandEvent& event) { - EndModal(0); + m_bpButtonHelp->Hide(); + m_panel13->Show(); + Fit(); + + event.Skip(); +} + + +void FilterDlg::OnDefault(wxCommandEvent& event) +{ + m_textCtrlInclude->SetValue(wxT("*")); + m_textCtrlExclude->SetValue(wxEmptyString); + + //changes to mainDialog are only committed when the OK button is pressed + event.Skip(); } @@ -107,13 +157,9 @@ void FilterDlg::OnCancel(wxCommandEvent& event) } -void FilterDlg::OnDefault(wxCommandEvent& event) +void FilterDlg::OnClose(wxCloseEvent& event) { - m_textCtrlInclude->SetValue(wxT("*")); - m_textCtrlExclude->SetValue(wxEmptyString); - - //changes to mainDialog are only committed when the OK button is pressed - event.Skip(); + EndModal(0); } //######################################################################################## @@ -370,13 +416,13 @@ void SyncStatus::updateStatusDialogNow() //do the ui update bSizer28->Layout(); bSizer31->Layout(); - updateUI_Now(); + updateUiNow(); //support for pause button while (processPaused && currentProcessIsRunning) { wxMilliSleep(UI_UPDATE_INTERVAL); - updateUI_Now(); + updateUiNow(); } } @@ -501,29 +547,47 @@ void SyncStatus::OnClose(wxCloseEvent& event) CompareStatus::CompareStatus(wxWindow* parentWindow) : CompareStatusGenerated(parentWindow), scannedObjects(0), + scalingFactorCmp(0), totalCmpData(0), processedCmpData(0), - scalingFactorCmp(0), - processedCmpObjects(0), - totalCmpObjects(0) + totalCmpObjects(0), + processedCmpObjects(0) /*timeRemaining(0), timeRemainingTimeStamp(0)*/ +{ + init(); +} + + +CompareStatus::~CompareStatus() {} + -{ //initialize gauge +void CompareStatus::init() +{ + //initialize gauge m_gauge2->SetRange(50000); m_gauge2->SetValue(0); //initially hide status that's relevant for comparing bytewise only bSizer42->Hide(sbSizer13); - bSizer42->Hide(sbSizer11); + m_gauge2->Hide(); bSizer42->Layout(); -} + scannedObjects = 0; + scalingFactorCmp = 0; -CompareStatus::~CompareStatus() {} + totalCmpData = 0; + processedCmpData = 0; + totalCmpObjects = 0; + processedCmpObjects = 0; + + timeElapsed.Start(); //measure total time + + updateStatusPanelNow(); +} -void CompareStatus::resetCmpGauge(int totalCmpObjectsToProcess, double totalCmpDataToProcess) +void CompareStatus::switchToCompareBytewise(int totalCmpObjectsToProcess, double totalCmpDataToProcess) { processedCmpData = 0; totalCmpData = totalCmpDataToProcess; @@ -538,7 +602,7 @@ void CompareStatus::resetCmpGauge(int totalCmpObjectsToProcess, double totalCmpD //show status for comparing bytewise bSizer42->Show(sbSizer13); - bSizer42->Show(sbSizer11); + m_gauge2->Show(); bSizer42->Layout(); } @@ -581,6 +645,7 @@ void CompareStatus::updateStatusPanelNow() //remaining bytes left for file comparison const wxString remainingBytes = FreeFileSync::formatFilesizeToShortString(totalCmpData - processedCmpData); m_staticTextDataToCompare->SetLabel(remainingBytes); + /* //remaining time in seconds if (timeRemaining != 0) @@ -589,7 +654,11 @@ void CompareStatus::updateStatusPanelNow() m_staticTextRemainingTime->SetLabel(numberToWxString(time) + " s"); } */ + + //time elapsed + m_staticTextTimeElapsed->SetLabel((wxTimeSpan::Milliseconds(timeElapsed.Time())).Format()); + //do the ui update bSizer42->Layout(); - updateUI_Now(); + updateUiNow(); } diff --git a/ui/SmallDialogs.h b/ui/SmallDialogs.h index e97362d5..b70e6105 100644 --- a/ui/SmallDialogs.h +++ b/ui/SmallDialogs.h @@ -38,6 +38,7 @@ public: static const int okayButtonPressed = 25; private: + void OnHelp(wxCommandEvent& event); void OnDefault(wxCommandEvent& event); void OnOK(wxCommandEvent& event); void OnCancel(wxCommandEvent& event); @@ -164,7 +165,9 @@ public: CompareStatus(wxWindow* parentWindow); ~CompareStatus(); - void resetCmpGauge(int totalCmpObjectsToProcess, double totalCmpDataToProcess); + void init(); //initialize all status values + + void switchToCompareBytewise(int totalCmpObjectsToProcess, double totalCmpDataToProcess); void incScannedObjects_NoUpdate(int number); void incProcessedCmpData_NoUpdate(int objectsProcessed, double dataProcessed); void setStatusText_NoUpdate(const wxString& text); @@ -175,12 +178,14 @@ private: unsigned int scannedObjects; wxString currentStatusText; + wxStopWatch timeElapsed; + //gauge variables + double scalingFactorCmp; //nr of elements has to be normalized to smaller nr. because of range of int limitation double totalCmpData; //each data element represents one byte for proper progress indicator scaling double processedCmpData; - double scalingFactorCmp; //nr of elements has to be normalized to smaller nr. because of range of int limitation - int processedCmpObjects; //each object represents a file or directory processed int totalCmpObjects; + int processedCmpObjects; //each object represents a file or directory processed /* //remaining time RemainingTime calcTimeLeft; diff --git a/ui/SyncDialog.cpp b/ui/SyncDialog.cpp index 3fa8619c..6d838f05 100644 --- a/ui/SyncDialog.cpp +++ b/ui/SyncDialog.cpp @@ -4,6 +4,10 @@ #include <wx/msgdlg.h> #include <wx/stdpaths.h> #include <wx/ffile.h> +#ifdef FFS_WIN +#include <windows.h> +#include <shlobj.h> +#endif // FFS_WIN using namespace std; @@ -80,81 +84,81 @@ void SyncDialog::updateConfigIcons(wxBitmapButton* button1, { if (syncConfig.exLeftSideOnly == SYNC_DIR_RIGHT) { - button1->SetBitmapLabel(*GlobalResources::bitmapRightArrow); + button1->SetBitmapLabel(*GlobalResources::bitmapArrowRightCr); button1->SetToolTip(_("Copy from left to right")); } else if (syncConfig.exLeftSideOnly == SYNC_DIR_LEFT) { - button1->SetBitmapLabel(*GlobalResources::bitmapDelete); + button1->SetBitmapLabel(*GlobalResources::bitmapDeleteLeft); button1->SetToolTip(_("Delete files/folders existing on left side only")); } else if (syncConfig.exLeftSideOnly == SYNC_DIR_NONE) { - button1->SetBitmapLabel(*GlobalResources::bitmapNoArrow); + button1->SetBitmapLabel(*GlobalResources::bitmapArrowNone); button1->SetToolTip(_("Do nothing")); } if (syncConfig.exRightSideOnly == SYNC_DIR_RIGHT) { - button2->SetBitmapLabel(*GlobalResources::bitmapDelete); + button2->SetBitmapLabel(*GlobalResources::bitmapDeleteRight); button2->SetToolTip(_("Delete files/folders existing on right side only")); } else if (syncConfig.exRightSideOnly == SYNC_DIR_LEFT) { - button2->SetBitmapLabel(*GlobalResources::bitmapLeftArrow); + button2->SetBitmapLabel(*GlobalResources::bitmapArrowLeftCr); button2->SetToolTip(_("Copy from right to left")); } else if (syncConfig.exRightSideOnly == SYNC_DIR_NONE) { - button2->SetBitmapLabel(*GlobalResources::bitmapNoArrow); + button2->SetBitmapLabel(*GlobalResources::bitmapArrowNone); button2->SetToolTip(_("Do nothing")); } if (syncConfig.leftNewer == SYNC_DIR_RIGHT) { - button3->SetBitmapLabel(*GlobalResources::bitmapRightArrow); + button3->SetBitmapLabel(*GlobalResources::bitmapArrowRight); button3->SetToolTip(_("Copy from left to right overwriting")); } else if (syncConfig.leftNewer == SYNC_DIR_LEFT) { - button3->SetBitmapLabel(*GlobalResources::bitmapLeftArrow); + button3->SetBitmapLabel(*GlobalResources::bitmapArrowLeft); button3->SetToolTip(_("Copy from right to left overwriting")); } else if (syncConfig.leftNewer == SYNC_DIR_NONE) { - button3->SetBitmapLabel(*GlobalResources::bitmapNoArrow); + button3->SetBitmapLabel(*GlobalResources::bitmapArrowNone); button3->SetToolTip(_("Do nothing")); } if (syncConfig.rightNewer == SYNC_DIR_RIGHT) { - button4->SetBitmapLabel(*GlobalResources::bitmapRightArrow); + button4->SetBitmapLabel(*GlobalResources::bitmapArrowRight); button4->SetToolTip(_("Copy from left to right overwriting")); } else if (syncConfig.rightNewer == SYNC_DIR_LEFT) { - button4->SetBitmapLabel(*GlobalResources::bitmapLeftArrow); + button4->SetBitmapLabel(*GlobalResources::bitmapArrowLeft); button4->SetToolTip(_("Copy from right to left overwriting")); } else if (syncConfig.rightNewer == SYNC_DIR_NONE) { - button4->SetBitmapLabel(*GlobalResources::bitmapNoArrow); + button4->SetBitmapLabel(*GlobalResources::bitmapArrowNone); button4->SetToolTip(_("Do nothing")); } if (syncConfig.different == SYNC_DIR_RIGHT) { - button5->SetBitmapLabel(*GlobalResources::bitmapRightArrow); + button5->SetBitmapLabel(*GlobalResources::bitmapArrowRight); button5->SetToolTip(_("Copy from left to right overwriting")); } else if (syncConfig.different == SYNC_DIR_LEFT) { - button5->SetBitmapLabel(*GlobalResources::bitmapLeftArrow); + button5->SetBitmapLabel(*GlobalResources::bitmapArrowLeft); button5->SetToolTip(_("Copy from right to left overwriting")); } else if (syncConfig.different == SYNC_DIR_NONE) { - button5->SetBitmapLabel(*GlobalResources::bitmapNoArrow); + button5->SetBitmapLabel(*GlobalResources::bitmapArrowNone); button5->SetToolTip(_("Do nothing")); } } @@ -245,7 +249,7 @@ void SyncDialog::OnSelectRecycleBin(wxCommandEvent& event) { if (!FreeFileSync::recycleBinExists()) { - wxMessageBox(_("It was not possible to gain access to Recycle Bin!\n\nIt's likely that you are not using Windows XP. (Probably Vista)\nIf you want this feature included, please contact the author. :)"), _("Error") , wxOK | wxICON_ERROR); + wxMessageBox(_("It was not possible to initialize the Recycle Bin!\n\nIt's likely that you are not using Windows.\nIf you want this feature included, please contact the author. :)"), _("Error") , wxOK | wxICON_ERROR); m_checkBoxUseRecycler->SetValue(false); } } @@ -461,7 +465,7 @@ void BatchDialog::OnSelectRecycleBin(wxCommandEvent& event) { if (!FreeFileSync::recycleBinExists()) { - wxMessageBox(_("It was not possible to gain access to Recycle Bin!\n\nIt's likely that you are not using Windows XP. (Probably Vista)\nIf you want this feature included, please contact the author. :)"), _("Error") , wxOK | wxICON_ERROR); + wxMessageBox(_("It was not possible to initialize the Recycle Bin!\n\nIt's likely that you are not using Windows.\nIf you want this feature included, please contact the author. :)"), _("Error") , wxOK | wxICON_ERROR); m_checkBoxUseRecycler->SetValue(false); } } @@ -498,7 +502,7 @@ void BatchDialog::OnCancel(wxCommandEvent& event) } -void BatchDialog::OnCreateJob(wxCommandEvent& event) +void BatchDialog::OnCreateBatchJob(wxCommandEvent& event) { if (m_directoryPanel1->GetValue().IsEmpty() || m_directoryPanel2->GetValue().IsEmpty()) { @@ -507,12 +511,12 @@ void BatchDialog::OnCreateJob(wxCommandEvent& event) } //check if directories exist if loaded by config file - if (!wxDirExists(m_directoryPanel1->GetValue())) + if (!wxDirExists(FreeFileSync::getFormattedDirectoryName(m_directoryPanel1->GetValue()))) { wxMessageBox(_("Left directory does not exist. Please select a new one!"), _("Warning"), wxICON_WARNING); return; } - else if (!wxDirExists(m_directoryPanel2->GetValue())) + else if (!wxDirExists(FreeFileSync::getFormattedDirectoryName(m_directoryPanel2->GetValue()))) { wxMessageBox(_("Right directory does not exist. Please select a new one!"), _("Warning"), wxICON_WARNING); return; @@ -520,10 +524,10 @@ void BatchDialog::OnCreateJob(wxCommandEvent& event) //get a filename #ifdef FFS_WIN - wxString fileName = wxT("SyncJob.cmd"); //proposal - wxFileDialog* filePicker = new wxFileDialog(this, wxEmptyString, wxEmptyString, fileName, wxString(_("Command file")) + wxT(" (*.cmd)|*.cmd"), wxFD_SAVE); + wxString fileName = _("SyncJob.lnk"); //proposal + wxFileDialog* filePicker = new wxFileDialog(this, wxEmptyString, wxEmptyString, fileName, wxString(_("Shell link")) + wxT(" (*.lnk)|*.lnk"), wxFD_SAVE); #elif defined FFS_LINUX - wxString fileName = wxT("SyncJob.sh"); //proposal + wxString fileName = _("SyncJob.sh"); //proposal wxFileDialog* filePicker = new wxFileDialog(this, wxEmptyString, wxEmptyString, fileName, wxString(_("Shell script")) + wxT(" (*.sh)|*.sh"), wxFD_SAVE); #else assert(false); @@ -540,34 +544,11 @@ void BatchDialog::OnCreateJob(wxCommandEvent& event) return; } - //assemble command line parameters - wxString outputString; - try - { - outputString+= parseConfiguration(); - } - catch (const FileError& error) - { - wxMessageBox(error.show(), _("Error"), wxOK | wxICON_ERROR); - return; - } - - //write export file - wxFFile output(fileName, wxT("w")); - if (output.IsOpened()) - { - output.Write(outputString); - -#ifdef FFS_LINUX - //for linux the batch file needs the executable flag - output.Close(); - wxExecute(wxString(wxT("chmod +x ")) + fileName); -#endif // FFS_LINUX - + //create batch file + if (createBatchFile(fileName)) EndModal(batchFileCreated); - } else - wxMessageBox(wxString(_("Could not write to ")) + wxT("\"") + fileName + wxT("\""), _("Error"), wxOK | wxICON_ERROR); + wxMessageBox(wxString(_("Could not create file ")) + wxT("\"") + fileName + wxT("\""), _("Error"), wxOK | wxICON_ERROR); } } @@ -588,17 +569,11 @@ wxString getFormattedSyncDirection(const SyncDirection direction) } -wxString BatchDialog::parseConfiguration() +wxString BatchDialog::getCommandlineArguments() { wxString output; -#ifdef FFS_LINUX - //shell script identifier - output+= wxT("#!/bin/bash\n"); -#endif - output+= wxString(wxT("\"")) + wxStandardPaths::Get().GetExecutablePath() + wxT("\""); - - output+= wxString(wxT(" -")) + GlobalResources::paramCompare + wxT(" "); + output+= wxString(wxT("-")) + GlobalResources::paramCompare + wxT(" "); if (m_radioBtnSizeDate->GetValue()) output+= GlobalResources::valueSizeDate; else if (m_radioBtnContent->GetValue()) @@ -606,7 +581,7 @@ wxString BatchDialog::parseConfiguration() else assert(false); - output+= wxString(wxT(" -")) + GlobalResources::paramCfg + wxT(" ") + + output+= wxString(wxT(" -")) + GlobalResources::paramSync + wxT(" ") + getFormattedSyncDirection(localSyncConfiguration.exLeftSideOnly) + getFormattedSyncDirection(localSyncConfiguration.exRightSideOnly) + getFormattedSyncDirection(localSyncConfiguration.leftNewer) + @@ -631,31 +606,100 @@ wxString BatchDialog::parseConfiguration() if (m_checkBoxSilent->GetValue()) output+= wxString(wxT(" -")) + GlobalResources::paramSilent; -#ifdef FFS_WIN - //retrieve 8.3 directory names to handle unicode names in batch file correctly - wxChar buffer[MAX_PATH]; - if (GetShortPathName( - (m_directoryPanel1->GetValue()).c_str(), // points to a null-terminated path string - buffer, // points to a buffer to receive the null-terminated short form of the path - MAX_PATH // specifies the size of the buffer pointed to by lpszShortPath - ) == 0) - throw FileError(wxString(_("Could not retrieve the 8.3 directory name of ")) + wxT("\"") + m_directoryPanel1->GetValue() + wxT("\"")); - output+= wxString(wxT(" ")) + buffer; - - if (GetShortPathName( - (m_directoryPanel2->GetValue()).c_str(), // points to a null-terminated path string - buffer, // points to a buffer to receive the null-terminated short form of the path - MAX_PATH // specifies the size of the buffer pointed to by lpszShortPath - ) == 0) - throw FileError(wxString(_("Could not retrieve the 8.3 directory name of ")) + wxT("\"") + m_directoryPanel2->GetValue() + wxT("\"")); - output+= wxString(wxT(" ")) + buffer; -#else - output+= wxString(wxT(" ")) + wxT("\"") + wxDir(m_directoryPanel1->GetValue()).GetName() + wxT("\""); //directory WITHOUT trailing path separator - output+= wxString(wxT(" ")) + wxT("\"") + wxDir(m_directoryPanel2->GetValue()).GetName() + wxT("\""); //needed since e.g. "C:\" isn't parsed correctly by commandline -#endif // FFS_WIN + wxString leftDir = FreeFileSync::getFormattedDirectoryName(m_directoryPanel1->GetValue()); + wxString rightDir = FreeFileSync::getFormattedDirectoryName(m_directoryPanel2->GetValue()); - output+= wxT("\n"); + output+= wxString(wxT(" \"")) + wxDir(leftDir).GetName() + wxT("\""); //directory WITHOUT trailing path separator + output+= wxString(wxT(" \"")) + wxDir(rightDir).GetName() + wxT("\""); //needed since e.g. "C:\" isn't parsed correctly by commandline return output; } + +template <typename T> +struct CleanUp +{ + CleanUp(T* element) : m_element(element) {} + + ~CleanUp() + { + m_element->Release(); + } + + T* m_element; +}; + + +bool BatchDialog::createBatchFile(const wxString& filename) +{ +#ifdef FFS_WIN + //create shell link (instead of batch file) for full Unicode support + HRESULT hResult = E_FAIL; + IShellLink* pShellLink = NULL; + + if (FAILED(CoCreateInstance(CLSID_ShellLink, //class identifier + NULL, //object isn't part of an aggregate + CLSCTX_INPROC_SERVER, //context for running executable code + IID_IShellLink, //interface identifier + (void**)&pShellLink))) //pointer to storage of interface pointer + return false; + CleanUp<IShellLink> cleanOnExit(pShellLink); + + wxString freeFileSyncExe = wxStandardPaths::Get().GetExecutablePath(); + if (FAILED(pShellLink->SetPath(freeFileSyncExe.c_str()))) + return false; + + if (FAILED(pShellLink->SetArguments(getCommandlineArguments().c_str()))) + return false; + + if (FAILED(pShellLink->SetIconLocation(freeFileSyncExe.c_str(), 1))) //second icon from executable file is used + return false; + + if (FAILED(pShellLink->SetDescription(_("FreeFileSync Batch Job")))) + return false; + + IPersistFile* pPersistFile = NULL; + if (FAILED(pShellLink->QueryInterface(IID_IPersistFile, (void**)&pPersistFile))) + return false; + CleanUp<IPersistFile> cleanOnExit2(pPersistFile); + + //pPersistFile->Save accepts unicode input only +#ifdef _UNICODE + hResult = pPersistFile->Save(filename.c_str(), TRUE); +#else + WCHAR wszTemp [MAX_PATH]; + if (MultiByteToWideChar(CP_ACP, 0, filename.c_str(), -1, wszTemp, MAX_PATH) == 0) + return false; + + hResult = pPersistFile->Save(wszTemp, TRUE); +#endif + if (FAILED(hResult)) + return false; + + return true; + +//############################################################################ +#elif defined FFS_LINUX + //create shell script + wxFFile output(filename, wxT("w")); + if (output.IsOpened()) + { + wxString outputString; + outputString+= wxT("#!/bin/bash\n"); //shell script identifier + outputString+= wxString(wxT("\"")) + wxStandardPaths::Get().GetExecutablePath() + wxT("\" "); + outputString+= getCommandlineArguments() + wxT("\n"); + + if (!output.Write(outputString)) + return false; + + //for linux the batch file needs the executable flag + output.Close(); + wxExecute(wxString(wxT("chmod +x ")) + filename); + return true; + } + else + return false; +#else + adapt this! +#endif // FFS_LINUX +} diff --git a/ui/SyncDialog.h b/ui/SyncDialog.h index 3eee6400..bf2da634 100644 --- a/ui/SyncDialog.h +++ b/ui/SyncDialog.h @@ -76,10 +76,11 @@ private: void OnClose( wxCloseEvent& event); void OnCancel( wxCommandEvent& event); - void OnCreateJob( wxCommandEvent& event); + void OnCreateBatchJob( wxCommandEvent& event); void updateFilterButton(); - wxString parseConfiguration(); + wxString getCommandlineArguments(); + bool createBatchFile(const wxString& filename); SyncConfiguration localSyncConfiguration; bool filterIsActive; diff --git a/ui/guiGenerated.cpp b/ui/guiGenerated.cpp index d1a1c183..59362a9a 100644 --- a/ui/guiGenerated.cpp +++ b/ui/guiGenerated.cpp @@ -5,16 +5,6 @@ // PLEASE DO "NOT" EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ -#pragma hdrstop -#endif //__BORLANDC__ - -#ifndef WX_PRECOMP -#include <wx/wx.h> -#endif //WX_PRECOMP - #include "../library/customGrid.h" #include "guiGenerated.h" @@ -48,6 +38,9 @@ GuiGenerated::GuiGenerated( wxWindow* parent, wxWindowID id, const wxString& tit m_menuItemFrench = new wxMenuItem( m_menu31, wxID_ANY, wxString( _("Français") ) , wxEmptyString, wxITEM_RADIO ); m_menu31->Append( m_menuItemFrench ); + m_menuItemJapanese = new wxMenuItem( m_menu31, wxID_ANY, wxString( _("日本語") ) , wxEmptyString, wxITEM_RADIO ); + m_menu31->Append( m_menuItemJapanese ); + m_menu3->Append( -1, _("&Language"), m_menu31 ); m_menu3->AppendSeparator(); @@ -120,6 +113,10 @@ GuiGenerated::GuiGenerated( wxWindow* parent, wxWindowID id, const wxString& tit sbSizer6->Add( bSizer45, 0, wxALIGN_CENTER_VERTICAL, 5 ); m_bpButton14 = new wxBitmapButton( m_panel71, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW ); + m_bpButton14->SetToolTip( _("Help") ); + + m_bpButton14->SetToolTip( _("Help") ); + sbSizer6->Add( m_bpButton14, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); bSizer55->Add( sbSizer6, 0, wxALIGN_CENTER_VERTICAL, 2 ); @@ -189,7 +186,6 @@ GuiGenerated::GuiGenerated( wxWindow* parent, wxWindowID id, const wxString& tit wxBoxSizer* bSizer7; bSizer7 = new wxBoxSizer( wxVERTICAL ); - wxStaticBoxSizer* sbSizer2; sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( m_panel1, wxID_ANY, _("Drag && drop") ), wxHORIZONTAL ); m_directoryPanel1 = new wxTextCtrl( m_panel1, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); @@ -240,15 +236,18 @@ GuiGenerated::GuiGenerated( wxWindow* parent, wxWindowID id, const wxString& tit bSizer2->Add( m_panel1, 1, wxEXPAND, 5 ); m_panel3 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer18; bSizer18 = new wxBoxSizer( wxVERTICAL ); + bSizer69 = new wxBoxSizer( wxVERTICAL ); + m_bpButtonSwap = new wxBitmapButton( m_panel3, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); m_bpButtonSwap->SetToolTip( _("Swap sides") ); m_bpButtonSwap->SetToolTip( _("Swap sides") ); - bSizer18->Add( m_bpButtonSwap, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 3 ); + bSizer69->Add( m_bpButtonSwap, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 5 ); + + bSizer18->Add( bSizer69, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); m_grid3 = new CustomGrid( m_panel3, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); @@ -525,6 +524,7 @@ GuiGenerated::GuiGenerated( wxWindow* parent, wxWindowID id, const wxString& tit this->Connect( m_menuItemEnglish->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuLangEnglish ) ); this->Connect( m_menuItemGerman->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuLangGerman ) ); this->Connect( m_menuItemFrench->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuLangFrench ) ); + this->Connect( m_menuItemJapanese->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuLangJapanese ) ); this->Connect( m_menuItem7->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuBatchJob ) ); this->Connect( m_menuItem3->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuAbout ) ); m_bpButtonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GuiGenerated::OnCompare ), NULL, this ); @@ -569,6 +569,7 @@ GuiGenerated::~GuiGenerated() this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuLangEnglish ) ); this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuLangGerman ) ); this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuLangFrench ) ); + this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuLangJapanese ) ); this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuBatchJob ) ); this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( GuiGenerated::OnMenuAbout ) ); m_bpButtonCompare->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GuiGenerated::OnCompare ), NULL, this ); @@ -604,6 +605,344 @@ GuiGenerated::~GuiGenerated() m_bpButton10->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GuiGenerated::OnQuit ), NULL, this ); } +BatchDlgGenerated::BatchDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* bSizer54; + bSizer54 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer69; + bSizer69 = new wxBoxSizer( wxVERTICAL ); + + 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, _("Create a batch job"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText56->Wrap( -1 ); + m_staticText56->SetFont( wxFont( 16, 74, 90, 92, false, wxT("Tahoma") ) ); + + bSizer72->Add( m_staticText56, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_panel8->SetSizer( bSizer72 ); + m_panel8->Layout(); + bSizer72->Fit( m_panel8 ); + bSizer69->Add( m_panel8, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer69->Add( 0, 5, 0, 0, 5 ); + + m_staticText54 = new wxStaticText( this, wxID_ANY, _("Assemble a batch file with the following settings. To start synchronization in batch mode simply execute this file or schedule it in your operating system's task planner."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText54->Wrap( 380 ); + m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxT("Tahoma") ) ); + + bSizer69->Add( m_staticText54, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer69->Add( 0, 5, 0, 0, 5 ); + + m_staticline10 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer69->Add( m_staticline10, 0, wxEXPAND|wxTOP, 5 ); + + m_staticText531 = new wxStaticText( this, wxID_ANY, _("Configuration overview:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText531->Wrap( -1 ); + m_staticText531->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Arial Black") ) ); + + bSizer69->Add( m_staticText531, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + wxStaticBoxSizer* sbSizer20; + sbSizer20 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL ); + + wxFlexGridSizer* fgSizer9; + fgSizer9 = new wxFlexGridSizer( 2, 2, 5, 5 ); + fgSizer9->AddGrowableCol( 1 ); + fgSizer9->SetFlexibleDirection( wxHORIZONTAL ); + fgSizer9->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticText53 = new wxStaticText( this, wxID_ANY, _("Left folder:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText53->Wrap( -1 ); + m_staticText53->SetFont( wxFont( 8, 74, 90, 92, false, wxT("Tahoma") ) ); + + fgSizer9->Add( m_staticText53, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + m_directoryPanel1 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer9->Add( m_directoryPanel1, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticText541 = new wxStaticText( this, wxID_ANY, _("Right folder:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText541->Wrap( -1 ); + m_staticText541->SetFont( wxFont( 8, 74, 90, 92, false, wxT("Tahoma") ) ); + + fgSizer9->Add( m_staticText541, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + m_directoryPanel2 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer9->Add( m_directoryPanel2, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + sbSizer20->Add( fgSizer9, 0, wxEXPAND, 5 ); + + bSizer69->Add( sbSizer20, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer67; + bSizer67 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer57; + bSizer57 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer71; + bSizer71 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer721; + bSizer721 = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* sbSizer6; + sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Compare by...") ), wxVERTICAL ); + + m_radioBtnSizeDate = new wxRadioButton( this, wxID_ANY, _("File size and date"), wxDefaultPosition, wxDefaultSize, 0 ); + m_radioBtnSizeDate->SetValue( true ); + m_radioBtnSizeDate->SetToolTip( _("Files are found equal if\n - filesize\n - last write time (UTC) and date\nare the same.") ); + + sbSizer6->Add( m_radioBtnSizeDate, 0, 0, 5 ); + + m_radioBtnContent = new wxRadioButton( this, wxID_ANY, _("File content"), wxDefaultPosition, wxDefaultSize, 0 ); + m_radioBtnContent->SetToolTip( _("Files are found equal if\n - file content\nis the same.") ); + + sbSizer6->Add( m_radioBtnContent, 0, wxTOP, 5 ); + + bSizer721->Add( sbSizer6, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer721->Add( 0, 10, 1, 0, 5 ); + + wxBoxSizer* bSizer38; + bSizer38 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("Use Recycle Bin"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_checkBoxUseRecycler->SetToolTip( _("Use Recycle Bin when deleting or overwriting files during synchronization") ); + + bSizer38->Add( m_checkBoxUseRecycler, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_checkBoxContinueError = new wxCheckBox( this, wxID_ANY, _("Continue on error"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_checkBoxContinueError->SetToolTip( _("Hides error messages during synchronization:\nThey are collected and shown as a list at the end of the process") ); + + bSizer38->Add( m_checkBoxContinueError, 0, wxALL, 5 ); + + m_checkBoxSilent = new wxCheckBox( this, wxID_ANY, _("Silent mode"), wxDefaultPosition, wxDefaultSize, 0 ); + + m_checkBoxSilent->SetToolTip( _("Do not show graphical status and error messages but write to a logfile instead") ); + + bSizer38->Add( m_checkBoxSilent, 0, wxALL, 5 ); + + bSizer721->Add( bSizer38, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer721->Add( 0, 10, 1, 0, 5 ); + + bSizer71->Add( bSizer721, 0, wxEXPAND, 5 ); + + + bSizer71->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonFilter = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE ); + bSizer71->Add( m_bpButtonFilter, 0, wxALIGN_BOTTOM|wxRIGHT, 5 ); + + bSizer57->Add( bSizer71, 0, wxEXPAND, 5 ); + + wxStaticBoxSizer* sbSizer8; + sbSizer8 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL ); + + wxBoxSizer* bSizer671; + bSizer671 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer681; + bSizer681 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmap8 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); + bSizer681->Add( m_bitmap8, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_staticText15 = new wxStaticText( this, wxID_ANY, _("Include"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText15->Wrap( -1 ); + m_staticText15->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); + + bSizer681->Add( m_staticText15, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + bSizer671->Add( bSizer681, 1, wxEXPAND, 5 ); + + m_textCtrlInclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 250,-1 ), 0 ); + bSizer671->Add( m_textCtrlInclude, 0, wxALL, 5 ); + + sbSizer8->Add( bSizer671, 0, 0, 5 ); + + + sbSizer8->Add( 0, 10, 0, 0, 5 ); + + wxBoxSizer* bSizer691; + bSizer691 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer70; + bSizer70 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmap9 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); + bSizer70->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_staticText16 = new wxStaticText( this, wxID_ANY, _("Exclude"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText16->Wrap( -1 ); + m_staticText16->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); + + bSizer70->Add( m_staticText16, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + bSizer691->Add( bSizer70, 1, wxEXPAND, 5 ); + + m_textCtrlExclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 250,-1 ), 0 ); + bSizer691->Add( m_textCtrlExclude, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + sbSizer8->Add( bSizer691, 0, 0, 5 ); + + bSizer57->Add( sbSizer8, 0, 0, 5 ); + + bSizer67->Add( bSizer57, 0, 0, 5 ); + + + bSizer67->Add( 10, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxStaticBoxSizer* sbSizer61; + sbSizer61 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Configuration") ), wxVERTICAL ); + + wxGridSizer* gSizer3; + gSizer3 = new wxGridSizer( 1, 2, 0, 5 ); + + m_staticText211 = new wxStaticText( this, wxID_ANY, _("Result"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText211->Wrap( -1 ); + m_staticText211->SetFont( wxFont( 8, 74, 90, 92, false, wxT("Tahoma") ) ); + + gSizer3->Add( m_staticText211, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText311 = new wxStaticText( this, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText311->Wrap( -1 ); + m_staticText311->SetFont( wxFont( 8, 74, 90, 92, false, wxT("Tahoma") ) ); + + gSizer3->Add( m_staticText311, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + sbSizer61->Add( gSizer3, 0, wxEXPAND, 5 ); + + m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + sbSizer61->Add( m_staticline3, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxBOTTOM, 5 ); + + wxGridSizer* gSizer1; + gSizer1 = new wxGridSizer( 5, 2, 0, 5 ); + + m_bitmap13 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 ); + m_bitmap13->SetToolTip( _("Files/folders that exist on left side only") ); + + gSizer1->Add( m_bitmap13, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButton5 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + gSizer1->Add( m_bpButton5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmap14 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 ); + m_bitmap14->SetToolTip( _("Files/folders that exist on right side only") ); + + gSizer1->Add( m_bitmap14, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButton6 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + gSizer1->Add( m_bpButton6, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmap15 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 ); + m_bitmap15->SetToolTip( _("Files that exist on both sides, left one is newer") ); + + gSizer1->Add( m_bitmap15, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButton7 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + gSizer1->Add( m_bpButton7, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmap16 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 ); + m_bitmap16->SetToolTip( _("Files that exist on both sides, right one is newer") ); + + gSizer1->Add( m_bitmap16, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButton8 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + gSizer1->Add( m_bpButton8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmap17 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 ); + m_bitmap17->SetToolTip( _("dummy") ); + + gSizer1->Add( m_bitmap17, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButton9 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + gSizer1->Add( m_bpButton9, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + sbSizer61->Add( gSizer1, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + bSizer67->Add( sbSizer61, 0, 0, 5 ); + + bSizer69->Add( bSizer67, 0, wxALL, 5 ); + + m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer69->Add( m_staticline9, 0, wxTOP|wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer68; + bSizer68 = new wxBoxSizer( wxHORIZONTAL ); + + m_button6 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button6->SetFont( wxFont( 10, 74, 90, 90, false, wxT("Tahoma") ) ); + + bSizer68->Add( m_button6, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonCreate = new wxButton( this, wxID_ANY, _("&Create"), wxDefaultPosition, wxSize( 120,35 ), 0 ); + m_buttonCreate->SetDefault(); + m_buttonCreate->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); + + bSizer68->Add( m_buttonCreate, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + bSizer69->Add( bSizer68, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizer54->Add( bSizer69, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + this->SetSizer( bSizer54 ); + this->Layout(); + bSizer54->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); + m_directoryPanel1->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnEnterLeftDir ), NULL, this ); + m_directoryPanel2->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnEnterRightDir ), NULL, this ); + m_radioBtnSizeDate->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeCompareVar ), NULL, this ); + m_radioBtnContent->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeCompareVar ), NULL, this ); + m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSelectRecycleBin ), NULL, this ); + m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnFilterButton ), NULL, this ); + m_bpButton5->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnExLeftSideOnly ), NULL, this ); + m_bpButton6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnExRightSideOnly ), NULL, this ); + m_bpButton7->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnLeftNewer ), NULL, this ); + m_bpButton8->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnRightNewer ), NULL, this ); + m_bpButton9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnDifferent ), NULL, this ); + m_button6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); + m_buttonCreate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCreateBatchJob ), NULL, this ); +} + +BatchDlgGenerated::~BatchDlgGenerated() +{ + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); + m_directoryPanel1->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnEnterLeftDir ), NULL, this ); + m_directoryPanel2->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnEnterRightDir ), NULL, this ); + m_radioBtnSizeDate->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeCompareVar ), NULL, this ); + m_radioBtnContent->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeCompareVar ), NULL, this ); + m_checkBoxUseRecycler->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSelectRecycleBin ), NULL, this ); + m_bpButtonFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnFilterButton ), NULL, this ); + m_bpButton5->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnExLeftSideOnly ), NULL, this ); + m_bpButton6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnExRightSideOnly ), NULL, this ); + m_bpButton7->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnLeftNewer ), NULL, this ); + m_bpButton8->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnRightNewer ), NULL, this ); + m_bpButton9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnDifferent ), NULL, this ); + m_button6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); + m_buttonCreate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCreateBatchJob ), NULL, this ); +} + CompareStatusGenerated::CompareStatusGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { wxBoxSizer* bSizer40; @@ -626,45 +965,45 @@ CompareStatusGenerated::CompareStatusGenerated( wxWindow* parent, wxWindowID id, sbSizer10->Add( m_staticTextScanned, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer42->Add( sbSizer10, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer42->Add( sbSizer10, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); - sbSizer13 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxHORIZONTAL ); + sbSizer13 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Comparing content") ), wxVERTICAL ); + + wxFlexGridSizer* fgSizer8; + fgSizer8 = new wxFlexGridSizer( 2, 2, 3, 0 ); + fgSizer8->SetFlexibleDirection( wxBOTH ); + fgSizer8->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticText46 = new wxStaticText( this, wxID_ANY, _("Files to compare:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText46 = new wxStaticText( this, wxID_ANY, _("Files remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText46->Wrap( -1 ); m_staticText46->SetFont( wxFont( 10, 74, 90, 90, false, wxT("Tahoma") ) ); - sbSizer13->Add( m_staticText46, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + fgSizer8->Add( m_staticText46, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); m_staticTextFilesToCompare = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextFilesToCompare->Wrap( -1 ); m_staticTextFilesToCompare->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); - sbSizer13->Add( m_staticTextFilesToCompare, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + fgSizer8->Add( m_staticTextFilesToCompare, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer42->Add( sbSizer13, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); - - sbSizer11 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxHORIZONTAL ); - - m_staticText32 = new wxStaticText( this, wxID_ANY, _("Data to compare:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText32 = new wxStaticText( this, wxID_ANY, _("Data remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText32->Wrap( -1 ); m_staticText32->SetFont( wxFont( 10, 74, 90, 90, false, wxT("Tahoma") ) ); - sbSizer11->Add( m_staticText32, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 ); + fgSizer8->Add( m_staticText32, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); m_staticTextDataToCompare = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextDataToCompare->Wrap( -1 ); m_staticTextDataToCompare->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); - sbSizer11->Add( m_staticTextDataToCompare, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer8->Add( m_staticTextDataToCompare, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + sbSizer13->Add( fgSizer8, 0, 0, 5 ); - bSizer42->Add( sbSizer11, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer42->Add( sbSizer13, 0, wxALIGN_CENTER_VERTICAL, 5 ); bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); @@ -672,21 +1011,19 @@ CompareStatusGenerated::CompareStatusGenerated( wxWindow* parent, wxWindowID id, wxStaticBoxSizer* sbSizer131; sbSizer131 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxHORIZONTAL ); - m_staticText37 = new wxStaticText( this, wxID_ANY, _("Remaining time:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText37 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText37->Wrap( -1 ); m_staticText37->SetFont( wxFont( 10, 74, 90, 90, false, wxT("Tahoma") ) ); - m_staticText37->Hide(); sbSizer131->Add( m_staticText37, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - m_staticTextRemainingTime = new wxStaticText( this, wxID_ANY, _("--.--"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRemainingTime->Wrap( -1 ); - m_staticTextRemainingTime->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); - m_staticTextRemainingTime->Hide(); + m_staticTextTimeElapsed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeElapsed->Wrap( -1 ); + m_staticTextTimeElapsed->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); - sbSizer131->Add( m_staticTextRemainingTime, 0, wxALIGN_CENTER_VERTICAL, 5 ); + sbSizer131->Add( m_staticTextTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer42->Add( sbSizer131, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer42->Add( sbSizer131, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); bSizer40->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 ); @@ -1145,22 +1482,22 @@ SyncStatusDlgGenerated::SyncStatusDlgGenerated( wxWindow* parent, wxWindowID id, bSizer28 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer32; - bSizer32 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer33; + bSizer33 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText26 = new wxStaticText( this, wxID_ANY, _("Data remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText26->Wrap( -1 ); - m_staticText26->SetFont( wxFont( 10, 74, 93, 90, false, wxT("Tahoma") ) ); + m_staticText25 = new wxStaticText( this, wxID_ANY, _("Files/folders remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText25->Wrap( -1 ); + m_staticText25->SetFont( wxFont( 10, 74, 93, 90, false, wxT("Tahoma") ) ); - bSizer32->Add( m_staticText26, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + bSizer33->Add( m_staticText25, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDataRemaining->Wrap( -1 ); - m_staticTextDataRemaining->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); + m_staticTextRemainingObj = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticTextRemainingObj->Wrap( -1 ); + m_staticTextRemainingObj->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); - bSizer32->Add( m_staticTextDataRemaining, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizer33->Add( m_staticTextRemainingObj, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer28->Add( bSizer32, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer28->Add( bSizer33, 0, wxALIGN_CENTER_VERTICAL, 5 ); bSizer28->Add( 0, 0, 1, 0, 5 ); @@ -1185,22 +1522,22 @@ SyncStatusDlgGenerated::SyncStatusDlgGenerated( wxWindow* parent, wxWindowID id, bSizer28->Add( 0, 0, 1, 0, 5 ); - wxBoxSizer* bSizer33; - bSizer33 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer32; + bSizer32 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText25 = new wxStaticText( this, wxID_ANY, _("Files/folders remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText25->Wrap( -1 ); - m_staticText25->SetFont( wxFont( 10, 74, 93, 90, false, wxT("Tahoma") ) ); + m_staticText26 = new wxStaticText( this, wxID_ANY, _("Data remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText26->Wrap( -1 ); + m_staticText26->SetFont( wxFont( 10, 74, 93, 90, false, wxT("Tahoma") ) ); - bSizer33->Add( m_staticText25, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + bSizer32->Add( m_staticText26, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - m_staticTextRemainingObj = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextRemainingObj->Wrap( -1 ); - m_staticTextRemainingObj->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); + m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDataRemaining->Wrap( -1 ); + m_staticTextDataRemaining->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); - bSizer33->Add( m_staticTextRemainingObj, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer32->Add( m_staticTextDataRemaining, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - bSizer28->Add( bSizer33, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer28->Add( bSizer32, 0, wxALIGN_CENTER_VERTICAL, 5 ); bSizer27->Add( bSizer28, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); @@ -1262,10 +1599,114 @@ HelpDlgGenerated::HelpDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr bSizer20->Add( 0, 5, 0, wxEXPAND, 5 ); - m_textCtrl8 = new wxTextCtrl( this, wxID_ANY, _("Compare by \"File size and date\"\n----------------------------------------\nThis variant evaluates two equally named files as being equal when they have the same file size AND the same last write date and time. Notice that the file time is allowed to deviate by up to 2 seconds. This ensures synchronization with the lower-precision file system FAT32 works correctly.\n\nWhen \"Compare\" is triggered with this option set the following decision tree is processed:\n\n -----------------\n |Decision tree|\n -----------------\n ________|___________\n | |\n file exists on both sides on one side only\n _____|______ __|___\n | | | |\nequal different left right\n _________|__________\n | | |\n left newer right newer same date\n\nAs a result 6 different status can be returned to categorize all files:\n\n- exists left only\n- exists right only\n- left newer\n- right newer\n- different filesize (but same date)\n- equal\n\n\nCompare by \"File content\"\n----------------------------------------\nAs the name suggests, two files which share the same name are marked as equal if and only if they have the same content. This option is useful for consistency checks rather than backup operations. Therefore the file times are not taken into account at all.\n\nWith this option enabled the decision tree is smaller:\n\n -----------------\n |Decision tree|\n -----------------\n ________|___________\n | |\n file exists on both sides on one side only\n _____|______ __|___\n | | | |\nequal different left right\n\nAs a result the files are separated into the following categories:\n\n- exists left only\n- exists right only\n- different\n- equal"), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY ); - m_textCtrl8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) ); + m_notebook1 = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_scrolledWindow1 = new wxScrolledWindow( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxSIMPLE_BORDER|wxVSCROLL ); + m_scrolledWindow1->SetScrollRate( 5, 5 ); + m_scrolledWindow1->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_INACTIVEBORDER ) ); + + wxBoxSizer* bSizer70; + bSizer70 = new wxBoxSizer( wxVERTICAL ); - bSizer20->Add( m_textCtrl8, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + m_staticText59 = new wxStaticText( m_scrolledWindow1, wxID_ANY, _("Compare by \"File size and date\""), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText59->Wrap( 500 ); + m_staticText59->SetFont( wxFont( 10, 74, 90, 92, true, wxT("Tahoma") ) ); + + bSizer70->Add( m_staticText59, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticText60 = new wxStaticText( m_scrolledWindow1, wxID_ANY, _("This variant evaluates two equally named files as being equal when they have the same file size AND the same last write date and time. Notice that the file time is allowed to deviate by up to 2 seconds. This ensures synchronization with the lower-precision file system FAT32 works correctly."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText60->Wrap( 500 ); + bSizer70->Add( m_staticText60, 0, wxALL, 5 ); + + m_staticText61 = new wxStaticText( m_scrolledWindow1, wxID_ANY, _("When \"Compare\" is triggered with this option set the following decision tree is processed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText61->Wrap( 500 ); + bSizer70->Add( m_staticText61, 0, wxALL, 5 ); + + m_treeCtrl1 = new wxTreeCtrl( m_scrolledWindow1, wxID_ANY, wxDefaultPosition, wxSize( -1,180 ), wxTR_DEFAULT_STYLE ); + m_treeCtrl1->SetBackgroundColour( wxColour( 237, 236, 235 ) ); + + bSizer70->Add( m_treeCtrl1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticText63 = new wxStaticText( m_scrolledWindow1, wxID_ANY, _("As a result 6 different status can be returned to categorize all files:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText63->Wrap( 500 ); + bSizer70->Add( m_staticText63, 0, wxALL, 5 ); + + m_staticText75 = new wxStaticText( m_scrolledWindow1, wxID_ANY, _("- equal"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText75->Wrap( -1 ); + bSizer70->Add( m_staticText75, 0, wxRIGHT|wxLEFT, 5 ); + + m_staticText76 = new wxStaticText( m_scrolledWindow1, wxID_ANY, _("- left newer"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText76->Wrap( -1 ); + bSizer70->Add( m_staticText76, 0, wxRIGHT|wxLEFT, 5 ); + + m_staticText77 = new wxStaticText( m_scrolledWindow1, wxID_ANY, _("- right newer"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText77->Wrap( -1 ); + bSizer70->Add( m_staticText77, 0, wxRIGHT|wxLEFT, 5 ); + + m_staticText78 = new wxStaticText( m_scrolledWindow1, wxID_ANY, _("- different (same date, different size)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText78->Wrap( -1 ); + bSizer70->Add( m_staticText78, 0, wxRIGHT|wxLEFT, 5 ); + + m_staticText79 = new wxStaticText( m_scrolledWindow1, wxID_ANY, _("- exists left only"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText79->Wrap( -1 ); + bSizer70->Add( m_staticText79, 0, wxRIGHT|wxLEFT, 5 ); + + m_staticText80 = new wxStaticText( m_scrolledWindow1, wxID_ANY, _("- exists right only"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText80->Wrap( -1 ); + bSizer70->Add( m_staticText80, 0, wxRIGHT|wxLEFT, 5 ); + + m_scrolledWindow1->SetSizer( bSizer70 ); + m_scrolledWindow1->Layout(); + bSizer70->Fit( m_scrolledWindow1 ); + m_notebook1->AddPage( m_scrolledWindow1, _("File size and date"), true ); + m_scrolledWindow5 = new wxScrolledWindow( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_scrolledWindow5->SetScrollRate( 5, 5 ); + m_scrolledWindow5->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_INACTIVEBORDER ) ); + + wxBoxSizer* bSizer74; + bSizer74 = new wxBoxSizer( wxVERTICAL ); + + m_staticText65 = new wxStaticText( m_scrolledWindow5, wxID_ANY, _("Compare by \"File content\""), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText65->Wrap( 500 ); + m_staticText65->SetFont( wxFont( 10, 74, 90, 92, true, wxT("Tahoma") ) ); + + bSizer74->Add( m_staticText65, 0, wxALL, 5 ); + + m_staticText66 = new wxStaticText( m_scrolledWindow5, wxID_ANY, _("As the name suggests, two files which share the same name are marked as equal if and only if they have the same content. This option is useful for consistency checks rather than backup operations. Therefore the file times are not taken into account at all.\n\nWith this option enabled the decision tree is smaller:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText66->Wrap( 500 ); + bSizer74->Add( m_staticText66, 0, wxALL, 5 ); + + m_treeCtrl2 = new wxTreeCtrl( m_scrolledWindow5, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_DEFAULT_STYLE ); + m_treeCtrl2->SetBackgroundColour( wxColour( 237, 236, 235 ) ); + m_treeCtrl2->SetMinSize( wxSize( -1,130 ) ); + + bSizer74->Add( m_treeCtrl2, 0, wxALL|wxEXPAND, 5 ); + + m_staticText69 = new wxStaticText( m_scrolledWindow5, wxID_ANY, _("As a result the files are separated into the following categories:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText69->Wrap( 500 ); + bSizer74->Add( m_staticText69, 0, wxALL, 5 ); + + m_staticText81 = new wxStaticText( m_scrolledWindow5, wxID_ANY, _("- equal"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText81->Wrap( -1 ); + bSizer74->Add( m_staticText81, 0, wxRIGHT|wxLEFT, 5 ); + + m_staticText82 = new wxStaticText( m_scrolledWindow5, wxID_ANY, _("- different"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText82->Wrap( -1 ); + bSizer74->Add( m_staticText82, 0, wxRIGHT|wxLEFT, 5 ); + + m_staticText83 = new wxStaticText( m_scrolledWindow5, wxID_ANY, _("- exists left only"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText83->Wrap( -1 ); + bSizer74->Add( m_staticText83, 0, wxRIGHT|wxLEFT, 5 ); + + m_staticText84 = new wxStaticText( m_scrolledWindow5, wxID_ANY, _("- exists right only"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText84->Wrap( -1 ); + bSizer74->Add( m_staticText84, 0, wxRIGHT|wxLEFT, 5 ); + + m_scrolledWindow5->SetSizer( bSizer74 ); + m_scrolledWindow5->Layout(); + bSizer74->Fit( m_scrolledWindow5 ); + m_notebook1->AddPage( m_scrolledWindow5, _("File content"), false ); + + bSizer20->Add( m_notebook1, 1, wxEXPAND | wxALL, 5 ); m_button8 = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxSize( 100,32 ), 0 ); m_button8->SetDefault(); @@ -1330,19 +1771,79 @@ AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxS wxBoxSizer* bSizer53; bSizer53 = new wxBoxSizer( wxVERTICAL ); - wxTextCtrl* m_textCtrl3; - m_textCtrl3 = new wxTextCtrl( this, wxID_ANY, _("Source code written completely in C++ utilizing:\n\n MinGW \t\t- Windows port of GNU Compiler Collection\n wxWidgets \t- Open-Source GUI framework\n wxFormBuilder\t- wxWidgets GUI-builder\n CodeBlocks \t- Open-Source IDE\n\n by ZenJu"), wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE|wxTE_READONLY|wxDOUBLE_BORDER ); - m_textCtrl3->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) ); + m_scrolledWindow4 = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDOUBLE_BORDER|wxHSCROLL|wxVSCROLL ); + m_scrolledWindow4->SetScrollRate( 5, 5 ); + m_scrolledWindow4->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) ); + m_scrolledWindow4->SetMinSize( wxSize( -1,125 ) ); - bSizer53->Add( m_textCtrl3, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM, 5 ); + wxBoxSizer* bSizer73; + bSizer73 = new wxBoxSizer( wxVERTICAL ); - m_staticText54 = new wxStaticText( this, wxID_ANY, _("Thanks to Jean-François Hartmann for doing the French translation!"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText72 = new wxStaticText( m_scrolledWindow4, wxID_ANY, _("Source code written completely in C++ utilizing:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText72->Wrap( -1 ); + m_staticText72->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 74, 90, 92, false, wxT("Tahoma") ) ); + + bSizer73->Add( m_staticText72, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticText73 = new wxStaticText( m_scrolledWindow4, wxID_ANY, _(" MinGW \t- Windows port of GNU Compiler Collection\n wxWidgets \t- Open-Source GUI framework\n wxFormBuilder\t- wxWidgets GUI-builder\n CodeBlocks \t- Open-Source IDE"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText73->Wrap( -1 ); + bSizer73->Add( m_staticText73, 0, wxALL|wxEXPAND, 5 ); + + m_staticText74 = new wxStaticText( m_scrolledWindow4, wxID_ANY, _("- ZenJu -"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText74->Wrap( -1 ); + m_staticText74->SetFont( wxFont( 10, 74, 93, 90, false, wxT("Tahoma") ) ); + + bSizer73->Add( m_staticText74, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_scrolledWindow4->SetSizer( bSizer73 ); + m_scrolledWindow4->Layout(); + bSizer73->Fit( m_scrolledWindow4 ); + bSizer53->Add( m_scrolledWindow4, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM, 10 ); + + m_scrolledWindow3 = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxDOUBLE_BORDER|wxHSCROLL|wxVSCROLL ); + m_scrolledWindow3->SetScrollRate( 5, 5 ); + m_scrolledWindow3->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) ); + m_scrolledWindow3->SetMinSize( wxSize( -1,70 ) ); + m_scrolledWindow3->SetMaxSize( wxSize( -1,100 ) ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxVERTICAL ); + + m_staticText54 = new wxStaticText( m_scrolledWindow3, wxID_ANY, _("Big thanks for localizing FreeFileSync goes out to:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText54->Wrap( -1 ); - m_staticText54->SetFont( wxFont( 8, 74, 90, 90, false, wxT("Tahoma") ) ); + m_staticText54->SetFont( wxFont( 8, 74, 90, 92, false, wxT("Tahoma") ) ); - bSizer53->Add( m_staticText54, 0, wxTOP|wxBOTTOM|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer72->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM, 5 ); + + wxFlexGridSizer* fgSizer9; + fgSizer9 = new wxFlexGridSizer( 2, 2, 5, 20 ); + fgSizer9->SetFlexibleDirection( wxBOTH ); + fgSizer9->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - bSizer31->Add( bSizer53, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 30 ); + m_staticText68 = new wxStaticText( m_scrolledWindow3, wxID_ANY, _("Jean-François Hartmann"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText68->Wrap( -1 ); + fgSizer9->Add( m_staticText68, 0, 0, 5 ); + + m_staticText69 = new wxStaticText( m_scrolledWindow3, wxID_ANY, _("Français"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText69->Wrap( -1 ); + fgSizer9->Add( m_staticText69, 0, 0, 5 ); + + m_staticText70 = new wxStaticText( m_scrolledWindow3, wxID_ANY, _("Tilt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText70->Wrap( -1 ); + fgSizer9->Add( m_staticText70, 0, 0, 5 ); + + m_staticText71 = new wxStaticText( m_scrolledWindow3, wxID_ANY, _("日本語"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText71->Wrap( -1 ); + fgSizer9->Add( m_staticText71, 0, 0, 5 ); + + bSizer72->Add( fgSizer9, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 ); + + m_scrolledWindow3->SetSizer( bSizer72 ); + m_scrolledWindow3->Layout(); + bSizer72->Fit( m_scrolledWindow3 ); + bSizer53->Add( m_scrolledWindow3, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + bSizer31->Add( bSizer53, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 30 ); m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); bSizer31->Add( m_staticline3, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 ); @@ -1356,7 +1857,7 @@ AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxS sbSizer7->Add( m_staticText131, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer31->Add( sbSizer7, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 ); + bSizer31->Add( sbSizer7, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); wxFlexGridSizer* fgSizer2; fgSizer2 = new wxFlexGridSizer( 3, 3, 0, 0 ); @@ -1400,7 +1901,7 @@ AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxS fgSizer2->Add( m_staticText151, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_hyperlink3 = new wxHyperlinkCtrl( this, wxID_ANY, _("Donate with Paypal"), wxT("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=florian%2db%40gmx%2enet&no_shipping=0&no_note=1&tax=0¤cy_code=EUR&lc=DE&bn=PP%2dDonationsBF&charset=UTF%2d8"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink3 = new wxHyperlinkCtrl( this, wxID_ANY, _("Donate with PayPal"), wxT("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zhnmju123%40gmx%2ede&no_shipping=0&no_note=1&tax=0¤cy_code=EUR&lc=EN&bn=PP%2dDonationsBF&charset=UTF%2d8"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); fgSizer2->Add( m_hyperlink3, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); bSizer31->Add( fgSizer2, 0, wxLEFT|wxEXPAND, 10 ); @@ -1616,27 +2117,71 @@ FilterDlgGenerated::FilterDlgGenerated( wxWindow* parent, wxWindowID id, const w bSizer72->Fit( m_panel8 ); bSizer21->Add( m_panel8, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10 ); - m_staticText44 = new wxStaticText( this, wxID_ANY, _("Only files/directories that pass filtering will be selected for synchronization."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText44->Wrap( -1 ); - bSizer21->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + wxBoxSizer* bSizer70; + bSizer70 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText44 = new wxStaticText( this, wxID_ANY, _("Only files/directories that pass filtering will be selected for synchronization.\nThe filter will be applied to the full name including path prefix."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText44->Wrap( 400 ); + bSizer70->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonHelp = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW ); + m_bpButtonHelp->SetToolTip( _("Help") ); + + m_bpButtonHelp->SetToolTip( _("Help") ); + + bSizer70->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + bSizer21->Add( bSizer70, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer21->Add( 0, 10, 0, 0, 5 ); + + 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( this, wxID_ANY, _("Hints:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText45 = new wxStaticText( m_panel13, wxID_ANY, _("Hints:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText45->Wrap( -1 ); m_staticText45->SetFont( wxFont( 10, 74, 90, 92, true, wxT("Tahoma") ) ); bSizer52->Add( m_staticText45, 0, wxBOTTOM, 5 ); - m_staticText18 = new wxStaticText( this, wxID_ANY, _("1. Enter full file or directory names separated by ';'.\n2. Wildcard characters '*' and '?' are supported.\n3. Case sensitive expressions!\n\nExample: *.tmp;*\\filename.dat;*\\directory\\*"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText18 = new wxStaticText( m_panel13, wxID_ANY, _("1. Enter full file or directory names separated by ';'.\n2. Wildcard characters '*' and '?' are supported."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText18->Wrap( -1 ); - bSizer52->Add( m_staticText18, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer52->Add( m_staticText18, 0, wxBOTTOM, 5 ); + + bSizer69->Add( bSizer52, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + 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: *\\tempfolder\\*"), 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 from folder \"tempfolder\"."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText1811->Wrap( 250 ); + m_staticText1811->SetFont( wxFont( 8, 74, 93, 90, false, wxT("Tahoma") ) ); + + bSizer66->Add( m_staticText1811, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + sbSizer21->Add( bSizer66, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); - bSizer21->Add( bSizer52, 0, wxALIGN_CENTER_HORIZONTAL, 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|wxEXPAND|wxBOTTOM, 5 ); wxStaticBoxSizer* sbSizer8; sbSizer8 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL ); @@ -1685,7 +2230,7 @@ FilterDlgGenerated::FilterDlgGenerated( wxWindow* parent, wxWindowID id, const w sbSizer8->Add( fgSizer4, 0, 0, 5 ); - bSizer21->Add( sbSizer8, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer21->Add( sbSizer8, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); bSizer21->Add( 0, 0, 0, 0, 5 ); @@ -1720,6 +2265,7 @@ FilterDlgGenerated::FilterDlgGenerated( wxWindow* parent, wxWindowID id, const w // Connect Events this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) ); + m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this ); m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this ); m_button17->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); m_button10->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnOK ), NULL, this ); @@ -1729,345 +2275,8 @@ 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_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this ); m_button17->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); m_button10->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnOK ), NULL, this ); } - -BatchDlgGenerated::BatchDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) -{ - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - - wxBoxSizer* bSizer54; - bSizer54 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer69; - bSizer69 = new wxBoxSizer( wxVERTICAL ); - - 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, _("Create a batch job"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText56->Wrap( -1 ); - m_staticText56->SetFont( wxFont( 16, 74, 90, 92, false, wxT("Tahoma") ) ); - - bSizer72->Add( m_staticText56, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_panel8->SetSizer( bSizer72 ); - m_panel8->Layout(); - bSizer72->Fit( m_panel8 ); - bSizer69->Add( m_panel8, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer69->Add( 0, 5, 0, 0, 5 ); - - m_staticText54 = new wxStaticText( this, wxID_ANY, _("Assemble a batch file with the following settings. To start synchronization in batch mode simply execute this file or schedule it in your operating system's task planner."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText54->Wrap( 380 ); - m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxT("Tahoma") ) ); - - bSizer69->Add( m_staticText54, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer69->Add( 0, 5, 0, 0, 5 ); - - m_staticline10 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer69->Add( m_staticline10, 0, wxEXPAND|wxTOP, 5 ); - - m_staticText531 = new wxStaticText( this, wxID_ANY, _("Configuration overview:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText531->Wrap( -1 ); - m_staticText531->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Arial Black") ) ); - - bSizer69->Add( m_staticText531, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - wxStaticBoxSizer* sbSizer20; - sbSizer20 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL ); - - wxFlexGridSizer* fgSizer9; - fgSizer9 = new wxFlexGridSizer( 2, 2, 5, 5 ); - fgSizer9->AddGrowableCol( 1 ); - fgSizer9->SetFlexibleDirection( wxHORIZONTAL ); - fgSizer9->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_staticText53 = new wxStaticText( this, wxID_ANY, _("Left folder:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText53->Wrap( -1 ); - m_staticText53->SetFont( wxFont( 8, 74, 90, 92, false, wxT("Tahoma") ) ); - - fgSizer9->Add( m_staticText53, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - m_directoryPanel1 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer9->Add( m_directoryPanel1, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticText541 = new wxStaticText( this, wxID_ANY, _("Right folder:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText541->Wrap( -1 ); - m_staticText541->SetFont( wxFont( 8, 74, 90, 92, false, wxT("Tahoma") ) ); - - fgSizer9->Add( m_staticText541, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - m_directoryPanel2 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer9->Add( m_directoryPanel2, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - sbSizer20->Add( fgSizer9, 0, wxEXPAND, 5 ); - - bSizer69->Add( sbSizer20, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer67; - bSizer67 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer57; - bSizer57 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer71; - bSizer71 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer721; - bSizer721 = new wxBoxSizer( wxVERTICAL ); - - wxStaticBoxSizer* sbSizer6; - sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Compare by...") ), wxVERTICAL ); - - m_radioBtnSizeDate = new wxRadioButton( this, wxID_ANY, _("File size and date"), wxDefaultPosition, wxDefaultSize, 0 ); - m_radioBtnSizeDate->SetValue( true ); - m_radioBtnSizeDate->SetToolTip( _("Files are found equal if\n - filesize\n - last write time (UTC) and date\nare the same.") ); - - sbSizer6->Add( m_radioBtnSizeDate, 0, 0, 5 ); - - m_radioBtnContent = new wxRadioButton( this, wxID_ANY, _("File content"), wxDefaultPosition, wxDefaultSize, 0 ); - m_radioBtnContent->SetToolTip( _("Files are found equal if\n - file content\nis the same.") ); - - sbSizer6->Add( m_radioBtnContent, 0, wxTOP, 5 ); - - bSizer721->Add( sbSizer6, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer721->Add( 0, 10, 1, 0, 5 ); - - wxBoxSizer* bSizer38; - bSizer38 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("Use Recycle Bin"), wxDefaultPosition, wxDefaultSize, 0 ); - - m_checkBoxUseRecycler->SetToolTip( _("Use Recycle Bin when deleting or overwriting files during synchronization") ); - - bSizer38->Add( m_checkBoxUseRecycler, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_checkBoxContinueError = new wxCheckBox( this, wxID_ANY, _("Continue on error"), wxDefaultPosition, wxDefaultSize, 0 ); - - m_checkBoxContinueError->SetToolTip( _("Hides error messages during synchronization:\nThey are collected and shown as a list at the end of the process") ); - - bSizer38->Add( m_checkBoxContinueError, 0, wxALL, 5 ); - - m_checkBoxSilent = new wxCheckBox( this, wxID_ANY, _("Silent mode"), wxDefaultPosition, wxDefaultSize, 0 ); - - m_checkBoxSilent->SetToolTip( _("Do not show graphical status and error messages but write to a logfile instead") ); - - bSizer38->Add( m_checkBoxSilent, 0, wxALL, 5 ); - - bSizer721->Add( bSizer38, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer721->Add( 0, 10, 1, 0, 5 ); - - bSizer71->Add( bSizer721, 0, wxEXPAND, 5 ); - - - bSizer71->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonFilter = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE ); - bSizer71->Add( m_bpButtonFilter, 0, wxALIGN_BOTTOM|wxRIGHT, 5 ); - - bSizer57->Add( bSizer71, 0, wxEXPAND, 5 ); - - wxStaticBoxSizer* sbSizer8; - sbSizer8 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL ); - - wxBoxSizer* bSizer671; - bSizer671 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer681; - bSizer681 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmap8 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); - bSizer681->Add( m_bitmap8, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_staticText15 = new wxStaticText( this, wxID_ANY, _("Include"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText15->Wrap( -1 ); - m_staticText15->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); - - bSizer681->Add( m_staticText15, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - bSizer671->Add( bSizer681, 1, wxEXPAND, 5 ); - - m_textCtrlInclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 250,-1 ), 0 ); - bSizer671->Add( m_textCtrlInclude, 0, wxALL, 5 ); - - sbSizer8->Add( bSizer671, 0, 0, 5 ); - - - sbSizer8->Add( 0, 10, 0, 0, 5 ); - - wxBoxSizer* bSizer691; - bSizer691 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer70; - bSizer70 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmap9 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); - bSizer70->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_staticText16 = new wxStaticText( this, wxID_ANY, _("Exclude"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText16->Wrap( -1 ); - m_staticText16->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); - - bSizer70->Add( m_staticText16, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - bSizer691->Add( bSizer70, 1, wxEXPAND, 5 ); - - m_textCtrlExclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 250,-1 ), 0 ); - bSizer691->Add( m_textCtrlExclude, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - sbSizer8->Add( bSizer691, 0, 0, 5 ); - - bSizer57->Add( sbSizer8, 0, 0, 5 ); - - bSizer67->Add( bSizer57, 0, 0, 5 ); - - - bSizer67->Add( 10, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxStaticBoxSizer* sbSizer61; - sbSizer61 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Configuration") ), wxVERTICAL ); - - wxGridSizer* gSizer3; - gSizer3 = new wxGridSizer( 1, 2, 0, 5 ); - - m_staticText211 = new wxStaticText( this, wxID_ANY, _("Result"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText211->Wrap( -1 ); - m_staticText211->SetFont( wxFont( 8, 74, 90, 92, false, wxT("Tahoma") ) ); - - gSizer3->Add( m_staticText211, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticText311 = new wxStaticText( this, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText311->Wrap( -1 ); - m_staticText311->SetFont( wxFont( 8, 74, 90, 92, false, wxT("Tahoma") ) ); - - gSizer3->Add( m_staticText311, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - sbSizer61->Add( gSizer3, 0, wxEXPAND, 5 ); - - m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - sbSizer61->Add( m_staticline3, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxBOTTOM, 5 ); - - wxGridSizer* gSizer1; - gSizer1 = new wxGridSizer( 5, 2, 0, 5 ); - - m_bitmap13 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 ); - m_bitmap13->SetToolTip( _("Files/folders that exist on left side only") ); - - gSizer1->Add( m_bitmap13, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButton5 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - gSizer1->Add( m_bpButton5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmap14 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 ); - m_bitmap14->SetToolTip( _("Files/folders that exist on right side only") ); - - gSizer1->Add( m_bitmap14, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButton6 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - gSizer1->Add( m_bpButton6, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmap15 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 ); - m_bitmap15->SetToolTip( _("Files that exist on both sides, left one is newer") ); - - gSizer1->Add( m_bitmap15, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButton7 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - gSizer1->Add( m_bpButton7, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmap16 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 ); - m_bitmap16->SetToolTip( _("Files that exist on both sides, right one is newer") ); - - gSizer1->Add( m_bitmap16, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButton8 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - gSizer1->Add( m_bpButton8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmap17 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 ); - m_bitmap17->SetToolTip( _("dummy") ); - - gSizer1->Add( m_bitmap17, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButton9 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - gSizer1->Add( m_bpButton9, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - sbSizer61->Add( gSizer1, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - bSizer67->Add( sbSizer61, 0, 0, 5 ); - - bSizer69->Add( bSizer67, 0, wxALL, 5 ); - - m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer69->Add( m_staticline9, 0, wxTOP|wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer68; - bSizer68 = new wxBoxSizer( wxHORIZONTAL ); - - m_button6 = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button6->SetFont( wxFont( 10, 74, 90, 90, false, wxT("Tahoma") ) ); - - bSizer68->Add( m_button6, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonCreate = new wxButton( this, wxID_ANY, _("&Create"), wxDefaultPosition, wxSize( 120,35 ), 0 ); - m_buttonCreate->SetDefault(); - m_buttonCreate->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) ); - - bSizer68->Add( m_buttonCreate, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - bSizer69->Add( bSizer68, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizer54->Add( bSizer69, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - this->SetSizer( bSizer54 ); - this->Layout(); - bSizer54->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); - m_directoryPanel1->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnEnterLeftDir ), NULL, this ); - m_directoryPanel2->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnEnterRightDir ), NULL, this ); - m_radioBtnSizeDate->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeCompareVar ), NULL, this ); - m_radioBtnContent->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeCompareVar ), NULL, this ); - m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSelectRecycleBin ), NULL, this ); - m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnFilterButton ), NULL, this ); - m_bpButton5->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnExLeftSideOnly ), NULL, this ); - m_bpButton6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnExRightSideOnly ), NULL, this ); - m_bpButton7->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnLeftNewer ), NULL, this ); - m_bpButton8->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnRightNewer ), NULL, this ); - m_bpButton9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnDifferent ), NULL, this ); - m_button6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); - m_buttonCreate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCreateJob ), NULL, this ); -} - -BatchDlgGenerated::~BatchDlgGenerated() -{ - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); - m_directoryPanel1->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnEnterLeftDir ), NULL, this ); - m_directoryPanel2->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BatchDlgGenerated::OnEnterRightDir ), NULL, this ); - m_radioBtnSizeDate->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeCompareVar ), NULL, this ); - m_radioBtnContent->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( BatchDlgGenerated::OnChangeCompareVar ), NULL, this ); - m_checkBoxUseRecycler->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSelectRecycleBin ), NULL, this ); - m_bpButtonFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnFilterButton ), NULL, this ); - m_bpButton5->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnExLeftSideOnly ), NULL, this ); - m_bpButton6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnExRightSideOnly ), NULL, this ); - m_bpButton7->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnLeftNewer ), NULL, this ); - m_bpButton8->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnRightNewer ), NULL, this ); - m_bpButton9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnDifferent ), NULL, this ); - m_button6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); - m_buttonCreate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCreateJob ), NULL, this ); -} diff --git a/ui/guiGenerated.h b/ui/guiGenerated.h index a606fc7a..47ce567c 100644 --- a/ui/guiGenerated.h +++ b/ui/guiGenerated.h @@ -37,9 +37,12 @@ class CustomGrid; #include <wx/statline.h> #include <wx/statbmp.h> #include <wx/frame.h> -#include <wx/gauge.h> #include <wx/dialog.h> +#include <wx/gauge.h> #include <wx/animate.h> +#include <wx/treectrl.h> +#include <wx/scrolwin.h> +#include <wx/notebook.h> /////////////////////////////////////////////////////////////////////////// @@ -59,6 +62,7 @@ class GuiGenerated : public wxFrame wxMenuItem* m_menuItemEnglish; wxMenuItem* m_menuItemGerman; wxMenuItem* m_menuItemFrench; + wxMenuItem* m_menuItemJapanese; wxMenu* m_menu2; wxBoxSizer* bSizer1; wxPanel* m_panel71; @@ -78,10 +82,13 @@ class GuiGenerated : public wxFrame wxBitmapButton* m_bpButtonSync; wxPanel* m_panel1; + wxStaticBoxSizer* sbSizer2; wxTextCtrl* m_directoryPanel1; wxDirPickerCtrl* m_dirPicker1; CustomGrid* m_grid1; wxPanel* m_panel3; + wxBoxSizer* bSizer18; + wxBoxSizer* bSizer69; wxBitmapButton* m_bpButtonSwap; CustomGrid* m_grid3; wxPanel* m_panel2; @@ -124,6 +131,7 @@ class GuiGenerated : public wxFrame virtual void OnMenuLangEnglish( wxCommandEvent& event ){ event.Skip(); } virtual void OnMenuLangGerman( wxCommandEvent& event ){ event.Skip(); } virtual void OnMenuLangFrench( wxCommandEvent& event ){ event.Skip(); } + virtual void OnMenuLangJapanese( wxCommandEvent& event ){ event.Skip(); } virtual void OnMenuBatchJob( wxCommandEvent& event ){ event.Skip(); } virtual void OnMenuAbout( wxCommandEvent& event ){ event.Skip(); } virtual void OnCompare( wxCommandEvent& event ){ event.Skip(); } @@ -164,6 +172,81 @@ class GuiGenerated : public wxFrame }; /////////////////////////////////////////////////////////////////////////////// +/// Class BatchDlgGenerated +/////////////////////////////////////////////////////////////////////////////// +class BatchDlgGenerated : public wxDialog +{ + private: + + protected: + wxPanel* m_panel8; + wxStaticText* m_staticText56; + + wxStaticText* m_staticText54; + + wxStaticLine* m_staticline10; + wxStaticText* m_staticText531; + wxStaticText* m_staticText53; + wxTextCtrl* m_directoryPanel1; + wxStaticText* m_staticText541; + wxTextCtrl* m_directoryPanel2; + wxRadioButton* m_radioBtnSizeDate; + wxRadioButton* m_radioBtnContent; + + wxCheckBox* m_checkBoxUseRecycler; + wxCheckBox* m_checkBoxContinueError; + wxCheckBox* m_checkBoxSilent; + + + wxBitmapButton* m_bpButtonFilter; + wxStaticBitmap* m_bitmap8; + wxStaticText* m_staticText15; + wxTextCtrl* m_textCtrlInclude; + + wxStaticBitmap* m_bitmap9; + wxStaticText* m_staticText16; + wxTextCtrl* m_textCtrlExclude; + + wxStaticText* m_staticText211; + wxStaticText* m_staticText311; + wxStaticLine* m_staticline3; + wxStaticBitmap* m_bitmap13; + wxBitmapButton* m_bpButton5; + wxStaticBitmap* m_bitmap14; + wxBitmapButton* m_bpButton6; + wxStaticBitmap* m_bitmap15; + wxBitmapButton* m_bpButton7; + wxStaticBitmap* m_bitmap16; + wxBitmapButton* m_bpButton8; + wxStaticBitmap* m_bitmap17; + wxBitmapButton* m_bpButton9; + wxStaticLine* m_staticline9; + wxButton* m_button6; + wxButton* m_buttonCreate; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ){ event.Skip(); } + virtual void OnEnterLeftDir( wxCommandEvent& event ){ event.Skip(); } + virtual void OnEnterRightDir( wxCommandEvent& event ){ event.Skip(); } + virtual void OnChangeCompareVar( wxCommandEvent& event ){ event.Skip(); } + virtual void OnSelectRecycleBin( wxCommandEvent& event ){ event.Skip(); } + virtual void OnFilterButton( 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 OnCancel( wxCommandEvent& event ){ event.Skip(); } + virtual void OnCreateBatchJob( wxCommandEvent& event ){ event.Skip(); } + + + public: + BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); + ~BatchDlgGenerated(); + +}; + +/////////////////////////////////////////////////////////////////////////////// /// Class CompareStatusGenerated /////////////////////////////////////////////////////////////////////////////// class CompareStatusGenerated : public wxPanel @@ -178,13 +261,11 @@ class CompareStatusGenerated : public wxPanel wxStaticBoxSizer* sbSizer13; wxStaticText* m_staticText46; wxStaticText* m_staticTextFilesToCompare; - - wxStaticBoxSizer* sbSizer11; wxStaticText* m_staticText32; wxStaticText* m_staticTextDataToCompare; wxStaticText* m_staticText37; - wxStaticText* m_staticTextRemainingTime; + wxStaticText* m_staticTextTimeElapsed; wxStaticText* m_staticText30; wxTextCtrl* m_textCtrlFilename; wxGauge* m_gauge2; @@ -292,15 +373,15 @@ class SyncStatusDlgGenerated : public wxDialog wxStaticText* m_staticTextTimeElapsed; wxTextCtrl* m_textCtrlInfo; wxBoxSizer* bSizer28; - wxStaticText* m_staticText26; - wxStaticText* m_staticTextDataRemaining; + wxStaticText* m_staticText25; + wxStaticText* m_staticTextRemainingObj; wxButton* m_buttonOK; wxButton* m_buttonPause; wxButton* m_buttonAbort; - wxStaticText* m_staticText25; - wxStaticText* m_staticTextRemainingObj; + wxStaticText* m_staticText26; + wxStaticText* m_staticTextDataRemaining; // Virtual event handlers, overide them in your derived class @@ -331,7 +412,28 @@ class HelpDlgGenerated : public wxDialog wxStaticText* m_staticText56; - wxTextCtrl* m_textCtrl8; + wxNotebook* m_notebook1; + wxScrolledWindow* m_scrolledWindow1; + wxStaticText* m_staticText59; + wxStaticText* m_staticText60; + wxStaticText* m_staticText61; + wxTreeCtrl* m_treeCtrl1; + wxStaticText* m_staticText63; + wxStaticText* m_staticText75; + wxStaticText* m_staticText76; + wxStaticText* m_staticText77; + wxStaticText* m_staticText78; + wxStaticText* m_staticText79; + wxStaticText* m_staticText80; + wxScrolledWindow* m_scrolledWindow5; + wxStaticText* m_staticText65; + wxStaticText* m_staticText66; + wxTreeCtrl* m_treeCtrl2; + wxStaticText* m_staticText69; + wxStaticText* m_staticText81; + wxStaticText* m_staticText82; + wxStaticText* m_staticText83; + wxStaticText* m_staticText84; wxButton* m_button8; // Virtual event handlers, overide them in your derived class @@ -340,7 +442,7 @@ class HelpDlgGenerated : public wxDialog public: - HelpDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 557,385 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + HelpDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 565,501 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); ~HelpDlgGenerated(); }; @@ -359,7 +461,16 @@ class AboutDlgGenerated : public wxDialog wxStaticText* m_staticText15; wxStaticText* m_build; + wxScrolledWindow* m_scrolledWindow4; + wxStaticText* m_staticText72; + wxStaticText* m_staticText73; + wxStaticText* m_staticText74; + wxScrolledWindow* m_scrolledWindow3; wxStaticText* m_staticText54; + wxStaticText* m_staticText68; + wxStaticText* m_staticText69; + wxStaticText* m_staticText70; + wxStaticText* m_staticText71; wxStaticLine* m_staticline3; wxStaticText* m_staticText131; wxStaticBitmap* m_bitmap9; @@ -460,9 +571,14 @@ class FilterDlgGenerated : public wxDialog wxPanel* m_panel8; wxStaticText* m_staticText56; wxStaticText* m_staticText44; + wxBitmapButton* m_bpButtonHelp; + wxPanel* m_panel13; + wxStaticLine* m_staticline10; wxStaticText* m_staticText45; wxStaticText* m_staticText18; + wxStaticText* m_staticText181; + wxStaticText* m_staticText1811; wxStaticText* m_staticText15; wxStaticBitmap* m_bitmap8; @@ -479,6 +595,7 @@ class FilterDlgGenerated : public wxDialog // 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 OnDefault( wxCommandEvent& event ){ event.Skip(); } virtual void OnCancel( wxCommandEvent& event ){ event.Skip(); } virtual void OnOK( wxCommandEvent& event ){ event.Skip(); } @@ -490,79 +607,4 @@ class FilterDlgGenerated : public wxDialog }; -/////////////////////////////////////////////////////////////////////////////// -/// Class BatchDlgGenerated -/////////////////////////////////////////////////////////////////////////////// -class BatchDlgGenerated : public wxDialog -{ - private: - - protected: - wxPanel* m_panel8; - wxStaticText* m_staticText56; - - wxStaticText* m_staticText54; - - wxStaticLine* m_staticline10; - wxStaticText* m_staticText531; - wxStaticText* m_staticText53; - wxTextCtrl* m_directoryPanel1; - wxStaticText* m_staticText541; - wxTextCtrl* m_directoryPanel2; - wxRadioButton* m_radioBtnSizeDate; - wxRadioButton* m_radioBtnContent; - - wxCheckBox* m_checkBoxUseRecycler; - wxCheckBox* m_checkBoxContinueError; - wxCheckBox* m_checkBoxSilent; - - - wxBitmapButton* m_bpButtonFilter; - wxStaticBitmap* m_bitmap8; - wxStaticText* m_staticText15; - wxTextCtrl* m_textCtrlInclude; - - wxStaticBitmap* m_bitmap9; - wxStaticText* m_staticText16; - wxTextCtrl* m_textCtrlExclude; - - wxStaticText* m_staticText211; - wxStaticText* m_staticText311; - wxStaticLine* m_staticline3; - wxStaticBitmap* m_bitmap13; - wxBitmapButton* m_bpButton5; - wxStaticBitmap* m_bitmap14; - wxBitmapButton* m_bpButton6; - wxStaticBitmap* m_bitmap15; - wxBitmapButton* m_bpButton7; - wxStaticBitmap* m_bitmap16; - wxBitmapButton* m_bpButton8; - wxStaticBitmap* m_bitmap17; - wxBitmapButton* m_bpButton9; - wxStaticLine* m_staticline9; - wxButton* m_button6; - wxButton* m_buttonCreate; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ){ event.Skip(); } - virtual void OnEnterLeftDir( wxCommandEvent& event ){ event.Skip(); } - virtual void OnEnterRightDir( wxCommandEvent& event ){ event.Skip(); } - virtual void OnChangeCompareVar( wxCommandEvent& event ){ event.Skip(); } - virtual void OnSelectRecycleBin( wxCommandEvent& event ){ event.Skip(); } - virtual void OnFilterButton( 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 OnCancel( wxCommandEvent& event ){ event.Skip(); } - virtual void OnCreateJob( wxCommandEvent& event ){ event.Skip(); } - - - public: - BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); - ~BatchDlgGenerated(); - -}; - #endif //__guiGenerated__ |