OSDN Git Service

Implement issue #772: Add preference option to clear "Don't ask this question again...
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Tue, 13 Jul 2021 23:50:50 +0000 (08:50 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Tue, 13 Jul 2021 23:50:50 +0000 (08:50 +0900)
Src/DirDoc.cpp
Src/PropMessageBoxes.cpp

index d1b3847..d405180 100644 (file)
@@ -928,7 +928,12 @@ bool CDirDoc::CompareFilesIfFilesAreLarge(int nFiles, const FileLocation ifilelo
                        }
                }
        }
-       INT_PTR ans = AfxMessageBox(msg.c_str(), MB_YESNOCANCEL | MB_ICONQUESTION | MB_DONT_ASK_AGAIN, IDS_COMPARE_LARGE_FILES);
+       CMessageBoxDialog dlg(
+               m_pDirView ? m_pDirView->GetParentFrame() : nullptr,
+               msg.c_str(), _T(""),
+               MB_YESNOCANCEL | MB_ICONQUESTION | MB_DONT_ASK_AGAIN, 0U,
+               _T("CompareLargeFiles"));
+       INT_PTR ans = dlg.DoModal();
        if (ans == IDCANCEL)
                return true;
        else if (ans == IDNO)
index afa8ed5..d8f23b0 100644 (file)
@@ -17,34 +17,36 @@ static struct MessageBox
 {
        int nID;
        int nHelpID;
+       const TCHAR* key;
        int type;
 } MessageBoxes[] =
 {
        // folder compare window
-       { IDS_CREATE_PAIR_FOLDER, IDS_CREATE_PAIR_FOLDER, MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
+       { IDS_CREATE_PAIR_FOLDER, IDS_CREATE_PAIR_FOLDER, nullptr, MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
+       { IDS_CONFIRM_SINGLE_COPY, 0, _T("FolderCopyConfirmDlgDontAskAgain"), MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
        // file compare window
-       { IDS_COMPARE_LARGE_FILES, IDS_COMPARE_LARGE_FILES, MB_YESNOCANCEL | MB_ICONQUESTION | MB_DONT_ASK_AGAIN},
-       { IDS_FILESSAME, IDS_FILESSAME, MB_ICONINFORMATION | MB_DONT_DISPLAY_AGAIN},
-       { IDS_FILE_TO_ITSELF, IDS_FILE_TO_ITSELF, MB_ICONINFORMATION | MB_DONT_DISPLAY_AGAIN},
-       { IDS_NUM_REPLACED, IDS_NUM_REPLACED, MB_ICONINFORMATION | MB_DONT_DISPLAY_AGAIN },
-       { IDS_SAVEREADONLY_MULTI, IDS_SAVEREADONLY_MULTI, MB_YESNOCANCEL | MB_ICONWARNING | MB_DEFBUTTON3 | MB_DONT_ASK_AGAIN | MB_YES_TO_ALL },
-       { IDS_SAVEREADONLY_FMT, IDS_SAVEREADONLY_FMT, MB_YESNOCANCEL | MB_ICONWARNING | MB_DEFBUTTON3 | MB_DONT_ASK_AGAIN | MB_YES_TO_ALL },
-       { IDS_MERGE_MODE, IDS_MERGE_MODE, MB_ICONINFORMATION | MB_DONT_DISPLAY_AGAIN },
-       { IDS_FILECHANGED_RESCAN, IDS_FILECHANGED_RESCAN, MB_YESNO | MB_ICONWARNING },
-       { IDS_BACKUP_FAILED_PROMPT, IDS_BACKUP_FAILED_PROMPT,  MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
-       { IDS_SUGGEST_IGNOREEOL, IDS_SUGGEST_IGNOREEOL, MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
-       { IDS_MOVE_TO_NEXTFILE, IDS_MOVE_TO_NEXTFILE, MB_YESNO | MB_DONT_ASK_AGAIN },
-       { IDS_MOVE_TO_PREVFILE, IDS_MOVE_TO_PREVFILE, MB_YESNO | MB_DONT_ASK_AGAIN },
-       { IDS_MOVE_TO_FIRSTFILE, IDS_MOVE_TO_FIRSTFILE, MB_YESNO | MB_DONT_ASK_AGAIN },
-       { IDS_MOVE_TO_LASTFILE, IDS_MOVE_TO_LASTFILE, MB_YESNO | MB_DONT_ASK_AGAIN },
-       { IDS_MOVE_TO_NEXTPAGE, IDS_MOVE_TO_NEXTPAGE, MB_YESNO | MB_DONT_ASK_AGAIN },
-       { IDS_MOVE_TO_PREVPAGE, IDS_MOVE_TO_PREVPAGE, MB_YESNO | MB_DONT_ASK_AGAIN },
+       { IDS_COMPARE_LARGE_FILES, 0, _T("CompareLargeFiles"), MB_YESNOCANCEL | MB_ICONQUESTION | MB_DONT_ASK_AGAIN},
+       { IDS_FILESSAME, IDS_FILESSAME, nullptr, MB_ICONINFORMATION | MB_DONT_DISPLAY_AGAIN},
+       { IDS_FILE_TO_ITSELF, IDS_FILE_TO_ITSELF, nullptr, MB_ICONINFORMATION | MB_DONT_DISPLAY_AGAIN},
+       { IDS_NUM_REPLACED, IDS_NUM_REPLACED, nullptr, MB_ICONINFORMATION | MB_DONT_DISPLAY_AGAIN },
+       { IDS_SAVEREADONLY_MULTI, IDS_SAVEREADONLY_MULTI, nullptr, MB_YESNOCANCEL | MB_ICONWARNING | MB_DEFBUTTON3 | MB_DONT_ASK_AGAIN | MB_YES_TO_ALL },
+       { IDS_SAVEREADONLY_FMT, IDS_SAVEREADONLY_FMT, nullptr, MB_YESNOCANCEL | MB_ICONWARNING | MB_DEFBUTTON3 | MB_DONT_ASK_AGAIN | MB_YES_TO_ALL },
+       { IDS_MERGE_MODE, IDS_MERGE_MODE, nullptr, MB_ICONINFORMATION | MB_DONT_DISPLAY_AGAIN },
+       { IDS_FILECHANGED_RESCAN, IDS_FILECHANGED_RESCAN, nullptr, MB_YESNO | MB_ICONWARNING },
+       { IDS_BACKUP_FAILED_PROMPT, IDS_BACKUP_FAILED_PROMPT,  nullptr, MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
+       { IDS_SUGGEST_IGNOREEOL, IDS_SUGGEST_IGNOREEOL, nullptr, MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
+       { IDS_MOVE_TO_NEXTFILE, IDS_MOVE_TO_NEXTFILE, nullptr, MB_YESNO | MB_DONT_ASK_AGAIN },
+       { IDS_MOVE_TO_PREVFILE, IDS_MOVE_TO_PREVFILE, nullptr, MB_YESNO | MB_DONT_ASK_AGAIN },
+       { IDS_MOVE_TO_FIRSTFILE, IDS_MOVE_TO_FIRSTFILE, nullptr, MB_YESNO | MB_DONT_ASK_AGAIN },
+       { IDS_MOVE_TO_LASTFILE, IDS_MOVE_TO_LASTFILE, nullptr, MB_YESNO | MB_DONT_ASK_AGAIN },
+       { IDS_MOVE_TO_NEXTPAGE, IDS_MOVE_TO_NEXTPAGE, nullptr, MB_YESNO | MB_DONT_ASK_AGAIN },
+       { IDS_MOVE_TO_PREVPAGE, IDS_MOVE_TO_PREVPAGE, nullptr, MB_YESNO | MB_DONT_ASK_AGAIN },
        // report dialog
-       { IDS_REPORT_FILEOVERWRITE, IDS_REPORT_FILEOVERWRITE, MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
+       { IDS_REPORT_FILEOVERWRITE, IDS_REPORT_FILEOVERWRITE, nullptr, MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
        // patch dialog
-       { IDS_CANNOT_CREATE_BINARYPATCH, IDS_CANNOT_CREATE_BINARYPATCH, MB_ICONWARNING | MB_DONT_DISPLAY_AGAIN },
-       { IDS_DIFF_FILEOVERWRITE, IDS_DIFF_FILEOVERWRITE, MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
-       { IDS_DIFF_SUCCEEDED, IDS_DIFF_SUCCEEDED, MB_ICONINFORMATION | MB_DONT_DISPLAY_AGAIN },
+       { IDS_CANNOT_CREATE_BINARYPATCH, IDS_CANNOT_CREATE_BINARYPATCH, nullptr, MB_ICONWARNING | MB_DONT_DISPLAY_AGAIN },
+       { IDS_DIFF_FILEOVERWRITE, IDS_DIFF_FILEOVERWRITE, nullptr, MB_YESNO | MB_ICONWARNING | MB_DONT_ASK_AGAIN },
+       { IDS_DIFF_SUCCEEDED, IDS_DIFF_SUCCEEDED, nullptr, MB_ICONINFORMATION | MB_DONT_DISPLAY_AGAIN },
 };
 
 static std::vector<String> Answers;
@@ -141,7 +143,7 @@ void PropMessageBoxes::ReadOptions()
        m_answers.clear();
        for (unsigned i = 0; i < static_cast<unsigned>(std::size(MessageBoxes)); i++)
        {
-               CString key = CMessageBoxDialog::GenerateRegistryKey(
+               CString key = (MessageBoxes[i].key != nullptr) ? MessageBoxes[i].key : CMessageBoxDialog::GenerateRegistryKey(
                        MessageBoxes[i].nID, MessageBoxes[i].nHelpID);
                m_answers.push_back(AfxGetApp()->GetProfileInt(_T("MessageBoxes"), key, -1));
        }
@@ -155,7 +157,8 @@ void PropMessageBoxes::WriteOptions()
        CMessageBoxDialog::ResetMessageBoxes();
        for (unsigned i = 0; i < static_cast<unsigned>(std::size(MessageBoxes)); i++)
        {
-               CString key = CMessageBoxDialog::GenerateRegistryKey(
+               CString key = (MessageBoxes[i].key != nullptr) ? MessageBoxes[i].key :
+                       CMessageBoxDialog::GenerateRegistryKey(
                        MessageBoxes[i].nID, MessageBoxes[i].nHelpID);
                int ans = m_answers[i];
                if (ans >= IDOK && ans <= IDCONTINUE)