From 5ef6a4a5b45b29f99b4c197e0253be90e0ee19d1 Mon Sep 17 00:00:00 2001 From: donho Date: Fri, 12 Sep 2008 15:28:00 +0000 Subject: [PATCH] [NEW_FEATURE] Add new pluin notification NPPN_LANGCHANGED. git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@319 f5eea248-9336-0410-98b8-ebc06183d4e3 --- .../MISC/PluginsManager/Notepad_plus_msgs.h | 5 ++ PowerEditor/src/Notepad_plus.cpp | 67 +++++++++++++------ 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h b/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h index 5301b16aa..d96537991 100644 --- a/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h +++ b/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h @@ -336,4 +336,9 @@ enum winVer{WV_UNKNOWN, WV_WIN32S, WV_95, WV_98, WV_ME, WV_NT, WV_W2K, WV_XP, WV //scnNotification->nmhdr.hwndFrom = hwndNpp; //scnNotification->nmhdr.idFrom = newBufferID; + #define NPPN_LANGCHANGED (NPPN_FIRST + 12) // To notify plugins that the language in the current doc is just changed. + //scnNotification->nmhdr.code = NPPN_LANGCHANGED; + //scnNotification->nmhdr.hwndFrom = hwndNpp; + //scnNotification->nmhdr.idFrom = currentBufferID; + #endif //NOTEPAD_PLUS_MSGS_H diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index e8fb456de..750b15abc 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -4075,8 +4075,10 @@ void Notepad_plus::command(int id) case IDM_LANG_CMAKE : case IDM_LANG_YAML : case IDM_LANG_USER : - setLanguage(id, menuID2LangType(id)); - break; + { + setLanguage(id, menuID2LangType(id)); + } + break; case IDC_PREV_DOC : case IDC_NEXT_DOC : @@ -8440,6 +8442,7 @@ void Notepad_plus::drawTabbarColoursFromStylerArray() if (stInact && stInact->_bgColor != -1) TabBarPlus::setColour(stInact->_bgColor, TabBarPlus::inactiveBg); } + void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) { NppParameters *pNppParam = NppParameters::getInstance(); const NppGUI & nppGUI = pNppParam->getNppGUI(); @@ -8456,50 +8459,64 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) { if (mask & BufferChangeStatus) { //reload etc bool didDialog = false; switch(buffer->getStatus()) { - case DOC_UNNAMED: { //nothing todo - break; } - case DOC_REGULAR: { //nothing todo - break; } - case DOC_MODIFIED: { //ask for reloading + case DOC_UNNAMED: //nothing todo + { + break; + } + case DOC_REGULAR: //nothing todo + { + break; + } + case DOC_MODIFIED: //ask for reloading + { bool autoUpdate = (nppGUI._fileAutoDetection == cdAutoUpdate) || (nppGUI._fileAutoDetection == cdAutoUpdateGo2end); - if (!autoUpdate) { + if (!autoUpdate) + { didDialog = true; if (doReloadOrNot(buffer->getFilePath()) != IDYES) break; //abort } //activateBuffer(buffer->getID(), iView); //activate the buffer in the first view possible doReload(buffer->getID(), false); - if (mainActive || subActive) { + if (mainActive || subActive) + { performPostReload(mainActive?MAIN_VIEW:SUB_VIEW); } - break; } - case DOC_DELETED: { //ask for keep + break; + } + case DOC_DELETED: //ask for keep + { int index = _pDocTab->getIndexByBuffer(buffer->getID()); int iView = currentView(); if (index == -1) iView = otherView(); //activateBuffer(buffer->getID(), iView); //activate the buffer in the first view possible didDialog = true; - if (doCloseOrNot(buffer->getFilePath()) == IDNO) { + if (doCloseOrNot(buffer->getFilePath()) == IDNO) + { //close in both views, doing current view last since that has to remain opened doClose(buffer->getID(), otherView()); doClose(buffer->getID(), currentView()); } - break; } + break; + } } - if (didDialog) { + if (didDialog) + { int curPos = _pEditView->execute(SCI_GETCURRENTPOS); ::PostMessage(_pEditView->getHSelf(), WM_LBUTTONUP, 0, 0); ::PostMessage(_pEditView->getHSelf(), SCI_SETSEL, curPos, curPos); } } - if (!mainActive && !subActive) { + if (!mainActive && !subActive) + { return; } - if (mask & (BufferChangeLanguage)) { + if (mask & (BufferChangeLanguage)) + { if (mainActive) _autoCompleteMain.setLanguage(buffer->getLangType()); if (subActive) @@ -8512,7 +8529,8 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) { if ((currentView() == SUB_VIEW) && !subActive) return; - if (mask & (BufferChangeDirty|BufferChangeFilename)) { + if (mask & (BufferChangeDirty|BufferChangeFilename)) + { checkDocState(); setTitle(); TCHAR dir[MAX_PATH]; @@ -8520,22 +8538,31 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) { PathRemoveFileSpec(dir); setWorkingDir(dir); } - if (mask & (BufferChangeLanguage)) { + + if (mask & (BufferChangeLanguage)) + { checkLangsMenu(-1); //let N++ do search for the item setLangStatus(buffer->getLangType()); if (_mainEditView.getCurrentBuffer() == buffer) _autoCompleteMain.setLanguage(buffer->getLangType()); else if (_subEditView.getCurrentBuffer() == buffer) _autoCompleteSub.setLanguage(buffer->getLangType()); + + SCNotification scnN; + scnN.nmhdr.code = NPPN_LANGCHANGED; + scnN.nmhdr.hwndFrom = _hSelf; + scnN.nmhdr.idFrom = (uptr_t)_pEditView->getCurrentBufferID(); + _pluginsManager.notify(&scnN); } - if (mask & (BufferChangeFormat|BufferChangeLanguage|BufferChangeUnicode)) { + + if (mask & (BufferChangeFormat|BufferChangeLanguage|BufferChangeUnicode)) + { updateStatusBar(); checkUnicodeMenuItems(buffer->getUnicodeMode()); setUniModeText(buffer->getUnicodeMode()); setDisplayFormat(buffer->getFormat()); enableConvertMenuItems(buffer->getFormat()); } - } void Notepad_plus::notifyBufferActivated(BufferID bufid, int view) {