diff options
Diffstat (limited to 'ui/SmallDialogs.cpp')
-rw-r--r-- | ui/SmallDialogs.cpp | 1026 |
1 files changed, 0 insertions, 1026 deletions
diff --git a/ui/SmallDialogs.cpp b/ui/SmallDialogs.cpp deleted file mode 100644 index aa858454..00000000 --- a/ui/SmallDialogs.cpp +++ /dev/null @@ -1,1026 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) 2008-2010 ZenJu (zhnmju123 AT gmx.de) * -// ************************************************************************** -// -#include "guiGenerated.h" -#include "smallDialogs.h" -#include "messagePopup.h" -#include "../library/resources.h" -#include "../algorithm.h" -#include "../shared/stringConv.h" -#include "../shared/util.h" -#include "../synchronization.h" -#include "../library/customGrid.h" -#include "../shared/customButton.h" -#include "../shared/localization.h" -#include "../shared/globalFunctions.h" -#include "../shared/buildInfo.h" -#include <wx/wupdlock.h> -#include <wx/msgdlg.h> - -using namespace FreeFileSync; - - -class AboutDlg : public AboutDlgGenerated -{ -public: - AboutDlg(wxWindow* window); - -private: - void OnClose(wxCloseEvent& event); - void OnOK(wxCommandEvent& event); -}; - - -AboutDlg::AboutDlg(wxWindow* window) : AboutDlgGenerated(window) -{ - m_bitmap9->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("website"))); - m_bitmap10->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("email"))); - m_bitmap11->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("logo"))); - m_bitmap13->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("gpl"))); - - //create language credits - for (std::vector<LocInfoLine>::const_iterator i = LocalizationInfo::getMapping().begin(); i != LocalizationInfo::getMapping().end(); ++i) - { - //flag - wxStaticBitmap* staticBitmapFlag = new wxStaticBitmap(m_scrolledWindowTranslators, wxID_ANY, GlobalResources::getInstance().getImageByName(i->languageFlag), wxDefaultPosition, wxSize(-1,11), 0 ); - fgSizerTranslators->Add(staticBitmapFlag, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - //language name - wxStaticText* staticTextLanguage = new wxStaticText(m_scrolledWindowTranslators, wxID_ANY, i->languageName, wxDefaultPosition, wxDefaultSize, 0 ); - staticTextLanguage->Wrap( -1 ); - fgSizerTranslators->Add(staticTextLanguage, 0, wxALIGN_CENTER_VERTICAL, 5); - - //translator name - wxStaticText* staticTextTranslator = new wxStaticText(m_scrolledWindowTranslators, wxID_ANY, i->translatorName, wxDefaultPosition, wxDefaultSize, 0 ); - staticTextTranslator->Wrap( -1 ); - fgSizerTranslators->Add(staticTextTranslator, 0, wxALIGN_CENTER_VERTICAL, 5); - } - - bSizerTranslators->Fit(m_scrolledWindowTranslators); - - - //build information - wxString build = __TDATE__; -#if wxUSE_UNICODE - build += wxT(" - Unicode"); -#else - build += wxT(" - ANSI"); -#endif //wxUSE_UNICODE - - //compile time info about 32/64-bit build - if (Utility::is64BitBuild) - build += wxT(" x64"); - else - build += wxT(" x86"); - assert_static(Utility::is32BitBuild || Utility::is64BitBuild); - - wxString buildFormatted = _("(Build: %x)"); - buildFormatted.Replace(wxT("%x"), build); - - m_build->SetLabel(buildFormatted); - - m_animationControl1->SetAnimation(*GlobalResources::getInstance().animationMoney); - m_animationControl1->Play(); - - m_buttonOkay->SetFocus(); - Fit(); -} - - -void AboutDlg::OnClose(wxCloseEvent& event) -{ - EndModal(0); -} - - -void AboutDlg::OnOK(wxCommandEvent& event) -{ - EndModal(0); -} - - -void FreeFileSync::showAboutDialog() -{ - AboutDlg* aboutDlg = new AboutDlg(NULL); - aboutDlg->ShowModal(); - aboutDlg->Destroy(); -} -//######################################################################################## - - -class HelpDlg : public HelpDlgGenerated -{ -public: - HelpDlg(wxWindow* window); - -private: - void OnClose(wxCloseEvent& event); - void OnOK(wxCommandEvent& event); -}; - - -HelpDlg::HelpDlg(wxWindow* window) : HelpDlgGenerated(window) -{ - m_notebook1->SetFocus(); - - m_bitmap25->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("help"))); - - //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, _("- conflict (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(); -} - - -void HelpDlg::OnClose(wxCloseEvent& event) -{ - Destroy(); -} - - -void HelpDlg::OnOK(wxCommandEvent& event) -{ - Destroy(); -} - - -void FreeFileSync::showHelpDialog() -{ - HelpDlg* helpDlg = new HelpDlg(NULL); - helpDlg->ShowModal(); - helpDlg->Destroy(); -} -//######################################################################################## - - -class FilterDlg : public FilterDlgGenerated -{ -public: - FilterDlg(wxWindow* window, - bool isGlobalFilter, - Zstring& filterIncl, - Zstring& filterExcl); - ~FilterDlg() {} - - enum - { - BUTTON_APPLY = 1 - }; - -private: - void OnHelp(wxCommandEvent& event); - void OnDefault(wxCommandEvent& event); - void OnApply(wxCommandEvent& event); - void OnCancel(wxCommandEvent& event); - void OnClose(wxCloseEvent& event); - - const bool isGlobalFilter_; - Zstring& includeFilter; - Zstring& excludeFilter; -}; - - -FilterDlg::FilterDlg(wxWindow* window, - bool isGlobalFilter, //global or local filter dialog? - Zstring& filterIncl, - Zstring& filterExcl) : - FilterDlgGenerated(window), - isGlobalFilter_(isGlobalFilter), - includeFilter(filterIncl), - excludeFilter(filterExcl) -{ - m_bitmap8->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("include"))); - m_bitmap9->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("exclude"))); - m_bitmap26->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("filterOn"))); - m_bpButtonHelp->SetBitmapLabel(GlobalResources::getInstance().getImageByName(wxT("help"))); - - m_textCtrlInclude->SetValue(zToWx(includeFilter)); - m_textCtrlExclude->SetValue(zToWx(excludeFilter)); - - m_panel13->Hide(); - m_button10->SetFocus(); - - //adapt header for global/local dialog - if (isGlobalFilter_) - m_staticTexHeader->SetLabel(_("Filter: All pairs")); - else - m_staticTexHeader->SetLabel(_("Filter: Single pair")); - - Fit(); -} - - -void FilterDlg::OnHelp(wxCommandEvent& event) -{ - m_bpButtonHelp->Hide(); - m_panel13->Show(); - Fit(); - Refresh(); - - event.Skip(); -} - - -void FilterDlg::OnDefault(wxCommandEvent& event) -{ - const FilterConfig nullFilter; - - if (isGlobalFilter_) - { - m_textCtrlInclude->SetValue(zToWx(nullFilter.includeFilter)); - //exclude various recycle bin directories with global filter - m_textCtrlExclude->SetValue(zToWx(standardExcludeFilter())); - } - else - { - m_textCtrlInclude->SetValue(zToWx(nullFilter.includeFilter)); - m_textCtrlExclude->SetValue(zToWx(nullFilter.excludeFilter)); - } - - //changes to mainDialog are only committed when the OK button is pressed - Fit(); -} - - -void FilterDlg::OnApply(wxCommandEvent& event) -{ - //only if user presses ApplyFilter, he wants the changes to be committed - includeFilter = wxToZ(m_textCtrlInclude->GetValue()); - excludeFilter = wxToZ(m_textCtrlExclude->GetValue()); - - //when leaving dialog: filter and redraw grid, if filter is active - EndModal(BUTTON_APPLY); -} - - -void FilterDlg::OnCancel(wxCommandEvent& event) -{ - EndModal(0); -} - - -void FilterDlg::OnClose(wxCloseEvent& event) -{ - EndModal(0); -} - - - -DefaultReturnCode::Response FreeFileSync::showFilterDialog(bool isGlobalFilter, - Zstring& filterIncl, - Zstring& filterExcl) -{ - DefaultReturnCode::Response rv = DefaultReturnCode::BUTTON_CANCEL; - FilterDlg* filterDlg = new FilterDlg(NULL, - isGlobalFilter, //is main filter dialog - filterIncl, - filterExcl); - if (filterDlg->ShowModal() == FilterDlg::BUTTON_APPLY) - rv = DefaultReturnCode::BUTTON_OKAY; - - filterDlg->Destroy(); - return rv; -} -//######################################################################################## - - -class DeleteDialog : public DeleteDlgGenerated -{ -public: - DeleteDialog(wxWindow* main, - const std::vector<FreeFileSync::FileSystemObject*>& rowsOnLeft, - const std::vector<FreeFileSync::FileSystemObject*>& rowsOnRight, - bool& deleteOnBothSides, - bool& useRecycleBin, - int& totalDeleteCount); - - enum - { - BUTTON_OKAY = 1, - BUTTON_CANCEL - }; - -private: - void OnOK(wxCommandEvent& event); - void OnCancel(wxCommandEvent& event); - void OnClose(wxCloseEvent& event); - void OnDelOnBothSides(wxCommandEvent& event); - void OnUseRecycler(wxCommandEvent& event); - - void updateTexts(); - - const std::vector<FreeFileSync::FileSystemObject*>& rowsToDeleteOnLeft; - const std::vector<FreeFileSync::FileSystemObject*>& rowsToDeleteOnRight; - bool& m_deleteOnBothSides; - bool& m_useRecycleBin; - int& totalDelCount; -}; - - -DeleteDialog::DeleteDialog(wxWindow* main, - const std::vector<FileSystemObject*>& rowsOnLeft, - const std::vector<FileSystemObject*>& rowsOnRight, - bool& deleteOnBothSides, - bool& useRecycleBin, - int& totalDeleteCount) : - DeleteDlgGenerated(main), - rowsToDeleteOnLeft(rowsOnLeft), - rowsToDeleteOnRight(rowsOnRight), - m_deleteOnBothSides(deleteOnBothSides), - m_useRecycleBin(useRecycleBin), - totalDelCount(totalDeleteCount) -{ - m_checkBoxDeleteBothSides->SetValue(deleteOnBothSides); - m_checkBoxUseRecycler->SetValue(useRecycleBin); - updateTexts(); - - m_buttonOK->SetFocus(); -} - - -void DeleteDialog::updateTexts() -{ - if (m_checkBoxUseRecycler->GetValue()) - { - m_staticTextHeader->SetLabel(_("Do you really want to move the following object(s) to the Recycle Bin?")); - m_bitmap12->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("recycler"))); - } - else - { - m_staticTextHeader->SetLabel(_("Do you really want to delete the following object(s)?")); - m_bitmap12->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("deleteFile"))); - } - - const std::pair<wxString, int> delInfo = FreeFileSync::deleteFromGridAndHDPreview( - rowsToDeleteOnLeft, - rowsToDeleteOnRight, - m_checkBoxDeleteBothSides->GetValue()); - - const wxString filesToDelete = delInfo.first; - totalDelCount = delInfo.second; - - m_textCtrlMessage->SetValue(filesToDelete); - - Layout(); -} - - -void DeleteDialog::OnOK(wxCommandEvent& event) -{ - EndModal(BUTTON_OKAY); -} - -void DeleteDialog::OnCancel(wxCommandEvent& event) -{ - EndModal(BUTTON_CANCEL); -} - -void DeleteDialog::OnClose(wxCloseEvent& event) -{ - EndModal(BUTTON_CANCEL); -} - -void DeleteDialog::OnDelOnBothSides(wxCommandEvent& event) -{ - m_deleteOnBothSides = m_checkBoxDeleteBothSides->GetValue(); - updateTexts(); -} - -void DeleteDialog::OnUseRecycler(wxCommandEvent& event) -{ - m_useRecycleBin = m_checkBoxUseRecycler->GetValue(); - updateTexts(); -} - - -DefaultReturnCode::Response FreeFileSync::showDeleteDialog(const std::vector<FreeFileSync::FileSystemObject*>& rowsOnLeft, - const std::vector<FreeFileSync::FileSystemObject*>& rowsOnRight, - bool& deleteOnBothSides, - bool& useRecycleBin, - int& totalDeleteCount) -{ - DefaultReturnCode::Response rv = DefaultReturnCode::BUTTON_CANCEL; - - DeleteDialog* confirmDeletion = new DeleteDialog(NULL, - rowsOnLeft, - rowsOnRight, - deleteOnBothSides, - useRecycleBin, - totalDeleteCount); - if (confirmDeletion->ShowModal() == DeleteDialog::BUTTON_OKAY) - rv = DefaultReturnCode::BUTTON_OKAY; - - confirmDeletion->Destroy(); - return rv; -} -//######################################################################################## - - -class CustomizeColsDlg : public CustomizeColsDlgGenerated -{ -public: - CustomizeColsDlg(wxWindow* window, xmlAccess::ColumnAttributes& attr); - - enum - { - BUTTON_OKAY = 10 - }; - -private: - void OnOkay(wxCommandEvent& event); - void OnDefault(wxCommandEvent& event); - void OnCancel(wxCommandEvent& event); - void OnClose(wxCloseEvent& event); - - void OnMoveUp(wxCommandEvent& event); - void OnMoveDown(wxCommandEvent& event); - - xmlAccess::ColumnAttributes& output; -}; - - -CustomizeColsDlg::CustomizeColsDlg(wxWindow* window, xmlAccess::ColumnAttributes& attr) : - CustomizeColsDlgGenerated(window), - output(attr) -{ - m_bpButton29->SetBitmapLabel(GlobalResources::getInstance().getImageByName(wxT("moveUp"))); - m_bpButton30->SetBitmapLabel(GlobalResources::getInstance().getImageByName(wxT("moveDown"))); - - xmlAccess::ColumnAttributes columnSettings = attr; - - sort(columnSettings.begin(), columnSettings.end(), xmlAccess::sortByPositionOnly); - - for (xmlAccess::ColumnAttributes::const_iterator i = columnSettings.begin(); i != columnSettings.end(); ++i) //love these iterators! - { - m_checkListColumns->Append(CustomGridRim::getTypeName(i->type)); - m_checkListColumns->Check(i - columnSettings.begin(), i->visible); - } - - m_checkListColumns->SetSelection(0); - Fit(); -} - - -void CustomizeColsDlg::OnOkay(wxCommandEvent& event) -{ - for (int i = 0; i < int(m_checkListColumns->GetCount()); ++i) - { - const wxString label = m_checkListColumns->GetString(i); - for (xmlAccess::ColumnAttributes::iterator j = output.begin(); j != output.end(); ++j) - { - if (CustomGridRim::getTypeName(j->type) == label) //not nice but short and no performance issue - { - j->position = i; - j->visible = m_checkListColumns->IsChecked(i);; - break; - } - } - } - - EndModal(BUTTON_OKAY); -} - - -void CustomizeColsDlg::OnDefault(wxCommandEvent& event) -{ - xmlAccess::ColumnAttributes defaultColumnAttr = CustomGridRim::getDefaultColumnAttributes(); - - m_checkListColumns->Clear(); - for (xmlAccess::ColumnAttributes::const_iterator i = defaultColumnAttr.begin(); i != defaultColumnAttr.end(); ++i) - { - m_checkListColumns->Append(CustomGridRim::getTypeName(i->type)); - m_checkListColumns->Check(i - defaultColumnAttr.begin(), i->visible); - } -} - - -void CustomizeColsDlg::OnCancel(wxCommandEvent& event) -{ - EndModal(0); -} - - -void CustomizeColsDlg::OnClose(wxCloseEvent& event) -{ - EndModal(0); -} - - -void CustomizeColsDlg::OnMoveUp(wxCommandEvent& event) -{ - const int pos = m_checkListColumns->GetSelection(); - if (1 <= pos && pos < int(m_checkListColumns->GetCount())) - { - const bool checked = m_checkListColumns->IsChecked(pos); - const wxString label = m_checkListColumns->GetString(pos); - - m_checkListColumns->SetString(pos, m_checkListColumns->GetString(pos - 1)); - m_checkListColumns->Check(pos, m_checkListColumns->IsChecked(pos - 1)); - m_checkListColumns->SetString(pos - 1, label); - m_checkListColumns->Check(pos - 1, checked); - m_checkListColumns->Select(pos - 1); - } -} - - -void CustomizeColsDlg::OnMoveDown(wxCommandEvent& event) -{ - const int pos = m_checkListColumns->GetSelection(); - if (0 <= pos && pos < int(m_checkListColumns->GetCount()) - 1) - { - const bool checked = m_checkListColumns->IsChecked(pos); - const wxString label = m_checkListColumns->GetString(pos); - - m_checkListColumns->SetString(pos, m_checkListColumns->GetString(pos + 1)); - m_checkListColumns->Check(pos, m_checkListColumns->IsChecked(pos + 1)); - m_checkListColumns->SetString(pos + 1, label); - m_checkListColumns->Check(pos + 1, checked); - m_checkListColumns->Select(pos + 1); - } -} - - -DefaultReturnCode::Response FreeFileSync::showCustomizeColsDlg(xmlAccess::ColumnAttributes& attr) -{ - DefaultReturnCode::Response rv = DefaultReturnCode::BUTTON_CANCEL; - - CustomizeColsDlg* customizeDlg = new CustomizeColsDlg(NULL, attr); - if (customizeDlg->ShowModal() == CustomizeColsDlg::BUTTON_OKAY) - rv = DefaultReturnCode::BUTTON_OKAY; - customizeDlg->Destroy(); - - return rv; -} -//######################################################################################## - - -class SyncPreviewDlg : public SyncPreviewDlgGenerated -{ -public: - SyncPreviewDlg(wxWindow* parentWindow, - const wxString& variantName, - const FreeFileSync::SyncStatistics& statistics, - bool& dontShowAgain); - enum - { - BUTTON_START = 1, - BUTTON_CANCEL = 2 - }; - -private: - void OnClose(wxCloseEvent& event); - void OnCancel(wxCommandEvent& event); - void OnStartSync(wxCommandEvent& event); - - bool& m_dontShowAgain; -}; - - - -SyncPreviewDlg::SyncPreviewDlg(wxWindow* parentWindow, - const wxString& variantName, - const FreeFileSync::SyncStatistics& statistics, - bool& dontShowAgain) : - SyncPreviewDlgGenerated(parentWindow), - m_dontShowAgain(dontShowAgain) -{ - using FreeFileSync::numberToStringSep; - - m_buttonStartSync->setBitmapFront(GlobalResources::getInstance().getImageByName(wxT("startSync"))); - m_bitmapCreate->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("create"))); - m_bitmapUpdate->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("update"))); - m_bitmapDelete->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("delete"))); - m_bitmapData->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("data"))); - - m_staticTextVariant->SetLabel(variantName); - m_textCtrlData->SetValue(FreeFileSync::formatFilesizeToShortString(statistics.getDataToProcess())); - - m_textCtrlCreateL->SetValue(numberToStringSep(statistics.getCreate( true, false))); - m_textCtrlUpdateL->SetValue(numberToStringSep(statistics.getOverwrite(true, false))); - m_textCtrlDeleteL->SetValue(numberToStringSep(statistics.getDelete( true, false))); - - m_textCtrlCreateR->SetValue(numberToStringSep(statistics.getCreate( false, true))); - m_textCtrlUpdateR->SetValue(numberToStringSep(statistics.getOverwrite(false, true))); - m_textCtrlDeleteR->SetValue(numberToStringSep(statistics.getDelete( false, true))); - - m_checkBoxDontShowAgain->SetValue(dontShowAgain); - - m_buttonStartSync->SetFocus(); - Fit(); -} - - -void SyncPreviewDlg::OnClose(wxCloseEvent& event) -{ - EndModal(BUTTON_CANCEL); -} - - -void SyncPreviewDlg::OnCancel(wxCommandEvent& event) -{ - EndModal(BUTTON_CANCEL); -} - - -void SyncPreviewDlg::OnStartSync(wxCommandEvent& event) -{ - m_dontShowAgain = m_checkBoxDontShowAgain->GetValue(); - EndModal(BUTTON_START); -} - - -DefaultReturnCode::Response FreeFileSync::showSyncPreviewDlg( - const wxString& variantName, - const FreeFileSync::SyncStatistics& statistics, - bool& dontShowAgain) -{ - DefaultReturnCode::Response rv = DefaultReturnCode::BUTTON_CANCEL; - - SyncPreviewDlg* preview = new SyncPreviewDlg(NULL, - variantName, - statistics, - dontShowAgain); - - if (preview->ShowModal() == SyncPreviewDlg::BUTTON_START) - rv = DefaultReturnCode::BUTTON_OKAY; - - preview->Destroy(); - - return rv; -} -//######################################################################################## - - -class CompareCfgDialog : public CmpCfgDlgGenerated -{ -public: - CompareCfgDialog(wxWindow* parentWindow, - const wxPoint& position, - FreeFileSync::CompareVariant& cmpVar, - SymLinkHandling& handleSymlinks); - - enum - { - BUTTON_OKAY = 10 - }; - -private: - void OnOkay(wxCommandEvent& event); - void OnClose(wxCloseEvent& event); - void OnCancel(wxCommandEvent& event); - void OnTimeSize(wxCommandEvent& event); - void OnContent(wxCommandEvent& event); - void OnShowHelp(wxCommandEvent& event); - - void updateView(); - - FreeFileSync::CompareVariant& cmpVarOut; - SymLinkHandling& handleSymlinksOut; -}; - - -namespace -{ -void setValue(wxChoice& choiceCtrl, FreeFileSync::SymLinkHandling value) -{ - choiceCtrl.Clear(); - choiceCtrl.Append(_("Ignore")); - choiceCtrl.Append(_("Direct")); - choiceCtrl.Append(_("Follow")); - - //default - choiceCtrl.SetSelection(0); - - switch (value) - { - case FreeFileSync::SYMLINK_IGNORE: - choiceCtrl.SetSelection(0); - break; - case FreeFileSync::SYMLINK_USE_DIRECTLY: - choiceCtrl.SetSelection(1); - break; - case FreeFileSync::SYMLINK_FOLLOW_LINK: - choiceCtrl.SetSelection(2); - break; - } -} - - -FreeFileSync::SymLinkHandling getValue(const wxChoice& choiceCtrl) -{ - switch (choiceCtrl.GetSelection()) - { - case 0: - return FreeFileSync::SYMLINK_IGNORE; - case 1: - return FreeFileSync::SYMLINK_USE_DIRECTLY; - case 2: - return FreeFileSync::SYMLINK_FOLLOW_LINK; - default: - assert(false); - return FreeFileSync::SYMLINK_IGNORE; - } -} -} - -CompareCfgDialog::CompareCfgDialog(wxWindow* parentWindow, - const wxPoint& position, - CompareVariant& cmpVar, - SymLinkHandling& handleSymlinks) : - CmpCfgDlgGenerated(parentWindow), - cmpVarOut(cmpVar), - handleSymlinksOut(handleSymlinks) -{ - //move dialog up so that compare-config button and first config-variant are on same level - Move(wxPoint(position.x, std::max(0, position.y - (m_buttonTimeSize->GetScreenPosition() - GetScreenPosition()).y))); - - m_bpButtonHelp->SetBitmapLabel(GlobalResources::getInstance().getImageByName(wxT("help"))); - m_bitmapByTime->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("cmpByTime"))); - m_bitmapByContent->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("cmpByContent"))); - - switch (cmpVar) - { - case CMP_BY_TIME_SIZE: - m_radioBtnSizeDate->SetValue(true); - m_buttonContent->SetFocus(); //set focus on the other button - break; - case CMP_BY_CONTENT: - m_radioBtnContent->SetValue(true); - m_buttonTimeSize->SetFocus(); //set focus on the other button - break; - } - - - setValue(*m_choiceHandleSymlinks, handleSymlinks); - - updateView(); -} - -void CompareCfgDialog::updateView() -{ - Fit(); -} - -void CompareCfgDialog::OnOkay(wxCommandEvent& event) -{ - if (m_radioBtnContent->GetValue()) - cmpVarOut = CMP_BY_CONTENT; - else - cmpVarOut = CMP_BY_TIME_SIZE; - - handleSymlinksOut = getValue(*m_choiceHandleSymlinks);; - - EndModal(BUTTON_OKAY); -} - - -void CompareCfgDialog::OnClose(wxCloseEvent& event) -{ - EndModal(0); -} - - -void CompareCfgDialog::OnCancel(wxCommandEvent& event) -{ - EndModal(0); -} - - -void CompareCfgDialog::OnTimeSize(wxCommandEvent& event) -{ - m_radioBtnSizeDate->SetValue(true); - OnOkay(event); -} - - -void CompareCfgDialog::OnContent(wxCommandEvent& event) -{ - m_radioBtnContent->SetValue(true); - OnOkay(event); -} - - -void CompareCfgDialog::OnShowHelp(wxCommandEvent& event) -{ - HelpDlg* helpDlg = new HelpDlg(this); - helpDlg->ShowModal(); -} - - -DefaultReturnCode::Response FreeFileSync::showCompareCfgDialog( - const wxPoint& position, - CompareVariant& cmpVar, - SymLinkHandling& handleSymlinks) -{ - CompareCfgDialog syncDlg(NULL, position, cmpVar, handleSymlinks); - - return syncDlg.ShowModal() == CompareCfgDialog::BUTTON_OKAY ? - DefaultReturnCode::BUTTON_OKAY : - DefaultReturnCode::BUTTON_CANCEL; -} -//######################################################################################## - - -class GlobalSettingsDlg : public GlobalSettingsDlgGenerated -{ -public: - GlobalSettingsDlg(wxWindow* window, xmlAccess::XmlGlobalSettings& globalSettings); - - enum - { - BUTTON_OKAY = 10 - }; - -private: - void OnOkay(wxCommandEvent& event); - void OnResetDialogs(wxCommandEvent& event); - void OnDefault(wxCommandEvent& event); - void OnCancel(wxCommandEvent& event); - void OnClose(wxCloseEvent& event); - void OnAddRow(wxCommandEvent& event); - void OnRemoveRow(wxCommandEvent& event); - - void set(const xmlAccess::ExternalApps& extApp); - xmlAccess::ExternalApps getExtApp(); - - xmlAccess::XmlGlobalSettings& settings; -}; - - -GlobalSettingsDlg::GlobalSettingsDlg(wxWindow* window, xmlAccess::XmlGlobalSettings& globalSettings) : - GlobalSettingsDlgGenerated(window), - settings(globalSettings) -{ - m_bitmapSettings->SetBitmap(GlobalResources::getInstance().getImageByName(wxT("settings"))); - m_buttonResetDialogs->setBitmapFront(GlobalResources::getInstance().getImageByName(wxT("warningSmall")), 5); - m_bpButtonAddRow->SetBitmapLabel(GlobalResources::getInstance().getImageByName(wxT("addFolderPair"))); - m_bpButtonRemoveRow->SetBitmapLabel(GlobalResources::getInstance().getImageByName(wxT("removeFolderPair"))); - - m_checkBoxIgnoreOneHour->SetValue(globalSettings.ignoreOneHourDiff); - m_checkBoxCopyLocked->SetValue(globalSettings.copyLockedFiles); - -#ifndef FFS_WIN - m_checkBoxCopyLocked->Hide(); -#endif - - set(globalSettings.gui.externelApplications); - - const wxString toolTip = wxString(_("Integrate external applications into context menu. The following macros are available:")) + wxT("\n\n") + - wxT("%name \t") + _("- full file or directory name") + wxT("\n") + - wxT("%dir \t") + _("- directory part only") + wxT("\n") + - wxT("%nameCo \t") + _("- Other side's counterpart to %name") + wxT("\n") + - wxT("%dirCo \t") + _("- Other side's counterpart to %dir"); - - m_gridCustomCommand->GetGridWindow()->SetToolTip(toolTip); - m_gridCustomCommand->GetGridColLabelWindow()->SetToolTip(toolTip); - - m_buttonOkay->SetFocus(); - - Fit(); -} - - -void GlobalSettingsDlg::OnOkay(wxCommandEvent& event) -{ - //write global settings only when okay-button is pressed! - settings.ignoreOneHourDiff = m_checkBoxIgnoreOneHour->GetValue(); - settings.copyLockedFiles = m_checkBoxCopyLocked->GetValue(); - - settings.gui.externelApplications = getExtApp(); - - EndModal(BUTTON_OKAY); -} - - -void GlobalSettingsDlg::OnResetDialogs(wxCommandEvent& event) -{ - QuestionDlg* messageDlg = new QuestionDlg(this, - QuestionDlg::BUTTON_YES | QuestionDlg::BUTTON_CANCEL, - _("Re-enable all hidden dialogs?")); - - if (messageDlg->ShowModal() == QuestionDlg::BUTTON_YES) - settings.optDialogs.resetDialogs(); -} - - -void GlobalSettingsDlg::OnDefault(wxCommandEvent& event) -{ - xmlAccess::XmlGlobalSettings defaultCfg; - - m_checkBoxIgnoreOneHour->SetValue(defaultCfg.ignoreOneHourDiff); - m_checkBoxCopyLocked->SetValue(defaultCfg.copyLockedFiles); - set(defaultCfg.gui.externelApplications); -} - - -void GlobalSettingsDlg::OnCancel(wxCommandEvent& event) -{ - EndModal(0); -} - - -void GlobalSettingsDlg::OnClose(wxCloseEvent& event) -{ - EndModal(0); -} - - -void GlobalSettingsDlg::set(const xmlAccess::ExternalApps& extApp) -{ - const int rowCount = m_gridCustomCommand->GetNumberRows(); - if (rowCount > 0) - m_gridCustomCommand->DeleteRows(0, rowCount); - - m_gridCustomCommand->AppendRows(static_cast<int>(extApp.size())); - for (xmlAccess::ExternalApps::const_iterator i = extApp.begin(); i != extApp.end(); ++i) - { - const int row = i - extApp.begin(); - m_gridCustomCommand->SetCellValue(row, 0, i->first); //description - m_gridCustomCommand->SetCellValue(row, 1, i->second); //commandline - } - Fit(); -} - - -xmlAccess::ExternalApps GlobalSettingsDlg::getExtApp() -{ - xmlAccess::ExternalApps output; - for (int i = 0; i < m_gridCustomCommand->GetNumberRows(); ++i) - output.push_back( - std::make_pair(m_gridCustomCommand->GetCellValue(i, 0), //description - m_gridCustomCommand->GetCellValue(i, 1))); //commandline - return output; -} - - -void GlobalSettingsDlg::OnAddRow(wxCommandEvent& event) -{ - wxWindowUpdateLocker dummy(this); //avoid display distortion - - const int selectedRow = m_gridCustomCommand->GetGridCursorRow(); - if (0 <= selectedRow && selectedRow < m_gridCustomCommand->GetNumberRows()) - m_gridCustomCommand->InsertRows(selectedRow); - else - m_gridCustomCommand->AppendRows(); - - Fit(); -} - - -void GlobalSettingsDlg::OnRemoveRow(wxCommandEvent& event) -{ - if (m_gridCustomCommand->GetNumberRows() > 0) - { - wxWindowUpdateLocker dummy(this); //avoid display distortion - - const int selectedRow = m_gridCustomCommand->GetGridCursorRow(); - if (0 <= selectedRow && selectedRow < m_gridCustomCommand->GetNumberRows()) - m_gridCustomCommand->DeleteRows(selectedRow); - else - m_gridCustomCommand->DeleteRows(m_gridCustomCommand->GetNumberRows() - 1); - - Fit(); - } -} - - -DefaultReturnCode::Response FreeFileSync::showGlobalSettingsDlg(xmlAccess::XmlGlobalSettings& globalSettings) -{ - DefaultReturnCode::Response rv = DefaultReturnCode::BUTTON_CANCEL; - - wxDialog* settingsDlg = new GlobalSettingsDlg(NULL, globalSettings); - if (settingsDlg->ShowModal() == GlobalSettingsDlg::BUTTON_OKAY) - rv = DefaultReturnCode::BUTTON_OKAY; - - settingsDlg->Destroy(); - - return rv; -} |