Index: src/ch/FeedbackReplaceDlg.cpp =================================================================== diff -u -r3921d82d9605d98b2281f3f42d9f9c8385b89a3e -re6f64ea0eecaf86dfa1a42c80604d227b69be768 --- src/ch/FeedbackReplaceDlg.cpp (.../FeedbackReplaceDlg.cpp) (revision 3921d82d9605d98b2281f3f42d9f9c8385b89a3e) +++ src/ch/FeedbackReplaceDlg.cpp (.../FeedbackReplaceDlg.cpp) (revision e6f64ea0eecaf86dfa1a42c80604d227b69be768) @@ -8,16 +8,21 @@ #include "FeedbackHandler.h" #include "resource.h" #include "../libchengine/TFileInfo.h" +#include "StringHelpers.h" +#include "../libchengine/FeedbackPredefinedRules.h" +#include "RuleEditDlg.h" -// CFeedbackReplaceDlg dialog +using namespace chengine; +using namespace string; IMPLEMENT_DYNAMIC(CFeedbackReplaceDlg, ictranslate::CLanguageDialog) -CFeedbackReplaceDlg::CFeedbackReplaceDlg(const chengine::TFileInfo& spSrcFile, const chengine::TFileInfo& spDstFile, CWnd* pParent /*=nullptr*/) +CFeedbackReplaceDlg::CFeedbackReplaceDlg(chengine::FeedbackRules& currentRules, const chengine::TFileInfo& spSrcFile, const chengine::TFileInfo& spDstFile, const TString& strSuggestedName, CWnd* pParent /*=nullptr*/) : ictranslate::CLanguageDialog(IDD_FEEDBACK_REPLACE_DIALOG, pParent), - m_bAllItems(FALSE), + m_rules(currentRules), m_rSrcFile(spSrcFile), - m_rDstFile(spDstFile) + m_rDstFile(spDstFile), + m_strNewName(strSuggestedName) { } @@ -37,19 +42,30 @@ DDX_Control(pDX, IDC_SRC_FILESIZE_EDIT, m_ctlSrcSize); DDX_Control(pDX, IDC_DST_FILENAME_EDIT, m_ctlDstName); + DDX_Control(pDX, IDC_DST_RENAME_EDIT, m_ctlDstRename); DDX_Control(pDX, IDC_DST_PATH_EDIT, m_ctlDstPath); DDX_Control(pDX, IDC_DST_MODIFIEDDATE_EDIT, m_ctlDstDate); DDX_Control(pDX, IDC_DST_FILESIZE_EDIT, m_ctlDstSize); - DDX_Check(pDX, IDC_ALL_ITEMS_CHECK, m_bAllItems); + DDX_Control(pDX, IDC_REPLACE_BUTTON, m_btnReplace); + DDX_Control(pDX, IDC_RENAME_BUTTON, m_btnRename); + DDX_Control(pDX, IDC_RESUME_BUTTON, m_btnResume); + DDX_Control(pDX, IDC_SKIP_BUTTON, m_btnSkip); + DDX_Control(pDX, IDC_PAUSE_BUTTON, m_btnPause); + DDX_Control(pDX, IDC_CANCEL_BUTTON, m_btnCancel); + + DDX_Control(pDX, IDC_CUSTOM_RULES_BUTTON, m_btnCustomRules); } BEGIN_MESSAGE_MAP(CFeedbackReplaceDlg, ictranslate::CLanguageDialog) ON_BN_CLICKED(IDC_REPLACE_BUTTON, &CFeedbackReplaceDlg::OnBnClickedReplaceButton) - ON_BN_CLICKED(IDC_COPY_REST_BUTTON, &CFeedbackReplaceDlg::OnBnClickedCopyRestButton) + ON_BN_CLICKED(IDC_RENAME_BUTTON, &CFeedbackReplaceDlg::OnBnClickedRenameButton) + ON_BN_CLICKED(IDC_RESUME_BUTTON, &CFeedbackReplaceDlg::OnBnClickedCopyRestButton) ON_BN_CLICKED(IDC_SKIP_BUTTON, &CFeedbackReplaceDlg::OnBnClickedSkipButton) ON_BN_CLICKED(IDC_PAUSE_BUTTON, &CFeedbackReplaceDlg::OnBnClickedPauseButton) ON_BN_CLICKED(IDC_CANCEL_BUTTON, &CFeedbackReplaceDlg::OnBnClickedCancelButton) + ON_BN_CLICKED(IDC_CUSTOM_RULES_BUTTON, &CFeedbackReplaceDlg::OnBnCustomRulesButton) + ON_WM_GETMINMAXINFO() END_MESSAGE_MAP() @@ -59,55 +75,86 @@ { CLanguageDialog::OnInitDialog(); + GetWindowRect(&m_rcInitial); + // set dialog icon HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); SetIcon(hIcon, FALSE); AddResizableControl(IDC_INFO_STATIC, 0.0, 0.0, 1.0, 0.0); - AddResizableControl(IDC_00_STATIC, 0.0, 0.0, 1.0, 0.0); AddResizableControl(IDC_SRC_ICON_STATIC, 0.0, 0.0, 0.0, 0.0); AddResizableControl(IDC_SRCFILE_STATIC, 0.0, 0.0, 1.0, 0.0); + + AddResizableControl(IDC_SRC_NAME_STATIC, 0.0, 0.0, 0.0, 0.0); AddResizableControl(IDC_SRC_FILENAME_EDIT, 0.0, 0.0, 1.0, 0.0); + AddResizableControl(IDC_SRC_LOCATION_STATIC, 0.0, 0.0, 0.0, 0.0); AddResizableControl(IDC_SRC_PATH_EDIT, 0.0, 0.0, 1.0, 0.0); + AddResizableControl(IDC_SRC_SIZE_STATIC, 0.0, 0.0, 0.0, 0.0); AddResizableControl(IDC_SRC_FILESIZE_EDIT, 0.0, 0.0, 1.0, 0.0); + AddResizableControl(IDC_SRC_TIME_STATIC, 0.0, 0.0, 0.0, 0.0); AddResizableControl(IDC_SRC_MODIFIEDDATE_EDIT, 0.0, 0.0, 1.0, 0.0); - AddResizableControl(IDC_01_STATIC, 0.0, 0.5, 1.0, 0.0); - AddResizableControl(IDC_DST_ICON_STATIC, 0.0, 0.5, 0.0, 0.0); + AddResizableControl(IDC_DST_ICON_STATIC, 0.0, 0.0, 0.0, 0.0); AddResizableControl(IDC_DSTFILE_STATIC, 0.0, 0.0, 1.0, 0.0); - AddResizableControl(IDC_DST_FILENAME_EDIT, 0.0, 1.0, 1.0, 0.0); - AddResizableControl(IDC_DST_PATH_EDIT, 0.0, 1.0, 1.0, 0.0); - AddResizableControl(IDC_DST_FILESIZE_EDIT, 0.0, 1.0, 1.0, 0.0); - AddResizableControl(IDC_DST_MODIFIEDDATE_EDIT, 0.0, 1.0, 1.0, 0.0); - AddResizableControl(IDC_COPY_REST_BUTTON, 0.0, 1.0, 0.0, 0.0); - AddResizableControl(IDC_SKIP_BUTTON, 0.0, 1.0, 0.0, 0.0); - AddResizableControl(IDC_PAUSE_BUTTON, 0.0, 1.0, 0.0, 0.0); - AddResizableControl(IDC_CANCEL_BUTTON, 0.0, 1.0, 0.0, 0.0); - AddResizableControl(IDC_REPLACE_BUTTON, 0.0, 1.0, 0.0, 0.0); + AddResizableControl(IDC_DST_NAME_STATIC, 0.0, 0.0, 0.0, 0.0); + AddResizableControl(IDC_DST_FILENAME_EDIT, 0.0, 0.0, 1.0, 0.0); - AddResizableControl(IDC_ALL_ITEMS_CHECK, 0.0, 1.0, 1.0, 0.0); + AddResizableControl(IDC_DST_RENAME_STATIC, 0.0, 0.0, 0.0, 0.0); + AddResizableControl(IDC_DST_RENAME_EDIT, 0.0, 0.0, 1.0, 0.0); + AddResizableControl(IDC_DST_LOCATION_STATIC, 0.0, 0.0, 0.0, 0.0); + AddResizableControl(IDC_DST_PATH_EDIT, 0.0, 0.0, 1.0, 0.0); + + AddResizableControl(IDC_DST_SIZE_STATIC, 0.0, 0.0, 0.0, 0.0); + AddResizableControl(IDC_DST_FILESIZE_EDIT, 0.0, 0.0, 1.0, 0.0); + + AddResizableControl(IDC_DST_TIME_STATIC, 0.0, 0.0, 0.0, 0.0); + AddResizableControl(IDC_DST_MODIFIEDDATE_EDIT, 0.0, 0.0, 1.0, 0.0); + + AddResizableControl(IDC_REPLACE_BUTTON, 0.0, 0.0, 0.25, 0.0); + AddResizableControl(IDC_RENAME_BUTTON, 0.25, 0.0, 0.25, 0.0); + AddResizableControl(IDC_RESUME_BUTTON, 0.5, 0.0, 0.25, 0.0); + AddResizableControl(IDC_SKIP_BUTTON, 0.75, 0.0, 0.25, 0.0); + + AddResizableControl(IDC_PAUSE_BUTTON, 0.5, 0.0, 0.25, 0.0); + AddResizableControl(IDC_CANCEL_BUTTON, 0.75, 0.0, 0.25, 0.0); + InitializeResizableControls(); // load the informations about files RefreshFilesInfo(); RefreshImages(); + HMENU hMenu = GetResManager().LoadMenu(MAKEINTRESOURCE(IDR_ALREADYEXISTS_MASS_REPLACE_MENU)); + m_menuMassReplace.Attach(hMenu); + hMenu = GetResManager().LoadMenu(MAKEINTRESOURCE(IDR_ALREADYEXISTS_MASS_RENAME_MENU)); + m_menuMassRename.Attach(hMenu); + hMenu = GetResManager().LoadMenu(MAKEINTRESOURCE(IDR_ALREADYEXISTS_MASS_RESUME_MENU)); + m_menuMassResume.Attach(hMenu); + hMenu = GetResManager().LoadMenu(MAKEINTRESOURCE(IDR_ALREADYEXISTS_MASS_SKIP_MENU)); + m_menuMassSkip.Attach(hMenu); + + m_btnReplace.m_hMenu = m_menuMassReplace.GetSubMenu(0)->GetSafeHmenu(); + m_btnReplace.m_bDefaultClick = TRUE; + m_btnResume.m_hMenu = m_menuMassResume.GetSubMenu(0)->GetSafeHmenu(); + m_btnResume.m_bDefaultClick = TRUE; + m_btnRename.m_hMenu = m_menuMassRename.GetSubMenu(0)->GetSafeHmenu(); + m_btnRename.m_bDefaultClick = TRUE; + m_btnSkip.m_hMenu = m_menuMassSkip.GetSubMenu(0)->GetSafeHmenu(); + m_btnSkip.m_bDefaultClick = TRUE; + + m_ctlDstRename.SetWindowText(m_strNewName.c_str()); + return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CFeedbackReplaceDlg::RefreshFilesInfo() { - // load template - ictranslate::CResourceManager& rManager = GetResManager(); - - CString strTemplate; - ///////////////////////////////////////////////////////////// // src file chcore::TSmartPath pathSrc = m_rSrcFile.GetFullFilePath(); @@ -116,23 +163,14 @@ m_ctlSrcName.SetWindowText(pathSrc.GetFileName().ToString()); // path - strTemplate = rManager.LoadString(IDS_INFO_PATH_STRING); - ictranslate::CFormat fmt(strTemplate); - fmt.SetParam(_T("%pathname"), pathSrc.GetParent().ToString()); - m_ctlSrcPath.SetWindowText(fmt.ToString()); + m_ctlSrcPath.SetWindowText(pathSrc.GetParent().ToString()); // size - strTemplate = rManager.LoadString(IDS_INFO_SIZE_STRING); - fmt.SetFormat(strTemplate); - fmt.SetParam(_T("%size"), m_rSrcFile.GetLength64()); - m_ctlSrcSize.SetWindowText(fmt.ToString()); + m_ctlSrcSize.SetWindowText(GetSizeString(m_rSrcFile.GetLength64())); // modified date - strTemplate = rManager.LoadString(IDS_INFO_MODIFIED_STRING); - fmt.SetFormat(strTemplate); COleDateTime dtTemp = m_rSrcFile.GetLastWriteTime().GetAsFiletime(); - fmt.SetParam(_T("%datemod"), dtTemp.Format(LOCALE_NOUSEROVERRIDE, LANG_USER_DEFAULT)); - m_ctlSrcDate.SetWindowText(fmt.ToString()); + m_ctlSrcDate.SetWindowText(dtTemp.Format(LOCALE_NOUSEROVERRIDE, LANG_USER_DEFAULT)); ///////////////////////////////////////////////////////////// // dst file @@ -142,34 +180,19 @@ m_ctlDstName.SetWindowText(pathDst.GetFileName().ToString()); // path - strTemplate = rManager.LoadString(IDS_INFO_PATH_STRING); - fmt.SetFormat(strTemplate); - fmt.SetParam(_T("%pathname"), pathDst.GetParent().ToString()); - m_ctlDstPath.SetWindowText(fmt.ToString()); + m_ctlDstPath.SetWindowText(pathDst.GetParent().ToString()); // size - strTemplate = rManager.LoadString(IDS_INFO_SIZE_STRING); - fmt.SetFormat(strTemplate); - fmt.SetParam(_T("%size"), m_rDstFile.GetLength64()); - m_ctlDstSize.SetWindowText(fmt.ToString()); + m_ctlDstSize.SetWindowText(GetSizeString(m_rDstFile.GetLength64())); // modified date - strTemplate = rManager.LoadString(IDS_INFO_MODIFIED_STRING); - fmt.SetFormat(strTemplate); dtTemp = m_rDstFile.GetLastWriteTime().GetAsFiletime(); - fmt.SetParam(_T("%datemod"), dtTemp.Format(LOCALE_NOUSEROVERRIDE, LANG_USER_DEFAULT)); - m_ctlDstDate.SetWindowText(fmt.ToString()); + m_ctlDstDate.SetWindowText(dtTemp.Format(LOCALE_NOUSEROVERRIDE, LANG_USER_DEFAULT)); // button captions - CWnd* pAppendButton = GetDlgItem(IDC_COPY_REST_BUTTON); - if(pAppendButton) - { - if(m_rDstFile.GetLength64() > m_rSrcFile.GetLength64()) - { - CString strAltButtonCaption = rManager.LoadString(IDS_BUTTON_TRUNCATE_STRING); - pAppendButton->SetWindowText(strAltButtonCaption); - } - } + m_btnResume.EnableWindow(m_rDstFile.GetLength64() < m_rSrcFile.GetLength64()); + m_btnResume.SetTooltip(L"Some tooltip"); + m_btnReplace.SetTooltip(L"Replace tooltip"); } void CFeedbackReplaceDlg::RefreshImages() @@ -187,18 +210,90 @@ void CFeedbackReplaceDlg::OnBnClickedReplaceButton() { UpdateData(TRUE); + + switch(m_btnReplace.m_nMenuResult) + { + case ID_FEEDBACK_REPLACE_ALLEXISTINGFILES: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_ApplyToAll, eResult_Overwrite)); + break; + case ID_FEEDBACK_REPLACE_FILESWITHDIFFERENTDATESORSIZES: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenDifferentDateOrSize, eResult_Overwrite)); + break; + case ID_FEEDBACK_REPLACE_OLDERFILESWITHNEWERVERSIONS: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenNewerThanDst, eResult_Overwrite)); + break; + case ID_FEEDBACK_REPLACE_NEWERFILESWITHOLDERVERSIONS: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenOlderThanDst, eResult_Overwrite)); + break; + } + EndDialog(chengine::EFeedbackResult::eResult_Overwrite); } +void CFeedbackReplaceDlg::OnBnClickedRenameButton() +{ + UpdateData(TRUE); + + switch(m_btnRename.m_nMenuResult) + { + case ID_FEEDBACK_RENAME_WHENDESTIONATIONFILEEXISTS: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_ApplyToAll, eResult_Rename)); + break; + case ID_FEEDBACK_RENAME_WHENDATEORSIZEDIFFERS: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenDifferentDateOrSize, eResult_Rename)); + break; + case ID_FEEDBACK_RENAME_WHENDATEANDSZEARESAME: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenSameDateAndSize, eResult_Rename)); + break; + case ID_FEEDBACK_RENAME_WHENNEWERTHANDESTINATION: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenNewerThanDst, eResult_Rename)); + break; + case ID_FEEDBACK_RENAME_WHENOLDERTHANDESTINATION: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenOlderThanDst, eResult_Rename)); + break; + default: + { + CString strText; + m_ctlDstRename.GetWindowText(strText); + m_strNewName = strText; + } + } + + EndDialog(chengine::EFeedbackResult::eResult_Rename); +} + void CFeedbackReplaceDlg::OnBnClickedCopyRestButton() { UpdateData(TRUE); + switch(m_btnResume.m_nMenuResult) + { + case ID_FEEDBACK_RESUME_WHENFILEBIGGERTHANDESTINATION: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenBiggerThanDst, eResult_CopyRest)); + break; + } + EndDialog(chengine::EFeedbackResult::eResult_CopyRest); } void CFeedbackReplaceDlg::OnBnClickedSkipButton() { UpdateData(TRUE); + switch(m_btnSkip.m_nMenuResult) + { + case ID_FEEDBACK_SKIP_ALLEXISTINGDESTINATIONFILES: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_ApplyToAll, eResult_Skip)); + break; + case ID_FEEDBACK_SKIP_ALLFILESWITHSAMEDATESANDSIZES: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenSameDateAndSize, eResult_Skip)); + break; + case ID_FEEDBACK_SKIP_FILESTHATAREOLDERTHANDESTINATION: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenOlderThanDst, eResult_Skip)); + break; + case ID_FEEDBACK_SKIP_FILESTHATARENEWERTHANDESTINATION: + m_rules.GetAlreadyExistsRules().Merge(FeedbackPredefinedRules::CreateAlreadyExistsRule(EAlreadyExistsPredefinedRuleCondition::eCondition_WhenNewerThanDst, eResult_Skip)); + break; + } + EndDialog(chengine::EFeedbackResult::eResult_Skip); } @@ -214,13 +309,31 @@ EndDialog(chengine::EFeedbackResult::eResult_Cancel); } +void CFeedbackReplaceDlg::OnBnCustomRulesButton() +{ + RuleEditDlg dlg(m_rules); + if(dlg.DoModal() == IDOK) + { + m_rules = dlg.GetRules(); + } +} + void CFeedbackReplaceDlg::OnCancel() { UpdateData(TRUE); EndDialog(chengine::EFeedbackResult::eResult_Cancel); } -bool CFeedbackReplaceDlg::IsApplyToAllItemsChecked() const +const chengine::FeedbackRules& CFeedbackReplaceDlg::GetRules() const { - return m_bAllItems != FALSE; + return m_rules; } + +void CFeedbackReplaceDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI) +{ + if (m_rcInitial.Width() != 0 && m_rcInitial.Height() != 0) + { + lpMMI->ptMinTrackSize.y = m_rcInitial.Height(); + lpMMI->ptMaxTrackSize.y = m_rcInitial.Height(); + } +}