diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index 8251e4724..a15b962d6 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -9148,3 +9148,14 @@ COLORREF NppParameters::getFindDlgStatusMsgColor(int colourIndex) return findDlgStatusMessageColor[colourIndex]; } + +LanguageNameInfo NppParameters::getLangNameInfoFromNameID(const wstring& langNameID) +{ + LanguageNameInfo res; + for (LanguageNameInfo lnf : ScintillaEditView::_langNameInfoArray) + { + if (lnf._langName == langNameID) + return lnf; + } + return res; +} diff --git a/PowerEditor/src/Parameters.h b/PowerEditor/src/Parameters.h index cf20a113d..5fec30d0e 100644 --- a/PowerEditor/src/Parameters.h +++ b/PowerEditor/src/Parameters.h @@ -1507,6 +1507,8 @@ private: std::wstring _lastCmdLabel; }; +struct LanguageNameInfo; + class NppParameters final { private: @@ -1912,6 +1914,8 @@ public: void addScintillaModEventMask(unsigned long mask2Add) { _sintillaModEventMask |= mask2Add; }; bool isAsNotepadStyle() const { return _asNotepadStyle; } + LanguageNameInfo getLangNameInfoFromNameID(const std::wstring& langNameID); + private: NppParameters(); ~NppParameters(); diff --git a/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp b/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp index cd1cd1904..62cecb850 100644 --- a/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp +++ b/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp @@ -4333,23 +4333,11 @@ void ScintillaEditView::restoreHiddenLines() void ScintillaEditView::setTabSettings(Lang* lang) { - if (!lang) return; - if (lang && lang->_tabSize != -1 && lang->_tabSize != 0) { - if (lang->_langID == L_JAVASCRIPT) - { - Lang* ljs = NppParameters::getInstance().getLangFromID(L_JS_EMBEDDED); - execute(SCI_SETTABWIDTH, ljs->_tabSize > 0 ? ljs->_tabSize : lang->_tabSize); - execute(SCI_SETUSETABS, !ljs->_isTabReplacedBySpace); - execute(SCI_SETBACKSPACEUNINDENTS, ljs->_isBackspaceUnindent); - } - else - { - execute(SCI_SETTABWIDTH, lang->_tabSize); - execute(SCI_SETUSETABS, !lang->_isTabReplacedBySpace); - execute(SCI_SETBACKSPACEUNINDENTS, lang->_isBackspaceUnindent); - } + execute(SCI_SETTABWIDTH, lang->_tabSize); + execute(SCI_SETUSETABS, !lang->_isTabReplacedBySpace); + execute(SCI_SETBACKSPACEUNINDENTS, lang->_isBackspaceUnindent); } else { diff --git a/PowerEditor/src/WinControls/ColourPicker/ColourPopup.cpp b/PowerEditor/src/WinControls/ColourPicker/ColourPopup.cpp index 02483a2fd..062d191cb 100644 --- a/PowerEditor/src/WinControls/ColourPicker/ColourPopup.cpp +++ b/PowerEditor/src/WinControls/ColourPicker/ColourPopup.cpp @@ -106,8 +106,9 @@ intptr_t CALLBACK ColourPopup::run_dlgProc(UINT message, WPARAM wParam, LPARAM l int nColor; for (nColor = 0 ; nColor < int(sizeof(colourItems)/sizeof(DWORD)) ; ++nColor) { - ::SendDlgItemMessage(_hSelf, IDC_COLOUR_LIST, LB_ADDSTRING, nColor, reinterpret_cast("")); - ::SendDlgItemMessage(_hSelf, IDC_COLOUR_LIST, LB_SETITEMDATA, nColor, static_cast(colourItems[nColor])); + auto i = ::SendDlgItemMessage(_hSelf, IDC_COLOUR_LIST, LB_ADDSTRING, 0, reinterpret_cast("")); + if (i != LB_ERR) + ::SendDlgItemMessage(_hSelf, IDC_COLOUR_LIST, LB_SETITEMDATA, nColor, static_cast(colourItems[nColor])); } return TRUE; } diff --git a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp index 09b5c552b..19b8744a9 100644 --- a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp +++ b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp @@ -1022,7 +1022,9 @@ void WordStyleDlg::setStyleListFromLexer(int index) const wchar_t *langName = _lsArray.getLexerNameFromIndex(index - 1); const wchar_t *ext = NppParameters::getInstance().getLangExtFromName(langName); const wchar_t *userExt = (_lsArray.getLexerStylerByName(langName))->getLexerUserExt(); - ::SendDlgItemMessage(_hSelf, IDC_DEF_EXT_EDIT, WM_SETTEXT, 0, reinterpret_cast(ext)); + + if (ext) + ::SendDlgItemMessage(_hSelf, IDC_DEF_EXT_EDIT, WM_SETTEXT, 0, reinterpret_cast(ext)); // WM_SETTEXT cause sending WM_COMMAND message with EN_CHANGE. // That makes status dirty, even it shouldn't in this case. diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index feae152c2..c232701f1 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -20,6 +20,8 @@ #include "EncodingMapper.h" #include "localization.h" #include +#include "ScintillaEditView.h" + #define MyGetGValue(rgb) (LOBYTE((rgb)>>8)) @@ -3446,7 +3448,7 @@ intptr_t CALLBACK NewDocumentSubDlg::run_dlgProc(UINT message, WPARAM wParam, LP getNameStrFromCmd(cmdID, str); if (str.length() > 0) { - size_t index = ::SendDlgItemMessage(_hSelf, IDC_COMBO_DEFAULTLANG, CB_ADDSTRING, 0, reinterpret_cast(str.c_str())); + auto index = ::SendDlgItemMessage(_hSelf, IDC_COMBO_DEFAULTLANG, CB_ADDSTRING, 0, reinterpret_cast(str.c_str())); ::SendDlgItemMessage(_hSelf, IDC_COMBO_DEFAULTLANG, CB_SETITEMDATA, index, lt); } } @@ -3990,7 +3992,15 @@ intptr_t CALLBACK IndentationSubDlg::run_dlgProc(UINT message, WPARAM wParam, LP const int nbLang = nppParam.getNbLang(); for (int i = 0; i < nbLang; ++i) { - ::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_ADDSTRING, 0, reinterpret_cast(nppParam.getLangFromIndex(i)->_langName.c_str())); + Lang* lang = nppParam.getLangFromIndex(i); + if (!lang) continue; + + LanguageNameInfo lni = nppParam.getLangNameInfoFromNameID(lang->_langName); + if (!lni._shortName || lni._langID == L_JS_EMBEDDED) continue; + + auto j = ::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_ADDSTRING, 0, reinterpret_cast(lni._shortName)); + if (j != LB_ERR) + ::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_SETITEMDATA, j, reinterpret_cast(lang)); } const int index2Begin = 0; ::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_SETCURSEL, index2Begin, 0); @@ -4045,10 +4055,10 @@ intptr_t CALLBACK IndentationSubDlg::run_dlgProc(UINT message, WPARAM wParam, LP const int dlgCtrlID = ::GetDlgCtrlID(reinterpret_cast(lParam)); const auto& hdcStatic = reinterpret_cast(wParam); // handle blurry text with disabled states for the affected static controls - const size_t index = ::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETCURSEL, 0, 0); + const auto index = ::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETCURSEL, 0, 0); if ((index > 0) && (dlgCtrlID == IDC_TABSIZE_STATIC || dlgCtrlID == IDC_INDENTUSING_STATIC)) { - const Lang* lang = nppParam.getLangFromIndex(index - 1); + const Lang* lang = reinterpret_cast(::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETITEMDATA, index, 0)); if (lang == nullptr) { return NppDarkMode::onCtlColorDlg(hdcStatic); @@ -4084,7 +4094,7 @@ intptr_t CALLBACK IndentationSubDlg::run_dlgProc(UINT message, WPARAM wParam, LP if (index > 0) { - Lang* lang = nppParam.getLangFromIndex(index - 1); + const Lang* lang = reinterpret_cast(::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETITEMDATA, index, 0)); if (!lang) return FALSE; bool useDefaultTab = (lang->_tabSize == -1 || lang->_tabSize == 0); @@ -4140,31 +4150,11 @@ intptr_t CALLBACK IndentationSubDlg::run_dlgProc(UINT message, WPARAM wParam, LP } const bool useDefaultTab = isCheckedOrNot(IDC_CHECK_DEFAULTTABVALUE); - const size_t index = ::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETCURSEL, 0, 0); + const auto index = ::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETCURSEL, 0, 0); if (!useDefaultTab && index > 0) { - Lang* lang = nppParam.getLangFromIndex(index - 1); - if (lang == nullptr) - { - return FALSE; - } - - if (lang->_langID == L_JS_EMBEDDED) - { - Lang* ljs = nppParam.getLangFromID(L_JAVASCRIPT); - if (!ljs) - return FALSE; - - ljs->_tabSize = tabSize; - } - else if (lang->_langID == L_JAVASCRIPT) - { - Lang* ljavascript = nppParam.getLangFromID(L_JS_EMBEDDED); - if (!ljavascript) - return FALSE; - - ljavascript->_tabSize = tabSize; - } + Lang* lang = reinterpret_cast(::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETITEMDATA, index, 0)); + if (lang == nullptr) return FALSE; lang->_tabSize = tabSize; @@ -4199,11 +4189,11 @@ intptr_t CALLBACK IndentationSubDlg::run_dlgProc(UINT message, WPARAM wParam, LP if (tabSize < 1) { const bool useDefaultTab = isCheckedOrNot(IDC_CHECK_DEFAULTTABVALUE); - const size_t index = ::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETCURSEL, 0, 0); + const auto index = ::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETCURSEL, 0, 0); auto prevSize = nppGUI._tabSize; if (!useDefaultTab && index > 0) { - Lang* lang = nppParam.getLangFromIndex(index - 1); + const Lang* lang = reinterpret_cast(::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETITEMDATA, index, 0)); if (lang != nullptr && lang->_tabSize > 0) { prevSize = lang->_tabSize; @@ -4243,26 +4233,11 @@ intptr_t CALLBACK IndentationSubDlg::run_dlgProc(UINT message, WPARAM wParam, LP if (index != 0) { - Lang *lang = nppParam.getLangFromIndex(index - 1); + Lang* lang = reinterpret_cast(::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETITEMDATA, index, 0)); if (!lang) return FALSE; if (!lang->_tabSize || lang->_tabSize == -1) lang->_tabSize = nppGUI._tabSize; - if (lang->_langID == L_JS_EMBEDDED) - { - Lang *ljs = nppParam.getLangFromID(L_JAVASCRIPT); - if (!ljs) return FALSE; - - ljs->_isTabReplacedBySpace = isTabReplacedBySpace; - } - else if (lang->_langID == L_JAVASCRIPT) - { - Lang *ljavascript = nppParam.getLangFromID(L_JS_EMBEDDED); - if (!ljavascript) return FALSE; - - ljavascript->_isTabReplacedBySpace = isTabReplacedBySpace; - } - lang->_isTabReplacedBySpace = isTabReplacedBySpace; // write in langs.xml @@ -4287,26 +4262,11 @@ intptr_t CALLBACK IndentationSubDlg::run_dlgProc(UINT message, WPARAM wParam, LP if (index != 0) { - Lang* lang = nppParam.getLangFromIndex(index - 1); + Lang* lang = reinterpret_cast(::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETITEMDATA, index, 0)); if (!lang) return FALSE; if (!lang->_tabSize || lang->_tabSize == -1) lang->_tabSize = nppGUI._tabSize; - if (lang->_langID == L_JS_EMBEDDED) - { - Lang* ljs = nppParam.getLangFromID(L_JAVASCRIPT); - if (!ljs) return FALSE; - - ljs->_isBackspaceUnindent = isBackspaceUnindent; - } - else if (lang->_langID == L_JAVASCRIPT) - { - Lang* ljavascript = nppParam.getLangFromID(L_JS_EMBEDDED); - if (!ljavascript) return FALSE; - - ljavascript->_isBackspaceUnindent = isBackspaceUnindent; - } - lang->_isBackspaceUnindent = isBackspaceUnindent; // write in langs.xml @@ -4329,7 +4289,7 @@ intptr_t CALLBACK IndentationSubDlg::run_dlgProc(UINT message, WPARAM wParam, LP if (index == LB_ERR || index == 0) // index == 0 shouldn't happen return FALSE; - Lang *lang = nppParam.getLangFromIndex(index - 1); + Lang* lang = reinterpret_cast(::SendDlgItemMessage(_hSelf, IDC_LIST_TABSETTNG, LB_GETITEMDATA, index, 0)); if (!lang) return FALSE; diff --git a/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp b/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp index 6095108fe..4bd0f49f5 100644 --- a/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp +++ b/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp @@ -324,6 +324,9 @@ void ProjectPanel::destroyMenus() bool ProjectPanel::openWorkSpace(const wchar_t *projectFileName, bool force) { + if (!projectFileName) + return false; + if ((!force) && (_workSpaceFilePath.length() > 0)) { // Return if it is better to keep the current workspace tree wstring newWorkspace = projectFileName;