From c0fce877c478ddbf71a1b651c789e5ea00a00144 Mon Sep 17 00:00:00 2001 From: Daniel Wilhelm Date: Fri, 18 Apr 2014 17:05:30 +0200 Subject: 3.4 --- ui/guiStatusHandler.cpp | 125 ++++++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 58 deletions(-) (limited to 'ui/guiStatusHandler.cpp') diff --git a/ui/guiStatusHandler.cpp b/ui/guiStatusHandler.cpp index 3cf6eb01..bd5f001e 100644 --- a/ui/guiStatusHandler.cpp +++ b/ui/guiStatusHandler.cpp @@ -1,9 +1,19 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) 2008-2010 ZenJu (zhnmju123 AT gmx.de) * +// ************************************************************************** +// #include "guiStatusHandler.h" #include "smallDialogs.h" +#include "messagePopup.h" #include "../shared/systemConstants.h" #include "mainDialog.h" #include #include "../shared/globalFunctions.h" +#include "../shared/stringConv.h" + +using namespace FreeFileSync; CompareStatusHandler::CompareStatusHandler(MainDialog* dlg) : @@ -17,8 +27,8 @@ CompareStatusHandler::CompareStatusHandler(MainDialog* dlg) : mainDialog->disableAllElements(); //display status panel during compare - mainDialog->compareStatus->init(); //clear old values - mainDialog->compareStatus->Show(); + mainDialog->compareStatus.init(); //clear old values + mainDialog->compareStatus.getAsWindow()->Show(); mainDialog->bSizer1->Layout(); //both sizers need to recalculate! mainDialog->bSizer6->Layout(); //adapt layout for wxBitmapWithImage @@ -40,7 +50,7 @@ CompareStatusHandler::~CompareStatusHandler() mainDialog->pushStatusInformation(_("Operation aborted!")); //hide status panel from main window - mainDialog->compareStatus->Hide(); + mainDialog->compareStatus.getAsWindow()->Hide(); mainDialog->bSizer6->Layout(); //adapt layout for wxBitmapWithImage mainDialog->Layout(); @@ -54,7 +64,7 @@ CompareStatusHandler::~CompareStatusHandler() inline void CompareStatusHandler::updateStatusText(const Zstring& text) { - mainDialog->compareStatus->setStatusText_NoUpdate(text); + mainDialog->compareStatus.setStatusText_NoUpdate(text); } @@ -67,7 +77,7 @@ void CompareStatusHandler::initNewProcess(int objectsTotal, wxLongLong dataTotal case StatusHandler::PROCESS_SCANNING: break; case StatusHandler::PROCESS_COMPARING_CONTENT: - mainDialog->compareStatus->switchToCompareBytewise(objectsTotal, dataTotal); + mainDialog->compareStatus.switchToCompareBytewise(objectsTotal, dataTotal); mainDialog->Layout(); break; case StatusHandler::PROCESS_SYNCHRONIZING: @@ -84,10 +94,10 @@ void CompareStatusHandler::updateProcessedData(int objectsProcessed, wxLongLong switch (currentProcess) { case StatusHandler::PROCESS_SCANNING: - mainDialog->compareStatus->incScannedObjects_NoUpdate(objectsProcessed); + mainDialog->compareStatus.incScannedObjects_NoUpdate(objectsProcessed); break; case StatusHandler::PROCESS_COMPARING_CONTENT: - mainDialog->compareStatus->incProcessedCmpData_NoUpdate(objectsProcessed, dataProcessed); + mainDialog->compareStatus.incProcessedCmpData_NoUpdate(objectsProcessed, dataProcessed); break; case StatusHandler::PROCESS_SYNCHRONIZING: case StatusHandler::PROCESS_NONE: @@ -102,7 +112,7 @@ ErrorHandler::Response CompareStatusHandler::reportError(const wxString& message if (ignoreErrors) return ErrorHandler::IGNORE_ERROR; - mainDialog->compareStatus->updateStatusPanelNow(); + mainDialog->compareStatus.updateStatusPanelNow(); bool ignoreNextErrors = false; const wxString errorMessage = message + wxT("\n\n\n") + _("Ignore this error, retry or abort?"); @@ -129,7 +139,7 @@ ErrorHandler::Response CompareStatusHandler::reportError(const wxString& message void CompareStatusHandler::reportFatalError(const wxString& errorMessage) { - mainDialog->compareStatus->updateStatusPanelNow(); + mainDialog->compareStatus.updateStatusPanelNow(); bool dummy = false; ErrorDlg* errorDlg = new ErrorDlg(mainDialog, @@ -145,7 +155,7 @@ void CompareStatusHandler::reportWarning(const wxString& warningMessage, bool& w if (!warningActive || ignoreErrors) //if errors are ignored, then warnings should also return; - mainDialog->compareStatus->updateStatusPanelNow(); + mainDialog->compareStatus.updateStatusPanelNow(); //show popup and ask user how to handle warning bool dontWarnAgain = false; @@ -169,7 +179,7 @@ void CompareStatusHandler::reportWarning(const wxString& warningMessage, bool& w inline void CompareStatusHandler::forceUiRefresh() { - mainDialog->compareStatus->updateStatusPanelNow(); + mainDialog->compareStatus.updateStatusPanelNow(); } @@ -182,66 +192,59 @@ void CompareStatusHandler::OnAbortCompare(wxCommandEvent& event) void CompareStatusHandler::abortThisProcess() { requestAbortion(); - throw FreeFileSync::AbortThisProcess(); //abort can be triggered by syncStatusFrame + throw FreeFileSync::AbortThisProcess(); } //######################################################################################################## SyncStatusHandler::SyncStatusHandler(wxWindow* dlg, bool ignoreAllErrors) : - ignoreErrors(ignoreAllErrors) -{ - syncStatusFrame = new SyncStatus(this, dlg); - syncStatusFrame->Show(); - updateUiNow(); -} + syncStatusFrame(*this, dlg, false), + ignoreErrors(ignoreAllErrors) {} SyncStatusHandler::~SyncStatusHandler() { - //print the results list - wxString result; - if (errorLog.messageCount() > 0) - { - if (errorLog.errorsTotal() > 0) - { - wxString header(_("Warning: Synchronization failed for %x item(s):")); - header.Replace(wxT("%x"), globalFunctions::numberToWxString(errorLog.errorsTotal()), false); - result += header + wxT("\n\n"); - } + const int totalErrors = errorLog.errorsTotal(); //evaluate before finalizing log - const std::vector& messages = errorLog.getFormattedMessages(); - for (std::vector::const_iterator i = messages.begin(); i != messages.end(); ++i) - { - result += *i; - result += wxChar('\n'); - } + //finalize error log + if (abortIsRequested()) + errorLog.logError(wxString(_("Synchronization aborted!")) + wxT(" ") + _("You may try to synchronize remaining items again (WITHOUT having to re-compare)!")); + else if (totalErrors) + errorLog.logWarning(wxString(_("Synchronization completed with errors!")) + wxT(" ") + _("You may try to synchronize remaining items again (WITHOUT having to re-compare)!")); + else + errorLog.logInfo(_("Synchronization completed successfully!")); - result += wxT("\n"); - } - //notify to syncStatusFrame that current process has ended - if (abortIsRequested()) + //print the results list + wxString finalMessage; + if (totalErrors > 0) { - result += wxString(_("Synchronization aborted!")) + wxT(" ") + _("You may try to synchronize remaining items again (WITHOUT having to re-compare)!"); - syncStatusFrame->processHasFinished(SyncStatus::ABORTED, result); //enable okay and close events + wxString header(_("Warning: Synchronization failed for %x item(s):")); + header.Replace(wxT("%x"), globalFunctions::numberToWxString(totalErrors), false); + finalMessage += header + wxT("\n\n"); } - else if (errorLog.errorsTotal() > 0) + + const ErrorLogging::MessageEntry& messages = errorLog.getFormattedMessages(); + for (ErrorLogging::MessageEntry::const_iterator i = messages.begin(); i != messages.end(); ++i) { - result += wxString(_("Synchronization completed with errors!")) + wxT(" ") + _("You may try to synchronize remaining items again (WITHOUT having to re-compare)!"); - syncStatusFrame->processHasFinished(SyncStatus::FINISHED_WITH_ERROR, result); + finalMessage += *i; + finalMessage += wxT("\n\n"); } + + //notify to syncStatusFrame that current process has ended + if (abortIsRequested()) + syncStatusFrame.processHasFinished(SyncStatus::ABORTED, finalMessage); //enable okay and close events + else if (totalErrors > 0) + syncStatusFrame.processHasFinished(SyncStatus::FINISHED_WITH_ERROR, finalMessage); else - { - result += _("Synchronization completed successfully!"); - syncStatusFrame->processHasFinished(SyncStatus::FINISHED_WITH_SUCCESS, result); - } + syncStatusFrame.processHasFinished(SyncStatus::FINISHED_WITH_SUCCESS, finalMessage); } inline void SyncStatusHandler::updateStatusText(const Zstring& text) { - syncStatusFrame->setStatusText_NoUpdate(text); + syncStatusFrame.setStatusText_NoUpdate(text); } @@ -250,8 +253,8 @@ void SyncStatusHandler::initNewProcess(int objectsTotal, wxLongLong dataTotal, P switch (processID) { case StatusHandler::PROCESS_SYNCHRONIZING: - syncStatusFrame->resetGauge(objectsTotal, dataTotal); - syncStatusFrame->setCurrentStatus(SyncStatus::SYNCHRONIZING); + syncStatusFrame.resetGauge(objectsTotal, dataTotal); + syncStatusFrame.setCurrentStatus(SyncStatus::SYNCHRONIZING); break; case StatusHandler::PROCESS_SCANNING: case StatusHandler::PROCESS_COMPARING_CONTENT: @@ -265,7 +268,7 @@ void SyncStatusHandler::initNewProcess(int objectsTotal, wxLongLong dataTotal, P inline void SyncStatusHandler::updateProcessedData(int objectsProcessed, wxLongLong dataProcessed) { - syncStatusFrame->incProgressIndicator_NoUpdate(objectsProcessed, dataProcessed); + syncStatusFrame.incProgressIndicator_NoUpdate(objectsProcessed, dataProcessed); } @@ -277,14 +280,17 @@ ErrorHandler::Response SyncStatusHandler::reportError(const wxString& errorMessa return ErrorHandler::IGNORE_ERROR; } - syncStatusFrame->updateStatusDialogNow(); + syncStatusFrame.updateStatusDialogNow(); bool ignoreNextErrors = false; - ErrorDlg* errorDlg = new ErrorDlg(syncStatusFrame, + ErrorDlg* errorDlg = new ErrorDlg(NULL, ErrorDlg::BUTTON_IGNORE | ErrorDlg::BUTTON_RETRY | ErrorDlg::BUTTON_ABORT, errorMessage + wxT("\n\n\n") + _("Ignore this error, retry or abort synchronization?"), ignoreNextErrors); - switch (static_cast(errorDlg->ShowModal())) + const ErrorDlg::ReturnCodes rv = static_cast(errorDlg->ShowModal()); + errorDlg->Destroy(); + + switch (rv) { case ErrorDlg::BUTTON_IGNORE: ignoreErrors = ignoreNextErrors; @@ -320,15 +326,18 @@ void SyncStatusHandler::reportWarning(const wxString& warningMessage, bool& warn return; else { - syncStatusFrame->updateStatusDialogNow(); + syncStatusFrame.updateStatusDialogNow(); //show popup and ask user how to handle warning bool dontWarnAgain = false; - WarningDlg* warningDlg = new WarningDlg(syncStatusFrame, + WarningDlg* warningDlg = new WarningDlg(NULL, WarningDlg::BUTTON_IGNORE | WarningDlg::BUTTON_ABORT, warningMessage, dontWarnAgain); - switch (static_cast(warningDlg->ShowModal())) + const WarningDlg::Response rv = static_cast(warningDlg->ShowModal()); + warningDlg->Destroy(); + + switch (rv) { case WarningDlg::BUTTON_IGNORE: //no unhandled error situation! warningActive = !dontWarnAgain; @@ -346,7 +355,7 @@ void SyncStatusHandler::reportWarning(const wxString& warningMessage, bool& warn void SyncStatusHandler::forceUiRefresh() { - syncStatusFrame->updateStatusDialogNow(); + syncStatusFrame.updateStatusDialogNow(); } -- cgit