diff --git a/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp b/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp index 03200698..666600a0 100644 --- a/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp +++ b/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp @@ -59,10 +59,14 @@ bool PluginsManager::unloadPlugin(int index, HWND nppHandle) //::DestroyMenu(_pluginInfos[index]->_pluginMenu); //_pluginInfos[index]->_pluginMenu = NULL; - if (::FreeLibrary(_pluginInfos[index]->_hLib)) - _pluginInfos[index]->_hLib = nullptr; + if (::FreeLibrary(_pluginInfos[index]->_hLib)) + { + _pluginInfos[index]->_hLib = nullptr; + printStr(TEXT("we're good")); + } else printStr(TEXT("not ok")); + //delete _pluginInfos[index]; // printInt(index); //vector::iterator it = _pluginInfos.begin() + index; @@ -139,7 +143,7 @@ int PluginsManager::loadPlugin(const TCHAR *pluginFilePath, vector_moduleName = PathFindFileName(pluginFilePath); + pi->_moduleName = pluginFileName; if (GetBinaryArchitectureType(pluginFilePath) != ARCH_TYPE) throw generic_string(ARCH_ERR_MSG); @@ -267,7 +271,7 @@ int PluginsManager::loadPlugin(const TCHAR *pluginFilePath, vector(pDllName)); } - addInLoadedDlls(pluginFileName); + addInLoadedDlls(pluginFilePath, pluginFileName); _pluginInfos.push_back(pi); return static_cast(_pluginInfos.size() - 1); } @@ -625,7 +629,7 @@ generic_string PluginsManager::getLoadedPluginNames() const generic_string pluginPaths; for (size_t i = 0; i < _loadedDlls.size(); ++i) { - pluginPaths += _loadedDlls[i]; + pluginPaths += _loadedDlls[i]._fileName; pluginPaths += TEXT(" "); } return pluginPaths; diff --git a/PowerEditor/src/MISC/PluginsManager/PluginsManager.h b/PowerEditor/src/MISC/PluginsManager/PluginsManager.h index eb82b332..801be58d 100644 --- a/PowerEditor/src/MISC/PluginsManager/PluginsManager.h +++ b/PowerEditor/src/MISC/PluginsManager/PluginsManager.h @@ -26,24 +26,12 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#ifndef PLUGINSMANAGER_H -#define PLUGINSMANAGER_H +#pragma once -#ifndef RESOURCE_H #include "resource.h" -#endif //RESOURCE_H - -#ifndef PARAMETERS_H #include "Parameters.h" -#endif //PARAMETERS_H - -#ifndef PLUGININTERFACE_H #include "PluginInterface.h" -#endif //PLUGININTERFACE_H - -#ifndef IDALLOCATOR_H #include "IDAllocator.h" -#endif // IDALLOCATOR_H typedef BOOL (__cdecl * PFUNCISUNICODE)(); @@ -83,8 +71,17 @@ struct PluginInfo generic_string _funcName; }; +struct LoadedDllInfo +{ + generic_string _fullFilePath; + generic_string _fileName; + + LoadedDllInfo(const generic_string & fullFilePath, const generic_string & fileName) : _fullFilePath(fullFilePath), _fileName(fileName) {}; +}; + class PluginsManager { +friend class PluginsAdminDlg; public: PluginsManager() : _dynamicIDAlloc(ID_PLUGINS_CMD_DYNAMIC, ID_PLUGINS_CMD_DYNAMIC_LIMIT), _markerAlloc(MARKER_PLUGINS, MARKER_PLUGINS_LIMIT) {} @@ -135,7 +132,7 @@ private: std::vector _pluginInfos; std::vector _pluginsCommands; - std::vector _loadedDlls; + std::vector _loadedDlls; bool _isDisabled = false; IDAllocator _dynamicIDAlloc; IDAllocator _markerAlloc; @@ -151,13 +148,13 @@ private: bool isInLoadedDlls(const TCHAR *fn) const { for (size_t i = 0; i < _loadedDlls.size(); ++i) - if (generic_stricmp(fn, _loadedDlls[i].c_str()) == 0) + if (generic_stricmp(fn, _loadedDlls[i]._fileName.c_str()) == 0) return true; return false; } - void addInLoadedDlls(const TCHAR *fn) { - _loadedDlls.push_back(fn); + void addInLoadedDlls(const TCHAR *fullPath, const TCHAR *fn) { + _loadedDlls.push_back(LoadedDllInfo(fullPath, fn)); } }; @@ -167,5 +164,3 @@ private: typedef int (EXT_LEXER_DECL *GetLexerCountFn)(); typedef void (EXT_LEXER_DECL *GetLexerNameFn)(unsigned int Index, char *name, int buflength); typedef void (EXT_LEXER_DECL *GetLexerStatusTextFn)(unsigned int Index, TCHAR *desc, int buflength); - -#endif //PLUGINSMANAGER_H diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index bc7dca9d..e7778da2 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -265,6 +265,7 @@ LRESULT Notepad_plus::init(HWND hwnd) _configStyleDlg.init(_pPublicInterface->getHinst(), hwnd); _preference.init(_pPublicInterface->getHinst(), hwnd); + _pluginsAdminDlg.init(_pPublicInterface->getHinst(), hwnd); //Marker Margin config _mainEditView.setMakerStyle(svp1._folderStyle); diff --git a/PowerEditor/src/Notepad_plus.h b/PowerEditor/src/Notepad_plus.h index 6bd09d3b..2360bc49 100644 --- a/PowerEditor/src/Notepad_plus.h +++ b/PowerEditor/src/Notepad_plus.h @@ -25,107 +25,37 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#ifndef NOTEPAD_PLUS_H -#define NOTEPAD_PLUS_H +#pragma once -#ifndef SCINTILLA_EDIT_VIEW_H #include "ScintillaEditView.h" -#endif //SCINTILLA_EDIT_VIEW_H - -#ifndef DOCTABVIEW_H #include "DocTabView.h" -#endif //DOCTABVIEW_H - -#ifndef SPLITTER_CONTAINER_H #include "SplitterContainer.h" -#endif //SPLITTER_CONTAINER_H - -#ifndef FIND_REPLACE_DLG_H #include "FindReplaceDlg.h" -#endif //FIND_REPLACE_DLG_H - -#ifndef ABOUT_DLG_H #include "AboutDlg.h" -#endif //ABOUT_DLG_H - -#ifndef RUN_DLG_H #include "RunDlg.h" -#endif //RUN_DLG_H - -#ifndef STATUS_BAR_H #include "StatusBar.h" -#endif //STATUS_BAR_H - -#ifndef LASTRECENTFILELIST_H #include "lastRecentFileList.h" -#endif //LASTRECENTFILELIST_H - -#ifndef GOTILINE_DLG_H #include "GoToLineDlg.h" -#endif //GOTILINE_DLG_H - -#ifndef FINDCHARSINRANGE_DLG_H #include "FindCharsInRange.h" -#endif //FINDCHARSINRANGE_DLG_H - -#ifndef COLUMNEDITOR_H #include "columnEditor.h" -#endif //COLUMNEDITOR_H - -#ifndef WORD_STYLE_H #include "WordStyleDlg.h" -#endif //WORD_STYLE_H - -#ifndef TRAY_ICON_CONTROLER_H #include "trayIconControler.h" -#endif //TRAY_ICON_CONTROLER_H - -#ifndef PLUGINSMANAGER_H #include "PluginsManager.h" -#endif //PLUGINSMANAGER_H /* -#ifndef NOTEPAD_PLUS_MSGS_H #include "Notepad_plus_msgs.h" -#endif //NOTEPAD_PLUS_MSGS_H */ -#ifndef PREFERENCE_DLG_H #include "preferenceDlg.h" -#endif //PREFERENCE_DLG_H - -#ifndef WINDOWS_DLG_H #include "WindowsDlg.h" -#endif //WINDOWS_DLG_H - -#ifndef RUN_MACRO_DLG_H #include "RunMacroDlg.h" -#endif //RUN_MACRO_DLG_H - -#ifndef DOCKINGMANAGER_H #include "DockingManager.h" -#endif //DOCKINGMANAGER_H - -#ifndef PROCESSUS_H #include "Processus.h" -#endif //PROCESSUS_H - -#ifndef AUTOCOMPLETION_H #include "AutoCompletion.h" -#endif //AUTOCOMPLETION_H - -#ifndef SMARTHIGHLIGHTER_H #include "SmartHighlighter.h" -#endif //SMARTHIGHLIGHTER_H - -#ifndef SCINTILLACTRLS_H #include "ScintillaCtrls.h" -#endif //SCINTILLACTRLS_H - -#ifndef SIZE_DLG_H #include "lesDlgs.h" -#endif //SIZE_DLG_H - -#include "localization.h" -#include "md5Dlgs.h" +#include "pluginsAdmin.h" +#include "localization.h" +#include "md5Dlgs.h" #include #include @@ -354,6 +284,7 @@ private: WordStyleDlg _configStyleDlg; PreferenceDlg _preference; FindCharsInRangeDlg _findCharsInRangeDlg; + PluginsAdminDlg _pluginsAdminDlg; // a handle list of all the Notepad++ dialogs std::vector _hModelessDlgs; @@ -668,4 +599,3 @@ private: }; -#endif //NOTEPAD_PLUS_H diff --git a/PowerEditor/src/NppCommands.cpp b/PowerEditor/src/NppCommands.cpp index b3121719..498e714a 100644 --- a/PowerEditor/src/NppCommands.cpp +++ b/PowerEditor/src/NppCommands.cpp @@ -61,6 +61,8 @@ void Notepad_plus::macroPlayback(Macro macro) _playingBackMacro = false; } + + void Notepad_plus::command(int id) { switch (id) @@ -68,6 +70,18 @@ void Notepad_plus::command(int id) case IDM_FILE_NEW: { fileNew(); + /* + + bool isFirstTime = not _pluginsAdminDlg.isCreated(); + _pluginsAdminDlg.setPluginsManager(&_pluginsManager); + _pluginsAdminDlg.doDialog(_nativeLangSpeaker.isRTL()); + if (isFirstTime) + { + _nativeLangSpeaker.changeConfigLang(_pluginsAdminDlg.getHSelf()); + _pluginsAdminDlg.getPluginList(); + _pluginsAdminDlg.loadFomList(); + } + */ } break; diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp index 965df77e..9ac33ded 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp @@ -2516,7 +2516,6 @@ void FindInFinderDlg::doDialog(Finder *launcher, bool isRTL) } - void FindReplaceDlg::doDialog(DIALOG_TYPE whichType, bool isRTL, bool toShow) { if (!isCreated()) diff --git a/PowerEditor/src/WinControls/AnsiCharPanel/ListView.cpp b/PowerEditor/src/WinControls/AnsiCharPanel/ListView.cpp index 0eb82e37..5c779078 100644 --- a/PowerEditor/src/WinControls/AnsiCharPanel/ListView.cpp +++ b/PowerEditor/src/WinControls/AnsiCharPanel/ListView.cpp @@ -49,7 +49,7 @@ void ListView::init(HINSTANCE hInst, HWND parent) _hSelf = ::CreateWindow(WC_LISTVIEW, TEXT(""), - WS_CHILD | listViewStyles, + WS_CHILD | WS_BORDER | listViewStyles, 0, 0, 0, @@ -67,158 +67,68 @@ void ListView::init(HINSTANCE hInst, HWND parent) _defaultProc = reinterpret_cast(::SetWindowLongPtr(_hSelf, GWLP_WNDPROC, reinterpret_cast(staticProc))); DWORD exStyle = ListView_GetExtendedListViewStyle(_hSelf); - exStyle |= LVS_EX_FULLROWSELECT | LVS_EX_BORDERSELECT ; + exStyle |= LVS_EX_FULLROWSELECT | LVS_EX_BORDERSELECT | _extraStyle; ListView_SetExtendedListViewStyle(_hSelf, exStyle); - LVCOLUMN lvColumn; - lvColumn.mask = LVCF_TEXT|LVCF_WIDTH; - - NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance())->getNativeLangSpeaker(); - generic_string valStr = pNativeSpeaker->getAttrNameStr(TEXT("Value"), "AsciiInsertion", "ColumnVal"); - generic_string hexStr = pNativeSpeaker->getAttrNameStr(TEXT("Hex"), "AsciiInsertion", "ColumnHex"); - generic_string charStr = pNativeSpeaker->getAttrNameStr(TEXT("Character"), "AsciiInsertion", "ColumnChar"); - - lvColumn.cx = NppParameters::getInstance()->_dpiManager.scaleX(45); - lvColumn.pszText = const_cast(valStr.c_str()); - ListView_InsertColumn(_hSelf, 0, &lvColumn); - - lvColumn.cx = NppParameters::getInstance()->_dpiManager.scaleY(45);; - lvColumn.pszText = const_cast(hexStr.c_str()); - ListView_InsertColumn(_hSelf, 1, &lvColumn); - - lvColumn.cx = NppParameters::getInstance()->_dpiManager.scaleY(70);; - lvColumn.pszText = const_cast(charStr.c_str()); - ListView_InsertColumn(_hSelf, 2, &lvColumn); -} - -void ListView::resetValues(int codepage) -{ - if (codepage == -1) - codepage = 0; - - if (_codepage == codepage) - return; - - ListView_DeleteAllItems(_hSelf); - setValues(codepage); -} - -generic_string ListView::getAscii(unsigned char value) -{ - switch (value) + if (_columnInfos.size()) { - case 0: - return TEXT("NULL"); - case 1: - return TEXT("SOH"); - case 2: - return TEXT("STX"); - case 3: - return TEXT("ETX"); - case 4: - return TEXT("EOT"); - case 5: - return TEXT("ENQ"); - case 6: - return TEXT("ACK"); - case 7: - return TEXT("BEL"); - case 8: - return TEXT("BS"); - case 9: - return TEXT("TAB"); - case 10: - return TEXT("LF"); - case 11: - return TEXT("VT"); - case 12: - return TEXT("FF"); - case 13: - return TEXT("CR"); - case 14: - return TEXT("SO"); - case 15: - return TEXT("SI"); - case 16: - return TEXT("DLE"); - case 17: - return TEXT("DC1"); - case 18: - return TEXT("DC2"); - case 19: - return TEXT("DC3"); - case 20: - return TEXT("DC4"); - case 21: - return TEXT("NAK"); - case 22: - return TEXT("SYN"); - case 23: - return TEXT("ETB"); - case 24: - return TEXT("CAN"); - case 25: - return TEXT("EM"); - case 26: - return TEXT("SUB"); - case 27: - return TEXT("ESC"); - case 28: - return TEXT("FS"); - case 29: - return TEXT("GS"); - case 30: - return TEXT("RS"); - case 31: - return TEXT("US"); - case 32: - return TEXT("Space"); - case 127: - return TEXT("DEL"); - default: + LVCOLUMN lvColumn; + lvColumn.mask = LVCF_TEXT | LVCF_WIDTH; + + short i = 0; + for (auto it = _columnInfos.begin(); it != _columnInfos.end(); ++it) { - TCHAR charStr[10]; - char ascii[2]; - ascii[0] = value; - ascii[1] = '\0'; - MultiByteToWideChar(_codepage, 0, ascii, -1, charStr, sizeof(charStr)); - return charStr; + lvColumn.cx = static_cast(it->_width); + lvColumn.pszText = const_cast(it->_label.c_str()); + ListView_InsertColumn(_hSelf, ++i, &lvColumn); } - } } -void ListView::setValues(int codepage) -{ - _codepage = codepage; - - for (int i = 0 ; i < 256 ; ++i) - { - LVITEM item; - item.mask = LVIF_TEXT; - TCHAR dec[8]; - TCHAR hex[8]; - generic_sprintf(dec, TEXT("%d"), i); - generic_sprintf(hex, TEXT("%02X"), i); - item.pszText = dec; - item.iItem = i; - item.iSubItem = 0; - ListView_InsertItem(_hSelf, &item); - - ListView_SetItemText(_hSelf, i, 1, hex); - - generic_string s = getAscii(static_cast(i)); - ListView_SetItemText(_hSelf, i, 2, const_cast(s.c_str())); - } -} - - void ListView::destroy() { ::DestroyWindow(_hSelf); _hSelf = NULL; } +void ListView::addLine(const std::vector & values2Add, LPARAM lParam, int pos2insert) +{ + if (not values2Add.size()) + return; + + if (pos2insert == -1) + pos2insert = static_cast(nbItem()); + + auto it = values2Add.begin(); + + LVITEM item; + item.mask = LVIF_TEXT | LVIF_PARAM; + + item.pszText = const_cast(it->c_str()); + item.iItem = pos2insert; + item.iSubItem = 0; + item.lParam = lParam; + ListView_InsertItem(_hSelf, &item); + ++it; + + int j = 0; + for (; it != values2Add.end(); ++it) + { + ListView_SetItemText(_hSelf, pos2insert, ++j, const_cast(it->c_str())); + } +} + + + +LPARAM ListView::getLParamFromIndex(int itemIndex) const +{ + LVITEM item; + item.mask = LVIF_PARAM; + item.iItem = itemIndex; + ListView_GetItem(_hSelf, &item); + + return item.lParam; +} LRESULT ListView::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { diff --git a/PowerEditor/src/WinControls/AnsiCharPanel/ListView.h b/PowerEditor/src/WinControls/AnsiCharPanel/ListView.h index bd07e10e..ad701fce 100644 --- a/PowerEditor/src/WinControls/AnsiCharPanel/ListView.h +++ b/PowerEditor/src/WinControls/AnsiCharPanel/ListView.h @@ -26,29 +26,63 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#ifndef LISTVIEW_H -#define LISTVIEW_H +#pragma once #include "Window.h" #include "Common.h" +#include + +struct columnInfo { + size_t _width; + generic_string _label; + + columnInfo(const generic_string & label, size_t width) : _width(width), _label(label) {}; +}; + class ListView : public Window { public: ListView() : Window() {}; - virtual ~ListView() {}; + + // addColumn() should be called before init() + void addColumn(const columnInfo & column2Add) { + _columnInfos.push_back(column2Add); + }; + + // setStyleOption() should be called before init() + void setStyleOption(int32_t extraStyle) { + _extraStyle = extraStyle; + }; + + void addLine(const std::vector & values2Add, LPARAM lParam = 0, int pos2insert = -1); + + size_t nbItem() const { + return ListView_GetItemCount(_hSelf); + }; + + long getSelectedIndex() const { + return ListView_GetSelectionMark(_hSelf); + }; + + void setSelection(int itemIndex) const { + ListView_SetItemState(_hSelf, itemIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); + ListView_EnsureVisible(_hSelf, itemIndex, false); + ListView_SetSelectionMark(_hSelf, itemIndex); + }; + + LPARAM getLParamFromIndex(int itemIndex) const; + virtual void init(HINSTANCE hInst, HWND hwnd); virtual void destroy(); - void setValues(int codepage = 0); - void resetValues(int codepage); - - generic_string getAscii(unsigned char value); protected: - int _codepage = -1; - WNDPROC _defaultProc; + WNDPROC _defaultProc = nullptr; + int32_t _extraStyle = 0; + std::vector _columnInfos; + LRESULT runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK staticProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { @@ -56,5 +90,3 @@ protected: }; }; - -#endif // LISTVIEW_H diff --git a/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp b/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp index cc1c0d07..8f7106d7 100644 --- a/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp +++ b/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp @@ -28,6 +28,7 @@ #include "ansiCharPanel.h" #include "ScintillaEditView.h" +#include "localization.h" void AnsiCharPanel::switchEncoding() { @@ -41,6 +42,16 @@ INT_PTR CALLBACK AnsiCharPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM { case WM_INITDIALOG : { + NppParameters *nppParam = NppParameters::getInstance(); + NativeLangSpeaker *pNativeSpeaker = nppParam->getNativeLangSpeaker(); + generic_string valStr = pNativeSpeaker->getAttrNameStr(TEXT("Value"), "AsciiInsertion", "ColumnVal"); + generic_string hexStr = pNativeSpeaker->getAttrNameStr(TEXT("Hex"), "AsciiInsertion", "ColumnHex"); + generic_string charStr = pNativeSpeaker->getAttrNameStr(TEXT("Character"), "AsciiInsertion", "ColumnChar"); + + _listView.addColumn(columnInfo(valStr, nppParam->_dpiManager.scaleX(45))); + _listView.addColumn(columnInfo(hexStr, nppParam->_dpiManager.scaleX(45))); + _listView.addColumn(columnInfo(charStr, nppParam->_dpiManager.scaleX(70))); + _listView.init(_hInst, _hSelf); int codepage = (*_ppEditView)->getCurrentBuffer()->getEncoding(); _listView.setValues(codepage==-1?0:codepage); @@ -71,7 +82,7 @@ INT_PTR CALLBACK AnsiCharPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM { case VK_RETURN: { - int i = ListView_GetSelectionMark(_listView.getHSelf()); + int i = _listView.getSelectedIndex(); if (i == -1) return TRUE; diff --git a/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.h b/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.h index bbb043f6..39ded199 100644 --- a/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.h +++ b/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.h @@ -26,18 +26,15 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#ifndef ANSICHARPANEL_H -#define ANSICHARPANEL_H +#pragma once #include #include -#ifndef DOCKINGDLGINTERFACE_H #include "DockingDlgInterface.h" -#endif //DOCKINGDLGINTERFACE_H - #include "ansiCharPanel_rc.h" #include "ListView.h" +#include "asciiListView.h" #define AI_PROJECTPANELTITLE TEXT("ASCII Insertion Panel") @@ -78,6 +75,6 @@ protected: private: ScintillaEditView **_ppEditView = nullptr; - ListView _listView; + AsciiListView _listView; }; -#endif // ANSICHARPANEL_H + diff --git a/PowerEditor/src/WinControls/AnsiCharPanel/asciiListView.cpp b/PowerEditor/src/WinControls/AnsiCharPanel/asciiListView.cpp new file mode 100644 index 00000000..e94cddd7 --- /dev/null +++ b/PowerEditor/src/WinControls/AnsiCharPanel/asciiListView.cpp @@ -0,0 +1,149 @@ +// This file is part of Notepad++ project +// Copyright (C)2016 Don HO +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// Note that the GPL places important restrictions on "derived works", yet +// it does not provide a detailed definition of that term. To avoid +// misunderstandings, we consider an application to constitute a +// "derivative work" for the purpose of this license if it does any of the +// following: +// 1. Integrates source code from Notepad++. +// 2. Integrates/includes/aggregates Notepad++ into a proprietary executable +// installer, such as those produced by InstallShield. +// 3. Links to a library or executes a program that does any of the above. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +#include "asciiListView.h" +#include "Parameters.h" + +void AsciiListView::resetValues(int codepage) +{ + if (codepage == -1) + codepage = 0; + + if (_codepage == codepage) + return; + + ListView_DeleteAllItems(_hSelf); + setValues(codepage); +} + +generic_string AsciiListView::getAscii(unsigned char value) +{ + switch (value) + { + case 0: + return TEXT("NULL"); + case 1: + return TEXT("SOH"); + case 2: + return TEXT("STX"); + case 3: + return TEXT("ETX"); + case 4: + return TEXT("EOT"); + case 5: + return TEXT("ENQ"); + case 6: + return TEXT("ACK"); + case 7: + return TEXT("BEL"); + case 8: + return TEXT("BS"); + case 9: + return TEXT("TAB"); + case 10: + return TEXT("LF"); + case 11: + return TEXT("VT"); + case 12: + return TEXT("FF"); + case 13: + return TEXT("CR"); + case 14: + return TEXT("SO"); + case 15: + return TEXT("SI"); + case 16: + return TEXT("DLE"); + case 17: + return TEXT("DC1"); + case 18: + return TEXT("DC2"); + case 19: + return TEXT("DC3"); + case 20: + return TEXT("DC4"); + case 21: + return TEXT("NAK"); + case 22: + return TEXT("SYN"); + case 23: + return TEXT("ETB"); + case 24: + return TEXT("CAN"); + case 25: + return TEXT("EM"); + case 26: + return TEXT("SUB"); + case 27: + return TEXT("ESC"); + case 28: + return TEXT("FS"); + case 29: + return TEXT("GS"); + case 30: + return TEXT("RS"); + case 31: + return TEXT("US"); + case 32: + return TEXT("Space"); + case 127: + return TEXT("DEL"); + default: + { + TCHAR charStr[10]; + char ascii[2]; + ascii[0] = value; + ascii[1] = '\0'; + MultiByteToWideChar(_codepage, 0, ascii, -1, charStr, sizeof(charStr)); + return charStr; + } + + } +} + +void AsciiListView::setValues(int codepage) +{ + _codepage = codepage; + + for (int i = 0 ; i < 256 ; ++i) + { + TCHAR dec[8]; + TCHAR hex[8]; + generic_sprintf(dec, TEXT("%d"), i); + generic_sprintf(hex, TEXT("%02X"), i); + generic_string s = getAscii(static_cast(i)); + + std::vector values2Add; + + values2Add.push_back(dec); + values2Add.push_back(hex); + values2Add.push_back(s); + + addLine(values2Add); + } +} diff --git a/PowerEditor/src/WinControls/AnsiCharPanel/asciiListView.h b/PowerEditor/src/WinControls/AnsiCharPanel/asciiListView.h new file mode 100644 index 00000000..e38f2c18 --- /dev/null +++ b/PowerEditor/src/WinControls/AnsiCharPanel/asciiListView.h @@ -0,0 +1,42 @@ +// This file is part of Notepad++ project +// Copyright (C)2016 Don HO +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// Note that the GPL places important restrictions on "derived works", yet +// it does not provide a detailed definition of that term. To avoid +// misunderstandings, we consider an application to constitute a +// "derivative work" for the purpose of this license if it does any of the +// following: +// 1. Integrates source code from Notepad++. +// 2. Integrates/includes/aggregates Notepad++ into a proprietary executable +// installer, such as those produced by InstallShield. +// 3. Links to a library or executes a program that does any of the above. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +#pragma once + +#include "ListView.h" + +class AsciiListView : public ListView +{ +public: + void setValues(int codepage = 0); + void resetValues(int codepage); + + generic_string getAscii(unsigned char value); +private: + int _codepage = -1; +}; + diff --git a/PowerEditor/src/WinControls/ColourPicker/ColourPicker.h b/PowerEditor/src/WinControls/ColourPicker/ColourPicker.h index a99b1622..f47e5710 100644 --- a/PowerEditor/src/WinControls/ColourPicker/ColourPicker.h +++ b/PowerEditor/src/WinControls/ColourPicker/ColourPicker.h @@ -26,8 +26,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#ifndef COLOUR_PICKER_H -#define COLOUR_PICKER_H +#pragma once #include "Window.h" @@ -64,4 +63,3 @@ private : void drawBackground(HDC hDC); }; -#endif // COLOUR_PICKER_H diff --git a/PowerEditor/src/WinControls/ColourPicker/ColourPopup.h b/PowerEditor/src/WinControls/ColourPicker/ColourPopup.h index 07405d8b..c62800b4 100644 --- a/PowerEditor/src/WinControls/ColourPicker/ColourPopup.h +++ b/PowerEditor/src/WinControls/ColourPicker/ColourPopup.h @@ -24,6 +24,8 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + #pragma once #include "ColourPopupResource.h" #include "resource.h" @@ -33,7 +35,6 @@ #define WM_PICKUP_CANCEL (COLOURPOPUP_USER + 2) - class ColourPopup : public Window { public : diff --git a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.h b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.h index f9aa379c..f9eb7463 100644 --- a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.h +++ b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.h @@ -26,8 +26,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#ifndef WORD_STYLE_H -#define WORD_STYLE_H +#pragma once #include "ColourPicker.h" #include "WordStyleDlgRes.h" @@ -238,5 +237,3 @@ private : _isShownGOCtrls = show; }; }; - -#endif //WORD_STYLE_H diff --git a/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.cpp b/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.cpp new file mode 100644 index 00000000..5265630b --- /dev/null +++ b/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.cpp @@ -0,0 +1,618 @@ +// This file is part of Notepad++ project +// Copyright (C)2017 Don HO +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// Note that the GPL places important restrictions on "derived works", yet +// it does not provide a detailed definition of that term. To avoid +// misunderstandings, we consider an application to constitute a +// "derivative work" for the purpose of this license if it does any of the +// following: +// 1. Integrates source code from Notepad++. +// 2. Integrates/includes/aggregates Notepad++ into a proprietary executable +// installer, such as those produced by InstallShield. +// 3. Links to a library or executes a program that does any of the above. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +#include +#include +#include +#include +#include +#include +#include "pluginsAdmin.h" +#include "ScintillaEditView.h" +#include "localization.h" +#include "PluginsManager.h" +#include "md5.h" + +using namespace std; + +void Version::setVersionFrom(generic_string filePath) +{ + if (not filePath.empty() && ::PathFileExists(filePath.c_str())) + { + DWORD handle; + DWORD bufferSize = ::GetFileVersionInfoSize(filePath.c_str(), &handle); + + if (bufferSize <= 0) + return; + + unsigned char* buffer = new unsigned char[bufferSize]; + ::GetFileVersionInfo(filePath.c_str(), handle, bufferSize, buffer); + + VS_FIXEDFILEINFO* lpFileInfo; + UINT cbFileInfo = 0; + VerQueryValue(buffer, TEXT("\\"), (LPVOID*)&lpFileInfo, &cbFileInfo); + if (cbFileInfo) + { + _major = (lpFileInfo->dwFileVersionMS & 0xFFFF0000) >> 16; + _minor = lpFileInfo->dwFileVersionMS & 0x0000FFFF; + _patch = (lpFileInfo->dwFileVersionLS & 0xFFFF0000) >> 16; + _build = lpFileInfo->dwFileVersionLS & 0x0000FFFF; + } + } +} + +generic_string Version::toString() +{ + std::wstring v = std::to_wstring(_major); + v += TEXT("."); + v += std::to_wstring(_minor); + v += TEXT("."); + v += std::to_wstring(_patch); + v += TEXT("."); + v += std::to_wstring(_build); + return v; +} + +generic_string PluginUpdateInfo::describe() +{ + generic_string desc; + const TCHAR *EOL = TEXT("\r\n"); + if (not description.empty()) + { + desc = description; + desc += EOL; + } + + if (not author.empty()) + { + desc += TEXT("Author: "); + desc += author; + desc += EOL; + } + + if (not homepage.empty()) + { + desc += TEXT("Homepage: "); + desc += homepage; + desc += EOL; + } + + return desc; +} + +/// Try to find in the Haystack the Needle - ignore case +bool findStrNoCase(const generic_string & strHaystack, const generic_string & strNeedle) +{ + auto it = std::search( + strHaystack.begin(), strHaystack.end(), + strNeedle.begin(), strNeedle.end(), + [](char ch1, char ch2){return std::toupper(ch1) == std::toupper(ch2); } + ); + return (it != strHaystack.end()); +} + +LoadedPluginInfo::LoadedPluginInfo(const generic_string & fullFilePath, const generic_string & filename) +{ + if (not::PathFileExists(fullFilePath.c_str())) + return; + + _fullFilePath = fullFilePath; + _name = filename; + + WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance(); + const char *path = wmc->wchar2char(fullFilePath.c_str(), CP_ACP); + MD5 md5; + _id = wmc->char2wchar(md5.digestFile(path), CP_ACP); + + _version.setVersionFrom(fullFilePath); +} + +long PluginsAdminDlg::searchFromCurrentSel(generic_string str2search, bool inWhichPart, bool isNextMode) const +{ + // search from curent selected item or from the beginning + long currentIndex = _availableListView.getSelectedIndex(); + int nbItem = static_cast(_availableListView.nbItem()); + if (currentIndex == -1) + { + // no selection, let's search from 0 to the end + for (int i = 0; i < nbItem; ++i) + { + size_t j = _availableListView.getLParamFromIndex(i); + generic_string searchIn; + if (inWhichPart == inNames) + searchIn = _availablePluginList[j].name; + else //(inWhichPart == inDescs) + searchIn = _availablePluginList[j].description; + + if (findStrNoCase(searchIn, str2search)) + return i; + } + } + else + { + // with selection, let's search from currentIndex + + // from current position to the end + for (int i = currentIndex + (isNextMode ? 1 : 0); i < nbItem; ++i) + { + size_t j = _availableListView.getLParamFromIndex(i); + generic_string searchIn; + if (inWhichPart == inNames) + searchIn = _availablePluginList[j].name; + else //(inWhichPart == inDescs) + searchIn = _availablePluginList[j].description; + + if (findStrNoCase(searchIn, str2search)) + return i; + } + + // from to begining to current position + for (int i = 0; i < currentIndex + (isNextMode ? 1 : 0); ++i) + { + size_t j = _availableListView.getLParamFromIndex(i); + generic_string searchIn; + if (inWhichPart == inNames) + searchIn = _availablePluginList[j].name; + else //(inWhichPart == inDescs) + searchIn = _availablePluginList[j].description; + + if (findStrNoCase(searchIn, str2search)) + return i; + } + } + return -1; +} + +/* +// Search only in the list of current panel +// return -1 if not found +long PluginsAdminDlg::searchPlugin(generic_string str2search, bool isNextMode) +{ + // search in the names of plugins + long i = searchInNamesFromCurrentSel(str2search, isNextMode); + + // if not found, search in description + if (i == -1) + i = searchInDescsFromCurrentSel(str2search, isNextMode); + + return i; +} +*/ + +void PluginsAdminDlg::create(int dialogID, bool isRTL) +{ + StaticDialog::create(dialogID, isRTL); + + RECT rect; + getClientRect(rect); + _tab.init(_hInst, _hSelf, false, false, true); + int tabDpiDynamicalHeight = NppParameters::getInstance()->_dpiManager.scaleY(13); + _tab.setFont(TEXT("Tahoma"), tabDpiDynamicalHeight); + + const TCHAR *available = TEXT("Available"); + const TCHAR *updates = TEXT("Updates"); + const TCHAR *installed = TEXT("Installed"); + + _tab.insertAtEnd(available); + _tab.insertAtEnd(updates); + _tab.insertAtEnd(installed); + + rect.bottom -= 100;; + _tab.reSizeTo(rect); + _tab.display(); + + const long marge = 10; + + const int topMarge = 42; + + HWND hResearchLabel = ::GetDlgItem(_hSelf, IDC_PLUGINADM_RESEARCH_STATIC); + RECT researchLabelRect; + ::GetClientRect(hResearchLabel, &researchLabelRect); + researchLabelRect.left = rect.left; + researchLabelRect.top = topMarge + 2; + ::MoveWindow(hResearchLabel, researchLabelRect.left, researchLabelRect.top, researchLabelRect.right, researchLabelRect.bottom, TRUE); + ::InvalidateRect(hResearchLabel, nullptr, TRUE); + + HWND hResearchEdit = ::GetDlgItem(_hSelf, IDC_PLUGINADM_RESEARCH_EDIT); + RECT researchEditRect; + ::GetClientRect(hResearchEdit, &researchEditRect); + researchEditRect.left = researchLabelRect.right + marge; + researchEditRect.top = topMarge; + ::MoveWindow(hResearchEdit, researchEditRect.left, researchEditRect.top, researchEditRect.right, researchEditRect.bottom, TRUE); + ::InvalidateRect(hResearchEdit, nullptr, TRUE); + + HWND hNextButton = ::GetDlgItem(_hSelf, IDC_PLUGINADM_RESEARCH_NEXT); + RECT researchNextRect; + ::GetClientRect(hNextButton, &researchNextRect); + researchNextRect.left = researchEditRect.left + researchEditRect.right + marge; + researchNextRect.top = topMarge; + ::MoveWindow(hNextButton, researchNextRect.left, researchNextRect.top, researchNextRect.right, researchNextRect.bottom, TRUE); + ::InvalidateRect(hNextButton, nullptr, TRUE); + + HWND hActionButton = ::GetDlgItem(_hSelf, IDC_PLUGINADM_INSTALL); + RECT actionRect; + ::GetClientRect(hActionButton, &actionRect); + long w = actionRect.right - actionRect.left; + actionRect.left = rect.right - w - marge; + actionRect.top = topMarge; + ::MoveWindow(hActionButton, actionRect.left, actionRect.top, actionRect.right, actionRect.bottom, TRUE); + ::InvalidateRect(hActionButton, nullptr, TRUE); + + hActionButton = ::GetDlgItem(_hSelf, IDC_PLUGINADM_UPDATE); + ::MoveWindow(hActionButton, actionRect.left, actionRect.top, actionRect.right, actionRect.bottom, TRUE); + ::InvalidateRect(hActionButton, nullptr, TRUE); + + hActionButton = ::GetDlgItem(_hSelf, IDC_PLUGINADM_REMOVE); + ::MoveWindow(hActionButton, actionRect.left, actionRect.top, actionRect.right, actionRect.bottom, TRUE); + ::InvalidateRect(hActionButton, nullptr, TRUE); + + long actionZoneHeight = 50; + rect.top += actionZoneHeight; + rect.bottom -= actionZoneHeight; + + RECT listRect = rect; + RECT descRect = rect; + + long descHeight = rect.bottom / 3 - marge * 2; + long listHeight = (rect.bottom / 3) * 2 - marge * 3; + + listRect.top += marge; + listRect.bottom = listHeight; + listRect.left += marge; + listRect.right -= marge * 2; + + descRect.top += listHeight + marge * 3; + descRect.bottom = descHeight; + descRect.left += marge; + descRect.right -= marge * 2; + + NppParameters *nppParam = NppParameters::getInstance(); + NativeLangSpeaker *pNativeSpeaker = nppParam->getNativeLangSpeaker(); + generic_string pluginStr = pNativeSpeaker->getAttrNameStr(TEXT("Plugin"), "PluginAdmin", "Plugin"); + generic_string vesionStr = pNativeSpeaker->getAttrNameStr(TEXT("Version"), "PluginAdmin", "Version"); + generic_string stabilityStr = pNativeSpeaker->getAttrNameStr(TEXT("Stability"), "PluginAdmin", "Stability"); + + _availableListView.addColumn(columnInfo(pluginStr, nppParam->_dpiManager.scaleX(200))); + _availableListView.addColumn(columnInfo(vesionStr, nppParam->_dpiManager.scaleX(100))); + _availableListView.addColumn(columnInfo(stabilityStr, nppParam->_dpiManager.scaleX(70))); + _availableListView.setStyleOption(LVS_EX_CHECKBOXES); + + _availableListView.init(_hInst, _hSelf); + _availableListView.reSizeTo(listRect); + //_availableListView.display(); + + _updateListView.addColumn(columnInfo(pluginStr, nppParam->_dpiManager.scaleX(200))); + _updateListView.addColumn(columnInfo(vesionStr, nppParam->_dpiManager.scaleX(100))); + _updateListView.addColumn(columnInfo(stabilityStr, nppParam->_dpiManager.scaleX(70))); + _updateListView.setStyleOption(LVS_EX_CHECKBOXES); + + _updateListView.init(_hInst, _hSelf); + _updateListView.reSizeTo(listRect); + //_updateListView.display(false); + + _installedListView.addColumn(columnInfo(pluginStr, nppParam->_dpiManager.scaleX(200))); + _installedListView.addColumn(columnInfo(vesionStr, nppParam->_dpiManager.scaleX(100))); + _installedListView.addColumn(columnInfo(stabilityStr, nppParam->_dpiManager.scaleX(70))); + _installedListView.setStyleOption(LVS_EX_CHECKBOXES); + + _installedListView.init(_hInst, _hSelf); + _installedListView.reSizeTo(listRect); + //_installedListView.display(false); + + HWND hDesc = ::GetDlgItem(_hSelf, IDC_PLUGINADM_EDIT); + ::MoveWindow(hDesc, descRect.left, descRect.top, descRect.right, descRect.bottom, TRUE); + ::InvalidateRect(hDesc, nullptr, TRUE); + + switchDialog(0); + + ETDTProc enableDlgTheme = (ETDTProc)::SendMessage(_hParent, NPPM_GETENABLETHEMETEXTUREFUNC, 0, 0); + if (enableDlgTheme) + enableDlgTheme(_hSelf, ETDT_ENABLETAB); + + goToCenter(); + +} + +bool PluginsAdminDlg::getPluginList() +{ + generic_string pluginListXmlPath(TEXT("c:\\tmp\\pl.xml")); + _pPluginsXmlDoc = new TiXmlDocument(pluginListXmlPath); + if (not _pPluginsXmlDoc->LoadFile()) + return false; + + return true; +} + +bool PluginsAdminDlg::readFromXml() +{ + TiXmlNode *root = _pPluginsXmlDoc->FirstChild(TEXT("NotepadPlus")); + if (not root) + return false; + + _availablePluginList.clear(); + + for (TiXmlNode *childNode = root->FirstChildElement(TEXT("plugin")); + childNode; + childNode = childNode->NextSibling(TEXT("plugin"))) + { + PluginUpdateInfo pui; + const TCHAR *name = (childNode->ToElement())->Attribute(TEXT("name")); + if (name) + { + pui.name = name; + } + else + { + continue; + } + + const TCHAR *version = (childNode->ToElement())->Attribute(TEXT("version")); + if (version) + { + pui.version = version; + } + else + { + continue; + } + const TCHAR *homepage = (childNode->ToElement())->Attribute(TEXT("homepage")); + if (homepage) + { + pui.homepage = homepage; + } + const TCHAR *sourceUrl = (childNode->ToElement())->Attribute(TEXT("sourceUrl")); + if (sourceUrl) + { + pui.sourceUrl = sourceUrl; + } + const TCHAR *description = (childNode->ToElement())->Attribute(TEXT("description")); + if (description) + { + pui.description = description; + } + const TCHAR *author = (childNode->ToElement())->Attribute(TEXT("author")); + if (author) + { + pui.author = author; + } + else + { + continue; + } + const TCHAR *md5 = (childNode->ToElement())->Attribute(TEXT("md5")); + if (md5) + { + pui.md5 = md5; + } + else + { + continue; + } + const TCHAR *alias = (childNode->ToElement())->Attribute(TEXT("alias")); + if (alias) + { + pui.alias = alias; + } + const TCHAR *download = (childNode->ToElement())->Attribute(TEXT("download")); + if (download) + { + pui.download = download; + } + else + { + continue; + } + + _availablePluginList.push_back(pui); + } + return true; +} + +bool PluginsAdminDlg::loadFomList() +{ + if (not _pPluginsXmlDoc) + return false; + + if (not readFromXml()) + return false; + + + size_t i = 0; + // all - installed = available + for (auto it = _availablePluginList.begin(); it != _availablePluginList.end(); ++it) + { + vector values2Add; + + values2Add.push_back(it->name); + values2Add.push_back(it->version); + values2Add.push_back(TEXT("Yes")); + + _availableListView.addLine(values2Add, i++); + } + + getLoadedPluginInfos(); + + return true; +} + +bool PluginsAdminDlg::getLoadedPluginInfos() +{ + if (not _pPluginsManager) + return false; + + for (auto it = _pPluginsManager->_loadedDlls.begin(); it != _pPluginsManager->_loadedDlls.end(); ++it) + { + LoadedPluginInfo lpi(it->_fullFilePath, it->_fileName); + _loadedPluginInfos.push_back(lpi); + } + + return true; +} + +// begin insentive-case search from the second key-in character +bool PluginsAdminDlg::searchInPlugins(bool isNextMode) const +{ + const int maxLen = 256; + TCHAR txt2search[maxLen]; + ::GetDlgItemText(_hSelf, IDC_PLUGINADM_RESEARCH_EDIT, txt2search, maxLen); + if (lstrlen(txt2search) < 2) + return false; + + long foundIndex = searchInNamesFromCurrentSel(txt2search, isNextMode); + if (foundIndex == -1) + foundIndex = searchInDescsFromCurrentSel(txt2search, isNextMode); + + if (foundIndex == -1) + return false; + + _availableListView.setSelection(foundIndex); + + return true; +} + +void PluginsAdminDlg::switchDialog(int indexToSwitch) +{ + bool showAvailable, showUpdate, showInstalled; + switch (indexToSwitch) + { + case 0: // available plugins + showAvailable = true; + showUpdate = false; + showInstalled = false; + break; + + case 1: // to be updated plugins + showAvailable = false; + showUpdate = true; + showInstalled = false; + break; + + case 2: // installed plugin + showAvailable = false; + showUpdate = false; + showInstalled = true; + break; + + default: + return; + } + + HWND hInstallButton = ::GetDlgItem(_hSelf, IDC_PLUGINADM_INSTALL); + HWND hUpdateButton = ::GetDlgItem(_hSelf, IDC_PLUGINADM_UPDATE); + HWND hRemoveButton = ::GetDlgItem(_hSelf, IDC_PLUGINADM_REMOVE); + + ::ShowWindow(hInstallButton, showAvailable ? SW_SHOW : SW_HIDE); + ::EnableWindow(hInstallButton, showAvailable); + + ::ShowWindow(hUpdateButton, showUpdate ? SW_SHOW : SW_HIDE); + ::EnableWindow(hUpdateButton, showUpdate); + + ::ShowWindow(hRemoveButton, showInstalled ? SW_SHOW : SW_HIDE); + ::EnableWindow(hRemoveButton, showInstalled); + + _availableListView.display(showAvailable); + _updateListView.display(showUpdate); + _installedListView.display(showInstalled); +} + +INT_PTR CALLBACK PluginsAdminDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG : + { + + return TRUE; + } + + case WM_COMMAND : + { + if (HIWORD(wParam) == EN_CHANGE) + { + switch (LOWORD(wParam)) + { + case IDC_PLUGINADM_RESEARCH_EDIT: + { + searchInPlugins(false); + return TRUE; + } + } + } + + switch (wParam) + { + case IDCANCEL : + case IDOK : + display(false); + return TRUE; + + case IDC_PLUGINADM_RESEARCH_NEXT: + searchInPlugins(true); + return true; + default : + break; + } + return FALSE; + } + + case WM_NOTIFY : + { + LPNMHDR pnmh = reinterpret_cast(lParam); + if (pnmh->code == TCN_SELCHANGE) + { + HWND tabHandle = _tab.getHSelf(); + if (pnmh->hwndFrom == tabHandle) + { + int indexClicked = int(::SendMessage(tabHandle, TCM_GETCURSEL, 0, 0)); + switchDialog(indexClicked); + } + } + else if (pnmh->hwndFrom == _availableListView.getHSelf() && pnmh->code == LVN_ITEMCHANGED) + { + LPNMLISTVIEW pnmv = (LPNMLISTVIEW)lParam; + if (pnmv->uChanged & LVIF_STATE) + { + if (pnmv->uNewState & LVIS_SELECTED) + { + size_t infoIndex = _availableListView.getLParamFromIndex(pnmv->iItem); + generic_string desc = _availablePluginList[infoIndex].describe(); + ::SetDlgItemText(_hSelf, IDC_PLUGINADM_EDIT, desc.c_str()); + } + } + } + + return TRUE; + } + + case WM_DESTROY : + { + return TRUE; + } + } + return FALSE; +} + diff --git a/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.h b/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.h new file mode 100644 index 00000000..3fd4f838 --- /dev/null +++ b/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.h @@ -0,0 +1,143 @@ +// This file is part of Notepad++ project +// Copyright (C)2017 Don HO +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// Note that the GPL places important restrictions on "derived works", yet +// it does not provide a detailed definition of that term. To avoid +// misunderstandings, we consider an application to constitute a +// "derivative work" for the purpose of this license if it does any of the +// following: +// 1. Integrates source code from Notepad++. +// 2. Integrates/includes/aggregates Notepad++ into a proprietary executable +// installer, such as those produced by InstallShield. +// 3. Links to a library or executes a program that does any of the above. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +#pragma once + +#include "StaticDialog.h" +#include "pluginsAdminRes.h" +#include "TabBar.h" +#include "ListView.h" +#include "tinyxml.h" + +class PluginsManager; + +struct PluginUpdateInfo +{ + generic_string name; + generic_string version; + generic_string homepage; + generic_string sourceUrl; + generic_string description; + generic_string author; + generic_string md5; + generic_string alias; + generic_string download; + + generic_string describe(); +}; + +struct Version +{ + unsigned long _major = 0; + unsigned long _minor = 0; + unsigned long _patch = 0; + unsigned long _build = 0; + void setVersionFrom(generic_string filePath); + generic_string toString(); +}; + +struct LoadedPluginInfo +{ + generic_string _fullFilePath; + + generic_string _id; + generic_string _name; // found from id/hash (or product name - retrieved from binary) or file name + Version _version; + + LoadedPluginInfo(const generic_string & fullFilePath, const generic_string & filename); +}; + +class PluginsAdminDlg final : public StaticDialog +{ +public : + PluginsAdminDlg() {}; + ~PluginsAdminDlg() { + _availableListView.destroy(); + _updateListView.destroy(); + _installedListView.destroy(); + if (_pPluginsXmlDoc) delete _pPluginsXmlDoc; + } + void init(HINSTANCE hInst, HWND parent) { + Window::init(hInst, parent); + }; + + virtual void create(int dialogID, bool isRTL = false); + + void doDialog(bool isRTL = false) { + if (!isCreated()) + { + create(IDD_PLUGINSADMIN_DLG, isRTL); + } + + if (!::IsWindowVisible(_hSelf)) + { + + } + display(); + }; + + void switchDialog(int indexToSwitch); + + bool getPluginList(); // call WinGup fo the 1st time + bool loadFomList(); + void setPluginsManager(PluginsManager *pluginsManager) { _pPluginsManager = pluginsManager; }; + + //long searchPlugin(generic_string str2search, bool isNextMode); + +protected: + virtual INT_PTR CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam); + +private : + TabBar _tab; + + ListView _availableListView; + ListView _updateListView; + ListView _installedListView; + std::vector _availablePluginList; + std::vector _updatePluginList; + std::vector _installedPluginList; + + TiXmlDocument *_pPluginsXmlDoc = nullptr; + PluginsManager *_pPluginsManager = nullptr; + + std::vector _loadedPluginInfos; + + bool readFromXml(); + bool searchInPlugins(bool isNextMode) const; + const bool inNames = true; + const bool inDescs = false; + long searchFromCurrentSel(generic_string str2search, bool inWhichPart, bool isNextMode) const; + long searchInNamesFromCurrentSel(generic_string str2search, bool isNextMode) const { + return searchFromCurrentSel(str2search, inNames, isNextMode); + }; + long searchInDescsFromCurrentSel(generic_string str2search, bool isNextMode) const { + return searchFromCurrentSel(str2search, inDescs, isNextMode); + }; + bool getLoadedPluginInfos(); +}; + diff --git a/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.rc b/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.rc new file mode 100644 index 00000000..cca10032 --- /dev/null +++ b/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.rc @@ -0,0 +1,53 @@ +// This file is part of Notepad++ project +// Copyright (C)2003 Don HO +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// Note that the GPL places important restrictions on "derived works", yet +// it does not provide a detailed definition of that term. To avoid +// misunderstandings, we consider an application to constitute a +// "derivative work" for the purpose of this license if it does any of the +// following: +// 1. Integrates source code from Notepad++. +// 2. Integrates/includes/aggregates Notepad++ into a proprietary executable +// installer, such as those produced by InstallShield. +// 3. Links to a library or executes a program that does any of the above. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +#include "windows.h" +#include "pluginsAdminRes.h" + +#ifndef IDC_STATIC +#define IDC_STATIC -1 +#endif + +IDD_PLUGINSADMIN_DLG DIALOGEX 36, 44, 500, 300 +STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Plugins Manager" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + RTEXT "Research: ",IDC_PLUGINADM_RESEARCH_STATIC,50,38,50,8 + EDITTEXT IDC_PLUGINADM_RESEARCH_EDIT,160,35,150,14,ES_AUTOHSCROLL + PUSHBUTTON "Next", IDC_PLUGINADM_RESEARCH_NEXT,332,35,57,14 + PUSHBUTTON "Install", IDC_PLUGINADM_INSTALL,432,35,57,14 + PUSHBUTTON "Update", IDC_PLUGINADM_UPDATE,432,35,57,14 + PUSHBUTTON "Remove", IDC_PLUGINADM_REMOVE,432,35,57,14 + //LISTBOX IDC_PLUGINADM_LISTVIEW,30,20,78,120,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_PLUGINADM_EDIT,30,160,220,80,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_BORDER | WS_VSCROLL + PUSHBUTTON "Close", IDCANCEL,332,270,57,14 + PUSHBUTTON "Settings",IDC_PLUGINADM_SETTINGS_BUTTON,255,270,69,14 +END + diff --git a/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdminRes.h b/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdminRes.h new file mode 100644 index 00000000..f371d737 --- /dev/null +++ b/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdminRes.h @@ -0,0 +1,40 @@ +// This file is part of Notepad++ project +// Copyright (C)2003 Don HO +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// Note that the GPL places important restrictions on "derived works", yet +// it does not provide a detailed definition of that term. To avoid +// misunderstandings, we consider an application to constitute a +// "derivative work" for the purpose of this license if it does any of the +// following: +// 1. Integrates source code from Notepad++. +// 2. Integrates/includes/aggregates Notepad++ into a proprietary executable +// installer, such as those produced by InstallShield. +// 3. Links to a library or executes a program that does any of the above. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + + +#define IDD_PLUGINSADMIN_DLG 5500 + #define IDC_PLUGINADM_RESEARCH_STATIC (IDD_PLUGINSADMIN_DLG + 1) + #define IDC_PLUGINADM_RESEARCH_EDIT (IDD_PLUGINSADMIN_DLG + 2) + #define IDC_PLUGINADM_INSTALL (IDD_PLUGINSADMIN_DLG + 3) + #define IDC_PLUGINADM_UPDATE (IDD_PLUGINSADMIN_DLG + 4) + #define IDC_PLUGINADM_REMOVE (IDD_PLUGINSADMIN_DLG + 5) + #define IDC_PLUGINADM_LISTVIEW (IDD_PLUGINSADMIN_DLG + 6) + #define IDC_PLUGINADM_EDIT (IDD_PLUGINSADMIN_DLG + 7) + #define IDC_PLUGINADM_RESEARCH_NEXT (IDD_PLUGINSADMIN_DLG + 8) + #define IDC_PLUGINADM_SETTINGS_BUTTON (IDD_PLUGINSADMIN_DLG + 9) + diff --git a/PowerEditor/src/WinControls/Window.h b/PowerEditor/src/WinControls/Window.h index dbc105f7..e69e02f8 100644 --- a/PowerEditor/src/WinControls/Window.h +++ b/PowerEditor/src/WinControls/Window.h @@ -24,12 +24,11 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + #pragma once #include - - - class Window { public: diff --git a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp index ea184d06..140f1d44 100644 --- a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp +++ b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp @@ -274,12 +274,11 @@ INT_PTR CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lPa { if (wParam == IDC_WINDOWS_LIST) { - NMHDR* pNMHDR = (NMHDR*)lParam; + NMHDR* pNMHDR = reinterpret_cast(lParam); if (pNMHDR->code == LVN_GETDISPINFO) { NMLVDISPINFO *pLvdi = (NMLVDISPINFO *)pNMHDR; - //if(pLvdi->item.mask & LVIF_IMAGE) - // ; + if(pLvdi->item.mask & LVIF_TEXT) { pLvdi->item.pszText[0] = 0; diff --git a/PowerEditor/src/resource.h b/PowerEditor/src/resource.h index 25803c4a..ed28e03c 100644 --- a/PowerEditor/src/resource.h +++ b/PowerEditor/src/resource.h @@ -362,6 +362,9 @@ // See shortcutRc.h //#define IDD_SHORTCUT_DLG 5000 +// See pluginsAdminRes.h +//#define IDD_PLUGINSADMIN_DLG 5500 + // See preference.rc //#define IDD_PREFERENCE_BOX 6000 diff --git a/PowerEditor/visual.net/notepadPlus.vcxproj b/PowerEditor/visual.net/notepadPlus.vcxproj index d92c60bb..38d74a4e 100755 --- a/PowerEditor/visual.net/notepadPlus.vcxproj +++ b/PowerEditor/visual.net/notepadPlus.vcxproj @@ -94,7 +94,7 @@ Disabled Neither - ..\src\WinControls\AboutDlg;..\..\scintilla\include;..\include;..\src\WinControls;..\src\WinControls\ImageListSet;..\src\WinControls\OpenSaveFileDialog;..\src\WinControls\SplitterContainer;..\src\WinControls\StaticDialog;..\src\WinControls\TabBar;..\src\WinControls\ToolBar;..\src\MISC\Process;..\src\ScitillaComponent;..\src\MISC;..\src\MISC\SysMsg;..\src\WinControls\StatusBar;..\src;..\src\WinControls\StaticDialog\RunDlg;..\src\tinyxml;..\src\WinControls\ColourPicker;..\src\Win32Explr;..\src\MISC\RegExt;..\src\WinControls\TrayIcon;..\src\WinControls\shortcut;..\src\WinControls\Grid;..\src\WinControls\ContextMenu;..\src\MISC\PluginsManager;..\src\WinControls\Preference;..\src\WinControls\WindowsDlg;..\src\WinControls\TaskList;..\src\WinControls\DockingWnd;..\src\WinControls\ToolTip;..\src\MISC\Exception;..\src\MISC\Common;..\src\tinyxml\tinyXmlA;..\src\WinControls\AnsiCharPanel;..\src\WinControls\ClipboardHistory;..\src\WinControls\FindCharsInRange;..\src\WinControls\VerticalFileSwitcher;..\src\WinControls\ProjectPanel;..\src\WinControls\DocumentMap;..\src\WinControls\FunctionList;..\src\uchardet;..\src\WinControls\FileBrowser;..\src\WinControls\ReadDirectoryChanges;..\src\MISC\md5;%(AdditionalIncludeDirectories) + ..\src\WinControls\AboutDlg;..\..\scintilla\include;..\include;..\src\WinControls;..\src\WinControls\ImageListSet;..\src\WinControls\OpenSaveFileDialog;..\src\WinControls\SplitterContainer;..\src\WinControls\StaticDialog;..\src\WinControls\TabBar;..\src\WinControls\ToolBar;..\src\MISC\Process;..\src\ScitillaComponent;..\src\MISC;..\src\MISC\SysMsg;..\src\WinControls\StatusBar;..\src;..\src\WinControls\StaticDialog\RunDlg;..\src\tinyxml;..\src\WinControls\ColourPicker;..\src\Win32Explr;..\src\MISC\RegExt;..\src\WinControls\TrayIcon;..\src\WinControls\shortcut;..\src\WinControls\Grid;..\src\WinControls\ContextMenu;..\src\MISC\PluginsManager;..\src\WinControls\Preference;..\src\WinControls\WindowsDlg;..\src\WinControls\TaskList;..\src\WinControls\DockingWnd;..\src\WinControls\ToolTip;..\src\MISC\Exception;..\src\MISC\Common;..\src\tinyxml\tinyXmlA;..\src\WinControls\AnsiCharPanel;..\src\WinControls\ClipboardHistory;..\src\WinControls\FindCharsInRange;..\src\WinControls\VerticalFileSwitcher;..\src\WinControls\ProjectPanel;..\src\WinControls\DocumentMap;..\src\WinControls\FunctionList;..\src\uchardet;..\src\WinControls\FileBrowser;..\src\WinControls\ReadDirectoryChanges;..\src\MISC\md5;..\src\WinControls\pluginsAdmin;%(AdditionalIncludeDirectories) WIN32;_WIN32_WINNT=0x0501;_WINDOWS;_USE_64BIT_TIME_T;TIXML_USE_STL;TIXMLA_USE_STL;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS=1;%(PreprocessorDefinitions) Async UninitializedLocalUsageCheck @@ -107,7 +107,7 @@ /fixed:no %(AdditionalOptions) - comctl32.lib;shlwapi.lib;shell32.lib;Oleacc.lib;Dbghelp.lib;%(AdditionalDependencies) + comctl32.lib;shlwapi.lib;shell32.lib;Oleacc.lib;Dbghelp.lib;version.lib;%(AdditionalDependencies) LinkVerboseLib $(OutDir)notepad++.exe 1.0 @@ -129,7 +129,7 @@ Disabled Neither - ..\src\WinControls\AboutDlg;..\..\scintilla\include;..\include;..\src\WinControls;..\src\WinControls\ImageListSet;..\src\WinControls\OpenSaveFileDialog;..\src\WinControls\SplitterContainer;..\src\WinControls\StaticDialog;..\src\WinControls\TabBar;..\src\WinControls\ToolBar;..\src\MISC\Process;..\src\ScitillaComponent;..\src\MISC;..\src\MISC\SysMsg;..\src\WinControls\StatusBar;..\src;..\src\WinControls\StaticDialog\RunDlg;..\src\tinyxml;..\src\WinControls\ColourPicker;..\src\Win32Explr;..\src\MISC\RegExt;..\src\WinControls\TrayIcon;..\src\WinControls\shortcut;..\src\WinControls\Grid;..\src\WinControls\ContextMenu;..\src\MISC\PluginsManager;..\src\WinControls\Preference;..\src\WinControls\WindowsDlg;..\src\WinControls\TaskList;..\src\WinControls\DockingWnd;..\src\WinControls\ToolTip;..\src\MISC\Exception;..\src\MISC\Common;..\src\tinyxml\tinyXmlA;..\src\WinControls\AnsiCharPanel;..\src\WinControls\ClipboardHistory;..\src\WinControls\FindCharsInRange;..\src\WinControls\VerticalFileSwitcher;..\src\WinControls\ProjectPanel;..\src\WinControls\DocumentMap;..\src\WinControls\FunctionList;..\src\uchardet;..\src\WinControls\FileBrowser;..\src\WinControls\ReadDirectoryChanges;..\src\MISC\md5;%(AdditionalIncludeDirectories) + ..\src\WinControls\AboutDlg;..\..\scintilla\include;..\include;..\src\WinControls;..\src\WinControls\ImageListSet;..\src\WinControls\OpenSaveFileDialog;..\src\WinControls\SplitterContainer;..\src\WinControls\StaticDialog;..\src\WinControls\TabBar;..\src\WinControls\ToolBar;..\src\MISC\Process;..\src\ScitillaComponent;..\src\MISC;..\src\MISC\SysMsg;..\src\WinControls\StatusBar;..\src;..\src\WinControls\StaticDialog\RunDlg;..\src\tinyxml;..\src\WinControls\ColourPicker;..\src\Win32Explr;..\src\MISC\RegExt;..\src\WinControls\TrayIcon;..\src\WinControls\shortcut;..\src\WinControls\Grid;..\src\WinControls\ContextMenu;..\src\MISC\PluginsManager;..\src\WinControls\Preference;..\src\WinControls\WindowsDlg;..\src\WinControls\TaskList;..\src\WinControls\DockingWnd;..\src\WinControls\ToolTip;..\src\MISC\Exception;..\src\MISC\Common;..\src\tinyxml\tinyXmlA;..\src\WinControls\AnsiCharPanel;..\src\WinControls\ClipboardHistory;..\src\WinControls\FindCharsInRange;..\src\WinControls\VerticalFileSwitcher;..\src\WinControls\ProjectPanel;..\src\WinControls\DocumentMap;..\src\WinControls\FunctionList;..\src\uchardet;..\src\WinControls\FileBrowser;..\src\WinControls\ReadDirectoryChanges;..\src\MISC\md5;..\src\WinControls\pluginsAdmin;%(AdditionalIncludeDirectories) WIN32;_WIN32_WINNT=0x0501;_WINDOWS;_USE_64BIT_TIME_T;TIXML_USE_STL;TIXMLA_USE_STL;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS=1;%(PreprocessorDefinitions) Async UninitializedLocalUsageCheck @@ -142,7 +142,7 @@ /fixed:no %(AdditionalOptions) - comctl32.lib;shlwapi.lib;shell32.lib;Oleacc.lib;Dbghelp.lib;%(AdditionalDependencies) + comctl32.lib;shlwapi.lib;shell32.lib;Oleacc.lib;Dbghelp.lib;version.lib;%(AdditionalDependencies) LinkVerboseLib $(OutDir)notepad++.exe 1.0 @@ -167,7 +167,7 @@ Speed false false - ..\src\WinControls\AboutDlg;..\..\scintilla\include;..\include;..\src\WinControls;..\src\WinControls\ImageListSet;..\src\WinControls\OpenSaveFileDialog;..\src\WinControls\SplitterContainer;..\src\WinControls\StaticDialog;..\src\WinControls\TabBar;..\src\WinControls\ToolBar;..\src\MISC\Process;..\src\ScitillaComponent;..\src\MISC;..\src\MISC\SysMsg;..\src\WinControls\StatusBar;..\src;..\src\WinControls\StaticDialog\RunDlg;..\src\tinyxml;..\src\WinControls\ColourPicker;..\src\Win32Explr;..\src\MISC\RegExt;..\src\WinControls\TrayIcon;..\src\WinControls\shortcut;..\src\WinControls\Grid;..\src\WinControls\ContextMenu;..\src\MISC\PluginsManager;..\src\WinControls\Preference;..\src\WinControls\WindowsDlg;..\src\WinControls\TaskList;..\src\WinControls\DockingWnd;..\src\WinControls\ToolTip;..\src\MISC\Exception;..\src\MISC\Common;..\src\tinyxml\tinyXmlA;..\src\WinControls\AnsiCharPanel;..\src\WinControls\ClipboardHistory;..\src\WinControls\FindCharsInRange;..\src\WinControls\VerticalFileSwitcher;..\src\WinControls\ProjectPanel;..\src\WinControls\DocumentMap;..\src\WinControls\FunctionList;..\src\uchardet;..\src\WinControls\FileBrowser;..\src\WinControls\ReadDirectoryChanges;..\src\MISC\md5;%(AdditionalIncludeDirectories) + ..\src\WinControls\AboutDlg;..\..\scintilla\include;..\include;..\src\WinControls;..\src\WinControls\ImageListSet;..\src\WinControls\OpenSaveFileDialog;..\src\WinControls\SplitterContainer;..\src\WinControls\StaticDialog;..\src\WinControls\TabBar;..\src\WinControls\ToolBar;..\src\MISC\Process;..\src\ScitillaComponent;..\src\MISC;..\src\MISC\SysMsg;..\src\WinControls\StatusBar;..\src;..\src\WinControls\StaticDialog\RunDlg;..\src\tinyxml;..\src\WinControls\ColourPicker;..\src\Win32Explr;..\src\MISC\RegExt;..\src\WinControls\TrayIcon;..\src\WinControls\shortcut;..\src\WinControls\Grid;..\src\WinControls\ContextMenu;..\src\MISC\PluginsManager;..\src\WinControls\Preference;..\src\WinControls\WindowsDlg;..\src\WinControls\TaskList;..\src\WinControls\DockingWnd;..\src\WinControls\ToolTip;..\src\MISC\Exception;..\src\MISC\Common;..\src\tinyxml\tinyXmlA;..\src\WinControls\AnsiCharPanel;..\src\WinControls\ClipboardHistory;..\src\WinControls\FindCharsInRange;..\src\WinControls\VerticalFileSwitcher;..\src\WinControls\ProjectPanel;..\src\WinControls\DocumentMap;..\src\WinControls\FunctionList;..\src\uchardet;..\src\WinControls\FileBrowser;..\src\WinControls\ReadDirectoryChanges;..\src\MISC\md5;..\src\WinControls\pluginsAdmin;%(AdditionalIncludeDirectories) WIN32;_WIN32_WINNT=0x0501;NDEBUG;_WINDOWS;_USE_64BIT_TIME_T;TIXML_USE_STL;TIXMLA_USE_STL;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS=1;%(PreprocessorDefinitions) false false @@ -182,7 +182,7 @@ true - comctl32.lib;shlwapi.lib;shell32.lib;Oleacc.lib;Dbghelp.lib;%(AdditionalDependencies) + comctl32.lib;shlwapi.lib;shell32.lib;Oleacc.lib;Dbghelp.lib;version.lib;%(AdditionalDependencies) LinkVerboseLib $(OutDir)notepad++.exe 1.0 @@ -215,7 +215,7 @@ copy ..\src\contextMenu.xml ..\bin\contextMenu.xml Speed false false - ..\src\WinControls\AboutDlg;..\..\scintilla\include;..\include;..\src\WinControls;..\src\WinControls\ImageListSet;..\src\WinControls\OpenSaveFileDialog;..\src\WinControls\SplitterContainer;..\src\WinControls\StaticDialog;..\src\WinControls\TabBar;..\src\WinControls\ToolBar;..\src\MISC\Process;..\src\ScitillaComponent;..\src\MISC;..\src\MISC\SysMsg;..\src\WinControls\StatusBar;..\src;..\src\WinControls\StaticDialog\RunDlg;..\src\tinyxml;..\src\WinControls\ColourPicker;..\src\Win32Explr;..\src\MISC\RegExt;..\src\WinControls\TrayIcon;..\src\WinControls\shortcut;..\src\WinControls\Grid;..\src\WinControls\ContextMenu;..\src\MISC\PluginsManager;..\src\WinControls\Preference;..\src\WinControls\WindowsDlg;..\src\WinControls\TaskList;..\src\WinControls\DockingWnd;..\src\WinControls\ToolTip;..\src\MISC\Exception;..\src\MISC\Common;..\src\tinyxml\tinyXmlA;..\src\WinControls\AnsiCharPanel;..\src\WinControls\ClipboardHistory;..\src\WinControls\FindCharsInRange;..\src\WinControls\VerticalFileSwitcher;..\src\WinControls\ProjectPanel;..\src\WinControls\DocumentMap;..\src\WinControls\FunctionList;..\src\uchardet;..\src\WinControls\FileBrowser;..\src\WinControls\ReadDirectoryChanges;..\src\MISC\md5;%(AdditionalIncludeDirectories) + ..\src\WinControls\AboutDlg;..\..\scintilla\include;..\include;..\src\WinControls;..\src\WinControls\ImageListSet;..\src\WinControls\OpenSaveFileDialog;..\src\WinControls\SplitterContainer;..\src\WinControls\StaticDialog;..\src\WinControls\TabBar;..\src\WinControls\ToolBar;..\src\MISC\Process;..\src\ScitillaComponent;..\src\MISC;..\src\MISC\SysMsg;..\src\WinControls\StatusBar;..\src;..\src\WinControls\StaticDialog\RunDlg;..\src\tinyxml;..\src\WinControls\ColourPicker;..\src\Win32Explr;..\src\MISC\RegExt;..\src\WinControls\TrayIcon;..\src\WinControls\shortcut;..\src\WinControls\Grid;..\src\WinControls\ContextMenu;..\src\MISC\PluginsManager;..\src\WinControls\Preference;..\src\WinControls\WindowsDlg;..\src\WinControls\TaskList;..\src\WinControls\DockingWnd;..\src\WinControls\ToolTip;..\src\MISC\Exception;..\src\MISC\Common;..\src\tinyxml\tinyXmlA;..\src\WinControls\AnsiCharPanel;..\src\WinControls\ClipboardHistory;..\src\WinControls\FindCharsInRange;..\src\WinControls\VerticalFileSwitcher;..\src\WinControls\ProjectPanel;..\src\WinControls\DocumentMap;..\src\WinControls\FunctionList;..\src\uchardet;..\src\WinControls\FileBrowser;..\src\WinControls\ReadDirectoryChanges;..\src\MISC\md5;..\src\WinControls\pluginsAdmin;%(AdditionalIncludeDirectories) WIN32;_WIN32_WINNT=0x0501;NDEBUG;_WINDOWS;_USE_64BIT_TIME_T;TIXML_USE_STL;TIXMLA_USE_STL;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS=1;%(PreprocessorDefinitions) false false @@ -230,7 +230,7 @@ copy ..\src\contextMenu.xml ..\bin\contextMenu.xml true - comctl32.lib;shlwapi.lib;shell32.lib;Oleacc.lib;Dbghelp.lib;%(AdditionalDependencies) + comctl32.lib;shlwapi.lib;shell32.lib;Oleacc.lib;Dbghelp.lib;version.lib;%(AdditionalDependencies) LinkVerboseLib $(OutDir)notepad++.exe 1.0 @@ -264,6 +264,7 @@ copy ..\src\contextMenu.xml ..\bin64\contextMenu.xml + @@ -275,6 +276,7 @@ copy ..\src\contextMenu.xml ..\bin64\contextMenu.xml + @@ -497,6 +499,7 @@ copy ..\src\contextMenu.xml ..\bin64\contextMenu.xml + @@ -524,6 +527,7 @@ copy ..\src\contextMenu.xml ..\bin64\contextMenu.xml + @@ -538,6 +542,8 @@ copy ..\src\contextMenu.xml ..\bin64\contextMenu.xml + +