Remove ambiguous symbols (part 8)
Relace TCHAR, generic_string & TEXT("") par wchar_t, wstring & L"" respectively.
Follow up: 94af271
Close #15385
pull/15388/head
parent
88bd09e67d
commit
dc5cea8947
|
@ -27,8 +27,8 @@
|
|||
|
||||
using namespace std;
|
||||
|
||||
const TCHAR * USERMSG = TEXT(" is not compatible with the current version of Notepad++.\n\n\
|
||||
Do you want to remove this plugin from the plugins directory to prevent this message from the next launch?");
|
||||
const wchar_t * USERMSG = L" is not compatible with the current version of Notepad++.\n\n\
|
||||
Do you want to remove this plugin from the plugins directory to prevent this message from the next launch?";
|
||||
|
||||
|
||||
bool PluginsManager::unloadPlugin(int index, HWND nppHandle)
|
||||
|
@ -45,20 +45,20 @@ bool PluginsManager::unloadPlugin(int index, HWND nppHandle)
|
|||
if (::FreeLibrary(_pluginInfos[index]->_hLib))
|
||||
{
|
||||
_pluginInfos[index]->_hLib = nullptr;
|
||||
printStr(TEXT("we're good"));
|
||||
printStr(L"we're good");
|
||||
}
|
||||
else
|
||||
printStr(TEXT("not ok"));
|
||||
printStr(L"not ok");
|
||||
|
||||
//delete _pluginInfos[index];
|
||||
// printInt(index);
|
||||
//vector<PluginInfo *>::iterator it = _pluginInfos.begin() + index;
|
||||
//_pluginInfos.erase(it);
|
||||
//printStr(TEXT("remove"));
|
||||
//printStr(L"remove");
|
||||
return true;
|
||||
}
|
||||
|
||||
static WORD getBinaryArchitectureType(const TCHAR *filePath)
|
||||
static WORD getBinaryArchitectureType(const wchar_t *filePath)
|
||||
{
|
||||
HANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
|
||||
if (hFile == INVALID_HANDLE_VALUE)
|
||||
|
@ -101,9 +101,9 @@ static WORD getBinaryArchitectureType(const TCHAR *filePath)
|
|||
#define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS 0x00001000
|
||||
#endif
|
||||
|
||||
int PluginsManager::loadPluginFromPath(const TCHAR *pluginFilePath)
|
||||
int PluginsManager::loadPluginFromPath(const wchar_t *pluginFilePath)
|
||||
{
|
||||
const TCHAR *pluginFileName = ::PathFindFileName(pluginFilePath);
|
||||
const wchar_t *pluginFileName = ::PathFindFileName(pluginFilePath);
|
||||
if (isInLoadedDlls(pluginFileName))
|
||||
return 0;
|
||||
|
||||
|
@ -116,66 +116,66 @@ int PluginsManager::loadPluginFromPath(const TCHAR *pluginFilePath)
|
|||
int archType = nppParams.archType();
|
||||
if (getBinaryArchitectureType(pluginFilePath) != archType)
|
||||
{
|
||||
const TCHAR* archErrMsg = TEXT("Cannot load plugin.");
|
||||
const wchar_t* archErrMsg = L"Cannot load plugin.";
|
||||
switch (archType)
|
||||
{
|
||||
case IMAGE_FILE_MACHINE_ARM64:
|
||||
archErrMsg = TEXT("Cannot load ARM64 plugin.");
|
||||
archErrMsg = L"Cannot load ARM64 plugin.";
|
||||
break;
|
||||
case IMAGE_FILE_MACHINE_I386:
|
||||
archErrMsg = TEXT("Cannot load 32-bit plugin.");
|
||||
archErrMsg = L"Cannot load 32-bit plugin.";
|
||||
break;
|
||||
case IMAGE_FILE_MACHINE_AMD64:
|
||||
archErrMsg = TEXT("Cannot load 64-bit plugin.");
|
||||
archErrMsg = L"Cannot load 64-bit plugin.";
|
||||
break;
|
||||
}
|
||||
|
||||
throw generic_string(archErrMsg);
|
||||
throw wstring(archErrMsg);
|
||||
}
|
||||
|
||||
const DWORD dwFlags = GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "AddDllDirectory") != NULL ? LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_DEFAULT_DIRS : 0;
|
||||
const DWORD dwFlags = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "AddDllDirectory") != NULL ? LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_DEFAULT_DIRS : 0;
|
||||
pi->_hLib = ::LoadLibraryEx(pluginFilePath, NULL, dwFlags);
|
||||
if (!pi->_hLib)
|
||||
{
|
||||
generic_string lastErrorMsg = GetLastErrorAsString();
|
||||
wstring lastErrorMsg = GetLastErrorAsString();
|
||||
if (lastErrorMsg.empty())
|
||||
throw generic_string(TEXT("Load Library has failed.\nChanging the project's \"Runtime Library\" setting to \"Multi-threaded(/MT)\" might solve this problem."));
|
||||
throw wstring(L"Load Library has failed.\nChanging the project's \"Runtime Library\" setting to \"Multi-threaded(/MT)\" might solve this problem.");
|
||||
else
|
||||
throw generic_string(lastErrorMsg.c_str());
|
||||
throw wstring(lastErrorMsg.c_str());
|
||||
}
|
||||
|
||||
pi->_pFuncIsUnicode = (PFUNCISUNICODE)GetProcAddress(pi->_hLib, "isUnicode");
|
||||
if (!pi->_pFuncIsUnicode || !pi->_pFuncIsUnicode())
|
||||
throw generic_string(TEXT("This ANSI plugin is not compatible with your Unicode Notepad++."));
|
||||
throw wstring(L"This ANSI plugin is not compatible with your Unicode Notepad++.");
|
||||
|
||||
pi->_pFuncSetInfo = (PFUNCSETINFO)GetProcAddress(pi->_hLib, "setInfo");
|
||||
|
||||
if (!pi->_pFuncSetInfo)
|
||||
throw generic_string(TEXT("Missing \"setInfo\" function"));
|
||||
throw wstring(L"Missing \"setInfo\" function");
|
||||
|
||||
pi->_pFuncGetName = (PFUNCGETNAME)GetProcAddress(pi->_hLib, "getName");
|
||||
if (!pi->_pFuncGetName)
|
||||
throw generic_string(TEXT("Missing \"getName\" function"));
|
||||
throw wstring(L"Missing \"getName\" function");
|
||||
pi->_funcName = pi->_pFuncGetName();
|
||||
|
||||
pi->_pBeNotified = (PBENOTIFIED)GetProcAddress(pi->_hLib, "beNotified");
|
||||
if (!pi->_pBeNotified)
|
||||
throw generic_string(TEXT("Missing \"beNotified\" function"));
|
||||
throw wstring(L"Missing \"beNotified\" function");
|
||||
|
||||
pi->_pMessageProc = (PMESSAGEPROC)GetProcAddress(pi->_hLib, "messageProc");
|
||||
if (!pi->_pMessageProc)
|
||||
throw generic_string(TEXT("Missing \"messageProc\" function"));
|
||||
throw wstring(L"Missing \"messageProc\" function");
|
||||
|
||||
pi->_pFuncSetInfo(_nppData);
|
||||
|
||||
pi->_pFuncGetFuncsArray = (PFUNCGETFUNCSARRAY)GetProcAddress(pi->_hLib, "getFuncsArray");
|
||||
if (!pi->_pFuncGetFuncsArray)
|
||||
throw generic_string(TEXT("Missing \"getFuncsArray\" function"));
|
||||
throw wstring(L"Missing \"getFuncsArray\" function");
|
||||
|
||||
pi->_funcItems = pi->_pFuncGetFuncsArray(&pi->_nbFuncItem);
|
||||
|
||||
if ((!pi->_funcItems) || (pi->_nbFuncItem <= 0))
|
||||
throw generic_string(TEXT("Missing \"FuncItems\" array, or the nb of Function Item is not set correctly"));
|
||||
throw wstring(L"Missing \"FuncItems\" array, or the nb of Function Item is not set correctly");
|
||||
|
||||
pi->_pluginMenu = ::CreateMenu();
|
||||
|
||||
|
@ -185,27 +185,27 @@ int PluginsManager::loadPluginFromPath(const TCHAR *pluginFilePath)
|
|||
{
|
||||
Lexilla::GetLexerNameFn GetLexerName = (Lexilla::GetLexerNameFn)::GetProcAddress(pi->_hLib, LEXILLA_GETLEXERNAME);
|
||||
if (!GetLexerName)
|
||||
throw generic_string(TEXT("Loading GetLexerName function failed."));
|
||||
throw wstring(L"Loading GetLexerName function failed.");
|
||||
|
||||
//Lexilla::GetLexerFactoryFn GetLexerFactory = (Lexilla::GetLexerFactoryFn)::GetProcAddress(pi->_hLib, LEXILLA_GETLEXERFACTORY);
|
||||
//if (!GetLexerFactory)
|
||||
//throw generic_string(TEXT("Loading GetLexerFactory function failed."));
|
||||
//throw wstring(L"Loading GetLexerFactory function failed.");
|
||||
|
||||
Lexilla::CreateLexerFn CreateLexer = (Lexilla::CreateLexerFn)::GetProcAddress(pi->_hLib, LEXILLA_CREATELEXER);
|
||||
if (!CreateLexer)
|
||||
throw generic_string(TEXT("Loading CreateLexer function failed."));
|
||||
throw wstring(L"Loading CreateLexer function failed.");
|
||||
|
||||
//Lexilla::GetLibraryPropertyNamesFn GetLibraryPropertyNames = (Lexilla::GetLibraryPropertyNamesFn)::GetProcAddress(pi->_hLib, LEXILLA_GETLIBRARYPROPERTYNAMES);
|
||||
//if (!GetLibraryPropertyNames)
|
||||
//throw generic_string(TEXT("Loading GetLibraryPropertyNames function failed."));
|
||||
//throw wstring(L"Loading GetLibraryPropertyNames function failed.");
|
||||
|
||||
//Lexilla::SetLibraryPropertyFn SetLibraryProperty = (Lexilla::SetLibraryPropertyFn)::GetProcAddress(pi->_hLib, LEXILLA_SETLIBRARYPROPERTY);
|
||||
//if (!SetLibraryProperty)
|
||||
//throw generic_string(TEXT("Loading SetLibraryProperty function failed."));
|
||||
//throw wstring(L"Loading SetLibraryProperty function failed.");
|
||||
|
||||
//Lexilla::GetNameSpaceFn GetNameSpace = (Lexilla::GetNameSpaceFn)::GetProcAddress(pi->_hLib, LEXILLA_GETNAMESPACE);
|
||||
//if (!GetNameSpace)
|
||||
//throw generic_string(TEXT("Loading GetNameSpace function failed."));
|
||||
//throw wstring(L"Loading GetNameSpace function failed.");
|
||||
|
||||
// Assign a buffer for the lexer name.
|
||||
char lexName[MAX_EXTERNAL_LEXER_NAME_LEN];
|
||||
|
@ -232,25 +232,25 @@ int PluginsManager::loadPluginFromPath(const TCHAR *pluginFilePath)
|
|||
}
|
||||
}
|
||||
|
||||
TCHAR xmlPath[MAX_PATH];
|
||||
wchar_t xmlPath[MAX_PATH];
|
||||
wcscpy_s(xmlPath, nppParams.getNppPath().c_str());
|
||||
PathAppend(xmlPath, TEXT("plugins\\Config"));
|
||||
PathAppend(xmlPath, L"plugins\\Config");
|
||||
PathAppend(xmlPath, pi->_moduleName.c_str());
|
||||
PathRemoveExtension(xmlPath);
|
||||
PathAddExtension(xmlPath, TEXT(".xml"));
|
||||
PathAddExtension(xmlPath, L".xml");
|
||||
|
||||
if (!PathFileExists(xmlPath))
|
||||
{
|
||||
lstrcpyn(xmlPath, TEXT("\0"), MAX_PATH );
|
||||
lstrcpyn(xmlPath, L"\0", MAX_PATH );
|
||||
wcscpy_s(xmlPath, nppParams.getAppDataNppDir() );
|
||||
PathAppend(xmlPath, TEXT("plugins\\Config"));
|
||||
PathAppend(xmlPath, L"plugins\\Config");
|
||||
PathAppend(xmlPath, pi->_moduleName.c_str());
|
||||
PathRemoveExtension( xmlPath );
|
||||
PathAddExtension( xmlPath, TEXT(".xml") );
|
||||
PathAddExtension( xmlPath, L".xml" );
|
||||
|
||||
if (! PathFileExists( xmlPath ) )
|
||||
{
|
||||
throw generic_string(generic_string(xmlPath) + TEXT(" is missing."));
|
||||
throw wstring(wstring(xmlPath) + L" is missing.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -260,7 +260,7 @@ int PluginsManager::loadPluginFromPath(const TCHAR *pluginFilePath)
|
|||
{
|
||||
delete pXmlDoc;
|
||||
pXmlDoc = NULL;
|
||||
throw generic_string(generic_string(xmlPath) + TEXT(" failed to load."));
|
||||
throw wstring(wstring(xmlPath) + L" failed to load.");
|
||||
}
|
||||
|
||||
for (int x = 0; x < numLexers; ++x) // postpone adding in case the xml is missing/corrupt
|
||||
|
@ -287,14 +287,14 @@ int PluginsManager::loadPluginFromPath(const TCHAR *pluginFilePath)
|
|||
pluginExceptionAlert(pluginFileName, e);
|
||||
return -1;
|
||||
}
|
||||
catch (generic_string& s)
|
||||
catch (wstring& s)
|
||||
{
|
||||
if (pi && pi->_hLib)
|
||||
{
|
||||
::FreeLibrary(pi->_hLib);
|
||||
}
|
||||
|
||||
s += TEXT("\n\n");
|
||||
s += L"\n\n";
|
||||
s += pluginFileName;
|
||||
s += USERMSG;
|
||||
if (::MessageBox(_nppData._nppHandle, s.c_str(), pluginFilePath, MB_YESNO) == IDYES)
|
||||
|
@ -312,8 +312,8 @@ int PluginsManager::loadPluginFromPath(const TCHAR *pluginFilePath)
|
|||
::FreeLibrary(pi->_hLib);
|
||||
}
|
||||
|
||||
generic_string msg = TEXT("Failed to load");
|
||||
msg += TEXT("\n\n");
|
||||
wstring msg = L"Failed to load";
|
||||
msg += L"\n\n";
|
||||
msg += pluginFileName;
|
||||
msg += USERMSG;
|
||||
if (::MessageBox(_nppData._nppHandle, msg.c_str(), pluginFilePath, MB_YESNO) == IDYES)
|
||||
|
@ -325,17 +325,17 @@ int PluginsManager::loadPluginFromPath(const TCHAR *pluginFilePath)
|
|||
}
|
||||
}
|
||||
|
||||
bool PluginsManager::loadPlugins(const TCHAR* dir, const PluginViewList* pluginUpdateInfoList, PluginViewList* pluginIncompatibleList)
|
||||
bool PluginsManager::loadPlugins(const wchar_t* dir, const PluginViewList* pluginUpdateInfoList, PluginViewList* pluginIncompatibleList)
|
||||
{
|
||||
if (_isDisabled)
|
||||
return false;
|
||||
|
||||
vector<generic_string> dllNames;
|
||||
vector<wstring> dllNames;
|
||||
|
||||
NppParameters& nppParams = NppParameters::getInstance();
|
||||
generic_string nppPath = nppParams.getNppPath();
|
||||
wstring nppPath = nppParams.getNppPath();
|
||||
|
||||
generic_string pluginsFolder;
|
||||
wstring pluginsFolder;
|
||||
if (dir && dir[0])
|
||||
{
|
||||
pluginsFolder = dir;
|
||||
|
@ -343,34 +343,34 @@ bool PluginsManager::loadPlugins(const TCHAR* dir, const PluginViewList* pluginU
|
|||
else
|
||||
{
|
||||
pluginsFolder = nppPath;
|
||||
pathAppend(pluginsFolder, TEXT("plugins"));
|
||||
pathAppend(pluginsFolder, L"plugins");
|
||||
}
|
||||
generic_string pluginsFolderFilter = pluginsFolder;
|
||||
pathAppend(pluginsFolderFilter, TEXT("*.*"));
|
||||
wstring pluginsFolderFilter = pluginsFolder;
|
||||
pathAppend(pluginsFolderFilter, L"*.*");
|
||||
|
||||
WIN32_FIND_DATA foundData;
|
||||
HANDLE hFindFolder = ::FindFirstFile(pluginsFolderFilter.c_str(), &foundData);
|
||||
HANDLE hFindDll = INVALID_HANDLE_VALUE;
|
||||
|
||||
// Get Notepad++ current version
|
||||
TCHAR nppFullPathName[MAX_PATH];
|
||||
wchar_t nppFullPathName[MAX_PATH];
|
||||
GetModuleFileName(NULL, nppFullPathName, MAX_PATH);
|
||||
Version nppVer;
|
||||
nppVer.setVersionFrom(nppFullPathName);
|
||||
|
||||
const TCHAR* incompatibleWarning = L"%s's version %s is not compatible to this version of Notepad++ (v%s).\r\nAs a result the plugin cannot be loaded.";
|
||||
const TCHAR* incompatibleWarningWithSolution = L"%s's version %s is not compatible to this version of Notepad++ (v%s).\r\nAs a result the plugin cannot be loaded.\r\n\r\nGo to Updates section and update your plugin to %s for solving the compatibility issue.";
|
||||
const wchar_t* incompatibleWarning = L"%s's version %s is not compatible to this version of Notepad++ (v%s).\r\nAs a result the plugin cannot be loaded.";
|
||||
const wchar_t* incompatibleWarningWithSolution = L"%s's version %s is not compatible to this version of Notepad++ (v%s).\r\nAs a result the plugin cannot be loaded.\r\n\r\nGo to Updates section and update your plugin to %s for solving the compatibility issue.";
|
||||
|
||||
// get plugin folder
|
||||
if (hFindFolder != INVALID_HANDLE_VALUE && (foundData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||
{
|
||||
generic_string foundFileName = foundData.cFileName;
|
||||
if (foundFileName != TEXT(".") && foundFileName != TEXT("..") && wcsicmp(foundFileName.c_str(), TEXT("Config")) != 0)
|
||||
wstring foundFileName = foundData.cFileName;
|
||||
if (foundFileName != L"." && foundFileName != L".." && wcsicmp(foundFileName.c_str(), L"Config") != 0)
|
||||
{
|
||||
generic_string pluginsFullPathFilter = pluginsFolder;
|
||||
wstring pluginsFullPathFilter = pluginsFolder;
|
||||
pathAppend(pluginsFullPathFilter, foundFileName);
|
||||
generic_string dllName = foundFileName;
|
||||
dllName += TEXT(".dll");
|
||||
wstring dllName = foundFileName;
|
||||
dllName += L".dll";
|
||||
pathAppend(pluginsFullPathFilter, dllName);
|
||||
|
||||
// get plugin
|
||||
|
@ -401,7 +401,7 @@ bool PluginsManager::loadPlugins(const TCHAR* dir, const PluginViewList* pluginU
|
|||
{
|
||||
PluginUpdateInfo* incompatiblePlg = new PluginUpdateInfo(*pui);
|
||||
incompatiblePlg->_version = v;
|
||||
TCHAR msg[1024];
|
||||
wchar_t msg[1024];
|
||||
wsprintf(msg, incompatibleWarning, incompatiblePlg->_displayName.c_str(), v.toString().c_str(), nppVer.toString().c_str());
|
||||
incompatiblePlg->_description = msg;
|
||||
pluginIncompatibleList->pushBack(incompatiblePlg);
|
||||
|
@ -419,7 +419,7 @@ bool PluginsManager::loadPlugins(const TCHAR* dir, const PluginViewList* pluginU
|
|||
{
|
||||
PluginUpdateInfo* incompatiblePlg = new PluginUpdateInfo(*pui);
|
||||
incompatiblePlg->_version = v;
|
||||
TCHAR msg[1024];
|
||||
wchar_t msg[1024];
|
||||
wsprintf(msg, incompatibleWarningWithSolution, incompatiblePlg->_displayName.c_str(), v.toString().c_str(), nppVer.toString().c_str(), pui->_version.toString().c_str());
|
||||
incompatiblePlg->_description = msg;
|
||||
pluginIncompatibleList->pushBack(incompatiblePlg);
|
||||
|
@ -436,14 +436,14 @@ bool PluginsManager::loadPlugins(const TCHAR* dir, const PluginViewList* pluginU
|
|||
// get plugin folder
|
||||
while (::FindNextFile(hFindFolder, &foundData))
|
||||
{
|
||||
generic_string foundFileName2 = foundData.cFileName;
|
||||
if (foundFileName2 != TEXT(".") && foundFileName2 != TEXT("..") && wcsicmp(foundFileName2.c_str(), TEXT("Config")) != 0)
|
||||
wstring foundFileName2 = foundData.cFileName;
|
||||
if (foundFileName2 != L"." && foundFileName2 != L".." && wcsicmp(foundFileName2.c_str(), L"Config") != 0)
|
||||
{
|
||||
generic_string pluginsFullPathFilter2 = pluginsFolder;
|
||||
wstring pluginsFullPathFilter2 = pluginsFolder;
|
||||
pathAppend(pluginsFullPathFilter2, foundFileName2);
|
||||
generic_string pluginsFolderPath2 = pluginsFullPathFilter2;
|
||||
generic_string dllName2 = foundFileName2;
|
||||
dllName2 += TEXT(".dll");
|
||||
wstring pluginsFolderPath2 = pluginsFullPathFilter2;
|
||||
wstring dllName2 = foundFileName2;
|
||||
dllName2 += L".dll";
|
||||
pathAppend(pluginsFullPathFilter2, dllName2);
|
||||
|
||||
// get plugin
|
||||
|
@ -479,7 +479,7 @@ bool PluginsManager::loadPlugins(const TCHAR* dir, const PluginViewList* pluginU
|
|||
{
|
||||
PluginUpdateInfo* incompatiblePlg = new PluginUpdateInfo(*pui2);
|
||||
incompatiblePlg->_version = v2;
|
||||
TCHAR msg[1024];
|
||||
wchar_t msg[1024];
|
||||
wsprintf(msg, incompatibleWarning, incompatiblePlg->_displayName.c_str(), v2.toString().c_str(), nppVer.toString().c_str());
|
||||
incompatiblePlg->_description = msg;
|
||||
pluginIncompatibleList->pushBack(incompatiblePlg);
|
||||
|
@ -497,7 +497,7 @@ bool PluginsManager::loadPlugins(const TCHAR* dir, const PluginViewList* pluginU
|
|||
{
|
||||
PluginUpdateInfo* incompatiblePlg = new PluginUpdateInfo(*pui2);
|
||||
incompatiblePlg->_version = v2;
|
||||
TCHAR msg[1024];
|
||||
wchar_t msg[1024];
|
||||
wsprintf(msg, incompatibleWarningWithSolution, incompatiblePlg->_displayName.c_str(), v2.toString().c_str(), nppVer.toString().c_str(), pui2->_version.toString().c_str());
|
||||
incompatiblePlg->_description = msg;
|
||||
pluginIncompatibleList->pushBack(incompatiblePlg);
|
||||
|
@ -591,7 +591,7 @@ void PluginsManager::addInMenuFromPMIndex(int i)
|
|||
{
|
||||
if (_pluginInfos[i]->_funcItems[j]._pFunc == NULL)
|
||||
{
|
||||
::InsertMenu(_pluginInfos[i]->_pluginMenu, j, MF_BYPOSITION | MF_SEPARATOR, 0, TEXT(""));
|
||||
::InsertMenu(_pluginInfos[i]->_pluginMenu, j, MF_BYPOSITION | MF_SEPARATOR, 0, L"");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -633,12 +633,12 @@ HMENU PluginsManager::initMenu(HMENU hMenu, bool enablePluginAdmin)
|
|||
int i = 1;
|
||||
|
||||
if (nbPlugin > 0)
|
||||
::InsertMenu(_hPluginsMenu, 0, MF_BYPOSITION | MF_SEPARATOR, 0, TEXT(""));
|
||||
::InsertMenu(_hPluginsMenu, 0, MF_BYPOSITION | MF_SEPARATOR, 0, L"");
|
||||
|
||||
if (enablePluginAdmin)
|
||||
{
|
||||
::InsertMenu(_hPluginsMenu, i++, MF_BYPOSITION, IDM_SETTING_PLUGINADM, TEXT("Plugins Admin..."));
|
||||
::InsertMenu(_hPluginsMenu, i++, MF_BYPOSITION | MF_SEPARATOR, 0, TEXT(""));
|
||||
::InsertMenu(_hPluginsMenu, i++, MF_BYPOSITION, IDM_SETTING_PLUGINADM, L"Plugins Admin...");
|
||||
::InsertMenu(_hPluginsMenu, i++, MF_BYPOSITION | MF_SEPARATOR, 0, L"");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -667,8 +667,8 @@ void PluginsManager::runPluginCommand(size_t i)
|
|||
catch (...)
|
||||
{
|
||||
constexpr size_t bufSize = 128;
|
||||
TCHAR funcInfo[bufSize] = { '\0' };
|
||||
swprintf(funcInfo, bufSize, TEXT("runPluginCommand(size_t i : %zd)"), i);
|
||||
wchar_t funcInfo[bufSize] = { '\0' };
|
||||
swprintf(funcInfo, bufSize, L"runPluginCommand(size_t i : %zd)", i);
|
||||
pluginCrashAlert(_pluginsCommands[i]._pluginName.c_str(), funcInfo);
|
||||
}
|
||||
}
|
||||
|
@ -676,7 +676,7 @@ void PluginsManager::runPluginCommand(size_t i)
|
|||
}
|
||||
|
||||
|
||||
void PluginsManager::runPluginCommand(const TCHAR *pluginName, int commandID)
|
||||
void PluginsManager::runPluginCommand(const wchar_t *pluginName, int commandID)
|
||||
{
|
||||
for (size_t i = 0, len = _pluginsCommands.size() ; i < len ; ++i)
|
||||
{
|
||||
|
@ -695,8 +695,8 @@ void PluginsManager::runPluginCommand(const TCHAR *pluginName, int commandID)
|
|||
catch (...)
|
||||
{
|
||||
constexpr size_t bufSize = 128;
|
||||
TCHAR funcInfo[bufSize] = { '\0' };
|
||||
swprintf(funcInfo, bufSize, TEXT("runPluginCommand(const TCHAR *pluginName : %s, int commandID : %d)"), pluginName, commandID);
|
||||
wchar_t funcInfo[bufSize] = { '\0' };
|
||||
swprintf(funcInfo, bufSize, L"runPluginCommand(const wchar_t *pluginName : %s, int commandID : %d)", pluginName, commandID);
|
||||
pluginCrashAlert(_pluginsCommands[i]._pluginName.c_str(), funcInfo);
|
||||
}
|
||||
}
|
||||
|
@ -726,8 +726,8 @@ void PluginsManager::notify(size_t indexPluginInfo, const SCNotification *notifi
|
|||
catch (...)
|
||||
{
|
||||
constexpr size_t bufSize = 256;
|
||||
TCHAR funcInfo[bufSize] = { '\0' };
|
||||
swprintf(funcInfo, bufSize, TEXT("notify(SCNotification *notification) : \r notification->nmhdr.code == %d\r notification->nmhdr.hwndFrom == %p\r notification->nmhdr.idFrom == %" PRIuPTR), \
|
||||
wchar_t funcInfo[bufSize] = { '\0' };
|
||||
swprintf(funcInfo, bufSize, L"notify(SCNotification *notification) : \r notification->nmhdr.code == %d\r notification->nmhdr.hwndFrom == %p\r notification->nmhdr.idFrom == %" PRIuPTR, \
|
||||
scNotif.nmhdr.code, scNotif.nmhdr.hwndFrom, scNotif.nmhdr.idFrom);
|
||||
pluginCrashAlert(_pluginInfos[indexPluginInfo]->_moduleName.c_str(), funcInfo);
|
||||
}
|
||||
|
@ -765,8 +765,8 @@ void PluginsManager::relayNppMessages(UINT Message, WPARAM wParam, LPARAM lParam
|
|||
catch (...)
|
||||
{
|
||||
constexpr size_t bufSize = 128;
|
||||
TCHAR funcInfo[bufSize] = { '\0' };
|
||||
swprintf(funcInfo, bufSize, TEXT("relayNppMessages(UINT Message : %u, WPARAM wParam : %" PRIuPTR ", LPARAM lParam : %" PRIiPTR ")"), Message, wParam, lParam);
|
||||
wchar_t funcInfo[bufSize] = { '\0' };
|
||||
swprintf(funcInfo, bufSize, L"relayNppMessages(UINT Message : %u, WPARAM wParam : %" PRIuPTR ", LPARAM lParam : %" PRIiPTR ")", Message, wParam, lParam);
|
||||
pluginCrashAlert(_pluginInfos[i]->_moduleName.c_str(), funcInfo);
|
||||
}
|
||||
}
|
||||
|
@ -776,7 +776,7 @@ void PluginsManager::relayNppMessages(UINT Message, WPARAM wParam, LPARAM lParam
|
|||
|
||||
bool PluginsManager::relayPluginMessages(UINT Message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
const TCHAR * moduleName = (const TCHAR *)wParam;
|
||||
const wchar_t * moduleName = (const wchar_t *)wParam;
|
||||
if (!moduleName || !moduleName[0] || !lParam)
|
||||
return false;
|
||||
|
||||
|
@ -797,8 +797,8 @@ bool PluginsManager::relayPluginMessages(UINT Message, WPARAM wParam, LPARAM lPa
|
|||
catch (...)
|
||||
{
|
||||
constexpr size_t bufSize = 128;
|
||||
TCHAR funcInfo[bufSize] = { '\0' };
|
||||
swprintf(funcInfo, bufSize, TEXT("relayPluginMessages(UINT Message : %u, WPARAM wParam : %" PRIuPTR ", LPARAM lParam : %" PRIiPTR ")"), Message, wParam, lParam);
|
||||
wchar_t funcInfo[bufSize] = { '\0' };
|
||||
swprintf(funcInfo, bufSize, L"relayPluginMessages(UINT Message : %u, WPARAM wParam : %" PRIuPTR ", LPARAM lParam : %" PRIiPTR ")", Message, wParam, lParam);
|
||||
pluginCrashAlert(_pluginInfos[i]->_moduleName.c_str(), funcInfo);
|
||||
}
|
||||
return true;
|
||||
|
@ -847,18 +847,18 @@ bool PluginsManager::allocateIndicator(int numberRequired, int* start)
|
|||
return retVal;
|
||||
}
|
||||
|
||||
generic_string PluginsManager::getLoadedPluginNames() const
|
||||
wstring PluginsManager::getLoadedPluginNames() const
|
||||
{
|
||||
generic_string pluginPaths;
|
||||
wstring pluginPaths;
|
||||
PluginUpdateInfo pl;
|
||||
for (const auto &dll : _loadedDlls)
|
||||
{
|
||||
pl = PluginUpdateInfo(dll._fullFilePath, dll._fileName);
|
||||
pluginPaths += TEXT("\r\n ");
|
||||
pluginPaths += L"\r\n ";
|
||||
pluginPaths += dll._displayName;
|
||||
pluginPaths += TEXT(" (");
|
||||
pluginPaths += L" (";
|
||||
pluginPaths += pl._version.toString();
|
||||
pluginPaths += TEXT(")");
|
||||
pluginPaths += L")";
|
||||
}
|
||||
return pluginPaths;
|
||||
}
|
||||
|
|
|
@ -27,10 +27,10 @@ class PluginViewList;
|
|||
|
||||
struct PluginCommand
|
||||
{
|
||||
generic_string _pluginName;
|
||||
std::wstring _pluginName;
|
||||
int _funcID = 0;
|
||||
PFUNCPLUGINCMD _pFunc = nullptr;
|
||||
PluginCommand(const TCHAR *pluginName, int funcID, PFUNCPLUGINCMD pFunc): _pluginName(pluginName), _funcID(funcID), _pFunc(pFunc) {};
|
||||
PluginCommand(const wchar_t *pluginName, int funcID, PFUNCPLUGINCMD pFunc): _pluginName(pluginName), _funcID(funcID), _pFunc(pFunc) {};
|
||||
};
|
||||
|
||||
struct PluginInfo
|
||||
|
@ -57,17 +57,17 @@ struct PluginInfo
|
|||
|
||||
FuncItem *_funcItems = nullptr;
|
||||
int _nbFuncItem = 0;
|
||||
generic_string _moduleName;
|
||||
generic_string _funcName;
|
||||
std::wstring _moduleName;
|
||||
std::wstring _funcName;
|
||||
};
|
||||
|
||||
struct LoadedDllInfo
|
||||
{
|
||||
generic_string _fullFilePath;
|
||||
generic_string _fileName;
|
||||
generic_string _displayName;
|
||||
std::wstring _fullFilePath;
|
||||
std::wstring _fileName;
|
||||
std::wstring _displayName;
|
||||
|
||||
LoadedDllInfo(const generic_string & fullFilePath, const generic_string & fileName) : _fullFilePath(fullFilePath), _fileName(fileName)
|
||||
LoadedDllInfo(const std::wstring & fullFilePath, const std::wstring & fileName) : _fullFilePath(fullFilePath), _fileName(fileName)
|
||||
{
|
||||
// the plugin module's name, without '.dll'
|
||||
_displayName = fileName.substr(0, fileName.find_last_of('.'));
|
||||
|
@ -92,12 +92,12 @@ public:
|
|||
_nppData = nppData;
|
||||
}
|
||||
|
||||
bool loadPlugins(const TCHAR *dir = NULL, const PluginViewList* pluginUpdateInfoList = nullptr, PluginViewList* pluginImcompatibleList = nullptr);
|
||||
bool loadPlugins(const wchar_t *dir = NULL, const PluginViewList* pluginUpdateInfoList = nullptr, PluginViewList* pluginImcompatibleList = nullptr);
|
||||
|
||||
bool unloadPlugin(int index, HWND nppHandle);
|
||||
|
||||
void runPluginCommand(size_t i);
|
||||
void runPluginCommand(const TCHAR *pluginName, int commandID);
|
||||
void runPluginCommand(const wchar_t *pluginName, int commandID);
|
||||
|
||||
void addInMenuFromPMIndex(int i);
|
||||
HMENU initMenu(HMENU hMenu, bool enablePluginAdmin = false);
|
||||
|
@ -119,7 +119,7 @@ public:
|
|||
|
||||
bool allocateMarker(int numberRequired, int* start);
|
||||
bool allocateIndicator(int numberRequired, int* start);
|
||||
generic_string getLoadedPluginNames() const;
|
||||
std::wstring getLoadedPluginNames() const;
|
||||
|
||||
private:
|
||||
NppData _nppData;
|
||||
|
@ -134,32 +134,32 @@ private:
|
|||
IDAllocator _indicatorAlloc;
|
||||
bool _noMoreNotification = false;
|
||||
|
||||
int loadPluginFromPath(const TCHAR* pluginFilePath);
|
||||
int loadPluginFromPath(const wchar_t* pluginFilePath);
|
||||
|
||||
void pluginCrashAlert(const TCHAR *pluginName, const TCHAR *funcSignature) {
|
||||
generic_string msg = pluginName;
|
||||
msg += TEXT(" just crashed in\r");
|
||||
void pluginCrashAlert(const wchar_t *pluginName, const wchar_t *funcSignature) {
|
||||
std::wstring msg = pluginName;
|
||||
msg += L" just crashed in\r";
|
||||
msg += funcSignature;
|
||||
::MessageBox(NULL, msg.c_str(), TEXT("Plugin Crash"), MB_OK|MB_ICONSTOP);
|
||||
::MessageBox(NULL, msg.c_str(), L"Plugin Crash", MB_OK|MB_ICONSTOP);
|
||||
}
|
||||
|
||||
void pluginExceptionAlert(const TCHAR *pluginName, const std::exception& e) {
|
||||
generic_string msg = TEXT("An exception occurred due to plugin: ");
|
||||
void pluginExceptionAlert(const wchar_t *pluginName, const std::exception& e) {
|
||||
std::wstring msg = L"An exception occurred due to plugin: ";
|
||||
msg += pluginName;
|
||||
msg += TEXT("\r\n\r\nException reason: ");
|
||||
msg += L"\r\n\r\nException reason: ";
|
||||
msg += s2ws(e.what());
|
||||
|
||||
::MessageBox(NULL, msg.c_str(), TEXT("Plugin Exception"), MB_OK);
|
||||
::MessageBox(NULL, msg.c_str(), L"Plugin Exception", MB_OK);
|
||||
}
|
||||
|
||||
bool isInLoadedDlls(const TCHAR *fn) const {
|
||||
bool isInLoadedDlls(const wchar_t *fn) const {
|
||||
for (size_t i = 0; i < _loadedDlls.size(); ++i)
|
||||
if (wcsicmp(fn, _loadedDlls[i]._fileName.c_str()) == 0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void addInLoadedDlls(const TCHAR *fullPath, const TCHAR *fn) {
|
||||
void addInLoadedDlls(const wchar_t *fullPath, const wchar_t *fn) {
|
||||
_loadedDlls.push_back(LoadedDllInfo(fullPath, fn));
|
||||
}
|
||||
};
|
||||
|
|
|
@ -252,7 +252,7 @@ using namespace std;
|
|||
|
||||
constexpr size_t tagMaxLen = 256;
|
||||
|
||||
static bool isInList(const generic_string& word, const vector<generic_string> & wordArray)
|
||||
static bool isInList(const wstring& word, const vector<wstring> & wordArray)
|
||||
{
|
||||
for (size_t i = 0, len = wordArray.size(); i < len; ++i)
|
||||
if (wordArray[i] == word)
|
||||
|
@ -260,7 +260,7 @@ static bool isInList(const generic_string& word, const vector<generic_string> &
|
|||
return false;
|
||||
}
|
||||
|
||||
static bool isAllDigits(const generic_string &str)
|
||||
static bool isAllDigits(const wstring &str)
|
||||
{
|
||||
for (const auto& i : str)
|
||||
{
|
||||
|
@ -270,12 +270,12 @@ static bool isAllDigits(const generic_string &str)
|
|||
return true;
|
||||
}
|
||||
|
||||
static void sortInsensitive(vector<generic_string> &wordArray)
|
||||
static void sortInsensitive(vector<wstring> &wordArray)
|
||||
{
|
||||
sort(
|
||||
wordArray.begin(),
|
||||
wordArray.end(),
|
||||
[](const generic_string &a, const generic_string &b)
|
||||
[](const wstring &a, const wstring &b)
|
||||
{
|
||||
return lexicographical_compare(
|
||||
a.begin(), a.end(),
|
||||
|
@ -305,7 +305,7 @@ bool AutoCompletion::showAutoComplete(AutocompleteType autocType, bool autoInser
|
|||
|
||||
size_t len = (curPos > startPos)?(curPos - startPos):(startPos - curPos);
|
||||
|
||||
generic_string words;
|
||||
wstring words;
|
||||
|
||||
if (autocType == autocFunc)
|
||||
{
|
||||
|
@ -324,16 +324,16 @@ bool AutoCompletion::showAutoComplete(AutocompleteType autocType, bool autoInser
|
|||
if (lena >= bufSize)
|
||||
return false;
|
||||
|
||||
TCHAR beginChars[bufSize];
|
||||
wchar_t beginChars[bufSize];
|
||||
_pEditView->getGenericText(beginChars, bufSize, startPos, curPos);
|
||||
|
||||
// Get word array containing all words beginning with beginChars, excluding word equal to allChars
|
||||
|
||||
vector<generic_string> wordArray;
|
||||
vector<wstring> wordArray;
|
||||
|
||||
if (autocType == autocWord || autocType == autocFuncAndWord)
|
||||
{
|
||||
TCHAR allChars[bufSize];
|
||||
wchar_t allChars[bufSize];
|
||||
_pEditView->getGenericText(allChars, bufSize, startPos, endPos);
|
||||
getWordArray(wordArray, beginChars, allChars);
|
||||
}
|
||||
|
@ -349,7 +349,7 @@ bool AutoCompletion::showAutoComplete(AutocompleteType autocType, bool autoInser
|
|||
|
||||
if (_ignoreCase)
|
||||
{
|
||||
generic_string kwSufix = _keyWordArray[i].substr(0, len);
|
||||
wstring kwSufix = _keyWordArray[i].substr(0, len);
|
||||
compareResult = wcsicmp(beginChars, kwSufix.c_str());
|
||||
}
|
||||
else
|
||||
|
@ -399,7 +399,7 @@ bool AutoCompletion::showAutoComplete(AutocompleteType autocType, bool autoInser
|
|||
{
|
||||
words += wordArray[i];
|
||||
if (i != wordArrayLen - 1)
|
||||
words += TEXT(" ");
|
||||
words += L" ";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -451,7 +451,7 @@ bool AutoCompletion::showApiAndWordComplete()
|
|||
return showAutoComplete(autocFuncAndWord, false);
|
||||
}
|
||||
|
||||
void AutoCompletion::getWordArray(vector<generic_string> & wordArray, TCHAR *beginChars, TCHAR *allChars)
|
||||
void AutoCompletion::getWordArray(vector<wstring> & wordArray, wchar_t *beginChars, wchar_t *allChars)
|
||||
{
|
||||
const size_t bufSize = 256;
|
||||
const NppGUI & nppGUI = NppParameters::getInstance().getNppGUI();
|
||||
|
@ -459,9 +459,9 @@ void AutoCompletion::getWordArray(vector<generic_string> & wordArray, TCHAR *beg
|
|||
if (nppGUI._autocIgnoreNumbers && isAllDigits(beginChars))
|
||||
return;
|
||||
|
||||
generic_string expr(TEXT("\\<"));
|
||||
wstring expr(L"\\<");
|
||||
expr += beginChars;
|
||||
expr += TEXT("[^ \\t\\n\\r.,;:\"(){}=<>'+!?\\[\\]]+");
|
||||
expr += L"[^ \\t\\n\\r.,;:\"(){}=<>'+!?\\[\\]]+";
|
||||
|
||||
size_t docLength = _pEditView->execute(SCI_GETLENGTH);
|
||||
|
||||
|
@ -473,8 +473,8 @@ void AutoCompletion::getWordArray(vector<generic_string> & wordArray, TCHAR *beg
|
|||
_pEditView->execute(SCI_SETSEARCHFLAGS, flags);
|
||||
intptr_t posFind = _pEditView->searchInTarget(expr.c_str(), expr.length(), 0, docLength);
|
||||
|
||||
generic_string boxId = TEXT("\x1E") + intToString(BOX_IMG_ID);
|
||||
generic_string funcId = TEXT("\x1E") + intToString(FUNC_IMG_ID);
|
||||
wstring boxId = L"\x1E" + intToString(BOX_IMG_ID);
|
||||
wstring funcId = L"\x1E" + intToString(FUNC_IMG_ID);
|
||||
|
||||
while (posFind >= 0)
|
||||
{
|
||||
|
@ -484,7 +484,7 @@ void AutoCompletion::getWordArray(vector<generic_string> & wordArray, TCHAR *beg
|
|||
size_t foundTextLen = wordEnd - wordStart;
|
||||
if (foundTextLen < bufSize)
|
||||
{
|
||||
TCHAR w[bufSize];
|
||||
wchar_t w[bufSize];
|
||||
_pEditView->getGenericText(w, bufSize, wordStart, wordEnd);
|
||||
if (!allChars || (wcsncmp(w, allChars, bufSize) != 0))
|
||||
{
|
||||
|
@ -516,7 +516,7 @@ void AutoCompletion::getWordArray(vector<generic_string> & wordArray, TCHAR *beg
|
|||
}
|
||||
}
|
||||
|
||||
static generic_string addTrailingSlash(const generic_string& path)
|
||||
static wstring addTrailingSlash(const wstring& path)
|
||||
{
|
||||
if (path.length() >=1 && path[path.length() - 1] == '\\')
|
||||
return path;
|
||||
|
@ -524,7 +524,7 @@ static generic_string addTrailingSlash(const generic_string& path)
|
|||
return path + L"\\";
|
||||
}
|
||||
|
||||
static generic_string removeTrailingSlash(const generic_string& path)
|
||||
static wstring removeTrailingSlash(const wstring& path)
|
||||
{
|
||||
if (path.length() >= 1 && path[path.length() - 1] == '\\')
|
||||
return path.substr(0, path.length() - 1);
|
||||
|
@ -532,25 +532,25 @@ static generic_string removeTrailingSlash(const generic_string& path)
|
|||
return path;
|
||||
}
|
||||
|
||||
static bool isDirectory(const generic_string& path)
|
||||
static bool isDirectory(const wstring& path)
|
||||
{
|
||||
DWORD type = ::GetFileAttributes(path.c_str());
|
||||
return type != INVALID_FILE_ATTRIBUTES && (type & FILE_ATTRIBUTE_DIRECTORY);
|
||||
}
|
||||
|
||||
static bool isFile(const generic_string& path)
|
||||
static bool isFile(const wstring& path)
|
||||
{
|
||||
DWORD type = ::GetFileAttributes(path.c_str());
|
||||
return type != INVALID_FILE_ATTRIBUTES && ! (type & FILE_ATTRIBUTE_DIRECTORY);
|
||||
}
|
||||
|
||||
static bool isAllowedBeforeDriveLetter(TCHAR c)
|
||||
static bool isAllowedBeforeDriveLetter(wchar_t c)
|
||||
{
|
||||
locale loc;
|
||||
return c == '\'' || c == '"' || c == '(' || std::isspace(c, loc);
|
||||
}
|
||||
|
||||
static bool getRawPath(const generic_string& input, generic_string &rawPath_out)
|
||||
static bool getRawPath(const wstring& input, wstring &rawPath_out)
|
||||
{
|
||||
// Try to find a path in the given input.
|
||||
// Algorithm: look for a colon. The colon must be preceded by an alphabetic character.
|
||||
|
@ -571,9 +571,9 @@ static bool getRawPath(const generic_string& input, generic_string &rawPath_out)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool getPathsForPathCompletion(const generic_string& input, generic_string &rawPath_out, generic_string &pathToMatch_out)
|
||||
static bool getPathsForPathCompletion(const wstring& input, wstring &rawPath_out, wstring &pathToMatch_out)
|
||||
{
|
||||
generic_string rawPath;
|
||||
wstring rawPath;
|
||||
if (! getRawPath(input, rawPath))
|
||||
{
|
||||
return false;
|
||||
|
@ -605,10 +605,10 @@ static bool getPathsForPathCompletion(const generic_string& input, generic_strin
|
|||
void AutoCompletion::showPathCompletion()
|
||||
{
|
||||
// Get current line (at most MAX_PATH characters "backwards" from current caret).
|
||||
generic_string currentLine;
|
||||
wstring currentLine;
|
||||
{
|
||||
const intptr_t bufSize = MAX_PATH;
|
||||
TCHAR buf[bufSize + 1] = { '\0' };
|
||||
wchar_t buf[bufSize + 1] = { '\0' };
|
||||
const intptr_t currentPos = _pEditView->execute(SCI_GETCURRENTPOS);
|
||||
const auto startPos = std::max<intptr_t>(0, currentPos - bufSize);
|
||||
_pEditView->getGenericText(buf, bufSize + 1, startPos, currentPos);
|
||||
|
@ -623,17 +623,17 @@ void AutoCompletion::showPathCompletion()
|
|||
For instance: the user wants to autocomplete "C:\Wind", and assuming that no such directory
|
||||
exists, this means we should list all files and directories in C:.
|
||||
*/
|
||||
generic_string rawPath, pathToMatch;
|
||||
wstring rawPath, pathToMatch;
|
||||
if (! getPathsForPathCompletion(currentLine, rawPath, pathToMatch))
|
||||
return;
|
||||
|
||||
// Get all files and directories in the path.
|
||||
generic_string autoCompleteEntries;
|
||||
wstring autoCompleteEntries;
|
||||
{
|
||||
HANDLE hFind;
|
||||
WIN32_FIND_DATA data;
|
||||
generic_string pathToMatchPlusSlash = addTrailingSlash(pathToMatch);
|
||||
generic_string searchString = pathToMatchPlusSlash + TEXT("*.*");
|
||||
wstring pathToMatchPlusSlash = addTrailingSlash(pathToMatch);
|
||||
wstring searchString = pathToMatchPlusSlash + L"*.*";
|
||||
hFind = ::FindFirstFile(searchString.c_str(), &data);
|
||||
if (hFind != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
|
@ -646,16 +646,16 @@ void AutoCompletion::showPathCompletion()
|
|||
if (++counter > maxEntries)
|
||||
break;
|
||||
|
||||
if (generic_string(data.cFileName) == TEXT(".") || generic_string(data.cFileName) == TEXT(".."))
|
||||
if (wstring(data.cFileName) == L"." || wstring(data.cFileName) == L"..")
|
||||
continue;
|
||||
|
||||
if (! autoCompleteEntries.empty())
|
||||
autoCompleteEntries += TEXT("\n");
|
||||
autoCompleteEntries += L"\n";
|
||||
|
||||
autoCompleteEntries += pathToMatchPlusSlash;
|
||||
autoCompleteEntries += data.cFileName;
|
||||
if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // If directory, add trailing slash.
|
||||
autoCompleteEntries += TEXT("\\");
|
||||
autoCompleteEntries += L"\\";
|
||||
|
||||
} while (::FindNextFile(hFind, &data));
|
||||
::FindClose(hFind);
|
||||
|
@ -712,7 +712,7 @@ void AutoCompletion::getCloseTag(char *closeTag, size_t closeTagSize, size_t car
|
|||
|
||||
int flags = SCFIND_REGEXP | SCFIND_POSIX;
|
||||
_pEditView->execute(SCI_SETSEARCHFLAGS, flags);
|
||||
TCHAR tag2find[] = TEXT("<[^\\s>]*");
|
||||
wchar_t tag2find[] = L"<[^\\s>]*";
|
||||
|
||||
intptr_t targetStart = _pEditView->searchInTarget(tag2find, lstrlen(tag2find), caretPos, 0);
|
||||
|
||||
|
@ -1047,7 +1047,7 @@ void AutoCompletion::update(int character)
|
|||
return;
|
||||
|
||||
const int wordSize = 64;
|
||||
TCHAR s[wordSize];
|
||||
wchar_t s[wordSize];
|
||||
_pEditView->getWordToCurrentPos(s, wordSize);
|
||||
|
||||
if (lstrlen(s) >= int(nppGUI._autocFromLen))
|
||||
|
@ -1086,12 +1086,12 @@ bool AutoCompletion::setLanguage(LangType language)
|
|||
|
||||
_curLang = language;
|
||||
|
||||
TCHAR path[MAX_PATH];
|
||||
wchar_t path[MAX_PATH];
|
||||
::GetModuleFileName(NULL, path, MAX_PATH);
|
||||
PathRemoveFileSpec(path);
|
||||
wcscat_s(path, TEXT("\\autoCompletion\\"));
|
||||
wcscat_s(path, L"\\autoCompletion\\");
|
||||
wcscat_s(path, getApiFileName());
|
||||
wcscat_s(path, TEXT(".xml"));
|
||||
wcscat_s(path, L".xml");
|
||||
|
||||
if (_pXmlFile)
|
||||
delete _pXmlFile;
|
||||
|
@ -1103,13 +1103,13 @@ bool AutoCompletion::setLanguage(LangType language)
|
|||
if (_funcCompletionActive)
|
||||
{
|
||||
_funcCompletionActive = false; //safety
|
||||
TiXmlNode * pNode = _pXmlFile->FirstChild(TEXT("NotepadPlus"));
|
||||
TiXmlNode * pNode = _pXmlFile->FirstChild(L"NotepadPlus");
|
||||
if (!pNode)
|
||||
return false;
|
||||
pAutoNode = pNode = pNode->FirstChildElement(TEXT("AutoComplete"));
|
||||
pAutoNode = pNode = pNode->FirstChildElement(L"AutoComplete");
|
||||
if (!pNode)
|
||||
return false;
|
||||
pNode = pNode->FirstChildElement(TEXT("KeyWord"));
|
||||
pNode = pNode->FirstChildElement(L"KeyWord");
|
||||
if (!pNode)
|
||||
return false;
|
||||
_pXmlKeyword = reinterpret_cast<TiXmlElement *>(pNode);
|
||||
|
@ -1129,29 +1129,29 @@ bool AutoCompletion::setLanguage(LangType language)
|
|||
_funcCalltip._ignoreCase = true;
|
||||
_funcCalltip._additionalWordChar.clear();
|
||||
|
||||
TiXmlElement * pElem = pAutoNode->FirstChildElement(TEXT("Environment"));
|
||||
TiXmlElement * pElem = pAutoNode->FirstChildElement(L"Environment");
|
||||
if (pElem)
|
||||
{
|
||||
const TCHAR * val = 0;
|
||||
val = pElem->Attribute(TEXT("ignoreCase"));
|
||||
if (val && !lstrcmp(val, TEXT("no")))
|
||||
const wchar_t * val = 0;
|
||||
val = pElem->Attribute(L"ignoreCase");
|
||||
if (val && !lstrcmp(val, L"no"))
|
||||
{
|
||||
_ignoreCase = false;
|
||||
_funcCalltip._ignoreCase = false;
|
||||
}
|
||||
val = pElem->Attribute(TEXT("startFunc"));
|
||||
val = pElem->Attribute(L"startFunc");
|
||||
if (val && val[0])
|
||||
_funcCalltip._start = val[0];
|
||||
val = pElem->Attribute(TEXT("stopFunc"));
|
||||
val = pElem->Attribute(L"stopFunc");
|
||||
if (val && val[0])
|
||||
_funcCalltip._stop = val[0];
|
||||
val = pElem->Attribute(TEXT("paramSeparator"));
|
||||
val = pElem->Attribute(L"paramSeparator");
|
||||
if (val && val[0])
|
||||
_funcCalltip._param = val[0];
|
||||
val = pElem->Attribute(TEXT("terminal"));
|
||||
val = pElem->Attribute(L"terminal");
|
||||
if (val && val[0])
|
||||
_funcCalltip._terminal = val[0];
|
||||
val = pElem->Attribute(TEXT("additionalWordChar"));
|
||||
val = pElem->Attribute(L"additionalWordChar");
|
||||
if (val && val[0])
|
||||
_funcCalltip._additionalWordChar = val;
|
||||
}
|
||||
|
@ -1175,18 +1175,18 @@ bool AutoCompletion::setLanguage(LangType language)
|
|||
//Iterate through all keywords
|
||||
TiXmlElement *funcNode = _pXmlKeyword;
|
||||
|
||||
for (; funcNode; funcNode = funcNode->NextSiblingElement(TEXT("KeyWord")) )
|
||||
for (; funcNode; funcNode = funcNode->NextSiblingElement(L"KeyWord") )
|
||||
{
|
||||
const TCHAR *name = funcNode->Attribute(TEXT("name"));
|
||||
const wchar_t *name = funcNode->Attribute(L"name");
|
||||
if (name)
|
||||
{
|
||||
size_t len = lstrlen(name);
|
||||
if (len)
|
||||
{
|
||||
generic_string word = name;
|
||||
generic_string imgid = TEXT("\x1E");
|
||||
const TCHAR *func = funcNode->Attribute(TEXT("func"));
|
||||
if (func && !lstrcmp(func, TEXT("yes")))
|
||||
wstring word = name;
|
||||
wstring imgid = L"\x1E";
|
||||
const wchar_t *func = funcNode->Attribute(L"func");
|
||||
if (func && !lstrcmp(func, L"yes"))
|
||||
imgid += intToString(FUNC_IMG_ID);
|
||||
else
|
||||
imgid += intToString(BOX_IMG_ID);
|
||||
|
@ -1206,13 +1206,13 @@ bool AutoCompletion::setLanguage(LangType language)
|
|||
for (size_t i = 0, len = _keyWordArray.size(); i < len; ++i)
|
||||
{
|
||||
_keyWords.append(_keyWordArray[i]);
|
||||
_keyWords.append(TEXT(" "));
|
||||
_keyWords.append(L" ");
|
||||
}
|
||||
}
|
||||
return _funcCompletionActive;
|
||||
}
|
||||
|
||||
const TCHAR * AutoCompletion::getApiFileName()
|
||||
const wchar_t * AutoCompletion::getApiFileName()
|
||||
{
|
||||
if (_curLang == L_USER)
|
||||
{
|
||||
|
|
|
@ -106,14 +106,14 @@ private:
|
|||
|
||||
bool _ignoreCase = true;
|
||||
|
||||
std::vector<generic_string> _keyWordArray;
|
||||
generic_string _keyWords;
|
||||
std::vector<std::wstring> _keyWordArray;
|
||||
std::wstring _keyWords;
|
||||
size_t _keyWordMaxLen = 0;
|
||||
|
||||
FunctionCallTip _funcCalltip;
|
||||
|
||||
const TCHAR * getApiFileName();
|
||||
void getWordArray(std::vector<generic_string> & wordArray, TCHAR *beginChars, TCHAR *excludeChars);
|
||||
const wchar_t * getApiFileName();
|
||||
void getWordArray(std::vector<std::wstring> & wordArray, wchar_t *beginChars, wchar_t *excludeChars);
|
||||
|
||||
// Type of autocomplete function
|
||||
enum AutocompleteType {
|
||||
|
|
|
@ -52,7 +52,7 @@ FunctionListPanel::~FunctionListPanel()
|
|||
_iconListVector.clear();
|
||||
}
|
||||
|
||||
void FunctionListPanel::addEntry(const TCHAR *nodeName, const TCHAR *displayText, size_t pos)
|
||||
void FunctionListPanel::addEntry(const wchar_t *nodeName, const wchar_t *displayText, size_t pos)
|
||||
{
|
||||
HTREEITEM itemParent = NULL;
|
||||
std::wstring posStr = std::to_wstring(pos);
|
||||
|
@ -64,7 +64,7 @@ void FunctionListPanel::addEntry(const TCHAR *nodeName, const TCHAR *displayText
|
|||
itemParent = _treeView.searchSubItemByName(nodeName, root);
|
||||
if (!itemParent)
|
||||
{
|
||||
generic_string* invalidValueStr = new generic_string(posStr);
|
||||
wstring* invalidValueStr = new wstring(posStr);
|
||||
_posStrs.push_back(invalidValueStr);
|
||||
LPARAM lParamInvalidPosStr = reinterpret_cast<LPARAM>(invalidValueStr);
|
||||
|
||||
|
@ -74,7 +74,7 @@ void FunctionListPanel::addEntry(const TCHAR *nodeName, const TCHAR *displayText
|
|||
else
|
||||
itemParent = root;
|
||||
|
||||
generic_string* posString = new generic_string(posStr);
|
||||
wstring* posString = new wstring(posStr);
|
||||
_posStrs.push_back(posString);
|
||||
LPARAM lParamPosStr = reinterpret_cast<LPARAM>(posString);
|
||||
|
||||
|
@ -87,7 +87,7 @@ void FunctionListPanel::removeAllEntries()
|
|||
}
|
||||
|
||||
// bodyOpenSybe mbol & bodyCloseSymbol should be RE
|
||||
size_t FunctionListPanel::getBodyClosePos(size_t begin, const TCHAR *bodyOpenSymbol, const TCHAR *bodyCloseSymbol)
|
||||
size_t FunctionListPanel::getBodyClosePos(size_t begin, const wchar_t *bodyOpenSymbol, const wchar_t *bodyCloseSymbol)
|
||||
{
|
||||
size_t cntOpen = 1;
|
||||
|
||||
|
@ -96,11 +96,11 @@ size_t FunctionListPanel::getBodyClosePos(size_t begin, const TCHAR *bodyOpenSym
|
|||
if (begin >= docLen)
|
||||
return docLen;
|
||||
|
||||
generic_string exprToSearch = TEXT("(");
|
||||
wstring exprToSearch = L"(";
|
||||
exprToSearch += bodyOpenSymbol;
|
||||
exprToSearch += TEXT("|");
|
||||
exprToSearch += L"|";
|
||||
exprToSearch += bodyCloseSymbol;
|
||||
exprToSearch += TEXT(")");
|
||||
exprToSearch += L")";
|
||||
|
||||
|
||||
int flags = SCFIND_REGEXP | SCFIND_POSIX;
|
||||
|
@ -139,27 +139,27 @@ size_t FunctionListPanel::getBodyClosePos(size_t begin, const TCHAR *bodyOpenSym
|
|||
return targetEnd;
|
||||
}
|
||||
|
||||
generic_string FunctionListPanel::parseSubLevel(size_t begin, size_t end, std::vector< generic_string > dataToSearch, intptr_t& foundPos)
|
||||
wstring FunctionListPanel::parseSubLevel(size_t begin, size_t end, std::vector< wstring > dataToSearch, intptr_t& foundPos)
|
||||
{
|
||||
if (begin >= end)
|
||||
{
|
||||
foundPos = -1;
|
||||
return TEXT("");
|
||||
return L"";
|
||||
}
|
||||
|
||||
if (!dataToSearch.size())
|
||||
return TEXT("");
|
||||
return L"";
|
||||
|
||||
int flags = SCFIND_REGEXP | SCFIND_POSIX;
|
||||
|
||||
(*_ppEditView)->execute(SCI_SETSEARCHFLAGS, flags);
|
||||
const TCHAR *regExpr2search = dataToSearch[0].c_str();
|
||||
const wchar_t *regExpr2search = dataToSearch[0].c_str();
|
||||
intptr_t targetStart = (*_ppEditView)->searchInTarget(regExpr2search, lstrlen(regExpr2search), begin, end);
|
||||
|
||||
if (targetStart < 0)
|
||||
{
|
||||
foundPos = -1;
|
||||
return TEXT("");
|
||||
return L"";
|
||||
}
|
||||
intptr_t targetEnd = (*_ppEditView)->execute(SCI_GETTARGETEND);
|
||||
|
||||
|
@ -170,7 +170,7 @@ generic_string FunctionListPanel::parseSubLevel(size_t begin, size_t end, std::v
|
|||
}
|
||||
else // only one processed element, so we conclude the result
|
||||
{
|
||||
TCHAR foundStr[1024]{};
|
||||
wchar_t foundStr[1024]{};
|
||||
|
||||
(*_ppEditView)->getGenericText(foundStr, 1024, targetStart, targetEnd);
|
||||
|
||||
|
@ -179,7 +179,7 @@ generic_string FunctionListPanel::parseSubLevel(size_t begin, size_t end, std::v
|
|||
}
|
||||
}
|
||||
|
||||
void FunctionListPanel::addInStateArray(TreeStateNode tree2Update, const TCHAR *searchText, bool isSorted)
|
||||
void FunctionListPanel::addInStateArray(TreeStateNode tree2Update, const wchar_t *searchText, bool isSorted)
|
||||
{
|
||||
bool found = false;
|
||||
for (size_t i = 0, len = _treeParams.size(); i < len; ++i)
|
||||
|
@ -202,7 +202,7 @@ void FunctionListPanel::addInStateArray(TreeStateNode tree2Update, const TCHAR *
|
|||
}
|
||||
}
|
||||
|
||||
TreeParams* FunctionListPanel::getFromStateArray(generic_string fullFilePath)
|
||||
TreeParams* FunctionListPanel::getFromStateArray(wstring fullFilePath)
|
||||
{
|
||||
for (size_t i = 0, len = _treeParams.size(); i < len; ++i)
|
||||
{
|
||||
|
@ -219,7 +219,7 @@ void FunctionListPanel::sortOrUnsort()
|
|||
_pTreeView->sort(_pTreeView->getRoot(), true);
|
||||
else
|
||||
{
|
||||
TCHAR text2search[MAX_PATH] = { '\0' };
|
||||
wchar_t text2search[MAX_PATH] = { '\0' };
|
||||
::SendMessage(_hSearchEdit, WM_GETTEXT, MAX_PATH, reinterpret_cast<LPARAM>(text2search));
|
||||
|
||||
if (text2search[0] == '\0') // main view
|
||||
|
@ -234,9 +234,9 @@ void FunctionListPanel::sortOrUnsort()
|
|||
return;
|
||||
|
||||
_treeViewSearchResult.removeAllItems();
|
||||
const TCHAR *fn = ((*_ppEditView)->getCurrentBuffer())->getFileName();
|
||||
const wchar_t *fn = ((*_ppEditView)->getCurrentBuffer())->getFileName();
|
||||
|
||||
generic_string* invalidValueStr = new generic_string(TEXT("-1"));
|
||||
wstring* invalidValueStr = new wstring(L"-1");
|
||||
_posStrs.push_back(invalidValueStr);
|
||||
LPARAM lParamInvalidPosStr = reinterpret_cast<LPARAM>(invalidValueStr);
|
||||
_treeViewSearchResult.addItem(fn, NULL, INDEX_ROOT, lParamInvalidPosStr);
|
||||
|
@ -252,8 +252,8 @@ void FunctionListPanel::sortOrUnsort()
|
|||
|
||||
int CALLBACK FunctionListPanel::categorySortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM /*lParamSort*/)
|
||||
{
|
||||
generic_string* posString1 = reinterpret_cast<generic_string*>(lParam1);
|
||||
generic_string* posString2 = reinterpret_cast<generic_string*>(lParam2);
|
||||
wstring* posString1 = reinterpret_cast<wstring*>(lParam1);
|
||||
wstring* posString2 = reinterpret_cast<wstring*>(lParam2);
|
||||
|
||||
size_t pos1 = _wtoi(posString1->c_str());
|
||||
size_t pos2 = _wtoi(posString2->c_str());
|
||||
|
@ -263,23 +263,23 @@ int CALLBACK FunctionListPanel::categorySortFunc(LPARAM lParam1, LPARAM lParam2,
|
|||
return -1;
|
||||
}
|
||||
|
||||
bool FunctionListPanel::serialize(const generic_string & outputFilename)
|
||||
bool FunctionListPanel::serialize(const wstring & outputFilename)
|
||||
{
|
||||
Buffer* currentBuf = (*_ppEditView)->getCurrentBuffer();
|
||||
const TCHAR* fileNameLabel = currentBuf->getFileName();
|
||||
const wchar_t* fileNameLabel = currentBuf->getFileName();
|
||||
|
||||
generic_string fname2write;
|
||||
wstring fname2write;
|
||||
if (outputFilename.empty()) // if outputFilename is not given, get the current file path by adding the file extension
|
||||
{
|
||||
const TCHAR *fullFilePath = currentBuf->getFullPathName();
|
||||
const wchar_t *fullFilePath = currentBuf->getFullPathName();
|
||||
|
||||
// Export function list from an existing file
|
||||
bool exportFuncntionList = (NppParameters::getInstance()).doFunctionListExport();
|
||||
if (exportFuncntionList && ::PathFileExists(fullFilePath))
|
||||
{
|
||||
fname2write = fullFilePath;
|
||||
fname2write += TEXT(".result");
|
||||
fname2write += TEXT(".json");
|
||||
fname2write += L".result";
|
||||
fname2write += L".json";
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
@ -352,24 +352,24 @@ void FunctionListPanel::reload()
|
|||
bool isOK = _treeView.retrieveFoldingStateTo(currentTree, _treeView.getRoot());
|
||||
if (isOK)
|
||||
{
|
||||
TCHAR text2Search[MAX_PATH] = { '\0' };
|
||||
wchar_t text2Search[MAX_PATH] = { '\0' };
|
||||
::SendMessage(_hSearchEdit, WM_GETTEXT, MAX_PATH, reinterpret_cast<LPARAM>(text2Search));
|
||||
bool isSorted = shouldSort();
|
||||
addInStateArray(currentTree, text2Search, isSorted);
|
||||
}
|
||||
removeAllEntries();
|
||||
::SendMessage(_hSearchEdit, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(TEXT("")));
|
||||
::SendMessage(_hSearchEdit, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(L""));
|
||||
setSort(false);
|
||||
|
||||
_foundFuncInfos.clear();
|
||||
|
||||
Buffer* currentBuf = (*_ppEditView)->getCurrentBuffer();
|
||||
const TCHAR *fn = currentBuf->getFileName();
|
||||
const wchar_t *fn = currentBuf->getFileName();
|
||||
LangType langID = currentBuf->getLangType();
|
||||
if (langID == L_JS)
|
||||
langID = L_JAVASCRIPT;
|
||||
|
||||
const TCHAR *udln = NULL;
|
||||
const wchar_t *udln = NULL;
|
||||
if (langID == L_USER)
|
||||
{
|
||||
udln = currentBuf->getUserDefineLangName();
|
||||
|
@ -380,7 +380,7 @@ void FunctionListPanel::reload()
|
|||
bool parsedOK = _funcParserMgr.parse(_foundFuncInfos, AssociationInfo(-1, langID, ext, udln));
|
||||
if (parsedOK)
|
||||
{
|
||||
generic_string* invalidValueStr = new generic_string(TEXT("-1"));
|
||||
wstring* invalidValueStr = new wstring(L"-1");
|
||||
_posStrs.push_back(invalidValueStr);
|
||||
LPARAM lParamInvalidPosStr = reinterpret_cast<LPARAM>(invalidValueStr);
|
||||
|
||||
|
@ -397,9 +397,9 @@ void FunctionListPanel::reload()
|
|||
if (root)
|
||||
{
|
||||
currentBuf = (*_ppEditView)->getCurrentBuffer();
|
||||
const TCHAR *fullFilePath = currentBuf->getFullPathName();
|
||||
const wchar_t *fullFilePath = currentBuf->getFullPathName();
|
||||
|
||||
generic_string* fullPathStr = new generic_string(fullFilePath);
|
||||
wstring* fullPathStr = new wstring(fullFilePath);
|
||||
_posStrs.push_back(fullPathStr);
|
||||
LPARAM lParamFullPathStr = reinterpret_cast<LPARAM>(fullPathStr);
|
||||
|
||||
|
@ -407,7 +407,7 @@ void FunctionListPanel::reload()
|
|||
TreeParams *previousParams = getFromStateArray(fullFilePath);
|
||||
if (!previousParams)
|
||||
{
|
||||
::SendMessage(_hSearchEdit, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(TEXT("")));
|
||||
::SendMessage(_hSearchEdit, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(L""));
|
||||
setSort(NppParameters::getInstance().getNppGUI()._shouldSortFunctionList);
|
||||
sortOrUnsort();
|
||||
_treeView.expand(root);
|
||||
|
@ -440,7 +440,7 @@ void FunctionListPanel::initPreferencesMenu()
|
|||
NativeLangSpeaker* pNativeSpeaker = NppParameters::getInstance().getNativeLangSpeaker();
|
||||
const NppGUI& nppGUI = NppParameters::getInstance().getNppGUI();
|
||||
|
||||
generic_string shouldSortFunctionListStr = pNativeSpeaker->getAttrNameStr(TEXT("Sort functions (A to Z) by default"), FL_FUCTIONLISTROOTNODE, FL_PREFERENCE_INITIALSORT);
|
||||
wstring shouldSortFunctionListStr = pNativeSpeaker->getAttrNameStr(L"Sort functions (A to Z) by default", FL_FUCTIONLISTROOTNODE, FL_PREFERENCE_INITIALSORT);
|
||||
|
||||
_hPreferencesMenu = ::CreatePopupMenu();
|
||||
::InsertMenu(_hPreferencesMenu, 0, MF_BYCOMMAND, FL_PREFERENCES_INITIALSORT_ID, shouldSortFunctionListStr.c_str());
|
||||
|
@ -498,7 +498,7 @@ void FunctionListPanel::findMarkEntry(HTREEITEM htItem, LONG line)
|
|||
tvItem.mask = TVIF_IMAGE | TVIF_PARAM;
|
||||
::SendMessage(_treeViewSearchResult.getHSelf(), TVM_GETITEM, 0, reinterpret_cast<LPARAM>(&tvItem));
|
||||
|
||||
generic_string *posStr = reinterpret_cast<generic_string *>(tvItem.lParam);
|
||||
wstring *posStr = reinterpret_cast<wstring *>(tvItem.lParam);
|
||||
if (posStr)
|
||||
{
|
||||
int pos = _wtoi(posStr->c_str());
|
||||
|
@ -530,11 +530,11 @@ void FunctionListPanel::init(HINSTANCE hInst, HWND hPere, ScintillaEditView **pp
|
|||
_ppEditView = ppEditView;
|
||||
NppParameters& nppParams = NppParameters::getInstance();
|
||||
|
||||
generic_string funcListXmlPath = nppParams.getUserPath();
|
||||
pathAppend(funcListXmlPath, TEXT("functionList"));
|
||||
wstring funcListXmlPath = nppParams.getUserPath();
|
||||
pathAppend(funcListXmlPath, L"functionList");
|
||||
|
||||
generic_string funcListDefaultXmlPath = nppParams.getNppPath();
|
||||
pathAppend(funcListDefaultXmlPath, TEXT("functionList"));
|
||||
wstring funcListDefaultXmlPath = nppParams.getNppPath();
|
||||
pathAppend(funcListDefaultXmlPath, L"functionList");
|
||||
|
||||
bool doLocalConf = nppParams.isLocal();
|
||||
|
||||
|
@ -579,7 +579,7 @@ bool FunctionListPanel::openSelection(const TreeView & treeView)
|
|||
return false;
|
||||
}
|
||||
|
||||
generic_string *posStr = reinterpret_cast<generic_string *>(tvItem.lParam);
|
||||
wstring *posStr = reinterpret_cast<wstring *>(tvItem.lParam);
|
||||
if (!posStr)
|
||||
return false;
|
||||
|
||||
|
@ -651,7 +651,7 @@ void FunctionListPanel::notified(LPNMHDR notification)
|
|||
}
|
||||
else if (ptvkd->wVKey == VK_ESCAPE)
|
||||
{
|
||||
::SendMessage(_hSearchEdit, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(TEXT("")));
|
||||
::SendMessage(_hSearchEdit, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(L""));
|
||||
SetWindowLongPtr(_hSelf, DWLP_MSGRESULT, 1); // remove beep
|
||||
PostMessage(_hParent, WM_COMMAND, SCEN_SETFOCUS << 16, reinterpret_cast<LPARAM>((*_ppEditView)->getHSelf()));
|
||||
}
|
||||
|
@ -671,7 +671,7 @@ void FunctionListPanel::notified(LPNMHDR notification)
|
|||
|
||||
void FunctionListPanel::searchFuncAndSwitchView()
|
||||
{
|
||||
TCHAR text2search[MAX_PATH] = { '\0' };
|
||||
wchar_t text2search[MAX_PATH] = { '\0' };
|
||||
::SendMessage(_hSearchEdit, WM_GETTEXT, MAX_PATH, reinterpret_cast<LPARAM>(text2search));
|
||||
|
||||
if (text2search[0] == '\0')
|
||||
|
@ -686,9 +686,9 @@ void FunctionListPanel::searchFuncAndSwitchView()
|
|||
return;
|
||||
|
||||
_treeViewSearchResult.removeAllItems();
|
||||
const TCHAR *fn = ((*_ppEditView)->getCurrentBuffer())->getFileName();
|
||||
const wchar_t *fn = ((*_ppEditView)->getCurrentBuffer())->getFileName();
|
||||
|
||||
generic_string* invalidValueStr = new generic_string(TEXT("-1"));
|
||||
wstring* invalidValueStr = new wstring(L"-1");
|
||||
_posStrs.push_back(invalidValueStr);
|
||||
LPARAM lParamInvalidPosStr = reinterpret_cast<LPARAM>(invalidValueStr);
|
||||
_treeViewSearchResult.addItem(fn, NULL, INDEX_ROOT, lParamInvalidPosStr);
|
||||
|
@ -732,7 +732,7 @@ static LRESULT CALLBACK funclstSearchEditProc(HWND hwnd, UINT message, WPARAM wP
|
|||
{
|
||||
if (wParam == VK_ESCAPE)
|
||||
{
|
||||
::SendMessage(hwnd, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(TEXT("")));
|
||||
::SendMessage(hwnd, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(L""));
|
||||
return FALSE;
|
||||
}
|
||||
else if (wParam == VK_TAB)
|
||||
|
@ -772,7 +772,7 @@ intptr_t CALLBACK FunctionListPanel::run_dlgProc(UINT message, WPARAM wParam, LP
|
|||
// Make edit field red if not found
|
||||
case WM_CTLCOLOREDIT :
|
||||
{
|
||||
TCHAR text2search[MAX_PATH] = { '\0' };
|
||||
wchar_t text2search[MAX_PATH] = { '\0' };
|
||||
::SendMessage(_hSearchEdit, WM_GETTEXT, MAX_PATH, reinterpret_cast<LPARAM>(text2search));
|
||||
bool textFound = false;
|
||||
if (text2search[0] == '\0')
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "functionParser.h"
|
||||
#include "TreeView.h"
|
||||
|
||||
#define FL_PANELTITLE TEXT("Function List")
|
||||
#define FL_PANELTITLE L"Function List"
|
||||
#define FL_FUCTIONLISTROOTNODE "FunctionList"
|
||||
|
||||
#define FL_SORTLOCALNODENAME "SortTip"
|
||||
|
@ -55,11 +55,11 @@ root
|
|||
*/
|
||||
|
||||
struct SearchParameters {
|
||||
generic_string _text2Find;
|
||||
std::wstring _text2Find;
|
||||
bool _doSort = false;
|
||||
|
||||
bool hasParams()const{
|
||||
return (_text2Find != TEXT("") || _doSort);
|
||||
return (_text2Find != L"" || _doSort);
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -98,8 +98,8 @@ public:
|
|||
void sortOrUnsort();
|
||||
void reload();
|
||||
void markEntry();
|
||||
bool serialize(const generic_string & outputFilename = TEXT(""));
|
||||
void addEntry(const TCHAR *node, const TCHAR *displayText, size_t pos);
|
||||
bool serialize(const std::wstring & outputFilename = L"");
|
||||
void addEntry(const wchar_t *node, const wchar_t *displayText, size_t pos);
|
||||
void removeAllEntries();
|
||||
void searchFuncAndSwitchView();
|
||||
|
||||
|
@ -122,24 +122,24 @@ private:
|
|||
long _findEndLine = -1;
|
||||
HTREEITEM _findItem = nullptr;
|
||||
|
||||
generic_string _sortTipStr = TEXT("Sort");
|
||||
generic_string _reloadTipStr = TEXT("Reload");
|
||||
generic_string _preferenceTipStr = TEXT("Preferences");
|
||||
std::wstring _sortTipStr = L"Sort";
|
||||
std::wstring _reloadTipStr = L"Reload";
|
||||
std::wstring _preferenceTipStr = L"Preferences";
|
||||
|
||||
std::vector<foundInfo> _foundFuncInfos;
|
||||
|
||||
std::vector<generic_string*> _posStrs;
|
||||
std::vector<std::wstring*> _posStrs;
|
||||
|
||||
ScintillaEditView **_ppEditView = nullptr;
|
||||
FunctionParsersManager _funcParserMgr;
|
||||
std::vector< std::pair<int, int> > _skipZones;
|
||||
std::vector<TreeParams> _treeParams;
|
||||
|
||||
generic_string parseSubLevel(size_t begin, size_t end, std::vector< generic_string > dataToSearch, intptr_t& foundPos);
|
||||
size_t getBodyClosePos(size_t begin, const TCHAR *bodyOpenSymbol, const TCHAR *bodyCloseSymbol);
|
||||
std::wstring parseSubLevel(size_t begin, size_t end, std::vector< std::wstring > dataToSearch, intptr_t& foundPos);
|
||||
size_t getBodyClosePos(size_t begin, const wchar_t *bodyOpenSymbol, const wchar_t *bodyCloseSymbol);
|
||||
void notified(LPNMHDR notification);
|
||||
void addInStateArray(TreeStateNode tree2Update, const TCHAR *searchText, bool isSorted);
|
||||
TreeParams* getFromStateArray(generic_string fullFilePath);
|
||||
void addInStateArray(TreeStateNode tree2Update, const wchar_t *searchText, bool isSorted);
|
||||
TreeParams* getFromStateArray(std::wstring fullFilePath);
|
||||
bool openSelection(const TreeView &treeView);
|
||||
bool shouldSort();
|
||||
void setSort(bool isEnabled);
|
||||
|
|
|
@ -65,28 +65,28 @@ void ShortcutMapper::getClientRect(RECT& rc) const
|
|||
::InflateRect(&rc, -padding, 0);
|
||||
}
|
||||
|
||||
generic_string ShortcutMapper::getTabString(size_t i) const
|
||||
wstring ShortcutMapper::getTabString(size_t i) const
|
||||
{
|
||||
if (i >= _nbTab)
|
||||
return TEXT("");
|
||||
return L"";
|
||||
|
||||
NativeLangSpeaker* nativeLangSpeaker = NppParameters::getInstance().getNativeLangSpeaker();
|
||||
switch (i)
|
||||
{
|
||||
case 1:
|
||||
return nativeLangSpeaker->getShortcutMapperLangStr("MacrosTab", TEXT("Macros"));
|
||||
return nativeLangSpeaker->getShortcutMapperLangStr("MacrosTab", L"Macros");
|
||||
|
||||
case 2:
|
||||
return nativeLangSpeaker->getShortcutMapperLangStr("RunCommandsTab", TEXT("Run commands"));
|
||||
return nativeLangSpeaker->getShortcutMapperLangStr("RunCommandsTab", L"Run commands");
|
||||
|
||||
case 3:
|
||||
return nativeLangSpeaker->getShortcutMapperLangStr("PluginCommandsTab", TEXT("Plugin commands"));
|
||||
return nativeLangSpeaker->getShortcutMapperLangStr("PluginCommandsTab", L"Plugin commands");
|
||||
|
||||
case 4:
|
||||
return nativeLangSpeaker->getShortcutMapperLangStr("ScintillaCommandsTab", TEXT("Scintilla commands"));
|
||||
return nativeLangSpeaker->getShortcutMapperLangStr("ScintillaCommandsTab", L"Scintilla commands");
|
||||
|
||||
default: //0
|
||||
return nativeLangSpeaker->getShortcutMapperLangStr("MainMenuTab", TEXT("Main menu"));
|
||||
return nativeLangSpeaker->getShortcutMapperLangStr("MainMenuTab", L"Main menu");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -166,16 +166,16 @@ void ShortcutMapper::initBabyGrid()
|
|||
|
||||
NativeLangSpeaker* nativeLangSpeaker = NppParameters::getInstance().getNativeLangSpeaker();
|
||||
nativeLangSpeaker->changeDlgLang(_hSelf, "ShortcutMapper");
|
||||
_conflictInfoOk = nativeLangSpeaker->getShortcutMapperLangStr("ConflictInfoOk", TEXT("No shortcut conflicts for this item."));
|
||||
_conflictInfoEditing = nativeLangSpeaker->getShortcutMapperLangStr("ConflictInfoEditing", TEXT("No conflicts . . ."));
|
||||
_conflictInfoOk = nativeLangSpeaker->getShortcutMapperLangStr("ConflictInfoOk", L"No shortcut conflicts for this item.");
|
||||
_conflictInfoEditing = nativeLangSpeaker->getShortcutMapperLangStr("ConflictInfoEditing", L"No conflicts . . .");
|
||||
}
|
||||
|
||||
generic_string ShortcutMapper::getTextFromCombo(HWND hCombo)
|
||||
wstring ShortcutMapper::getTextFromCombo(HWND hCombo)
|
||||
{
|
||||
const int NB_MAX(128);
|
||||
TCHAR str[NB_MAX](TEXT("\0"));
|
||||
wchar_t str[NB_MAX](L"\0");
|
||||
::SendMessage(hCombo, WM_GETTEXT, NB_MAX, reinterpret_cast<LPARAM>(str));
|
||||
generic_string res(str);
|
||||
wstring res(str);
|
||||
return stringToLower(res);
|
||||
}
|
||||
|
||||
|
@ -194,7 +194,7 @@ bool ShortcutMapper::isFilterValid(Shortcut sc)
|
|||
|
||||
for (size_t i = 0; i < filterSize; ++i)
|
||||
{
|
||||
generic_string filterWord = _shortcutFilter.at(i);
|
||||
wstring filterWord = _shortcutFilter.at(i);
|
||||
// every word must be matched by keycombo or name
|
||||
if (shortcut_name.find(filterWord) == std::string::npos &&
|
||||
shortcut_value.find(filterWord) == std::string::npos)
|
||||
|
@ -219,7 +219,7 @@ bool ShortcutMapper::isFilterValid(PluginCmdShortcut sc)
|
|||
|
||||
for (size_t i = 0; i < filterSize; ++i)
|
||||
{
|
||||
generic_string filterWord = _shortcutFilter.at(i);
|
||||
wstring filterWord = _shortcutFilter.at(i);
|
||||
// every word must be matched by keycombo or name or plugin name
|
||||
if (shortcut_name.find(filterWord) == std::string::npos &&
|
||||
shortcut_value.find(filterWord) == std::string::npos &&
|
||||
|
@ -244,7 +244,7 @@ bool ShortcutMapper::isFilterValid(ScintillaKeyMap sc)
|
|||
|
||||
for (size_t i = 0; i < filterSize; ++i)
|
||||
{
|
||||
generic_string filterWord = _shortcutFilter.at(i);
|
||||
wstring filterWord = _shortcutFilter.at(i);
|
||||
// every word must be matched by keycombo or name
|
||||
if (shortcut_name.find(filterWord) == std::string::npos &&
|
||||
shortcut_value.find(filterWord) == std::string::npos)
|
||||
|
@ -262,8 +262,8 @@ void ShortcutMapper::fillOutBabyGrid()
|
|||
|
||||
size_t nbItems = 0;
|
||||
NativeLangSpeaker* nativeLangSpeaker = nppParam.getNativeLangSpeaker();
|
||||
generic_string nameStr = nativeLangSpeaker->getShortcutMapperLangStr("ColumnName", TEXT("Name"));
|
||||
generic_string shortcutStr = nativeLangSpeaker->getShortcutMapperLangStr("ColumnShortcut", TEXT("Shortcut"));
|
||||
wstring nameStr = nativeLangSpeaker->getShortcutMapperLangStr("ColumnName", L"Name");
|
||||
wstring shortcutStr = nativeLangSpeaker->getShortcutMapperLangStr("ColumnShortcut", L"Shortcut");
|
||||
|
||||
_babygrid.setText(0, 1, nameStr.c_str());
|
||||
_babygrid.setText(0, 2, shortcutStr.c_str());
|
||||
|
@ -274,7 +274,7 @@ void ShortcutMapper::fillOutBabyGrid()
|
|||
{
|
||||
nbItems = nppParam.getUserShortcuts().size();
|
||||
_babygrid.setLineColNumber(nbItems, 3);
|
||||
generic_string categoryStr = nativeLangSpeaker->getShortcutMapperLangStr("ColumnCategory", TEXT("Category"));
|
||||
wstring categoryStr = nativeLangSpeaker->getShortcutMapperLangStr("ColumnCategory", L"Category");
|
||||
_babygrid.setText(0, 3, categoryStr.c_str());
|
||||
}
|
||||
break;
|
||||
|
@ -297,7 +297,7 @@ void ShortcutMapper::fillOutBabyGrid()
|
|||
{
|
||||
nbItems = nppParam.getPluginCommandList().size();
|
||||
_babygrid.setLineColNumber(nbItems, 3);
|
||||
generic_string pluginStr = nativeLangSpeaker->getShortcutMapperLangStr("ColumnPlugin", TEXT("Plugin"));
|
||||
wstring pluginStr = nativeLangSpeaker->getShortcutMapperLangStr("ColumnPlugin", L"Plugin");
|
||||
_babygrid.setText(0, 3, pluginStr.c_str());
|
||||
}
|
||||
break;
|
||||
|
@ -314,15 +314,15 @@ void ShortcutMapper::fillOutBabyGrid()
|
|||
size_t cs_index = 0;
|
||||
|
||||
// make _shortcutFilter a list of the words in IDC_BABYGRID_FILTER
|
||||
generic_string shortcutFilterStr = getTextFromCombo(::GetDlgItem(_hSelf, IDC_BABYGRID_FILTER));
|
||||
const generic_string whitespace(TEXT(" "));
|
||||
std::vector<generic_string> shortcutFilterWithEmpties;
|
||||
wstring shortcutFilterStr = getTextFromCombo(::GetDlgItem(_hSelf, IDC_BABYGRID_FILTER));
|
||||
const wstring whitespace(L" ");
|
||||
std::vector<wstring> shortcutFilterWithEmpties;
|
||||
stringSplit(shortcutFilterStr, whitespace, shortcutFilterWithEmpties);
|
||||
// now add only the non-empty strings in the split list to _shortcutFilter
|
||||
_shortcutFilter = std::vector<generic_string>();
|
||||
_shortcutFilter = std::vector<wstring>();
|
||||
for (size_t i = 0; i < shortcutFilterWithEmpties.size(); ++i)
|
||||
{
|
||||
generic_string filterWord = shortcutFilterWithEmpties.at(i);
|
||||
wstring filterWord = shortcutFilterWithEmpties.at(i);
|
||||
if (!filterWord.empty())
|
||||
_shortcutFilter.push_back(filterWord);
|
||||
}
|
||||
|
@ -712,7 +712,7 @@ intptr_t CALLBACK ShortcutMapper::run_dlgProc(UINT message, WPARAM wParam, LPARA
|
|||
if (!wParam || !lParam)
|
||||
break;
|
||||
|
||||
generic_string conflictInfo;
|
||||
wstring conflictInfo;
|
||||
|
||||
// In case of using filter will make the filtered items change index, so here we get its real index
|
||||
size_t realIndexOfSelectedItem = _shortcutIndex[_babygrid.getSelectedRow() - 1];
|
||||
|
@ -1073,8 +1073,8 @@ intptr_t CALLBACK ShortcutMapper::run_dlgProc(UINT message, WPARAM wParam, LPARA
|
|||
NppParameters& nppParam = NppParameters::getInstance();
|
||||
int res = nppParam.getNativeLangSpeaker()->messageBox("SCMapperDoDeleteOrNot",
|
||||
_hSelf,
|
||||
TEXT("Are you sure you want to delete this shortcut?"),
|
||||
TEXT("Are you sure?"),
|
||||
L"Are you sure you want to delete this shortcut?",
|
||||
L"Are you sure?",
|
||||
MB_OKCANCEL);
|
||||
|
||||
if (res == IDOK)
|
||||
|
@ -1226,9 +1226,9 @@ intptr_t CALLBACK ShortcutMapper::run_dlgProc(UINT message, WPARAM wParam, LPARA
|
|||
{
|
||||
vector<MenuItemUnit> itemUnitArray;
|
||||
NativeLangSpeaker* nativeLangSpeaker = NppParameters::getInstance().getNativeLangSpeaker();
|
||||
generic_string modifyStr = nativeLangSpeaker->getShortcutMapperLangStr("ModifyContextMenu", TEXT("Modify"));
|
||||
generic_string deleteStr = nativeLangSpeaker->getShortcutMapperLangStr("DeleteContextMenu", TEXT("Delete"));
|
||||
generic_string clearStr = nativeLangSpeaker->getShortcutMapperLangStr("ClearContextMenu", TEXT("Clear"));
|
||||
wstring modifyStr = nativeLangSpeaker->getShortcutMapperLangStr("ModifyContextMenu", L"Modify");
|
||||
wstring deleteStr = nativeLangSpeaker->getShortcutMapperLangStr("DeleteContextMenu", L"Delete");
|
||||
wstring clearStr = nativeLangSpeaker->getShortcutMapperLangStr("ClearContextMenu", L"Clear");
|
||||
itemUnitArray.push_back(MenuItemUnit(IDM_BABYGRID_MODIFY, modifyStr.c_str()));
|
||||
itemUnitArray.push_back(MenuItemUnit(IDM_BABYGRID_DELETE, deleteStr.c_str()));
|
||||
itemUnitArray.push_back(MenuItemUnit(IDM_BABYGRID_CLEAR, clearStr.c_str()));
|
||||
|
@ -1301,7 +1301,7 @@ intptr_t CALLBACK ShortcutMapper::run_dlgProc(UINT message, WPARAM wParam, LPARA
|
|||
// In case of using filter will make the filtered items change index, so here we get its real index
|
||||
size_t realIndexOfSelectedItem = _shortcutIndex[currentIndex];
|
||||
|
||||
generic_string conflictInfo;
|
||||
wstring conflictInfo;
|
||||
|
||||
switch (_currentState)
|
||||
{
|
||||
|
@ -1378,7 +1378,7 @@ intptr_t CALLBACK ShortcutMapper::run_dlgProc(UINT message, WPARAM wParam, LPARA
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
bool ShortcutMapper::findKeyConflicts(__inout_opt generic_string * const keyConflictLocation,
|
||||
bool ShortcutMapper::findKeyConflicts(__inout_opt wstring * const keyConflictLocation,
|
||||
const KeyCombo & itemKeyComboToTest, const size_t & itemIndexToTest) const
|
||||
{
|
||||
if (itemKeyComboToTest._key == 0) //no key assignment
|
||||
|
@ -1411,15 +1411,15 @@ bool ShortcutMapper::findKeyConflicts(__inout_opt generic_string * const keyConf
|
|||
else
|
||||
{
|
||||
if (!keyConflictLocation->empty())
|
||||
*keyConflictLocation += TEXT("\r\n");
|
||||
*keyConflictLocation += L"\r\n";
|
||||
*keyConflictLocation += _tabNames[gridState];
|
||||
*keyConflictLocation += TEXT(" | ");
|
||||
*keyConflictLocation += L" | ";
|
||||
*keyConflictLocation += std::to_wstring(itemIndex + 1);
|
||||
*keyConflictLocation += TEXT(" ");
|
||||
*keyConflictLocation += L" ";
|
||||
*keyConflictLocation += string2wstring(vShortcuts[itemIndex].getName(), CP_UTF8);
|
||||
*keyConflictLocation += TEXT(" ( ");
|
||||
*keyConflictLocation += L" ( ";
|
||||
*keyConflictLocation += string2wstring(vShortcuts[itemIndex].toString(), CP_UTF8);
|
||||
*keyConflictLocation += TEXT(" )");
|
||||
*keyConflictLocation += L" )";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1445,15 +1445,15 @@ bool ShortcutMapper::findKeyConflicts(__inout_opt generic_string * const keyConf
|
|||
else
|
||||
{
|
||||
if (!keyConflictLocation->empty())
|
||||
*keyConflictLocation += TEXT("\r\n");
|
||||
*keyConflictLocation += L"\r\n";
|
||||
*keyConflictLocation += _tabNames[gridState];
|
||||
*keyConflictLocation += TEXT(" | ");
|
||||
*keyConflictLocation += L" | ";
|
||||
*keyConflictLocation += std::to_wstring(itemIndex + 1);
|
||||
*keyConflictLocation += TEXT(" ");
|
||||
*keyConflictLocation += L" ";
|
||||
*keyConflictLocation += string2wstring(vShortcuts[itemIndex].getName(), CP_UTF8);
|
||||
*keyConflictLocation += TEXT(" ( ");
|
||||
*keyConflictLocation += L" ( ";
|
||||
*keyConflictLocation += string2wstring(vShortcuts[itemIndex].toString(), CP_UTF8);
|
||||
*keyConflictLocation += TEXT(" )");
|
||||
*keyConflictLocation += L" )";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1479,15 +1479,15 @@ bool ShortcutMapper::findKeyConflicts(__inout_opt generic_string * const keyConf
|
|||
else
|
||||
{
|
||||
if (!keyConflictLocation->empty())
|
||||
*keyConflictLocation += TEXT("\r\n");
|
||||
*keyConflictLocation += L"\r\n";
|
||||
*keyConflictLocation += _tabNames[gridState];
|
||||
*keyConflictLocation += TEXT(" | ");
|
||||
*keyConflictLocation += L" | ";
|
||||
*keyConflictLocation += std::to_wstring(itemIndex + 1);
|
||||
*keyConflictLocation += TEXT(" ");
|
||||
*keyConflictLocation += L" ";
|
||||
*keyConflictLocation += string2wstring(vShortcuts[itemIndex].getName(), CP_UTF8);
|
||||
*keyConflictLocation += TEXT(" ( ");
|
||||
*keyConflictLocation += L" ( ";
|
||||
*keyConflictLocation += string2wstring(vShortcuts[itemIndex].toString(), CP_UTF8);
|
||||
*keyConflictLocation += TEXT(" )");
|
||||
*keyConflictLocation += L" )";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1513,15 +1513,15 @@ bool ShortcutMapper::findKeyConflicts(__inout_opt generic_string * const keyConf
|
|||
else
|
||||
{
|
||||
if (!keyConflictLocation->empty())
|
||||
*keyConflictLocation += TEXT("\r\n");
|
||||
*keyConflictLocation += L"\r\n";
|
||||
*keyConflictLocation += _tabNames[gridState];
|
||||
*keyConflictLocation += TEXT(" | ");
|
||||
*keyConflictLocation += L" | ";
|
||||
*keyConflictLocation += std::to_wstring(itemIndex + 1);
|
||||
*keyConflictLocation += TEXT(" ");
|
||||
*keyConflictLocation += L" ";
|
||||
*keyConflictLocation += string2wstring(vShortcuts[itemIndex].getName(), CP_UTF8);
|
||||
*keyConflictLocation += TEXT(" ( ");
|
||||
*keyConflictLocation += L" ( ";
|
||||
*keyConflictLocation += string2wstring(vShortcuts[itemIndex].toString(), CP_UTF8);
|
||||
*keyConflictLocation += TEXT(" )");
|
||||
*keyConflictLocation += L" )";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1550,18 +1550,18 @@ bool ShortcutMapper::findKeyConflicts(__inout_opt generic_string * const keyConf
|
|||
else
|
||||
{
|
||||
if (!keyConflictLocation->empty())
|
||||
*keyConflictLocation += TEXT("\r\n");
|
||||
*keyConflictLocation += L"\r\n";
|
||||
*keyConflictLocation += _tabNames[gridState];
|
||||
*keyConflictLocation += TEXT(" | ");
|
||||
*keyConflictLocation += L" | ";
|
||||
*keyConflictLocation += std::to_wstring(itemIndex + 1);
|
||||
if (sciIndex > 0)
|
||||
*keyConflictLocation += TEXT("* ");
|
||||
*keyConflictLocation += L"* ";
|
||||
else
|
||||
*keyConflictLocation += TEXT(" ");
|
||||
*keyConflictLocation += L" ";
|
||||
*keyConflictLocation += string2wstring(vShortcuts[itemIndex].getName(), CP_UTF8);
|
||||
*keyConflictLocation += TEXT(" ( ");
|
||||
*keyConflictLocation += L" ( ";
|
||||
*keyConflictLocation += string2wstring(vShortcuts[itemIndex].toString(sciIndex), CP_UTF8);
|
||||
*keyConflictLocation += TEXT(" )");
|
||||
*keyConflictLocation += L" )";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ enum GridState {STATE_MENU, STATE_MACRO, STATE_USER, STATE_PLUGIN, STATE_SCINTIL
|
|||
class ShortcutMapper : public StaticDialog {
|
||||
public:
|
||||
ShortcutMapper() : StaticDialog(), _currentState(STATE_MENU) {
|
||||
_shortcutFilter = std::vector<generic_string>();
|
||||
_shortcutFilter = std::vector<std::wstring>();
|
||||
_dialogInitDone = false;
|
||||
};
|
||||
~ShortcutMapper() = default;
|
||||
|
@ -51,10 +51,10 @@ public:
|
|||
};
|
||||
void getClientRect(RECT & rc) const override;
|
||||
|
||||
bool findKeyConflicts(__inout_opt generic_string * const keyConflictLocation,
|
||||
bool findKeyConflicts(__inout_opt std::wstring * const keyConflictLocation,
|
||||
const KeyCombo & itemKeyCombo, const size_t & itemIndex) const;
|
||||
|
||||
generic_string getTextFromCombo(HWND hCombo);
|
||||
std::wstring getTextFromCombo(HWND hCombo);
|
||||
bool isFilterValid(Shortcut sc);
|
||||
bool isFilterValid(PluginCmdShortcut sc);
|
||||
bool isFilterValid(ScintillaKeyMap sc);
|
||||
|
@ -71,16 +71,16 @@ private:
|
|||
HWND _hTabCtrl = nullptr;
|
||||
|
||||
const static int _nbTab = 5;
|
||||
generic_string _tabNames[_nbTab];
|
||||
std::vector<generic_string> _shortcutFilter;
|
||||
std::wstring _tabNames[_nbTab];
|
||||
std::vector<std::wstring> _shortcutFilter;
|
||||
std::vector<size_t> _shortcutIndex;
|
||||
|
||||
//save/restore the last view
|
||||
std::vector<size_t> _lastHomeRow;
|
||||
std::vector<size_t> _lastCursorRow;
|
||||
|
||||
generic_string _conflictInfoOk;
|
||||
generic_string _conflictInfoEditing;
|
||||
std::wstring _conflictInfoOk;
|
||||
std::wstring _conflictInfoEditing;
|
||||
|
||||
std::vector<HFONT> _hGridFonts;
|
||||
|
||||
|
@ -98,7 +98,7 @@ private:
|
|||
void initTabs();
|
||||
void initBabyGrid();
|
||||
void fillOutBabyGrid();
|
||||
generic_string getTabString(size_t i) const;
|
||||
std::wstring getTabString(size_t i) const;
|
||||
|
||||
bool isConflict(const KeyCombo & lhs, const KeyCombo & rhs) const
|
||||
{
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
#include "CustomFileDialog.h"
|
||||
#include "Parameters.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
// Workaround for MinGW because its implementation of __uuidof is different.
|
||||
template<class T>
|
||||
struct ComTraits
|
||||
|
@ -45,8 +47,8 @@ namespace // anonymous
|
|||
|
||||
struct Filter
|
||||
{
|
||||
generic_string name;
|
||||
generic_string ext;
|
||||
wstring name;
|
||||
wstring ext;
|
||||
};
|
||||
|
||||
static const int IDC_FILE_CUSTOM_CHECKBOX = 4;
|
||||
|
@ -55,13 +57,13 @@ namespace // anonymous
|
|||
// Returns a first extension from the extension specification string.
|
||||
// Multiple extensions are separated with ';'.
|
||||
// Example: input - ".c;.cpp;.h", output - ".c"
|
||||
generic_string get1stExt(const generic_string& extSpec)
|
||||
wstring get1stExt(const wstring& extSpec)
|
||||
{
|
||||
size_t pos = extSpec.find('.');
|
||||
if (pos != generic_string::npos)
|
||||
if (pos != wstring::npos)
|
||||
{
|
||||
size_t posEnd = extSpec.find(';', pos + 1);
|
||||
if (posEnd != generic_string::npos)
|
||||
if (posEnd != wstring::npos)
|
||||
{
|
||||
size_t extLen = posEnd - pos;
|
||||
return extSpec.substr(pos, extLen);
|
||||
|
@ -71,13 +73,13 @@ namespace // anonymous
|
|||
return {};
|
||||
}
|
||||
|
||||
bool replaceExt(generic_string& name, const generic_string& ext)
|
||||
bool replaceExt(wstring& name, const wstring& ext)
|
||||
{
|
||||
if (!name.empty() && !ext.empty())
|
||||
{
|
||||
// Remove an existing extension from the name.
|
||||
size_t posNameExt = name.find_last_of('.');
|
||||
if (posNameExt != generic_string::npos)
|
||||
if (posNameExt != wstring::npos)
|
||||
name.erase(posNameExt);
|
||||
// Append a new extension.
|
||||
name += ext;
|
||||
|
@ -86,14 +88,14 @@ namespace // anonymous
|
|||
return false;
|
||||
}
|
||||
|
||||
bool hasExt(const generic_string& name)
|
||||
bool hasExt(const wstring& name)
|
||||
{
|
||||
return name.find_last_of('.') != generic_string::npos;
|
||||
return name.find_last_of('.') != wstring::npos;
|
||||
}
|
||||
|
||||
void expandEnv(generic_string& s)
|
||||
void expandEnv(wstring& s)
|
||||
{
|
||||
TCHAR buffer[MAX_PATH] = { '\0' };
|
||||
wchar_t buffer[MAX_PATH] = { '\0' };
|
||||
// This returns the resulting string length or 0 in case of error.
|
||||
DWORD ret = ExpandEnvironmentStrings(s.c_str(), buffer, static_cast<DWORD>(std::size(buffer)));
|
||||
if (ret != 0)
|
||||
|
@ -105,7 +107,7 @@ namespace // anonymous
|
|||
else
|
||||
{
|
||||
// Buffer was too small, try with a bigger buffer of the required size.
|
||||
std::vector<TCHAR> buffer2(ret, 0);
|
||||
std::vector<wchar_t> buffer2(ret, 0);
|
||||
ret = ExpandEnvironmentStrings(s.c_str(), buffer2.data(), static_cast<DWORD>(buffer2.size()));
|
||||
assert(ret == static_cast<DWORD>(lstrlen(buffer2.data()) + 1));
|
||||
s = buffer2.data();
|
||||
|
@ -113,9 +115,9 @@ namespace // anonymous
|
|||
}
|
||||
}
|
||||
|
||||
generic_string getFilename(IShellItem* psi)
|
||||
wstring getFilename(IShellItem* psi)
|
||||
{
|
||||
generic_string result;
|
||||
wstring result;
|
||||
if (psi)
|
||||
{
|
||||
PWSTR pszFilePath = nullptr;
|
||||
|
@ -129,7 +131,7 @@ namespace // anonymous
|
|||
return result;
|
||||
}
|
||||
|
||||
bool setDialogFolder(IFileDialog* dialog, const TCHAR* path)
|
||||
bool setDialogFolder(IFileDialog* dialog, const wchar_t* path)
|
||||
{
|
||||
com_ptr<IShellItem> shellItem;
|
||||
HRESULT hr = SHCreateItemFromParsingName(path,
|
||||
|
@ -147,9 +149,9 @@ namespace // anonymous
|
|||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
generic_string getDialogFileName(IFileDialog* dialog)
|
||||
wstring getDialogFileName(IFileDialog* dialog)
|
||||
{
|
||||
generic_string fileName;
|
||||
wstring fileName;
|
||||
if (dialog)
|
||||
{
|
||||
PWSTR pszFilePath = nullptr;
|
||||
|
@ -163,7 +165,7 @@ namespace // anonymous
|
|||
return fileName;
|
||||
}
|
||||
|
||||
generic_string getDialogFolder(IFileDialog* dialog)
|
||||
wstring getDialogFolder(IFileDialog* dialog)
|
||||
{
|
||||
com_ptr<IShellItem> psi;
|
||||
HRESULT hr = dialog->GetFolder(&psi);
|
||||
|
@ -198,7 +200,7 @@ namespace // anonymous
|
|||
::SetCurrentDirectory(_dir);
|
||||
}
|
||||
private:
|
||||
TCHAR _dir[MAX_PATH];
|
||||
wchar_t _dir[MAX_PATH];
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
@ -300,7 +302,7 @@ public:
|
|||
// Since GetFileTypeIndex() might return the old value in some cases.
|
||||
// Specifically, when called after SetFileTypeIndex().
|
||||
_currentType = dialogIndex;
|
||||
generic_string name = getDialogFileName(_dialog);
|
||||
wstring name = getDialogFileName(_dialog);
|
||||
if (changeExt(name, dialogIndex - 1))
|
||||
{
|
||||
// Set the file name and clear the selection in the edit box.
|
||||
|
@ -376,7 +378,7 @@ public:
|
|||
removeHooks();
|
||||
}
|
||||
|
||||
const generic_string& getLastUsedFolder() const { return _lastUsedFolder; }
|
||||
const wstring& getLastUsedFolder() const { return _lastUsedFolder; }
|
||||
|
||||
private:
|
||||
FileDialogEventHandler(const FileDialogEventHandler&) = delete;
|
||||
|
@ -444,23 +446,23 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
bool changeExt(generic_string& name, int extIndex)
|
||||
bool changeExt(wstring& name, int extIndex)
|
||||
{
|
||||
if (extIndex >= 0 && extIndex < static_cast<int>(_filterSpec.size()))
|
||||
{
|
||||
const generic_string ext = get1stExt(_filterSpec[extIndex].ext);
|
||||
const wstring ext = get1stExt(_filterSpec[extIndex].ext);
|
||||
if (!ext.ends_with(_T(".*")))
|
||||
return replaceExt(name, ext);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
generic_string getAbsPath(const generic_string& fileName)
|
||||
wstring getAbsPath(const wstring& fileName)
|
||||
{
|
||||
if (::PathIsRelative(fileName.c_str()))
|
||||
{
|
||||
TCHAR buffer[MAX_PATH] = { '\0' };
|
||||
const generic_string folder = getDialogFolder(_dialog);
|
||||
wchar_t buffer[MAX_PATH] = { '\0' };
|
||||
const wstring folder = getDialogFolder(_dialog);
|
||||
LPTSTR ret = ::PathCombine(buffer, folder.c_str(), fileName.c_str());
|
||||
if (ret)
|
||||
return buffer;
|
||||
|
@ -475,7 +477,7 @@ private:
|
|||
if (!_dialog)
|
||||
return;
|
||||
// Get the entered name.
|
||||
generic_string fileName = getDialogFileName(_dialog);
|
||||
wstring fileName = getDialogFileName(_dialog);
|
||||
expandEnv(fileName);
|
||||
bool nameChanged = transformPath(fileName);
|
||||
// Update the controls.
|
||||
|
@ -497,14 +499,14 @@ private:
|
|||
}
|
||||
|
||||
// Transforms a forward-slash path to a canonical Windows path.
|
||||
static bool transformPath(generic_string& fileName)
|
||||
static bool transformPath(wstring& fileName)
|
||||
{
|
||||
if (fileName.empty())
|
||||
return false;
|
||||
bool transformed = false;
|
||||
// Replace a forward-slash with a backslash.
|
||||
std::replace_if(fileName.begin(), fileName.end(),
|
||||
[&transformed](generic_string::value_type c)
|
||||
[&transformed](wstring::value_type c)
|
||||
{
|
||||
const bool eq = (c == '/');
|
||||
transformed |= eq;
|
||||
|
@ -519,7 +521,7 @@ private:
|
|||
static BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM param)
|
||||
{
|
||||
const int bufferLen = MAX_PATH;
|
||||
static TCHAR buffer[bufferLen];
|
||||
static wchar_t buffer[bufferLen];
|
||||
static bool isRTL = false;
|
||||
|
||||
auto* inst = reinterpret_cast<FileDialogEventHandler*>(param);
|
||||
|
@ -629,7 +631,7 @@ private:
|
|||
com_ptr<IFileDialog> _dialog;
|
||||
com_ptr<IFileDialogCustomize> _customize;
|
||||
const std::vector<Filter> _filterSpec;
|
||||
generic_string _lastUsedFolder;
|
||||
wstring _lastUsedFolder;
|
||||
HHOOK _prevKbdHook = nullptr;
|
||||
HHOOK _prevCallHook = nullptr;
|
||||
HWND _hwndNameEdit = nullptr;
|
||||
|
@ -693,12 +695,12 @@ public:
|
|||
|
||||
if (SUCCEEDED(hr) && _initialFileName)
|
||||
{
|
||||
generic_string newFileName = _initialFileName;
|
||||
wstring newFileName = _initialFileName;
|
||||
if (_fileTypeIndex >= 0 && _fileTypeIndex < static_cast<int>(_filterSpec.size()))
|
||||
{
|
||||
if (!hasExt(newFileName))
|
||||
{
|
||||
const generic_string ext = get1stExt(_filterSpec[_fileTypeIndex].ext);
|
||||
const wstring ext = get1stExt(_filterSpec[_fileTypeIndex].ext);
|
||||
if (!ext.ends_with(_T(".*")))
|
||||
newFileName += ext;
|
||||
}
|
||||
|
@ -760,7 +762,7 @@ public:
|
|||
return true;
|
||||
}
|
||||
|
||||
bool addCheckbox(int id, const TCHAR* label, bool value, bool enabled = true)
|
||||
bool addCheckbox(int id, const wchar_t* label, bool value, bool enabled = true)
|
||||
{
|
||||
if (!_customize)
|
||||
return false;
|
||||
|
@ -832,9 +834,9 @@ public:
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
generic_string getResultFilename()
|
||||
wstring getResultFilename()
|
||||
{
|
||||
generic_string fileName;
|
||||
wstring fileName;
|
||||
com_ptr<IShellItem> psiResult;
|
||||
HRESULT hr = _dialog->GetResult(&psiResult);
|
||||
if (SUCCEEDED(hr))
|
||||
|
@ -854,9 +856,9 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
std::vector<generic_string> getFilenames()
|
||||
std::vector<wstring> getFilenames()
|
||||
{
|
||||
std::vector<generic_string> result;
|
||||
std::vector<wstring> result;
|
||||
// Only the open dialog can have multiple results.
|
||||
com_ptr<IFileOpenDialog> pfd = _dialog;
|
||||
if (pfd)
|
||||
|
@ -886,12 +888,12 @@ public:
|
|||
}
|
||||
|
||||
HWND _hwndOwner = nullptr;
|
||||
const TCHAR* _title = nullptr;
|
||||
const TCHAR* _defExt = nullptr;
|
||||
generic_string _initialFolder;
|
||||
generic_string _fallbackFolder;
|
||||
const TCHAR* _checkboxLabel = nullptr;
|
||||
const TCHAR* _initialFileName = nullptr;
|
||||
const wchar_t* _title = nullptr;
|
||||
const wchar_t* _defExt = nullptr;
|
||||
wstring _initialFolder;
|
||||
wstring _fallbackFolder;
|
||||
const wchar_t* _checkboxLabel = nullptr;
|
||||
const wchar_t* _initialFileName = nullptr;
|
||||
bool _isCheckboxActive = true;
|
||||
std::vector<Filter> _filterSpec;
|
||||
int _fileTypeIndex = -1; // preferred file type index
|
||||
|
@ -899,7 +901,7 @@ public:
|
|||
bool _hasReadonly = false; // set during the result handling
|
||||
bool _enableFileTypeCheckbox = false;
|
||||
bool _fileTypeCheckboxValue = false; // initial value
|
||||
generic_string _fileTypeCheckboxLabel;
|
||||
wstring _fileTypeCheckboxLabel;
|
||||
|
||||
private:
|
||||
com_ptr<IFileDialog> _dialog;
|
||||
|
@ -915,26 +917,26 @@ CustomFileDialog::CustomFileDialog(HWND hwnd) : _impl{ std::make_unique<Impl>()
|
|||
|
||||
NppParameters& params = NppParameters::getInstance();
|
||||
NppGUI& nppGUI = params.getNppGUI();
|
||||
const TCHAR* workDir = nppGUI._openSaveDir == dir_last ? nppGUI._lastUsedDir : params.getWorkingDir();
|
||||
const wchar_t* workDir = nppGUI._openSaveDir == dir_last ? nppGUI._lastUsedDir : params.getWorkingDir();
|
||||
if (workDir)
|
||||
_impl->_fallbackFolder = workDir;
|
||||
}
|
||||
|
||||
CustomFileDialog::~CustomFileDialog() = default;
|
||||
|
||||
void CustomFileDialog::setTitle(const TCHAR* title)
|
||||
void CustomFileDialog::setTitle(const wchar_t* title)
|
||||
{
|
||||
_impl->_title = title;
|
||||
}
|
||||
|
||||
void CustomFileDialog::setExtFilter(const TCHAR *extText, const TCHAR *exts)
|
||||
void CustomFileDialog::setExtFilter(const wchar_t *extText, const wchar_t *exts)
|
||||
{
|
||||
// Add an asterisk before each dot in file patterns
|
||||
generic_string newExts{ exts ? exts : _T("") };
|
||||
wstring newExts{ exts ? exts : _T("") };
|
||||
for (size_t pos = 0; pos < newExts.size(); ++pos)
|
||||
{
|
||||
pos = newExts.find(_T('.'), pos);
|
||||
if (pos == generic_string::npos)
|
||||
if (pos == wstring::npos)
|
||||
break;
|
||||
if (pos == 0 || newExts[pos - 1] != _T('*'))
|
||||
{
|
||||
|
@ -949,9 +951,9 @@ void CustomFileDialog::setExtFilter(const TCHAR *extText, const TCHAR *exts)
|
|||
_impl->_filterSpec.push_back({ extText, newExts });
|
||||
}
|
||||
|
||||
void CustomFileDialog::setExtFilter(const TCHAR *extText, std::initializer_list<const TCHAR*> extList)
|
||||
void CustomFileDialog::setExtFilter(const wchar_t *extText, std::initializer_list<const wchar_t*> extList)
|
||||
{
|
||||
generic_string exts;
|
||||
wstring exts;
|
||||
for (auto&& x : extList)
|
||||
{
|
||||
exts += x;
|
||||
|
@ -961,22 +963,22 @@ void CustomFileDialog::setExtFilter(const TCHAR *extText, std::initializer_list<
|
|||
setExtFilter(extText, exts.c_str());
|
||||
}
|
||||
|
||||
void CustomFileDialog::setDefExt(const TCHAR* ext)
|
||||
void CustomFileDialog::setDefExt(const wchar_t* ext)
|
||||
{
|
||||
_impl->_defExt = ext;
|
||||
}
|
||||
|
||||
void CustomFileDialog::setDefFileName(const TCHAR* fn)
|
||||
void CustomFileDialog::setDefFileName(const wchar_t* fn)
|
||||
{
|
||||
_impl->_initialFileName = fn;
|
||||
}
|
||||
|
||||
void CustomFileDialog::setFolder(const TCHAR* folder)
|
||||
void CustomFileDialog::setFolder(const wchar_t* folder)
|
||||
{
|
||||
_impl->_initialFolder = folder ? folder : _T("");
|
||||
}
|
||||
|
||||
void CustomFileDialog::setCheckbox(const TCHAR* text, bool isActive)
|
||||
void CustomFileDialog::setCheckbox(const wchar_t* text, bool isActive)
|
||||
{
|
||||
_impl->_checkboxLabel = text;
|
||||
_impl->_isCheckboxActive = isActive;
|
||||
|
@ -997,7 +999,7 @@ bool CustomFileDialog::isReadOnly() const
|
|||
return _impl->_hasReadonly;
|
||||
}
|
||||
|
||||
void CustomFileDialog::enableFileTypeCheckbox(const generic_string& text, bool value)
|
||||
void CustomFileDialog::enableFileTypeCheckbox(const wstring& text, bool value)
|
||||
{
|
||||
assert(!text.empty());
|
||||
if (!text.empty())
|
||||
|
@ -1013,7 +1015,7 @@ bool CustomFileDialog::getFileTypeCheckboxValue() const
|
|||
return _impl->getCheckboxState(IDC_FILE_TYPE_CHECKBOX);
|
||||
}
|
||||
|
||||
generic_string CustomFileDialog::doSaveDlg()
|
||||
wstring CustomFileDialog::doSaveDlg()
|
||||
{
|
||||
if (!_impl->initSave())
|
||||
return {};
|
||||
|
@ -1025,7 +1027,7 @@ generic_string CustomFileDialog::doSaveDlg()
|
|||
return bOk ? _impl->getResultFilename() : _T("");
|
||||
}
|
||||
|
||||
generic_string CustomFileDialog::doOpenSingleFileDlg()
|
||||
wstring CustomFileDialog::doOpenSingleFileDlg()
|
||||
{
|
||||
if (!_impl->initOpen())
|
||||
return {};
|
||||
|
@ -1037,7 +1039,7 @@ generic_string CustomFileDialog::doOpenSingleFileDlg()
|
|||
return bOk ? _impl->getResultFilename() : _T("");
|
||||
}
|
||||
|
||||
std::vector<generic_string> CustomFileDialog::doOpenMultiFilesDlg()
|
||||
std::vector<wstring> CustomFileDialog::doOpenMultiFilesDlg()
|
||||
{
|
||||
if (!_impl->initOpen())
|
||||
return {};
|
||||
|
@ -1051,7 +1053,7 @@ std::vector<generic_string> CustomFileDialog::doOpenMultiFilesDlg()
|
|||
return {};
|
||||
}
|
||||
|
||||
generic_string CustomFileDialog::pickFolder()
|
||||
wstring CustomFileDialog::pickFolder()
|
||||
{
|
||||
if (!_impl->initOpen())
|
||||
return {};
|
||||
|
|
|
@ -29,23 +29,23 @@ class CustomFileDialog
|
|||
public:
|
||||
explicit CustomFileDialog(HWND hwnd);
|
||||
~CustomFileDialog();
|
||||
void setTitle(const TCHAR* title);
|
||||
void setExtFilter(const TCHAR* text, const TCHAR* ext);
|
||||
void setExtFilter(const TCHAR* text, std::initializer_list<const TCHAR*> exts);
|
||||
void setDefExt(const TCHAR* ext);
|
||||
void setDefFileName(const TCHAR *fn);
|
||||
void setFolder(const TCHAR* folder);
|
||||
void setCheckbox(const TCHAR* text, bool isActive = true);
|
||||
void setTitle(const wchar_t* title);
|
||||
void setExtFilter(const wchar_t* text, const wchar_t* ext);
|
||||
void setExtFilter(const wchar_t* text, std::initializer_list<const wchar_t*> exts);
|
||||
void setDefExt(const wchar_t* ext);
|
||||
void setDefFileName(const wchar_t *fn);
|
||||
void setFolder(const wchar_t* folder);
|
||||
void setCheckbox(const wchar_t* text, bool isActive = true);
|
||||
void setExtIndex(int extTypeIndex);
|
||||
|
||||
void enableFileTypeCheckbox(const generic_string& text, bool value);
|
||||
void enableFileTypeCheckbox(const std::wstring& text, bool value);
|
||||
bool getFileTypeCheckboxValue() const;
|
||||
|
||||
// Empty string is not a valid file name and may signal that the dialog was canceled.
|
||||
generic_string doSaveDlg();
|
||||
generic_string pickFolder();
|
||||
generic_string doOpenSingleFileDlg();
|
||||
std::vector<generic_string> doOpenMultiFilesDlg();
|
||||
std::wstring doSaveDlg();
|
||||
std::wstring pickFolder();
|
||||
std::wstring doOpenSingleFileDlg();
|
||||
std::vector<std::wstring> doOpenMultiFilesDlg();
|
||||
|
||||
bool getCheckboxState() const;
|
||||
bool isReadOnly() const;
|
||||
|
|
|
@ -37,10 +37,10 @@ using nlohmann::json;
|
|||
|
||||
|
||||
|
||||
generic_string PluginUpdateInfo::describe()
|
||||
wstring PluginUpdateInfo::describe()
|
||||
{
|
||||
generic_string desc;
|
||||
const TCHAR *EOL = TEXT("\r\n");
|
||||
wstring desc;
|
||||
const wchar_t *EOL = L"\r\n";
|
||||
if (!_description.empty())
|
||||
{
|
||||
desc = _description;
|
||||
|
@ -49,14 +49,14 @@ generic_string PluginUpdateInfo::describe()
|
|||
|
||||
if (!_author.empty())
|
||||
{
|
||||
desc += TEXT("Author: ");
|
||||
desc += L"Author: ";
|
||||
desc += _author;
|
||||
desc += EOL;
|
||||
}
|
||||
|
||||
if (!_homepage.empty())
|
||||
{
|
||||
desc += TEXT("Homepage: ");
|
||||
desc += L"Homepage: ";
|
||||
desc += _homepage;
|
||||
desc += EOL;
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ generic_string PluginUpdateInfo::describe()
|
|||
}
|
||||
|
||||
/// Try to find in the Haystack the Needle - ignore case
|
||||
bool findStrNoCase(const generic_string & strHaystack, const generic_string & strNeedle)
|
||||
bool findStrNoCase(const wstring & strHaystack, const wstring & strNeedle)
|
||||
{
|
||||
auto it = std::search(
|
||||
strHaystack.begin(), strHaystack.end(),
|
||||
|
@ -75,10 +75,10 @@ bool findStrNoCase(const generic_string & strHaystack, const generic_string & st
|
|||
return (it != strHaystack.end());
|
||||
}
|
||||
|
||||
bool PluginsAdminDlg::isFoundInListFromIndex(const PluginViewList& inWhichList, int index, const generic_string& str2search, bool inWhichPart) const
|
||||
bool PluginsAdminDlg::isFoundInListFromIndex(const PluginViewList& inWhichList, int index, const wstring& str2search, bool inWhichPart) const
|
||||
{
|
||||
const PluginUpdateInfo* pui = inWhichList.getPluginInfoFromUiIndex(index);
|
||||
generic_string searchIn;
|
||||
wstring searchIn;
|
||||
if (inWhichPart == _inNames)
|
||||
searchIn = pui->_displayName;
|
||||
else //(inWhichPart == inDescs)
|
||||
|
@ -87,7 +87,7 @@ bool PluginsAdminDlg::isFoundInListFromIndex(const PluginViewList& inWhichList,
|
|||
return (findStrNoCase(searchIn, str2search));
|
||||
}
|
||||
|
||||
long PluginsAdminDlg::searchFromCurrentSel(const PluginViewList& inWhichList, const generic_string& str2search, bool inWhichPart, bool isNextMode) const
|
||||
long PluginsAdminDlg::searchFromCurrentSel(const PluginViewList& inWhichList, const wstring& str2search, bool inWhichPart, bool isNextMode) const
|
||||
{
|
||||
// search from curent selected item or from the beginning
|
||||
long currentIndex = inWhichList.getSelectedIndex();
|
||||
|
@ -132,10 +132,10 @@ void PluginsAdminDlg::create(int dialogID, bool isRTL, bool msgDestParent)
|
|||
_tab.init(_hInst, _hSelf, false, true);
|
||||
NppDarkMode::subclassTabControl(_tab.getHSelf());
|
||||
|
||||
const TCHAR *available = TEXT("Available");
|
||||
const TCHAR *updates = TEXT("Updates");
|
||||
const TCHAR *installed = TEXT("Installed");
|
||||
const TCHAR *incompatible = TEXT("Incompatible");
|
||||
const wchar_t *available = L"Available";
|
||||
const wchar_t *updates = L"Updates";
|
||||
const wchar_t *installed = L"Installed";
|
||||
const wchar_t *incompatible = L"Incompatible";
|
||||
|
||||
_tab.insertAtEnd(available);
|
||||
_tab.insertAtEnd(updates);
|
||||
|
@ -164,8 +164,8 @@ void PluginsAdminDlg::create(int dialogID, bool isRTL, bool msgDestParent)
|
|||
|
||||
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");
|
||||
wstring pluginStr = pNativeSpeaker->getAttrNameStr(L"Plugin", "PluginAdmin", "Plugin");
|
||||
wstring vesionStr = pNativeSpeaker->getAttrNameStr(L"Version", "PluginAdmin", "Version");
|
||||
|
||||
const COLORREF fgColor = nppParam.getCurrentDefaultFgColor();
|
||||
const COLORREF bgColor = nppParam.getCurrentDefaultBgColor();
|
||||
|
@ -202,7 +202,7 @@ void PluginsAdminDlg::create(int dialogID, bool isRTL, bool msgDestParent)
|
|||
::SetWindowText(hPluginListVersionNumber, _pluginListVersion.c_str());
|
||||
|
||||
_repoLink.init(_hInst, _hSelf);
|
||||
_repoLink.create(::GetDlgItem(_hSelf, IDC_PLUGINLIST_ADDR), TEXT("https://github.com/notepad-plus-plus/nppPluginList"));
|
||||
_repoLink.create(::GetDlgItem(_hSelf, IDC_PLUGINLIST_ADDR), L"https://github.com/notepad-plus-plus/nppPluginList");
|
||||
|
||||
goToCenter(SWP_SHOWWINDOW | SWP_NOSIZE);
|
||||
}
|
||||
|
@ -214,7 +214,7 @@ void PluginsAdminDlg::collectNppCurrentStatusInfos()
|
|||
|
||||
_nppCurrentStatus._isAppDataPluginsAllowed = ::SendMessage(_hParent, NPPM_GETAPPDATAPLUGINSALLOWED, 0, 0) == TRUE;
|
||||
_nppCurrentStatus._appdataPath = nppParam.getAppDataNppDir();
|
||||
generic_string programFilesPath = NppParameters::getSpecialFolderLocation(CSIDL_PROGRAM_FILES);
|
||||
wstring programFilesPath = NppParameters::getSpecialFolderLocation(CSIDL_PROGRAM_FILES);
|
||||
_nppCurrentStatus._isInProgramFiles = (_nppCurrentStatus._nppInstallPath.find(programFilesPath) == 0);
|
||||
|
||||
}
|
||||
|
@ -239,22 +239,22 @@ PluginsAdminDlg::PluginsAdminDlg()
|
|||
// Get wingup path
|
||||
NppParameters& nppParameters = NppParameters::getInstance();
|
||||
_updaterDir = nppParameters.getNppPath();
|
||||
pathAppend(_updaterDir, TEXT("updater"));
|
||||
pathAppend(_updaterDir, L"updater");
|
||||
_updaterFullPath = _updaterDir;
|
||||
pathAppend(_updaterFullPath, TEXT("gup.exe"));
|
||||
pathAppend(_updaterFullPath, L"gup.exe");
|
||||
|
||||
// get plugin-list path
|
||||
_pluginListFullPath = nppParameters.getPluginConfDir();
|
||||
|
||||
#ifdef DEBUG // if not debug, then it's release
|
||||
// load from nppPluginList.json instead of nppPluginList.dll
|
||||
pathAppend(_pluginListFullPath, TEXT("nppPluginList.json"));
|
||||
pathAppend(_pluginListFullPath, L"nppPluginList.json");
|
||||
#else //RELEASE
|
||||
pathAppend(_pluginListFullPath, TEXT("nppPluginList.dll"));
|
||||
pathAppend(_pluginListFullPath, L"nppPluginList.dll");
|
||||
#endif
|
||||
}
|
||||
|
||||
generic_string PluginsAdminDlg::getPluginListVerStr() const
|
||||
wstring PluginsAdminDlg::getPluginListVerStr() const
|
||||
{
|
||||
Version v;
|
||||
v.setVersionFrom(_pluginListFullPath);
|
||||
|
@ -263,63 +263,63 @@ generic_string PluginsAdminDlg::getPluginListVerStr() const
|
|||
|
||||
bool PluginsAdminDlg::exitToInstallRemovePlugins(Operation op, const vector<PluginUpdateInfo*>& puis)
|
||||
{
|
||||
generic_string opStr;
|
||||
wstring opStr;
|
||||
if (op == pa_install)
|
||||
opStr = TEXT("-unzipTo ");
|
||||
opStr = L"-unzipTo ";
|
||||
else if (op == pa_update)
|
||||
opStr = TEXT("-unzipTo -clean ");
|
||||
opStr = L"-unzipTo -clean ";
|
||||
else if (op == pa_remove)
|
||||
opStr = TEXT("-clean ");
|
||||
opStr = L"-clean ";
|
||||
else
|
||||
return false;
|
||||
|
||||
NppParameters& nppParameters = NppParameters::getInstance();
|
||||
generic_string updaterDir = nppParameters.getNppPath();
|
||||
updaterDir += TEXT("\\updater\\");
|
||||
wstring updaterDir = nppParameters.getNppPath();
|
||||
updaterDir += L"\\updater\\";
|
||||
|
||||
generic_string updaterFullPath = updaterDir + TEXT("gup.exe");
|
||||
wstring updaterFullPath = updaterDir + L"gup.exe";
|
||||
|
||||
generic_string updaterParams = opStr;
|
||||
wstring updaterParams = opStr;
|
||||
|
||||
TCHAR nppFullPath[MAX_PATH]{};
|
||||
wchar_t nppFullPath[MAX_PATH]{};
|
||||
::GetModuleFileName(NULL, nppFullPath, MAX_PATH);
|
||||
updaterParams += TEXT("\"");
|
||||
updaterParams += L"\"";
|
||||
updaterParams += nppFullPath;
|
||||
updaterParams += TEXT("\" ");
|
||||
updaterParams += L"\" ";
|
||||
|
||||
updaterParams += TEXT("\"");
|
||||
updaterParams += L"\"";
|
||||
updaterParams += nppParameters.getPluginRootDir();
|
||||
updaterParams += TEXT("\"");
|
||||
updaterParams += L"\"";
|
||||
|
||||
for (const auto &i : puis)
|
||||
{
|
||||
if (op == pa_install || op == pa_update)
|
||||
{
|
||||
// add folder to operate
|
||||
updaterParams += TEXT(" \"");
|
||||
updaterParams += L" \"";
|
||||
updaterParams += i->_folderName;
|
||||
updaterParams += TEXT(" ");
|
||||
updaterParams += L" ";
|
||||
updaterParams += i->_repository;
|
||||
updaterParams += TEXT(" ");
|
||||
updaterParams += L" ";
|
||||
updaterParams += i->_id;
|
||||
updaterParams += TEXT("\"");
|
||||
updaterParams += L"\"";
|
||||
}
|
||||
else // op == pa_remove
|
||||
{
|
||||
// add folder to operate
|
||||
updaterParams += TEXT(" \"");
|
||||
generic_string folderName = i->_folderName;
|
||||
updaterParams += L" \"";
|
||||
wstring folderName = i->_folderName;
|
||||
if (folderName.empty())
|
||||
{
|
||||
auto lastindex = i->_displayName.find_last_of(TEXT("."));
|
||||
if (lastindex != generic_string::npos)
|
||||
auto lastindex = i->_displayName.find_last_of(L".");
|
||||
if (lastindex != wstring::npos)
|
||||
folderName = i->_displayName.substr(0, lastindex);
|
||||
else
|
||||
folderName = i->_displayName; // This case will never occur, but in case if it occurs too
|
||||
// just putting the plugin name, so that whole plugin system is not screewed.
|
||||
}
|
||||
updaterParams += folderName;
|
||||
updaterParams += TEXT("\"");
|
||||
updaterParams += L"\"";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -327,8 +327,8 @@ bool PluginsAdminDlg::exitToInstallRemovePlugins(Operation op, const vector<Plug
|
|||
NativeLangSpeaker *pNativeSpeaker = nppParameters.getNativeLangSpeaker();
|
||||
auto res = pNativeSpeaker->messageBox("ExitToUpdatePlugins",
|
||||
_hSelf,
|
||||
TEXT("If you click YES, you will quit Notepad++ to continue the operations.\nNotepad++ will be restarted after all the operations are terminated.\nContinue?"),
|
||||
TEXT("Notepad++ is about to exit"),
|
||||
L"If you click YES, you will quit Notepad++ to continue the operations.\nNotepad++ will be restarted after all the operations are terminated.\nContinue?",
|
||||
L"Notepad++ is about to exit",
|
||||
MB_YESNO | MB_APPLMODAL);
|
||||
|
||||
if (res == IDYES)
|
||||
|
@ -384,19 +384,19 @@ bool PluginsAdminDlg::removePlugins()
|
|||
return exitToInstallRemovePlugins(pa_remove, puis);
|
||||
}
|
||||
|
||||
void PluginsAdminDlg::changeTabName(LIST_TYPE index, const TCHAR *name2change)
|
||||
void PluginsAdminDlg::changeTabName(LIST_TYPE index, const wchar_t *name2change)
|
||||
{
|
||||
TCITEM tie{};
|
||||
tie.mask = TCIF_TEXT;
|
||||
tie.pszText = (TCHAR *)name2change;
|
||||
tie.pszText = (wchar_t *)name2change;
|
||||
TabCtrl_SetItem(_tab.getHSelf(), index, &tie);
|
||||
|
||||
TCHAR label[MAX_PATH]{};
|
||||
wchar_t label[MAX_PATH]{};
|
||||
_tab.getCurrentTitle(label, MAX_PATH);
|
||||
::SetWindowText(_hSelf, label);
|
||||
}
|
||||
|
||||
void PluginsAdminDlg::changeColumnName(COLUMN_TYPE index, const TCHAR *name2change)
|
||||
void PluginsAdminDlg::changeColumnName(COLUMN_TYPE index, const wchar_t *name2change)
|
||||
{
|
||||
_availableList.changeColumnName(index, name2change);
|
||||
_updateList.changeColumnName(index, name2change);
|
||||
|
@ -404,12 +404,12 @@ void PluginsAdminDlg::changeColumnName(COLUMN_TYPE index, const TCHAR *name2chan
|
|||
_incompatibleList.changeColumnName(index, name2change);
|
||||
}
|
||||
|
||||
void PluginViewList::changeColumnName(COLUMN_TYPE index, const TCHAR *name2change)
|
||||
void PluginViewList::changeColumnName(COLUMN_TYPE index, const wchar_t *name2change)
|
||||
{
|
||||
_ui.setColumnText(index, name2change);
|
||||
}
|
||||
|
||||
bool PluginViewList::removeFromFolderName(const generic_string& folderName)
|
||||
bool PluginViewList::removeFromFolderName(const wstring& folderName)
|
||||
{
|
||||
|
||||
for (size_t i = 0; i < _ui.nbItem(); ++i)
|
||||
|
@ -437,7 +437,7 @@ void PluginViewList::pushBack(PluginUpdateInfo* pi)
|
|||
{
|
||||
_list.push_back(pi);
|
||||
|
||||
vector<generic_string> values2Add;
|
||||
vector<wstring> values2Add;
|
||||
values2Add.push_back(pi->_displayName);
|
||||
Version v = pi->_version;
|
||||
values2Add.push_back(v.toString());
|
||||
|
@ -454,7 +454,7 @@ void PluginViewList::pushBack(PluginUpdateInfo* pi)
|
|||
// "[8.3,]" : any version from 8.3 to the latest one
|
||||
// "[,8.2.1]" : 8.2.1 and any previous version
|
||||
//
|
||||
std::pair<Version, Version> getIntervalVersions(generic_string intervalVerStr)
|
||||
std::pair<Version, Version> getIntervalVersions(wstring intervalVerStr)
|
||||
{
|
||||
std::pair<Version, Version> result;
|
||||
|
||||
|
@ -464,8 +464,8 @@ std::pair<Version, Version> getIntervalVersions(generic_string intervalVerStr)
|
|||
const size_t indexEnd = intervalVerStr.length() - 1;
|
||||
if (intervalVerStr[0] == '[' && intervalVerStr[indexEnd] == ']') // interval versions format
|
||||
{
|
||||
generic_string cleanIntervalVerStr = intervalVerStr.substr(1, indexEnd - 1);
|
||||
vector<generic_string> versionVect;
|
||||
wstring cleanIntervalVerStr = intervalVerStr.substr(1, indexEnd - 1);
|
||||
vector<wstring> versionVect;
|
||||
cutStringBy(cleanIntervalVerStr.c_str(), versionVect, ',', true);
|
||||
if (versionVect.size() == 2)
|
||||
{
|
||||
|
@ -501,16 +501,16 @@ std::pair<Version, Version> getIntervalVersions(generic_string intervalVerStr)
|
|||
// "[4.2,6.6.6][6.4,8.9]" : The 1st interval from version 4.2 to 6.6.6 inclusive, the 2nd interval from version 6.4 to 8.9
|
||||
// "[8.3,][6.9,6.9]" : The 1st interval any version from 8.3 to the latest version, the 2nd interval present only version 6.9
|
||||
// "[,8.2.1][4.4,]" : The 1st interval 8.2.1 and any previous version, , the 2nd interval any version from 4.4 to the latest version
|
||||
std::pair<std::pair<Version, Version>, std::pair<Version, Version>> getTwoIntervalVersions(generic_string twoIntervalVerStr)
|
||||
std::pair<std::pair<Version, Version>, std::pair<Version, Version>> getTwoIntervalVersions(wstring twoIntervalVerStr)
|
||||
{
|
||||
std::pair<std::pair<Version, Version>, std::pair<Version, Version>> r;
|
||||
generic_string sep = TEXT("][");
|
||||
generic_string::size_type pos = twoIntervalVerStr.find(sep, 0);
|
||||
wstring sep = L"][";
|
||||
wstring::size_type pos = twoIntervalVerStr.find(sep, 0);
|
||||
if (pos == string::npos)
|
||||
return r;
|
||||
|
||||
generic_string intervalStr1 = twoIntervalVerStr.substr(0, pos + 1);
|
||||
generic_string intervalStr2 = twoIntervalVerStr.substr(pos + 1, twoIntervalVerStr.length() - pos + 1);
|
||||
wstring intervalStr1 = twoIntervalVerStr.substr(0, pos + 1);
|
||||
wstring intervalStr2 = twoIntervalVerStr.substr(pos + 1, twoIntervalVerStr.length() - pos + 1);
|
||||
|
||||
r.first = getIntervalVersions(intervalStr1);
|
||||
r.second = getIntervalVersions(intervalStr2);
|
||||
|
@ -558,7 +558,7 @@ bool loadFromJson(std::vector<PluginUpdateInfo*>& pl, wstring& verStr, const jso
|
|||
|
||||
try {
|
||||
valStr = i.at("version").get<std::string>();
|
||||
generic_string newValStr(valStr.begin(), valStr.end());
|
||||
wstring newValStr(valStr.begin(), valStr.end());
|
||||
pi->_version = Version(newValStr);
|
||||
|
||||
if (i.contains("npp-compatible-versions"))
|
||||
|
@ -566,7 +566,7 @@ bool loadFromJson(std::vector<PluginUpdateInfo*>& pl, wstring& verStr, const jso
|
|||
json jNppCompatibleVer = i["npp-compatible-versions"];
|
||||
|
||||
string versionsStr = jNppCompatibleVer.get<std::string>();
|
||||
generic_string nppCompatibleVersionStr(versionsStr.begin(), versionsStr.end());
|
||||
wstring nppCompatibleVersionStr(versionsStr.begin(), versionsStr.end());
|
||||
pi->_nppCompatibleVersions = getIntervalVersions(nppCompatibleVersionStr);
|
||||
}
|
||||
|
||||
|
@ -575,7 +575,7 @@ bool loadFromJson(std::vector<PluginUpdateInfo*>& pl, wstring& verStr, const jso
|
|||
json jOldVerCompatibility = i["old-versions-compatibility"];
|
||||
|
||||
string versionsStr = jOldVerCompatibility.get<std::string>();
|
||||
generic_string oldVerCompatibilityStr(versionsStr.begin(), versionsStr.end());
|
||||
wstring oldVerCompatibilityStr(versionsStr.begin(), versionsStr.end());
|
||||
pi->_oldVersionCompatibility = getTwoIntervalVersions(oldVerCompatibilityStr);
|
||||
}
|
||||
}
|
||||
|
@ -596,7 +596,7 @@ bool loadFromJson(std::vector<PluginUpdateInfo*>& pl, wstring& verStr, const jso
|
|||
#ifdef DEBUG
|
||||
catch (const wstring& exceptionStr)
|
||||
{
|
||||
::MessageBox(NULL, exceptionStr.c_str(), TEXT("Exception caught in: PluginsAdmin loadFromJson()"), MB_ICONERROR);
|
||||
::MessageBox(NULL, exceptionStr.c_str(), L"Exception caught in: PluginsAdmin loadFromJson()", MB_ICONERROR);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -617,7 +617,7 @@ bool loadFromJson(std::vector<PluginUpdateInfo*>& pl, wstring& verStr, const jso
|
|||
return true;
|
||||
}
|
||||
|
||||
PluginUpdateInfo::PluginUpdateInfo(const generic_string& fullFilePath, const generic_string& filename)
|
||||
PluginUpdateInfo::PluginUpdateInfo(const wstring& fullFilePath, const wstring& filename)
|
||||
{
|
||||
if (!::PathFileExists(fullFilePath.c_str()))
|
||||
return;
|
||||
|
@ -686,7 +686,7 @@ bool PluginsAdminDlg::initFromJson()
|
|||
if (!hLib)
|
||||
{
|
||||
// Error treatment
|
||||
//printStr(TEXT("LoadLibrary PB!!!"));
|
||||
//printStr(L"LoadLibrary PB!!!");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -743,7 +743,7 @@ bool PluginsAdminDlg::updateList()
|
|||
|
||||
bool PluginsAdminDlg::initAvailablePluginsViewFromList()
|
||||
{
|
||||
TCHAR nppFullPathName[MAX_PATH]{};
|
||||
wchar_t nppFullPathName[MAX_PATH]{};
|
||||
GetModuleFileName(NULL, nppFullPathName, MAX_PATH);
|
||||
|
||||
Version nppVer;
|
||||
|
@ -755,7 +755,7 @@ bool PluginsAdminDlg::initAvailablePluginsViewFromList()
|
|||
|
||||
if (isCompatible)
|
||||
{
|
||||
vector<generic_string> values2Add;
|
||||
vector<wstring> values2Add;
|
||||
values2Add.push_back(i->_displayName);
|
||||
Version v = i->_version;
|
||||
values2Add.push_back(v.toString());
|
||||
|
@ -772,7 +772,7 @@ bool PluginsAdminDlg::initAvailablePluginsViewFromList()
|
|||
|
||||
bool PluginsAdminDlg::initIncompatiblePluginList()
|
||||
{
|
||||
TCHAR nppFullPathName[MAX_PATH]{};
|
||||
wchar_t nppFullPathName[MAX_PATH]{};
|
||||
GetModuleFileName(NULL, nppFullPathName, MAX_PATH);
|
||||
|
||||
Version nppVer;
|
||||
|
@ -780,7 +780,7 @@ bool PluginsAdminDlg::initIncompatiblePluginList()
|
|||
|
||||
for (const auto& i : _incompatibleList._list)
|
||||
{
|
||||
vector<generic_string> values2Add;
|
||||
vector<wstring> values2Add;
|
||||
values2Add.push_back(i->_displayName);
|
||||
Version v = i->_version;
|
||||
values2Add.push_back(v.toString());
|
||||
|
@ -806,7 +806,7 @@ bool PluginsAdminDlg::loadFromPluginInfos()
|
|||
continue;
|
||||
|
||||
// user file name (without ext. to find whole info in available list
|
||||
TCHAR fnNoExt[MAX_PATH]{};
|
||||
wchar_t fnNoExt[MAX_PATH]{};
|
||||
wcscpy_s(fnNoExt, i._fileName.c_str());
|
||||
::PathRemoveExtension(fnNoExt);
|
||||
|
||||
|
@ -862,7 +862,7 @@ bool PluginsAdminDlg::loadFromPluginInfos()
|
|||
return true;
|
||||
}
|
||||
|
||||
PluginUpdateInfo* PluginViewList::findPluginInfoFromFolderName(const generic_string& folderName, int& index) const
|
||||
PluginUpdateInfo* PluginViewList::findPluginInfoFromFolderName(const wstring& folderName, int& index) const
|
||||
{
|
||||
index = 0;
|
||||
for (const auto& i : _list)
|
||||
|
@ -946,17 +946,17 @@ bool PluginViewList::hideFromPluginInfoPtr(PluginUpdateInfo* pluginInfo2hide)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool PluginViewList::restore(const generic_string& folderName)
|
||||
bool PluginViewList::restore(const wstring& folderName)
|
||||
{
|
||||
for (const auto &i : _list)
|
||||
{
|
||||
if (i->_folderName == folderName)
|
||||
{
|
||||
vector<generic_string> values2Add;
|
||||
vector<wstring> values2Add;
|
||||
values2Add.push_back(i->_displayName);
|
||||
Version v = i->_version;
|
||||
values2Add.push_back(v.toString());
|
||||
values2Add.push_back(TEXT("Yes"));
|
||||
values2Add.push_back(L"Yes");
|
||||
_ui.addLine(values2Add, reinterpret_cast<LPARAM>(i));
|
||||
|
||||
i->_isVisible = true;
|
||||
|
@ -995,7 +995,7 @@ bool PluginsAdminDlg::checkUpdates()
|
|||
bool PluginsAdminDlg::searchInPlugins(bool isNextMode) const
|
||||
{
|
||||
constexpr int maxLen = 256;
|
||||
TCHAR txt2search[maxLen]{};
|
||||
wchar_t txt2search[maxLen]{};
|
||||
::GetDlgItemText(_hSelf, IDC_PLUGINADM_SEARCH_EDIT, txt2search, maxLen);
|
||||
if (lstrlen(txt2search) < 2)
|
||||
return false;
|
||||
|
@ -1036,7 +1036,7 @@ bool PluginsAdminDlg::searchInPlugins(bool isNextMode) const
|
|||
|
||||
void PluginsAdminDlg::switchDialog(int indexToSwitch)
|
||||
{
|
||||
generic_string desc;
|
||||
wstring desc;
|
||||
bool showAvailable, showUpdate, showInstalled, showIncompatibile;
|
||||
switch (indexToSwitch)
|
||||
{
|
||||
|
@ -1322,7 +1322,7 @@ intptr_t CALLBACK PluginsAdminDlg::run_dlgProc(UINT message, WPARAM wParam, LPAR
|
|||
else if (pnmv->uNewState & LVIS_SELECTED)
|
||||
{
|
||||
PluginUpdateInfo* pui = pViewList->getPluginInfoFromUiIndex(pnmv->iItem);
|
||||
generic_string desc = buttonID ? pui->describe() : pui->_description;
|
||||
wstring desc = buttonID ? pui->describe() : pui->_description;
|
||||
::SetDlgItemText(_hSelf, IDC_PLUGINADM_EDIT, desc.c_str());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,10 +29,10 @@ class PluginsManager;
|
|||
|
||||
struct PluginUpdateInfo
|
||||
{
|
||||
generic_string _fullFilePath; // only for the installed Plugin
|
||||
std::wstring _fullFilePath; // only for the installed Plugin
|
||||
|
||||
generic_string _folderName; // plugin folder name - should be the same name with plugin and should be uniq among the plugins
|
||||
generic_string _displayName; // plugin description name
|
||||
std::wstring _folderName; // plugin folder name - should be the same name with plugin and should be uniq among the plugins
|
||||
std::wstring _displayName; // plugin description name
|
||||
Version _version;
|
||||
// Optional
|
||||
std::pair<Version, Version> _nppCompatibleVersions; // compatible to Notepad++ interval versions: <from, to> example:
|
||||
|
@ -48,17 +48,17 @@ struct PluginUpdateInfo
|
|||
// The 2nd interval versions are for Notepad++ versions
|
||||
// which are compatible with the old plugins' versions given in the 1st interval
|
||||
|
||||
generic_string _homepage;
|
||||
generic_string _sourceUrl;
|
||||
generic_string _description;
|
||||
generic_string _author;
|
||||
generic_string _id; // Plugin package ID: SHA-256 hash
|
||||
generic_string _repository;
|
||||
std::wstring _homepage;
|
||||
std::wstring _sourceUrl;
|
||||
std::wstring _description;
|
||||
std::wstring _author;
|
||||
std::wstring _id; // Plugin package ID: SHA-256 hash
|
||||
std::wstring _repository;
|
||||
bool _isVisible = true; // if false then it should not be displayed
|
||||
|
||||
generic_string describe();
|
||||
std::wstring describe();
|
||||
PluginUpdateInfo() = default;
|
||||
PluginUpdateInfo(const generic_string& fullFilePath, const generic_string& fileName);
|
||||
PluginUpdateInfo(const std::wstring& fullFilePath, const std::wstring& fileName);
|
||||
};
|
||||
|
||||
struct NppCurrentStatus
|
||||
|
@ -70,8 +70,8 @@ struct NppCurrentStatus
|
|||
|
||||
bool _isAppDataPluginsAllowed = false; // true: install on %APPDATA%, update / remove on %APPDATA% & "Program files" or NPP_INST
|
||||
|
||||
generic_string _nppInstallPath;
|
||||
generic_string _appdataPath;
|
||||
std::wstring _nppInstallPath;
|
||||
std::wstring _appdataPath;
|
||||
|
||||
// it should determinate :
|
||||
// 1. deployment location : %ProgramFile% %appdata% %other%
|
||||
|
@ -118,15 +118,15 @@ public:
|
|||
void setViewStyleOption(int32_t extraStyle) { _ui.setStyleOption(extraStyle); };
|
||||
size_t nbItem() const { return _ui.nbItem(); };
|
||||
PluginUpdateInfo* getPluginInfoFromUiIndex(size_t index) const { return reinterpret_cast<PluginUpdateInfo*>(_ui.getLParamFromIndex(static_cast<int>(index))); };
|
||||
PluginUpdateInfo* findPluginInfoFromFolderName(const generic_string& folderName, int& index) const;
|
||||
PluginUpdateInfo* findPluginInfoFromFolderName(const std::wstring& folderName, int& index) const;
|
||||
bool removeFromListIndex(size_t index2remove);
|
||||
bool hideFromListIndex(size_t index2Hide);
|
||||
bool removeFromFolderName(const generic_string& folderName);
|
||||
bool removeFromFolderName(const std::wstring& folderName);
|
||||
bool removeFromUiIndex(size_t index2remove);
|
||||
bool hideFromPluginInfoPtr(PluginUpdateInfo* pluginInfo2hide);
|
||||
bool restore(const generic_string& folderName);
|
||||
bool restore(const std::wstring& folderName);
|
||||
bool removeFromPluginInfoPtr(PluginUpdateInfo* pluginInfo2hide);
|
||||
void changeColumnName(COLUMN_TYPE index, const TCHAR *name2change);
|
||||
void changeColumnName(COLUMN_TYPE index, const wchar_t *name2change);
|
||||
|
||||
private:
|
||||
// _list & _ui should keep being synchronized
|
||||
|
@ -167,9 +167,9 @@ public :
|
|||
bool updatePlugins();
|
||||
bool removePlugins();
|
||||
|
||||
void changeTabName(LIST_TYPE index, const TCHAR *name2change);
|
||||
void changeColumnName(COLUMN_TYPE index, const TCHAR *name2change);
|
||||
generic_string getPluginListVerStr() const;
|
||||
void changeTabName(LIST_TYPE index, const wchar_t *name2change);
|
||||
void changeColumnName(COLUMN_TYPE index, const wchar_t *name2change);
|
||||
std::wstring getPluginListVerStr() const;
|
||||
const PluginViewList & getAvailablePluginUpdateInfoList() const {
|
||||
return _availableList;
|
||||
};
|
||||
|
@ -182,9 +182,9 @@ protected:
|
|||
intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) override;
|
||||
|
||||
private :
|
||||
generic_string _updaterDir;
|
||||
generic_string _updaterFullPath;
|
||||
generic_string _pluginListFullPath;
|
||||
std::wstring _updaterDir;
|
||||
std::wstring _updaterFullPath;
|
||||
std::wstring _pluginListFullPath;
|
||||
|
||||
TabBar _tab;
|
||||
|
||||
|
@ -203,13 +203,13 @@ private :
|
|||
bool searchInPlugins(bool isNextMode) const;
|
||||
const bool _inNames = true;
|
||||
const bool _inDescs = false;
|
||||
bool isFoundInListFromIndex(const PluginViewList& inWhichList,int index, const generic_string& str2search, bool inWhichPart) const;
|
||||
long searchFromCurrentSel(const PluginViewList& inWhichList, const generic_string& str2search, bool inWhichPart, bool isNextMode) const;
|
||||
long searchInNamesFromCurrentSel(const PluginViewList& inWhichList, const generic_string& str2search, bool isNextMode) const {
|
||||
bool isFoundInListFromIndex(const PluginViewList& inWhichList,int index, const std::wstring& str2search, bool inWhichPart) const;
|
||||
long searchFromCurrentSel(const PluginViewList& inWhichList, const std::wstring& str2search, bool inWhichPart, bool isNextMode) const;
|
||||
long searchInNamesFromCurrentSel(const PluginViewList& inWhichList, const std::wstring& str2search, bool isNextMode) const {
|
||||
return searchFromCurrentSel(inWhichList, str2search, _inNames, isNextMode);
|
||||
};
|
||||
|
||||
long searchInDescsFromCurrentSel(const PluginViewList& inWhichList, const generic_string& str2search, bool isNextMode) const {
|
||||
long searchInDescsFromCurrentSel(const PluginViewList& inWhichList, const std::wstring& str2search, bool isNextMode) const {
|
||||
return searchFromCurrentSel(inWhichList, str2search, _inDescs, isNextMode);
|
||||
};
|
||||
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
#define INDEX_LEAF 5
|
||||
#define INDEX_LEAF_INVALID 6
|
||||
|
||||
using namespace std;
|
||||
|
||||
ProjectPanel::~ProjectPanel()
|
||||
{
|
||||
for (const auto& s : fullPathStrs)
|
||||
|
@ -55,8 +57,8 @@ intptr_t CALLBACK ProjectPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM
|
|||
TBBUTTON tbButtons[2]{};
|
||||
|
||||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
generic_string workspace_entry = pNativeSpeaker->getProjectPanelLangMenuStr("Entries", 0, PM_WORKSPACEMENUENTRY);
|
||||
generic_string edit_entry = pNativeSpeaker->getProjectPanelLangMenuStr("Entries", 1, PM_EDITMENUENTRY);
|
||||
wstring workspace_entry = pNativeSpeaker->getProjectPanelLangMenuStr("Entries", 0, PM_WORKSPACEMENUENTRY);
|
||||
wstring edit_entry = pNativeSpeaker->getProjectPanelLangMenuStr("Entries", 1, PM_EDITMENUENTRY);
|
||||
|
||||
tbButtons[0].idCommand = IDB_PROJECT_BTN;
|
||||
tbButtons[0].iBitmap = I_IMAGENONE;
|
||||
|
@ -188,12 +190,12 @@ bool ProjectPanel::checkIfNeedSave()
|
|||
{
|
||||
if (_isDirty)
|
||||
{
|
||||
const TCHAR * title = _workSpaceFilePath.length() > 0 ? PathFindFileName (_workSpaceFilePath.c_str()) : _panelTitle.c_str();
|
||||
const wchar_t * title = _workSpaceFilePath.length() > 0 ? PathFindFileName (_workSpaceFilePath.c_str()) : _panelTitle.c_str();
|
||||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
int res = pNativeSpeaker->messageBox("ProjectPanelChanged",
|
||||
_hSelf,
|
||||
TEXT("The workspace was modified. Do you want to save it?"),
|
||||
TEXT("$STR_REPLACE$"),
|
||||
L"The workspace was modified. Do you want to save it?",
|
||||
L"$STR_REPLACE$",
|
||||
MB_YESNOCANCEL | MB_ICONQUESTION,
|
||||
0,
|
||||
title);
|
||||
|
@ -222,14 +224,14 @@ void ProjectPanel::initMenus()
|
|||
|
||||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
|
||||
generic_string new_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_NEWWS, PM_NEWWORKSPACE);
|
||||
generic_string open_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_OPENWS, PM_OPENWORKSPACE);
|
||||
generic_string reload_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_RELOADWS, PM_RELOADWORKSPACE);
|
||||
generic_string save_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_SAVEWS, PM_SAVEWORKSPACE);
|
||||
generic_string saveas_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_SAVEASWS, PM_SAVEASWORKSPACE);
|
||||
generic_string saveacopyas_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_SAVEACOPYASWS, PM_SAVEACOPYASWORKSPACE);
|
||||
generic_string newproject_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_NEWPROJECT, PM_NEWPROJECTWORKSPACE);
|
||||
generic_string findinprojects_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_FINDINPROJECTSWS, PM_FINDINFILESWORKSPACE);
|
||||
wstring new_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_NEWWS, PM_NEWWORKSPACE);
|
||||
wstring open_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_OPENWS, PM_OPENWORKSPACE);
|
||||
wstring reload_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_RELOADWS, PM_RELOADWORKSPACE);
|
||||
wstring save_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_SAVEWS, PM_SAVEWORKSPACE);
|
||||
wstring saveas_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_SAVEASWS, PM_SAVEASWORKSPACE);
|
||||
wstring saveacopyas_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_SAVEACOPYASWS, PM_SAVEACOPYASWORKSPACE);
|
||||
wstring newproject_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_NEWPROJECT, PM_NEWPROJECTWORKSPACE);
|
||||
wstring findinprojects_workspace = pNativeSpeaker->getProjectPanelLangMenuStr("WorkspaceMenu", IDM_PROJECT_FINDINPROJECTSWS, PM_FINDINFILESWORKSPACE);
|
||||
|
||||
::InsertMenu(_hWorkSpaceMenu, 0, MF_BYCOMMAND, IDM_PROJECT_NEWWS, new_workspace.c_str());
|
||||
::InsertMenu(_hWorkSpaceMenu, 0, MF_BYCOMMAND, IDM_PROJECT_OPENWS, open_workspace.c_str());
|
||||
|
@ -242,13 +244,13 @@ void ProjectPanel::initMenus()
|
|||
::InsertMenu(_hWorkSpaceMenu, 0, MF_BYCOMMAND, static_cast<UINT>(-1), 0);
|
||||
::InsertMenu(_hWorkSpaceMenu, 0, MF_BYCOMMAND, IDM_PROJECT_FINDINPROJECTSWS, findinprojects_workspace.c_str());
|
||||
|
||||
generic_string edit_moveup = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_MOVEUP, PM_MOVEUPENTRY);
|
||||
generic_string edit_movedown = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_MOVEDOWN, PM_MOVEDOWNENTRY);
|
||||
generic_string edit_rename = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_RENAME, PM_EDITRENAME);
|
||||
generic_string edit_addfolder = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_NEWFOLDER, PM_EDITNEWFOLDER);
|
||||
generic_string edit_addfiles = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_ADDFILES, PM_EDITADDFILES);
|
||||
generic_string edit_addfilesRecursive = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_ADDFILESRECUSIVELY, PM_EDITADDFILESRECUSIVELY);
|
||||
generic_string edit_remove = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_DELETEFOLDER, PM_EDITREMOVE);
|
||||
wstring edit_moveup = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_MOVEUP, PM_MOVEUPENTRY);
|
||||
wstring edit_movedown = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_MOVEDOWN, PM_MOVEDOWNENTRY);
|
||||
wstring edit_rename = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_RENAME, PM_EDITRENAME);
|
||||
wstring edit_addfolder = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_NEWFOLDER, PM_EDITNEWFOLDER);
|
||||
wstring edit_addfiles = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_ADDFILES, PM_EDITADDFILES);
|
||||
wstring edit_addfilesRecursive = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_ADDFILESRECUSIVELY, PM_EDITADDFILESRECUSIVELY);
|
||||
wstring edit_remove = pNativeSpeaker->getProjectPanelLangMenuStr("ProjectMenu", IDM_PROJECT_DELETEFOLDER, PM_EDITREMOVE);
|
||||
|
||||
_hProjectMenu = ::CreatePopupMenu();
|
||||
::InsertMenu(_hProjectMenu, 0, MF_BYCOMMAND, IDM_PROJECT_MOVEUP, edit_moveup.c_str());
|
||||
|
@ -282,7 +284,7 @@ void ProjectPanel::initMenus()
|
|||
edit_movedown = pNativeSpeaker->getProjectPanelLangMenuStr("FileMenu", IDM_PROJECT_MOVEDOWN, PM_MOVEDOWNENTRY);
|
||||
edit_rename = pNativeSpeaker->getProjectPanelLangMenuStr("FileMenu", IDM_PROJECT_RENAME, PM_EDITRENAME);
|
||||
edit_remove = pNativeSpeaker->getProjectPanelLangMenuStr("FileMenu", IDM_PROJECT_DELETEFILE, PM_EDITREMOVE);
|
||||
generic_string edit_modifyfile = pNativeSpeaker->getProjectPanelLangMenuStr("FileMenu", IDM_PROJECT_MODIFYFILEPATH, PM_EDITMODIFYFILE);
|
||||
wstring edit_modifyfile = pNativeSpeaker->getProjectPanelLangMenuStr("FileMenu", IDM_PROJECT_MODIFYFILEPATH, PM_EDITMODIFYFILE);
|
||||
|
||||
_hFileMenu = ::CreatePopupMenu();
|
||||
::InsertMenu(_hFileMenu, 0, MF_BYCOMMAND, IDM_PROJECT_MOVEUP, edit_moveup.c_str());
|
||||
|
@ -301,11 +303,11 @@ void ProjectPanel::destroyMenus()
|
|||
::DestroyMenu(_hFileMenu);
|
||||
}
|
||||
|
||||
bool ProjectPanel::openWorkSpace(const TCHAR *projectFileName, bool force)
|
||||
bool ProjectPanel::openWorkSpace(const wchar_t *projectFileName, bool force)
|
||||
{
|
||||
if ((!force) && (_workSpaceFilePath.length() > 0))
|
||||
{ // Return if it is better to keep the current workspace tree
|
||||
generic_string newWorkspace = projectFileName;
|
||||
wstring newWorkspace = projectFileName;
|
||||
if (newWorkspace == _workSpaceFilePath)
|
||||
return true;
|
||||
if (!saveWorkspaceRequest())
|
||||
|
@ -320,7 +322,7 @@ bool ProjectPanel::openWorkSpace(const TCHAR *projectFileName, bool force)
|
|||
return false;
|
||||
}
|
||||
|
||||
TiXmlNode *root = pXmlDocProject->FirstChild(TEXT("NotepadPlus"));
|
||||
TiXmlNode *root = pXmlDocProject->FirstChild(L"NotepadPlus");
|
||||
if (!root)
|
||||
{
|
||||
delete pXmlDocProject;
|
||||
|
@ -328,7 +330,7 @@ bool ProjectPanel::openWorkSpace(const TCHAR *projectFileName, bool force)
|
|||
}
|
||||
|
||||
|
||||
TiXmlNode *childNode = root->FirstChildElement(TEXT("Project"));
|
||||
TiXmlNode *childNode = root->FirstChildElement(L"Project");
|
||||
if (!childNode)
|
||||
{
|
||||
delete pXmlDocProject;
|
||||
|
@ -344,12 +346,12 @@ bool ProjectPanel::openWorkSpace(const TCHAR *projectFileName, bool force)
|
|||
_treeView.removeAllItems();
|
||||
_workSpaceFilePath = projectFileName;
|
||||
|
||||
TCHAR * fileName = PathFindFileName(projectFileName);
|
||||
wchar_t * fileName = PathFindFileName(projectFileName);
|
||||
HTREEITEM rootItem = _treeView.addItem(fileName, TVI_ROOT, INDEX_CLEAN_ROOT);
|
||||
|
||||
for ( ; childNode ; childNode = childNode->NextSibling(TEXT("Project")))
|
||||
for ( ; childNode ; childNode = childNode->NextSibling(L"Project"))
|
||||
{
|
||||
HTREEITEM projectItem = _treeView.addItem((childNode->ToElement())->Attribute(TEXT("name")), rootItem, INDEX_PROJECT);
|
||||
HTREEITEM projectItem = _treeView.addItem((childNode->ToElement())->Attribute(L"name"), rootItem, INDEX_PROJECT);
|
||||
buildTreeFrom(childNode, projectItem);
|
||||
}
|
||||
setWorkSpaceDirty(false);
|
||||
|
@ -362,15 +364,15 @@ bool ProjectPanel::openWorkSpace(const TCHAR *projectFileName, bool force)
|
|||
void ProjectPanel::newWorkSpace()
|
||||
{
|
||||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
generic_string workspace = pNativeSpeaker->getAttrNameStr(PM_WORKSPACEROOTNAME, "ProjectManager", "WorkspaceRootName");
|
||||
wstring workspace = pNativeSpeaker->getAttrNameStr(PM_WORKSPACEROOTNAME, "ProjectManager", "WorkspaceRootName");
|
||||
_treeView.addItem(workspace.c_str(), TVI_ROOT, INDEX_CLEAN_ROOT);
|
||||
setWorkSpaceDirty(false);
|
||||
_workSpaceFilePath = TEXT("");
|
||||
_workSpaceFilePath = L"";
|
||||
}
|
||||
|
||||
bool ProjectPanel::saveWorkSpace()
|
||||
{
|
||||
if (_workSpaceFilePath == TEXT(""))
|
||||
if (_workSpaceFilePath == L"")
|
||||
{
|
||||
return saveWorkSpaceAs(false);
|
||||
}
|
||||
|
@ -384,14 +386,14 @@ bool ProjectPanel::saveWorkSpace()
|
|||
}
|
||||
}
|
||||
|
||||
bool ProjectPanel::writeWorkSpace(const TCHAR *projectFileName, bool doUpdateGUI)
|
||||
bool ProjectPanel::writeWorkSpace(const wchar_t *projectFileName, bool doUpdateGUI)
|
||||
{
|
||||
//write <NotepadPlus>: use the default file name if new file name is not given
|
||||
const TCHAR * fn2write = projectFileName?projectFileName:_workSpaceFilePath.c_str();
|
||||
const wchar_t * fn2write = projectFileName?projectFileName:_workSpaceFilePath.c_str();
|
||||
TiXmlDocument projDoc(fn2write);
|
||||
TiXmlNode *root = projDoc.InsertEndChild(TiXmlElement(TEXT("NotepadPlus")));
|
||||
TiXmlNode *root = projDoc.InsertEndChild(TiXmlElement(L"NotepadPlus"));
|
||||
|
||||
TCHAR textBuffer[MAX_PATH] = { '\0' };
|
||||
wchar_t textBuffer[MAX_PATH] = { '\0' };
|
||||
TVITEM tvItem{};
|
||||
tvItem.mask = TVIF_TEXT;
|
||||
tvItem.pszText = textBuffer;
|
||||
|
@ -410,25 +412,25 @@ bool ProjectPanel::writeWorkSpace(const TCHAR *projectFileName, bool doUpdateGUI
|
|||
SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0, reinterpret_cast<LPARAM>(&tvItem));
|
||||
//printStr(tvItem.pszText);
|
||||
|
||||
TiXmlNode *projRoot = root->InsertEndChild(TiXmlElement(TEXT("Project")));
|
||||
projRoot->ToElement()->SetAttribute(TEXT("name"), tvItem.pszText);
|
||||
TiXmlNode *projRoot = root->InsertEndChild(TiXmlElement(L"Project"));
|
||||
projRoot->ToElement()->SetAttribute(L"name", tvItem.pszText);
|
||||
buildProjectXml(projRoot, tvProj, fn2write);
|
||||
}
|
||||
|
||||
if (!projDoc.SaveFile())
|
||||
{
|
||||
const TCHAR * title = _workSpaceFilePath.length() > 0 ? PathFindFileName (_workSpaceFilePath.c_str()) : _panelTitle.c_str();
|
||||
const wchar_t * title = _workSpaceFilePath.length() > 0 ? PathFindFileName (_workSpaceFilePath.c_str()) : _panelTitle.c_str();
|
||||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
pNativeSpeaker->messageBox("ProjectPanelSaveError",
|
||||
_hSelf,
|
||||
TEXT("An error occurred while writing your workspace file.\nYour workspace has not been saved."),
|
||||
TEXT("$STR_REPLACE$"),
|
||||
L"An error occurred while writing your workspace file.\nYour workspace has not been saved.",
|
||||
L"$STR_REPLACE$",
|
||||
MB_OK | MB_ICONERROR,
|
||||
0,
|
||||
title);
|
||||
return false;
|
||||
}
|
||||
TCHAR * fileName = PathFindFileName(fn2write);
|
||||
wchar_t * fileName = PathFindFileName(fn2write);
|
||||
if (doUpdateGUI)
|
||||
{
|
||||
_treeView.renameItem(tvRoot, fileName);
|
||||
|
@ -436,9 +438,9 @@ bool ProjectPanel::writeWorkSpace(const TCHAR *projectFileName, bool doUpdateGUI
|
|||
return true;
|
||||
}
|
||||
|
||||
void ProjectPanel::buildProjectXml(TiXmlNode *node, HTREEITEM hItem, const TCHAR* fn2write)
|
||||
void ProjectPanel::buildProjectXml(TiXmlNode *node, HTREEITEM hItem, const wchar_t* fn2write)
|
||||
{
|
||||
TCHAR textBuffer[MAX_PATH] = { '\0' };
|
||||
wchar_t textBuffer[MAX_PATH] = { '\0' };
|
||||
TVITEM tvItem{};
|
||||
tvItem.mask = TVIF_TEXT | TVIF_PARAM;
|
||||
tvItem.pszText = textBuffer;
|
||||
|
@ -452,23 +454,23 @@ void ProjectPanel::buildProjectXml(TiXmlNode *node, HTREEITEM hItem, const TCHAR
|
|||
SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0, reinterpret_cast<LPARAM>(&tvItem));
|
||||
if (tvItem.lParam)
|
||||
{
|
||||
generic_string *fn = (generic_string *)tvItem.lParam;
|
||||
generic_string newFn = getRelativePath(*fn, fn2write);
|
||||
TiXmlNode *fileLeaf = node->InsertEndChild(TiXmlElement(TEXT("File")));
|
||||
fileLeaf->ToElement()->SetAttribute(TEXT("name"), newFn.c_str());
|
||||
wstring *fn = (wstring *)tvItem.lParam;
|
||||
wstring newFn = getRelativePath(*fn, fn2write);
|
||||
TiXmlNode *fileLeaf = node->InsertEndChild(TiXmlElement(L"File"));
|
||||
fileLeaf->ToElement()->SetAttribute(L"name", newFn.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
TiXmlNode *folderNode = node->InsertEndChild(TiXmlElement(TEXT("Folder")));
|
||||
folderNode->ToElement()->SetAttribute(TEXT("name"), tvItem.pszText);
|
||||
TiXmlNode *folderNode = node->InsertEndChild(TiXmlElement(L"Folder"));
|
||||
folderNode->ToElement()->SetAttribute(L"name", tvItem.pszText);
|
||||
buildProjectXml(folderNode, hItemNode, fn2write);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool ProjectPanel::enumWorkSpaceFiles(HTREEITEM tvFrom, const std::vector<generic_string> & patterns, std::vector<generic_string> & fileNames)
|
||||
bool ProjectPanel::enumWorkSpaceFiles(HTREEITEM tvFrom, const std::vector<wstring> & patterns, std::vector<wstring> & fileNames)
|
||||
{
|
||||
TCHAR textBuffer[MAX_PATH] = { '\0' };
|
||||
wchar_t textBuffer[MAX_PATH] = { '\0' };
|
||||
TVITEM tvItem{};
|
||||
tvItem.mask = TVIF_TEXT | TVIF_PARAM;
|
||||
tvItem.pszText = textBuffer;
|
||||
|
@ -487,7 +489,7 @@ bool ProjectPanel::enumWorkSpaceFiles(HTREEITEM tvFrom, const std::vector<generi
|
|||
{
|
||||
if (matchInList(tvItem.pszText, patterns))
|
||||
{
|
||||
generic_string *fn = (generic_string *)tvItem.lParam;
|
||||
wstring *fn = (wstring *)tvItem.lParam;
|
||||
fileNames.push_back (*fn);
|
||||
}
|
||||
}
|
||||
|
@ -499,16 +501,16 @@ bool ProjectPanel::enumWorkSpaceFiles(HTREEITEM tvFrom, const std::vector<generi
|
|||
return true;
|
||||
}
|
||||
|
||||
generic_string ProjectPanel::getRelativePath(const generic_string & filePath, const TCHAR *workSpaceFileName)
|
||||
wstring ProjectPanel::getRelativePath(const wstring & filePath, const wchar_t *workSpaceFileName)
|
||||
{
|
||||
TCHAR wsfn[MAX_PATH] = { '\0' };
|
||||
wchar_t wsfn[MAX_PATH] = { '\0' };
|
||||
wcscpy_s(wsfn, workSpaceFileName);
|
||||
::PathRemoveFileSpec(wsfn);
|
||||
|
||||
size_t pos_found = filePath.find(wsfn);
|
||||
if (pos_found == generic_string::npos)
|
||||
if (pos_found == wstring::npos)
|
||||
return filePath;
|
||||
const TCHAR *relativeFile = filePath.c_str() + lstrlen(wsfn);
|
||||
const wchar_t *relativeFile = filePath.c_str() + lstrlen(wsfn);
|
||||
if (relativeFile[0] == '\\')
|
||||
++relativeFile;
|
||||
return relativeFile;
|
||||
|
@ -520,10 +522,10 @@ bool ProjectPanel::buildTreeFrom(TiXmlNode *projectRoot, HTREEITEM hParentItem)
|
|||
childNode ;
|
||||
childNode = childNode->NextSibling())
|
||||
{
|
||||
const TCHAR *v = childNode->Value();
|
||||
if (lstrcmp(TEXT("Folder"), v) == 0)
|
||||
const wchar_t *v = childNode->Value();
|
||||
if (lstrcmp(L"Folder", v) == 0)
|
||||
{
|
||||
HTREEITEM addedItem = _treeView.addItem((childNode->ToElement())->Attribute(TEXT("name")), hParentItem, INDEX_CLOSED_NODE);
|
||||
HTREEITEM addedItem = _treeView.addItem((childNode->ToElement())->Attribute(L"name"), hParentItem, INDEX_CLOSED_NODE);
|
||||
if (!childNode->NoChildren())
|
||||
{
|
||||
bool isOK = buildTreeFrom(childNode, addedItem);
|
||||
|
@ -531,14 +533,14 @@ bool ProjectPanel::buildTreeFrom(TiXmlNode *projectRoot, HTREEITEM hParentItem)
|
|||
return false;
|
||||
}
|
||||
}
|
||||
else if (lstrcmp(TEXT("File"), v) == 0)
|
||||
else if (lstrcmp(L"File", v) == 0)
|
||||
{
|
||||
const TCHAR *strValue = (childNode->ToElement())->Attribute(TEXT("name"));
|
||||
generic_string fullPath = getAbsoluteFilePath(strValue);
|
||||
TCHAR *strValueLabel = ::PathFindFileName(strValue);
|
||||
const wchar_t *strValue = (childNode->ToElement())->Attribute(L"name");
|
||||
wstring fullPath = getAbsoluteFilePath(strValue);
|
||||
wchar_t *strValueLabel = ::PathFindFileName(strValue);
|
||||
int iImage = ::PathFileExists(fullPath.c_str())?INDEX_LEAF:INDEX_LEAF_INVALID;
|
||||
|
||||
generic_string* fullPathStr = new generic_string(fullPath);
|
||||
wstring* fullPathStr = new wstring(fullPath);
|
||||
fullPathStrs.push_back(fullPathStr);
|
||||
LPARAM lParamFullPathStr = reinterpret_cast<LPARAM>(fullPathStr);
|
||||
|
||||
|
@ -548,12 +550,12 @@ bool ProjectPanel::buildTreeFrom(TiXmlNode *projectRoot, HTREEITEM hParentItem)
|
|||
return true;
|
||||
}
|
||||
|
||||
generic_string ProjectPanel::getAbsoluteFilePath(const TCHAR * relativePath)
|
||||
wstring ProjectPanel::getAbsoluteFilePath(const wchar_t * relativePath)
|
||||
{
|
||||
if (!::PathIsRelative(relativePath))
|
||||
return relativePath;
|
||||
|
||||
TCHAR absolutePath[MAX_PATH] = { '\0' };
|
||||
wchar_t absolutePath[MAX_PATH] = { '\0' };
|
||||
wcscpy_s(absolutePath, _workSpaceFilePath.c_str());
|
||||
::PathRemoveFileSpec(absolutePath);
|
||||
::PathAppend(absolutePath, relativePath);
|
||||
|
@ -568,7 +570,7 @@ void ProjectPanel::openSelectFile()
|
|||
::SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0, reinterpret_cast<LPARAM>(&tvItem));
|
||||
|
||||
NodeType nType = getNodeType(tvItem.hItem);
|
||||
generic_string *fn = (generic_string *)tvItem.lParam;
|
||||
wstring *fn = (wstring *)tvItem.lParam;
|
||||
if (nType == nodeType_file && fn)
|
||||
{
|
||||
tvItem.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
|
||||
|
@ -597,7 +599,7 @@ void ProjectPanel::notified(LPNMHDR notification)
|
|||
}
|
||||
else if (notification->hwndFrom == _treeView.getHSelf())
|
||||
{
|
||||
TCHAR textBuffer[MAX_PATH] = { '\0' };
|
||||
wchar_t textBuffer[MAX_PATH] = { '\0' };
|
||||
TVITEM tvItem{};
|
||||
tvItem.mask = TVIF_TEXT | TVIF_PARAM;
|
||||
tvItem.pszText = textBuffer;
|
||||
|
@ -632,11 +634,11 @@ void ProjectPanel::notified(LPNMHDR notification)
|
|||
size_t len = lstrlen(tvItem.pszText);
|
||||
|
||||
// Find the position of old label in File path
|
||||
generic_string *filePath = (generic_string *)tvnotif->item.lParam;
|
||||
wstring *filePath = (wstring *)tvnotif->item.lParam;
|
||||
size_t found = filePath->rfind(tvItem.pszText);
|
||||
|
||||
// If found the old label, replace it with the modified one
|
||||
if (found != generic_string::npos)
|
||||
if (found != wstring::npos)
|
||||
filePath->replace(found, len, tvnotif->item.pszText);
|
||||
|
||||
// Check the validity of modified file path
|
||||
|
@ -663,7 +665,7 @@ void ProjectPanel::notified(LPNMHDR notification)
|
|||
case TVN_GETINFOTIP:
|
||||
{
|
||||
LPNMTVGETINFOTIP lpGetInfoTip = (LPNMTVGETINFOTIP)notification;
|
||||
generic_string *str = NULL ;
|
||||
wstring *str = NULL ;
|
||||
|
||||
if (_treeView.getRoot() == lpGetInfoTip->hItem)
|
||||
{
|
||||
|
@ -671,7 +673,7 @@ void ProjectPanel::notified(LPNMHDR notification)
|
|||
}
|
||||
else
|
||||
{
|
||||
str = (generic_string *)lpGetInfoTip->lParam;
|
||||
str = (wstring *)lpGetInfoTip->lParam;
|
||||
if (!str)
|
||||
return;
|
||||
}
|
||||
|
@ -856,7 +858,7 @@ POINT ProjectPanel::getMenuDisplayPoint(int iButton)
|
|||
return p;
|
||||
}
|
||||
|
||||
HTREEITEM ProjectPanel::addFolder(HTREEITEM hTreeItem, const TCHAR *folderName)
|
||||
HTREEITEM ProjectPanel::addFolder(HTREEITEM hTreeItem, const wchar_t *folderName)
|
||||
{
|
||||
HTREEITEM addedItem = _treeView.addItem(folderName, hTreeItem, INDEX_CLOSED_NODE);
|
||||
|
||||
|
@ -875,8 +877,8 @@ bool ProjectPanel::saveWorkspaceRequest()
|
|||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
int res = pNativeSpeaker->messageBox("ProjectPanelOpenDoSaveDirtyWsOrNot",
|
||||
_hSelf,
|
||||
TEXT("The current workspace was modified. Do you want to save the current project?"),
|
||||
TEXT("Open Workspace"),
|
||||
L"The current workspace was modified. Do you want to save the current project?",
|
||||
L"Open Workspace",
|
||||
MB_YESNOCANCEL | MB_ICONQUESTION | MB_APPLMODAL);
|
||||
|
||||
if (res == IDYES)
|
||||
|
@ -944,7 +946,7 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
HTREEITEM root = _treeView.getRoot();
|
||||
|
||||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
generic_string newProjectLabel = pNativeSpeaker->getAttrNameStr(PM_NEWPROJECTNAME, "ProjectManager", "NewProjectName");
|
||||
wstring newProjectLabel = pNativeSpeaker->getAttrNameStr(PM_NEWPROJECTNAME, "ProjectManager", "NewProjectName");
|
||||
HTREEITEM addedItem = _treeView.addItem(newProjectLabel.c_str(), root, INDEX_PROJECT);
|
||||
setWorkSpaceDirty(true);
|
||||
_treeView.expand(hTreeItem);
|
||||
|
@ -959,8 +961,8 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
int res = pNativeSpeaker->messageBox("ProjectPanelNewDoSaveDirtyWsOrNot",
|
||||
_hSelf,
|
||||
TEXT("The current workspace was modified. Do you want to save the current project?"),
|
||||
TEXT("New Workspace"),
|
||||
L"The current workspace was modified. Do you want to save the current project?",
|
||||
L"New Workspace",
|
||||
MB_YESNOCANCEL | MB_ICONQUESTION | MB_APPLMODAL);
|
||||
if (res == IDYES)
|
||||
{
|
||||
|
@ -989,7 +991,7 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
case IDM_PROJECT_NEWFOLDER :
|
||||
{
|
||||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
generic_string newFolderLabel = pNativeSpeaker->getAttrNameStr(PM_NEWFOLDERNAME, "ProjectManager", "NewFolderName");
|
||||
wstring newFolderLabel = pNativeSpeaker->getAttrNameStr(PM_NEWFOLDERNAME, "ProjectManager", "NewFolderName");
|
||||
addFolder(hTreeItem, newFolderLabel.c_str());
|
||||
setWorkSpaceDirty(true);
|
||||
}
|
||||
|
@ -1032,7 +1034,7 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
|
||||
CustomFileDialog fDlg(_hSelf);
|
||||
setFileExtFilter(fDlg);
|
||||
const generic_string fn = fDlg.doOpenSingleFileDlg();
|
||||
const wstring fn = fDlg.doOpenSingleFileDlg();
|
||||
if (!fn.empty())
|
||||
{
|
||||
if (!openWorkSpace(fn.c_str(), true))
|
||||
|
@ -1040,8 +1042,8 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
pNativeSpeaker->messageBox("ProjectPanelOpenFailed",
|
||||
_hSelf,
|
||||
TEXT("The workspace could not be opened.\rIt seems the file to open is not a valid project file."),
|
||||
TEXT("Open Workspace"),
|
||||
L"The workspace could not be opened.\rIt seems the file to open is not a valid project file.",
|
||||
L"Open Workspace",
|
||||
MB_OK);
|
||||
return;
|
||||
}
|
||||
|
@ -1057,8 +1059,8 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
{
|
||||
int res = pNativeSpeaker->messageBox("ProjectPanelReloadDirty",
|
||||
_hSelf,
|
||||
TEXT("The current workspace was modified. Reloading will discard all modifications.\rDo you want to continue?"),
|
||||
TEXT("Reload Workspace"),
|
||||
L"The current workspace was modified. Reloading will discard all modifications.\rDo you want to continue?",
|
||||
L"Reload Workspace",
|
||||
MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL);
|
||||
|
||||
if (res == IDYES)
|
||||
|
@ -1079,8 +1081,8 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
{
|
||||
pNativeSpeaker->messageBox("ProjectPanelReloadError",
|
||||
_hSelf,
|
||||
TEXT("Cannot find the file to reload."),
|
||||
TEXT("Reload Workspace"),
|
||||
L"Cannot find the file to reload.",
|
||||
L"Reload Workspace",
|
||||
MB_OK);
|
||||
}
|
||||
}
|
||||
|
@ -1112,8 +1114,8 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
int res = pNativeSpeaker->messageBox("ProjectPanelRemoveFolderFromProject",
|
||||
_hSelf,
|
||||
TEXT("All the sub-items will be removed.\rAre you sure you want to remove this folder from the project?"),
|
||||
TEXT("Remove folder from project"),
|
||||
L"All the sub-items will be removed.\rAre you sure you want to remove this folder from the project?",
|
||||
L"Remove folder from project",
|
||||
MB_YESNO);
|
||||
if (res == IDYES)
|
||||
{
|
||||
|
@ -1138,8 +1140,8 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker();
|
||||
int res = pNativeSpeaker->messageBox("ProjectPanelRemoveFileFromProject",
|
||||
_hSelf,
|
||||
TEXT("Are you sure you want to remove this file from the project?"),
|
||||
TEXT("Remove file from project"),
|
||||
L"Are you sure you want to remove this file from the project?",
|
||||
L"Remove file from project",
|
||||
MB_YESNO);
|
||||
if (res == IDYES)
|
||||
{
|
||||
|
@ -1156,7 +1158,7 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
FileRelocalizerDlg fileRelocalizerDlg;
|
||||
fileRelocalizerDlg.init(_hInst, _hParent);
|
||||
|
||||
TCHAR textBuffer[MAX_PATH] = { '\0' };
|
||||
wchar_t textBuffer[MAX_PATH] = { '\0' };
|
||||
TVITEM tvItem{};
|
||||
tvItem.hItem = hTreeItem;
|
||||
tvItem.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
|
||||
|
@ -1166,16 +1168,16 @@ void ProjectPanel::popupMenuCmd(int cmdID)
|
|||
SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0, reinterpret_cast<LPARAM>(&tvItem));
|
||||
if (!tvItem.lParam)
|
||||
return;
|
||||
generic_string * fn = (generic_string *)tvItem.lParam;
|
||||
wstring * fn = (wstring *)tvItem.lParam;
|
||||
|
||||
if (fileRelocalizerDlg.doDialog(fn->c_str()) == 0)
|
||||
{
|
||||
generic_string newValue = fileRelocalizerDlg.getFullFilePath();
|
||||
wstring newValue = fileRelocalizerDlg.getFullFilePath();
|
||||
if (*fn == newValue)
|
||||
return;
|
||||
|
||||
*fn = newValue;
|
||||
TCHAR *strValueLabel = ::PathFindFileName(fn->c_str());
|
||||
wchar_t *strValueLabel = ::PathFindFileName(fn->c_str());
|
||||
wcscpy_s(textBuffer, strValueLabel);
|
||||
int iImage = ::PathFileExists(fn->c_str())?INDEX_LEAF:INDEX_LEAF_INVALID;
|
||||
tvItem.iImage = tvItem.iSelectedImage = iImage;
|
||||
|
@ -1194,7 +1196,7 @@ bool ProjectPanel::saveWorkSpaceAs(bool saveCopyAs)
|
|||
fDlg.setExtIndex(0); // 0 index for "custom extention" type if any else for "All types *.*"
|
||||
fDlg.setFolder(getWorkSpaceFilePath());
|
||||
|
||||
const generic_string fn = fDlg.doSaveDlg();
|
||||
const wstring fn = fDlg.doSaveDlg();
|
||||
if (fn.empty())
|
||||
return false;
|
||||
|
||||
|
@ -1211,23 +1213,23 @@ bool ProjectPanel::saveWorkSpaceAs(bool saveCopyAs)
|
|||
|
||||
void ProjectPanel::setFileExtFilter(CustomFileDialog & fDlg)
|
||||
{
|
||||
const TCHAR *ext = NppParameters::getInstance().getNppGUI()._definedWorkspaceExt.c_str();
|
||||
generic_string workspaceExt = TEXT("");
|
||||
const wchar_t *ext = NppParameters::getInstance().getNppGUI()._definedWorkspaceExt.c_str();
|
||||
wstring workspaceExt = L"";
|
||||
if (*ext != '\0')
|
||||
{
|
||||
if (*ext != '.')
|
||||
workspaceExt += TEXT(".");
|
||||
workspaceExt += L".";
|
||||
workspaceExt += ext;
|
||||
fDlg.setExtFilter(TEXT("Workspace file"), workspaceExt.c_str());
|
||||
fDlg.setExtFilter(L"Workspace file", workspaceExt.c_str());
|
||||
fDlg.setDefExt(ext);
|
||||
}
|
||||
fDlg.setExtFilter(TEXT("All types"), TEXT(".*"));
|
||||
fDlg.setExtFilter(L"All types", L".*");
|
||||
}
|
||||
|
||||
void ProjectPanel::addFiles(HTREEITEM hTreeItem)
|
||||
{
|
||||
CustomFileDialog fDlg(_hSelf);
|
||||
fDlg.setExtFilter(TEXT("All types"), TEXT(".*"));
|
||||
fDlg.setExtFilter(L"All types", L".*");
|
||||
|
||||
const auto& fns = fDlg.doOpenMultiFilesDlg();
|
||||
if (!fns.empty())
|
||||
|
@ -1235,9 +1237,9 @@ void ProjectPanel::addFiles(HTREEITEM hTreeItem)
|
|||
size_t sz = fns.size();
|
||||
for (size_t i = 0 ; i < sz ; ++i)
|
||||
{
|
||||
TCHAR *strValueLabel = ::PathFindFileName(fns.at(i).c_str());
|
||||
wchar_t *strValueLabel = ::PathFindFileName(fns.at(i).c_str());
|
||||
|
||||
generic_string* pathFileStr = new generic_string(fns.at(i));
|
||||
wstring* pathFileStr = new wstring(fns.at(i));
|
||||
fullPathStrs.push_back(pathFileStr);
|
||||
LPARAM lParamPathFileStr = reinterpret_cast<LPARAM>(pathFileStr);
|
||||
|
||||
|
@ -1248,15 +1250,15 @@ void ProjectPanel::addFiles(HTREEITEM hTreeItem)
|
|||
}
|
||||
}
|
||||
|
||||
void ProjectPanel::recursiveAddFilesFrom(const TCHAR *folderPath, HTREEITEM hTreeItem)
|
||||
void ProjectPanel::recursiveAddFilesFrom(const wchar_t *folderPath, HTREEITEM hTreeItem)
|
||||
{
|
||||
generic_string dirFilter(folderPath);
|
||||
wstring dirFilter(folderPath);
|
||||
if (folderPath[lstrlen(folderPath)-1] != '\\')
|
||||
dirFilter += TEXT("\\");
|
||||
dirFilter += L"\\";
|
||||
|
||||
dirFilter += TEXT("*.*");
|
||||
dirFilter += L"*.*";
|
||||
WIN32_FIND_DATA foundData;
|
||||
std::vector<generic_string> files;
|
||||
std::vector<wstring> files;
|
||||
|
||||
HANDLE hFile = ::FindFirstFile(dirFilter.c_str(), &foundData);
|
||||
|
||||
|
@ -1272,13 +1274,13 @@ void ProjectPanel::recursiveAddFilesFrom(const TCHAR *folderPath, HTREEITEM hTre
|
|||
}
|
||||
else // Always recursive
|
||||
{
|
||||
if ((wcscmp(foundData.cFileName, TEXT(".")) != 0) && (wcscmp(foundData.cFileName, TEXT("..")) != 0))
|
||||
if ((wcscmp(foundData.cFileName, L".") != 0) && (wcscmp(foundData.cFileName, L"..") != 0))
|
||||
{
|
||||
generic_string pathDir(folderPath);
|
||||
wstring pathDir(folderPath);
|
||||
if (folderPath[lstrlen(folderPath)-1] != '\\')
|
||||
pathDir += TEXT("\\");
|
||||
pathDir += L"\\";
|
||||
pathDir += foundData.cFileName;
|
||||
pathDir += TEXT("\\");
|
||||
pathDir += L"\\";
|
||||
HTREEITEM addedItem = addFolder(hTreeItem, foundData.cFileName);
|
||||
recursiveAddFilesFrom(pathDir.c_str(), addedItem);
|
||||
}
|
||||
|
@ -1292,12 +1294,12 @@ void ProjectPanel::recursiveAddFilesFrom(const TCHAR *folderPath, HTREEITEM hTre
|
|||
|
||||
for (size_t i = 0, len = files.size() ; i < len ; ++i)
|
||||
{
|
||||
generic_string pathFile(folderPath);
|
||||
wstring pathFile(folderPath);
|
||||
if (folderPath[lstrlen(folderPath)-1] != '\\')
|
||||
pathFile += TEXT("\\");
|
||||
pathFile += L"\\";
|
||||
pathFile += files[i];
|
||||
|
||||
generic_string* pathFileStr = new generic_string(pathFile);
|
||||
wstring* pathFileStr = new wstring(pathFile);
|
||||
fullPathStrs.push_back(pathFileStr);
|
||||
LPARAM lParamPathFileStr = reinterpret_cast<LPARAM>(pathFileStr);
|
||||
_treeView.addItem(files[i].c_str(), hTreeItem, INDEX_LEAF, lParamPathFileStr);
|
||||
|
@ -1308,20 +1310,20 @@ void ProjectPanel::recursiveAddFilesFrom(const TCHAR *folderPath, HTREEITEM hTre
|
|||
|
||||
void ProjectPanel::addFilesFromDirectory(HTREEITEM hTreeItem)
|
||||
{
|
||||
if (_selDirOfFilesFromDirDlg == TEXT("") && _workSpaceFilePath != TEXT(""))
|
||||
if (_selDirOfFilesFromDirDlg == L"" && _workSpaceFilePath != L"")
|
||||
{
|
||||
TCHAR dir[MAX_PATH] = { '\0' };
|
||||
wchar_t dir[MAX_PATH] = { '\0' };
|
||||
wcscpy_s(dir, _workSpaceFilePath.c_str());
|
||||
::PathRemoveFileSpec(dir);
|
||||
_selDirOfFilesFromDirDlg = dir;
|
||||
}
|
||||
generic_string dirPath;
|
||||
if (_selDirOfFilesFromDirDlg != TEXT(""))
|
||||
wstring dirPath;
|
||||
if (_selDirOfFilesFromDirDlg != L"")
|
||||
dirPath = getFolderName(_hSelf, _selDirOfFilesFromDirDlg.c_str());
|
||||
else
|
||||
dirPath = getFolderName(_hSelf);
|
||||
|
||||
if (dirPath != TEXT(""))
|
||||
if (dirPath != L"")
|
||||
{
|
||||
recursiveAddFilesFrom(dirPath.c_str(), hTreeItem);
|
||||
_treeView.expand(hTreeItem);
|
||||
|
@ -1384,7 +1386,7 @@ intptr_t CALLBACK FileRelocalizerDlg::run_dlgProc(UINT Message, WPARAM wParam, L
|
|||
{
|
||||
case IDOK :
|
||||
{
|
||||
TCHAR textBuf[MAX_PATH] = { '\0' };
|
||||
wchar_t textBuf[MAX_PATH] = { '\0' };
|
||||
::GetDlgItemText(_hSelf, IDC_EDIT_FILEFULLPATHNAME, textBuf, MAX_PATH);
|
||||
_fullFilePath = textBuf;
|
||||
::EndDialog(_hSelf, 0);
|
||||
|
@ -1405,7 +1407,7 @@ intptr_t CALLBACK FileRelocalizerDlg::run_dlgProc(UINT Message, WPARAM wParam, L
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
int FileRelocalizerDlg::doDialog(const TCHAR *fn, bool isRTL)
|
||||
int FileRelocalizerDlg::doDialog(const wchar_t *fn, bool isRTL)
|
||||
{
|
||||
_fullFilePath = fn;
|
||||
|
||||
|
|
|
@ -21,32 +21,32 @@
|
|||
#include "TreeView.h"
|
||||
#include "ProjectPanel_rc.h"
|
||||
|
||||
#define PM_PROJECTPANELTITLE TEXT("Project Panel")
|
||||
#define PM_WORKSPACEROOTNAME TEXT("Workspace")
|
||||
#define PM_NEWFOLDERNAME TEXT("Folder Name")
|
||||
#define PM_NEWPROJECTNAME TEXT("Project Name")
|
||||
#define PM_PROJECTPANELTITLE L"Project Panel"
|
||||
#define PM_WORKSPACEROOTNAME L"Workspace"
|
||||
#define PM_NEWFOLDERNAME L"Folder Name"
|
||||
#define PM_NEWPROJECTNAME L"Project Name"
|
||||
|
||||
#define PM_NEWWORKSPACE TEXT("New Workspace")
|
||||
#define PM_OPENWORKSPACE TEXT("Open Workspace")
|
||||
#define PM_RELOADWORKSPACE TEXT("Reload Workspace")
|
||||
#define PM_SAVEWORKSPACE TEXT("Save")
|
||||
#define PM_SAVEASWORKSPACE TEXT("Save As...")
|
||||
#define PM_SAVEACOPYASWORKSPACE TEXT("Save a Copy As...")
|
||||
#define PM_NEWPROJECTWORKSPACE TEXT("Add New Project")
|
||||
#define PM_FINDINFILESWORKSPACE TEXT("Find in Projects...")
|
||||
#define PM_NEWWORKSPACE L"New Workspace"
|
||||
#define PM_OPENWORKSPACE L"Open Workspace"
|
||||
#define PM_RELOADWORKSPACE L"Reload Workspace"
|
||||
#define PM_SAVEWORKSPACE L"Save"
|
||||
#define PM_SAVEASWORKSPACE L"Save As..."
|
||||
#define PM_SAVEACOPYASWORKSPACE L"Save a Copy As..."
|
||||
#define PM_NEWPROJECTWORKSPACE L"Add New Project"
|
||||
#define PM_FINDINFILESWORKSPACE L"Find in Projects..."
|
||||
|
||||
#define PM_EDITRENAME TEXT("Rename")
|
||||
#define PM_EDITNEWFOLDER TEXT("Add Folder")
|
||||
#define PM_EDITADDFILES TEXT("Add Files...")
|
||||
#define PM_EDITADDFILESRECUSIVELY TEXT("Add Files from Directory...")
|
||||
#define PM_EDITREMOVE TEXT("Remove\tDEL")
|
||||
#define PM_EDITMODIFYFILE TEXT("Modify File Path")
|
||||
#define PM_EDITRENAME L"Rename"
|
||||
#define PM_EDITNEWFOLDER L"Add Folder"
|
||||
#define PM_EDITADDFILES L"Add Files..."
|
||||
#define PM_EDITADDFILESRECUSIVELY L"Add Files from Directory..."
|
||||
#define PM_EDITREMOVE L"Remove\tDEL"
|
||||
#define PM_EDITMODIFYFILE L"Modify File Path"
|
||||
|
||||
#define PM_WORKSPACEMENUENTRY TEXT("Workspace")
|
||||
#define PM_EDITMENUENTRY TEXT("Edit")
|
||||
#define PM_WORKSPACEMENUENTRY L"Workspace"
|
||||
#define PM_EDITMENUENTRY L"Edit"
|
||||
|
||||
#define PM_MOVEUPENTRY TEXT("Move Up\tCtrl+Up")
|
||||
#define PM_MOVEDOWNENTRY TEXT("Move Down\tCtrl+Down")
|
||||
#define PM_MOVEUPENTRY L"Move Up\tCtrl+Up"
|
||||
#define PM_MOVEDOWNENTRY L"Move Down\tCtrl+Down"
|
||||
|
||||
enum NodeType {
|
||||
nodeType_root = 0, nodeType_project = 1, nodeType_folder = 2, nodeType_file = 3
|
||||
|
@ -69,7 +69,7 @@ public:
|
|||
_hParent = parent2set;
|
||||
};
|
||||
|
||||
void setPanelTitle(generic_string title) {
|
||||
void setPanelTitle(std::wstring title) {
|
||||
_panelTitle = title;
|
||||
};
|
||||
const TCHAR * getPanelTitle() const {
|
||||
|
@ -98,7 +98,7 @@ public:
|
|||
void setForegroundColor(COLORREF fgColour) override {
|
||||
TreeView_SetTextColor(_treeView.getHSelf(), fgColour);
|
||||
};
|
||||
bool enumWorkSpaceFiles(HTREEITEM tvFrom, const std::vector<generic_string> & patterns, std::vector<generic_string> & fileNames);
|
||||
bool enumWorkSpaceFiles(HTREEITEM tvFrom, const std::vector<std::wstring> & patterns, std::vector<std::wstring> & fileNames);
|
||||
|
||||
protected:
|
||||
TreeView _treeView;
|
||||
|
@ -108,9 +108,9 @@ protected:
|
|||
HMENU _hProjectMenu = nullptr;
|
||||
HMENU _hFolderMenu = nullptr;
|
||||
HMENU _hFileMenu = nullptr;
|
||||
generic_string _panelTitle;
|
||||
generic_string _workSpaceFilePath;
|
||||
generic_string _selDirOfFilesFromDirDlg;
|
||||
std::wstring _panelTitle;
|
||||
std::wstring _workSpaceFilePath;
|
||||
std::wstring _selDirOfFilesFromDirDlg;
|
||||
bool _isDirty = false;
|
||||
int _panelID = 0;
|
||||
|
||||
|
@ -122,7 +122,7 @@ protected:
|
|||
HTREEITEM addFolder(HTREEITEM hTreeItem, const TCHAR *folderName);
|
||||
|
||||
bool writeWorkSpace(const TCHAR *projectFileName = NULL, bool doUpdateGUI = true);
|
||||
generic_string getRelativePath(const generic_string & fn, const TCHAR *workSpaceFileName);
|
||||
std::wstring getRelativePath(const std::wstring & fn, const TCHAR *workSpaceFileName);
|
||||
void buildProjectXml(TiXmlNode *root, HTREEITEM hItem, const TCHAR* fn2write);
|
||||
NodeType getNodeType(HTREEITEM hItem);
|
||||
void setWorkSpaceDirty(bool isDirty);
|
||||
|
@ -134,10 +134,10 @@ protected:
|
|||
void showContextMenu(int x, int y);
|
||||
void showContextMenuFromMenuKey(HTREEITEM selectedItem, int x, int y);
|
||||
HMENU getMenuHandler(HTREEITEM selectedItem);
|
||||
generic_string getAbsoluteFilePath(const TCHAR * relativePath);
|
||||
std::wstring getAbsoluteFilePath(const TCHAR * relativePath);
|
||||
void openSelectFile();
|
||||
void setFileExtFilter(CustomFileDialog & fDlg);
|
||||
std::vector<generic_string*> fullPathStrs;
|
||||
std::vector<std::wstring*> fullPathStrs;
|
||||
};
|
||||
|
||||
class FileRelocalizerDlg : public StaticDialog
|
||||
|
@ -149,7 +149,7 @@ public :
|
|||
|
||||
void destroy() override {};
|
||||
|
||||
generic_string getFullFilePath() {
|
||||
std::wstring getFullFilePath() {
|
||||
return _fullFilePath;
|
||||
};
|
||||
|
||||
|
@ -157,6 +157,6 @@ protected :
|
|||
intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) override;
|
||||
|
||||
private :
|
||||
generic_string _fullFilePath;
|
||||
std::wstring _fullFilePath;
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue