mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-21 12:54:42 +02:00
[BUG_FIXED] Fix a crash issue due to tip feature (to check).
[NEW_FEATURE] Add import plugins feature (load on the fly). [NEW_FEATURE] Add import theme (stylers.xml) feature. [ENHANCE] Prevent crash from some uncertain context. git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@519 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
dd70030c5c
commit
e8f584c764
@ -484,3 +484,38 @@ generic_string PathRemoveFileSpec(generic_string & path)
|
|||||||
}
|
}
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
generic_string PathAppend(generic_string &strDest, const generic_string str2append)
|
||||||
|
{
|
||||||
|
if (strDest == TEXT("") && str2append == TEXT("")) // "" + ""
|
||||||
|
{
|
||||||
|
strDest = TEXT("\\");
|
||||||
|
return strDest;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strDest == TEXT("") && str2append != TEXT("")) // "" + titi
|
||||||
|
{
|
||||||
|
strDest = str2append;
|
||||||
|
return strDest;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strDest[strDest.length() - 1] == '\\' && (str2append != TEXT("") && str2append[0] == '\\')) // toto\ + \titi
|
||||||
|
{
|
||||||
|
strDest.erase(strDest.length() - 1, 1);
|
||||||
|
strDest += str2append;
|
||||||
|
return strDest;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((strDest[strDest.length() - 1] == '\\' && (str2append != TEXT("") && str2append[0] != '\\')) // toto\ + titi
|
||||||
|
|| (strDest[strDest.length() - 1] != '\\' && (str2append != TEXT("") && str2append[0] == '\\'))) // toto + \titi
|
||||||
|
{
|
||||||
|
strDest += str2append;
|
||||||
|
return strDest;
|
||||||
|
}
|
||||||
|
|
||||||
|
// toto + titi
|
||||||
|
strDest += TEXT("\\");
|
||||||
|
strDest += str2append;
|
||||||
|
|
||||||
|
return strDest;
|
||||||
|
}
|
||||||
|
@ -139,6 +139,6 @@ private:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
generic_string PathRemoveFileSpec(generic_string & path);
|
generic_string PathRemoveFileSpec(generic_string & path);
|
||||||
|
generic_string PathAppend(generic_string &strDest, const generic_string str2append);
|
||||||
|
|
||||||
#endif //M30_IDE_COMMUN_H
|
#endif //M30_IDE_COMMUN_H
|
||||||
|
@ -21,48 +21,36 @@
|
|||||||
const TCHAR * USERMSG = TEXT("This plugin is not compatible with current version of Notepad++.\n\n\
|
const TCHAR * USERMSG = TEXT("This plugin is not compatible with current version of Notepad++.\n\n\
|
||||||
Do you want to remove this plugin from plugins directory to prevent this message from the next launch time?");
|
Do you want to remove this plugin from plugins directory to prevent this message from the next launch time?");
|
||||||
|
|
||||||
bool PluginsManager::loadPlugins(const TCHAR *dir)
|
bool PluginsManager::unloadPlugin(int index, HWND nppHandle)
|
||||||
{
|
{
|
||||||
if (_isDisabled)
|
SCNotification scnN;
|
||||||
return false;
|
scnN.nmhdr.code = NPPN_SHUTDOWN;
|
||||||
|
scnN.nmhdr.hwndFrom = nppHandle;
|
||||||
|
scnN.nmhdr.idFrom = 0;
|
||||||
|
_pluginInfos[index]->_pBeNotified(&scnN);
|
||||||
|
|
||||||
vector<generic_string> dllNames;
|
//::DestroyMenu(_pluginInfos[index]->_pluginMenu);
|
||||||
vector<generic_string> dll2Remove;
|
//_pluginInfos[index]->_pluginMenu = NULL;
|
||||||
generic_string nppPath = (NppParameters::getInstance())->getNppPath();
|
|
||||||
|
|
||||||
generic_string pluginsFullPathFilter = (dir && dir[0])?dir:nppPath;
|
if (::FreeLibrary(_pluginInfos[index]->_hLib))
|
||||||
|
_pluginInfos[index]->_hLib = NULL;
|
||||||
|
else
|
||||||
|
printStr(TEXT("not ok"));
|
||||||
|
//delete _pluginInfos[index];
|
||||||
|
// printInt(index);
|
||||||
|
//vector<PluginInfo *>::iterator it = _pluginInfos.begin() + index;
|
||||||
|
//_pluginInfos.erase(it);
|
||||||
|
//printStr(TEXT("remove"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
pluginsFullPathFilter += TEXT("\\plugins\\*.dll");
|
int PluginsManager::loadPlugin(const TCHAR *pluginFilePath, vector<generic_string> & dll2Remove)
|
||||||
|
{
|
||||||
WIN32_FIND_DATA foundData;
|
|
||||||
HANDLE hFindFile = ::FindFirstFile(pluginsFullPathFilter.c_str(), &foundData);
|
|
||||||
if (hFindFile != INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
generic_string plugins1stFullPath = (dir && dir[0])?dir:nppPath;
|
|
||||||
plugins1stFullPath += TEXT("\\plugins\\");
|
|
||||||
plugins1stFullPath += foundData.cFileName;
|
|
||||||
dllNames.push_back(plugins1stFullPath);
|
|
||||||
|
|
||||||
while (::FindNextFile(hFindFile, &foundData))
|
|
||||||
{
|
|
||||||
generic_string fullPath = (dir && dir[0])?dir:nppPath;
|
|
||||||
fullPath += TEXT("\\plugins\\");
|
|
||||||
fullPath += foundData.cFileName;
|
|
||||||
dllNames.push_back(fullPath);
|
|
||||||
}
|
|
||||||
::FindClose(hFindFile);
|
|
||||||
|
|
||||||
size_t i = 0;
|
|
||||||
|
|
||||||
for ( ; i < dllNames.size() ; i++)
|
|
||||||
{
|
|
||||||
PluginInfo *pi = new PluginInfo;
|
PluginInfo *pi = new PluginInfo;
|
||||||
try {
|
try {
|
||||||
TCHAR tmpStr[MAX_PATH];
|
pi->_moduleName = PathFindFileName(pluginFilePath);
|
||||||
lstrcpy(tmpStr, dllNames[i].c_str());
|
|
||||||
lstrcpy(pi->_moduleName, PathFindFileName(tmpStr));
|
|
||||||
|
|
||||||
pi->_hLib = ::LoadLibrary(dllNames[i].c_str());
|
pi->_hLib = ::LoadLibrary(pluginFilePath);
|
||||||
if (!pi->_hLib)
|
if (!pi->_hLib)
|
||||||
throw generic_string(TEXT("Load Library is failed.\nMake \"Runtime Library\" setting of this project as \"Multi-threaded(/MT)\" may cure this problem."));
|
throw generic_string(TEXT("Load Library is failed.\nMake \"Runtime Library\" setting of this project as \"Multi-threaded(/MT)\" may cure this problem."));
|
||||||
|
|
||||||
@ -122,7 +110,7 @@ bool PluginsManager::loadPlugins(const TCHAR *dir)
|
|||||||
char lexName[MAX_EXTERNAL_LEXER_NAME_LEN];
|
char lexName[MAX_EXTERNAL_LEXER_NAME_LEN];
|
||||||
lexName[0] = '\0';
|
lexName[0] = '\0';
|
||||||
TCHAR lexDesc[MAX_EXTERNAL_LEXER_DESC_LEN];
|
TCHAR lexDesc[MAX_EXTERNAL_LEXER_DESC_LEN];
|
||||||
lstrcpy(lexDesc, TEXT(""));
|
lexDesc[0] = '\0';
|
||||||
|
|
||||||
int numLexers = GetLexerCount();
|
int numLexers = GetLexerCount();
|
||||||
|
|
||||||
@ -150,16 +138,16 @@ bool PluginsManager::loadPlugins(const TCHAR *dir)
|
|||||||
TCHAR xmlPath[MAX_PATH];
|
TCHAR xmlPath[MAX_PATH];
|
||||||
lstrcpy(xmlPath, nppParams->getNppPath().c_str());
|
lstrcpy(xmlPath, nppParams->getNppPath().c_str());
|
||||||
PathAppend(xmlPath, TEXT("plugins\\Config"));
|
PathAppend(xmlPath, TEXT("plugins\\Config"));
|
||||||
PathAppend(xmlPath, pi->_moduleName);
|
PathAppend(xmlPath, pi->_moduleName.c_str());
|
||||||
PathRemoveExtension(xmlPath);
|
PathRemoveExtension(xmlPath);
|
||||||
PathAddExtension(xmlPath, TEXT(".xml"));
|
PathAddExtension(xmlPath, TEXT(".xml"));
|
||||||
|
|
||||||
if (!PathFileExists(xmlPath))
|
if (!PathFileExists(xmlPath))
|
||||||
{
|
{
|
||||||
lstrcpyn( xmlPath, TEXT("\0"), MAX_PATH );
|
lstrcpyn(xmlPath, TEXT("\0"), MAX_PATH );
|
||||||
lstrcpy( xmlPath, nppParams->getAppDataNppDir() );
|
lstrcpy(xmlPath, nppParams->getAppDataNppDir() );
|
||||||
PathAppend(xmlPath, TEXT("plugins\\Config"));
|
PathAppend(xmlPath, TEXT("plugins\\Config"));
|
||||||
PathAppend( xmlPath, pi->_moduleName );
|
PathAppend(xmlPath, pi->_moduleName.c_str());
|
||||||
PathRemoveExtension( xmlPath );
|
PathRemoveExtension( xmlPath );
|
||||||
PathAddExtension( xmlPath, TEXT(".xml") );
|
PathAddExtension( xmlPath, TEXT(".xml") );
|
||||||
|
|
||||||
@ -185,36 +173,81 @@ bool PluginsManager::loadPlugins(const TCHAR *dir)
|
|||||||
nppParams->getExternalLexerFromXmlTree(_pXmlDoc);
|
nppParams->getExternalLexerFromXmlTree(_pXmlDoc);
|
||||||
nppParams->getExternalLexerDoc()->push_back(_pXmlDoc);
|
nppParams->getExternalLexerDoc()->push_back(_pXmlDoc);
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
const char *pDllName = wmc->wchar2char(dllNames[i].c_str(), CP_ACP);
|
const char *pDllName = wmc->wchar2char(pluginFilePath, CP_ACP);
|
||||||
#else
|
#else
|
||||||
const char *pDllName = dllNames[i].c_str();
|
const char *pDllName = pluginFilePath;
|
||||||
#endif
|
#endif
|
||||||
::SendMessage(_nppData._scintillaMainHandle, SCI_LOADLEXERLIBRARY, 0, (LPARAM)pDllName);
|
::SendMessage(_nppData._scintillaMainHandle, SCI_LOADLEXERLIBRARY, 0, (LPARAM)pDllName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_pluginInfos.push_back(pi);
|
_pluginInfos.push_back(pi);
|
||||||
|
return (_pluginInfos.size() - 1);
|
||||||
}
|
}
|
||||||
catch(generic_string s)
|
catch(generic_string s)
|
||||||
{
|
{
|
||||||
s += TEXT("\n\n");
|
s += TEXT("\n\n");
|
||||||
s += USERMSG;
|
s += USERMSG;
|
||||||
if (::MessageBox(NULL, s.c_str(), dllNames[i].c_str(), MB_YESNO) == IDYES)
|
if (::MessageBox(NULL, s.c_str(), pluginFilePath, MB_YESNO) == IDYES)
|
||||||
{
|
{
|
||||||
dll2Remove.push_back(dllNames[i]);
|
dll2Remove.push_back(pluginFilePath);
|
||||||
}
|
}
|
||||||
delete pi;
|
delete pi;
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
generic_string msg = TEXT("Fail loaded");
|
generic_string msg = TEXT("Fail loaded");
|
||||||
msg += TEXT("\n\n");
|
msg += TEXT("\n\n");
|
||||||
msg += USERMSG;
|
msg += USERMSG;
|
||||||
if (::MessageBox(NULL, msg.c_str(), dllNames[i].c_str(), MB_YESNO) == IDYES)
|
if (::MessageBox(NULL, msg.c_str(), pluginFilePath, MB_YESNO) == IDYES)
|
||||||
{
|
{
|
||||||
dll2Remove.push_back(dllNames[i]);
|
dll2Remove.push_back(pluginFilePath);
|
||||||
}
|
}
|
||||||
delete pi;
|
delete pi;
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PluginsManager::loadPlugins(const TCHAR *dir)
|
||||||
|
{
|
||||||
|
if (_isDisabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
vector<generic_string> dllNames;
|
||||||
|
vector<generic_string> dll2Remove;
|
||||||
|
generic_string nppPath = (NppParameters::getInstance())->getNppPath();
|
||||||
|
|
||||||
|
generic_string pluginsFullPathFilter = (dir && dir[0])?dir:nppPath;
|
||||||
|
|
||||||
|
pluginsFullPathFilter += TEXT("\\plugins\\*.dll");
|
||||||
|
|
||||||
|
WIN32_FIND_DATA foundData;
|
||||||
|
HANDLE hFindFile = ::FindFirstFile(pluginsFullPathFilter.c_str(), &foundData);
|
||||||
|
if (hFindFile != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
generic_string plugins1stFullPath = (dir && dir[0])?dir:nppPath;
|
||||||
|
plugins1stFullPath += TEXT("\\plugins\\");
|
||||||
|
plugins1stFullPath += foundData.cFileName;
|
||||||
|
dllNames.push_back(plugins1stFullPath);
|
||||||
|
|
||||||
|
while (::FindNextFile(hFindFile, &foundData))
|
||||||
|
{
|
||||||
|
generic_string fullPath = (dir && dir[0])?dir:nppPath;
|
||||||
|
fullPath += TEXT("\\plugins\\");
|
||||||
|
fullPath += foundData.cFileName;
|
||||||
|
dllNames.push_back(fullPath);
|
||||||
}
|
}
|
||||||
|
::FindClose(hFindFile);
|
||||||
|
|
||||||
|
size_t i = 0;
|
||||||
|
|
||||||
|
for ( ; i < dllNames.size() ; i++)
|
||||||
|
{
|
||||||
|
loadPlugin(dllNames[i].c_str(), dll2Remove);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t j = 0 ; j < dll2Remove.size() ; j++)
|
for (size_t j = 0 ; j < dll2Remove.size() ; j++)
|
||||||
@ -250,21 +283,14 @@ bool PluginsManager::getShortcutByCmdID(int cmdID, ShortcutKey *sk)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PluginsManager::setMenu(HMENU hMenu, const TCHAR *menuName)
|
|
||||||
|
void PluginsManager::addInMenuFromPMIndex(int i)
|
||||||
{
|
{
|
||||||
if (hasPlugins())
|
|
||||||
{
|
|
||||||
vector<PluginCmdShortcut> & pluginCmdSCList = (NppParameters::getInstance())->getPluginCommandList();
|
vector<PluginCmdShortcut> & pluginCmdSCList = (NppParameters::getInstance())->getPluginCommandList();
|
||||||
const TCHAR *nom_menu = (menuName && menuName[0])?menuName:TEXT("Plugins");
|
|
||||||
|
|
||||||
_hPluginsMenu = ::CreateMenu();
|
|
||||||
::InsertMenu(hMenu, 9, MF_BYPOSITION | MF_POPUP, (UINT_PTR)_hPluginsMenu, nom_menu);
|
|
||||||
|
|
||||||
for (size_t i = 0 ; i < _pluginInfos.size() ; i++)
|
|
||||||
{
|
|
||||||
::InsertMenu(_hPluginsMenu, i, MF_BYPOSITION | MF_POPUP, (UINT_PTR)_pluginInfos[i]->_pluginMenu, _pluginInfos[i]->_pFuncGetName());
|
::InsertMenu(_hPluginsMenu, i, MF_BYPOSITION | MF_POPUP, (UINT_PTR)_pluginInfos[i]->_pluginMenu, _pluginInfos[i]->_pFuncGetName());
|
||||||
|
|
||||||
for (int j = 0 ; j < _pluginInfos[i]->_nbFuncItem ; j++)
|
unsigned short j = 0;
|
||||||
|
for ( ; j < _pluginInfos[i]->_nbFuncItem ; j++)
|
||||||
{
|
{
|
||||||
if (_pluginInfos[i]->_funcItems[j]._pFunc == NULL)
|
if (_pluginInfos[i]->_funcItems[j]._pFunc == NULL)
|
||||||
{
|
{
|
||||||
@ -272,7 +298,7 @@ void PluginsManager::setMenu(HMENU hMenu, const TCHAR *menuName)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
_pluginsCommands.push_back(PluginCommand(_pluginInfos[i]->_moduleName, j, _pluginInfos[i]->_funcItems[j]._pFunc));
|
_pluginsCommands.push_back(PluginCommand(_pluginInfos[i]->_moduleName.c_str(), j, _pluginInfos[i]->_funcItems[j]._pFunc));
|
||||||
|
|
||||||
int cmdID = ID_PLUGINS_CMD + (_pluginsCommands.size() - 1);
|
int cmdID = ID_PLUGINS_CMD + (_pluginsCommands.size() - 1);
|
||||||
_pluginInfos[i]->_funcItems[j]._cmdID = cmdID;
|
_pluginInfos[i]->_funcItems[j]._cmdID = cmdID;
|
||||||
@ -281,14 +307,15 @@ void PluginsManager::setMenu(HMENU hMenu, const TCHAR *menuName)
|
|||||||
if (_pluginInfos[i]->_funcItems[j]._pShKey)
|
if (_pluginInfos[i]->_funcItems[j]._pShKey)
|
||||||
{
|
{
|
||||||
ShortcutKey & sKey = *(_pluginInfos[i]->_funcItems[j]._pShKey);
|
ShortcutKey & sKey = *(_pluginInfos[i]->_funcItems[j]._pShKey);
|
||||||
PluginCmdShortcut pcs(Shortcut(itemName.c_str(), sKey._isCtrl, sKey._isAlt, sKey._isShift, sKey._key), cmdID, _pluginInfos[i]->_moduleName, (unsigned short)j);
|
PluginCmdShortcut pcs(Shortcut(itemName.c_str(), sKey._isCtrl, sKey._isAlt, sKey._isShift, sKey._key), cmdID, _pluginInfos[i]->_moduleName.c_str(), j);
|
||||||
pluginCmdSCList.push_back(pcs);
|
pluginCmdSCList.push_back(pcs);
|
||||||
itemName += TEXT("\t");
|
itemName += TEXT("\t");
|
||||||
itemName += pcs.toString();
|
itemName += pcs.toString();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ //no ShortcutKey is provided, add an disabled shortcut (so it can still be mapped, Paramaters class can still index any changes and the toolbar wont funk out
|
{ //no ShortcutKey is provided, add an disabled shortcut (so it can still be mapped, Paramaters class can still index any changes and the toolbar wont funk out
|
||||||
PluginCmdShortcut pcs(Shortcut(itemName.c_str(), false, false, false, 0x00), cmdID, _pluginInfos[i]->_moduleName, (unsigned short)j); //VK_NULL and everything disabled, the menu name is left alone
|
Shortcut sc(itemName.c_str(), false, false, false, 0x00);
|
||||||
|
PluginCmdShortcut pcs(sc, cmdID, _pluginInfos[i]->_moduleName.c_str(), j); //VK_NULL and everything disabled, the menu name is left alone
|
||||||
pluginCmdSCList.push_back(pcs);
|
pluginCmdSCList.push_back(pcs);
|
||||||
}
|
}
|
||||||
::InsertMenu(_pluginInfos[i]->_pluginMenu, j, MF_BYPOSITION, cmdID, itemName.c_str());
|
::InsertMenu(_pluginInfos[i]->_pluginMenu, j, MF_BYPOSITION, cmdID, itemName.c_str());
|
||||||
@ -296,6 +323,28 @@ void PluginsManager::setMenu(HMENU hMenu, const TCHAR *menuName)
|
|||||||
if (_pluginInfos[i]->_funcItems[j]._init2Check)
|
if (_pluginInfos[i]->_funcItems[j]._init2Check)
|
||||||
::CheckMenuItem(_hPluginsMenu, cmdID, MF_BYCOMMAND | MF_CHECKED);
|
::CheckMenuItem(_hPluginsMenu, cmdID, MF_BYCOMMAND | MF_CHECKED);
|
||||||
}
|
}
|
||||||
|
/*UNLOAD
|
||||||
|
::InsertMenu(_pluginInfos[i]->_pluginMenu, j++, MF_BYPOSITION | MF_SEPARATOR, 0, TEXT(""));
|
||||||
|
::InsertMenu(_pluginInfos[i]->_pluginMenu, j, MF_BYPOSITION, ID_PLUGINS_REMOVING + i, TEXT("Remove this plugin"));
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void PluginsManager::setMenu(HMENU hMenu, const TCHAR *menuName)
|
||||||
|
{
|
||||||
|
if (hasPlugins())
|
||||||
|
{
|
||||||
|
//vector<PluginCmdShortcut> & pluginCmdSCList = (NppParameters::getInstance())->getPluginCommandList();
|
||||||
|
const TCHAR *nom_menu = (menuName && menuName[0])?menuName:TEXT("Plugins");
|
||||||
|
|
||||||
|
if (!_hPluginsMenu)
|
||||||
|
{
|
||||||
|
_hPluginsMenu = ::CreateMenu();
|
||||||
|
::InsertMenu(hMenu, 9, MF_BYPOSITION | MF_POPUP, (UINT_PTR)_hPluginsMenu, nom_menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0 ; i < _pluginInfos.size() ; i++)
|
||||||
|
{
|
||||||
|
addInMenuFromPMIndex(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ struct PluginInfo {
|
|||||||
|
|
||||||
FuncItem *_funcItems;
|
FuncItem *_funcItems;
|
||||||
int _nbFuncItem;
|
int _nbFuncItem;
|
||||||
TCHAR _moduleName[64];
|
generic_string _moduleName;
|
||||||
};
|
};
|
||||||
|
|
||||||
class PluginsManager {
|
class PluginsManager {
|
||||||
@ -72,8 +72,12 @@ public:
|
|||||||
void init(const NppData & nppData) {
|
void init(const NppData & nppData) {
|
||||||
_nppData = nppData;
|
_nppData = nppData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int loadPlugin(const TCHAR *pluginFilePath, vector<generic_string> & dll2Remove);
|
||||||
bool loadPlugins(const TCHAR *dir = NULL);
|
bool loadPlugins(const TCHAR *dir = NULL);
|
||||||
|
|
||||||
|
bool unloadPlugin(int index, HWND nppHandle);
|
||||||
|
|
||||||
void runPluginCommand(size_t i) {
|
void runPluginCommand(size_t i) {
|
||||||
if (i < _pluginsCommands.size())
|
if (i < _pluginsCommands.size())
|
||||||
if (_pluginsCommands[i]._pFunc != NULL)
|
if (_pluginsCommands[i]._pFunc != NULL)
|
||||||
@ -91,22 +95,27 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void addInMenuFromPMIndex(int i);
|
||||||
void setMenu(HMENU hMenu, const TCHAR *menuName);
|
void setMenu(HMENU hMenu, const TCHAR *menuName);
|
||||||
bool getShortcutByCmdID(int cmdID, ShortcutKey *sk);
|
bool getShortcutByCmdID(int cmdID, ShortcutKey *sk);
|
||||||
|
|
||||||
void notify(SCNotification *notification) {
|
void notify(SCNotification *notification) {
|
||||||
for (size_t i = 0 ; i < _pluginInfos.size() ; i++)
|
for (size_t i = 0 ; i < _pluginInfos.size() ; i++)
|
||||||
|
{
|
||||||
|
if (_pluginInfos[i]->_hLib)
|
||||||
{
|
{
|
||||||
// To avoid the plugin change the data in SCNotification
|
// To avoid the plugin change the data in SCNotification
|
||||||
// Each notification to pass to a plugin is a copy of SCNotification instance
|
// Each notification to pass to a plugin is a copy of SCNotification instance
|
||||||
SCNotification scNotif = *notification;
|
SCNotification scNotif = *notification;
|
||||||
_pluginInfos[i]->_pBeNotified(&scNotif);
|
_pluginInfos[i]->_pBeNotified(&scNotif);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void relayNppMessages(UINT Message, WPARAM wParam, LPARAM lParam) {
|
void relayNppMessages(UINT Message, WPARAM wParam, LPARAM lParam) {
|
||||||
for (size_t i = 0 ; i < _pluginInfos.size() ; i++)
|
for (size_t i = 0 ; i < _pluginInfos.size() ; i++)
|
||||||
{
|
{
|
||||||
|
if (_pluginInfos[i]->_hLib)
|
||||||
_pluginInfos[i]->_pMessageProc(Message, wParam, lParam);
|
_pluginInfos[i]->_pMessageProc(Message, wParam, lParam);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -118,12 +127,15 @@ public:
|
|||||||
|
|
||||||
for (size_t i = 0 ; i < _pluginInfos.size() ; i++)
|
for (size_t i = 0 ; i < _pluginInfos.size() ; i++)
|
||||||
{
|
{
|
||||||
if (generic_stricmp(_pluginInfos[i]->_moduleName, moduleName) == 0)
|
if (_pluginInfos[i]->_moduleName == moduleName)
|
||||||
|
{
|
||||||
|
if (_pluginInfos[i]->_hLib)
|
||||||
{
|
{
|
||||||
_pluginInfos[i]->_pMessageProc(Message, wParam, lParam);
|
_pluginInfos[i]->_pMessageProc(Message, wParam, lParam);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -74,7 +74,6 @@ Notepad_plus::Notepad_plus(): Window(), _mainWindowStatus(0), _pDocTab(NULL), _p
|
|||||||
_autoCompleteMain(&_mainEditView), _autoCompleteSub(&_subEditView), _smartHighlighter(&_findReplaceDlg),
|
_autoCompleteMain(&_mainEditView), _autoCompleteSub(&_subEditView), _smartHighlighter(&_findReplaceDlg),
|
||||||
_nativeLangEncoding(CP_ACP), _isFileOpening(false)
|
_nativeLangEncoding(CP_ACP), _isFileOpening(false)
|
||||||
{
|
{
|
||||||
|
|
||||||
ZeroMemory(&_prevSelectedRange, sizeof(_prevSelectedRange));
|
ZeroMemory(&_prevSelectedRange, sizeof(_prevSelectedRange));
|
||||||
_winVersion = (NppParameters::getInstance())->getWinVersion();
|
_winVersion = (NppParameters::getInstance())->getWinVersion();
|
||||||
|
|
||||||
@ -301,14 +300,12 @@ void Notepad_plus::init(HINSTANCE hInst, HWND parent, const TCHAR *cmdLine, CmdL
|
|||||||
vector<generic_string> patterns;
|
vector<generic_string> patterns;
|
||||||
patterns.push_back(TEXT("*.xml"));
|
patterns.push_back(TEXT("*.xml"));
|
||||||
|
|
||||||
generic_string nppDir(pNppParams->getNppPath());
|
generic_string nppDir = pNppParams->getNppPath();
|
||||||
::PathRemoveFileSpec(nppDir);
|
|
||||||
|
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
LocalizationSwitcher & localizationSwitcher = pNppParams->getLocalizationSwitcher();
|
LocalizationSwitcher & localizationSwitcher = pNppParams->getLocalizationSwitcher();
|
||||||
wstring localizationDir = nppDir.c_str();
|
wstring localizationDir = nppDir;
|
||||||
|
PathAppend(localizationDir, TEXT("localization\\"));
|
||||||
|
|
||||||
localizationDir += TEXT("\\localization\\");
|
|
||||||
getMatchedFileNames(localizationDir.c_str(), patterns, fileNames, false, false);
|
getMatchedFileNames(localizationDir.c_str(), patterns, fileNames, false, false);
|
||||||
for (size_t i = 0 ; i < fileNames.size() ; i++)
|
for (size_t i = 0 ; i < fileNames.size() ; i++)
|
||||||
{
|
{
|
||||||
@ -322,7 +319,7 @@ void Notepad_plus::init(HINSTANCE hInst, HWND parent, const TCHAR *cmdLine, CmdL
|
|||||||
// Get themes from both npp install themes dir and app data themes dir with the per user
|
// Get themes from both npp install themes dir and app data themes dir with the per user
|
||||||
// overriding default themes of the same name.
|
// overriding default themes of the same name.
|
||||||
generic_string themeDir(pNppParams->getAppDataNppDir());
|
generic_string themeDir(pNppParams->getAppDataNppDir());
|
||||||
themeDir.append(TEXT("\\themes\\"));
|
PathAppend(themeDir, TEXT("themes\\"));
|
||||||
|
|
||||||
getMatchedFileNames(themeDir.c_str(), patterns, fileNames, false, false);
|
getMatchedFileNames(themeDir.c_str(), patterns, fileNames, false, false);
|
||||||
for (size_t i = 0 ; i < fileNames.size() ; i++)
|
for (size_t i = 0 ; i < fileNames.size() ; i++)
|
||||||
@ -333,7 +330,7 @@ void Notepad_plus::init(HINSTANCE hInst, HWND parent, const TCHAR *cmdLine, CmdL
|
|||||||
fileNames.clear();
|
fileNames.clear();
|
||||||
themeDir.clear();
|
themeDir.clear();
|
||||||
themeDir = nppDir.c_str(); // <- should use the pointer to avoid the constructor of copy
|
themeDir = nppDir.c_str(); // <- should use the pointer to avoid the constructor of copy
|
||||||
themeDir.append(TEXT("\\themes\\"));
|
PathAppend(themeDir, TEXT("themes\\"));
|
||||||
getMatchedFileNames(themeDir.c_str(), patterns, fileNames, false, false);
|
getMatchedFileNames(themeDir.c_str(), patterns, fileNames, false, false);
|
||||||
for (size_t i = 0 ; i < fileNames.size() ; i++)
|
for (size_t i = 0 ; i < fileNames.size() ; i++)
|
||||||
{
|
{
|
||||||
@ -2621,30 +2618,35 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
|||||||
::GetCursorPos(&p);
|
::GetCursorPos(&p);
|
||||||
::ScreenToClient(_hSelf, &p);
|
::ScreenToClient(_hSelf, &p);
|
||||||
HWND hWin = ::RealChildWindowFromPoint(_hSelf, p);
|
HWND hWin = ::RealChildWindowFromPoint(_hSelf, p);
|
||||||
|
const int tipMaxLen = 1024;
|
||||||
static generic_string tip = TEXT("");
|
static TCHAR tip[tipMaxLen];
|
||||||
|
tip[0] = '\0';
|
||||||
|
generic_string tipTmp(TEXT(""));
|
||||||
int id = int(lpttt->hdr.idFrom);
|
int id = int(lpttt->hdr.idFrom);
|
||||||
|
|
||||||
if (hWin == _rebarTop.getHSelf())
|
if (hWin == _rebarTop.getHSelf())
|
||||||
{
|
{
|
||||||
getNameStrFromCmd(id, tip);
|
getNameStrFromCmd(id, tipTmp);
|
||||||
}
|
}
|
||||||
else if (hWin == _mainDocTab.getHSelf())
|
else if (hWin == _mainDocTab.getHSelf())
|
||||||
{
|
{
|
||||||
BufferID idd = _mainDocTab.getBufferByIndex(id);
|
BufferID idd = _mainDocTab.getBufferByIndex(id);
|
||||||
Buffer * buf = MainFileManager->getBufferByID(idd);
|
Buffer * buf = MainFileManager->getBufferByID(idd);
|
||||||
tip = buf->getFullPathName();
|
tipTmp = buf->getFullPathName();
|
||||||
}
|
}
|
||||||
else if (hWin == _subDocTab.getHSelf())
|
else if (hWin == _subDocTab.getHSelf())
|
||||||
{
|
{
|
||||||
BufferID idd = _subDocTab.getBufferByIndex(id);
|
BufferID idd = _subDocTab.getBufferByIndex(id);
|
||||||
Buffer * buf = MainFileManager->getBufferByID(idd);
|
Buffer * buf = MainFileManager->getBufferByID(idd);
|
||||||
tip = buf->getFullPathName();
|
tipTmp = buf->getFullPathName();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
|
|
||||||
lpttt->lpszText = (TCHAR *)tip.c_str();
|
if (tipTmp.length() < tipMaxLen)
|
||||||
|
lstrcpy(tip, tipTmp.c_str());
|
||||||
|
|
||||||
|
lpttt->lpszText = tip;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -4197,11 +4199,53 @@ void Notepad_plus::command(int id)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case IDM_SETTING_FILEASSOCIATION_DLG :
|
case IDM_SETTING_IMPORTPLUGIN :
|
||||||
{
|
{
|
||||||
RegExtDlg regExtDlg;
|
// get plugin source path
|
||||||
regExtDlg.init(_hInst, _hSelf);
|
TCHAR *extFilterName = TEXT("Notepad++ pligin");
|
||||||
regExtDlg.doDialog(_isRTL);
|
TCHAR *extFilter = TEXT(".dll");
|
||||||
|
TCHAR *destDir = TEXT("plugins");
|
||||||
|
|
||||||
|
vector<generic_string> copiedFiles = addNppComponents(destDir, extFilterName, extFilter);
|
||||||
|
|
||||||
|
// load plugin
|
||||||
|
vector<generic_string> dll2Remove;
|
||||||
|
for (size_t i = 0 ; i < copiedFiles.size() ; i++)
|
||||||
|
{
|
||||||
|
int index = _pluginsManager.loadPlugin(copiedFiles[i].c_str(), dll2Remove);
|
||||||
|
if (_pluginsManager.getMenuHandle())
|
||||||
|
_pluginsManager.addInMenuFromPMIndex(index);
|
||||||
|
}
|
||||||
|
if (!_pluginsManager.getMenuHandle())
|
||||||
|
_pluginsManager.setMenu(_mainMenuHandle, NULL);
|
||||||
|
::DrawMenuBar(_hSelf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case IDM_SETTING_IMPORTSTYLETHEMS :
|
||||||
|
{
|
||||||
|
// get plugin source path
|
||||||
|
TCHAR *extFilterName = TEXT("Notepad++ style theme");
|
||||||
|
TCHAR *extFilter = TEXT(".xml");
|
||||||
|
TCHAR *destDir = TEXT("themes");
|
||||||
|
|
||||||
|
// load styler
|
||||||
|
NppParameters *pNppParams = NppParameters::getInstance();
|
||||||
|
ThemeSwitcher & themeSwitcher = pNppParams->getThemeSwitcher();
|
||||||
|
|
||||||
|
vector<generic_string> copiedFiles = addNppComponents(destDir, extFilterName, extFilter);
|
||||||
|
for (size_t i = 0 ; i < copiedFiles.size() ; i++)
|
||||||
|
{
|
||||||
|
generic_string themeName(themeSwitcher.getThemeFromXmlFileName(copiedFiles[i].c_str()));
|
||||||
|
if (!themeSwitcher.themeNameExists(themeName.c_str()))
|
||||||
|
{
|
||||||
|
themeSwitcher.addThemeFromXml(copiedFiles[i].c_str());
|
||||||
|
if (_configStyleDlg.isCreated())
|
||||||
|
{
|
||||||
|
_configStyleDlg.addLastThemeEntry();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4287,7 +4331,6 @@ void Notepad_plus::command(int id)
|
|||||||
case IDM_HELP :
|
case IDM_HELP :
|
||||||
{
|
{
|
||||||
generic_string tmp((NppParameters::getInstance())->getNppPath());
|
generic_string tmp((NppParameters::getInstance())->getNppPath());
|
||||||
::PathRemoveFileSpec(tmp);
|
|
||||||
generic_string nppHelpPath = tmp.c_str();
|
generic_string nppHelpPath = tmp.c_str();
|
||||||
|
|
||||||
nppHelpPath += TEXT("\\NppHelp.chm");
|
nppHelpPath += TEXT("\\NppHelp.chm");
|
||||||
@ -4340,8 +4383,11 @@ void Notepad_plus::command(int id)
|
|||||||
case IDM_UPDATE_NPP :
|
case IDM_UPDATE_NPP :
|
||||||
{
|
{
|
||||||
generic_string updaterDir = (NppParameters::getInstance())->getNppPath();
|
generic_string updaterDir = (NppParameters::getInstance())->getNppPath();
|
||||||
updaterDir += TEXT("\\updater\\");
|
PathAppend(updaterDir ,TEXT("updater"));
|
||||||
generic_string updaterFullPath = updaterDir + TEXT("gup.exe");
|
|
||||||
|
generic_string updaterFullPath = updaterDir;
|
||||||
|
PathAppend(updaterFullPath, TEXT("gup.exe"));
|
||||||
|
|
||||||
generic_string param = TEXT("-verbose -v");
|
generic_string param = TEXT("-verbose -v");
|
||||||
param += VERSION_VALUE;
|
param += VERSION_VALUE;
|
||||||
Process updater(updaterFullPath.c_str(), param.c_str(), updaterDir.c_str());
|
Process updater(updaterFullPath.c_str(), param.c_str(), updaterDir.c_str());
|
||||||
@ -4540,6 +4586,13 @@ void Notepad_plus::command(int id)
|
|||||||
int i = id - ID_PLUGINS_CMD;
|
int i = id - ID_PLUGINS_CMD;
|
||||||
_pluginsManager.runPluginCommand(i);
|
_pluginsManager.runPluginCommand(i);
|
||||||
}
|
}
|
||||||
|
/*UNLOAD
|
||||||
|
else if ((id >= ID_PLUGINS_REMOVING) && (id < ID_PLUGINS_REMOVING_END))
|
||||||
|
{
|
||||||
|
int i = id - ID_PLUGINS_REMOVING;
|
||||||
|
_pluginsManager.unloadPlugin(i, _hSelf);
|
||||||
|
}
|
||||||
|
*/
|
||||||
else if ((id >= IDM_WINDOW_MRU_FIRST) && (id <= IDM_WINDOW_MRU_LIMIT))
|
else if ((id >= IDM_WINDOW_MRU_FIRST) && (id <= IDM_WINDOW_MRU_LIMIT))
|
||||||
{
|
{
|
||||||
activateDoc(id-IDM_WINDOW_MRU_FIRST);
|
activateDoc(id-IDM_WINDOW_MRU_FIRST);
|
||||||
@ -9938,3 +9991,41 @@ void Notepad_plus::setFindReplaceFolderFilter(const TCHAR *dir, const TCHAR *fil
|
|||||||
}
|
}
|
||||||
_findReplaceDlg.setFindInFilesDirFilter(dir, filter);
|
_findReplaceDlg.setFindInFilesDirFilter(dir, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<generic_string> Notepad_plus::addNppComponents(const TCHAR *destDir, const TCHAR *extFilterName, const TCHAR *extFilter)
|
||||||
|
{
|
||||||
|
FileDialog fDlg(_hSelf, _hInst);
|
||||||
|
fDlg.setExtFilter(extFilterName, extFilter, NULL);
|
||||||
|
|
||||||
|
//setFileOpenSaveDlgFilters(fDlg);
|
||||||
|
vector<generic_string> copiedFiles;
|
||||||
|
|
||||||
|
if (stringVector *pfns = fDlg.doOpenMultiFilesDlg())
|
||||||
|
{
|
||||||
|
// Get plugins dir
|
||||||
|
generic_string destDirName = (NppParameters::getInstance())->getNppPath();
|
||||||
|
PathAppend(destDirName, destDir);
|
||||||
|
|
||||||
|
if (!::PathFileExists(destDirName.c_str()))
|
||||||
|
{
|
||||||
|
::CreateDirectory(destDirName.c_str(), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
destDirName += TEXT("\\");
|
||||||
|
|
||||||
|
size_t sz = pfns->size();
|
||||||
|
for (size_t i = 0 ; i < sz ; i++)
|
||||||
|
{
|
||||||
|
if (::PathFileExists(pfns->at(i).c_str()))
|
||||||
|
{
|
||||||
|
// copy to plugins directory
|
||||||
|
generic_string destName = destDirName;
|
||||||
|
destName += ::PathFindFileName(pfns->at(i).c_str());
|
||||||
|
//printStr(destName.c_str());
|
||||||
|
if (::CopyFile(pfns->at(i).c_str(), destName.c_str(), FALSE))
|
||||||
|
copiedFiles.push_back(destName.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return copiedFiles;
|
||||||
|
}
|
||||||
|
@ -220,6 +220,7 @@ public:
|
|||||||
bool findInFiles();
|
bool findInFiles();
|
||||||
bool replaceInFiles();
|
bool replaceInFiles();
|
||||||
void setFindReplaceFolderFilter(const TCHAR *dir, const TCHAR *filters);
|
void setFindReplaceFolderFilter(const TCHAR *dir, const TCHAR *filters);
|
||||||
|
vector<generic_string> addNppComponents(const TCHAR *destDir, const TCHAR *extFilterName, const TCHAR *extFilter);
|
||||||
|
|
||||||
static HWND gNppHWND; //static handle to Notepad++ window, NULL if non-existant
|
static HWND gNppHWND; //static handle to Notepad++ window, NULL if non-existant
|
||||||
private:
|
private:
|
||||||
|
@ -540,6 +540,12 @@ BEGIN
|
|||||||
MENUITEM "Preferences...", IDM_SETTING_PREFERECE
|
MENUITEM "Preferences...", IDM_SETTING_PREFERECE
|
||||||
MENUITEM "Styler Configurator...", IDM_LANGSTYLE_CONFIG_DLG
|
MENUITEM "Styler Configurator...", IDM_LANGSTYLE_CONFIG_DLG
|
||||||
MENUITEM "Shortcut Mapper...", IDM_SETTING_SHORTCUT_MAPPER
|
MENUITEM "Shortcut Mapper...", IDM_SETTING_SHORTCUT_MAPPER
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
POPUP "Import"
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "Import plugin(s)...", IDM_SETTING_IMPORTPLUGIN
|
||||||
|
MENUITEM "Import style theme(s)...", IDM_SETTING_IMPORTSTYLETHEMS
|
||||||
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
POPUP "Macro"
|
POPUP "Macro"
|
||||||
|
@ -537,14 +537,15 @@ NppParameters::NppParameters() : _pXmlDoc(NULL),_pXmlUserDoc(NULL), _pXmlUserSty
|
|||||||
_nppPath = nppPath;
|
_nppPath = nppPath;
|
||||||
|
|
||||||
//Initialize current directory to startup directory
|
//Initialize current directory to startup directory
|
||||||
::GetCurrentDirectory(MAX_PATH, _currentDirectory);
|
TCHAR curDir[MAX_PATH];
|
||||||
|
::GetCurrentDirectory(MAX_PATH, curDir);
|
||||||
|
_currentDirectory = curDir;
|
||||||
|
|
||||||
_appdataNppDir[0] = '\0';
|
_appdataNppDir = TEXT("");
|
||||||
TCHAR notepadStylePath[MAX_PATH];
|
generic_string notepadStylePath(_nppPath);
|
||||||
lstrcpy(notepadStylePath, _nppPath.c_str());
|
|
||||||
PathAppend(notepadStylePath, notepadStyleFile);
|
PathAppend(notepadStylePath, notepadStyleFile);
|
||||||
|
|
||||||
_asNotepadStyle = (PathFileExists(notepadStylePath) == TRUE);
|
_asNotepadStyle = (PathFileExists(notepadStylePath.c_str()) == TRUE);
|
||||||
::AddFontResource(LINEDRAW_FONT);
|
::AddFontResource(LINEDRAW_FONT);
|
||||||
|
|
||||||
//Load initial accelerator key definitions
|
//Load initial accelerator key definitions
|
||||||
@ -609,7 +610,7 @@ bool NppParameters::reloadStylers(TCHAR *stylePath)
|
|||||||
bool loadOkay = _pXmlUserStylerDoc->LoadFile();
|
bool loadOkay = _pXmlUserStylerDoc->LoadFile();
|
||||||
if (!loadOkay)
|
if (!loadOkay)
|
||||||
{
|
{
|
||||||
::MessageBox(NULL, TEXT("Load stylers.xml failed!"), TEXT("Configurator"),MB_OK);
|
::MessageBox(NULL, TEXT("Load stylers.xml failed!"), stylePath, MB_OK);
|
||||||
delete _pXmlUserStylerDoc;
|
delete _pXmlUserStylerDoc;
|
||||||
_pXmlUserStylerDoc = NULL;
|
_pXmlUserStylerDoc = NULL;
|
||||||
return false;
|
return false;
|
||||||
@ -629,15 +630,14 @@ bool NppParameters::reloadStylers(TCHAR *stylePath)
|
|||||||
|
|
||||||
bool NppParameters::reloadLang()
|
bool NppParameters::reloadLang()
|
||||||
{
|
{
|
||||||
TCHAR nativeLangPath[MAX_PATH];
|
generic_string nativeLangPath(_nppPath);
|
||||||
lstrcpy(nativeLangPath, _nppPath.c_str());
|
PathAppend(nativeLangPath, generic_string(TEXT("nativeLang.xml")));
|
||||||
PathAppend(nativeLangPath, TEXT("nativeLang.xml"));
|
|
||||||
|
|
||||||
if (!PathFileExists(nativeLangPath))
|
if (!PathFileExists(nativeLangPath.c_str()))
|
||||||
{
|
{
|
||||||
lstrcpy(nativeLangPath, _userPath);
|
nativeLangPath = _userPath;
|
||||||
PathAppend(nativeLangPath, TEXT("nativeLang.xml"));
|
PathAppend(nativeLangPath, generic_string(TEXT("nativeLang.xml")));
|
||||||
if (!PathFileExists(nativeLangPath))
|
if (!PathFileExists(nativeLangPath.c_str()))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -646,7 +646,7 @@ bool NppParameters::reloadLang()
|
|||||||
|
|
||||||
_pXmlNativeLangDocA = new TiXmlDocumentA();
|
_pXmlNativeLangDocA = new TiXmlDocumentA();
|
||||||
|
|
||||||
bool loadOkay = _pXmlNativeLangDocA->LoadUnicodeFilePath(nativeLangPath);
|
bool loadOkay = _pXmlNativeLangDocA->LoadUnicodeFilePath(nativeLangPath.c_str());
|
||||||
if (!loadOkay)
|
if (!loadOkay)
|
||||||
{
|
{
|
||||||
delete _pXmlNativeLangDocA;
|
delete _pXmlNativeLangDocA;
|
||||||
@ -663,30 +663,30 @@ bool NppParameters::load()
|
|||||||
for (int i = 0 ; i < NB_LANG ; _langList[i] = NULL, i++);
|
for (int i = 0 ; i < NB_LANG ; _langList[i] = NULL, i++);
|
||||||
|
|
||||||
// Make localConf.xml path
|
// Make localConf.xml path
|
||||||
TCHAR localConfPath[MAX_PATH];
|
generic_string localConfPath(_nppPath);
|
||||||
lstrcpy(localConfPath, _nppPath.c_str());
|
|
||||||
PathAppend(localConfPath, localConfFile);
|
PathAppend(localConfPath, localConfFile);
|
||||||
|
|
||||||
// Test if localConf.xml exist
|
// Test if localConf.xml exist
|
||||||
bool isLocal = (PathFileExists(localConfPath) == TRUE);
|
bool isLocal = (PathFileExists(localConfPath.c_str()) == TRUE);
|
||||||
|
|
||||||
if (isLocal)
|
if (isLocal)
|
||||||
{
|
{
|
||||||
lstrcpy(_userPath, _nppPath.c_str());
|
_userPath = _nppPath;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ITEMIDLIST *pidl;
|
ITEMIDLIST *pidl;
|
||||||
SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &pidl);
|
SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &pidl);
|
||||||
SHGetPathFromIDList(pidl, _userPath);
|
TCHAR tmp[MAX_PATH];
|
||||||
|
SHGetPathFromIDList(pidl, tmp);
|
||||||
|
_userPath = tmp;
|
||||||
|
|
||||||
PathAppend(_userPath, TEXT("Notepad++"));
|
PathAppend(_userPath, TEXT("Notepad++"));
|
||||||
|
_appdataNppDir = _userPath;
|
||||||
|
|
||||||
lstrcpy(_appdataNppDir, _userPath);
|
if (!PathFileExists(_userPath.c_str()))
|
||||||
|
|
||||||
if (!PathFileExists(_userPath))
|
|
||||||
{
|
{
|
||||||
::CreateDirectory(_userPath, NULL);
|
::CreateDirectory(_userPath.c_str(), NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -707,20 +707,19 @@ bool NppParameters::load()
|
|||||||
//---------------------------------------//
|
//---------------------------------------//
|
||||||
// langs.xml : for every user statically //
|
// langs.xml : for every user statically //
|
||||||
//---------------------------------------//
|
//---------------------------------------//
|
||||||
TCHAR langs_xml_path[MAX_PATH];
|
generic_string langs_xml_path(_nppPath);
|
||||||
lstrcpy(langs_xml_path, _nppPath.c_str());
|
|
||||||
|
|
||||||
PathAppend(langs_xml_path, TEXT("langs.xml"));
|
PathAppend(langs_xml_path, TEXT("langs.xml"));
|
||||||
if (!PathFileExists(langs_xml_path))
|
if (!PathFileExists(langs_xml_path.c_str()))
|
||||||
{
|
{
|
||||||
TCHAR srcLangsPath[MAX_PATH];
|
generic_string srcLangsPath(_nppPath);
|
||||||
lstrcpy(srcLangsPath, _nppPath.c_str());
|
|
||||||
PathAppend(srcLangsPath, TEXT("langs.model.xml"));
|
PathAppend(srcLangsPath, TEXT("langs.model.xml"));
|
||||||
|
::CopyFile(srcLangsPath.c_str(), langs_xml_path.c_str(), TRUE);
|
||||||
::CopyFile(srcLangsPath, langs_xml_path, TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_pXmlDoc = new TiXmlDocument(langs_xml_path);
|
_pXmlDoc = new TiXmlDocument(langs_xml_path);
|
||||||
|
|
||||||
|
|
||||||
bool loadOkay = _pXmlDoc->LoadFile();
|
bool loadOkay = _pXmlDoc->LoadFile();
|
||||||
if (!loadOkay)
|
if (!loadOkay)
|
||||||
{
|
{
|
||||||
@ -735,16 +734,14 @@ bool NppParameters::load()
|
|||||||
//---------------------------//
|
//---------------------------//
|
||||||
// config.xml : for per user //
|
// config.xml : for per user //
|
||||||
//---------------------------//
|
//---------------------------//
|
||||||
TCHAR configPath[MAX_PATH];
|
generic_string configPath(_userPath);
|
||||||
lstrcpy(configPath, _userPath);
|
|
||||||
PathAppend(configPath, TEXT("config.xml"));
|
PathAppend(configPath, TEXT("config.xml"));
|
||||||
|
|
||||||
TCHAR srcConfigPath[MAX_PATH];
|
generic_string srcConfigPath(_nppPath);
|
||||||
lstrcpy(srcConfigPath, _nppPath.c_str());
|
|
||||||
PathAppend(srcConfigPath, TEXT("config.model.xml"));
|
PathAppend(srcConfigPath, TEXT("config.model.xml"));
|
||||||
|
|
||||||
if (!::PathFileExists(configPath))
|
if (!::PathFileExists(configPath.c_str()))
|
||||||
::CopyFile(srcConfigPath, configPath, FALSE);
|
::CopyFile(srcConfigPath.c_str(), configPath.c_str(), FALSE);
|
||||||
|
|
||||||
_pXmlUserDoc = new TiXmlDocument(configPath);
|
_pXmlUserDoc = new TiXmlDocument(configPath);
|
||||||
loadOkay = _pXmlUserDoc->LoadFile();
|
loadOkay = _pXmlUserDoc->LoadFile();
|
||||||
@ -753,7 +750,7 @@ bool NppParameters::load()
|
|||||||
int res = ::MessageBox(NULL, TEXT("Load config.xml failed!\rDo you want to recover your config.xml?"), TEXT("Configurator"),MB_YESNO);
|
int res = ::MessageBox(NULL, TEXT("Load config.xml failed!\rDo you want to recover your config.xml?"), TEXT("Configurator"),MB_YESNO);
|
||||||
if (res ==IDYES)
|
if (res ==IDYES)
|
||||||
{
|
{
|
||||||
::CopyFile(srcConfigPath, configPath, FALSE);
|
::CopyFile(srcConfigPath.c_str(), configPath.c_str(), FALSE);
|
||||||
|
|
||||||
loadOkay = _pXmlUserDoc->LoadFile();
|
loadOkay = _pXmlUserDoc->LoadFile();
|
||||||
if (!loadOkay)
|
if (!loadOkay)
|
||||||
@ -780,16 +777,15 @@ bool NppParameters::load()
|
|||||||
// stylers.xml : for per user //
|
// stylers.xml : for per user //
|
||||||
//----------------------------//
|
//----------------------------//
|
||||||
|
|
||||||
lstrcpy(_stylerPath, _userPath);
|
_stylerPath = _userPath;
|
||||||
PathAppend(_stylerPath, TEXT("stylers.xml"));
|
PathAppend(_stylerPath, TEXT("stylers.xml"));
|
||||||
|
|
||||||
if (!PathFileExists(_stylerPath))
|
if (!PathFileExists(_stylerPath.c_str()))
|
||||||
{
|
{
|
||||||
TCHAR srcStylersPath[MAX_PATH];
|
generic_string srcStylersPath(_nppPath);
|
||||||
lstrcpy(srcStylersPath, _nppPath.c_str());
|
|
||||||
PathAppend(srcStylersPath, TEXT("stylers.model.xml"));
|
PathAppend(srcStylersPath, TEXT("stylers.model.xml"));
|
||||||
|
|
||||||
::CopyFile(srcStylersPath, _stylerPath, TRUE);
|
::CopyFile(srcStylersPath.c_str(), _stylerPath.c_str(), TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( _nppGUI._themeName.empty() || (!PathFileExists(_nppGUI._themeName.c_str())) )
|
if ( _nppGUI._themeName.empty() || (!PathFileExists(_nppGUI._themeName.c_str())) )
|
||||||
@ -802,7 +798,7 @@ bool NppParameters::load()
|
|||||||
loadOkay = _pXmlUserStylerDoc->LoadFile();
|
loadOkay = _pXmlUserStylerDoc->LoadFile();
|
||||||
if (!loadOkay)
|
if (!loadOkay)
|
||||||
{
|
{
|
||||||
::MessageBox(NULL, TEXT("Load stylers.xml failed!"), TEXT("Configurator"),MB_OK);
|
::MessageBox(NULL, TEXT("Load stylers.xml failed!"), _stylerPath.c_str(), MB_OK);
|
||||||
delete _pXmlUserStylerDoc;
|
delete _pXmlUserStylerDoc;
|
||||||
_pXmlUserStylerDoc = NULL;
|
_pXmlUserStylerDoc = NULL;
|
||||||
isAllLaoded = false;
|
isAllLaoded = false;
|
||||||
@ -817,7 +813,7 @@ bool NppParameters::load()
|
|||||||
//-----------------------------------//
|
//-----------------------------------//
|
||||||
// userDefineLang.xml : for per user //
|
// userDefineLang.xml : for per user //
|
||||||
//-----------------------------------//
|
//-----------------------------------//
|
||||||
lstrcpy(_userDefineLangPath, _userPath);
|
_userDefineLangPath = _userPath;
|
||||||
PathAppend(_userDefineLangPath, TEXT("userDefineLang.xml"));
|
PathAppend(_userDefineLangPath, TEXT("userDefineLang.xml"));
|
||||||
|
|
||||||
_pXmlUserLangDoc = new TiXmlDocument(_userDefineLangPath);
|
_pXmlUserLangDoc = new TiXmlDocument(_userDefineLangPath);
|
||||||
@ -836,19 +832,18 @@ bool NppParameters::load()
|
|||||||
// In case of absence of user's nativeLang.xml, //
|
// In case of absence of user's nativeLang.xml, //
|
||||||
// We'll look in the Notepad++ Dir. //
|
// We'll look in the Notepad++ Dir. //
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
TCHAR nativeLangPath[MAX_PATH];
|
generic_string nativeLangPath(_userPath);
|
||||||
lstrcpy(nativeLangPath, _userPath);
|
|
||||||
PathAppend(nativeLangPath, TEXT("nativeLang.xml"));
|
PathAppend(nativeLangPath, TEXT("nativeLang.xml"));
|
||||||
|
|
||||||
if (!PathFileExists(nativeLangPath))
|
if (!PathFileExists(nativeLangPath.c_str()))
|
||||||
{
|
{
|
||||||
lstrcpy(nativeLangPath, _nppPath.c_str());
|
nativeLangPath = _nppPath;
|
||||||
PathAppend(nativeLangPath, TEXT("nativeLang.xml"));
|
PathAppend(nativeLangPath, TEXT("nativeLang.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
_pXmlNativeLangDocA = new TiXmlDocumentA();
|
_pXmlNativeLangDocA = new TiXmlDocumentA();
|
||||||
|
|
||||||
loadOkay = _pXmlNativeLangDocA->LoadUnicodeFilePath(nativeLangPath);
|
loadOkay = _pXmlNativeLangDocA->LoadUnicodeFilePath(nativeLangPath.c_str());
|
||||||
if (!loadOkay)
|
if (!loadOkay)
|
||||||
{
|
{
|
||||||
delete _pXmlNativeLangDocA;
|
delete _pXmlNativeLangDocA;
|
||||||
@ -861,8 +856,7 @@ bool NppParameters::load()
|
|||||||
//---------------------------------//
|
//---------------------------------//
|
||||||
// toolbarIcons.xml : for per user //
|
// toolbarIcons.xml : for per user //
|
||||||
//---------------------------------//
|
//---------------------------------//
|
||||||
TCHAR toolbarIconsPath[MAX_PATH];
|
generic_string toolbarIconsPath(_userPath);
|
||||||
lstrcpy(toolbarIconsPath, _userPath);
|
|
||||||
PathAppend(toolbarIconsPath, TEXT("toolbarIcons.xml"));
|
PathAppend(toolbarIconsPath, TEXT("toolbarIcons.xml"));
|
||||||
|
|
||||||
_pXmlToolIconsDoc = new TiXmlDocument(toolbarIconsPath);
|
_pXmlToolIconsDoc = new TiXmlDocument(toolbarIconsPath);
|
||||||
@ -877,16 +871,15 @@ bool NppParameters::load()
|
|||||||
//------------------------------//
|
//------------------------------//
|
||||||
// shortcuts.xml : for per user //
|
// shortcuts.xml : for per user //
|
||||||
//------------------------------//
|
//------------------------------//
|
||||||
lstrcpy(_shortcutsPath, _userPath);
|
_shortcutsPath = _userPath;
|
||||||
PathAppend(_shortcutsPath, TEXT("shortcuts.xml"));
|
PathAppend(_shortcutsPath, TEXT("shortcuts.xml"));
|
||||||
|
|
||||||
if (!PathFileExists(_shortcutsPath))
|
if (!PathFileExists(_shortcutsPath.c_str()))
|
||||||
{
|
{
|
||||||
TCHAR srcShortcutsPath[MAX_PATH];
|
generic_string srcShortcutsPath(_nppPath);
|
||||||
lstrcpy(srcShortcutsPath, _nppPath.c_str());
|
|
||||||
PathAppend(srcShortcutsPath, TEXT("shortcuts.xml"));
|
PathAppend(srcShortcutsPath, TEXT("shortcuts.xml"));
|
||||||
|
|
||||||
::CopyFile(srcShortcutsPath, _shortcutsPath, TRUE);
|
::CopyFile(srcShortcutsPath.c_str(), _shortcutsPath.c_str(), TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
_pXmlShortcutDoc = new TiXmlDocument(_shortcutsPath);
|
_pXmlShortcutDoc = new TiXmlDocument(_shortcutsPath);
|
||||||
@ -911,16 +904,15 @@ bool NppParameters::load()
|
|||||||
//---------------------------------//
|
//---------------------------------//
|
||||||
// contextMenu.xml : for per user //
|
// contextMenu.xml : for per user //
|
||||||
//---------------------------------//
|
//---------------------------------//
|
||||||
lstrcpy(_contextMenuPath, _userPath);
|
_contextMenuPath = _userPath;
|
||||||
PathAppend(_contextMenuPath, TEXT("contextMenu.xml"));
|
PathAppend(_contextMenuPath, TEXT("contextMenu.xml"));
|
||||||
|
|
||||||
if (!PathFileExists(_contextMenuPath))
|
if (!PathFileExists(_contextMenuPath.c_str()))
|
||||||
{
|
{
|
||||||
TCHAR srcContextMenuPath[MAX_PATH];
|
generic_string srcContextMenuPath(_nppPath);
|
||||||
lstrcpy(srcContextMenuPath, _nppPath.c_str());
|
|
||||||
PathAppend(srcContextMenuPath, TEXT("contextMenu.xml"));
|
PathAppend(srcContextMenuPath, TEXT("contextMenu.xml"));
|
||||||
|
|
||||||
::CopyFile(srcContextMenuPath, _contextMenuPath, TRUE);
|
::CopyFile(srcContextMenuPath.c_str(), _contextMenuPath.c_str(), TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
_pXmlContextMenuDoc = new TiXmlDocument(_contextMenuPath);
|
_pXmlContextMenuDoc = new TiXmlDocument(_contextMenuPath);
|
||||||
@ -937,7 +929,7 @@ bool NppParameters::load()
|
|||||||
//----------------------------//
|
//----------------------------//
|
||||||
// session.xml : for per user //
|
// session.xml : for per user //
|
||||||
//----------------------------//
|
//----------------------------//
|
||||||
lstrcpy(_sessionPath, _userPath);
|
_sessionPath = _userPath;
|
||||||
PathAppend(_sessionPath, TEXT("session.xml"));
|
PathAppend(_sessionPath, TEXT("session.xml"));
|
||||||
|
|
||||||
// Don't load session.xml if not required in order to speed up!!
|
// Don't load session.xml if not required in order to speed up!!
|
||||||
@ -1325,17 +1317,17 @@ void NppParameters::setWorkingDir(const TCHAR * newPath)
|
|||||||
{
|
{
|
||||||
if (newPath && newPath[0])
|
if (newPath && newPath[0])
|
||||||
{
|
{
|
||||||
lstrcpyn(_currentDirectory, newPath, MAX_PATH); //dont use sizeof
|
_currentDirectory = newPath;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (PathFileExists(_nppGUI._defaultDirExp))
|
if (PathFileExists(_nppGUI._defaultDirExp))
|
||||||
{
|
{
|
||||||
lstrcpyn(_currentDirectory, _nppGUI._defaultDirExp, MAX_PATH);
|
_currentDirectory = _nppGUI._defaultDirExp;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lstrcpyn(_currentDirectory, _nppPath.c_str(), MAX_PATH);
|
_currentDirectory = _nppPath.c_str();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2007,7 +1999,7 @@ void NppParameters::insertScintKey(TiXmlNode *scintKeyRoot, const ScintillaKeyMa
|
|||||||
|
|
||||||
void NppParameters::writeSession(const Session & session, const TCHAR *fileName)
|
void NppParameters::writeSession(const Session & session, const TCHAR *fileName)
|
||||||
{
|
{
|
||||||
const TCHAR *pathName = fileName?fileName:_sessionPath;
|
const TCHAR *pathName = fileName?fileName:_sessionPath.c_str();
|
||||||
|
|
||||||
_pXmlSessionDoc = new TiXmlDocument(pathName);
|
_pXmlSessionDoc = new TiXmlDocument(pathName);
|
||||||
TiXmlNode *root = _pXmlSessionDoc->InsertEndChild(TiXmlElement(TEXT("NotepadPlus")));
|
TiXmlNode *root = _pXmlSessionDoc->InsertEndChild(TiXmlElement(TEXT("NotepadPlus")));
|
||||||
|
@ -236,7 +236,7 @@ struct Style
|
|||||||
int _keywordClass;
|
int _keywordClass;
|
||||||
generic_string *_keywords;
|
generic_string *_keywords;
|
||||||
|
|
||||||
Style():_styleID(-1), _fgColor(COLORREF(-1)), _bgColor(COLORREF(-1)), _colorStyle(COLORSTYLE_ALL), _fontName(NULL), _fontStyle(-1), _fontSize(-1), _keywordClass(-1), _keywords(NULL){};
|
Style():_styleID(-1), _styleDesc(NULL), _fgColor(COLORREF(-1)), _bgColor(COLORREF(-1)), _colorStyle(COLORSTYLE_ALL), _fontName(NULL), _fontStyle(-1), _fontSize(-1), _keywordClass(-1), _keywords(NULL){};
|
||||||
|
|
||||||
~Style(){
|
~Style(){
|
||||||
if (_keywords)
|
if (_keywords)
|
||||||
@ -330,7 +330,10 @@ public:
|
|||||||
int getNbStyler() const {return _nbStyler;};
|
int getNbStyler() const {return _nbStyler;};
|
||||||
void setNbStyler(int nb) {_nbStyler = nb;};
|
void setNbStyler(int nb) {_nbStyler = nb;};
|
||||||
|
|
||||||
Style & getStyler(int index) {return _styleArray[index];};
|
Style & getStyler(int index) {
|
||||||
|
assert(index != -1);
|
||||||
|
return _styleArray[index];
|
||||||
|
};
|
||||||
|
|
||||||
bool hasEnoughSpace() {return (_nbStyler < MAX_STYLE);};
|
bool hasEnoughSpace() {return (_nbStyler < MAX_STYLE);};
|
||||||
void addStyler(int styleID, TiXmlNode *styleNode);
|
void addStyler(int styleID, TiXmlNode *styleNode);
|
||||||
@ -869,11 +872,6 @@ friend class NppParameters;
|
|||||||
public :
|
public :
|
||||||
ThemeSwitcher(){};
|
ThemeSwitcher(){};
|
||||||
|
|
||||||
struct ThemeDefinition {
|
|
||||||
TCHAR *_themeName;
|
|
||||||
TCHAR *_xmlFileName;
|
|
||||||
};
|
|
||||||
|
|
||||||
void addThemeFromXml(generic_string xmlFullPath) {
|
void addThemeFromXml(generic_string xmlFullPath) {
|
||||||
_themeList.push_back(pair<generic_string, generic_string>(getThemeFromXmlFileName(xmlFullPath.c_str()), xmlFullPath));
|
_themeList.push_back(pair<generic_string, generic_string>(getThemeFromXmlFileName(xmlFullPath.c_str()), xmlFullPath));
|
||||||
};
|
};
|
||||||
@ -1170,8 +1168,8 @@ public:
|
|||||||
ScintillaAccelerator * getScintillaAccelerator() {return _pScintAccelerator;};
|
ScintillaAccelerator * getScintillaAccelerator() {return _pScintAccelerator;};
|
||||||
|
|
||||||
generic_string getNppPath() const {return _nppPath;};
|
generic_string getNppPath() const {return _nppPath;};
|
||||||
const TCHAR * getAppDataNppDir() const {return _appdataNppDir;};
|
const TCHAR * getAppDataNppDir() const {return _appdataNppDir.c_str();};
|
||||||
const TCHAR * getWorkingDir() const {return _currentDirectory;};
|
const TCHAR * getWorkingDir() const {return _currentDirectory.c_str();};
|
||||||
void setWorkingDir(const TCHAR * newPath);
|
void setWorkingDir(const TCHAR * newPath);
|
||||||
|
|
||||||
bool loadSession(Session & session, const TCHAR *sessionFileName);
|
bool loadSession(Session & session, const TCHAR *sessionFileName);
|
||||||
@ -1271,7 +1269,7 @@ private:
|
|||||||
|
|
||||||
UserLangContainer *_userLangArray[NB_MAX_USER_LANG];
|
UserLangContainer *_userLangArray[NB_MAX_USER_LANG];
|
||||||
int _nbUserLang;
|
int _nbUserLang;
|
||||||
TCHAR _userDefineLangPath[MAX_PATH];
|
generic_string _userDefineLangPath;
|
||||||
ExternalLangContainer *_externalLangArray[NB_MAX_EXTERNAL_LANG];
|
ExternalLangContainer *_externalLangArray[NB_MAX_EXTERNAL_LANG];
|
||||||
int _nbExternalLang;
|
int _nbExternalLang;
|
||||||
|
|
||||||
@ -1310,14 +1308,14 @@ private:
|
|||||||
vector<MenuItemUnit> _contextMenuItems;
|
vector<MenuItemUnit> _contextMenuItems;
|
||||||
Session _session;
|
Session _session;
|
||||||
|
|
||||||
TCHAR _shortcutsPath[MAX_PATH];
|
generic_string _shortcutsPath;
|
||||||
TCHAR _contextMenuPath[MAX_PATH];
|
generic_string _contextMenuPath;
|
||||||
TCHAR _sessionPath[MAX_PATH];
|
generic_string _sessionPath;
|
||||||
generic_string _nppPath;
|
generic_string _nppPath;
|
||||||
TCHAR _userPath[MAX_PATH];
|
generic_string _userPath;
|
||||||
TCHAR _stylerPath[MAX_PATH];
|
generic_string _stylerPath;
|
||||||
TCHAR _appdataNppDir[MAX_PATH]; // sentinel of the absence of "doLocalConf.xml" : (_appdataNppDir == TEXT(""))?"doLocalConf.xml present":"doLocalConf.xml absent"
|
generic_string _appdataNppDir; // sentinel of the absence of "doLocalConf.xml" : (_appdataNppDir == TEXT(""))?"doLocalConf.xml present":"doLocalConf.xml absent"
|
||||||
TCHAR _currentDirectory[MAX_PATH];
|
generic_string _currentDirectory;
|
||||||
|
|
||||||
Accelerator *_pAccelerator;
|
Accelerator *_pAccelerator;
|
||||||
ScintillaAccelerator * _pScintAccelerator;
|
ScintillaAccelerator * _pScintAccelerator;
|
||||||
|
@ -96,7 +96,6 @@ BOOL CALLBACK WordStyleDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lPar
|
|||||||
{
|
{
|
||||||
pair<generic_string, generic_string> & themeInfo = themeSwitcher.getElementFromIndex(i);
|
pair<generic_string, generic_string> & themeInfo = themeSwitcher.getElementFromIndex(i);
|
||||||
int j = ::SendMessage(_hSwitch2ThemeCombo, CB_ADDSTRING, 0, (LPARAM)themeInfo.first.c_str());
|
int j = ::SendMessage(_hSwitch2ThemeCombo, CB_ADDSTRING, 0, (LPARAM)themeInfo.first.c_str());
|
||||||
::SendMessage(_hSwitch2ThemeCombo, CB_SETITEMDATA, j, (LPARAM)themeInfo.second.c_str());
|
|
||||||
if (! themeInfo.second.compare( nppParamInst->getNppGUI()._themeName ) )
|
if (! themeInfo.second.compare( nppParamInst->getNppGUI()._themeName ) )
|
||||||
{
|
{
|
||||||
_currentThemeIndex = j;
|
_currentThemeIndex = j;
|
||||||
@ -592,7 +591,11 @@ void WordStyleDlg::switchToTheme()
|
|||||||
|
|
||||||
generic_string prevThemeName(_themeName);
|
generic_string prevThemeName(_themeName);
|
||||||
_themeName.clear();
|
_themeName.clear();
|
||||||
_themeName.assign( (TCHAR *)::SendMessage(_hSwitch2ThemeCombo, CB_GETITEMDATA, iSel, 0) );
|
|
||||||
|
NppParameters *nppParamInst = NppParameters::getInstance();
|
||||||
|
ThemeSwitcher & themeSwitcher = nppParamInst->getThemeSwitcher();
|
||||||
|
pair<generic_string, generic_string> & themeInfo = themeSwitcher.getElementFromIndex(iSel);
|
||||||
|
_themeName = themeInfo.second;
|
||||||
|
|
||||||
if (_isThemeDirty)
|
if (_isThemeDirty)
|
||||||
{
|
{
|
||||||
@ -609,9 +612,6 @@ void WordStyleDlg::switchToTheme()
|
|||||||
if ( mb_response == IDYES )
|
if ( mb_response == IDYES )
|
||||||
(NppParameters::getInstance())->writeStyles(_lsArray, _globalStyles);
|
(NppParameters::getInstance())->writeStyles(_lsArray, _globalStyles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NppParameters *nppParamInst = NppParameters::getInstance();
|
|
||||||
nppParamInst->reloadStylers(&_themeName[0]);
|
nppParamInst->reloadStylers(&_themeName[0]);
|
||||||
|
|
||||||
loadLangListFromNppParam();
|
loadLangListFromNppParam();
|
||||||
@ -659,7 +659,7 @@ void WordStyleDlg::setVisualFromStyleList()
|
|||||||
Style & style = getCurrentStyler();
|
Style & style = getCurrentStyler();
|
||||||
|
|
||||||
// Global override style
|
// Global override style
|
||||||
if (lstrcmp(style._styleDesc, TEXT("Global override")) == 0)
|
if (style._styleDesc && lstrcmp(style._styleDesc, TEXT("Global override")) == 0)
|
||||||
{
|
{
|
||||||
showGlobalOverrideCtrls(true);
|
showGlobalOverrideCtrls(true);
|
||||||
}
|
}
|
||||||
|
@ -107,6 +107,13 @@ public :
|
|||||||
|
|
||||||
void apply();
|
void apply();
|
||||||
|
|
||||||
|
void addLastThemeEntry() {
|
||||||
|
NppParameters *nppParamInst = NppParameters::getInstance();
|
||||||
|
ThemeSwitcher & themeSwitcher = nppParamInst->getThemeSwitcher();
|
||||||
|
pair<generic_string, generic_string> & themeInfo = themeSwitcher.getElementFromIndex(themeSwitcher.size() - 1);
|
||||||
|
::SendMessage(_hSwitch2ThemeCombo, CB_ADDSTRING, 0, (LPARAM)themeInfo.first.c_str());
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private :
|
private :
|
||||||
@ -151,8 +158,12 @@ private :
|
|||||||
|
|
||||||
Style & getCurrentStyler() {
|
Style & getCurrentStyler() {
|
||||||
int styleIndex = ::SendDlgItemMessage(_hSelf, IDC_STYLES_LIST, LB_GETCURSEL, 0, 0);
|
int styleIndex = ::SendDlgItemMessage(_hSelf, IDC_STYLES_LIST, LB_GETCURSEL, 0, 0);
|
||||||
|
if (styleIndex == LB_ERR) styleIndex = 0;
|
||||||
|
|
||||||
if (_currentLexerIndex == 0)
|
if (_currentLexerIndex == 0)
|
||||||
|
{
|
||||||
return _globalStyles.getStyler(styleIndex);
|
return _globalStyles.getStyler(styleIndex);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LexerStyler & lexerStyler = _lsArray.getLexerFromIndex(_currentLexerIndex - 1);
|
LexerStyler & lexerStyler = _lsArray.getLexerFromIndex(_currentLexerIndex - 1);
|
||||||
@ -223,14 +234,13 @@ private :
|
|||||||
_isThemeDirty = true;
|
_isThemeDirty = true;
|
||||||
::EnableWindow(::GetDlgItem(_hSelf, IDC_SAVECLOSE_BUTTON), TRUE);
|
::EnableWindow(::GetDlgItem(_hSelf, IDC_SAVECLOSE_BUTTON), TRUE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
};
|
||||||
void setStyleListFromLexer(int index);
|
void setStyleListFromLexer(int index);
|
||||||
void setVisualFromStyleList();
|
void setVisualFromStyleList();
|
||||||
|
|
||||||
void updateGlobalOverrideCtrls();
|
void updateGlobalOverrideCtrls();
|
||||||
|
|
||||||
void showGlobalOverrideCtrls(bool show)
|
void showGlobalOverrideCtrls(bool show) {
|
||||||
{
|
|
||||||
if (show)
|
if (show)
|
||||||
{
|
{
|
||||||
updateGlobalOverrideCtrls();
|
updateGlobalOverrideCtrls();
|
||||||
@ -243,7 +253,7 @@ private :
|
|||||||
::ShowWindow(::GetDlgItem(_hSelf, IDC_GLOBAL_ITALIC_CHECK), show?SW_SHOW:SW_HIDE);
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_GLOBAL_ITALIC_CHECK), show?SW_SHOW:SW_HIDE);
|
||||||
::ShowWindow(::GetDlgItem(_hSelf, IDC_GLOBAL_UNDERLINE_CHECK), show?SW_SHOW:SW_HIDE);
|
::ShowWindow(::GetDlgItem(_hSelf, IDC_GLOBAL_UNDERLINE_CHECK), show?SW_SHOW:SW_HIDE);
|
||||||
_isShownGOCtrls = show;
|
_isShownGOCtrls = show;
|
||||||
}
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //WORD_STYLE_H
|
#endif //WORD_STYLE_H
|
||||||
|
@ -83,13 +83,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
HWND getHSelf() const {
|
HWND getHSelf() const {
|
||||||
/*
|
//assert(_hSelf);
|
||||||
if (!_hSelf)
|
|
||||||
{
|
|
||||||
::MessageBox(NULL, TEXT("_hSelf == NULL"), TEXT("class Window"), MB_OK);
|
|
||||||
throw int(999);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
return _hSelf;
|
return _hSelf;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -285,9 +285,9 @@
|
|||||||
#define IDM_SETTING_TAB_REPLCESPACE (IDM_SETTING + 2)
|
#define IDM_SETTING_TAB_REPLCESPACE (IDM_SETTING + 2)
|
||||||
#define IDM_SETTING_HISTORY_SIZE (IDM_SETTING + 3)
|
#define IDM_SETTING_HISTORY_SIZE (IDM_SETTING + 3)
|
||||||
#define IDM_SETTING_EDGE_SIZE (IDM_SETTING + 4)
|
#define IDM_SETTING_EDGE_SIZE (IDM_SETTING + 4)
|
||||||
#define IDM_SETTING_FILEASSOCIATION_DLG (IDM_SETTING + 5)
|
#define IDM_SETTING_IMPORTPLUGIN (IDM_SETTING + 5)
|
||||||
|
#define IDM_SETTING_IMPORTSTYLETHEMS (IDM_SETTING + 6)
|
||||||
|
|
||||||
#define IDM_SETTING_HISTORY_DONT_CHECK (IDM_SETTING + 7)
|
|
||||||
#define IDM_SETTING_TRAYICON (IDM_SETTING + 8)
|
#define IDM_SETTING_TRAYICON (IDM_SETTING + 8)
|
||||||
#define IDM_SETTING_SHORTCUT_MAPPER (IDM_SETTING + 9)
|
#define IDM_SETTING_SHORTCUT_MAPPER (IDM_SETTING + 9)
|
||||||
#define IDM_SETTING_REMEMBER_LAST_SESSION (IDM_SETTING + 10)
|
#define IDM_SETTING_REMEMBER_LAST_SESSION (IDM_SETTING + 10)
|
||||||
|
@ -173,6 +173,12 @@
|
|||||||
#define ID_PLUGINS_CMD 22000
|
#define ID_PLUGINS_CMD 22000
|
||||||
#define ID_PLUGINS_CMD_LIMIT 22500
|
#define ID_PLUGINS_CMD_LIMIT 22500
|
||||||
|
|
||||||
|
/*UNLOAD
|
||||||
|
#define ID_PLUGINS_REMOVING 22501
|
||||||
|
#define ID_PLUGINS_REMOVING_END 22600
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
//#define IDM 40000
|
//#define IDM 40000
|
||||||
|
|
||||||
#define IDCMD 50000
|
#define IDCMD 50000
|
||||||
|
Loading…
x
Reference in New Issue
Block a user