Index: src/ch/FeedbackFileErrorDlg.cpp =================================================================== diff -u -N -r3993a75a24145732742d61be638111d1d85c367b -re6f64ea0eecaf86dfa1a42c80604d227b69be768 --- src/ch/FeedbackFileErrorDlg.cpp (.../FeedbackFileErrorDlg.cpp) (revision 3993a75a24145732742d61be638111d1d85c367b) +++ src/ch/FeedbackFileErrorDlg.cpp (.../FeedbackFileErrorDlg.cpp) (revision e6f64ea0eecaf86dfa1a42c80604d227b69be768) @@ -7,30 +7,27 @@ #include "FeedbackHandler.h" #include "../libchcore/TWin32ErrorFormatter.h" #include "resource.h" +#include "RuleEditDlg.h" +#include "../libchengine/FeedbackPredefinedRules.h" -// CFeedbackFileErrorDlg dialog +using namespace chengine; IMPLEMENT_DYNAMIC(CFeedbackFileErrorDlg, ictranslate::CLanguageDialog) -CFeedbackFileErrorDlg::CFeedbackFileErrorDlg(chengine::FeedbackRules& currentRules, const wchar_t* pszSrcPath, const wchar_t* pszDstPath, unsigned long ulSysError, CWnd* pParent /*=nullptr*/) +CFeedbackFileErrorDlg::CFeedbackFileErrorDlg(chengine::FeedbackRules& currentRules, const wchar_t* pszSrcPath, const wchar_t* pszDstPath, EFileError eOperationType, unsigned long ulSysError, CWnd* pParent /*=nullptr*/) : ictranslate::CLanguageDialog(IDD_FEEDBACK_FILE_ERROR_DIALOG, pParent), - m_bAllItems(FALSE), m_strSrcPath(pszSrcPath), m_strDstPath(pszDstPath), m_ulSysError(ulSysError), - m_rules(currentRules) + m_rules(currentRules), + m_eOperationType(eOperationType) { } CFeedbackFileErrorDlg::~CFeedbackFileErrorDlg() { } -bool CFeedbackFileErrorDlg::IsApplyToAllItemsChecked() const -{ - return m_bAllItems; -} - const chengine::FeedbackRules& CFeedbackFileErrorDlg::GetRules() const { return m_rules; @@ -39,19 +36,26 @@ void CFeedbackFileErrorDlg::DoDataExchange(CDataExchange* pDX) { ictranslate::CLanguageDialog::DoDataExchange(pDX); - DDX_Check(pDX, IDC_ALL_ITEMS_CHECK, m_bAllItems); - DDX_Control(pDX, IDC_INFO_STATIC, m_ctlErrorInfo); + DDX_Control(pDX, IDC_FILENAME_EDIT, m_ctlFirstName); + DDX_Control(pDX, IDC_SECOND_FILENAME_EDIT, m_ctlSecondName); + DDX_Control(pDX, IDC_OPERATION_EDIT, m_ctlOperationType); + DDX_Control(pDX, IDC_SYSTEM_ERROR_EDIT, m_ctlSystemError); + + DDX_Control(pDX, IDC_RETRY_BUTTON, m_btnRetry); + DDX_Control(pDX, IDC_SKIP_BUTTON, m_btnSkip); + DDX_Control(pDX, IDC_CUSTOM_RULES_BUTTON, m_btnCustomRules); + DDX_Control(pDX, IDC_PAUSE_BUTTON, m_btnPause); + DDX_Control(pDX, IDC_CANCEL_BUTTON, m_btnCancel); } BEGIN_MESSAGE_MAP(CFeedbackFileErrorDlg, ictranslate::CLanguageDialog) - ON_BN_CLICKED(IDC_RETRY_BUTTON, &CFeedbackFileErrorDlg::OnBnClickedRetryButton) - ON_BN_CLICKED(IDC_SKIP_BUTTON, &CFeedbackFileErrorDlg::OnBnClickedSkipButton) - ON_BN_CLICKED(IDC_PAUSE_BUTTON, &CFeedbackFileErrorDlg::OnBnClickedPauseButton) - ON_BN_CLICKED(IDCANCEL, &CFeedbackFileErrorDlg::OnBnClickedCancel) + ON_BN_CLICKED(IDC_RETRY_BUTTON, OnBnRetry) + ON_BN_CLICKED(IDC_SKIP_BUTTON, OnBnSkip) + ON_BN_CLICKED(IDC_PAUSE_BUTTON, OnBnPause) + ON_BN_CLICKED(IDCANCEL, OnCancel) + ON_BN_CLICKED(IDC_CUSTOM_RULES_BUTTON, OnBnCustomRules) END_MESSAGE_MAP() - -// CFeedbackFileErrorDlg message handlers BOOL CFeedbackFileErrorDlg::OnInitDialog() { CLanguageDialog::OnInitDialog(); @@ -60,59 +64,88 @@ HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); SetIcon(hIcon, FALSE); - AddResizableControl(IDC_001_STATIC, 0.0, 0.0, 0.0, 0.0); - AddResizableControl(IDC_DESC_STATIC, 0.0, 0.0, 1.0, 0.0); - AddResizableControl(IDC_INFO_STATIC, 0.0, 0.0, 1.0, 1.0); + AddResizableControl(IDC_HEADER_STATIC, 0.0, 0.0, 0.0, 0.0); + AddResizableControl(IDC_ERROR_DETAILS_STATIC, 0.0, 0.0, 0.0, 0.0); + AddResizableControl(IDC_NAMES_STATIC, 0.0, 0.0, 1.0, 0.0); + AddResizableControl(IDC_FILENAME_EDIT, 0.0, 0.0, 1.0, 1.0); + AddResizableControl(IDC_SECOND_FILENAME_EDIT, 0.0, 1.0, 0.0, 0.0); + AddResizableControl(IDC_OPERATION_STATIC, 0.0, 1.0, 0.0, 0.0); + AddResizableControl(IDC_OPERATION_EDIT, 0.0, 1.0, 0.0, 0.0); + AddResizableControl(IDC_SYSTEM_ERROR_STATIC, 0.0, 1.0, 0.0, 0.0); + AddResizableControl(IDC_SYSTEM_ERROR_EDIT, 0.0, 1.0, 0.0, 0.0); + AddResizableControl(IDC_RETRY_BUTTON, 0.0, 1.0, 0.0, 0.0); AddResizableControl(IDC_SKIP_BUTTON, 0.0, 1.0, 0.0, 0.0); + AddResizableControl(IDC_CUSTOM_RULES_BUTTON, 0.0, 1.0, 0.0, 0.0); AddResizableControl(IDC_PAUSE_BUTTON, 0.0, 1.0, 0.0, 0.0); AddResizableControl(IDCANCEL, 0.0, 1.0, 0.0, 0.0); - AddResizableControl(IDC_ALL_ITEMS_CHECK, 0.0, 1.0, 1.0, 0.0); InitializeResizableControls(); + // set menus on buttons + HMENU hMenu = GetResManager().LoadMenu(MAKEINTRESOURCE(IDR_ERROR_MASS_RETRY_MENU)); + m_menuMassRetry.Attach(hMenu); + m_btnRetry.m_hMenu = m_menuMassSkip.GetSubMenu(0)->GetSafeHmenu(); + m_btnRetry.m_bDefaultClick = TRUE; + + hMenu = GetResManager().LoadMenu(MAKEINTRESOURCE(IDR_ERROR_MASS_SKIP_MENU)); + m_menuMassSkip.Attach(hMenu); + m_btnSkip.m_hMenu = m_menuMassSkip.GetSubMenu(0)->GetSafeHmenu(); + m_btnSkip.m_bDefaultClick = TRUE; + + // set data ictranslate::CResourceManager& rResManager = GetResManager(); - CString strFmt; - strFmt = rResManager.LoadString(m_strDstPath.IsEmpty() ? IDS_INFO_FILE_STRING : IDS_INFO_TWO_FILE_STRING); - strFmt += _T("\r\n"); - strFmt += rResManager.LoadString(IDS_INFO_REASON_STRING); + CString strOperationType = rResManager.LoadString(IDS_OPERATION_DELETEERROR + m_eOperationType); + m_ctlOperationType.SetWindowText(strOperationType); + m_ctlFirstName.SetWindowText(m_strSrcPath); + m_ctlSecondName.SetWindowText(m_strDstPath); + // get system error string string::TString strError = chcore::TWin32ErrorFormatter::FormatWin32ErrorCode(m_ulSysError, true); + + ictranslate::CFormat fmt(L"%errno - %msg"); + fmt.SetParam(_T("%errno"), m_ulSysError); + fmt.SetParam(_T("%msg"), strError.c_str()); - ictranslate::CFormat fmt(strFmt); - fmt.SetParam(_T("%filename"), m_strSrcPath); - fmt.SetParam(_T("%dstfilename"), m_strDstPath); - fmt.SetParam(_T("%reason"), strError.c_str()); + m_ctlSystemError.SetWindowText(fmt.ToString()); - m_ctlErrorInfo.SetWindowText(fmt.ToString()); - return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } -void CFeedbackFileErrorDlg::OnBnClickedRetryButton() +void CFeedbackFileErrorDlg::OnBnRetry() { UpdateData(TRUE); EndDialog(chengine::EFeedbackResult::eResult_Retry); } -void CFeedbackFileErrorDlg::OnBnClickedSkipButton() +void CFeedbackFileErrorDlg::OnBnSkip() { UpdateData(TRUE); + switch(m_btnSkip.m_nMenuResult) + { + case ID_FEEDBACK_SKIP_WHEN_SAME_ERROR: + m_rules.GetErrorRules().Merge(FeedbackPredefinedRules::CreateErrorRule(EErrorPredefinedRuleCondition::eCondition_WhenSameError, m_ulSysError, eResult_Skip)); + break; + } + EndDialog(chengine::EFeedbackResult::eResult_Skip); } -void CFeedbackFileErrorDlg::OnBnClickedPauseButton() +void CFeedbackFileErrorDlg::OnBnPause() { UpdateData(TRUE); EndDialog(chengine::EFeedbackResult::eResult_Pause); } -void CFeedbackFileErrorDlg::OnBnClickedCancel() +void CFeedbackFileErrorDlg::OnBnCustomRules() { - UpdateData(TRUE); - EndDialog(chengine::EFeedbackResult::eResult_Cancel); + RuleEditDlg dlg(m_rules); + if(dlg.DoModal() == IDOK) + { + m_rules = dlg.GetRules(); + } } void CFeedbackFileErrorDlg::OnCancel()