diff --git a/src/Dialogs.c b/src/Dialogs.c index b33689274..878305128 100644 --- a/src/Dialogs.c +++ b/src/Dialogs.c @@ -2284,72 +2284,131 @@ typedef struct encodedlg { int cyDlg; } ENCODEDLG, *PENCODEDLG; -INT_PTR CALLBACK SelectDefEncodingDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) +INT_PTR CALLBACK SelectDefEncodingDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) { static PENCODEDLG pdd; - switch(umsg) + static int s_iEnc; + static bool s_bIsUTF8Fallback; + static bool s_bLoadASCIIasUTF8; + + switch (umsg) { - case WM_INITDIALOG: - { - HBITMAP hbmp; - HIMAGELIST himl; + case WM_INITDIALOG: + { + HBITMAP hbmp; + HIMAGELIST himl; - pdd = (PENCODEDLG)lParam; - if (Globals.hDlgIcon) { SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)Globals.hDlgIcon); } + pdd = (PENCODEDLG)lParam; - hbmp = LoadImage(Globals.hInstance,MAKEINTRESOURCE(IDB_ENCODING),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); - hbmp = ResizeImageForCurrentDPI(hbmp); + if (Globals.hDlgIcon) { SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)Globals.hDlgIcon); } - himl = ImageList_Create(16,16,ILC_COLOR32|ILC_MASK,0,0); - ImageList_AddMasked(himl,hbmp,CLR_DEFAULT); - DeleteObject(hbmp); - SendDlgItemMessage(hwnd,IDC_ENCODINGLIST,CBEM_SETIMAGELIST,0,(LPARAM)himl); - SendDlgItemMessage(hwnd,IDC_ENCODINGLIST,CB_SETEXTENDEDUI,true,0); + hbmp = LoadImage(Globals.hInstance, MAKEINTRESOURCE(IDB_ENCODING), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); + hbmp = ResizeImageForCurrentDPI(hbmp); - Encoding_AddToComboboxEx(GetDlgItem(hwnd,IDC_ENCODINGLIST),pdd->idEncoding,0); + himl = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 0); + ImageList_AddMasked(himl, hbmp, CLR_DEFAULT); + DeleteObject(hbmp); + SendDlgItemMessage(hwnd, IDC_ENCODINGLIST, CBEM_SETIMAGELIST, 0, (LPARAM)himl); + SendDlgItemMessage(hwnd, IDC_ENCODINGLIST, CB_SETEXTENDEDUI, true, 0); - CheckDlgButton(hwnd, IDC_USEASREADINGFALLBACK, DlgBtnChk(Settings.UseDefaultForFileEncoding)); - CheckDlgButton(hwnd,IDC_NOUNICODEDETECTION, DlgBtnChk(Settings.SkipUnicodeDetection)); - CheckDlgButton(hwnd, IDC_NOANSICPDETECTION, DlgBtnChk(Settings.SkipANSICodePageDetection)); - CheckDlgButton(hwnd,IDC_ASCIIASUTF8, DlgBtnChk(Settings.LoadASCIIasUTF8)); - CheckDlgButton(hwnd,IDC_NFOASOEM, DlgBtnChk(Settings.LoadNFOasOEM)); - CheckDlgButton(hwnd,IDC_ENCODINGFROMFILEVARS, DlgBtnChk(Settings.NoEncodingTags)); + CheckDlgButton(hwnd, IDC_USEASREADINGFALLBACK, DlgBtnChk(Settings.UseDefaultForFileEncoding)); + CheckDlgButton(hwnd, IDC_NOUNICODEDETECTION, DlgBtnChk(Settings.SkipUnicodeDetection)); + CheckDlgButton(hwnd, IDC_NOANSICPDETECTION, DlgBtnChk(Settings.SkipANSICodePageDetection)); + CheckDlgButton(hwnd, IDC_ASCIIASUTF8, DlgBtnChk(Settings.LoadASCIIasUTF8)); + CheckDlgButton(hwnd, IDC_NFOASOEM, DlgBtnChk(Settings.LoadNFOasOEM)); + CheckDlgButton(hwnd, IDC_ENCODINGFROMFILEVARS, DlgBtnChk(Settings.NoEncodingTags)); - CenterDlgInParent(hwnd); + Encoding_AddToComboboxEx(GetDlgItem(hwnd, IDC_ENCODINGLIST), pdd->idEncoding, 0); + + Encoding_GetFromComboboxEx(GetDlgItem(hwnd, IDC_ENCODINGLIST), &s_iEnc); + s_bIsUTF8Fallback = Settings.UseDefaultForFileEncoding; + s_bLoadASCIIasUTF8 = Settings.LoadASCIIasUTF8; + + CenterDlgInParent(hwnd); + } + return true; + + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_ASCIIASUTF8: + if (s_iEnc != CPI_UTF8) { + s_bLoadASCIIasUTF8 = (IsDlgButtonChecked(hwnd, IDC_ASCIIASUTF8) == BST_CHECKED); } - return true; + break; - - case WM_COMMAND: - switch(LOWORD(wParam)) - { - case IDOK: { - if (Encoding_GetFromComboboxEx(GetDlgItem(hwnd,IDC_ENCODINGLIST),&pdd->idEncoding)) { - if (pdd->idEncoding < 0) { - MsgBoxLng(MBWARN,IDS_MUI_ERR_ENCODINGNA); - EndDialog(hwnd,IDCANCEL); - } - else { - Settings.UseDefaultForFileEncoding = (IsDlgButtonChecked(hwnd, IDC_USEASREADINGFALLBACK) == BST_CHECKED); - Settings.SkipUnicodeDetection = (IsDlgButtonChecked(hwnd,IDC_NOUNICODEDETECTION) == BST_CHECKED); - Settings.SkipANSICodePageDetection = (IsDlgButtonChecked(hwnd, IDC_NOANSICPDETECTION) == BST_CHECKED); - Settings.LoadASCIIasUTF8 = (IsDlgButtonChecked(hwnd,IDC_ASCIIASUTF8) == BST_CHECKED); - Settings.LoadNFOasOEM = (IsDlgButtonChecked(hwnd,IDC_NFOASOEM) == BST_CHECKED); - Settings.NoEncodingTags = (IsDlgButtonChecked(hwnd,IDC_ENCODINGFROMFILEVARS) == BST_CHECKED); - EndDialog(hwnd,IDOK); - } - } - else - PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,IDC_ENCODINGLIST)),1); - } - break; - - case IDCANCEL: - EndDialog(hwnd,IDCANCEL); - break; + case IDC_USEASREADINGFALLBACK: + if (s_iEnc != CPI_ANSI_DEFAULT) { + s_bIsUTF8Fallback = (IsDlgButtonChecked(hwnd, IDC_USEASREADINGFALLBACK) == BST_CHECKED); } - return true; + if (s_iEnc == CPI_UTF8) { + if (s_bIsUTF8Fallback) { + CheckDlgButton(hwnd, IDC_ASCIIASUTF8, DlgBtnChk(true)); + DialogEnableWindow(hwnd, IDC_ASCIIASUTF8, false); + } + else + { + DialogEnableWindow(hwnd, IDC_ASCIIASUTF8, true); + CheckDlgButton(hwnd, IDC_ASCIIASUTF8, DlgBtnChk(s_bLoadASCIIasUTF8)); + } + } + break; + + case IDC_ENCODINGLIST: + { + Encoding_GetFromComboboxEx(GetDlgItem(hwnd, IDC_ENCODINGLIST), &s_iEnc); + + if (s_iEnc == CPI_UTF8) { + if (s_bIsUTF8Fallback) { + CheckDlgButton(hwnd, IDC_ASCIIASUTF8, DlgBtnChk(true)); + DialogEnableWindow(hwnd, IDC_ASCIIASUTF8, false); + } + DialogEnableWindow(hwnd, IDC_USEASREADINGFALLBACK, true); + CheckDlgButton(hwnd, IDC_USEASREADINGFALLBACK, DlgBtnChk(s_bIsUTF8Fallback)); + } + else if (s_iEnc == CPI_ANSI_DEFAULT) { + DialogEnableWindow(hwnd, IDC_ASCIIASUTF8, true); + CheckDlgButton(hwnd, IDC_ASCIIASUTF8, DlgBtnChk(s_bLoadASCIIasUTF8)); + CheckDlgButton(hwnd, IDC_USEASREADINGFALLBACK, DlgBtnChk(true)); + DialogEnableWindow(hwnd, IDC_USEASREADINGFALLBACK, false); + } + else { + DialogEnableWindow(hwnd, IDC_ASCIIASUTF8, true); + CheckDlgButton(hwnd, IDC_ASCIIASUTF8, DlgBtnChk(s_bLoadASCIIasUTF8)); + DialogEnableWindow(hwnd, IDC_USEASREADINGFALLBACK, true); + CheckDlgButton(hwnd, IDC_USEASREADINGFALLBACK, DlgBtnChk(s_bIsUTF8Fallback)); + } + } + break; + + case IDOK: { + if (Encoding_GetFromComboboxEx(GetDlgItem(hwnd, IDC_ENCODINGLIST), &pdd->idEncoding)) { + if (pdd->idEncoding < 0) { + MsgBoxLng(MBWARN, IDS_MUI_ERR_ENCODINGNA); + EndDialog(hwnd, IDCANCEL); + } + else { + Settings.UseDefaultForFileEncoding = (IsDlgButtonChecked(hwnd, IDC_USEASREADINGFALLBACK) == BST_CHECKED); + Settings.SkipUnicodeDetection = (IsDlgButtonChecked(hwnd, IDC_NOUNICODEDETECTION) == BST_CHECKED); + Settings.SkipANSICodePageDetection = (IsDlgButtonChecked(hwnd, IDC_NOANSICPDETECTION) == BST_CHECKED); + Settings.LoadASCIIasUTF8 = (IsDlgButtonChecked(hwnd, IDC_ASCIIASUTF8) == BST_CHECKED); + Settings.LoadNFOasOEM = (IsDlgButtonChecked(hwnd, IDC_NFOASOEM) == BST_CHECKED); + Settings.NoEncodingTags = (IsDlgButtonChecked(hwnd, IDC_ENCODINGFROMFILEVARS) == BST_CHECKED); + EndDialog(hwnd, IDOK); + } + } + else + PostMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)(GetDlgItem(hwnd, IDC_ENCODINGLIST)), 1); + } + break; + + case IDCANCEL: + EndDialog(hwnd, IDCANCEL); + break; + } + return true; } return false; } diff --git a/src/Edit.c b/src/Edit.c index 489ac09b0..6608683c4 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -1013,7 +1013,7 @@ bool EditLoadFile( size_t const cbNbytes4Analysis = (cbData < 200000L) ? cbData : 200000L; int iPreferedEncoding = (bNfoDizDetected) ? g_DOSEncoding : - ((Settings.UseDefaultForFileEncoding || (cbNbytes4Analysis == 0)) ? Settings.DefaultEncoding : PREFERRED_DEFAULT_ENCODING); + ((Settings.UseDefaultForFileEncoding || (cbNbytes4Analysis == 0)) ? Settings.DefaultEncoding : CPI_ANSI_DEFAULT); // -------------------------------------------------------------------------- bool bIsReliable = false; diff --git a/src/Encoding.h b/src/Encoding.h index 824e8e2c1..c48da9270 100644 --- a/src/Encoding.h +++ b/src/Encoding.h @@ -56,9 +56,6 @@ extern bool g_bForceCompEncDetection; #define Encoding_IsNONE(enc) ((enc) == CPI_NONE) -//~#define PREFERRED_DAFAULT_ENCODING CPI_ANSI_DEFAULT -#define PREFERRED_DEFAULT_ENCODING CPI_UTF8 - typedef struct _np2encoding { UINT uFlags; UINT uCodePage; diff --git a/src/Notepad3.c b/src/Notepad3.c index e97484fd9..985c22c6f 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -3312,7 +3312,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_ENCODING_SETDEFAULT: - SelectDefEncodingDlg(hwnd,&Settings.DefaultEncoding); + SelectDefEncodingDlg(hwnd, &Settings.DefaultEncoding); break; @@ -6842,10 +6842,9 @@ void LoadSettings() GET_BOOL_VALUE_FROM_INISECTION(ViewWhiteSpace, false); GET_BOOL_VALUE_FROM_INISECTION(ViewEOLs, false); - int const iPrefEncIniSetting = Encoding_MapIniSetting(false, PREFERRED_DEFAULT_ENCODING); - GET_INT_VALUE_FROM_INISECTION(DefaultEncoding, iPrefEncIniSetting, CED_NO_MAPPING, Encoding_CountOf()-1); - Settings.DefaultEncoding = ((Settings.DefaultEncoding == CPI_NONE) ? - PREFERRED_DEFAULT_ENCODING : Encoding_MapIniSetting(true, Settings.DefaultEncoding)); + int const iPrefEncIniSetting = Encoding_MapIniSetting(false, CPI_UTF8); + GET_INT_VALUE_FROM_INISECTION(DefaultEncoding, iPrefEncIniSetting, CED_NO_MAPPING, INT_MAX); + Settings.DefaultEncoding = ((Settings.DefaultEncoding == CPI_NONE) ? CPI_UTF8 : Encoding_MapIniSetting(true, Settings.DefaultEncoding)); GET_BOOL_VALUE_FROM_INISECTION(UseDefaultForFileEncoding, false); GET_BOOL_VALUE_FROM_INISECTION(SkipUnicodeDetection, false); diff --git a/src/Version.h b/src/Version.h index 7fdcaf4fe..db5f8eb70 100644 --- a/src/Version.h +++ b/src/Version.h @@ -64,7 +64,9 @@ #if defined(_MSC_VER) #if (_MSC_VER >= 1916) - #if(_MSC_FULL_VER >= 191627024) + #if(_MSC_FULL_VER >= 191627025) + #define VER_CPL MS Visual C++ 2017 v15.9.4 + #elif(_MSC_FULL_VER >= 191627024) #define VER_CPL MS Visual C++ 2017 v15.9.(2-3) #elif(_MSC_FULL_VER >= 191627023) #define VER_CPL MS Visual C++ 2017 v15.9.(0-1)