From d36fd964e4132850ccd1a7ed788ff5424323dff1 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Tue, 29 Sep 2009 00:14:48 +0000 Subject: [PATCH] [NEW_FEATURE] Try to catch plugin crash. [BUG_FIXED] (Author : Jocelyn Legault) Fix some memory leaks. git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@545 f5eea248-9336-0410-98b8-ebc06183d4e3 --- .../MISC/PluginsManager/PluginsManager.cpp | 92 ++++++++++++++++++ .../src/MISC/PluginsManager/PluginsManager.h | 69 +++---------- PowerEditor/src/Notepad_plus.cpp | 7 +- PowerEditor/src/Notepad_plus.rc | 3 +- PowerEditor/src/Parameters.cpp | 50 +++++----- PowerEditor/src/Parameters.h | 14 +-- PowerEditor/src/ScitillaComponent/Buffer.cpp | 7 ++ PowerEditor/src/ScitillaComponent/Buffer.h | 2 +- .../src/ScitillaComponent/FindReplaceDlg.cpp | 55 +++++------ .../src/ScitillaComponent/FindReplaceDlg.h | 4 +- .../src/WinControls/AboutDlg/AboutDlg.cpp | 2 +- PowerEditor/src/icons/chameleon.ico | Bin 0 -> 7406 bytes PowerEditor/src/icons/npp.ico | Bin 7406 -> 7406 bytes PowerEditor/src/resource.h | 2 +- 14 files changed, 176 insertions(+), 131 deletions(-) create mode 100644 PowerEditor/src/icons/chameleon.ico diff --git a/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp b/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp index 982e16115..d9a8fbfd4 100644 --- a/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp +++ b/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp @@ -348,3 +348,95 @@ void PluginsManager::setMenu(HMENU hMenu, const TCHAR *menuName) } } } + + +void PluginsManager::runPluginCommand(size_t i) +{ + if (i < _pluginsCommands.size()) + { + if (_pluginsCommands[i]._pFunc != NULL) + { + try { + _pluginsCommands[i]._pFunc(); + } catch (...) { + pluginCrashAlert(_pluginsCommands[i]._pluginName.c_str(), TEXT("runPluginCommand(size_t i)")); + } + } + } +} + + +void PluginsManager::runPluginCommand(const TCHAR *pluginName, int commandID) +{ + for (size_t i = 0 ; i < _pluginsCommands.size() ; i++) + { + if (!generic_stricmp(_pluginsCommands[i]._pluginName.c_str(), pluginName)) + { + if (_pluginsCommands[i]._funcID == commandID) + { + try { + _pluginsCommands[i]._pFunc(); + } catch (...) { + pluginCrashAlert(_pluginsCommands[i]._pluginName.c_str(), TEXT("runPluginCommand(const TCHAR *pluginName, int commandID)")); + } + } + } + } +} + +void PluginsManager::notify(SCNotification *notification) +{ + for (size_t i = 0 ; i < _pluginInfos.size() ; i++) + { + if (_pluginInfos[i]->_hLib) + { + // To avoid the plugin change the data in SCNotification + // Each notification to pass to a plugin is a copy of SCNotification instance + SCNotification scNotif = *notification; + try { + _pluginInfos[i]->_pBeNotified(&scNotif); + } catch (...) { + pluginCrashAlert(_pluginsCommands[i]._pluginName.c_str(), TEXT("notify(SCNotification *notification)")); + } + } + } +} + +void PluginsManager::relayNppMessages(UINT Message, WPARAM wParam, LPARAM lParam) +{ + for (size_t i = 0 ; i < _pluginInfos.size() ; i++) + { + if (_pluginInfos[i]->_hLib) + { + try { + _pluginInfos[i]->_pMessageProc(Message, wParam, lParam); + } catch (...) { + pluginCrashAlert(_pluginsCommands[i]._pluginName.c_str(), TEXT("relayNppMessages(UINT Message, WPARAM wParam, LPARAM lParam)")); + } + } + } +} + +bool PluginsManager::relayPluginMessages(UINT Message, WPARAM wParam, LPARAM lParam) +{ + const TCHAR * moduleName = (const TCHAR *)wParam; + if (!moduleName || !moduleName[0] || !lParam) + return false; + + for (size_t i = 0 ; i < _pluginInfos.size() ; i++) + { + if (_pluginInfos[i]->_moduleName == moduleName) + { + if (_pluginInfos[i]->_hLib) + { + try { + _pluginInfos[i]->_pMessageProc(Message, wParam, lParam); + } catch (...) { + pluginCrashAlert(_pluginsCommands[i]._pluginName.c_str(), TEXT("relayPluginMessages(UINT Message, WPARAM wParam, LPARAM lParam)")); + } + return true; + } + } + } + return false; +} \ No newline at end of file diff --git a/PowerEditor/src/MISC/PluginsManager/PluginsManager.h b/PowerEditor/src/MISC/PluginsManager/PluginsManager.h index 88c10bcac..d482cf66b 100644 --- a/PowerEditor/src/MISC/PluginsManager/PluginsManager.h +++ b/PowerEditor/src/MISC/PluginsManager/PluginsManager.h @@ -86,66 +86,16 @@ public: bool unloadPlugin(int index, HWND nppHandle); - void runPluginCommand(size_t i) { - if (i < _pluginsCommands.size()) - if (_pluginsCommands[i]._pFunc != NULL) - _pluginsCommands[i]._pFunc(); - }; - - void runPluginCommand(const TCHAR *pluginName, int commandID) { - for (size_t i = 0 ; i < _pluginsCommands.size() ; i++) - { - if (!generic_stricmp(_pluginsCommands[i]._pluginName.c_str(), pluginName)) - { - if (_pluginsCommands[i]._funcID == commandID) - _pluginsCommands[i]._pFunc(); - } - } - }; + void runPluginCommand(size_t i); + void runPluginCommand(const TCHAR *pluginName, int commandID); void addInMenuFromPMIndex(int i); void setMenu(HMENU hMenu, const TCHAR *menuName); bool getShortcutByCmdID(int cmdID, ShortcutKey *sk); - void notify(SCNotification *notification) { - for (size_t i = 0 ; i < _pluginInfos.size() ; i++) - { - if (_pluginInfos[i]->_hLib) - { - // To avoid the plugin change the data in SCNotification - // Each notification to pass to a plugin is a copy of SCNotification instance - SCNotification scNotif = *notification; - _pluginInfos[i]->_pBeNotified(&scNotif); - } - } - }; - - void relayNppMessages(UINT Message, WPARAM wParam, LPARAM lParam) { - for (size_t i = 0 ; i < _pluginInfos.size() ; i++) - { - if (_pluginInfos[i]->_hLib) - _pluginInfos[i]->_pMessageProc(Message, wParam, lParam); - } - }; - - bool relayPluginMessages(UINT Message, WPARAM wParam, LPARAM lParam) { - const TCHAR * moduleName = (const TCHAR *)wParam; - if (!moduleName || !moduleName[0] || !lParam) - return false; - - for (size_t i = 0 ; i < _pluginInfos.size() ; i++) - { - if (_pluginInfos[i]->_moduleName == moduleName) - { - if (_pluginInfos[i]->_hLib) - { - _pluginInfos[i]->_pMessageProc(Message, wParam, lParam); - return true; - } - } - } - return false; - }; + void notify(SCNotification *notification); + void relayNppMessages(UINT Message, WPARAM wParam, LPARAM lParam); + bool relayPluginMessages(UINT Message, WPARAM wParam, LPARAM lParam); HMENU getMenuHandle() { return _hPluginsMenu; @@ -157,10 +107,17 @@ public: private: NppData _nppData; HMENU _hPluginsMenu; - + vector _pluginInfos; vector _pluginsCommands; bool _isDisabled; + + void pluginCrashAlert(const TCHAR *pluginName, const TCHAR *funcSignature) { + generic_string msg = pluginName; + msg += TEXT(" just crash in\r"); + msg += funcSignature; + ::MessageBox(NULL, msg.c_str(), TEXT(" just crash in\r"), MB_OK|MB_ICONSTOP); + }; }; #define EXT_LEXER_DECL __stdcall diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index 2a41d73dc..139ff7de1 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -21,7 +21,6 @@ #include "precompiledHeaders.h" #include "Notepad_plus.h" #include "FileDialog.h" -//#include "resource.h" #include "printer.h" #include "FileNameStringSplitter.h" #include "lesDlgs.h" @@ -198,7 +197,7 @@ void Notepad_plus::init(HINSTANCE hInst, HWND parent, const TCHAR *cmdLine, CmdL nppClass.cbClsExtra = 0; nppClass.cbWndExtra = 0; nppClass.hInstance = _hInst; - nppClass.hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_M30ICON)); + nppClass.hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_M30ICON)); nppClass.hCursor = ::LoadCursor(NULL, IDC_ARROW); nppClass.hbrBackground = ::CreateSolidBrush(::GetSysColor(COLOR_MENU)); nppClass.lpszMenuName = MAKEINTRESOURCE(IDR_M30_MENU); @@ -1535,6 +1534,8 @@ bool Notepad_plus::replaceAllFiles() { ::printStr(TEXT("The regular expression to search is formed badly")); else { + if (nbTotal) + enableCommand(IDM_FILE_SAVEALL, true, MENU | TOOLBAR); TCHAR result[64]; wsprintf(result, TEXT("%d occurrences replaced."), nbTotal); ::printStr(result); @@ -2723,7 +2724,7 @@ BOOL Notepad_plus::notify(SCNotification *notification) return FALSE; } } catch (...) { - printStr(TEXT("ToolTip crash is catched!")); + //printStr(TEXT("ToolTip crash is caught!")); } } diff --git a/PowerEditor/src/Notepad_plus.rc b/PowerEditor/src/Notepad_plus.rc index 14eeebd67..ed2998913 100644 --- a/PowerEditor/src/Notepad_plus.rc +++ b/PowerEditor/src/Notepad_plus.rc @@ -53,6 +53,7 @@ END // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_M30ICON ICON "icons\\npp.ico" +IDI_CHAMELEON ICON "icons\\chameleon.ico" IDI_NEW_OFF_ICON ICON "icons\\new_off.ico" IDI_OPEN_OFF_ICON ICON "icons\\open_off.ico" IDI_SAVE_OFF_ICON ICON "icons\\save_off.ico" @@ -593,7 +594,7 @@ BEGIN LTEXT "http://notepad-plus.sourceforge.net/",IDC_HOME_ADDR,78,54,126,8 EDITTEXT IDC_LICENCE_EDIT,31,99,209,96,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL EDITTEXT IDC_BUILD_DATETIME,150,2,150,10, ES_READONLY | NOT WS_BORDER - CONTROL "",IDI_M30ICON,"Static",SS_OWNERDRAW,21,10,32,32 + CONTROL "",IDI_CHAMELEON,"Static",SS_OWNERDRAW,21,10,48,48 END IDD_GOLINE DIALOGEX 26, 41, 261, 88 diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index 6e84f5211..13abdf469 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -520,11 +520,6 @@ NppParameters::NppParameters() : _pXmlDoc(NULL),_pXmlUserDoc(NULL), _pXmlUserSty _transparentFuncAddr(NULL), _enableThemeDialogTextureFuncAddr(NULL),\ _isTaskListRBUTTONUP_Active(false), _fileSaveDlgFilterIndex(-1), _asNotepadStyle(false), _isFindReplacing(false) { - _findHistory._nbFindHistoryPath = 0; - _findHistory._nbFindHistoryFilter = 0; - _findHistory._nbFindHistoryFind = 0; - _findHistory._nbFindHistoryReplace = 0; - //Get windows version _winVersion = getWindowsVersion(); @@ -565,6 +560,12 @@ NppParameters::~NppParameters() if (_hUXTheme) FreeLibrary(_hUXTheme); + for (std::vector::iterator it = _pXmlExternalLexerDoc.begin(), end = _pXmlExternalLexerDoc.end(); it != end; ++it ) + { + delete (*it); + } + _pXmlExternalLexerDoc.clear(); + ::RemoveFontResource(LINEDRAW_FONT); } void cutString(const TCHAR *str2cut, vector & patternVect) @@ -944,8 +945,8 @@ bool NppParameters::load() delete _pXmlSessionDoc; for (size_t i = 0 ; i < _pXmlExternalLexerDoc.size() ; i++) - if (_pXmlExternalLexerDoc[i]) - delete _pXmlExternalLexerDoc[i]; + if (_pXmlExternalLexerDoc[i]) + delete _pXmlExternalLexerDoc[i]; _pXmlSessionDoc = NULL; } @@ -1505,13 +1506,13 @@ void NppParameters::feedFindHistoryParameters(TiXmlNode *node) if ((_findHistory._nbMaxFindHistoryPath > 0) && (_findHistory._nbMaxFindHistoryPath <= NB_MAX_FINDHISTORY_PATH)) { for (TiXmlNode *childNode = findHistoryRoot->FirstChildElement(TEXT("Path")); - childNode && (_findHistory._nbFindHistoryPath < NB_MAX_FINDHISTORY_PATH); + childNode && (_findHistory._findHistoryPaths.size() < NB_MAX_FINDHISTORY_PATH); childNode = childNode->NextSibling(TEXT("Path")) ) { const TCHAR *filePath = (childNode->ToElement())->Attribute(TEXT("name")); if (filePath) { - _findHistory._pFindHistoryPath[_findHistory._nbFindHistoryPath++] = new generic_string(filePath); + _findHistory._findHistoryPaths.push_back(generic_string(filePath)); } } } @@ -1520,13 +1521,13 @@ void NppParameters::feedFindHistoryParameters(TiXmlNode *node) if ((_findHistory._nbMaxFindHistoryFilter > 0) && (_findHistory._nbMaxFindHistoryFilter <= NB_MAX_FINDHISTORY_FILTER)) { for (TiXmlNode *childNode = findHistoryRoot->FirstChildElement(TEXT("Filter")); - childNode && (_findHistory._nbFindHistoryFilter < NB_MAX_FINDHISTORY_FILTER); + childNode && (_findHistory._findHistoryFilters.size() < NB_MAX_FINDHISTORY_FILTER); childNode = childNode->NextSibling(TEXT("Filter"))) { const TCHAR *fileFilter = (childNode->ToElement())->Attribute(TEXT("name")); if (fileFilter) { - _findHistory._pFindHistoryFilter[_findHistory._nbFindHistoryFilter++] = new generic_string(fileFilter); + _findHistory._findHistoryFilters.push_back(generic_string(fileFilter)); } } } @@ -1535,13 +1536,13 @@ void NppParameters::feedFindHistoryParameters(TiXmlNode *node) if ((_findHistory._nbMaxFindHistoryFind > 0) && (_findHistory._nbMaxFindHistoryFind <= NB_MAX_FINDHISTORY_FIND)) { for (TiXmlNode *childNode = findHistoryRoot->FirstChildElement(TEXT("Find")); - childNode && (_findHistory._nbFindHistoryFind < NB_MAX_FINDHISTORY_FIND); + childNode && (_findHistory._findHistoryFinds.size() < NB_MAX_FINDHISTORY_FIND); childNode = childNode->NextSibling(TEXT("Find"))) { const TCHAR *fileFind = (childNode->ToElement())->Attribute(TEXT("name")); if (fileFind) { - _findHistory._pFindHistoryFind[_findHistory._nbFindHistoryFind++] = new generic_string(fileFind); + _findHistory._findHistoryFinds.push_back(generic_string(fileFind)); } } } @@ -1550,13 +1551,13 @@ void NppParameters::feedFindHistoryParameters(TiXmlNode *node) if ((_findHistory._nbMaxFindHistoryReplace > 0) && (_findHistory._nbMaxFindHistoryReplace <= NB_MAX_FINDHISTORY_REPLACE)) { for (TiXmlNode *childNode = findHistoryRoot->FirstChildElement(TEXT("Replace")); - childNode && (_findHistory._nbFindHistoryReplace < NB_MAX_FINDHISTORY_REPLACE); + childNode && (_findHistory._findHistoryReplaces.size() < NB_MAX_FINDHISTORY_REPLACE); childNode = childNode->NextSibling(TEXT("Replace"))) { const TCHAR *fileReplace = (childNode->ToElement())->Attribute(TEXT("name")); if (fileReplace) { - _findHistory._pFindHistoryReplace[_findHistory._nbFindHistoryReplace++] = new generic_string(fileReplace); + _findHistory._findHistoryReplaces.push_back(generic_string(fileReplace)); } } } @@ -4176,9 +4177,6 @@ bool NppParameters::writeFindHistory() TiXmlElement element(TEXT("FindHistory")); findHistoryRoot = nppRoot->InsertEndChild(element); } - - int i; - findHistoryRoot->Clear(); (findHistoryRoot->ToElement())->SetAttribute(TEXT("nbMaxFindHistoryPath"), _findHistory._nbMaxFindHistoryPath); @@ -4204,30 +4202,30 @@ bool NppParameters::writeFindHistory() TiXmlElement hist_element(TEXT("")); hist_element.SetValue(TEXT("Path")); - for (i = 0; i < _findHistory._nbFindHistoryPath; i++) + for (size_t i = 0; i < _findHistory._findHistoryPaths.size(); i++) { - (hist_element.ToElement())->SetAttribute(TEXT("name"), _findHistory._pFindHistoryPath[i]->c_str()); + (hist_element.ToElement())->SetAttribute(TEXT("name"), _findHistory._findHistoryPaths[i].c_str()); findHistoryRoot->InsertEndChild(hist_element); } hist_element.SetValue(TEXT("Filter")); - for (i = 0; i < _findHistory._nbFindHistoryFilter; i++) + for (size_t i = 0; i < _findHistory._findHistoryFilters.size(); i++) { - (hist_element.ToElement())->SetAttribute(TEXT("name"), _findHistory._pFindHistoryFilter[i]->c_str()); + (hist_element.ToElement())->SetAttribute(TEXT("name"), _findHistory._findHistoryFilters[i].c_str()); findHistoryRoot->InsertEndChild(hist_element); } hist_element.SetValue(TEXT("Find")); - for (i = 0; i < _findHistory._nbFindHistoryFind; i++) + for (size_t i = 0; i < _findHistory._findHistoryFinds.size(); i++) { - (hist_element.ToElement())->SetAttribute(TEXT("name"), _findHistory._pFindHistoryFind[i]->c_str()); + (hist_element.ToElement())->SetAttribute(TEXT("name"), _findHistory._findHistoryFinds[i].c_str()); findHistoryRoot->InsertEndChild(hist_element); } hist_element.SetValue(TEXT("Replace")); - for (i = 0; i < _findHistory._nbFindHistoryReplace; i++) + for (size_t i = 0; i < _findHistory._findHistoryReplaces.size(); i++) { - (hist_element.ToElement())->SetAttribute(TEXT("name"), _findHistory._pFindHistoryReplace[i]->c_str()); + (hist_element.ToElement())->SetAttribute(TEXT("name"), _findHistory._findHistoryReplaces[i].c_str()); findHistoryRoot->InsertEndChild(hist_element); } diff --git a/PowerEditor/src/Parameters.h b/PowerEditor/src/Parameters.h index a4d869832..9783d977d 100644 --- a/PowerEditor/src/Parameters.h +++ b/PowerEditor/src/Parameters.h @@ -948,7 +948,6 @@ struct FindHistory { enum transparencyMode{none, onLossingFocus, persistant}; FindHistory() : _nbMaxFindHistoryPath(10), _nbMaxFindHistoryFilter(10), _nbMaxFindHistoryFind(10), _nbMaxFindHistoryReplace(10),\ - _nbFindHistoryPath(0), _nbFindHistoryFilter(0),_nbFindHistoryFind(0), _nbFindHistoryReplace(0),\ _isMatchWord(false), _isMatchCase(false),_isWrap(true),_isDirectionDown(true),\ _isFifRecuisive(true), _isFifInHiddenFolder(false), _isDlgAlwaysVisible(false),\ _isFilterFollowDoc(false), _isFolderFollowDoc(false),\ @@ -960,15 +959,10 @@ struct FindHistory { int _nbMaxFindHistoryFind; int _nbMaxFindHistoryReplace; - int _nbFindHistoryPath; - int _nbFindHistoryFilter; - int _nbFindHistoryFind; - int _nbFindHistoryReplace; - - generic_string *_pFindHistoryPath[NB_MAX_FINDHISTORY_PATH]; - generic_string *_pFindHistoryFilter[NB_MAX_FINDHISTORY_FILTER]; - generic_string *_pFindHistoryFind[NB_MAX_FINDHISTORY_FIND]; - generic_string *_pFindHistoryReplace[NB_MAX_FINDHISTORY_REPLACE]; + vector _findHistoryPaths; + vector _findHistoryFilters; + vector _findHistoryFinds; + vector _findHistoryReplaces; bool _isMatchWord; bool _isMatchCase; diff --git a/PowerEditor/src/ScitillaComponent/Buffer.cpp b/PowerEditor/src/ScitillaComponent/Buffer.cpp index 8c571ab76..7672baaca 100644 --- a/PowerEditor/src/ScitillaComponent/Buffer.cpp +++ b/PowerEditor/src/ScitillaComponent/Buffer.cpp @@ -406,6 +406,13 @@ void Buffer::setLineUndoState(size_t currentLine, size_t undoLevel, bool isSaved //filemanager +FileManager::~FileManager() +{ + for (std::vector::iterator it = _buffers.begin(), end = _buffers.end(); it != end; ++it) + { + delete *it; + } +} void FileManager::init(Notepad_plus * pNotepadPlus, ScintillaEditView * pscratchTilla) { diff --git a/PowerEditor/src/ScitillaComponent/Buffer.h b/PowerEditor/src/ScitillaComponent/Buffer.h index a33b221ef..182aa563e 100644 --- a/PowerEditor/src/ScitillaComponent/Buffer.h +++ b/PowerEditor/src/ScitillaComponent/Buffer.h @@ -108,7 +108,7 @@ public: private: FileManager() : _nextNewNumber(1), _nextBufferID(0), _pNotepadPlus(NULL), _nrBufs(0), _pscratchTilla(NULL){}; - ~FileManager(){}; + ~FileManager(); static FileManager *_pSelf; Notepad_plus * _pNotepadPlus; diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp index 6c9446563..9e7adbe4a 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp @@ -314,13 +314,12 @@ void FindReplaceDlg::create(int dialogID, bool isRTL) void FindReplaceDlg::fillFindHistory() { NppParameters *nppParams = NppParameters::getInstance(); + FindHistory & findHistory = nppParams->getFindHistory(); - FindHistory& findHistory = nppParams->getFindHistory(); - - fillComboHistory(IDD_FINDINFILES_DIR_COMBO, findHistory._nbFindHistoryPath, findHistory._pFindHistoryPath); - fillComboHistory(IDD_FINDINFILES_FILTERS_COMBO, findHistory._nbFindHistoryFilter, findHistory._pFindHistoryFilter); - fillComboHistory(IDFINDWHAT, findHistory._nbFindHistoryFind, findHistory._pFindHistoryFind); - fillComboHistory(IDREPLACEWITH, findHistory._nbFindHistoryReplace, findHistory._pFindHistoryReplace); + fillComboHistory(IDFINDWHAT, findHistory._findHistoryFinds); + fillComboHistory(IDREPLACEWITH, findHistory._findHistoryReplaces); + fillComboHistory(IDD_FINDINFILES_FILTERS_COMBO, findHistory._findHistoryFilters); + fillComboHistory(IDD_FINDINFILES_DIR_COMBO, findHistory._findHistoryPaths); ::SendDlgItemMessage(_hSelf, IDWRAP, BM_SETCHECK, findHistory._isWrap, 0); ::SendDlgItemMessage(_hSelf, IDWHOLEWORD, BM_SETCHECK, findHistory._isMatchWord, 0); @@ -386,16 +385,14 @@ void FindReplaceDlg::fillFindHistory() } } -void FindReplaceDlg::fillComboHistory(int id, int count, generic_string **pStrings) +void FindReplaceDlg::fillComboHistory(int id, const vector & strings) { - int i; bool isUnicode = false; - HWND hCombo; + HWND hCombo = ::GetDlgItem(_hSelf, id); - hCombo = ::GetDlgItem(_hSelf, id); - for (i = count -1 ; i >= 0 ; i--) + for (vector::const_reverse_iterator i = strings.rbegin() ; i != strings.rend(); i++) { - addText2Combo(pStrings[i]->c_str(), hCombo, isUnicode); + addText2Combo(i->c_str(), hCombo, isUnicode); } ::SendMessage(hCombo, CB_SETCURSEL, 0, 0); // select first item } @@ -406,32 +403,30 @@ void FindReplaceDlg::saveFindHistory() if (! isCreated()) return; FindHistory& findHistory = (NppParameters::getInstance())->getFindHistory(); - saveComboHistory(IDD_FINDINFILES_DIR_COMBO, findHistory._nbMaxFindHistoryPath, findHistory._nbFindHistoryPath, findHistory._pFindHistoryPath); - saveComboHistory(IDD_FINDINFILES_FILTERS_COMBO, findHistory._nbMaxFindHistoryFilter, findHistory._nbFindHistoryFilter, findHistory._pFindHistoryFilter); - saveComboHistory(IDFINDWHAT, findHistory._nbMaxFindHistoryFind, findHistory._nbFindHistoryFind, findHistory._pFindHistoryFind); - saveComboHistory(IDREPLACEWITH, findHistory._nbMaxFindHistoryReplace, findHistory._nbFindHistoryReplace, findHistory._pFindHistoryReplace); + saveComboHistory(IDD_FINDINFILES_DIR_COMBO, findHistory._nbMaxFindHistoryPath, findHistory._findHistoryPaths); + saveComboHistory(IDD_FINDINFILES_FILTERS_COMBO, findHistory._nbMaxFindHistoryFilter, findHistory._findHistoryFilters); + saveComboHistory(IDFINDWHAT, findHistory._nbMaxFindHistoryFind, findHistory._findHistoryFinds); + saveComboHistory(IDREPLACEWITH, findHistory._nbMaxFindHistoryReplace, findHistory._findHistoryReplaces); } -void FindReplaceDlg::saveComboHistory(int id, int maxcount, int & oldcount, generic_string **pStrings) +int FindReplaceDlg::saveComboHistory(int id, int maxcount, vector & strings) { - int i, count; - - HWND hCombo; TCHAR text[FINDREPLACE_MAXLENGTH]; - - hCombo = ::GetDlgItem(_hSelf, id); - count = ::SendMessage(hCombo, CB_GETCOUNT, 0, 0); + HWND hCombo = ::GetDlgItem(_hSelf, id); + int count = ::SendMessage(hCombo, CB_GETCOUNT, 0, 0); count = min(count, maxcount); - for (i = 0; i < count; i++) + + if (count == CB_ERR) return 0; + + if (count) + strings.clear(); + + for (size_t i = 0 ; i < (size_t)count ; i++) { ::SendMessage(hCombo, CB_GETLBTEXT, i, (LPARAM) text); - if (i < oldcount) - *pStrings[i] = text; - else - pStrings[i] = new generic_string(text); + strings.push_back(generic_string(text)); } - for (; i < oldcount; i++) delete pStrings[i]; - oldcount = count; + return count; } void FindReplaceDlg::updateCombos() diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h index d7dcaaf20..89c7d9ce0 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h @@ -319,8 +319,8 @@ private : addText2Combo(getTextFromCombo(hCombo, isUnicode).c_str(), hCombo, isUnicode); }; void fillFindHistory(); - void fillComboHistory(int id, int count, generic_string **pStrings); - void saveComboHistory(int id, int maxcount, int& oldcount, generic_string **pStrings); + void fillComboHistory(int id, const std::vector & strings); + int saveComboHistory(int id, int maxcount, vector & strings); }; //FindIncrementDlg: incremental search dialog, docked in rebar diff --git a/PowerEditor/src/WinControls/AboutDlg/AboutDlg.cpp b/PowerEditor/src/WinControls/AboutDlg/AboutDlg.cpp index ce4b95fd6..b7c69e8c9 100644 --- a/PowerEditor/src/WinControls/AboutDlg/AboutDlg.cpp +++ b/PowerEditor/src/WinControls/AboutDlg/AboutDlg.cpp @@ -70,7 +70,7 @@ BOOL CALLBACK AboutDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) case WM_DRAWITEM : { - HICON hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_M30ICON)); + HICON hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_CHAMELEON)); DRAWITEMSTRUCT *pdis = (DRAWITEMSTRUCT *)lParam; ::DrawIcon(pdis->hDC, 0, 0, hIcon); return TRUE; diff --git a/PowerEditor/src/icons/chameleon.ico b/PowerEditor/src/icons/chameleon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1ae54139c4f9fc6095bad7ffa8d0a7a19eafa88a GIT binary patch literal 7406 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 U_b$7_+2T*Pxcm_9viD^E4K`J!J^%m! literal 0 HcmV?d00001 diff --git a/PowerEditor/src/icons/npp.ico b/PowerEditor/src/icons/npp.ico index 1ae54139c4f9fc6095bad7ffa8d0a7a19eafa88a..bd272c7e7aef295ca9d9ae79313862a0175d284b 100644 GIT binary patch literal 7406 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 literal 7406 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 U_b$7_+2T*Pxcm_9viD^E4K`J!J^%m! diff --git a/PowerEditor/src/resource.h b/PowerEditor/src/resource.h index 9f643557a..4de39c85b 100644 --- a/PowerEditor/src/resource.h +++ b/PowerEditor/src/resource.h @@ -33,7 +33,7 @@ #endif #define IDI_M30ICON 100 -#define IDR_MENU1 101 +#define IDI_CHAMELEON 101 #define IDR_RT_MANIFEST 103 #define IDI_NEW_OFF_ICON 201