summaryrefslogtreecommitdiff
path: root/ui/guiStatusHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ui/guiStatusHandler.cpp')
-rw-r--r--ui/guiStatusHandler.cpp125
1 files changed, 67 insertions, 58 deletions
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 <wx/wupdlock.h>
#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<wxString>& messages = errorLog.getFormattedMessages();
- for (std::vector<wxString>::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::ReturnCodes>(errorDlg->ShowModal()))
+ const ErrorDlg::ReturnCodes rv = static_cast<ErrorDlg::ReturnCodes>(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::Response>(warningDlg->ShowModal()))
+ const WarningDlg::Response rv = static_cast<WarningDlg::Response>(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();
}
bgstack15