[NEW_FEATURE] Unicode path is supported.
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@305 f5eea248-9336-0410-98b8-ebc06183d4e3pull/343/head^2
parent
85db072c3e
commit
aa1f014acb
|
@ -4,6 +4,28 @@
|
||||||
//By Bennett
|
//By Bennett
|
||||||
//Formatting Slightly modified for N++
|
//Formatting Slightly modified for N++
|
||||||
|
|
||||||
|
/*
|
||||||
|
this file is part of Notepad++
|
||||||
|
Copyright (C)2003 Don HO <donho@altern.org>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WIN32EXCEPTION_H
|
||||||
|
#define WIN32EXCEPTION_H
|
||||||
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include <exception>
|
#include <exception>
|
||||||
|
|
||||||
|
@ -41,3 +63,5 @@ private:
|
||||||
|
|
||||||
friend void Win32Exception::translate(unsigned code, EXCEPTION_POINTERS* info);
|
friend void Win32Exception::translate(unsigned code, EXCEPTION_POINTERS* info);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif //WIN32EXCEPTION_H
|
||||||
|
|
|
@ -18,19 +18,19 @@
|
||||||
#ifndef FILENAME_STRING_SPLITTER_H
|
#ifndef FILENAME_STRING_SPLITTER_H
|
||||||
#define FILENAME_STRING_SPLITTER_H
|
#define FILENAME_STRING_SPLITTER_H
|
||||||
|
|
||||||
typedef std::vector<std::string> stringVector;
|
typedef std::vector<std::wstring> stringVectorW;
|
||||||
|
|
||||||
class FileNameStringSplitter
|
class FileNameStringSplitter
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
FileNameStringSplitter(const char *fileNameStr) {
|
FileNameStringSplitter(const wchar_t *fileNameStr) {
|
||||||
//if (!fileNameStr) return;
|
//if (!fileNameStr) return;
|
||||||
char *pStr = NULL;
|
wchar_t *pStr = NULL;
|
||||||
bool isInsideQuotes = false;
|
bool isInsideQuotes = false;
|
||||||
char str[256];
|
wchar_t str[256];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
bool fini = false;
|
bool fini = false;
|
||||||
for (pStr = (char *)fileNameStr ; !fini ; )
|
for (pStr = (wchar_t *)fileNameStr ; !fini ; )
|
||||||
{
|
{
|
||||||
switch (*pStr)
|
switch (*pStr)
|
||||||
{
|
{
|
||||||
|
@ -39,7 +39,7 @@ public :
|
||||||
{
|
{
|
||||||
str[i] = '\0';
|
str[i] = '\0';
|
||||||
if (str[0])
|
if (str[0])
|
||||||
_fileNames.push_back(std::string(str));
|
_fileNames.push_back(std::wstring(str));
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
isInsideQuotes = !isInsideQuotes;
|
isInsideQuotes = !isInsideQuotes;
|
||||||
|
@ -56,7 +56,7 @@ public :
|
||||||
{
|
{
|
||||||
str[i] = '\0';
|
str[i] = '\0';
|
||||||
if (str[0])
|
if (str[0])
|
||||||
_fileNames.push_back(std::string(str));
|
_fileNames.push_back(std::wstring(str));
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
pStr++;
|
pStr++;
|
||||||
|
@ -65,7 +65,7 @@ public :
|
||||||
case '\0' :
|
case '\0' :
|
||||||
str[i] = *pStr;
|
str[i] = *pStr;
|
||||||
if (str[0])
|
if (str[0])
|
||||||
_fileNames.push_back(std::string(str));
|
_fileNames.push_back(std::wstring(str));
|
||||||
fini = true;
|
fini = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ public :
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const char * getFileName(int index) const {
|
const wchar_t * getFileName(int index) const {
|
||||||
return _fileNames[index].c_str();
|
return _fileNames[index].c_str();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ public :
|
||||||
};
|
};
|
||||||
|
|
||||||
private :
|
private :
|
||||||
stringVector _fileNames;
|
stringVectorW _fileNames;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //FILENAME_STRING_SPLITTER_H
|
#endif //FILENAME_STRING_SPLITTER_H
|
||||||
|
|
|
@ -40,9 +40,11 @@
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include "xmlMatchedTagsHighlighter.h"
|
#include "xmlMatchedTagsHighlighter.h"
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
const char Notepad_plus::_className[32] = NOTEPAD_PP_CLASS_NAME;
|
const char Notepad_plus::_className[32] = NOTEPAD_PP_CLASS_NAME;
|
||||||
const char *urlHttpRegExpr = "http://[a-z0-9_\\-\\+.:?&@=/%#]*";
|
const wchar_t Notepad_plus::_classNameW[32] = NOTEPAD_PP_CLASS_NAME_W;
|
||||||
|
const char *urlHttpRE = "http://[a-z0-9_\\-\\+.:?&@=/%#]*";
|
||||||
|
|
||||||
int docTabIconIDs[] = {IDI_SAVED_ICON, IDI_UNSAVED_ICON, IDI_READONLY_ICON};
|
int docTabIconIDs[] = {IDI_SAVED_ICON, IDI_UNSAVED_ICON, IDI_READONLY_ICON};
|
||||||
enum tb_stat {tb_saved, tb_unsaved, tb_ro};
|
enum tb_stat {tb_saved, tb_unsaved, tb_ro};
|
||||||
|
@ -182,10 +184,10 @@ Notepad_plus::~Notepad_plus()
|
||||||
delete _pTrayIco;
|
delete _pTrayIco;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notepad_plus::init(HINSTANCE hInst, HWND parent, const char *cmdLine, CmdLineParams *cmdLineParams)
|
void Notepad_plus::init(HINSTANCE hInst, HWND parent, const wchar_t *cmdLine, CmdLineParams *cmdLineParams)
|
||||||
{
|
{
|
||||||
Window::init(hInst, parent);
|
Window::init(hInst, parent);
|
||||||
WNDCLASS nppClass;
|
WNDCLASSW nppClass;
|
||||||
|
|
||||||
nppClass.style = CS_BYTEALIGNWINDOW | CS_DBLCLKS;//CS_HREDRAW | CS_VREDRAW;
|
nppClass.style = CS_BYTEALIGNWINDOW | CS_DBLCLKS;//CS_HREDRAW | CS_VREDRAW;
|
||||||
nppClass.lpfnWndProc = Notepad_plus_Proc;
|
nppClass.lpfnWndProc = Notepad_plus_Proc;
|
||||||
|
@ -195,10 +197,10 @@ void Notepad_plus::init(HINSTANCE hInst, HWND parent, const char *cmdLine, CmdLi
|
||||||
nppClass.hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_M30ICON));
|
nppClass.hIcon = ::LoadIcon(_hInst, MAKEINTRESOURCE(IDI_M30ICON));
|
||||||
nppClass.hCursor = ::LoadCursor(NULL, IDC_ARROW);
|
nppClass.hCursor = ::LoadCursor(NULL, IDC_ARROW);
|
||||||
nppClass.hbrBackground = ::CreateSolidBrush(::GetSysColor(COLOR_MENU));
|
nppClass.hbrBackground = ::CreateSolidBrush(::GetSysColor(COLOR_MENU));
|
||||||
nppClass.lpszMenuName = MAKEINTRESOURCE(IDR_M30_MENU);
|
nppClass.lpszMenuName = MAKEINTRESOURCEW(IDR_M30_MENU);
|
||||||
nppClass.lpszClassName = _className;
|
nppClass.lpszClassName = _classNameW;
|
||||||
|
|
||||||
if (!::RegisterClass(&nppClass))
|
if (!::RegisterClassW(&nppClass))
|
||||||
{
|
{
|
||||||
systemMessage("System Err");
|
systemMessage("System Err");
|
||||||
throw int(98);
|
throw int(98);
|
||||||
|
@ -212,10 +214,10 @@ void Notepad_plus::init(HINSTANCE hInst, HWND parent, const char *cmdLine, CmdLi
|
||||||
if (cmdLineParams->_isNoPlugin)
|
if (cmdLineParams->_isNoPlugin)
|
||||||
_pluginsManager.disable();
|
_pluginsManager.disable();
|
||||||
|
|
||||||
_hSelf = ::CreateWindowEx(
|
_hSelf = ::CreateWindowExW(
|
||||||
WS_EX_ACCEPTFILES | (_isRTL?WS_EX_LAYOUTRTL:0),\
|
WS_EX_ACCEPTFILES | (_isRTL?WS_EX_LAYOUTRTL:0),\
|
||||||
_className,\
|
_classNameW,\
|
||||||
"Notepad++",\
|
L"Notepad++",\
|
||||||
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,\
|
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,\
|
||||||
// CreateWindowEx bug : set all 0 to walk arround the pb
|
// CreateWindowEx bug : set all 0 to walk arround the pb
|
||||||
0, 0, 0, 0,\
|
0, 0, 0, 0,\
|
||||||
|
@ -478,7 +480,11 @@ bool Notepad_plus::loadSession(Session & session)
|
||||||
session._mainViewFiles.erase(posIt);
|
session._mainViewFiles.erase(posIt);
|
||||||
continue; //skip session files, not supporting recursive sessions
|
continue; //skip session files, not supporting recursive sessions
|
||||||
}
|
}
|
||||||
if (PathFileExists(pFn)) {
|
|
||||||
|
wchar_t fnW[MAX_PATH];
|
||||||
|
char2wchar(pFn, fnW);
|
||||||
|
|
||||||
|
if (PathFileExistsW(fnW)) {
|
||||||
lastOpened = doOpen(pFn);
|
lastOpened = doOpen(pFn);
|
||||||
} else {
|
} else {
|
||||||
lastOpened = BUFFER_INVALID;
|
lastOpened = BUFFER_INVALID;
|
||||||
|
@ -525,7 +531,11 @@ bool Notepad_plus::loadSession(Session & session)
|
||||||
session._subViewFiles.erase(posIt);
|
session._subViewFiles.erase(posIt);
|
||||||
continue; //skip session files, not supporting recursive sessions
|
continue; //skip session files, not supporting recursive sessions
|
||||||
}
|
}
|
||||||
if (PathFileExists(pFn)) {
|
|
||||||
|
wchar_t fnW[MAX_PATH];
|
||||||
|
char2wchar(pFn, fnW);
|
||||||
|
|
||||||
|
if (PathFileExistsW(fnW)) {
|
||||||
lastOpened = doOpen(pFn);
|
lastOpened = doOpen(pFn);
|
||||||
//check if already open in main. If so, clone
|
//check if already open in main. If so, clone
|
||||||
if (_mainDocTab.getIndexByBuffer(lastOpened) != -1) {
|
if (_mainDocTab.getIndexByBuffer(lastOpened) != -1) {
|
||||||
|
@ -620,29 +630,32 @@ BufferID Notepad_plus::doOpen(const char *fileName, bool isReadOnly)
|
||||||
return test;
|
return test;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFileSession(longFileName) && PathFileExists(longFileName)) {
|
WCHAR longFileNameW[MAX_PATH];
|
||||||
|
char2wchar(longFileName, longFileNameW);
|
||||||
|
|
||||||
|
if (isFileSession(longFileName) && PathFileExistsW(longFileNameW)) {
|
||||||
fileLoadSession(longFileName);
|
fileLoadSession(longFileName);
|
||||||
return BUFFER_INVALID;
|
return BUFFER_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PathFileExists(longFileName))
|
if (!PathFileExistsW(longFileNameW))
|
||||||
{
|
{
|
||||||
char str2display[MAX_PATH*2];
|
wchar_t str2display[MAX_PATH*2];
|
||||||
char longFileDir[MAX_PATH];
|
WCHAR longFileDir[MAX_PATH];
|
||||||
|
|
||||||
strcpy(longFileDir, longFileName);
|
wcscpy(longFileDir, longFileNameW);
|
||||||
PathRemoveFileSpec(longFileDir);
|
PathRemoveFileSpecW(longFileDir);
|
||||||
|
|
||||||
if (PathFileExists(longFileDir))
|
if (PathFileExistsW(longFileDir))
|
||||||
{
|
{
|
||||||
sprintf(str2display, "%s doesn't exist. Create it?", longFileName);
|
swprintf(str2display, L"%s doesn't exist. Create it?", longFileNameW);
|
||||||
|
|
||||||
if (::MessageBox(_hSelf, str2display, "Create new file", MB_YESNO) == IDYES)
|
if (::MessageBoxW(_hSelf, str2display, L"Create new file", MB_YESNO) == IDYES)
|
||||||
{
|
{
|
||||||
bool res = MainFileManager->createEmptyFile(longFileName);
|
bool res = MainFileManager->createEmptyFile(longFileName);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
sprintf(str2display, "Cannot create the file \"%s\"", longFileName);
|
swprintf(str2display, L"Cannot create the file \"%s\"", longFileNameW);
|
||||||
::MessageBox(_hSelf, str2display, "Create new file", MB_OK);
|
::MessageBoxW(_hSelf, str2display, L"Create new file", MB_OK);
|
||||||
return BUFFER_INVALID;
|
return BUFFER_INVALID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -707,7 +720,6 @@ BufferID Notepad_plus::doOpen(const char *fileName, bool isReadOnly)
|
||||||
}
|
}
|
||||||
bool Notepad_plus::doReload(BufferID id, bool alert)
|
bool Notepad_plus::doReload(BufferID id, bool alert)
|
||||||
{
|
{
|
||||||
|
|
||||||
/*
|
/*
|
||||||
//No activation when reloading, defer untill document is actually visible
|
//No activation when reloading, defer untill document is actually visible
|
||||||
if (alert) {
|
if (alert) {
|
||||||
|
@ -787,7 +799,7 @@ void Notepad_plus::doClose(BufferID id, int whichOne) {
|
||||||
_pluginsManager.notify(&scnN);
|
_pluginsManager.notify(&scnN);
|
||||||
|
|
||||||
//add to recent files if its an existing file
|
//add to recent files if its an existing file
|
||||||
if (!buf->isUntitled() && PathFileExists(buf->getFilePath()))
|
if (!buf->isUntitled() && PathFileExistsW(buf->getFilePathW()))
|
||||||
{
|
{
|
||||||
_lastRecentFileList.add(buf->getFilePath());
|
_lastRecentFileList.add(buf->getFilePath());
|
||||||
}
|
}
|
||||||
|
@ -1460,9 +1472,10 @@ void Notepad_plus::getMatchedFileNames(const char *dir, const vector<string> & p
|
||||||
{
|
{
|
||||||
string dirFilter(dir);
|
string dirFilter(dir);
|
||||||
dirFilter += "*.*";
|
dirFilter += "*.*";
|
||||||
WIN32_FIND_DATA foundData;
|
WIN32_FIND_DATAW foundData;
|
||||||
|
|
||||||
HANDLE hFile = ::FindFirstFile(dirFilter.c_str(), &foundData);
|
wstring dirFilterW = string2wstring(dirFilter);
|
||||||
|
HANDLE hFile = ::FindFirstFileW(dirFilterW.c_str(), &foundData);
|
||||||
|
|
||||||
if (hFile != INVALID_HANDLE_VALUE)
|
if (hFile != INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
|
@ -1475,26 +1488,30 @@ void Notepad_plus::getMatchedFileNames(const char *dir, const vector<string> & p
|
||||||
}
|
}
|
||||||
else if (isRecursive)
|
else if (isRecursive)
|
||||||
{
|
{
|
||||||
if ((strcmp(foundData.cFileName, ".")) && (strcmp(foundData.cFileName, "..")))
|
if ((wcscmp(foundData.cFileName, L".")) && (wcscmp(foundData.cFileName, L"..")))
|
||||||
{
|
{
|
||||||
string pathDir(dir);
|
string pathDir(dir);
|
||||||
pathDir += foundData.cFileName;
|
wstring pathDirW = string2wstring(pathDir);
|
||||||
pathDir += "\\";
|
pathDirW += foundData.cFileName;
|
||||||
|
pathDirW += L"\\";
|
||||||
|
pathDir = wstring2string(pathDirW);
|
||||||
getMatchedFileNames(pathDir.c_str(), patterns, fileNames, isRecursive, isInHiddenDir);
|
getMatchedFileNames(pathDir.c_str(), patterns, fileNames, isRecursive, isInHiddenDir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (matchInList(foundData.cFileName, patterns))
|
char filename[MAX_PATH];
|
||||||
|
wchar2char(foundData.cFileName, filename);
|
||||||
|
if (matchInList(filename, patterns))
|
||||||
{
|
{
|
||||||
string pathFile(dir);
|
string pathFile(dir);
|
||||||
pathFile += foundData.cFileName;
|
pathFile += filename;
|
||||||
fileNames.push_back(pathFile.c_str());
|
fileNames.push_back(pathFile.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (::FindNextFile(hFile, &foundData))
|
while (::FindNextFileW(hFile, &foundData))
|
||||||
{
|
{
|
||||||
if (foundData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
if (foundData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||||
{
|
{
|
||||||
|
@ -1504,21 +1521,25 @@ void Notepad_plus::getMatchedFileNames(const char *dir, const vector<string> & p
|
||||||
}
|
}
|
||||||
else if (isRecursive)
|
else if (isRecursive)
|
||||||
{
|
{
|
||||||
if ((strcmp(foundData.cFileName, ".")) && (strcmp(foundData.cFileName, "..")))
|
if ((wcscmp(foundData.cFileName, L".")) && (wcscmp(foundData.cFileName, L"..")))
|
||||||
{
|
{
|
||||||
string pathDir(dir);
|
string pathDir(dir);
|
||||||
pathDir += foundData.cFileName;
|
wstring pathDirW = string2wstring(pathDir);
|
||||||
pathDir += "\\";
|
pathDirW += foundData.cFileName;
|
||||||
|
pathDirW += L"\\";
|
||||||
|
pathDir = wstring2string(pathDirW);
|
||||||
getMatchedFileNames(pathDir.c_str(), patterns, fileNames, isRecursive, isInHiddenDir);
|
getMatchedFileNames(pathDir.c_str(), patterns, fileNames, isRecursive, isInHiddenDir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (matchInList(foundData.cFileName, patterns))
|
char filename[MAX_PATH];
|
||||||
|
wchar2char(foundData.cFileName, filename);
|
||||||
|
if (matchInList(filename, patterns))
|
||||||
{
|
{
|
||||||
string pathFile(dir);
|
string pathFile(dir);
|
||||||
pathFile += foundData.cFileName;
|
pathFile += filename;
|
||||||
fileNames.push_back(pathFile.c_str());
|
fileNames.push_back(pathFile.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1537,8 +1558,10 @@ bool Notepad_plus::findInFiles(bool isRecursive, bool isInHiddenDir)
|
||||||
_findReplaceDlg.clearFinder();
|
_findReplaceDlg.clearFinder();
|
||||||
|
|
||||||
const char *dir2Search = _findReplaceDlg.getDir2Search();
|
const char *dir2Search = _findReplaceDlg.getDir2Search();
|
||||||
|
wchar_t dir2SearchW[MAX_PATH];
|
||||||
|
char2wchar(dir2Search, dir2SearchW);
|
||||||
|
|
||||||
if (!dir2Search[0] || !::PathFileExists(dir2Search))
|
if (!dir2SearchW[0] || !::PathFileExistsW(dir2SearchW))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1576,6 +1599,7 @@ bool Notepad_plus::findInFiles(bool isRecursive, bool isInHiddenDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Notepad_plus::findInOpenedFiles() {
|
bool Notepad_plus::findInOpenedFiles() {
|
||||||
|
|
||||||
int nbTotal = 0;
|
int nbTotal = 0;
|
||||||
ScintillaEditView *pOldView = _pEditView;
|
ScintillaEditView *pOldView = _pEditView;
|
||||||
_pEditView = &_invisibleEditView;
|
_pEditView = &_invisibleEditView;
|
||||||
|
@ -2161,11 +2185,12 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
||||||
_tabPopupMenu.enableItem(IDM_EDIT_SETREADONLY, !isSysReadOnly);
|
_tabPopupMenu.enableItem(IDM_EDIT_SETREADONLY, !isSysReadOnly);
|
||||||
_tabPopupMenu.enableItem(IDM_EDIT_CLEARREADONLY, isSysReadOnly);
|
_tabPopupMenu.enableItem(IDM_EDIT_CLEARREADONLY, isSysReadOnly);
|
||||||
|
|
||||||
bool isFileExisting = PathFileExists(buf->getFilePath()) != FALSE;
|
bool isFileExisting = PathFileExistsW(buf->getFilePathW()) != FALSE;
|
||||||
_tabPopupMenu.enableItem(IDM_FILE_DELETE, isFileExisting);
|
_tabPopupMenu.enableItem(IDM_FILE_DELETE, isFileExisting);
|
||||||
_tabPopupMenu.enableItem(IDM_FILE_RENAME, isFileExisting);
|
_tabPopupMenu.enableItem(IDM_FILE_RENAME, isFileExisting);
|
||||||
|
|
||||||
_tabPopupMenu.display(p);
|
_tabPopupMenu.display(p);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2227,6 +2252,16 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
||||||
xmlTagMatchHiliter.tagMatch(nppGUI._enableTagAttrsHilite);
|
xmlTagMatchHiliter.tagMatch(nppGUI._enableTagAttrsHilite);
|
||||||
}
|
}
|
||||||
_smartHighlighter.highlightView(notifyView);
|
_smartHighlighter.highlightView(notifyView);
|
||||||
|
|
||||||
|
if (_linkTriggered)
|
||||||
|
{
|
||||||
|
int urlAction = (NppParameters::getInstance())->getNppGUI()._styleURL;
|
||||||
|
if ((urlAction == 1) || (urlAction == 2))
|
||||||
|
addHotSpot(_isDocModifing);
|
||||||
|
_linkTriggered = false;
|
||||||
|
_isDocModifing = false;
|
||||||
|
}
|
||||||
|
|
||||||
updateStatusBar();
|
updateStatusBar();
|
||||||
AutoCompletion * autoC = isFromPrimary?&_autoCompleteMain:&_autoCompleteSub;
|
AutoCompletion * autoC = isFromPrimary?&_autoCompleteMain:&_autoCompleteSub;
|
||||||
autoC->update(0);
|
autoC->update(0);
|
||||||
|
@ -2236,14 +2271,15 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
||||||
case SCN_SCROLLED:
|
case SCN_SCROLLED:
|
||||||
{
|
{
|
||||||
_smartHighlighter.highlightView(notifyView);
|
_smartHighlighter.highlightView(notifyView);
|
||||||
|
////_urlHighlighter.highlightView(notifyView);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case TTN_GETDISPINFO:
|
case TTN_GETDISPINFOW:
|
||||||
{
|
{
|
||||||
LPTOOLTIPTEXT lpttt;
|
LPTOOLTIPTEXTW lpttt;
|
||||||
|
|
||||||
lpttt = (LPTOOLTIPTEXT)notification;
|
lpttt = (LPTOOLTIPTEXTW)notification;
|
||||||
lpttt->hinst = _hInst;
|
lpttt->hinst = _hInst;
|
||||||
|
|
||||||
POINT p;
|
POINT p;
|
||||||
|
@ -2273,7 +2309,9 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
|
|
||||||
lpttt->lpszText = (LPSTR)tip.c_str();
|
static wchar_t tipW[MAX_PATH];
|
||||||
|
char2wchar(tip.c_str(), tipW);
|
||||||
|
lpttt->lpszText = tipW;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2290,6 +2328,12 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
||||||
if (_syncInfo.doSync())
|
if (_syncInfo.doSync())
|
||||||
doSynScorll(HWND(notification->nmhdr.hwndFrom));
|
doSynScorll(HWND(notification->nmhdr.hwndFrom));
|
||||||
|
|
||||||
|
////if (_linkTriggered)
|
||||||
|
{
|
||||||
|
////_urlHighlighter.highlightView(notifyView);
|
||||||
|
////_linkTriggered = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (_linkTriggered)
|
if (_linkTriggered)
|
||||||
{
|
{
|
||||||
int urlAction = (NppParameters::getInstance())->getNppGUI()._styleURL;
|
int urlAction = (NppParameters::getInstance())->getNppGUI()._styleURL;
|
||||||
|
@ -2298,11 +2342,33 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
||||||
_linkTriggered = false;
|
_linkTriggered = false;
|
||||||
_isDocModifing = false;
|
_isDocModifing = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SCN_HOTSPOTDOUBLECLICK :
|
case SCN_HOTSPOTDOUBLECLICK :
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
notifyView->execute(SCI_SETWORDCHARS, 0, (LPARAM)"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-+.:?&@=/%#");
|
||||||
|
|
||||||
|
int pos = notifyView->execute(SCI_GETCURRENTPOS);
|
||||||
|
int startPos = static_cast<int>(notifyView->execute(SCI_WORDSTARTPOSITION, pos, false));
|
||||||
|
int endPos = static_cast<int>(notifyView->execute(SCI_WORDENDPOSITION, pos, false));
|
||||||
|
|
||||||
|
notifyView->execute(SCI_SETTARGETSTART, startPos);
|
||||||
|
notifyView->execute(SCI_SETTARGETEND, endPos);
|
||||||
|
|
||||||
|
int length = endPos-startPos+1;
|
||||||
|
char * currentWord = new char[length];
|
||||||
|
notifyView->getText(currentWord, startPos, endPos);
|
||||||
|
|
||||||
|
::ShellExecute(_hSelf, "open", currentWord, NULL, NULL, SW_SHOW);
|
||||||
|
//Disabled: This message comes after SCN_DOUBLECLICK, so this method fails and prevents the next doubleclick from working
|
||||||
|
//_isHotspotDblClicked = true;
|
||||||
|
notifyView->execute(SCI_SETCHARSDEFAULT);
|
||||||
|
delete [] currentWord;
|
||||||
|
break;
|
||||||
|
*/
|
||||||
notifyView->execute(SCI_SETWORDCHARS, 0, (LPARAM)"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-+.:?&@=/%#");
|
notifyView->execute(SCI_SETWORDCHARS, 0, (LPARAM)"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-+.:?&@=/%#");
|
||||||
|
|
||||||
int pos = notifyView->execute(SCI_GETCURRENTPOS);
|
int pos = notifyView->execute(SCI_GETCURRENTPOS);
|
||||||
|
@ -2312,7 +2378,7 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
||||||
notifyView->execute(SCI_SETTARGETSTART, startPos);
|
notifyView->execute(SCI_SETTARGETSTART, startPos);
|
||||||
notifyView->execute(SCI_SETTARGETEND, endPos);
|
notifyView->execute(SCI_SETTARGETEND, endPos);
|
||||||
|
|
||||||
int posFound = notifyView->execute(SCI_SEARCHINTARGET, strlen(urlHttpRegExpr), (LPARAM)urlHttpRegExpr);
|
int posFound = notifyView->execute(SCI_SEARCHINTARGET, strlen(urlHttpRE), (LPARAM)urlHttpRE);
|
||||||
if (posFound != -1)
|
if (posFound != -1)
|
||||||
{
|
{
|
||||||
startPos = int(notifyView->execute(SCI_GETTARGETSTART));
|
startPos = int(notifyView->execute(SCI_GETTARGETSTART));
|
||||||
|
@ -2384,7 +2450,6 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notepad_plus::findMatchingBracePos(int & braceAtCaret, int & braceOpposite)
|
void Notepad_plus::findMatchingBracePos(int & braceAtCaret, int & braceOpposite)
|
||||||
{
|
{
|
||||||
int caretPos = int(_pEditView->execute(SCI_GETCURRENTPOS));
|
int caretPos = int(_pEditView->execute(SCI_GETCURRENTPOS));
|
||||||
|
@ -2453,6 +2518,7 @@ void Notepad_plus::charAdded(char chAdded)
|
||||||
|
|
||||||
void Notepad_plus::addHotSpot(bool docIsModifing)
|
void Notepad_plus::addHotSpot(bool docIsModifing)
|
||||||
{
|
{
|
||||||
|
//printStr("addHotSpot begin");
|
||||||
//bool docIsModifing = true;
|
//bool docIsModifing = true;
|
||||||
int posBegin2style = 0;
|
int posBegin2style = 0;
|
||||||
if (docIsModifing)
|
if (docIsModifing)
|
||||||
|
@ -2483,7 +2549,7 @@ void Notepad_plus::addHotSpot(bool docIsModifing)
|
||||||
ch = (unsigned char)_pEditView->execute(SCI_GETCHARAT, posBegin2style--);
|
ch = (unsigned char)_pEditView->execute(SCI_GETCHARAT, posBegin2style--);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int style_hotspot = 30;
|
|
||||||
|
|
||||||
int startPos = 0;
|
int startPos = 0;
|
||||||
int endPos = _pEditView->execute(SCI_GETTEXTLENGTH);
|
int endPos = _pEditView->execute(SCI_GETTEXTLENGTH);
|
||||||
|
@ -2493,9 +2559,10 @@ void Notepad_plus::addHotSpot(bool docIsModifing)
|
||||||
_pEditView->execute(SCI_SETTARGETSTART, startPos);
|
_pEditView->execute(SCI_SETTARGETSTART, startPos);
|
||||||
_pEditView->execute(SCI_SETTARGETEND, endPos);
|
_pEditView->execute(SCI_SETTARGETEND, endPos);
|
||||||
|
|
||||||
vector<pair<int, int> > hotspotStylers;
|
vector< pair<Style, int> > & hotspotStylers = (_pEditView->getCurrentBuffer())->getClickableStyles();
|
||||||
|
int style_hotspot = hotspotStylers.size()==0?30:hotspotStylers[hotspotStylers.size() - 1].second - 1;
|
||||||
int posFound = _pEditView->execute(SCI_SEARCHINTARGET, strlen(urlHttpRegExpr), (LPARAM)urlHttpRegExpr);
|
|
||||||
|
int posFound = _pEditView->execute(SCI_SEARCHINTARGET, strlen(urlHttpRE), (LPARAM)urlHttpRE);
|
||||||
|
|
||||||
while (posFound != -1)
|
while (posFound != -1)
|
||||||
{
|
{
|
||||||
|
@ -2503,7 +2570,8 @@ void Notepad_plus::addHotSpot(bool docIsModifing)
|
||||||
int end = int(_pEditView->execute(SCI_GETTARGETEND));
|
int end = int(_pEditView->execute(SCI_GETTARGETEND));
|
||||||
int foundTextLen = end - start;
|
int foundTextLen = end - start;
|
||||||
int idStyle = _pEditView->execute(SCI_GETSTYLEAT, posFound);
|
int idStyle = _pEditView->execute(SCI_GETSTYLEAT, posFound);
|
||||||
|
//if (_pEditView->execute(SCI_STYLEGETHOTSPOT, idStyle) == FALSE)
|
||||||
|
{
|
||||||
if (end < posBegin2style - 1)
|
if (end < posBegin2style - 1)
|
||||||
{
|
{
|
||||||
if (style_hotspot > 1)
|
if (style_hotspot > 1)
|
||||||
|
@ -2512,11 +2580,12 @@ void Notepad_plus::addHotSpot(bool docIsModifing)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int fs = -1;
|
int fs = -1;
|
||||||
for (size_t i = 0 ; i < hotspotStylers.size() ; i++)
|
size_t i = 0;
|
||||||
|
for ( ; i < hotspotStylers.size() ; i++)
|
||||||
{
|
{
|
||||||
if (hotspotStylers[i].second == idStyle)
|
if (hotspotStylers[i].first._styleID == idStyle)
|
||||||
{
|
{
|
||||||
fs = hotspotStylers[i].first;
|
fs = hotspotStylers[i].second;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2526,33 +2595,57 @@ void Notepad_plus::addHotSpot(bool docIsModifing)
|
||||||
_pEditView->execute(SCI_STARTSTYLING, start, 0xFF);
|
_pEditView->execute(SCI_STARTSTYLING, start, 0xFF);
|
||||||
_pEditView->execute(SCI_SETSTYLING, foundTextLen, fs);
|
_pEditView->execute(SCI_SETSTYLING, foundTextLen, fs);
|
||||||
|
|
||||||
|
Style styleToSet = hotspotStylers[i].first;
|
||||||
|
|
||||||
|
if ( styleToSet._colorStyle & COLORSTYLE_FOREGROUND )
|
||||||
|
_pEditView->execute(SCI_STYLESETFORE, fs, styleToSet._fgColor);
|
||||||
|
|
||||||
|
if ( styleToSet._colorStyle & COLORSTYLE_BACKGROUND )
|
||||||
|
_pEditView->execute(SCI_STYLESETBACK, fs, styleToSet._bgColor);
|
||||||
|
|
||||||
|
if ((!styleToSet._fontName)||(strcmp(styleToSet._fontName, "")))
|
||||||
|
_pEditView->execute(SCI_STYLESETFONT, (WPARAM)fs, (LPARAM)styleToSet._fontName);
|
||||||
|
|
||||||
|
int fontStyle = styleToSet._fontStyle;
|
||||||
|
if (fontStyle != -1)
|
||||||
|
{
|
||||||
|
_pEditView->execute(SCI_STYLESETBOLD, (WPARAM)fs, fontStyle & FONTSTYLE_BOLD);
|
||||||
|
_pEditView->execute(SCI_STYLESETITALIC, (WPARAM)fs, fontStyle & FONTSTYLE_ITALIC);
|
||||||
|
_pEditView->execute(SCI_STYLESETUNDERLINE, (WPARAM)fs, fontStyle & FONTSTYLE_UNDERLINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (styleToSet._fontSize > 0)
|
||||||
|
_pEditView->execute(SCI_STYLESETSIZE, fs, styleToSet._fontSize);
|
||||||
|
|
||||||
|
_pEditView->execute(SCI_STYLESETHOTSPOT, fs, TRUE);
|
||||||
|
_pEditView->execute(SCI_SETHOTSPOTACTIVEFORE, TRUE, blue);
|
||||||
|
_pEditView->execute(SCI_SETHOTSPOTSINGLELINE, fs, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pair<int, int> p(style_hotspot, idStyle);
|
|
||||||
hotspotStylers.push_back(p);
|
|
||||||
int activeFG = 0xFF0000;
|
int activeFG = 0xFF0000;
|
||||||
|
|
||||||
char fontName[256];
|
char fontName[256];
|
||||||
Style hotspotStyle;
|
Style associatedHotspotStyle;
|
||||||
|
|
||||||
hotspotStyle._styleID = style_hotspot;
|
associatedHotspotStyle._styleID = style_hotspot;
|
||||||
_pEditView->execute(SCI_STYLEGETFONT, idStyle, (LPARAM)fontName);
|
_pEditView->execute(SCI_STYLEGETFONT, idStyle, (LPARAM)fontName);
|
||||||
hotspotStyle._fgColor = _pEditView->execute(SCI_STYLEGETFORE, idStyle);
|
associatedHotspotStyle._fgColor = _pEditView->execute(SCI_STYLEGETFORE, idStyle);
|
||||||
hotspotStyle._bgColor = _pEditView->execute(SCI_STYLEGETBACK, idStyle);
|
associatedHotspotStyle._bgColor = _pEditView->execute(SCI_STYLEGETBACK, idStyle);
|
||||||
hotspotStyle._fontSize = _pEditView->execute(SCI_STYLEGETSIZE, idStyle);
|
associatedHotspotStyle._fontSize = _pEditView->execute(SCI_STYLEGETSIZE, idStyle);
|
||||||
|
|
||||||
int isBold = _pEditView->execute(SCI_STYLEGETBOLD, idStyle);
|
int isBold = _pEditView->execute(SCI_STYLEGETBOLD, idStyle);
|
||||||
int isItalic = _pEditView->execute(SCI_STYLEGETITALIC, idStyle);
|
int isItalic = _pEditView->execute(SCI_STYLEGETITALIC, idStyle);
|
||||||
int isUnderline = _pEditView->execute(SCI_STYLEGETUNDERLINE, idStyle);
|
int isUnderline = _pEditView->execute(SCI_STYLEGETUNDERLINE, idStyle);
|
||||||
hotspotStyle._fontStyle = (isBold?FONTSTYLE_BOLD:0) | (isItalic?FONTSTYLE_ITALIC:0) | (isUnderline?FONTSTYLE_UNDERLINE:0);
|
associatedHotspotStyle._fontStyle = (isBold?FONTSTYLE_BOLD:0) | (isItalic?FONTSTYLE_ITALIC:0) | (isUnderline?FONTSTYLE_UNDERLINE:0);
|
||||||
|
|
||||||
int fontStyle = (isBold?FONTSTYLE_BOLD:0) | (isItalic?FONTSTYLE_ITALIC:0) | (isUnderline?FONTSTYLE_UNDERLINE:0);
|
int fontStyle = (isBold?FONTSTYLE_BOLD:0) | (isItalic?FONTSTYLE_ITALIC:0) | (isUnderline?FONTSTYLE_UNDERLINE:0);
|
||||||
int urlAction = (NppParameters::getInstance())->getNppGUI()._styleURL;
|
int urlAction = (NppParameters::getInstance())->getNppGUI()._styleURL;
|
||||||
if (urlAction == 2)
|
if (urlAction == 2)
|
||||||
hotspotStyle._fontStyle |= FONTSTYLE_UNDERLINE;
|
associatedHotspotStyle._fontStyle |= FONTSTYLE_UNDERLINE;
|
||||||
|
|
||||||
_pEditView->setStyle(hotspotStyle);
|
_pEditView->setStyle(associatedHotspotStyle);
|
||||||
|
|
||||||
_pEditView->execute(SCI_STYLESETHOTSPOT, style_hotspot, TRUE);
|
_pEditView->execute(SCI_STYLESETHOTSPOT, style_hotspot, TRUE);
|
||||||
_pEditView->execute(SCI_SETHOTSPOTACTIVEFORE, TRUE, activeFG);
|
_pEditView->execute(SCI_SETHOTSPOTACTIVEFORE, TRUE, activeFG);
|
||||||
|
@ -2560,20 +2653,27 @@ void Notepad_plus::addHotSpot(bool docIsModifing)
|
||||||
_pEditView->execute(SCI_STARTSTYLING, start, 0x1F);
|
_pEditView->execute(SCI_STARTSTYLING, start, 0x1F);
|
||||||
_pEditView->execute(SCI_SETSTYLING, foundTextLen, style_hotspot);
|
_pEditView->execute(SCI_SETSTYLING, foundTextLen, style_hotspot);
|
||||||
if (style_hotspot > 1)
|
if (style_hotspot > 1)
|
||||||
style_hotspot--;
|
style_hotspot--;
|
||||||
|
|
||||||
|
associatedHotspotStyle._styleID = idStyle;
|
||||||
|
pair<Style, int> p(associatedHotspotStyle, style_hotspot);
|
||||||
|
hotspotStylers.push_back(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_pEditView->execute(SCI_SETTARGETSTART, posFound + foundTextLen);
|
_pEditView->execute(SCI_SETTARGETSTART, posFound + foundTextLen);
|
||||||
_pEditView->execute(SCI_SETTARGETEND, endPos);
|
_pEditView->execute(SCI_SETTARGETEND, endPos);
|
||||||
|
posFound = _pEditView->execute(SCI_SEARCHINTARGET, strlen(urlHttpRE), (LPARAM)urlHttpRE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
posFound = _pEditView->execute(SCI_SEARCHINTARGET, strlen(urlHttpRegExpr), (LPARAM)urlHttpRegExpr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_pEditView->execute(SCI_STARTSTYLING, endStyle, 0xFF);
|
_pEditView->execute(SCI_STARTSTYLING, endStyle, 0xFF);
|
||||||
_pEditView->execute(SCI_SETSTYLING, 0, 0);
|
_pEditView->execute(SCI_SETSTYLING, 0, 0);
|
||||||
|
|
||||||
|
//printStr("addHotSpot end");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2884,14 +2984,14 @@ void Notepad_plus::command(int id)
|
||||||
{
|
{
|
||||||
Buffer * buf = _pEditView->getCurrentBuffer();
|
Buffer * buf = _pEditView->getCurrentBuffer();
|
||||||
if (id == IDM_EDIT_FULLPATHTOCLIP) {
|
if (id == IDM_EDIT_FULLPATHTOCLIP) {
|
||||||
str2Cliboard(buf->getFilePath());
|
str2CliboardW(buf->getFilePathW());
|
||||||
} else if (id == IDM_EDIT_CURRENTDIRTOCLIP) {
|
} else if (id == IDM_EDIT_CURRENTDIRTOCLIP) {
|
||||||
char dir[MAX_PATH];
|
wchar_t dir[MAX_PATH];
|
||||||
strcpy(dir, buf->getFilePath());
|
wcscpy(dir, buf->getFilePathW());
|
||||||
PathRemoveFileSpec((LPSTR)dir);
|
PathRemoveFileSpecW((LPWSTR)dir);
|
||||||
str2Cliboard(dir);
|
str2CliboardW(dir);
|
||||||
} else if (id == IDM_EDIT_FILENAMETOCLIP) {
|
} else if (id == IDM_EDIT_FILENAMETOCLIP) {
|
||||||
str2Cliboard(buf->getFileName());
|
str2CliboardW(buf->getFileNameW());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3188,10 +3288,10 @@ void Notepad_plus::command(int id)
|
||||||
{
|
{
|
||||||
Buffer * buf = _pEditView->getCurrentBuffer();
|
Buffer * buf = _pEditView->getCurrentBuffer();
|
||||||
|
|
||||||
DWORD dwFileAttribs = ::GetFileAttributes(buf->getFileName());
|
DWORD dwFileAttribs = ::GetFileAttributesW(buf->getFileNameW());
|
||||||
dwFileAttribs ^= FILE_ATTRIBUTE_READONLY;
|
dwFileAttribs ^= FILE_ATTRIBUTE_READONLY;
|
||||||
|
|
||||||
::SetFileAttributes(buf->getFileName(), dwFileAttribs);
|
::SetFileAttributesW(buf->getFileNameW(), dwFileAttribs);
|
||||||
|
|
||||||
buf->setFileReadOnly(false);
|
buf->setFileReadOnly(false);
|
||||||
}
|
}
|
||||||
|
@ -4311,14 +4411,14 @@ void Notepad_plus::setTitle()
|
||||||
//Get the buffer
|
//Get the buffer
|
||||||
Buffer * buf = _pEditView->getCurrentBuffer();
|
Buffer * buf = _pEditView->getCurrentBuffer();
|
||||||
|
|
||||||
string result = "";
|
wstring result = L"";
|
||||||
if (buf->isDirty()) {
|
if (buf->isDirty()) {
|
||||||
result += "*";
|
result += L"*";
|
||||||
}
|
}
|
||||||
result += buf->getFilePath();
|
result += buf->getFilePathW();
|
||||||
result += " - ";
|
result += L" - ";
|
||||||
result += _className;
|
result += _classNameW;
|
||||||
::SetWindowText(_hSelf, result.c_str());
|
::SetWindowTextW(_hSelf, result.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notepad_plus::activateNextDoc(bool direction)
|
void Notepad_plus::activateNextDoc(bool direction)
|
||||||
|
@ -4407,8 +4507,10 @@ void Notepad_plus::dropFiles(HDROP hdrop)
|
||||||
BufferID lastOpened = BUFFER_INVALID;
|
BufferID lastOpened = BUFFER_INVALID;
|
||||||
for (int i = 0 ; i < filesDropped ; ++i)
|
for (int i = 0 ; i < filesDropped ; ++i)
|
||||||
{
|
{
|
||||||
|
wchar_t pathDroppedW[MAX_PATH];
|
||||||
|
::DragQueryFileW(hdrop, i, pathDroppedW, sizeof(pathDroppedW));
|
||||||
char pathDropped[MAX_PATH];
|
char pathDropped[MAX_PATH];
|
||||||
::DragQueryFile(hdrop, i, pathDropped, sizeof(pathDropped));
|
wchar2char(pathDroppedW, pathDropped);
|
||||||
BufferID test = doOpen(pathDropped);
|
BufferID test = doOpen(pathDropped);
|
||||||
if (test != BUFFER_INVALID)
|
if (test != BUFFER_INVALID)
|
||||||
lastOpened = test;
|
lastOpened = test;
|
||||||
|
@ -4728,6 +4830,7 @@ bool Notepad_plus::activateBuffer(BufferID id, int whichOne) {
|
||||||
MainFileManager->reloadBuffer(id);
|
MainFileManager->reloadBuffer(id);
|
||||||
pBuf->setNeedReload(false);
|
pBuf->setNeedReload(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (whichOne == MAIN_VIEW) {
|
if (whichOne == MAIN_VIEW) {
|
||||||
if (_mainDocTab.activateBuffer(id)) //only activate if possible
|
if (_mainDocTab.activateBuffer(id)) //only activate if possible
|
||||||
_mainEditView.activateBuffer(id);
|
_mainEditView.activateBuffer(id);
|
||||||
|
@ -5760,7 +5863,6 @@ void Notepad_plus::getTaskListInfo(TaskListInfo *tli)
|
||||||
LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
LRESULT result = FALSE;
|
LRESULT result = FALSE;
|
||||||
|
|
||||||
NppParameters *pNppParam = NppParameters::getInstance();
|
NppParameters *pNppParam = NppParameters::getInstance();
|
||||||
switch (Message)
|
switch (Message)
|
||||||
{
|
{
|
||||||
|
@ -5768,7 +5870,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
|
||||||
{
|
{
|
||||||
// Note: lParam is -1 to prevent endless loops of calls
|
// Note: lParam is -1 to prevent endless loops of calls
|
||||||
::SendMessage(_dockingManager.getHSelf(), WM_NCACTIVATE, wParam, (LPARAM)-1);
|
::SendMessage(_dockingManager.getHSelf(), WM_NCACTIVATE, wParam, (LPARAM)-1);
|
||||||
return ::DefWindowProc(hwnd, Message, wParam, lParam);
|
return ::DefWindowProcW(hwnd, Message, wParam, lParam);
|
||||||
}
|
}
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
{
|
{
|
||||||
|
@ -6296,7 +6398,9 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
|
||||||
dir = (const char *)wParam;
|
dir = (const char *)wParam;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
::GetCurrentDirectory(MAX_PATH, currentDir);
|
wchar_t currentDirW[MAX_PATH];
|
||||||
|
::GetCurrentDirectoryW(MAX_PATH, currentDirW);
|
||||||
|
wchar2char(currentDirW, currentDir);
|
||||||
dir = currentDir;
|
dir = currentDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6423,7 +6527,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
|
||||||
case COPYDATA_FILENAMES :
|
case COPYDATA_FILENAMES :
|
||||||
{
|
{
|
||||||
CmdLineParams & cmdLineParams = pNppParam->getCmdLineParams();
|
CmdLineParams & cmdLineParams = pNppParam->getCmdLineParams();
|
||||||
loadCommandlineParams((const char *)pCopyData->lpData, &cmdLineParams);
|
loadCommandlineParams((const wchar_t *)pCopyData->lpData, &cmdLineParams);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6457,34 +6561,34 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
|
||||||
case NPPM_GETNAMEPART :
|
case NPPM_GETNAMEPART :
|
||||||
case NPPM_GETEXTPART :
|
case NPPM_GETEXTPART :
|
||||||
{
|
{
|
||||||
char str[MAX_PATH];
|
wchar_t str[MAX_PATH];
|
||||||
// par defaut : NPPM_GETCURRENTDIRECTORY
|
// par defaut : NPPM_GETCURRENTDIRECTORY
|
||||||
char *fileStr = strcpy(str, _pEditView->getCurrentBuffer()->getFilePath());
|
wchar_t *fileStr = wcscpy(str, _pEditView->getCurrentBuffer()->getFilePathW());
|
||||||
|
|
||||||
if (Message == NPPM_GETCURRENTDIRECTORY)
|
if (Message == NPPM_GETCURRENTDIRECTORY)
|
||||||
PathRemoveFileSpec(str);
|
PathRemoveFileSpecW(str);
|
||||||
else if (Message == NPPM_GETFILENAME)
|
else if (Message == NPPM_GETFILENAME)
|
||||||
fileStr = PathFindFileName(str);
|
fileStr = PathFindFileNameW(str);
|
||||||
else if (Message == NPPM_GETNAMEPART)
|
else if (Message == NPPM_GETNAMEPART)
|
||||||
{
|
{
|
||||||
fileStr = PathFindFileName(str);
|
fileStr = PathFindFileNameW(str);
|
||||||
PathRemoveExtension(fileStr);
|
PathRemoveExtensionW(fileStr);
|
||||||
}
|
}
|
||||||
else if (Message == NPPM_GETEXTPART)
|
else if (Message == NPPM_GETEXTPART)
|
||||||
fileStr = PathFindExtension(str);
|
fileStr = PathFindExtensionW(str);
|
||||||
|
|
||||||
// For the compability reason, if wParam is 0, then we assume the size of string buffer (lParam) is large enough.
|
// For the compability reason, if wParam is 0, then we assume the size of string buffer (lParam) is large enough.
|
||||||
// otherwise we check if the string buffer size is enough for the string to copy.
|
// otherwise we check if the string buffer size is enough for the string to copy.
|
||||||
if (wParam != 0)
|
if (wParam != 0)
|
||||||
{
|
{
|
||||||
if (strlen(fileStr) >= wParam)
|
if (wcslen(fileStr) >= wParam)
|
||||||
{
|
{
|
||||||
::MessageBox(_hSelf, "Allocated buffer size is not enough to copy the string.", "NPPM error", MB_OK);
|
::MessageBox(_hSelf, "Allocated buffer size is not enough to copy the string.", "NPPM error", MB_OK);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy((char *)lParam, fileStr);
|
wcscpy((wchar_t *)lParam, fileStr);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6505,35 +6609,39 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
|
||||||
}
|
}
|
||||||
else //buffer large enough, perform safe copy
|
else //buffer large enough, perform safe copy
|
||||||
{
|
{
|
||||||
lstrcpyn((char *)lParam, str, wParam);
|
wchar_t strW[strSize];
|
||||||
|
char2wchar(str, strW);
|
||||||
|
lstrcpynW((wchar_t *)lParam, strW, wParam);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy((char *)lParam, str);
|
wchar_t strW[strSize];
|
||||||
|
char2wchar(str, strW);
|
||||||
|
wcscpy((wchar_t *)lParam, strW);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
case NPPM_GETNPPDIRECTORY :
|
case NPPM_GETNPPDIRECTORY :
|
||||||
{
|
{
|
||||||
const int strSize = MAX_PATH;
|
const int strSize = MAX_PATH;
|
||||||
char str[strSize];
|
wchar_t str[strSize];
|
||||||
|
|
||||||
::GetModuleFileName(NULL, str, strSize);
|
::GetModuleFileNameW(NULL, str, strSize);
|
||||||
PathRemoveFileSpec(str);
|
PathRemoveFileSpecW(str);
|
||||||
|
|
||||||
// For the compability reason, if wParam is 0, then we assume the size of string buffer (lParam) is large enough.
|
// For the compability reason, if wParam is 0, then we assume the size of string buffer (lParam) is large enough.
|
||||||
// otherwise we check if the string buffer size is enough for the string to copy.
|
// otherwise we check if the string buffer size is enough for the string to copy.
|
||||||
if (wParam != 0)
|
if (wParam != 0)
|
||||||
{
|
{
|
||||||
if (strlen(str) >= wParam)
|
if (wcslen(str) >= wParam)
|
||||||
{
|
{
|
||||||
::MessageBox(_hSelf, "Allocated buffer size is not enough to copy the string.", "NPPM_GETNPPDIRECTORY error", MB_OK);
|
::MessageBox(_hSelf, "Allocated buffer size is not enough to copy the string.", "NPPM_GETNPPDIRECTORY error", MB_OK);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy((char *)lParam, str);
|
wcscpy((wchar_t *)lParam, str);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6657,7 +6765,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
|
||||||
activateNextDoc((GET_APPCOMMAND_LPARAM(lParam) == APPCOMMAND_BROWSER_FORWARD)?dirDown:dirUp);
|
activateNextDoc((GET_APPCOMMAND_LPARAM(lParam) == APPCOMMAND_BROWSER_FORWARD)?dirDown:dirUp);
|
||||||
_linkTriggered = true;
|
_linkTriggered = true;
|
||||||
}
|
}
|
||||||
return ::DefWindowProc(hwnd, Message, wParam, lParam);
|
return ::DefWindowProcW(hwnd, Message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
case NPPM_GETNBSESSIONFILES :
|
case NPPM_GETNBSESSIONFILES :
|
||||||
|
@ -7131,7 +7239,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ::DefWindowProc(hwnd, Message, wParam, lParam);
|
return ::DefWindowProcW(hwnd, Message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_NOTIFY:
|
case WM_NOTIFY:
|
||||||
|
@ -7302,7 +7410,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
|
||||||
_sysMenuEntering = true;
|
_sysMenuEntering = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ::DefWindowProc(hwnd, Message, wParam, lParam);
|
return ::DefWindowProcW(hwnd, Message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_LBUTTONDBLCLK:
|
case WM_LBUTTONDBLCLK:
|
||||||
|
@ -7600,7 +7708,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ::DefWindowProc(hwnd, Message, wParam, lParam);
|
return ::DefWindowProcW(hwnd, Message, wParam, lParam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7627,7 +7735,7 @@ LRESULT CALLBACK Notepad_plus::Notepad_plus_Proc(HWND hwnd, UINT Message, WPARAM
|
||||||
|
|
||||||
default :
|
default :
|
||||||
{
|
{
|
||||||
return ((Notepad_plus *)::GetWindowLongPtr(hwnd, GWL_USERDATA))->runProc(hwnd, Message, wParam, lParam);
|
return ((Notepad_plus *)::GetWindowLongPtrW(hwnd, GWL_USERDATA))->runProc(hwnd, Message, wParam, lParam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7830,7 +7938,7 @@ void Notepad_plus::getCurrentOpenedFiles(Session & session)
|
||||||
{
|
{
|
||||||
BufferID bufID = _mainDocTab.getBufferByIndex(i);
|
BufferID bufID = _mainDocTab.getBufferByIndex(i);
|
||||||
Buffer * buf = MainFileManager->getBufferByID(bufID);
|
Buffer * buf = MainFileManager->getBufferByID(bufID);
|
||||||
if (!buf->isUntitled() && PathFileExists(buf->getFilePath()))
|
if (!buf->isUntitled() && PathFileExistsW(buf->getFilePathW()))
|
||||||
{
|
{
|
||||||
string languageName = getLangFromMenu( buf );
|
string languageName = getLangFromMenu( buf );
|
||||||
const char *langName = languageName.c_str();
|
const char *langName = languageName.c_str();
|
||||||
|
@ -7855,7 +7963,7 @@ void Notepad_plus::getCurrentOpenedFiles(Session & session)
|
||||||
{
|
{
|
||||||
BufferID bufID = _subDocTab.getBufferByIndex(i);
|
BufferID bufID = _subDocTab.getBufferByIndex(i);
|
||||||
Buffer * buf = MainFileManager->getBufferByID(bufID);
|
Buffer * buf = MainFileManager->getBufferByID(bufID);
|
||||||
if (!buf->isUntitled() && PathFileExists(buf->getFilePath()))
|
if (!buf->isUntitled() && PathFileExistsW(buf->getFilePathW()))
|
||||||
{
|
{
|
||||||
string languageName = getLangFromMenu( buf );
|
string languageName = getLangFromMenu( buf );
|
||||||
const char *langName = languageName.c_str();
|
const char *langName = languageName.c_str();
|
||||||
|
@ -7906,7 +8014,9 @@ bool Notepad_plus::fileLoadSession(const char *fn)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (PathFileExists(fn))
|
wchar_t fnW[MAX_PATH];
|
||||||
|
char2wchar(fn, fnW);
|
||||||
|
if (PathFileExistsW(fnW))
|
||||||
sessionFileName = fn;
|
sessionFileName = fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7934,7 +8044,6 @@ const char * Notepad_plus::fileSaveSession(size_t nbFile, char ** fileNames, con
|
||||||
Session currentSession;
|
Session currentSession;
|
||||||
if ((nbFile) && (!fileNames))
|
if ((nbFile) && (!fileNames))
|
||||||
{
|
{
|
||||||
|
|
||||||
for (size_t i = 0 ; i < nbFile ; i++)
|
for (size_t i = 0 ; i < nbFile ; i++)
|
||||||
{
|
{
|
||||||
if (PathFileExists(fileNames[i]))
|
if (PathFileExists(fileNames[i]))
|
||||||
|
@ -8001,6 +8110,37 @@ bool Notepad_plus::str2Cliboard(const char *str2cpy)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Notepad_plus::str2CliboardW(const wchar_t *str2cpy)
|
||||||
|
{
|
||||||
|
if (!str2cpy)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!::OpenClipboard(_hSelf))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
::EmptyClipboard();
|
||||||
|
|
||||||
|
int size = sizeof(wchar_t);
|
||||||
|
HGLOBAL hglbCopy = ::GlobalAlloc(GMEM_MOVEABLE, wcslen(str2cpy) * size + size);
|
||||||
|
|
||||||
|
if (hglbCopy == NULL)
|
||||||
|
{
|
||||||
|
::CloseClipboard();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lock the handle and copy the text to the buffer.
|
||||||
|
wchar_t *pStr = (wchar_t *)::GlobalLock(hglbCopy);
|
||||||
|
wcscpy(pStr, str2cpy);
|
||||||
|
::GlobalUnlock(hglbCopy);
|
||||||
|
|
||||||
|
// Place the handle on the clipboard.
|
||||||
|
::SetClipboardData(CF_UNICODETEXT, hglbCopy);
|
||||||
|
::CloseClipboard();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//ONLY CALL IN CASE OF EMERGENCY: EXCEPTION
|
//ONLY CALL IN CASE OF EMERGENCY: EXCEPTION
|
||||||
//This function is destructive
|
//This function is destructive
|
||||||
bool Notepad_plus::emergency() {
|
bool Notepad_plus::emergency() {
|
||||||
|
@ -8153,9 +8293,9 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) {
|
||||||
if (mask & (BufferChangeDirty|BufferChangeFilename)) {
|
if (mask & (BufferChangeDirty|BufferChangeFilename)) {
|
||||||
checkDocState();
|
checkDocState();
|
||||||
setTitle();
|
setTitle();
|
||||||
char dir[MAX_PATH];
|
wchar_t dir[MAX_PATH];
|
||||||
strcpy(dir, buffer->getFilePath());
|
wcscpy(dir, buffer->getFilePathW());
|
||||||
PathRemoveFileSpec(dir);
|
PathRemoveFileSpecW(dir);
|
||||||
setWorkingDir(dir);
|
setWorkingDir(dir);
|
||||||
}
|
}
|
||||||
if (mask & (BufferChangeLanguage)) {
|
if (mask & (BufferChangeLanguage)) {
|
||||||
|
@ -8198,9 +8338,9 @@ void Notepad_plus::notifyBufferActivated(BufferID bufid, int view) {
|
||||||
setUniModeText(buf->getUnicodeMode());
|
setUniModeText(buf->getUnicodeMode());
|
||||||
setDisplayFormat(buf->getFormat());
|
setDisplayFormat(buf->getFormat());
|
||||||
enableConvertMenuItems(buf->getFormat());
|
enableConvertMenuItems(buf->getFormat());
|
||||||
char dir[MAX_PATH];
|
wchar_t dir[MAX_PATH];
|
||||||
strcpy(dir, buf->getFilePath());
|
wcscpy(dir, buf->getFilePathW());
|
||||||
PathRemoveFileSpec(dir);
|
PathRemoveFileSpecW(dir);
|
||||||
setWorkingDir(dir);
|
setWorkingDir(dir);
|
||||||
setTitle();
|
setTitle();
|
||||||
//Make sure the colors of the tab controls match
|
//Make sure the colors of the tab controls match
|
||||||
|
@ -8210,12 +8350,12 @@ void Notepad_plus::notifyBufferActivated(BufferID bufid, int view) {
|
||||||
_linkTriggered = true;
|
_linkTriggered = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notepad_plus::loadCommandlineParams(const char * commandLine, CmdLineParams * pCmdParams) {
|
void Notepad_plus::loadCommandlineParams(const wchar_t * commandLine, CmdLineParams * pCmdParams) {
|
||||||
if (!commandLine || ! pCmdParams)
|
if (!commandLine || ! pCmdParams)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FileNameStringSplitter fnss(commandLine);
|
FileNameStringSplitter fnss(commandLine);
|
||||||
const char *pFn = NULL;
|
const wchar_t *pFn = NULL;
|
||||||
|
|
||||||
LangType lt = pCmdParams->_langType;//LangType(pCopyData->dwData & LASTBYTEMASK);
|
LangType lt = pCmdParams->_langType;//LangType(pCopyData->dwData & LASTBYTEMASK);
|
||||||
int ln = pCmdParams->_line2go;
|
int ln = pCmdParams->_line2go;
|
||||||
|
@ -8225,7 +8365,9 @@ void Notepad_plus::loadCommandlineParams(const char * commandLine, CmdLineParams
|
||||||
for (int i = 0 ; i < fnss.size() ; i++)
|
for (int i = 0 ; i < fnss.size() ; i++)
|
||||||
{
|
{
|
||||||
pFn = fnss.getFileName(i);
|
pFn = fnss.getFileName(i);
|
||||||
BufferID bufID = doOpen(pFn, readOnly);
|
char fn[MAX_PATH];
|
||||||
|
wchar2char(pFn, fn);
|
||||||
|
BufferID bufID = doOpen(fn, readOnly);
|
||||||
if (bufID == BUFFER_INVALID) //cannot open file
|
if (bufID == BUFFER_INVALID) //cannot open file
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -49,8 +49,11 @@
|
||||||
#include "AutoCompletion.h"
|
#include "AutoCompletion.h"
|
||||||
#include "Buffer.h"
|
#include "Buffer.h"
|
||||||
#include "SmartHighlighter.h"
|
#include "SmartHighlighter.h"
|
||||||
|
#include "UniConversion.h"
|
||||||
|
#include "UrlHighlighter.h"
|
||||||
|
|
||||||
#define NOTEPAD_PP_CLASS_NAME "Notepad++"
|
#define NOTEPAD_PP_CLASS_NAME "Notepad++"
|
||||||
|
#define NOTEPAD_PP_CLASS_NAME_W L"Notepad++"
|
||||||
|
|
||||||
#define MENU 0x01
|
#define MENU 0x01
|
||||||
#define TOOLBAR 0x02
|
#define TOOLBAR 0x02
|
||||||
|
@ -95,7 +98,7 @@ class Notepad_plus : public Window {
|
||||||
public:
|
public:
|
||||||
Notepad_plus();
|
Notepad_plus();
|
||||||
virtual inline ~Notepad_plus();
|
virtual inline ~Notepad_plus();
|
||||||
void init(HINSTANCE, HWND, const char *cmdLine, CmdLineParams *cmdLineParams);
|
void init(HINSTANCE, HWND, const wchar_t *cmdLine, CmdLineParams *cmdLineParams);
|
||||||
inline void killAllChildren();
|
inline void killAllChildren();
|
||||||
virtual inline void destroy();
|
virtual inline void destroy();
|
||||||
|
|
||||||
|
@ -113,6 +116,7 @@ public:
|
||||||
if (unicodeSupported?(::IsDialogMessageW(_hModelessDlgs[i], msg)):(::IsDialogMessageA(_hModelessDlgs[i], msg)))
|
if (unicodeSupported?(::IsDialogMessageW(_hModelessDlgs[i], msg)):(::IsDialogMessageA(_hModelessDlgs[i], msg)))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -190,7 +194,9 @@ public:
|
||||||
|
|
||||||
void notifyBufferChanged(Buffer * buffer, int mask);
|
void notifyBufferChanged(Buffer * buffer, int mask);
|
||||||
private:
|
private:
|
||||||
|
void loadCommandlineParams(const wchar_t * commandLine, CmdLineParams * pCmdParams);
|
||||||
static const char _className[32];
|
static const char _className[32];
|
||||||
|
static const wchar_t _classNameW[32];
|
||||||
char _nppPath[MAX_PATH];
|
char _nppPath[MAX_PATH];
|
||||||
Window *_pMainWindow;
|
Window *_pMainWindow;
|
||||||
DockingManager _dockingManager;
|
DockingManager _dockingManager;
|
||||||
|
@ -199,6 +205,7 @@ private:
|
||||||
AutoCompletion _autoCompleteSub; //each Scintilla has its own autoComplete
|
AutoCompletion _autoCompleteSub; //each Scintilla has its own autoComplete
|
||||||
|
|
||||||
SmartHighlighter _smartHighlighter;
|
SmartHighlighter _smartHighlighter;
|
||||||
|
UrlHighlighter _urlHighlighter;
|
||||||
|
|
||||||
TiXmlNode *_nativeLang, *_toolIcons;
|
TiXmlNode *_nativeLang, *_toolIcons;
|
||||||
|
|
||||||
|
@ -386,36 +393,44 @@ private:
|
||||||
//END: Document management
|
//END: Document management
|
||||||
|
|
||||||
int doSaveOrNot(const char *fn) {
|
int doSaveOrNot(const char *fn) {
|
||||||
char pattern[64] = "Save file \"%s\" ?";
|
wchar_t fnW[MAX_PATH];
|
||||||
char phrase[512];
|
char2wchar(fn, fnW);
|
||||||
sprintf(phrase, pattern, fn);
|
wchar_t pattern[64] = L"Save file \"%s\" ?";
|
||||||
return doActionOrNot("Save", phrase, MB_YESNOCANCEL | MB_ICONQUESTION | MB_APPLMODAL);
|
wchar_t phrase[512];
|
||||||
|
swprintf(phrase, pattern, fnW);
|
||||||
|
return doActionOrNot(L"Save", phrase, MB_YESNOCANCEL | MB_ICONQUESTION | MB_APPLMODAL);
|
||||||
};
|
};
|
||||||
|
|
||||||
int doReloadOrNot(const char *fn) {
|
int doReloadOrNot(const char *fn) {
|
||||||
char pattern[128] = "The file \"%s\" is modified by another program.\rReload this file?";
|
wchar_t fnW[MAX_PATH];
|
||||||
char phrase[512];
|
char2wchar(fn, fnW);
|
||||||
sprintf(phrase, pattern, fn);
|
wchar_t pattern[128] = L"The file \"%s\" is modified by another program.\rReload this file?";
|
||||||
return doActionOrNot("Reload", phrase, MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL);
|
wchar_t phrase[512];
|
||||||
|
swprintf(phrase, pattern, fnW);
|
||||||
|
return doActionOrNot(L"Reload", phrase, MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL);
|
||||||
};
|
};
|
||||||
|
|
||||||
int doCloseOrNot(const char *fn) {
|
int doCloseOrNot(const char *fn) {
|
||||||
char pattern[128] = "The file \"%s\" doesn't exist anymore.\rKeep this file in editor?";
|
wchar_t fnW[MAX_PATH];
|
||||||
char phrase[512];
|
char2wchar(fn, fnW);
|
||||||
sprintf(phrase, pattern, fn);
|
wchar_t pattern[128] = L"The file \"%s\" doesn't exist anymore.\rKeep this file in editor?";
|
||||||
return doActionOrNot("Keep non existing file", phrase, MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL);
|
wchar_t phrase[512];
|
||||||
|
swprintf(phrase, pattern, fnW);
|
||||||
|
return doActionOrNot(L"Keep non existing file", phrase, MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL);
|
||||||
};
|
};
|
||||||
|
|
||||||
int doDeleteOrNot(const char *fn) {
|
int doDeleteOrNot(const char *fn) {
|
||||||
char pattern[128] = "The file \"%s\"\rwill be deleted from your disk and this document will be closed.\rContinue?";
|
wchar_t fnW[MAX_PATH];
|
||||||
char phrase[512];
|
char2wchar(fn, fnW);
|
||||||
sprintf(phrase, pattern, fn);
|
wchar_t pattern[128] = L"The file \"%s\"\rwill be deleted from your disk and this document will be closed.\rContinue?";
|
||||||
return doActionOrNot("Delete file", phrase, MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL);
|
wchar_t phrase[512];
|
||||||
|
swprintf(phrase, pattern, fnW);
|
||||||
|
return doActionOrNot(L"Delete file", phrase, MB_YESNO | MB_ICONQUESTION | MB_APPLMODAL);
|
||||||
};
|
};
|
||||||
|
|
||||||
int doActionOrNot(const char *title, const char *displayText, int type) {
|
int doActionOrNot(const wchar_t *title, const wchar_t *displayText, int type) {
|
||||||
return ::MessageBox(_hSelf, displayText, title, type);
|
return ::MessageBoxW(_hSelf, displayText, title, type);
|
||||||
};
|
};
|
||||||
|
|
||||||
void enableMenu(int cmdID, bool doEnable) const {
|
void enableMenu(int cmdID, bool doEnable) const {
|
||||||
int flag = doEnable?MF_ENABLED | MF_BYCOMMAND:MF_DISABLED | MF_GRAYED | MF_BYCOMMAND;
|
int flag = doEnable?MF_ENABLED | MF_BYCOMMAND:MF_DISABLED | MF_GRAYED | MF_BYCOMMAND;
|
||||||
::EnableMenuItem(_mainMenuHandle, cmdID, flag);
|
::EnableMenuItem(_mainMenuHandle, cmdID, flag);
|
||||||
|
@ -685,25 +700,26 @@ private:
|
||||||
void getMatchedFileNames(const char *dir, const vector<string> & patterns, vector<string> & fileNames, bool isRecursive, bool isInHiddenDir);
|
void getMatchedFileNames(const char *dir, const vector<string> & patterns, vector<string> & fileNames, bool isRecursive, bool isInHiddenDir);
|
||||||
|
|
||||||
void doSynScorll(HWND hW);
|
void doSynScorll(HWND hW);
|
||||||
void setWorkingDir(char *dir) {
|
void setWorkingDir(wchar_t *dir) {
|
||||||
if (NppParameters::getInstance()->getNppGUI()._saveOpenKeepInSameDir)
|
if (NppParameters::getInstance()->getNppGUI()._saveOpenKeepInSameDir)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!dir || !PathIsDirectory(dir))
|
if (!dir || !PathIsDirectoryW(dir))
|
||||||
{
|
{
|
||||||
//Non existing path, usually occurs when a new 1 file is open.
|
//Non existing path, usually occurs when a new 1 file is open.
|
||||||
//Set working dir to Notepad++' directory to prevent directory lock.
|
//Set working dir to Notepad++' directory to prevent directory lock.
|
||||||
char nppDir[MAX_PATH];
|
wchar_t nppDir[MAX_PATH];
|
||||||
|
|
||||||
//wParam set to max_path in case boundary checks will ever be made.
|
//wParam set to max_path in case boundary checks will ever be made.
|
||||||
SendMessage(_hSelf, NPPM_GETNPPDIRECTORY, (WPARAM)MAX_PATH, (LPARAM)nppDir);
|
::SendMessage(_hSelf, NPPM_GETNPPDIRECTORY, (WPARAM)MAX_PATH, (LPARAM)nppDir);
|
||||||
::SetCurrentDirectory(nppDir);
|
::SetCurrentDirectoryW(nppDir);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
::SetCurrentDirectory(dir);
|
::SetCurrentDirectoryW(dir);
|
||||||
}
|
}
|
||||||
bool str2Cliboard(const char *str2cpy);
|
bool str2Cliboard(const char *str2cpy);
|
||||||
|
bool str2CliboardW(const wchar_t *str2cpy);
|
||||||
bool bin2Cliboard(const unsigned char *uchar2cpy, size_t length);
|
bool bin2Cliboard(const unsigned char *uchar2cpy, size_t length);
|
||||||
|
|
||||||
bool getIntegralDockingData(tTbData & dockData, int & iCont, bool & isVisible);
|
bool getIntegralDockingData(tTbData & dockData, int & iCont, bool & isVisible);
|
||||||
|
@ -771,8 +787,6 @@ private:
|
||||||
|
|
||||||
bool dumpFiles(const char * outdir, const char * fileprefix = ""); //helper func
|
bool dumpFiles(const char * outdir, const char * fileprefix = ""); //helper func
|
||||||
void drawTabbarColoursFromStylerArray();
|
void drawTabbarColoursFromStylerArray();
|
||||||
|
|
||||||
void loadCommandlineParams(const char * commandLine, CmdLineParams * pCmdParams);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //NOTEPAD_PLUS_H
|
#endif //NOTEPAD_PLUS_H
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include "Notepad_plus.h"
|
#include "Notepad_plus.h"
|
||||||
#include "ScintillaEditView.h"
|
#include "ScintillaEditView.h"
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
FileManager * FileManager::_pSelf = new FileManager();
|
FileManager * FileManager::_pSelf = new FileManager();
|
||||||
|
|
||||||
|
@ -82,7 +83,7 @@ long Buffer::_recentTagCtr = 0;
|
||||||
|
|
||||||
void Buffer::updateTimeStamp() {
|
void Buffer::updateTimeStamp() {
|
||||||
struct _stat buf;
|
struct _stat buf;
|
||||||
time_t timeStamp = (_stat(_fullPathName, &buf)==0)?buf.st_mtime:0;
|
time_t timeStamp = (_wstat(_fullPathNameW, &buf)==0)?buf.st_mtime:0;
|
||||||
|
|
||||||
if (timeStamp != _timeStamp) {
|
if (timeStamp != _timeStamp) {
|
||||||
_timeStamp = timeStamp;
|
_timeStamp = timeStamp;
|
||||||
|
@ -102,6 +103,8 @@ void Buffer::setFileName(const char *fn, LangType defaultLang)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strcpy(_fullPathName, fn);
|
strcpy(_fullPathName, fn);
|
||||||
|
char2wchar(_fullPathName, _fullPathNameW);
|
||||||
|
_fileNameW = PathFindFileNameW(_fullPathNameW);
|
||||||
_fileName = PathFindFileName(_fullPathName);
|
_fileName = PathFindFileName(_fullPathName);
|
||||||
|
|
||||||
// for _lang
|
// for _lang
|
||||||
|
@ -148,19 +151,19 @@ bool Buffer::checkFileState() { //returns true if the status has been changed (i
|
||||||
if (_currentStatus == DOC_UNNAMED) //unsaved document cannot change by environment
|
if (_currentStatus == DOC_UNNAMED) //unsaved document cannot change by environment
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (_currentStatus != DOC_DELETED && !PathFileExists(_fullPathName)) //document has been deleted
|
if (_currentStatus != DOC_DELETED && !PathFileExistsW(_fullPathNameW)) //document has been deleted
|
||||||
{
|
{
|
||||||
_currentStatus = DOC_DELETED;
|
_currentStatus = DOC_DELETED;
|
||||||
_isFileReadOnly = false;
|
_isFileReadOnly = false;
|
||||||
_isDirty = true; //dirty sicne no match with filesystem
|
_isDirty = true; //dirty since no match with filesystem
|
||||||
_timeStamp = 0;
|
_timeStamp = 0;
|
||||||
doNotify(BufferChangeStatus | BufferChangeReadonly | BufferChangeTimestamp);
|
doNotify(BufferChangeStatus | BufferChangeReadonly | BufferChangeTimestamp);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_currentStatus == DOC_DELETED && PathFileExists(_fullPathName))
|
if (_currentStatus == DOC_DELETED && PathFileExistsW(_fullPathNameW))
|
||||||
{ //document has returned from its grave
|
{ //document has returned from its grave
|
||||||
if (!_stat(_fullPathName, &buf))
|
if (!_wstat(_fullPathNameW, &buf))
|
||||||
{
|
{
|
||||||
_isFileReadOnly = (bool)(!(buf.st_mode & _S_IWRITE));
|
_isFileReadOnly = (bool)(!(buf.st_mode & _S_IWRITE));
|
||||||
|
|
||||||
|
@ -171,7 +174,7 @@ bool Buffer::checkFileState() { //returns true if the status has been changed (i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_stat(_fullPathName, &buf))
|
if (!_wstat(_fullPathNameW, &buf))
|
||||||
{
|
{
|
||||||
int mask = 0; //status always 'changes', even if from modified to modified
|
int mask = 0; //status always 'changes', even if from modified to modified
|
||||||
bool isFileReadOnly = (bool)(!(buf.st_mode & _S_IWRITE));
|
bool isFileReadOnly = (bool)(!(buf.st_mode & _S_IWRITE));
|
||||||
|
@ -443,20 +446,22 @@ bool FileManager::reloadBufferDeferred(BufferID id) {
|
||||||
bool FileManager::deleteFile(BufferID id)
|
bool FileManager::deleteFile(BufferID id)
|
||||||
{
|
{
|
||||||
Buffer * buf = getBufferByID(id);
|
Buffer * buf = getBufferByID(id);
|
||||||
const char *fileNamePath = buf->getFilePath();
|
const wchar_t *fileNamePath = buf->getFilePathW();
|
||||||
if (!PathFileExists(fileNamePath))
|
if (!PathFileExistsW(fileNamePath))
|
||||||
return false;
|
return false;
|
||||||
return ::DeleteFile(fileNamePath) != 0;
|
return ::DeleteFileW(fileNamePath) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileManager::moveFile(BufferID id, const char * newFileName)
|
bool FileManager::moveFile(BufferID id, const char * newFileName)
|
||||||
{
|
{
|
||||||
Buffer * buf = getBufferByID(id);
|
Buffer * buf = getBufferByID(id);
|
||||||
const char *fileNamePath = buf->getFilePath();
|
const wchar_t *fileNamePath = buf->getFilePathW();
|
||||||
if (!PathFileExists(fileNamePath))
|
if (!PathFileExistsW(fileNamePath))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (::MoveFile(fileNamePath, newFileName) == 0)
|
wchar_t newFileNameW[MAX_PATH];
|
||||||
|
char2wchar(newFileName, newFileNameW);
|
||||||
|
if (::MoveFileW(fileNamePath, newFileNameW) == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
buf->setFileName(newFileName);
|
buf->setFileName(newFileName);
|
||||||
|
@ -472,19 +477,21 @@ bool FileManager::saveBuffer(BufferID id, const char * filename, bool isCopy) {
|
||||||
char fullpath[MAX_PATH];
|
char fullpath[MAX_PATH];
|
||||||
::GetFullPathName(filename, MAX_PATH, fullpath, NULL);
|
::GetFullPathName(filename, MAX_PATH, fullpath, NULL);
|
||||||
::GetLongPathName(fullpath, fullpath, MAX_PATH);
|
::GetLongPathName(fullpath, fullpath, MAX_PATH);
|
||||||
if (PathFileExists(fullpath))
|
wchar_t fullpathW[MAX_PATH];
|
||||||
|
char2wchar(fullpath, fullpathW);
|
||||||
|
if (PathFileExistsW(fullpathW))
|
||||||
{
|
{
|
||||||
attrib = ::GetFileAttributes(fullpath);
|
attrib = ::GetFileAttributesW(fullpathW);
|
||||||
|
|
||||||
if (attrib != INVALID_FILE_ATTRIBUTES)
|
if (attrib != INVALID_FILE_ATTRIBUTES)
|
||||||
{
|
{
|
||||||
isHidden = (attrib & FILE_ATTRIBUTE_HIDDEN) != 0;
|
isHidden = (attrib & FILE_ATTRIBUTE_HIDDEN) != 0;
|
||||||
if (isHidden)
|
if (isHidden)
|
||||||
::SetFileAttributes(filename, attrib & ~FILE_ATTRIBUTE_HIDDEN);
|
::SetFileAttributesW(fullpathW, attrib & ~FILE_ATTRIBUTE_HIDDEN);
|
||||||
|
|
||||||
isSys = (attrib & FILE_ATTRIBUTE_SYSTEM) != 0;
|
isSys = (attrib & FILE_ATTRIBUTE_SYSTEM) != 0;
|
||||||
if (isSys)
|
if (isSys)
|
||||||
::SetFileAttributes(filename, attrib & ~FILE_ATTRIBUTE_SYSTEM);
|
::SetFileAttributesW(fullpathW, attrib & ~FILE_ATTRIBUTE_SYSTEM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -495,11 +502,12 @@ bool FileManager::saveBuffer(BufferID id, const char * filename, bool isCopy) {
|
||||||
Utf8_16_Write UnicodeConvertor;
|
Utf8_16_Write UnicodeConvertor;
|
||||||
UnicodeConvertor.setEncoding(mode);
|
UnicodeConvertor.setEncoding(mode);
|
||||||
|
|
||||||
FILE *fp = UnicodeConvertor.fopen(fullpath, "wb");
|
FILE *fp = UnicodeConvertor.fopenW(fullpathW, L"wb");
|
||||||
if (fp)
|
if (fp)
|
||||||
{
|
{
|
||||||
_pscratchTilla->execute(SCI_SETDOCPOINTER, 0, buffer->_doc); //generate new document
|
_pscratchTilla->execute(SCI_SETDOCPOINTER, 0, buffer->_doc); //generate new document
|
||||||
|
|
||||||
|
|
||||||
char data[blockSize + 1];
|
char data[blockSize + 1];
|
||||||
int lengthDoc = _pscratchTilla->getCurrentDocLen();
|
int lengthDoc = _pscratchTilla->getCurrentDocLen();
|
||||||
for (int i = 0; i < lengthDoc; i += blockSize)
|
for (int i = 0; i < lengthDoc; i += blockSize)
|
||||||
|
@ -514,10 +522,10 @@ bool FileManager::saveBuffer(BufferID id, const char * filename, bool isCopy) {
|
||||||
UnicodeConvertor.fclose();
|
UnicodeConvertor.fclose();
|
||||||
|
|
||||||
if (isHidden)
|
if (isHidden)
|
||||||
::SetFileAttributes(fullpath, attrib | FILE_ATTRIBUTE_HIDDEN);
|
::SetFileAttributesW(fullpathW, attrib | FILE_ATTRIBUTE_HIDDEN);
|
||||||
|
|
||||||
if (isSys)
|
if (isSys)
|
||||||
::SetFileAttributes(fullpath, attrib | FILE_ATTRIBUTE_SYSTEM);
|
::SetFileAttributesW(fullpathW, attrib | FILE_ATTRIBUTE_SYSTEM);
|
||||||
|
|
||||||
if (isCopy) {
|
if (isCopy) {
|
||||||
_pscratchTilla->execute(SCI_SETDOCPOINTER, 0, _scratchDocDefault);
|
_pscratchTilla->execute(SCI_SETDOCPOINTER, 0, _scratchDocDefault);
|
||||||
|
@ -571,17 +579,20 @@ bool FileManager::loadFileData(Document doc, const char * filename, Utf8_16_Read
|
||||||
const int blockSize = 128 * 1024; //128 kB
|
const int blockSize = 128 * 1024; //128 kB
|
||||||
char data[blockSize];
|
char data[blockSize];
|
||||||
|
|
||||||
__try {
|
WCHAR filenameW[MAX_PATH];
|
||||||
FILE *fp = fopen(filename, "rb");
|
char2wchar(filename, filenameW);
|
||||||
|
|
||||||
|
FILE *fp = _wfopen(filenameW, L"rb");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
__try {
|
||||||
//Setup scratchtilla for new filedata
|
//Setup scratchtilla for new filedata
|
||||||
_pscratchTilla->execute(SCI_SETDOCPOINTER, 0, doc);
|
_pscratchTilla->execute(SCI_SETDOCPOINTER, 0, doc);
|
||||||
bool ro = _pscratchTilla->execute(SCI_GETREADONLY) != 0;
|
bool ro = _pscratchTilla->execute(SCI_GETREADONLY) != 0;
|
||||||
if (ro) {
|
if (ro) {
|
||||||
_pscratchTilla->execute(SCI_SETREADONLY, false);
|
_pscratchTilla->execute(SCI_SETREADONLY, false);
|
||||||
}
|
}
|
||||||
_pscratchTilla->execute(SCI_CLEARALL);
|
_pscratchTilla->execute(SCI_CLEARALL);
|
||||||
if (language < L_EXTERNAL) {
|
if (language < L_EXTERNAL) {
|
||||||
_pscratchTilla->execute(SCI_SETLEXER, ScintillaEditView::langNames[language].lexerID);
|
_pscratchTilla->execute(SCI_SETLEXER, ScintillaEditView::langNames[language].lexerID);
|
||||||
|
@ -610,6 +621,7 @@ bool FileManager::loadFileData(Document doc, const char * filename, Utf8_16_Read
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}__except(filter(GetExceptionCode(), GetExceptionInformation())) {
|
}__except(filter(GetExceptionCode(), GetExceptionInformation())) {
|
||||||
|
|
||||||
printStr("File is too big to be opened by Notepad++");
|
printStr("File is too big to be opened by Notepad++");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -634,7 +646,10 @@ BufferID FileManager::getBufferFromDocument(Document doc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileManager::createEmptyFile(const char * path) {
|
bool FileManager::createEmptyFile(const char * path) {
|
||||||
FILE * file = fopen(path, "wb");
|
WCHAR pathW[MAX_PATH];
|
||||||
|
char2wchar(path, pathW);
|
||||||
|
|
||||||
|
FILE * file = _wfopen(pathW, L"wb");
|
||||||
if (!file)
|
if (!file)
|
||||||
return false;
|
return false;
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
|
@ -163,8 +163,12 @@ public :
|
||||||
const char * getFilePath() const {
|
const char * getFilePath() const {
|
||||||
return _fullPathName;
|
return _fullPathName;
|
||||||
};
|
};
|
||||||
|
const wchar_t * getFilePathW() const {
|
||||||
|
return _fullPathNameW;
|
||||||
|
};
|
||||||
|
|
||||||
const char * getFileName() const { return _fileName; };
|
const char * getFileName() const { return _fileName; };
|
||||||
|
const wchar_t * getFileNameW() const { return _fileNameW; };
|
||||||
|
|
||||||
BufferID getID() const {
|
BufferID getID() const {
|
||||||
return _id;
|
return _id;
|
||||||
|
@ -248,6 +252,10 @@ public :
|
||||||
return _currentStatus;
|
return _currentStatus;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
time_t getTimeStamp() const {
|
||||||
|
return _timeStamp;
|
||||||
|
};
|
||||||
|
|
||||||
Document getDocument() {
|
Document getDocument() {
|
||||||
return _doc;
|
return _doc;
|
||||||
};
|
};
|
||||||
|
@ -319,6 +327,13 @@ public :
|
||||||
void setNeedReload(bool reload) {
|
void setNeedReload(bool reload) {
|
||||||
_needReloading = reload;
|
_needReloading = reload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector < pair<Style, int> > & getClickableStyles() {
|
||||||
|
return _clickableStyles;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private :
|
private :
|
||||||
FileManager * _pManager;
|
FileManager * _pManager;
|
||||||
bool _canNotify;
|
bool _canNotify;
|
||||||
|
@ -345,11 +360,14 @@ private :
|
||||||
time_t _timeStamp; // 0 if it's a new doc
|
time_t _timeStamp; // 0 if it's a new doc
|
||||||
bool _isFileReadOnly;
|
bool _isFileReadOnly;
|
||||||
char _fullPathName[MAX_PATH];
|
char _fullPathName[MAX_PATH];
|
||||||
|
wchar_t _fullPathNameW[MAX_PATH];
|
||||||
char * _fileName; //points to filename part in _fullPathName
|
char * _fileName; //points to filename part in _fullPathName
|
||||||
|
wchar_t * _fileNameW;
|
||||||
bool _needReloading; //True if Buffer needs to be reloaded on activation
|
bool _needReloading; //True if Buffer needs to be reloaded on activation
|
||||||
|
|
||||||
long _recentTag;
|
long _recentTag;
|
||||||
static long _recentTagCtr;
|
static long _recentTagCtr;
|
||||||
|
vector < pair<Style, int> > _clickableStyles;
|
||||||
|
|
||||||
void updateTimeStamp();
|
void updateTimeStamp();
|
||||||
Lang * getCurrentLang() const;
|
Lang * getCurrentLang() const;
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include <commctrl.h>
|
#include <commctrl.h>
|
||||||
#include <shlwapi.h>
|
#include <shlwapi.h>
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
bool DocTabView::_hideTabBarStatus = false;
|
bool DocTabView::_hideTabBarStatus = false;
|
||||||
|
|
||||||
|
@ -32,16 +33,18 @@ void DocTabView::addBuffer(BufferID buffer) {
|
||||||
if (this->getIndexByBuffer(buffer) != -1) //no duplicates
|
if (this->getIndexByBuffer(buffer) != -1) //no duplicates
|
||||||
return;
|
return;
|
||||||
Buffer * buf = MainFileManager->getBufferByID(buffer);
|
Buffer * buf = MainFileManager->getBufferByID(buffer);
|
||||||
TCITEM tie;
|
TCITEMW tie;
|
||||||
tie.mask = TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM;
|
tie.mask = TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM;
|
||||||
|
|
||||||
int index = -1;
|
int index = -1;
|
||||||
if (_hasImgLst)
|
if (_hasImgLst)
|
||||||
index = 0;
|
index = 0;
|
||||||
tie.iImage = index;
|
tie.iImage = index;
|
||||||
tie.pszText = (LPSTR)buf->getFileName();
|
tie.pszText = (LPWSTR)buf->getFileNameW();
|
||||||
|
tie.cchTextMax = lstrlenW(tie.pszText);
|
||||||
tie.lParam = (LPARAM)buffer;
|
tie.lParam = (LPARAM)buffer;
|
||||||
::SendMessage(_hSelf, TCM_INSERTITEM, _nbItem++, reinterpret_cast<LPARAM>(&tie));
|
|
||||||
|
::SendMessage(_hSelf, TCM_INSERTITEMW, _nbItem++, reinterpret_cast<LPARAM>(&tie));
|
||||||
bufferUpdated(buf, BufferChangeMask);
|
bufferUpdated(buf, BufferChangeMask);
|
||||||
|
|
||||||
::SendMessage(_hParent, WM_SIZE, 0, 0);
|
::SendMessage(_hParent, WM_SIZE, 0, 0);
|
||||||
|
@ -108,7 +111,7 @@ void DocTabView::bufferUpdated(Buffer * buffer, int mask) {
|
||||||
if (index == -1)
|
if (index == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TCITEM tie;
|
TCITEMW tie;
|
||||||
tie.lParam = -1;
|
tie.lParam = -1;
|
||||||
tie.mask = 0;
|
tie.mask = 0;
|
||||||
|
|
||||||
|
@ -123,10 +126,10 @@ void DocTabView::bufferUpdated(Buffer * buffer, int mask) {
|
||||||
|
|
||||||
if (mask & BufferChangeFilename) {
|
if (mask & BufferChangeFilename) {
|
||||||
tie.mask |= TCIF_TEXT;
|
tie.mask |= TCIF_TEXT;
|
||||||
tie.pszText = (LPSTR)buffer->getFileName();
|
tie.pszText = (LPWSTR)buffer->getFileNameW();
|
||||||
}
|
}
|
||||||
|
|
||||||
::SendMessage(_hSelf, TCM_SETITEM, index, reinterpret_cast<LPARAM>(&tie));
|
::SendMessage(_hSelf, TCM_SETITEMW, index, reinterpret_cast<LPARAM>(&tie));
|
||||||
|
|
||||||
::SendMessage(_hParent, WM_SIZE, 0, 0);
|
::SendMessage(_hParent, WM_SIZE, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -460,8 +460,11 @@ BOOL CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lP
|
||||||
doDialog((DIALOG_TYPE)indexClicked);
|
doDialog((DIALOG_TYPE)indexClicked);
|
||||||
if ((DIALOG_TYPE)indexClicked == FINDINFILES_DLG)
|
if ((DIALOG_TYPE)indexClicked == FINDINFILES_DLG)
|
||||||
{
|
{
|
||||||
|
wchar_t currentDirW[MAX_PATH];
|
||||||
|
::GetCurrentDirectoryW(MAX_PATH, currentDirW);
|
||||||
char currentDir[MAX_PATH];
|
char currentDir[MAX_PATH];
|
||||||
::GetCurrentDirectory(MAX_PATH, currentDir);
|
wchar2char(currentDirW, currentDir);
|
||||||
|
|
||||||
setFindInFilesDirFilter(currentDir, NULL);
|
setFindInFilesDirFilter(currentDir, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -564,13 +567,17 @@ BOOL CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lP
|
||||||
if (_currentStatus == FINDINFILES_DLG)
|
if (_currentStatus == FINDINFILES_DLG)
|
||||||
{
|
{
|
||||||
char filters[256];
|
char filters[256];
|
||||||
char directory[MAX_PATH];
|
wchar_t filtersW[256];
|
||||||
::GetDlgItemText(_hSelf, IDD_FINDINFILES_FILTERS_COMBO, filters, sizeof(filters));
|
::GetDlgItemTextW(_hSelf, IDD_FINDINFILES_FILTERS_COMBO, filtersW, sizeof(filtersW));
|
||||||
addText2Combo(filters, ::GetDlgItem(_hSelf, IDD_FINDINFILES_FILTERS_COMBO));
|
wchar2char(filtersW, filters);
|
||||||
|
addText2Combo(filters, ::GetDlgItem(_hSelf, IDD_FINDINFILES_FILTERS_COMBO), true);
|
||||||
_filters = filters;
|
_filters = filters;
|
||||||
|
|
||||||
::GetDlgItemText(_hSelf, IDD_FINDINFILES_DIR_COMBO, directory, sizeof(directory));
|
char directory[MAX_PATH];
|
||||||
addText2Combo(directory, ::GetDlgItem(_hSelf, IDD_FINDINFILES_DIR_COMBO));
|
wchar_t directoryW[MAX_PATH];
|
||||||
|
::GetDlgItemTextW(_hSelf, IDD_FINDINFILES_DIR_COMBO, directoryW, sizeof(directoryW));
|
||||||
|
wchar2char(directoryW, directory);
|
||||||
|
addText2Combo(directory, ::GetDlgItem(_hSelf, IDD_FINDINFILES_DIR_COMBO), true);
|
||||||
_directory = directory;
|
_directory = directory;
|
||||||
|
|
||||||
if ((strlen(directory) > 0) && (directory[strlen(directory)-1] != '\\'))
|
if ((strlen(directory) > 0) && (directory[strlen(directory)-1] != '\\'))
|
||||||
|
@ -877,13 +884,16 @@ bool FindReplaceDlg::processFindNext(const char *txt2find, FindOption *options)
|
||||||
if (!pOptions->_isIncremental) { //incremental search doesnt trigger messages
|
if (!pOptions->_isIncremental) { //incremental search doesnt trigger messages
|
||||||
const char stringMaxSize = 64;
|
const char stringMaxSize = 64;
|
||||||
char message[30 + stringMaxSize + 4]; //message, string, dots
|
char message[30 + stringMaxSize + 4]; //message, string, dots
|
||||||
|
wchar_t messageW[30 + stringMaxSize + 4]; //message, string, dots
|
||||||
strcpy(message, "Can't find the text:\r\n\"");
|
strcpy(message, "Can't find the text:\r\n\"");
|
||||||
strncat(message, pText, stringMaxSize);
|
strncat(message, pText, stringMaxSize);
|
||||||
strcat(message, "\"");
|
strcat(message, "\"");
|
||||||
if (strlen(pText) > stringMaxSize) {
|
if (strlen(pText) > stringMaxSize) {
|
||||||
strcat(message, "...");
|
strcat(message, "...");
|
||||||
}
|
}
|
||||||
::MessageBox(_hSelf, message, "Find", MB_OK);
|
|
||||||
|
char2wchar(message, messageW);
|
||||||
|
::MessageBoxW(_hSelf, messageW, L"Find", MB_OK);
|
||||||
// if the dialog is not shown, pass the focus to his parent(ie. Notepad++)
|
// if the dialog is not shown, pass the focus to his parent(ie. Notepad++)
|
||||||
if (!::IsWindowVisible(_hSelf))
|
if (!::IsWindowVisible(_hSelf))
|
||||||
::SetFocus((*_ppEditView)->getHSelf());
|
::SetFocus((*_ppEditView)->getHSelf());
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "ScintillaEditView.h"
|
#include "ScintillaEditView.h"
|
||||||
#include "StatusBar.h"
|
#include "StatusBar.h"
|
||||||
#include "DockingDlgInterface.h"
|
#include "DockingDlgInterface.h"
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
|
|
||||||
#define FIND_RECURSIVE 1
|
#define FIND_RECURSIVE 1
|
||||||
|
@ -295,12 +296,18 @@ public :
|
||||||
if (dir)
|
if (dir)
|
||||||
{
|
{
|
||||||
_directory = dir;
|
_directory = dir;
|
||||||
::SetDlgItemText(_hSelf, IDD_FINDINFILES_DIR_COMBO, dir);
|
|
||||||
|
wchar_t dirW[MAX_PATH];
|
||||||
|
char2wchar(dir, dirW);
|
||||||
|
::SetDlgItemTextW(_hSelf, IDD_FINDINFILES_DIR_COMBO, dirW);
|
||||||
}
|
}
|
||||||
if (filters)
|
if (filters)
|
||||||
{
|
{
|
||||||
_filters = filters;
|
_filters = filters;
|
||||||
::SetDlgItemText(_hSelf, IDD_FINDINFILES_FILTERS_COMBO, filters);
|
|
||||||
|
wchar_t filtersW[MAX_PATH];
|
||||||
|
char2wchar(filters, filtersW);
|
||||||
|
::SetDlgItemTextW(_hSelf, IDD_FINDINFILES_FILTERS_COMBO, filtersW);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,10 @@
|
||||||
//You should have received a copy of the GNU General Public License
|
//You should have received a copy of the GNU General Public License
|
||||||
//along with this program; if not, write to the Free Software
|
//along with this program; if not, write to the Free Software
|
||||||
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
#include "Printer.h"
|
#include "Printer.h"
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
void replaceStr(string & str, string str2BeReplaced, string replacement)
|
void replaceStr(wstring & str, wstring str2BeReplaced, wstring replacement)
|
||||||
{
|
{
|
||||||
size_t pos = str.find(str2BeReplaced);
|
size_t pos = str.find(str2BeReplaced);
|
||||||
|
|
||||||
|
@ -127,61 +127,65 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
// Convert page size to logical units and we're done!
|
// Convert page size to logical units and we're done!
|
||||||
DPtoLP(_pdlg.hDC, &ptPage, 1);
|
DPtoLP(_pdlg.hDC, &ptPage, 1);
|
||||||
|
|
||||||
TEXTMETRIC tm;
|
TEXTMETRICW tm;
|
||||||
|
|
||||||
int fontSize = nppGUI._printSettings._headerFontSize?nppGUI._printSettings._headerFontSize:9;
|
int fontSize = nppGUI._printSettings._headerFontSize?nppGUI._printSettings._headerFontSize:9;
|
||||||
int fontWeight = nppGUI._printSettings._headerFontStyle & FONTSTYLE_BOLD?FW_BOLD:FW_NORMAL;
|
int fontWeight = nppGUI._printSettings._headerFontStyle & FONTSTYLE_BOLD?FW_BOLD:FW_NORMAL;
|
||||||
int isFontItalic = nppGUI._printSettings._headerFontStyle & FONTSTYLE_ITALIC?TRUE:FALSE;
|
int isFontItalic = nppGUI._printSettings._headerFontStyle & FONTSTYLE_ITALIC?TRUE:FALSE;
|
||||||
const char *fontFace = (nppGUI._printSettings._headerFontName != "")?nppGUI._printSettings._headerFontName.c_str():"Arial";
|
const char *fontFace = (nppGUI._printSettings._headerFontName != "")?nppGUI._printSettings._headerFontName.c_str():"Arial";
|
||||||
|
|
||||||
|
wchar_t fontFaceW[LF_FACESIZE];
|
||||||
|
char2wchar(fontFace, fontFaceW);
|
||||||
|
|
||||||
int headerLineHeight = ::MulDiv(fontSize, ptDpi.y, 72);
|
int headerLineHeight = ::MulDiv(fontSize, ptDpi.y, 72);
|
||||||
//char toto[10];
|
//char toto[10];
|
||||||
//::MessageBox(NULL, itoa(nppGUI._printSettings._headerFontStyle, toto, 10), "header", MB_OK);
|
//::MessageBox(NULL, itoa(nppGUI._printSettings._headerFontStyle, toto, 10), L"header", MB_OK);
|
||||||
|
|
||||||
HFONT fontHeader = ::CreateFont(headerLineHeight,
|
HFONT fontHeader = ::CreateFontW(headerLineHeight,
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
fontWeight,
|
fontWeight,
|
||||||
isFontItalic,
|
isFontItalic,
|
||||||
FALSE,
|
FALSE,
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
fontFace);
|
fontFaceW);
|
||||||
|
|
||||||
::SelectObject(_pdlg.hDC, fontHeader);
|
::SelectObject(_pdlg.hDC, fontHeader);
|
||||||
::GetTextMetrics(_pdlg.hDC, &tm);
|
::GetTextMetricsW(_pdlg.hDC, &tm);
|
||||||
headerLineHeight = tm.tmHeight + tm.tmExternalLeading;
|
headerLineHeight = tm.tmHeight + tm.tmExternalLeading;
|
||||||
|
|
||||||
fontSize = nppGUI._printSettings._footerFontSize?nppGUI._printSettings._footerFontSize:9;
|
fontSize = nppGUI._printSettings._footerFontSize?nppGUI._printSettings._footerFontSize:9;
|
||||||
fontWeight = nppGUI._printSettings._footerFontStyle & FONTSTYLE_BOLD?FW_BOLD:FW_NORMAL;
|
fontWeight = nppGUI._printSettings._footerFontStyle & FONTSTYLE_BOLD?FW_BOLD:FW_NORMAL;
|
||||||
isFontItalic = nppGUI._printSettings._footerFontStyle & FONTSTYLE_ITALIC?TRUE:FALSE;
|
isFontItalic = nppGUI._printSettings._footerFontStyle & FONTSTYLE_ITALIC?TRUE:FALSE;
|
||||||
fontFace = (nppGUI._printSettings._footerFontName != "")?nppGUI._printSettings._footerFontName.c_str():"Arial";
|
fontFace = (nppGUI._printSettings._footerFontName != "")?nppGUI._printSettings._footerFontName.c_str():"Arial";
|
||||||
//::MessageBox(NULL, itoa(nppGUI._printSettings._footerFontStyle, , 10), "footer", MB_OK);
|
//::MessageBox(NULL, itoa(nppGUI._printSettings._footerFontStyle, , 10), L"footer", MB_OK);
|
||||||
|
char2wchar(fontFace, fontFaceW);
|
||||||
|
|
||||||
int footerLineHeight = ::MulDiv(fontSize, ptDpi.y, 72);
|
int footerLineHeight = ::MulDiv(fontSize, ptDpi.y, 72);
|
||||||
HFONT fontFooter = ::CreateFont(footerLineHeight,
|
HFONT fontFooter = ::CreateFontW(footerLineHeight,
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
fontWeight,
|
fontWeight,
|
||||||
isFontItalic,
|
isFontItalic,
|
||||||
FALSE,
|
FALSE,
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
fontFace);
|
fontFaceW);
|
||||||
|
|
||||||
::SelectObject(_pdlg.hDC, fontFooter);
|
::SelectObject(_pdlg.hDC, fontFooter);
|
||||||
::GetTextMetrics(_pdlg.hDC, &tm);
|
::GetTextMetricsW(_pdlg.hDC, &tm);
|
||||||
footerLineHeight = tm.tmHeight + tm.tmExternalLeading;
|
footerLineHeight = tm.tmHeight + tm.tmExternalLeading;
|
||||||
|
|
||||||
|
|
||||||
::GetTextMetrics(_pdlg.hDC, &tm);
|
::GetTextMetricsW(_pdlg.hDC, &tm);
|
||||||
int printMarge = tm.tmHeight + tm.tmExternalLeading;
|
int printMarge = tm.tmHeight + tm.tmExternalLeading;
|
||||||
printMarge = printMarge + printMarge / 2;
|
printMarge = printMarge + printMarge / 2;
|
||||||
|
|
||||||
DOCINFO docInfo;
|
DOCINFOW docInfo;
|
||||||
docInfo.cbSize = sizeof(DOCINFO);
|
docInfo.cbSize = sizeof(DOCINFO);
|
||||||
docInfo.lpszDocName = _pSEView->getCurrentBuffer()->getFilePath();
|
docInfo.lpszDocName = _pSEView->getCurrentBuffer()->getFilePathW();
|
||||||
docInfo.lpszOutput = NULL;
|
docInfo.lpszOutput = NULL;
|
||||||
|
|
||||||
if (::StartDoc(_pdlg.hDC, &docInfo) < 0)
|
if (::StartDocW(_pdlg.hDC, &docInfo) < 0)
|
||||||
{
|
{
|
||||||
MessageBox(NULL, "Can not start printer document.", 0, MB_OK);
|
MessageBox(NULL, "Can not start printer document.", 0, MB_OK);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -230,34 +234,33 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
frPrint.rc.left += printMarge;
|
frPrint.rc.left += printMarge;
|
||||||
frPrint.rc.right -= printMarge;
|
frPrint.rc.right -= printMarge;
|
||||||
|
|
||||||
char headerL[256] = "";
|
wchar_t headerL[256] = L"";
|
||||||
char headerM[256] = "";
|
wchar_t headerM[256] = L"";
|
||||||
char headerR[256] = "";
|
wchar_t headerR[256] = L"";
|
||||||
char footerL[256] = "";
|
wchar_t footerL[256] = L"";
|
||||||
char footerM[256] = "";
|
wchar_t footerM[256] = L"";
|
||||||
char footerR[256] = "";
|
wchar_t footerR[256] = L"";
|
||||||
|
|
||||||
|
const wchar_t shortDateVar[] = L"$(SHORT_DATE)";
|
||||||
|
const wchar_t longDateVar[] = L"$(LONG_DATE)";
|
||||||
|
const wchar_t timeVar[] = L"$(TIME)";
|
||||||
|
|
||||||
const char shortDateVar[] = "$(SHORT_DATE)";
|
wchar_t shortDate[64];
|
||||||
const char longDateVar[] = "$(LONG_DATE)";
|
wchar_t longDate[64];
|
||||||
const char timeVar[] = "$(TIME)";
|
wchar_t time[64];
|
||||||
|
|
||||||
char shortDate[64];
|
|
||||||
char longDate[64];
|
|
||||||
char time[64];
|
|
||||||
|
|
||||||
SYSTEMTIME st;
|
SYSTEMTIME st;
|
||||||
::GetLocalTime(&st);
|
::GetLocalTime(&st);
|
||||||
::GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, NULL, shortDate, sizeof(shortDate));
|
::GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, NULL, shortDate, sizeof(shortDate));
|
||||||
::GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, longDate, sizeof(longDate));
|
::GetDateFormatW(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, longDate, sizeof(longDate));
|
||||||
::GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &st, NULL, time, sizeof(time));
|
::GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &st, NULL, time, sizeof(time));
|
||||||
|
|
||||||
if (nppGUI._printSettings.isHeaderPresent())
|
if (nppGUI._printSettings.isHeaderPresent())
|
||||||
{
|
{
|
||||||
frPrint.rc.top += headerLineHeight + headerLineHeight / 2;
|
frPrint.rc.top += headerLineHeight + headerLineHeight / 2;
|
||||||
|
|
||||||
string headerLeftPart = nppGUI._printSettings._headerLeft;
|
wstring headerLeftPart = string2wstring(nppGUI._printSettings._headerLeft);
|
||||||
if (headerLeftPart != "")
|
if (headerLeftPart != L"")
|
||||||
{
|
{
|
||||||
replaceStr(headerLeftPart, shortDateVar, shortDate);
|
replaceStr(headerLeftPart, shortDateVar, shortDate);
|
||||||
replaceStr(headerLeftPart, longDateVar, longDate);
|
replaceStr(headerLeftPart, longDateVar, longDate);
|
||||||
|
@ -265,8 +268,8 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
expandNppEnvironmentStrs(headerLeftPart.c_str(), headerL, sizeof(headerL), _pdlg.hwndOwner);
|
expandNppEnvironmentStrs(headerLeftPart.c_str(), headerL, sizeof(headerL), _pdlg.hwndOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
string headerMiddlePart = nppGUI._printSettings._headerMiddle;
|
wstring headerMiddlePart = string2wstring(nppGUI._printSettings._headerMiddle);
|
||||||
if (headerMiddlePart != "")
|
if (headerMiddlePart != L"")
|
||||||
{
|
{
|
||||||
replaceStr(headerMiddlePart, shortDateVar, shortDate);
|
replaceStr(headerMiddlePart, shortDateVar, shortDate);
|
||||||
replaceStr(headerMiddlePart, longDateVar, longDate);
|
replaceStr(headerMiddlePart, longDateVar, longDate);
|
||||||
|
@ -274,8 +277,8 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
expandNppEnvironmentStrs(headerMiddlePart.c_str(), headerM, sizeof(headerM), _pdlg.hwndOwner);
|
expandNppEnvironmentStrs(headerMiddlePart.c_str(), headerM, sizeof(headerM), _pdlg.hwndOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
string headerRightPart = nppGUI._printSettings._headerRight;
|
wstring headerRightPart = string2wstring(nppGUI._printSettings._headerRight);
|
||||||
if (headerRightPart != "")
|
if (headerRightPart != L"")
|
||||||
{
|
{
|
||||||
replaceStr(headerRightPart, shortDateVar, shortDate);
|
replaceStr(headerRightPart, shortDateVar, shortDate);
|
||||||
replaceStr(headerRightPart, longDateVar, longDate);
|
replaceStr(headerRightPart, longDateVar, longDate);
|
||||||
|
@ -289,8 +292,8 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
{
|
{
|
||||||
frPrint.rc.bottom -= footerLineHeight + footerLineHeight / 2;
|
frPrint.rc.bottom -= footerLineHeight + footerLineHeight / 2;
|
||||||
|
|
||||||
string footerLeftPart = nppGUI._printSettings._footerLeft;
|
wstring footerLeftPart = string2wstring(nppGUI._printSettings._footerLeft);
|
||||||
if (footerLeftPart != "")
|
if (footerLeftPart != L"")
|
||||||
{
|
{
|
||||||
replaceStr(footerLeftPart, shortDateVar, shortDate);
|
replaceStr(footerLeftPart, shortDateVar, shortDate);
|
||||||
replaceStr(footerLeftPart, longDateVar, longDate);
|
replaceStr(footerLeftPart, longDateVar, longDate);
|
||||||
|
@ -298,8 +301,8 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
expandNppEnvironmentStrs(footerLeftPart.c_str(), footerL, sizeof(footerL), _pdlg.hwndOwner);
|
expandNppEnvironmentStrs(footerLeftPart.c_str(), footerL, sizeof(footerL), _pdlg.hwndOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
string footerMiddlePart = nppGUI._printSettings._footerMiddle;
|
wstring footerMiddlePart = string2wstring(nppGUI._printSettings._footerMiddle);
|
||||||
if (footerMiddlePart != "")
|
if (footerMiddlePart != L"")
|
||||||
{
|
{
|
||||||
replaceStr(footerMiddlePart, shortDateVar, shortDate);
|
replaceStr(footerMiddlePart, shortDateVar, shortDate);
|
||||||
replaceStr(footerMiddlePart, longDateVar, longDate);
|
replaceStr(footerMiddlePart, longDateVar, longDate);
|
||||||
|
@ -307,8 +310,8 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
expandNppEnvironmentStrs(footerMiddlePart.c_str(), footerM, sizeof(footerM), _pdlg.hwndOwner);
|
expandNppEnvironmentStrs(footerMiddlePart.c_str(), footerM, sizeof(footerM), _pdlg.hwndOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
string footerRightPart = nppGUI._printSettings._footerRight;
|
wstring footerRightPart = string2wstring(nppGUI._printSettings._footerRight);
|
||||||
if (footerRightPart != "")
|
if (footerRightPart != L"")
|
||||||
{
|
{
|
||||||
replaceStr(footerRightPart, shortDateVar, shortDate);
|
replaceStr(footerRightPart, shortDateVar, shortDate);
|
||||||
replaceStr(footerRightPart, longDateVar, longDate);
|
replaceStr(footerRightPart, longDateVar, longDate);
|
||||||
|
@ -324,7 +327,7 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
|
|
||||||
size_t pageNum = 1;
|
size_t pageNum = 1;
|
||||||
bool printPage;
|
bool printPage;
|
||||||
const char pageVar[] = "$(CURRENT_PRINTING_PAGE)";
|
const wchar_t pageVar[] = L"$(CURRENT_PRINTING_PAGE)";
|
||||||
|
|
||||||
while (lengthPrinted < lengthDoc)
|
while (lengthPrinted < lengthDoc)
|
||||||
{
|
{
|
||||||
|
@ -334,8 +337,8 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
if (!justDoIt)
|
if (!justDoIt)
|
||||||
printPage = false;
|
printPage = false;
|
||||||
|
|
||||||
char pageString[32];
|
wchar_t pageString[32];
|
||||||
sprintf(pageString, "%0d", pageNum);
|
wsprintfW(pageString, L"%0d", pageNum);
|
||||||
|
|
||||||
if (printPage)
|
if (printPage)
|
||||||
{
|
{
|
||||||
|
@ -359,38 +362,38 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
// Left part
|
// Left part
|
||||||
if (headerL[0] != '\0')
|
if (headerL[0] != '\0')
|
||||||
{
|
{
|
||||||
string headerLeft(headerL);
|
wstring headerLeft(headerL);
|
||||||
size_t pos = headerLeft.find(pageVar);
|
size_t pos = headerLeft.find(pageVar);
|
||||||
|
|
||||||
if (pos != headerLeft.npos)
|
if (pos != headerLeft.npos)
|
||||||
headerLeft.replace(pos, strlen(pageVar), pageString);
|
headerLeft.replace(pos, wcslen(pageVar), pageString);
|
||||||
|
|
||||||
::ExtTextOut(_pdlg.hDC, frPrint.rc.left + 5, frPrint.rc.top - headerLineHeight / 2,
|
::ExtTextOutW(_pdlg.hDC, frPrint.rc.left + 5, frPrint.rc.top - headerLineHeight / 2,
|
||||||
ETO_OPAQUE, &rcw, headerLeft.c_str(), static_cast<int>(headerLeft.length()), NULL);
|
ETO_OPAQUE, &rcw, headerLeft.c_str(), static_cast<int>(headerLeft.length()), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Middle part
|
// Middle part
|
||||||
if (headerM != '\0')
|
if (headerM != '\0')
|
||||||
{
|
{
|
||||||
string headerMiddle(headerM);
|
wstring headerMiddle(headerM);
|
||||||
size_t pos = headerMiddle.find(pageVar);
|
size_t pos = headerMiddle.find(pageVar);
|
||||||
if (pos != headerMiddle.npos)
|
if (pos != headerMiddle.npos)
|
||||||
headerMiddle.replace(pos, strlen(pageVar), pageString);
|
headerMiddle.replace(pos, wcslen(pageVar), pageString);
|
||||||
|
|
||||||
::GetTextExtentPoint32(_pdlg.hDC, headerMiddle.c_str(), static_cast<int>(headerMiddle.length()), &size);
|
::GetTextExtentPoint32W(_pdlg.hDC, headerMiddle.c_str(), static_cast<int>(headerMiddle.length()), &size);
|
||||||
::ExtTextOut(_pdlg.hDC, ((frPrint.rc.right - frPrint.rc.left)/2 + frPrint.rc.left) - (size.cx/2), frPrint.rc.top - headerLineHeight / 2,
|
::ExtTextOutW(_pdlg.hDC, ((frPrint.rc.right - frPrint.rc.left)/2 + frPrint.rc.left) - (size.cx/2), frPrint.rc.top - headerLineHeight / 2,
|
||||||
ETO_CLIPPED, &rcw, headerMiddle.c_str(), static_cast<int>(headerMiddle.length()), NULL);
|
ETO_CLIPPED, &rcw, headerMiddle.c_str(), static_cast<int>(headerMiddle.length()), NULL);
|
||||||
}
|
}
|
||||||
// Right part
|
// Right part
|
||||||
if (headerR != '\0')
|
if (headerR != '\0')
|
||||||
{
|
{
|
||||||
string headerRight(headerR);
|
wstring headerRight(headerR);
|
||||||
size_t pos = headerRight.find(pageVar);
|
size_t pos = headerRight.find(pageVar);
|
||||||
if (pos != headerRight.npos)
|
if (pos != headerRight.npos)
|
||||||
headerRight.replace(pos, strlen(pageVar), pageString);
|
headerRight.replace(pos, wcslen(pageVar), pageString);
|
||||||
|
|
||||||
::GetTextExtentPoint32(_pdlg.hDC, headerRight.c_str(), static_cast<int>(headerRight.length()), &size);
|
::GetTextExtentPoint32W(_pdlg.hDC, headerRight.c_str(), static_cast<int>(headerRight.length()), &size);
|
||||||
::ExtTextOut(_pdlg.hDC, frPrint.rc.right - size.cx, frPrint.rc.top - headerLineHeight / 2,
|
::ExtTextOutW(_pdlg.hDC, frPrint.rc.right - size.cx, frPrint.rc.top - headerLineHeight / 2,
|
||||||
ETO_CLIPPED, &rcw, headerRight.c_str(), static_cast<int>(headerRight.length()), NULL);
|
ETO_CLIPPED, &rcw, headerRight.c_str(), static_cast<int>(headerRight.length()), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,36 +430,37 @@ size_t Printer::doPrint(bool justDoIt)
|
||||||
// Left part
|
// Left part
|
||||||
if (footerL[0] != '\0')
|
if (footerL[0] != '\0')
|
||||||
{
|
{
|
||||||
string footerLeft(footerL);
|
wstring footerLeft(footerL);
|
||||||
size_t pos = footerLeft.find(pageVar);
|
size_t pos = footerLeft.find(pageVar);
|
||||||
if (pos != footerLeft.npos)
|
if (pos != footerLeft.npos)
|
||||||
footerLeft.replace(pos, strlen(pageVar), pageString);
|
footerLeft.replace(pos, wcslen(pageVar), pageString);
|
||||||
|
|
||||||
::ExtTextOut(_pdlg.hDC, frPrint.rc.left + 5, frPrint.rc.bottom + footerLineHeight / 2,
|
::ExtTextOutW(_pdlg.hDC, frPrint.rc.left + 5, frPrint.rc.bottom + footerLineHeight / 2,
|
||||||
ETO_OPAQUE, &rcw, footerLeft.c_str(), static_cast<int>(footerLeft.length()), NULL);
|
ETO_OPAQUE, &rcw, footerLeft.c_str(), static_cast<int>(footerLeft.length()), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Middle part
|
// Middle part
|
||||||
if (footerM[0] != '\0')
|
if (footerM[0] != '\0')
|
||||||
{
|
{
|
||||||
string footerMiddle(footerM);
|
wstring footerMiddle(footerM);
|
||||||
size_t pos = footerMiddle.find(pageVar);
|
size_t pos = footerMiddle.find(pageVar);
|
||||||
if (pos != footerMiddle.npos)
|
if (pos != footerMiddle.npos)
|
||||||
footerMiddle.replace(pos, strlen(pageVar), pageString);
|
footerMiddle.replace(pos, wcslen(pageVar), pageString);
|
||||||
|
|
||||||
::GetTextExtentPoint32(_pdlg.hDC, footerMiddle.c_str(), static_cast<int>(footerMiddle.length()), &size);
|
::GetTextExtentPoint32W(_pdlg.hDC, footerMiddle.c_str(), static_cast<int>(footerMiddle.length()), &size);
|
||||||
::ExtTextOut(_pdlg.hDC, ((frPrint.rc.right - frPrint.rc.left)/2 + frPrint.rc.left) - (size.cx/2), frPrint.rc.bottom + footerLineHeight / 2,
|
::ExtTextOutW(_pdlg.hDC, ((frPrint.rc.right - frPrint.rc.left)/2 + frPrint.rc.left) - (size.cx/2), frPrint.rc.bottom + footerLineHeight / 2,
|
||||||
ETO_CLIPPED, &rcw, footerMiddle.c_str(), static_cast<int>(footerMiddle.length()), NULL);
|
ETO_CLIPPED, &rcw, footerMiddle.c_str(), static_cast<int>(footerMiddle.length()), NULL);
|
||||||
}
|
}
|
||||||
// Right part
|
// Right part
|
||||||
if (footerR[0] != '\0')
|
if (footerR[0] != '\0')
|
||||||
{
|
{
|
||||||
string footerRight(footerR);
|
wstring footerRight(footerR);
|
||||||
size_t pos = footerRight.find(pageVar);
|
size_t pos = footerRight.find(pageVar);
|
||||||
if (pos != footerRight.npos)
|
if (pos != footerRight.npos)
|
||||||
footerRight.replace(pos, strlen(pageVar), pageString);
|
footerRight.replace(pos, wcslen(pageVar), pageString);
|
||||||
::GetTextExtentPoint32(_pdlg.hDC, footerRight.c_str(), static_cast<int>(footerRight.length()), &size);
|
|
||||||
::ExtTextOut(_pdlg.hDC, frPrint.rc.right - size.cx, frPrint.rc.bottom + footerLineHeight / 2,
|
::GetTextExtentPoint32W(_pdlg.hDC, footerRight.c_str(), static_cast<int>(footerRight.length()), &size);
|
||||||
|
::ExtTextOutW(_pdlg.hDC, frPrint.rc.right - size.cx, frPrint.rc.bottom + footerLineHeight / 2,
|
||||||
ETO_CLIPPED, &rcw, footerRight.c_str(), static_cast<int>(footerRight.length()), NULL);
|
ETO_CLIPPED, &rcw, footerRight.c_str(), static_cast<int>(footerRight.length()), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ public :
|
||||||
Printer(){};
|
Printer(){};
|
||||||
void init(HINSTANCE hInst, HWND hwnd, ScintillaEditView *pSEView, bool showDialog, int startPos, int endPos);
|
void init(HINSTANCE hInst, HWND hwnd, ScintillaEditView *pSEView, bool showDialog, int startPos, int endPos);
|
||||||
size_t Printer::doPrint() {
|
size_t Printer::doPrint() {
|
||||||
if (!::PrintDlg(&_pdlg))
|
if (!::PrintDlgW(&_pdlg))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return doPrint(true);
|
return doPrint(true);
|
||||||
|
@ -45,7 +45,7 @@ public :
|
||||||
size_t doPrint(bool justDoIt);
|
size_t doPrint(bool justDoIt);
|
||||||
|
|
||||||
private :
|
private :
|
||||||
PRINTDLG _pdlg;
|
PRINTDLGW _pdlg;
|
||||||
ScintillaEditView *_pSEView;
|
ScintillaEditView *_pSEView;
|
||||||
size_t _startPos;
|
size_t _startPos;
|
||||||
size_t _endPos;
|
size_t _endPos;
|
||||||
|
|
|
@ -187,6 +187,11 @@ void ScintillaEditView::init(HINSTANCE hInst, HWND hPere)
|
||||||
execute(SCI_INDICSETUNDER, SCE_UNIVERSAL_TAGMATCH, true);
|
execute(SCI_INDICSETUNDER, SCE_UNIVERSAL_TAGMATCH, true);
|
||||||
execute(SCI_INDICSETUNDER, SCE_UNIVERSAL_TAGATTR, true);
|
execute(SCI_INDICSETUNDER, SCE_UNIVERSAL_TAGATTR, true);
|
||||||
|
|
||||||
|
// URL highlighting
|
||||||
|
int activeFG = 0xFF0000;
|
||||||
|
execute(SCI_SETHOTSPOTACTIVEFORE, TRUE, activeFG);
|
||||||
|
execute(SCI_SETHOTSPOTSINGLELINE, FALSE);
|
||||||
|
|
||||||
_pParameter = NppParameters::getInstance();
|
_pParameter = NppParameters::getInstance();
|
||||||
|
|
||||||
_codepage = ::GetACP();
|
_codepage = ::GetACP();
|
||||||
|
@ -266,6 +271,47 @@ void ScintillaEditView::setSpecialIndicator(Style & styleToSet)
|
||||||
execute(SCI_INDICSETFORE, styleToSet._styleID, styleToSet._bgColor);
|
execute(SCI_INDICSETFORE, styleToSet._styleID, styleToSet._bgColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScintillaEditView::setHotspotStyle()
|
||||||
|
{
|
||||||
|
vector< pair<Style, int> > clickableStyles = _currentBuffer->getClickableStyles();
|
||||||
|
//printStr("getin");
|
||||||
|
for (size_t i = 0 ; i < clickableStyles.size() ; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
int styleID = clickableStyles[i].second;
|
||||||
|
|
||||||
|
//if (execute(SCI_STYLEGETHOTSPOT, styleID) == FALSE)
|
||||||
|
{
|
||||||
|
Style styleToSet = clickableStyles[i].first;
|
||||||
|
//char toto[512];
|
||||||
|
//sprintf(toto, start, end);
|
||||||
|
//writeLog("c:\npp.log", toto);
|
||||||
|
if ( styleToSet._colorStyle & COLORSTYLE_FOREGROUND )
|
||||||
|
execute(SCI_STYLESETFORE, styleID, styleToSet._fgColor);
|
||||||
|
|
||||||
|
if ( styleToSet._colorStyle & COLORSTYLE_BACKGROUND )
|
||||||
|
execute(SCI_STYLESETBACK, styleID, styleToSet._bgColor);
|
||||||
|
|
||||||
|
if ((!styleToSet._fontName)||(strcmp(styleToSet._fontName, "")))
|
||||||
|
execute(SCI_STYLESETFONT, (WPARAM)styleID, (LPARAM)styleToSet._fontName);
|
||||||
|
|
||||||
|
int fontStyle = styleToSet._fontStyle;
|
||||||
|
if (fontStyle != -1)
|
||||||
|
{
|
||||||
|
execute(SCI_STYLESETBOLD, (WPARAM)styleID, fontStyle & FONTSTYLE_BOLD);
|
||||||
|
execute(SCI_STYLESETITALIC, (WPARAM)styleID, fontStyle & FONTSTYLE_ITALIC);
|
||||||
|
execute(SCI_STYLESETUNDERLINE, (WPARAM)styleID, fontStyle & FONTSTYLE_UNDERLINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (styleToSet._fontSize > 0)
|
||||||
|
execute(SCI_STYLESETSIZE, styleID, styleToSet._fontSize);
|
||||||
|
|
||||||
|
execute(SCI_STYLESETHOTSPOT, styleID, TRUE);
|
||||||
|
execute(SCI_SETHOTSPOTACTIVEFORE, TRUE, blue);
|
||||||
|
execute(SCI_SETHOTSPOTSINGLELINE, styleID, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ScintillaEditView::setSpecialStyle(Style & styleToSet)
|
void ScintillaEditView::setSpecialStyle(Style & styleToSet)
|
||||||
{
|
{
|
||||||
|
@ -702,6 +748,7 @@ void ScintillaEditView::makeStyle(LangType language, const char **keywordArray)
|
||||||
|
|
||||||
void ScintillaEditView::defineDocType(LangType typeDoc)
|
void ScintillaEditView::defineDocType(LangType typeDoc)
|
||||||
{
|
{
|
||||||
|
//setHotspotStyle();
|
||||||
//setStyle(STYLE_DEFAULT, black, white, "Verdana", 0, 9);
|
//setStyle(STYLE_DEFAULT, black, white, "Verdana", 0, 9);
|
||||||
StyleArray & stylers = _pParameter->getMiscStylerArray();
|
StyleArray & stylers = _pParameter->getMiscStylerArray();
|
||||||
int iStyleDefault = stylers.getStylerIndexByID(STYLE_DEFAULT);
|
int iStyleDefault = stylers.getStylerIndexByID(STYLE_DEFAULT);
|
||||||
|
@ -726,7 +773,6 @@ void ScintillaEditView::defineDocType(LangType typeDoc)
|
||||||
if (iFind != -1)
|
if (iFind != -1)
|
||||||
{
|
{
|
||||||
Style & styleFind = stylers.getStyler(iFind);
|
Style & styleFind = stylers.getStyler(iFind);
|
||||||
//setSpecialStyle(styleFind);
|
|
||||||
setSpecialIndicator(styleFind);
|
setSpecialIndicator(styleFind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -734,7 +780,6 @@ void ScintillaEditView::defineDocType(LangType typeDoc)
|
||||||
if (iFind != -1)
|
if (iFind != -1)
|
||||||
{
|
{
|
||||||
Style & styleFind = stylers.getStyler(iFind);
|
Style & styleFind = stylers.getStyler(iFind);
|
||||||
//setSpecialStyle(styleFind);
|
|
||||||
setSpecialIndicator(styleFind);
|
setSpecialIndicator(styleFind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -742,7 +787,6 @@ void ScintillaEditView::defineDocType(LangType typeDoc)
|
||||||
if (iFind != -1)
|
if (iFind != -1)
|
||||||
{
|
{
|
||||||
Style & styleFind = stylers.getStyler(iFind);
|
Style & styleFind = stylers.getStyler(iFind);
|
||||||
//setSpecialStyle(styleFind);
|
|
||||||
setSpecialIndicator(styleFind);
|
setSpecialIndicator(styleFind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -750,7 +794,6 @@ void ScintillaEditView::defineDocType(LangType typeDoc)
|
||||||
if (iFind != -1)
|
if (iFind != -1)
|
||||||
{
|
{
|
||||||
Style & styleFind = stylers.getStyler(iFind);
|
Style & styleFind = stylers.getStyler(iFind);
|
||||||
//setSpecialStyle(styleFind);
|
|
||||||
setSpecialIndicator(styleFind);
|
setSpecialIndicator(styleFind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -563,6 +563,7 @@ protected:
|
||||||
inline void makeStyle(LangType langType, const char **keywordArray = NULL);
|
inline void makeStyle(LangType langType, const char **keywordArray = NULL);
|
||||||
void setStyle(Style styleToSet); //NOT by reference (style edited)
|
void setStyle(Style styleToSet); //NOT by reference (style edited)
|
||||||
void setSpecialStyle(Style & styleToSet); //by reference
|
void setSpecialStyle(Style & styleToSet); //by reference
|
||||||
|
void setHotspotStyle();
|
||||||
void setSpecialIndicator(Style & styleToSet);
|
void setSpecialIndicator(Style & styleToSet);
|
||||||
//Complex lexers (same lexer, different language)
|
//Complex lexers (same lexer, different language)
|
||||||
void setXmlLexer(LangType type);
|
void setXmlLexer(LangType type);
|
||||||
|
|
|
@ -18,7 +18,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef USER_DEFINE_LANG_REFERENCE_H
|
#ifndef USER_DEFINE_LANG_REFERENCE_H
|
||||||
|
|
||||||
#define USER_DEFINE_LANG_REFERENCE_H
|
#define USER_DEFINE_LANG_REFERENCE_H
|
||||||
|
|
||||||
const int langNameLenMax = 16;
|
const int langNameLenMax = 16;
|
||||||
|
@ -32,5 +31,3 @@ const int nbPrefixListAllowed = 4;
|
||||||
|
|
||||||
|
|
||||||
#endif //USER_DEFINE_LANG_REFERENCE_H
|
#endif //USER_DEFINE_LANG_REFERENCE_H
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ distribution.
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "tinyxml.h"
|
#include "tinyxml.h"
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
#ifdef TIXML_USE_STL
|
#ifdef TIXML_USE_STL
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
@ -713,7 +714,9 @@ bool TiXmlDocument::LoadFile( const char* filename )
|
||||||
// Fixed with the StringToBuffer class.
|
// Fixed with the StringToBuffer class.
|
||||||
value = filename;
|
value = filename;
|
||||||
|
|
||||||
FILE* file = fopen( value.c_str (), "r" );
|
wchar_t filenameW[MAX_PATH];
|
||||||
|
char2wchar(filename, filenameW);
|
||||||
|
FILE* file = _wfopen( filenameW, L"r" );
|
||||||
|
|
||||||
if ( file )
|
if ( file )
|
||||||
{
|
{
|
||||||
|
@ -758,7 +761,9 @@ bool TiXmlDocument::LoadFile( const char* filename )
|
||||||
bool TiXmlDocument::SaveFile( const char * filename ) const
|
bool TiXmlDocument::SaveFile( const char * filename ) const
|
||||||
{
|
{
|
||||||
// The old c stuff lives on...
|
// The old c stuff lives on...
|
||||||
FILE* fp = fopen( filename, "w" );
|
wchar_t filenameW[MAX_PATH];
|
||||||
|
char2wchar(filename, filenameW);
|
||||||
|
FILE* fp = _wfopen( filenameW, L"w" );
|
||||||
if ( fp )
|
if ( fp )
|
||||||
{
|
{
|
||||||
Print( fp, 0 );
|
Print( fp, 0 );
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <vector>
|
||||||
#include "UniConversion.h"
|
#include "UniConversion.h"
|
||||||
|
|
||||||
unsigned int UTF8Length(const wchar_t *uptr, unsigned int tlen) {
|
unsigned int UTF8Length(const wchar_t *uptr, unsigned int tlen) {
|
||||||
|
@ -133,3 +134,46 @@ int utf8_to_ascii(const char* pszUTF8, unsigned int lenUTF8, char* pszASCII)
|
||||||
return nbByte;
|
return nbByte;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void char2wchar(const char* pszCHAR, wchar_t* pszWCHAR, UINT codepage)
|
||||||
|
{
|
||||||
|
int len = MultiByteToWideChar(codepage, 0, pszCHAR, -1, pszWCHAR, 0);
|
||||||
|
if(len > 0)
|
||||||
|
MultiByteToWideChar(codepage, 0, pszCHAR, -1, pszWCHAR, len);
|
||||||
|
else
|
||||||
|
pszWCHAR[0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wchar2char(const wchar_t* pszWCHAR, char* pszCHAR, UINT codepage)
|
||||||
|
{
|
||||||
|
int len = WideCharToMultiByte(codepage, 0, pszWCHAR, -1, pszCHAR, 0, NULL, NULL);
|
||||||
|
if(len > 0)
|
||||||
|
WideCharToMultiByte(codepage, 0, pszWCHAR, -1, pszCHAR, len, NULL, NULL);
|
||||||
|
else
|
||||||
|
pszCHAR[0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::wstring string2wstring(const std::string& rString, UINT codepage)
|
||||||
|
{
|
||||||
|
int len = MultiByteToWideChar(codepage, 0, rString.c_str(), -1, NULL, 0);
|
||||||
|
if(len > 0)
|
||||||
|
{
|
||||||
|
std::vector<wchar_t> vw(len);
|
||||||
|
MultiByteToWideChar(codepage, 0, rString.c_str(), -1, &vw[0], len);
|
||||||
|
return &vw[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return L"";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string wstring2string(const std::wstring& rwString, UINT codepage)
|
||||||
|
{
|
||||||
|
int len = WideCharToMultiByte(codepage, 0, rwString.c_str(), -1, NULL, 0, NULL, NULL);
|
||||||
|
if(len > 0)
|
||||||
|
{
|
||||||
|
std::vector<char> vw(len);
|
||||||
|
WideCharToMultiByte(codepage, 0, rwString.c_str(), -1, &vw[0], len, NULL, NULL);
|
||||||
|
return &vw[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
|
@ -5,9 +5,23 @@
|
||||||
// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
|
// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
|
||||||
// The License.txt file describes the conditions under which this software may be distributed.
|
// The License.txt file describes the conditions under which this software may be distributed.
|
||||||
|
|
||||||
|
#ifndef UNICONVERSION_H
|
||||||
|
#define UNICONVERSION_H
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <TCHAR.H>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
unsigned int UTF8Length(const wchar_t *uptr, unsigned int tlen);
|
unsigned int UTF8Length(const wchar_t *uptr, unsigned int tlen);
|
||||||
void UTF8FromUCS2(const wchar_t *uptr, unsigned int tlen, char *putf, unsigned int len);
|
void UTF8FromUCS2(const wchar_t *uptr, unsigned int tlen, char *putf, unsigned int len);
|
||||||
unsigned int UCS2Length(const char *s, unsigned int len);
|
unsigned int UCS2Length(const char *s, unsigned int len);
|
||||||
unsigned int UCS2FromUTF8(const char *s, unsigned int len, wchar_t *tbuf, unsigned int tlen);
|
unsigned int UCS2FromUTF8(const char *s, unsigned int len, wchar_t *tbuf, unsigned int tlen);
|
||||||
unsigned int ascii_to_utf8(const char* pszASCII, unsigned int lenASCII, char* pszUTF8);
|
unsigned int ascii_to_utf8(const char* pszASCII, unsigned int lenASCII, char* pszUTF8);
|
||||||
int utf8_to_ascii(const char* pszUTF8, unsigned int lenUTF8, char* pszASCII);
|
int utf8_to_ascii(const char* pszUTF8, unsigned int lenUTF8, char* pszASCII);
|
||||||
|
|
||||||
|
void char2wchar(const char* pszCHAR, wchar_t* pszWCHAR, UINT codepage = CP_UTF8);
|
||||||
|
void wchar2char(const wchar_t* pszWCHAR, char* pszCHAR, UINT codepage = CP_UTF8);
|
||||||
|
std::wstring string2wstring(const std::string& rString, UINT codepage = CP_UTF8);
|
||||||
|
std::string wstring2string(const std::wstring& rwString, UINT codepage = CP_UTF8);
|
||||||
|
|
||||||
|
#endif //UNICONVERSION_H
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include "PluginInterface.h"
|
#include "PluginInterface.h"
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
const Utf8_16::utf8 Utf8_16::k_Boms[][3] = {
|
const Utf8_16::utf8 Utf8_16::k_Boms[][3] = {
|
||||||
{0x00, 0x00, 0x00}, // Unknown
|
{0x00, 0x00, 0x00}, // Unknown
|
||||||
|
@ -222,6 +223,15 @@ FILE * Utf8_16_Write::fopen(const char *_name, const char *_type)
|
||||||
return m_pFile;
|
return m_pFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FILE * Utf8_16_Write::fopenW(const wchar_t *_name, const wchar_t *_type)
|
||||||
|
{
|
||||||
|
m_pFile = ::_wfopen(_name, _type);
|
||||||
|
|
||||||
|
m_bFirstWrite = true;
|
||||||
|
|
||||||
|
return m_pFile;
|
||||||
|
}
|
||||||
|
|
||||||
size_t Utf8_16_Write::fwrite(const void* p, size_t _size)
|
size_t Utf8_16_Write::fwrite(const void* p, size_t _size)
|
||||||
{
|
{
|
||||||
// no file open
|
// no file open
|
||||||
|
|
|
@ -18,6 +18,10 @@
|
||||||
// - Removing UCS-Bug in Utf8_Iter
|
// - Removing UCS-Bug in Utf8_Iter
|
||||||
// - Add convert function in Utf8_16_Write
|
// - Add convert function in Utf8_16_Write
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef UTF8_16_H
|
||||||
|
#define UTF8_16_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -135,6 +139,7 @@ public:
|
||||||
void setEncoding(UniMode eType);
|
void setEncoding(UniMode eType);
|
||||||
|
|
||||||
FILE * fopen(const char *_name, const char *_type);
|
FILE * fopen(const char *_name, const char *_type);
|
||||||
|
FILE * fopenW(const wchar_t *_name, const wchar_t *_type);
|
||||||
size_t fwrite(const void* p, size_t _size);
|
size_t fwrite(const void* p, size_t _size);
|
||||||
void fclose();
|
void fclose();
|
||||||
|
|
||||||
|
@ -150,3 +155,5 @@ protected:
|
||||||
size_t m_nBufSize;
|
size_t m_nBufSize;
|
||||||
bool m_bFirstWrite;
|
bool m_bFirstWrite;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif //UTF8_16_H
|
||||||
|
|
|
@ -62,14 +62,14 @@ BOOL CALLBACK ColourPopup::dlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARA
|
||||||
{
|
{
|
||||||
ColourPopup *pColourPopup = (ColourPopup *)(lParam);
|
ColourPopup *pColourPopup = (ColourPopup *)(lParam);
|
||||||
pColourPopup->_hSelf = hwnd;
|
pColourPopup->_hSelf = hwnd;
|
||||||
::SetWindowLongPtr(hwnd, GWL_USERDATA, (long)lParam);
|
::SetWindowLong(hwnd, GWL_USERDATA, (long)lParam);
|
||||||
pColourPopup->run_dlgProc(message, wParam, lParam);
|
pColourPopup->run_dlgProc(message, wParam, lParam);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
default :
|
default :
|
||||||
{
|
{
|
||||||
ColourPopup *pColourPopup = reinterpret_cast<ColourPopup *>(::GetWindowLongPtr(hwnd, GWL_USERDATA));
|
ColourPopup *pColourPopup = reinterpret_cast<ColourPopup *>(::GetWindowLong(hwnd, GWL_USERDATA));
|
||||||
if (!pColourPopup)
|
if (!pColourPopup)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return pColourPopup->run_dlgProc(message, wParam, lParam);
|
return pColourPopup->run_dlgProc(message, wParam, lParam);
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#define DOCKINGCONT
|
#define DOCKINGCONT
|
||||||
|
|
||||||
#include "StaticDialog.h"
|
#include "StaticDialog.h"
|
||||||
#include "Resource.h"
|
#include "resource.h"
|
||||||
#include "Docking.h"
|
#include "Docking.h"
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "common_func.h"
|
#include "common_func.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -52,22 +53,22 @@ void folderBrowser(HWND parent, int outputCtrlID)
|
||||||
{
|
{
|
||||||
// If we were able to get the shell malloc object,
|
// If we were able to get the shell malloc object,
|
||||||
// then proceed by initializing the BROWSEINFO stuct
|
// then proceed by initializing the BROWSEINFO stuct
|
||||||
BROWSEINFO info;
|
BROWSEINFOW info;
|
||||||
memset(&info, 0, sizeof(info));
|
memset(&info, 0, sizeof(info));
|
||||||
info.hwndOwner = parent;
|
info.hwndOwner = parent;
|
||||||
info.pidlRoot = NULL;
|
info.pidlRoot = NULL;
|
||||||
char szDisplayName[MAX_PATH];
|
wchar_t szDisplayName[MAX_PATH];
|
||||||
info.pszDisplayName = szDisplayName;
|
info.pszDisplayName = szDisplayName;
|
||||||
string title = "Select a folder to search from";
|
wstring title = L"Select a folder to search from";
|
||||||
info.lpszTitle = title.c_str();
|
info.lpszTitle = title.c_str();
|
||||||
info.ulFlags = 0;
|
info.ulFlags = 0;
|
||||||
info.lpfn = BrowseCallbackProc;
|
info.lpfn = BrowseCallbackProc;
|
||||||
char directory[MAX_PATH];
|
wchar_t directory[MAX_PATH];
|
||||||
::GetDlgItemText(parent, outputCtrlID, directory, sizeof(directory));
|
::GetDlgItemTextW(parent, outputCtrlID, directory, sizeof(directory));
|
||||||
info.lParam = reinterpret_cast<LPARAM>(directory);
|
info.lParam = reinterpret_cast<LPARAM>(directory);
|
||||||
|
|
||||||
// Execute the browsing dialog.
|
// Execute the browsing dialog.
|
||||||
LPITEMIDLIST pidl = ::SHBrowseForFolder(&info);
|
LPITEMIDLIST pidl = ::SHBrowseForFolderW(&info);
|
||||||
|
|
||||||
// pidl will be null if they cancel the browse dialog.
|
// pidl will be null if they cancel the browse dialog.
|
||||||
// pidl will be not null when they select a folder.
|
// pidl will be not null when they select a folder.
|
||||||
|
@ -75,10 +76,10 @@ void folderBrowser(HWND parent, int outputCtrlID)
|
||||||
{
|
{
|
||||||
// Try to convert the pidl to a display string.
|
// Try to convert the pidl to a display string.
|
||||||
// Return is true if success.
|
// Return is true if success.
|
||||||
char szDir[MAX_PATH];
|
wchar_t szDirW[MAX_PATH];
|
||||||
if (::SHGetPathFromIDList(pidl, szDir))
|
if (::SHGetPathFromIDListW(pidl, szDirW))
|
||||||
// Set edit control to the directory path.
|
// Set edit control to the directory path.
|
||||||
::SetDlgItemText(parent, outputCtrlID, szDir);
|
::SetDlgItemTextW(parent, outputCtrlID, szDirW);
|
||||||
pShellMalloc->Free(pidl);
|
pShellMalloc->Free(pidl);
|
||||||
}
|
}
|
||||||
pShellMalloc->Release();
|
pShellMalloc->Release();
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
//Printed BABYGRID message reference and tutorial available.
|
//Printed BABYGRID message reference and tutorial available.
|
||||||
//email: mudcat@mis.net for more information.
|
//email: mudcat@mis.net for more information.
|
||||||
|
|
||||||
|
#ifndef BABYGRID_H
|
||||||
|
#define BABYGRID_H
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
|
@ -104,6 +105,4 @@ void SetCell(_BGCELL *cell,int row, int col);
|
||||||
//global variables
|
//global variables
|
||||||
|
|
||||||
|
|
||||||
|
#endif //BABYGRID_H
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,8 @@ along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SHORTCUTMAPPER
|
#ifndef SHORTCUTMAPPER_H
|
||||||
#define SHORTCUTMAPPER
|
#define SHORTCUTMAPPER_H
|
||||||
|
|
||||||
#include "BabyGridWrapper.h"
|
#include "BabyGridWrapper.h"
|
||||||
#include "ShortcutMapper_rc.h"
|
#include "ShortcutMapper_rc.h"
|
||||||
|
@ -77,4 +77,4 @@ private:
|
||||||
void fillOutBabyGrid();
|
void fillOutBabyGrid();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //SHORTCUTMAPPER
|
#endif //SHORTCUTMAPPER_H
|
||||||
|
|
|
@ -16,9 +16,13 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
#ifndef SHORTCUTMAPPERRC_H
|
||||||
|
#define SHORTCUTMAPPERRC_H
|
||||||
|
|
||||||
#define IDD_SHORTCUTMAPPER_DLG 2600
|
#define IDD_SHORTCUTMAPPER_DLG 2600
|
||||||
#define IDD_BABYGRID_ID1 (IDD_SHORTCUTMAPPER_DLG + 1)
|
#define IDD_BABYGRID_ID1 (IDD_SHORTCUTMAPPER_DLG + 1)
|
||||||
#define IDM_BABYGRID_MODIFY (IDD_SHORTCUTMAPPER_DLG + 2)
|
#define IDM_BABYGRID_MODIFY (IDD_SHORTCUTMAPPER_DLG + 2)
|
||||||
#define IDM_BABYGRID_DELETE (IDD_SHORTCUTMAPPER_DLG + 3)
|
#define IDM_BABYGRID_DELETE (IDD_SHORTCUTMAPPER_DLG + 3)
|
||||||
#define IDC_BABYGRID_TABBAR (IDD_SHORTCUTMAPPER_DLG + 4)
|
#define IDC_BABYGRID_TABBAR (IDD_SHORTCUTMAPPER_DLG + 4)
|
||||||
|
|
||||||
|
#endif //SHORTCUTMAPPERRC_H
|
||||||
|
|
|
@ -28,22 +28,24 @@ FileDialog::FileDialog(HWND hwnd, HINSTANCE hInst)
|
||||||
for (int i = 0 ; i < nbExtMax ; i++)
|
for (int i = 0 ; i < nbExtMax ; i++)
|
||||||
_extArray[i][0] = '\0';
|
_extArray[i][0] = '\0';
|
||||||
|
|
||||||
memset(_fileExt, 0x00, sizeof(_fileExt));
|
memset(_fileExtW, 0x00, sizeof(_fileExtW));
|
||||||
_fileName[0] = '\0';
|
_fileName[0] = '\0';
|
||||||
|
_fileNameW[0] = '\0';
|
||||||
|
_fileNameW[1] = '\0';
|
||||||
|
|
||||||
_winVersion = (NppParameters::getInstance())->getWinVersion();
|
_winVersion = (NppParameters::getInstance())->getWinVersion();
|
||||||
|
|
||||||
_ofn.lStructSize = sizeof(_ofn);
|
_ofn.lStructSize = sizeof(_ofn);
|
||||||
if (_winVersion < WV_W2K)
|
if (_winVersion < WV_W2K)
|
||||||
_ofn.lStructSize = sizeof(OPENFILENAME);
|
_ofn.lStructSize = sizeof(OPENFILENAMEW);
|
||||||
_ofn.hwndOwner = hwnd;
|
_ofn.hwndOwner = hwnd;
|
||||||
_ofn.hInstance = hInst;
|
_ofn.hInstance = hInst;
|
||||||
_ofn.lpstrFilter = _fileExt;
|
_ofn.lpstrFilter = _fileExtW;
|
||||||
_ofn.lpstrCustomFilter = (LPTSTR) NULL;
|
_ofn.lpstrCustomFilter = (LPWSTR) NULL;
|
||||||
_ofn.nMaxCustFilter = 0L;
|
_ofn.nMaxCustFilter = 0L;
|
||||||
_ofn.nFilterIndex = 1L;
|
_ofn.nFilterIndex = 1L;
|
||||||
_ofn.lpstrFile = _fileName;
|
_ofn.lpstrFile = _fileNameW;
|
||||||
_ofn.nMaxFile = sizeof(_fileName);
|
_ofn.nMaxFile = sizeof(_fileNameW);
|
||||||
_ofn.lpstrFileTitle = NULL;
|
_ofn.lpstrFileTitle = NULL;
|
||||||
_ofn.nMaxFileTitle = 0;
|
_ofn.nMaxFileTitle = 0;
|
||||||
_ofn.lpstrInitialDir = NULL;
|
_ofn.lpstrInitialDir = NULL;
|
||||||
|
@ -101,13 +103,15 @@ void FileDialog::setExtFilter(const char *extText, const char *ext, ...)
|
||||||
extFilter += " (";
|
extFilter += " (";
|
||||||
extFilter += exts + ")";
|
extFilter += exts + ")";
|
||||||
|
|
||||||
char *pFileExt = _fileExt + _nbCharFileExt;
|
wchar_t *pFileExt = _fileExtW + _nbCharFileExt;
|
||||||
memcpy(pFileExt, extFilter.c_str(), extFilter.length() + 1);
|
wstring extFilterW = string2wstring(extFilter);
|
||||||
_nbCharFileExt += extFilter.length() + 1;
|
wmemcpy(pFileExt, extFilterW.c_str(), extFilterW.length() + 1);
|
||||||
|
_nbCharFileExt += extFilterW.length() + 1;
|
||||||
|
|
||||||
pFileExt = _fileExt + _nbCharFileExt;
|
pFileExt = _fileExtW + _nbCharFileExt;
|
||||||
memcpy(pFileExt, exts.c_str(), exts.length() + 1);
|
wstring extsW = string2wstring(exts);
|
||||||
_nbCharFileExt += exts.length() + 1;
|
wmemcpy(pFileExt, extsW.c_str(), extsW.length() + 1);
|
||||||
|
_nbCharFileExt += extsW.length() + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int FileDialog::setExtsFilter(const char *extText, const char *exts)
|
int FileDialog::setExtsFilter(const char *extText, const char *exts)
|
||||||
|
@ -122,63 +126,72 @@ int FileDialog::setExtsFilter(const char *extText, const char *exts)
|
||||||
extFilter += exts;
|
extFilter += exts;
|
||||||
extFilter += ")";
|
extFilter += ")";
|
||||||
|
|
||||||
char *pFileExt = _fileExt + _nbCharFileExt;
|
wchar_t *pFileExt = _fileExtW + _nbCharFileExt;
|
||||||
memcpy(pFileExt, extFilter.c_str(), extFilter.length() + 1);
|
wstring extFilterW = string2wstring(extFilter);
|
||||||
_nbCharFileExt += extFilter.length() + 1;
|
wmemcpy(pFileExt, extFilterW.c_str(), extFilterW.length() + 1);
|
||||||
|
_nbCharFileExt += extFilterW.length() + 1;
|
||||||
|
|
||||||
pFileExt = _fileExt + _nbCharFileExt;
|
pFileExt = _fileExtW + _nbCharFileExt;
|
||||||
memcpy(pFileExt, exts, strlen(exts) + 1);
|
wchar_t extsW[MAX_PATH];
|
||||||
_nbCharFileExt += strlen(exts) + 1;
|
char2wchar(exts, extsW);
|
||||||
|
wmemcpy(pFileExt, extsW, wcslen(extsW) + 1);
|
||||||
|
_nbCharFileExt += wcslen(extsW) + 1;
|
||||||
|
|
||||||
return _nbExt;
|
return _nbExt;
|
||||||
}
|
}
|
||||||
|
|
||||||
char * FileDialog::doOpenSingleFileDlg()
|
char * FileDialog::doOpenSingleFileDlg()
|
||||||
{
|
{
|
||||||
char dir[MAX_PATH];
|
WCHAR dir[MAX_PATH];
|
||||||
::GetCurrentDirectory(sizeof(dir), dir);
|
::GetCurrentDirectoryW(sizeof(dir), dir);
|
||||||
_ofn.lpstrInitialDir = dir;
|
_ofn.lpstrInitialDir = dir;
|
||||||
|
|
||||||
_ofn.Flags |= OFN_FILEMUSTEXIST;
|
_ofn.Flags |= OFN_FILEMUSTEXIST;
|
||||||
|
|
||||||
char *fn = NULL;
|
WCHAR *fnW = NULL;
|
||||||
try {
|
try {
|
||||||
fn = ::GetOpenFileName((OPENFILENAME*)&_ofn)?_fileName:NULL;
|
fnW = ::GetOpenFileNameW((OPENFILENAMEW*)&_ofn)?_fileNameW:NULL;
|
||||||
|
wchar2char(_fileNameW, _fileName);
|
||||||
}
|
}
|
||||||
catch(...) {
|
catch(...) {
|
||||||
::MessageBox(NULL, "GetSaveFileName crashes!!!", "", MB_OK);
|
::MessageBox(NULL, "GetSaveFileName crashes!!!", "", MB_OK);
|
||||||
}
|
}
|
||||||
return (fn);
|
return fnW?(_fileName):NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
stringVector * FileDialog::doOpenMultiFilesDlg()
|
stringVector * FileDialog::doOpenMultiFilesDlg()
|
||||||
{
|
{
|
||||||
char dir[MAX_PATH];
|
WCHAR dir[MAX_PATH];
|
||||||
::GetCurrentDirectory(sizeof(dir), dir);
|
::GetCurrentDirectoryW(sizeof(dir), dir);
|
||||||
_ofn.lpstrInitialDir = dir;
|
_ofn.lpstrInitialDir = dir;
|
||||||
|
|
||||||
_ofn.Flags |= OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT;
|
_ofn.Flags |= OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT;
|
||||||
|
|
||||||
if (::GetOpenFileName((OPENFILENAME*)&_ofn))
|
if (::GetOpenFileNameW((OPENFILENAMEW*)&_ofn))
|
||||||
{
|
{
|
||||||
char fn[MAX_PATH];
|
char fn[MAX_PATH];
|
||||||
char *pFn = _fileName + strlen(_fileName) + 1;
|
WCHAR fnW[MAX_PATH];
|
||||||
if (!(*pFn))
|
WCHAR *pFnW = _fileNameW + wcslen(_fileNameW) + 1;
|
||||||
|
if (!(*pFnW))
|
||||||
|
{
|
||||||
|
wchar2char(_fileNameW, _fileName);
|
||||||
_fileNames.push_back(std::string(_fileName));
|
_fileNames.push_back(std::string(_fileName));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strcpy(fn, _fileName);
|
wcscpy(fnW, _fileNameW);
|
||||||
if (fn[strlen(fn)-1] != '\\')
|
if (fnW[wcslen(fnW)-1] != '\\')
|
||||||
strcat(fn, "\\");
|
wcscat(fnW, L"\\");
|
||||||
}
|
}
|
||||||
int term = int(strlen(fn));
|
int term = int(wcslen(fnW));
|
||||||
|
|
||||||
while (*pFn)
|
while (*pFnW)
|
||||||
{
|
{
|
||||||
fn[term] = '\0';
|
fnW[term] = '\0';
|
||||||
strcat(fn, pFn);
|
wcscat(fnW, pFnW);
|
||||||
|
wchar2char(fnW, fn);
|
||||||
_fileNames.push_back(std::string(fn));
|
_fileNames.push_back(std::string(fn));
|
||||||
pFn += strlen(pFn) + 1;
|
pFnW += wcslen(pFnW) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &_fileNames;
|
return &_fileNames;
|
||||||
|
@ -189,10 +202,10 @@ stringVector * FileDialog::doOpenMultiFilesDlg()
|
||||||
|
|
||||||
char * FileDialog::doSaveDlg()
|
char * FileDialog::doSaveDlg()
|
||||||
{
|
{
|
||||||
char dir[MAX_PATH];
|
WCHAR dirW[MAX_PATH];
|
||||||
::GetCurrentDirectory(sizeof(dir), dir);
|
::GetCurrentDirectoryW(sizeof(dirW), dirW);
|
||||||
|
|
||||||
_ofn.lpstrInitialDir = dir;
|
_ofn.lpstrInitialDir = dirW;
|
||||||
|
|
||||||
_ofn.Flags |= OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_ENABLESIZING;
|
_ofn.Flags |= OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_ENABLESIZING;
|
||||||
|
|
||||||
|
@ -200,13 +213,15 @@ char * FileDialog::doSaveDlg()
|
||||||
_ofn.lpfnHook = OFNHookProc;
|
_ofn.lpfnHook = OFNHookProc;
|
||||||
|
|
||||||
char *fn = NULL;
|
char *fn = NULL;
|
||||||
|
WCHAR *fnW = NULL;
|
||||||
try {
|
try {
|
||||||
fn = ::GetSaveFileName((OPENFILENAME*)&_ofn)?_fileName:NULL;
|
fnW = ::GetSaveFileNameW((OPENFILENAMEW*)&_ofn)?_fileNameW:NULL;
|
||||||
|
wchar2char(_fileNameW, _fileName);
|
||||||
}
|
}
|
||||||
catch(...) {
|
catch(...) {
|
||||||
::MessageBox(NULL, "GetSaveFileName crashes!!!", "", MB_OK);
|
::MessageBox(NULL, "GetSaveFileName crashes!!!", "", MB_OK);
|
||||||
}
|
}
|
||||||
return (fn);
|
return fnW?(_fileName):NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HWND hFileDlg = NULL;
|
static HWND hFileDlg = NULL;
|
||||||
|
@ -301,7 +316,7 @@ UINT_PTR CALLBACK FileDialog::OFNHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
|
||||||
|
|
||||||
default :
|
default :
|
||||||
{
|
{
|
||||||
FileDialog *pFileDialog = reinterpret_cast<FileDialog *>(::GetWindowLongPtr(hWnd, GWL_USERDATA));
|
FileDialog *pFileDialog = reinterpret_cast<FileDialog *>(::GetWindowLong(hWnd, GWL_USERDATA));
|
||||||
if (!pFileDialog)
|
if (!pFileDialog)
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "SysMsg.h"
|
#include "SysMsg.h"
|
||||||
#include "Parameters.h"
|
#include "Parameters.h"
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
const int nbExtMax = 256;
|
const int nbExtMax = 256;
|
||||||
const int extLenMax = 64;
|
const int extLenMax = 64;
|
||||||
|
@ -40,29 +41,28 @@ struct OPENFILENAMENPP {
|
||||||
DWORD lStructSize;
|
DWORD lStructSize;
|
||||||
HWND hwndOwner;
|
HWND hwndOwner;
|
||||||
HINSTANCE hInstance;
|
HINSTANCE hInstance;
|
||||||
LPCTSTR lpstrFilter;
|
LPCWSTR lpstrFilter;
|
||||||
LPTSTR lpstrCustomFilter;
|
LPWSTR lpstrCustomFilter;
|
||||||
DWORD nMaxCustFilter;
|
DWORD nMaxCustFilter;
|
||||||
DWORD nFilterIndex;
|
DWORD nFilterIndex;
|
||||||
LPTSTR lpstrFile;
|
LPWSTR lpstrFile;
|
||||||
DWORD nMaxFile;
|
DWORD nMaxFile;
|
||||||
LPTSTR lpstrFileTitle;
|
LPWSTR lpstrFileTitle;
|
||||||
DWORD nMaxFileTitle;
|
DWORD nMaxFileTitle;
|
||||||
LPCTSTR lpstrInitialDir;
|
LPCWSTR lpstrInitialDir;
|
||||||
LPCTSTR lpstrTitle;
|
LPCWSTR lpstrTitle;
|
||||||
DWORD Flags;
|
DWORD Flags;
|
||||||
WORD nFileOffset;
|
WORD nFileOffset;
|
||||||
WORD nFileExtension;
|
WORD nFileExtension;
|
||||||
LPCTSTR lpstrDefExt;
|
LPCWSTR lpstrDefExt;
|
||||||
LPARAM lCustData;
|
LPARAM lCustData;
|
||||||
LPOFNHOOKPROC lpfnHook;
|
LPOFNHOOKPROC lpfnHook;
|
||||||
LPCTSTR lpTemplateName;
|
LPCWSTR lpTemplateName;
|
||||||
void * pvReserved;
|
void * pvReserved;
|
||||||
DWORD dwReserved;
|
DWORD dwReserved;
|
||||||
DWORD FlagsEx;
|
DWORD FlagsEx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static string changeExt(string fn, string ext)
|
static string changeExt(string fn, string ext)
|
||||||
{
|
{
|
||||||
if (ext == "")
|
if (ext == "")
|
||||||
|
@ -119,7 +119,7 @@ public:
|
||||||
void setExtFilter(const char *, const char *, ...);
|
void setExtFilter(const char *, const char *, ...);
|
||||||
|
|
||||||
int setExtsFilter(const char *extText, const char *exts);
|
int setExtsFilter(const char *extText, const char *exts);
|
||||||
void setDefFileName(const char *fn){strcpy(_fileName, fn);}
|
void setDefFileName(const char *fn){strcpy(_fileName, fn); char2wchar(fn, _fileNameW); }
|
||||||
|
|
||||||
char * doSaveDlg();
|
char * doSaveDlg();
|
||||||
stringVector * doOpenMultiFilesDlg();
|
stringVector * doOpenMultiFilesDlg();
|
||||||
|
@ -133,8 +133,9 @@ protected :
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char _fileName[MAX_PATH*8];
|
char _fileName[MAX_PATH*8];
|
||||||
|
WCHAR _fileNameW[MAX_PATH*8];
|
||||||
|
|
||||||
char _fileExt[MAX_PATH*10];
|
WCHAR _fileExtW[MAX_PATH*10];
|
||||||
int _nbCharFileExt;
|
int _nbCharFileExt;
|
||||||
|
|
||||||
stringVector _fileNames;
|
stringVector _fileNames;
|
||||||
|
|
|
@ -24,11 +24,11 @@
|
||||||
#include "Notepad_plus.h"
|
#include "Notepad_plus.h"
|
||||||
|
|
||||||
|
|
||||||
void Command::extractArgs(char *cmd2Exec, char *args, const char *cmdEntier)
|
void Command::extractArgs(wchar_t *cmd2Exec, wchar_t *args, const wchar_t *cmdEntier)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
bool quoted = false;
|
bool quoted = false;
|
||||||
for ( ; i < int(strlen(cmdEntier)) ; i++)
|
for ( ; i < int(wcslen(cmdEntier)) ; i++)
|
||||||
{
|
{
|
||||||
if ((cmdEntier[i] == ' ') && (!quoted))
|
if ((cmdEntier[i] == ' ') && (!quoted))
|
||||||
break;
|
break;
|
||||||
|
@ -39,18 +39,18 @@ void Command::extractArgs(char *cmd2Exec, char *args, const char *cmdEntier)
|
||||||
}
|
}
|
||||||
cmd2Exec[i] = '\0';
|
cmd2Exec[i] = '\0';
|
||||||
|
|
||||||
if (i < int(strlen(cmdEntier)))
|
if (i < int(wcslen(cmdEntier)))
|
||||||
{
|
{
|
||||||
for ( ; (i < int(strlen(cmdEntier))) && (cmdEntier[i] == ' ') ; i++);
|
for ( ; (i < int(wcslen(cmdEntier))) && (cmdEntier[i] == ' ') ; i++);
|
||||||
if (i < int(strlen(cmdEntier)))
|
if (i < int(wcslen(cmdEntier)))
|
||||||
{
|
{
|
||||||
for (int k = 0 ; i <= int(strlen(cmdEntier)) ; i++, k++)
|
for (int k = 0 ; i <= int(wcslen(cmdEntier)) ; i++, k++)
|
||||||
{
|
{
|
||||||
args[k] = cmdEntier[i];
|
args[k] = cmdEntier[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int l = strlen(args);
|
int l = wcslen(args);
|
||||||
if (args[l-1] == ' ')
|
if (args[l-1] == ' ')
|
||||||
{
|
{
|
||||||
for (l -= 2 ; (l > 0) && (args[l] == ' ') ; l--);
|
for (l -= 2 ; (l > 0) && (args[l] == ' ') ; l--);
|
||||||
|
@ -63,42 +63,42 @@ void Command::extractArgs(char *cmd2Exec, char *args, const char *cmdEntier)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int whichVar(char *str)
|
int whichVar(wchar_t *str)
|
||||||
{
|
{
|
||||||
if (!strcmp(fullCurrentPath, str))
|
if (!wcscmp(fullCurrentPath, str))
|
||||||
return FULL_CURRENT_PATH;
|
return FULL_CURRENT_PATH;
|
||||||
else if (!strcmp(currentDirectory, str))
|
else if (!wcscmp(currentDirectory, str))
|
||||||
return CURRENT_DIRECTORY;
|
return CURRENT_DIRECTORY;
|
||||||
else if (!strcmp(onlyFileName, str))
|
else if (!wcscmp(onlyFileName, str))
|
||||||
return FILE_NAME;
|
return FILE_NAME;
|
||||||
else if (!strcmp(fileNamePart, str))
|
else if (!wcscmp(fileNamePart, str))
|
||||||
return NAME_PART;
|
return NAME_PART;
|
||||||
else if (!strcmp(fileExtPart, str))
|
else if (!wcscmp(fileExtPart, str))
|
||||||
return EXT_PART;
|
return EXT_PART;
|
||||||
else if (!strcmp(currentWord, str))
|
else if (!wcscmp(currentWord, str))
|
||||||
return CURRENT_WORD;
|
return CURRENT_WORD;
|
||||||
else if (!strcmp(nppDir, str))
|
else if (!wcscmp(nppDir, str))
|
||||||
return NPP_DIRECTORY;
|
return NPP_DIRECTORY;
|
||||||
else if (!strcmp(currentLine, str))
|
else if (!wcscmp(currentLine, str))
|
||||||
return CURRENT_LINE;
|
return CURRENT_LINE;
|
||||||
else if (!strcmp(currentColumn, str))
|
else if (!wcscmp(currentColumn, str))
|
||||||
return CURRENT_COLUMN;
|
return CURRENT_COLUMN;
|
||||||
|
|
||||||
return VAR_NOT_RECOGNIZED;
|
return VAR_NOT_RECOGNIZED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Since I'm sure the length will be 256, I won't check the strlen : watch out!
|
// Since I'm sure the length will be 256, I won't check the strlen : watch out!
|
||||||
void expandNppEnvironmentStrs(const char *strSrc, char *stringDest, size_t strDestLen, HWND hWnd)
|
void expandNppEnvironmentStrs(const wchar_t *strSrc, wchar_t *stringDest, size_t strDestLen, HWND hWnd)
|
||||||
{
|
{
|
||||||
size_t j = 0;
|
size_t j = 0;
|
||||||
for (size_t i = 0 ; i < strlen(strSrc) ; i++)
|
for (size_t i = 0 ; i < wcslen(strSrc) ; i++)
|
||||||
{
|
{
|
||||||
int iBegin = -1;
|
int iBegin = -1;
|
||||||
int iEnd = -1;
|
int iEnd = -1;
|
||||||
if ((strSrc[i] == '$') && (strSrc[i+1] == '('))
|
if ((strSrc[i] == '$') && (strSrc[i+1] == '('))
|
||||||
{
|
{
|
||||||
iBegin = i += 2;
|
iBegin = i += 2;
|
||||||
for ( ; i < strlen(strSrc) ; i++)
|
for ( ; i < wcslen(strSrc) ; i++)
|
||||||
{
|
{
|
||||||
if (strSrc[i] == ')')
|
if (strSrc[i] == ')')
|
||||||
{
|
{
|
||||||
|
@ -111,7 +111,7 @@ void expandNppEnvironmentStrs(const char *strSrc, char *stringDest, size_t strDe
|
||||||
{
|
{
|
||||||
if (iEnd != -1)
|
if (iEnd != -1)
|
||||||
{
|
{
|
||||||
char str[256];
|
wchar_t str[256];
|
||||||
int m = 0;
|
int m = 0;
|
||||||
for (int k = iBegin ; k <= iEnd ; k++)
|
for (int k = iBegin ; k <= iEnd ; k++)
|
||||||
str[m++] = strSrc[k];
|
str[m++] = strSrc[k];
|
||||||
|
@ -125,16 +125,16 @@ void expandNppEnvironmentStrs(const char *strSrc, char *stringDest, size_t strDe
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char expandedStr[256];
|
wchar_t expandedStr[256];
|
||||||
if (internalVar == CURRENT_LINE || internalVar == CURRENT_COLUMN)
|
if (internalVar == CURRENT_LINE || internalVar == CURRENT_COLUMN)
|
||||||
{
|
{
|
||||||
int lineNumber = ::SendMessage(hWnd, RUNCOMMAND_USER + internalVar, 0, 0);
|
int lineNumber = ::SendMessage(hWnd, RUNCOMMAND_USER + internalVar, 0, 0);
|
||||||
sprintf(expandedStr, "%d", lineNumber);
|
wsprintfW(expandedStr, L"%d", lineNumber);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
::SendMessage(hWnd, RUNCOMMAND_USER + internalVar, MAX_PATH, (LPARAM)expandedStr);
|
::SendMessage(hWnd, RUNCOMMAND_USER + internalVar, MAX_PATH, (LPARAM)expandedStr);
|
||||||
|
|
||||||
for (size_t p = 0 ; p < strlen(expandedStr) ; p++)
|
for (size_t p = 0 ; p < wcslen(expandedStr) ; p++)
|
||||||
stringDest[j++] = expandedStr[p];
|
stringDest[j++] = expandedStr[p];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -152,20 +152,26 @@ void expandNppEnvironmentStrs(const char *strSrc, char *stringDest, size_t strDe
|
||||||
|
|
||||||
HINSTANCE Command::run(HWND hWnd)
|
HINSTANCE Command::run(HWND hWnd)
|
||||||
{
|
{
|
||||||
char cmdPure[MAX_PATH];
|
wchar_t cmdPure[MAX_PATH];
|
||||||
char cmdIntermediate[MAX_PATH];
|
wchar_t cmdIntermediate[MAX_PATH];
|
||||||
char cmd2Exec[MAX_PATH];
|
wchar_t cmd2Exec[MAX_PATH];
|
||||||
char args[MAX_PATH];
|
wchar_t args[MAX_PATH];
|
||||||
char argsIntermediate[MAX_PATH];
|
wchar_t argsIntermediate[MAX_PATH];
|
||||||
char args2Exec[MAX_PATH];
|
wchar_t args2Exec[MAX_PATH];
|
||||||
|
|
||||||
extractArgs(cmdPure, args, _cmdLine.c_str());
|
wstring cmdLineW = string2wstring(_cmdLine);
|
||||||
::ExpandEnvironmentStrings(cmdPure, cmdIntermediate, sizeof(cmd2Exec));
|
extractArgs(cmdPure, args, cmdLineW.c_str());
|
||||||
::ExpandEnvironmentStrings(args, argsIntermediate, sizeof(args));
|
::ExpandEnvironmentStringsW(cmdPure, cmdIntermediate, sizeof(cmd2Exec));
|
||||||
|
::ExpandEnvironmentStringsW(args, argsIntermediate, sizeof(args));
|
||||||
expandNppEnvironmentStrs(cmdIntermediate, cmd2Exec, sizeof(cmd2Exec), hWnd);
|
expandNppEnvironmentStrs(cmdIntermediate, cmd2Exec, sizeof(cmd2Exec), hWnd);
|
||||||
expandNppEnvironmentStrs(argsIntermediate, args2Exec, sizeof(args2Exec), hWnd);
|
expandNppEnvironmentStrs(argsIntermediate, args2Exec, sizeof(args2Exec), hWnd);
|
||||||
|
|
||||||
return ::ShellExecute(hWnd, "open", cmd2Exec, args2Exec, ".", SW_SHOW);
|
// cmd2Exec needs to be in UTF8 format for searches to work.
|
||||||
|
char temp[MAX_PATH];
|
||||||
|
wchar2char(cmd2Exec, temp);
|
||||||
|
char2wchar(temp, cmd2Exec);
|
||||||
|
|
||||||
|
return ::ShellExecuteW(hWnd, L"open", cmd2Exec, args2Exec, L".", SW_SHOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL CALLBACK RunDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
BOOL CALLBACK RunDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
@ -190,18 +196,21 @@ BOOL CALLBACK RunDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
case IDOK :
|
case IDOK :
|
||||||
{
|
{
|
||||||
char cmd[MAX_PATH];
|
char cmd[MAX_PATH];
|
||||||
::GetDlgItemText(_hSelf, IDC_COMBO_RUN_PATH, cmd, MAX_PATH);
|
wchar_t cmdW[MAX_PATH];
|
||||||
|
::GetDlgItemTextW(_hSelf, IDC_COMBO_RUN_PATH, cmdW, MAX_PATH);
|
||||||
|
wchar2char(cmdW, cmd);
|
||||||
_cmdLine = cmd;
|
_cmdLine = cmd;
|
||||||
|
wstring cmdLineW = string2wstring(_cmdLine);
|
||||||
|
|
||||||
HINSTANCE hInst = run(_hParent);
|
HINSTANCE hInst = run(_hParent);
|
||||||
if (int(hInst) > 32)
|
if (int(hInst) > 32)
|
||||||
{
|
{
|
||||||
addTextToCombo(_cmdLine.c_str());
|
addTextToCombo(cmdLineW.c_str());
|
||||||
display(false);
|
display(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
removeTextFromCombo(_cmdLine.c_str());
|
removeTextFromCombo(cmdLineW.c_str());
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -213,7 +222,9 @@ BOOL CALLBACK RunDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
||||||
int cmdID = ID_USER_CMD + nbCmd;
|
int cmdID = ID_USER_CMD + nbCmd;
|
||||||
char cmd[MAX_PATH];
|
char cmd[MAX_PATH];
|
||||||
::GetDlgItemText(_hSelf, IDC_COMBO_RUN_PATH, cmd, MAX_PATH);
|
wchar_t cmdW[MAX_PATH];
|
||||||
|
::GetDlgItemTextW(_hSelf, IDC_COMBO_RUN_PATH, cmdW, MAX_PATH);
|
||||||
|
wchar2char(cmdW, cmd);
|
||||||
UserCommand uc(Shortcut(), cmd, cmdID);
|
UserCommand uc(Shortcut(), cmd, cmdID);
|
||||||
uc.init(_hInst, _hSelf);
|
uc.init(_hInst, _hSelf);
|
||||||
|
|
||||||
|
@ -238,7 +249,11 @@ BOOL CALLBACK RunDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
fd.setExtFilter("All files : ", ".*", NULL);
|
fd.setExtFilter("All files : ", ".*", NULL);
|
||||||
|
|
||||||
if (const char *fn = fd.doOpenSingleFileDlg())
|
if (const char *fn = fd.doOpenSingleFileDlg())
|
||||||
addTextToCombo(fn);
|
{
|
||||||
|
wchar_t fnW[MAX_PATH];
|
||||||
|
char2wchar(fn, fnW);
|
||||||
|
addTextToCombo(fnW);
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,18 +265,18 @@ BOOL CALLBACK RunDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunDlg::addTextToCombo(const char *txt2Add) const
|
void RunDlg::addTextToCombo(const wchar_t *txt2Add) const
|
||||||
{
|
{
|
||||||
HWND handle = ::GetDlgItem(_hSelf, IDC_COMBO_RUN_PATH);
|
HWND handle = ::GetDlgItem(_hSelf, IDC_COMBO_RUN_PATH);
|
||||||
int i = ::SendMessage(handle, CB_FINDSTRINGEXACT, (WPARAM)-1, (LPARAM)txt2Add);
|
int i = ::SendMessageW(handle, CB_FINDSTRINGEXACT, (WPARAM)-1, (LPARAM)txt2Add);
|
||||||
if (i == CB_ERR)
|
if (i == CB_ERR)
|
||||||
i = ::SendMessage(handle, CB_ADDSTRING, 0, (LPARAM)txt2Add);
|
i = ::SendMessageW(handle, CB_ADDSTRING, 0, (LPARAM)txt2Add);
|
||||||
::SendMessage(handle, CB_SETCURSEL, i, 0);
|
::SendMessage(handle, CB_SETCURSEL, i, 0);
|
||||||
}
|
}
|
||||||
void RunDlg::removeTextFromCombo(const char *txt2Remove) const
|
void RunDlg::removeTextFromCombo(const wchar_t *txt2Remove) const
|
||||||
{
|
{
|
||||||
HWND handle = ::GetDlgItem(_hSelf, IDC_COMBO_RUN_PATH);
|
HWND handle = ::GetDlgItem(_hSelf, IDC_COMBO_RUN_PATH);
|
||||||
int i = ::SendMessage(handle, CB_FINDSTRINGEXACT, (WPARAM)-1, (LPARAM)txt2Remove);
|
int i = ::SendMessageW(handle, CB_FINDSTRINGEXACT, (WPARAM)-1, (LPARAM)txt2Remove);
|
||||||
if (i == CB_ERR)
|
if (i == CB_ERR)
|
||||||
return;
|
return;
|
||||||
::SendMessage(handle, CB_DELETESTRING, i, 0);
|
::SendMessage(handle, CB_DELETESTRING, i, 0);
|
||||||
|
|
|
@ -26,18 +26,18 @@
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
const char fullCurrentPath[] = "FULL_CURRENT_PATH";
|
const wchar_t fullCurrentPath[] = L"FULL_CURRENT_PATH";
|
||||||
const char currentDirectory[] = "CURRENT_DIRECTORY";
|
const wchar_t currentDirectory[] = L"CURRENT_DIRECTORY";
|
||||||
const char onlyFileName[] = "FILE_NAME";
|
const wchar_t onlyFileName[] = L"FILE_NAME";
|
||||||
const char fileNamePart[] = "NAME_PART";
|
const wchar_t fileNamePart[] = L"NAME_PART";
|
||||||
const char fileExtPart[] = "EXT_PART";
|
const wchar_t fileExtPart[] = L"EXT_PART";
|
||||||
const char currentWord[] = "CURRENT_WORD";
|
const wchar_t currentWord[] = L"CURRENT_WORD";
|
||||||
const char nppDir[] = "NPP_DIRECTORY";
|
const wchar_t nppDir[] = L"NPP_DIRECTORY";
|
||||||
const char currentLine[] = "CURRENT_LINE";
|
const wchar_t currentLine[] = L"CURRENT_LINE";
|
||||||
const char currentColumn[] = "CURRENT_COLUMN";
|
const wchar_t currentColumn[] = L"CURRENT_COLUMN";
|
||||||
|
|
||||||
int whichVar(char *str);
|
int whichVar(wchar_t *str);
|
||||||
void expandNppEnvironmentStrs(const char *strSrc, char *stringDest, size_t strDestLen, HWND hWnd);
|
void expandNppEnvironmentStrs(const wchar_t *strSrc, wchar_t *stringDest, size_t strDestLen, HWND hWnd);
|
||||||
|
|
||||||
class Command {
|
class Command {
|
||||||
public :
|
public :
|
||||||
|
@ -49,7 +49,7 @@ public :
|
||||||
protected :
|
protected :
|
||||||
string _cmdLine;
|
string _cmdLine;
|
||||||
private :
|
private :
|
||||||
void extractArgs(char *cmd2Exec, char *args, const char *cmdEntier);
|
void extractArgs(wchar_t *cmd2Exec, wchar_t *args, const wchar_t *cmdEntier);
|
||||||
};
|
};
|
||||||
|
|
||||||
class RunDlg : public Command, public StaticDialog
|
class RunDlg : public Command, public StaticDialog
|
||||||
|
@ -67,8 +67,8 @@ protected :
|
||||||
virtual BOOL CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
virtual BOOL CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
private :
|
private :
|
||||||
void addTextToCombo(const char *txt2Add) const;
|
void addTextToCombo(const wchar_t *txt2Add) const;
|
||||||
void removeTextFromCombo(const char *txt2Remove) const;
|
void removeTextFromCombo(const wchar_t *txt2Remove) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //RUN_DLG_H
|
#endif //RUN_DLG_H
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#ifndef STATUS_BAR_H
|
#ifndef STATUS_BAR_H
|
||||||
#define STATUS_BAR_H
|
#define STATUS_BAR_H
|
||||||
|
|
||||||
#include "Window.h"
|
#include "Window.h"
|
||||||
|
|
||||||
#ifndef _WIN32_IE
|
#ifndef _WIN32_IE
|
||||||
|
|
|
@ -474,13 +474,13 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT *pDrawItemStruct)
|
||||||
}
|
}
|
||||||
bool isSelected = (nTab == ::SendMessage(_hSelf, TCM_GETCURSEL, 0, 0));
|
bool isSelected = (nTab == ::SendMessage(_hSelf, TCM_GETCURSEL, 0, 0));
|
||||||
|
|
||||||
char label[MAX_PATH];
|
wchar_t label[MAX_PATH];
|
||||||
TCITEM tci;
|
TCITEMW tci;
|
||||||
tci.mask = TCIF_TEXT|TCIF_IMAGE;
|
tci.mask = TCIF_TEXT|TCIF_IMAGE;
|
||||||
tci.pszText = label;
|
tci.pszText = label;
|
||||||
tci.cchTextMax = MAX_PATH-1;
|
tci.cchTextMax = MAX_PATH-1;
|
||||||
|
|
||||||
if (!::SendMessage(_hSelf, TCM_GETITEM, nTab, reinterpret_cast<LPARAM>(&tci)))
|
if (!::SendMessage(_hSelf, TCM_GETITEMW, nTab, reinterpret_cast<LPARAM>(&tci)))
|
||||||
{
|
{
|
||||||
::MessageBox(NULL, "! TCM_GETITEM", "", MB_OK);
|
::MessageBox(NULL, "! TCM_GETITEM", "", MB_OK);
|
||||||
//return ::CallWindowProc(_tabBarDefaultProc, hwnd, Message, wParam, lParam);
|
//return ::CallWindowProc(_tabBarDefaultProc, hwnd, Message, wParam, lParam);
|
||||||
|
@ -693,7 +693,7 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT *pDrawItemStruct)
|
||||||
else
|
else
|
||||||
Flags |= DT_BOTTOM;
|
Flags |= DT_BOTTOM;
|
||||||
}
|
}
|
||||||
::DrawText(hDC, label, strlen(label), &rect, Flags);
|
::DrawTextW(hDC, label, wcslen(label), &rect, Flags);
|
||||||
::RestoreDC(hDC, nSavedDC);
|
::RestoreDC(hDC, nSavedDC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -736,37 +736,37 @@ void TabBarPlus::exchangeItemData(POINT point)
|
||||||
::SendMessage(_hSelf, TCM_SETCURSEL, nTab, 0);
|
::SendMessage(_hSelf, TCM_SETCURSEL, nTab, 0);
|
||||||
|
|
||||||
//2. shift their data, and insert the source
|
//2. shift their data, and insert the source
|
||||||
TCITEM itemData_nDraggedTab, itemData_shift;
|
TCITEMW itemData_nDraggedTab, itemData_shift;
|
||||||
itemData_nDraggedTab.mask = itemData_shift.mask = TCIF_IMAGE | TCIF_TEXT | TCIF_PARAM;
|
itemData_nDraggedTab.mask = itemData_shift.mask = TCIF_IMAGE | TCIF_TEXT | TCIF_PARAM;
|
||||||
char str1[256];
|
wchar_t str1[MAX_PATH];
|
||||||
char str2[256];
|
wchar_t str2[MAX_PATH];
|
||||||
|
|
||||||
itemData_nDraggedTab.pszText = str1;
|
itemData_nDraggedTab.pszText = str1;
|
||||||
itemData_nDraggedTab.cchTextMax = (sizeof(str1));
|
itemData_nDraggedTab.cchTextMax = (MAX_PATH-1);
|
||||||
|
|
||||||
itemData_shift.pszText = str2;
|
itemData_shift.pszText = str2;
|
||||||
itemData_shift.cchTextMax = (sizeof(str2));
|
itemData_shift.cchTextMax = (MAX_PATH-1);
|
||||||
|
|
||||||
::SendMessage(_hSelf, TCM_GETITEM, _nTabDragged, reinterpret_cast<LPARAM>(&itemData_nDraggedTab));
|
::SendMessage(_hSelf, TCM_GETITEMW, _nTabDragged, reinterpret_cast<LPARAM>(&itemData_nDraggedTab));
|
||||||
|
|
||||||
if (_nTabDragged > nTab)
|
if (_nTabDragged > nTab)
|
||||||
{
|
{
|
||||||
for (int i = _nTabDragged ; i > nTab ; i--)
|
for (int i = _nTabDragged ; i > nTab ; i--)
|
||||||
{
|
{
|
||||||
::SendMessage(_hSelf, TCM_GETITEM, i-1, reinterpret_cast<LPARAM>(&itemData_shift));
|
::SendMessage(_hSelf, TCM_GETITEMW, i-1, reinterpret_cast<LPARAM>(&itemData_shift));
|
||||||
::SendMessage(_hSelf, TCM_SETITEM, i, reinterpret_cast<LPARAM>(&itemData_shift));
|
::SendMessage(_hSelf, TCM_SETITEMW, i, reinterpret_cast<LPARAM>(&itemData_shift));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = _nTabDragged ; i < nTab ; i++)
|
for (int i = _nTabDragged ; i < nTab ; i++)
|
||||||
{
|
{
|
||||||
::SendMessage(_hSelf, TCM_GETITEM, i+1, reinterpret_cast<LPARAM>(&itemData_shift));
|
::SendMessage(_hSelf, TCM_GETITEMW, i+1, reinterpret_cast<LPARAM>(&itemData_shift));
|
||||||
::SendMessage(_hSelf, TCM_SETITEM, i, reinterpret_cast<LPARAM>(&itemData_shift));
|
::SendMessage(_hSelf, TCM_SETITEMW, i, reinterpret_cast<LPARAM>(&itemData_shift));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
::SendMessage(_hSelf, TCM_SETITEM, nTab, reinterpret_cast<LPARAM>(&itemData_nDraggedTab));
|
::SendMessage(_hSelf, TCM_SETITEMW, nTab, reinterpret_cast<LPARAM>(&itemData_nDraggedTab));
|
||||||
|
|
||||||
//3. update the current index
|
//3. update the current index
|
||||||
_nTabDragged = nTab;
|
_nTabDragged = nTab;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
|
#ifndef SIZABLEDLG_H
|
||||||
|
#define SIZABLEDLG_H
|
||||||
|
|
||||||
#include "StaticDialog.h"
|
#include "StaticDialog.h"
|
||||||
#include "WindowsDlgRc.h"
|
#include "WindowsDlgRc.h"
|
||||||
|
@ -18,3 +19,5 @@ protected:
|
||||||
virtual void onGetMinMaxInfo(MINMAXINFO* lpMMI);
|
virtual void onGetMinMaxInfo(MINMAXINFO* lpMMI);
|
||||||
virtual LRESULT onWinMgr(WPARAM wp, LPARAM lp);
|
virtual LRESULT onWinMgr(WPARAM wp, LPARAM lp);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif //SIZABLEDLG_H
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
#ifndef _countof
|
#ifndef _countof
|
||||||
#define _countof(x) (sizeof(x)/sizeof((x)[0]))
|
#define _countof(x) (sizeof(x)/sizeof((x)[0]))
|
||||||
|
@ -14,7 +15,7 @@
|
||||||
#define LVS_EX_DOUBLEBUFFER 0x00010000
|
#define LVS_EX_DOUBLEBUFFER 0x00010000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char *readonlyString = " [Read Only]";
|
static const wchar_t *readonlyString = L" [Read Only]";
|
||||||
const UINT WDN_NOTIFY = RegisterWindowMessage("WDN_NOTIFY");
|
const UINT WDN_NOTIFY = RegisterWindowMessage("WDN_NOTIFY");
|
||||||
|
|
||||||
inline static DWORD GetStyle(HWND hWnd) {
|
inline static DWORD GetStyle(HWND hWnd) {
|
||||||
|
@ -230,9 +231,9 @@ BOOL CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam
|
||||||
if (wParam == IDC_WINDOWS_LIST)
|
if (wParam == IDC_WINDOWS_LIST)
|
||||||
{
|
{
|
||||||
NMHDR* pNMHDR = (NMHDR*)lParam;
|
NMHDR* pNMHDR = (NMHDR*)lParam;
|
||||||
if (pNMHDR->code == LVN_GETDISPINFO)
|
if (pNMHDR->code == LVN_GETDISPINFOW)
|
||||||
{
|
{
|
||||||
NMLVDISPINFO *pLvdi = (NMLVDISPINFO *)pNMHDR;
|
NMLVDISPINFOW *pLvdi = (NMLVDISPINFOW *)pNMHDR;
|
||||||
//if(pLvdi->item.mask & LVIF_IMAGE)
|
//if(pLvdi->item.mask & LVIF_IMAGE)
|
||||||
// ;
|
// ;
|
||||||
if(pLvdi->item.mask & LVIF_TEXT)
|
if(pLvdi->item.mask & LVIF_TEXT)
|
||||||
|
@ -249,10 +250,10 @@ BOOL CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam
|
||||||
if (pLvdi->item.iSubItem == 0) // file name
|
if (pLvdi->item.iSubItem == 0) // file name
|
||||||
{
|
{
|
||||||
int len = pLvdi->item.cchTextMax;
|
int len = pLvdi->item.cchTextMax;
|
||||||
const char *fileName = buf->getFileName();
|
const wchar_t *fileName = buf->getFileNameW();
|
||||||
strncpy(pLvdi->item.pszText, fileName, len-1);
|
wcsncpy(pLvdi->item.pszText, fileName, len-1);
|
||||||
pLvdi->item.pszText[len-1] = 0;
|
pLvdi->item.pszText[len-1] = 0;
|
||||||
len = strlen(pLvdi->item.pszText);
|
len = wcslen(pLvdi->item.pszText);
|
||||||
if (buf->isDirty())
|
if (buf->isDirty())
|
||||||
{
|
{
|
||||||
if (len < pLvdi->item.cchTextMax)
|
if (len < pLvdi->item.cchTextMax)
|
||||||
|
@ -263,23 +264,23 @@ BOOL CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam
|
||||||
}
|
}
|
||||||
else if (buf->isReadOnly())
|
else if (buf->isReadOnly())
|
||||||
{
|
{
|
||||||
len += strlen(readonlyString);
|
len += wcslen(readonlyString);
|
||||||
if (len <= pLvdi->item.cchTextMax)
|
if (len <= pLvdi->item.cchTextMax)
|
||||||
strcat(pLvdi->item.pszText, readonlyString);
|
wcscat(pLvdi->item.pszText, readonlyString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (pLvdi->item.iSubItem == 1) // directory
|
else if (pLvdi->item.iSubItem == 1) // directory
|
||||||
{
|
{
|
||||||
const char *fullName = buf->getFilePath();
|
const wchar_t *fullName = buf->getFilePathW();
|
||||||
const char *fileName = buf->getFileName();
|
const wchar_t *fileName = buf->getFileNameW();
|
||||||
int len = strlen(fullName)-strlen(fileName);
|
int len = wcslen(fullName)-wcslen(fileName);
|
||||||
if (!len) {
|
if (!len) {
|
||||||
len = 1;
|
len = 1;
|
||||||
fullName = "";
|
fullName = L"";
|
||||||
}
|
}
|
||||||
if (pLvdi->item.cchTextMax < len)
|
if (pLvdi->item.cchTextMax < len)
|
||||||
len = pLvdi->item.cchTextMax;
|
len = pLvdi->item.cchTextMax;
|
||||||
strncpy(pLvdi->item.pszText, fullName, len-1);
|
wcsncpy(pLvdi->item.pszText, fullName, len-1);
|
||||||
pLvdi->item.pszText[len-1] = 0;
|
pLvdi->item.pszText[len-1] = 0;
|
||||||
}
|
}
|
||||||
else if (pLvdi->item.iSubItem == 2) // Type
|
else if (pLvdi->item.iSubItem == 2) // Type
|
||||||
|
@ -289,7 +290,9 @@ BOOL CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam
|
||||||
Lang *lang = pNppParameters->getLangFromID(buf->getLangType());
|
Lang *lang = pNppParameters->getLangFromID(buf->getLangType());
|
||||||
if (NULL != lang)
|
if (NULL != lang)
|
||||||
{
|
{
|
||||||
strncpy(pLvdi->item.pszText, lang->getLangName(), len-1);
|
wchar_t langName[LANG_NAME_LEN];
|
||||||
|
char2wchar(lang->getLangName(), langName);
|
||||||
|
wcsncpy(pLvdi->item.pszText, langName, len-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -381,7 +384,7 @@ void WindowsDlg::updateButtonState()
|
||||||
int WindowsDlg::doDialog(TiXmlNode *dlgNode)
|
int WindowsDlg::doDialog(TiXmlNode *dlgNode)
|
||||||
{
|
{
|
||||||
_dlgNode = dlgNode;
|
_dlgNode = dlgNode;
|
||||||
return ::DialogBoxParam(_hInst, MAKEINTRESOURCE(IDD_WINDOWS), _hParent, (DLGPROC)dlgProc, (LPARAM)this);
|
return ::DialogBoxParamW(_hInst, MAKEINTRESOURCEW(IDD_WINDOWS), _hParent, (DLGPROC)dlgProc, (LPARAM)this);
|
||||||
};
|
};
|
||||||
|
|
||||||
bool WindowsDlg::changeDlgLang()
|
bool WindowsDlg::changeDlgLang()
|
||||||
|
@ -435,22 +438,22 @@ BOOL WindowsDlg::onInitDialog()
|
||||||
GetClientRect(_hList, &rc);
|
GetClientRect(_hList, &rc);
|
||||||
LONG width = rc.right - rc.left;
|
LONG width = rc.right - rc.left;
|
||||||
|
|
||||||
LVCOLUMN lvColumn;
|
LVCOLUMNW lvColumn;
|
||||||
memset(&lvColumn, 0, sizeof(lvColumn));
|
memset(&lvColumn, 0, sizeof(lvColumn));
|
||||||
lvColumn.mask = LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM|LVCF_FMT;
|
lvColumn.mask = LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM|LVCF_FMT;
|
||||||
lvColumn.fmt = LVCFMT_LEFT;
|
lvColumn.fmt = LVCFMT_LEFT;
|
||||||
lvColumn.pszText = "Name";
|
lvColumn.pszText = L"Name";
|
||||||
lvColumn.cx = width/4;
|
lvColumn.cx = width/4;
|
||||||
SendMessage(_hList, LVM_INSERTCOLUMN, 0, LPARAM(&lvColumn));
|
SendMessage(_hList, LVM_INSERTCOLUMNW, 0, LPARAM(&lvColumn));
|
||||||
|
|
||||||
lvColumn.pszText = "Path";
|
lvColumn.pszText = L"Path";
|
||||||
lvColumn.cx = 300;
|
lvColumn.cx = 300;
|
||||||
SendMessage(_hList, LVM_INSERTCOLUMN, 1, LPARAM(&lvColumn));
|
SendMessage(_hList, LVM_INSERTCOLUMNW, 1, LPARAM(&lvColumn));
|
||||||
|
|
||||||
lvColumn.fmt = LVCFMT_CENTER;
|
lvColumn.fmt = LVCFMT_CENTER;
|
||||||
lvColumn.pszText = "Type";
|
lvColumn.pszText = L"Type";
|
||||||
lvColumn.cx = 40;
|
lvColumn.cx = 40;
|
||||||
SendMessage(_hList, LVM_INSERTCOLUMN, 2, LPARAM(&lvColumn));
|
SendMessage(_hList, LVM_INSERTCOLUMNW, 2, LPARAM(&lvColumn));
|
||||||
|
|
||||||
fitColumnsToSize();
|
fitColumnsToSize();
|
||||||
|
|
||||||
|
@ -749,15 +752,15 @@ void WindowsMenu::initPopupMenu(HMENU hMenu, DocTabView *pTab)
|
||||||
int id, pos;
|
int id, pos;
|
||||||
for (id=IDM_WINDOW_MRU_FIRST, pos=0; id<IDM_WINDOW_MRU_FIRST + nDoc; ++id, ++pos)
|
for (id=IDM_WINDOW_MRU_FIRST, pos=0; id<IDM_WINDOW_MRU_FIRST + nDoc; ++id, ++pos)
|
||||||
{
|
{
|
||||||
char buffer[MAX_PATH];
|
wchar_t buffer[MAX_PATH];
|
||||||
BufferID bufID = pTab->getBufferByIndex(pos);
|
BufferID bufID = pTab->getBufferByIndex(pos);
|
||||||
Buffer * buf = MainFileManager->getBufferByID(bufID);
|
Buffer * buf = MainFileManager->getBufferByID(bufID);
|
||||||
|
|
||||||
MENUITEMINFO mii;
|
MENUITEMINFOW mii;
|
||||||
memset(&mii, 0, sizeof(mii));
|
memset(&mii, 0, sizeof(mii));
|
||||||
mii.cbSize = sizeof(mii);
|
mii.cbSize = sizeof(mii);
|
||||||
mii.fMask = MIIM_STRING|MIIM_STATE|MIIM_ID;
|
mii.fMask = MIIM_STRING|MIIM_STATE|MIIM_ID;
|
||||||
mii.dwTypeData = buildFileName(buffer, 60, pos, buf->getFileName());
|
mii.dwTypeData = buildFileName(buffer, 60, pos, buf->getFileNameW());
|
||||||
mii.fState &= ~(MF_GRAYED|MF_DISABLED|MF_CHECKED);
|
mii.fState &= ~(MF_GRAYED|MF_DISABLED|MF_CHECKED);
|
||||||
if (pos == curDoc)
|
if (pos == curDoc)
|
||||||
mii.fState |= MF_CHECKED;
|
mii.fState |= MF_CHECKED;
|
||||||
|
@ -765,9 +768,9 @@ void WindowsMenu::initPopupMenu(HMENU hMenu, DocTabView *pTab)
|
||||||
|
|
||||||
UINT state = GetMenuState(hMenu, id, MF_BYCOMMAND);
|
UINT state = GetMenuState(hMenu, id, MF_BYCOMMAND);
|
||||||
if (state == -1)
|
if (state == -1)
|
||||||
InsertMenuItem(hMenu, IDM_WINDOW_WINDOWS, FALSE, &mii);
|
InsertMenuItemW(hMenu, IDM_WINDOW_WINDOWS, FALSE, &mii);
|
||||||
else
|
else
|
||||||
SetMenuItemInfo(hMenu, id, FALSE, &mii);
|
SetMenuItemInfoW(hMenu, id, FALSE, &mii);
|
||||||
}
|
}
|
||||||
for ( ; id<=IDM_WINDOW_MRU_LIMIT; ++id)
|
for ( ; id<=IDM_WINDOW_MRU_LIMIT; ++id)
|
||||||
{
|
{
|
||||||
|
@ -784,10 +787,10 @@ void WindowsMenu::uninitPopupMenu(HMENU hMenu, ScintillaEditView *pView)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
static char* convertFileName(char *buffer, const char *filename)
|
static wchar_t* convertFileName(wchar_t *buffer, const wchar_t *filename)
|
||||||
{
|
{
|
||||||
char *b = buffer;
|
wchar_t *b = buffer;
|
||||||
const char *p = filename;
|
const wchar_t *p = filename;
|
||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
if (*p == '&') *b++ = '&';
|
if (*p == '&') *b++ = '&';
|
||||||
|
@ -797,15 +800,15 @@ static char* convertFileName(char *buffer, const char *filename)
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *WindowsMenu::buildFileName(char *buffer, int len, int pos, const char *filename)
|
wchar_t *WindowsMenu::buildFileName(wchar_t *buffer, int len, int pos, const wchar_t *filename)
|
||||||
{
|
{
|
||||||
char cwd[MAX_PATH];
|
wchar_t cwd[MAX_PATH];
|
||||||
buffer[0] = 0;
|
buffer[0] = 0;
|
||||||
GetCurrentDirectory(_countof(cwd), cwd);
|
GetCurrentDirectoryW(_countof(cwd), cwd);
|
||||||
strcat(cwd, "\\");
|
wcscat(cwd, L"\\");
|
||||||
|
|
||||||
char *itr = buffer;
|
wchar_t *itr = buffer;
|
||||||
char *end = buffer + len - 1;
|
wchar_t *end = buffer + len - 1;
|
||||||
if (pos < 9)
|
if (pos < 9)
|
||||||
{
|
{
|
||||||
*itr++ = '&';
|
*itr++ = '&';
|
||||||
|
@ -819,33 +822,33 @@ char *WindowsMenu::buildFileName(char *buffer, int len, int pos, const char *fil
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
itr = itoa(pos+1, itr, 10) + strlen(itr);
|
itr = _itow(pos+1, itr, 10) + wcslen(itr);
|
||||||
}
|
}
|
||||||
*itr++ = ':';
|
*itr++ = ':';
|
||||||
*itr++ = ' ';
|
*itr++ = ' ';
|
||||||
if (0 == strnicmp(filename, cwd, strlen(cwd)))
|
if (0 == wcsnicmp(filename, cwd, wcslen(cwd)))
|
||||||
{
|
{
|
||||||
char cnvName[MAX_PATH];
|
wchar_t cnvName[MAX_PATH];
|
||||||
const char *s1 = PathFindFileName(filename);
|
const wchar_t *s1 = PathFindFileNameW(filename);
|
||||||
int len = strlen(s1);
|
int len = wcslen(s1);
|
||||||
if (len < (end-itr))
|
if (len < (end-itr))
|
||||||
{
|
{
|
||||||
strcpy(cnvName, s1);
|
wcscpy(cnvName, s1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int n = (len-3-(itr-buffer))/2;
|
int n = (len-3-(itr-buffer))/2;
|
||||||
strncpy(cnvName, s1, n);
|
wcsncpy(cnvName, s1, n);
|
||||||
strcpy(cnvName+n, "...");
|
wcscpy(cnvName+n, L"...");
|
||||||
strcat(cnvName, s1 + strlen(s1) - n);
|
wcscat(cnvName, s1 + wcslen(s1) - n);
|
||||||
}
|
}
|
||||||
convertFileName(itr, cnvName);
|
convertFileName(itr, cnvName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char cnvName[MAX_PATH*2];
|
wchar_t cnvName[MAX_PATH*2];
|
||||||
const char *s1 = convertFileName(cnvName, filename);
|
const wchar_t *s1 = convertFileName(cnvName, filename);
|
||||||
PathCompactPathEx(itr, filename, len - (itr-buffer), 0);
|
PathCompactPathExW(itr, filename, len - (itr-buffer), 0);
|
||||||
}
|
}
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
|
@ -106,7 +106,7 @@ public:
|
||||||
void initPopupMenu(HMENU hMenu, DocTabView *pTab);
|
void initPopupMenu(HMENU hMenu, DocTabView *pTab);
|
||||||
//void uninitPopupMenu(HMENU hMenu, ScintillaEditView *pView);
|
//void uninitPopupMenu(HMENU hMenu, ScintillaEditView *pView);
|
||||||
private:
|
private:
|
||||||
char *buildFileName(char *buffer, int len, int pos, const char *filename);
|
wchar_t *buildFileName(wchar_t *buffer, int len, int pos, const wchar_t *filename);
|
||||||
HMENU _hMenu;
|
HMENU _hMenu;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,23 @@
|
||||||
|
//this file is part of notepad++
|
||||||
|
//Copyright (C)2003 Don HO <donho@altern.org>
|
||||||
|
//
|
||||||
|
//This program is free software; you can redistribute it and/or
|
||||||
|
//modify it under the terms of the GNU General Public License
|
||||||
|
//as published by the Free Software Foundation; either
|
||||||
|
//version 2 of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
//This program is distributed in the hope that it will be useful,
|
||||||
|
//but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
//GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
//You should have received a copy of the GNU General Public License
|
||||||
|
//along with this program; if not, write to the Free Software
|
||||||
|
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
#ifndef WINDOWSDLG_RC_H
|
||||||
|
#define WINDOWSDLG_RC_H
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define _WIN32_IE 0x0600
|
#define _WIN32_IE 0x0600
|
||||||
|
|
||||||
|
@ -17,3 +37,5 @@
|
||||||
#define IDM_WINDOW_WINDOWS (IDR_WINDOWS_MENU + 1)
|
#define IDM_WINDOW_WINDOWS (IDR_WINDOWS_MENU + 1)
|
||||||
#define IDM_WINDOW_MRU_FIRST (IDR_WINDOWS_MENU + 20)
|
#define IDM_WINDOW_MRU_FIRST (IDR_WINDOWS_MENU + 20)
|
||||||
#define IDM_WINDOW_MRU_LIMIT (IDR_WINDOWS_MENU + 29)
|
#define IDM_WINDOW_MRU_LIMIT (IDR_WINDOWS_MENU + 29)
|
||||||
|
|
||||||
|
#endif //WINDOWSDLG_RC_H
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "lastRecentFileList.h"
|
#include "lastRecentFileList.h"
|
||||||
#include "menuCmdID.h"
|
#include "menuCmdID.h"
|
||||||
|
#include "UniConversion.h"
|
||||||
|
|
||||||
|
|
||||||
void LastRecentFileList::initMenu(HMENU hMenu, int idBase, int posBase) {
|
void LastRecentFileList::initMenu(HMENU hMenu, int idBase, int posBase) {
|
||||||
|
@ -65,7 +66,8 @@ void LastRecentFileList::updateMenu() {
|
||||||
menuString += indexBuffer;
|
menuString += indexBuffer;
|
||||||
menuString += " ";
|
menuString += " ";
|
||||||
menuString += _lrfl.at(j)._name;
|
menuString += _lrfl.at(j)._name;
|
||||||
::InsertMenu(_hMenu, _posBase + j, MF_BYPOSITION, _lrfl.at(j)._id, menuString.c_str());
|
std::wstring menuStringW = string2wstring(menuString);
|
||||||
|
::InsertMenuW(_hMenu, _posBase + j, MF_BYPOSITION, _lrfl.at(j)._id, menuStringW.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,19 +22,19 @@
|
||||||
#include <exception> //default C++ exception
|
#include <exception> //default C++ exception
|
||||||
#include "Win32Exception.h" //Win32 exception
|
#include "Win32Exception.h" //Win32 exception
|
||||||
|
|
||||||
typedef std::vector<const char*> ParamVector;
|
typedef std::vector<const wchar_t*> ParamVector;
|
||||||
|
|
||||||
bool checkSingleFile(const char * commandLine) {
|
bool checkSingleFile(const wchar_t * commandLine) {
|
||||||
char fullpath[MAX_PATH];
|
wchar_t fullpath[MAX_PATH];
|
||||||
::GetFullPathName(commandLine, MAX_PATH, fullpath, NULL);
|
::GetFullPathNameW(commandLine, MAX_PATH, fullpath, NULL);
|
||||||
if (::PathFileExists(fullpath)) {
|
if (::PathFileExistsW(fullpath)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void parseCommandLine(char * commandLine, ParamVector & paramVector) {
|
void parseCommandLine(wchar_t * commandLine, ParamVector & paramVector) {
|
||||||
bool isFile = checkSingleFile(commandLine); //if the commandline specifies only a file, open it as such
|
bool isFile = checkSingleFile(commandLine); //if the commandline specifies only a file, open it as such
|
||||||
if (isFile) {
|
if (isFile) {
|
||||||
paramVector.push_back(commandLine);
|
paramVector.push_back(commandLine);
|
||||||
|
@ -43,7 +43,7 @@ void parseCommandLine(char * commandLine, ParamVector & paramVector) {
|
||||||
bool isInFile = false;
|
bool isInFile = false;
|
||||||
bool isInWhiteSpace = true;
|
bool isInWhiteSpace = true;
|
||||||
paramVector.clear();
|
paramVector.clear();
|
||||||
size_t commandLength = strlen(commandLine);
|
size_t commandLength = wcslen(commandLine);
|
||||||
for(size_t i = 0; i < commandLength; i++) {
|
for(size_t i = 0; i < commandLength; i++) {
|
||||||
switch(commandLine[i]) {
|
switch(commandLine[i]) {
|
||||||
case '\"': { //quoted filename, ignore any following whitespace
|
case '\"': { //quoted filename, ignore any following whitespace
|
||||||
|
@ -72,12 +72,12 @@ void parseCommandLine(char * commandLine, ParamVector & paramVector) {
|
||||||
//the commandline string is now a list of zero terminated strings concatenated, and the vector contains all the substrings
|
//the commandline string is now a list of zero terminated strings concatenated, and the vector contains all the substrings
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isInList(const char *token2Find, ParamVector & params) {
|
bool isInList(const wchar_t *token2Find, ParamVector & params) {
|
||||||
int nrItems = params.size();
|
int nrItems = params.size();
|
||||||
|
|
||||||
for (int i = 0; i < nrItems; i++)
|
for (int i = 0; i < nrItems; i++)
|
||||||
{
|
{
|
||||||
if (!strcmp(token2Find, params.at(i))) {
|
if (!wcscmp(token2Find, params.at(i))) {
|
||||||
params.erase(params.begin() + i);
|
params.erase(params.begin() + i);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -85,14 +85,14 @@ bool isInList(const char *token2Find, ParamVector & params) {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool getParamVal(char c, ParamVector & params, string & value) {
|
bool getParamVal(wchar_t c, ParamVector & params, wstring & value) {
|
||||||
value = "";
|
value = L"";
|
||||||
int nrItems = params.size();
|
int nrItems = params.size();
|
||||||
|
|
||||||
for (int i = 0; i < nrItems; i++)
|
for (int i = 0; i < nrItems; i++)
|
||||||
{
|
{
|
||||||
const char * token = params.at(i);
|
const wchar_t * token = params.at(i);
|
||||||
if (token[0] == '-' && strlen(token) >= 2 && token[1] == c) { //dash, and enough chars
|
if (token[0] == '-' && wcslen(token) >= 2 && token[1] == c) { //dash, and enough chars
|
||||||
value = (token+2);
|
value = (token+2);
|
||||||
params.erase(params.begin() + i);
|
params.erase(params.begin() + i);
|
||||||
return true;
|
return true;
|
||||||
|
@ -102,28 +102,30 @@ bool getParamVal(char c, ParamVector & params, string & value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
LangType getLangTypeFromParam(ParamVector & params) {
|
LangType getLangTypeFromParam(ParamVector & params) {
|
||||||
string langStr;
|
wstring langStr;
|
||||||
if (!getParamVal('l', params, langStr))
|
if (!getParamVal('l', params, langStr))
|
||||||
return L_EXTERNAL;
|
return L_EXTERNAL;
|
||||||
return NppParameters::getLangIDFromStr(langStr.c_str());
|
char lang[MAX_PATH];
|
||||||
|
wchar2char(langStr.c_str(), lang);
|
||||||
|
return NppParameters::getLangIDFromStr(lang);
|
||||||
};
|
};
|
||||||
|
|
||||||
int getLn2GoFromParam(ParamVector & params) {
|
int getLn2GoFromParam(ParamVector & params) {
|
||||||
string lineNumStr;
|
wstring lineNumStr;
|
||||||
if (!getParamVal('n', params, lineNumStr))
|
if (!getParamVal('n', params, lineNumStr))
|
||||||
return -1;
|
return -1;
|
||||||
return atoi(lineNumStr.c_str());
|
return _wtoi(lineNumStr.c_str());
|
||||||
};
|
};
|
||||||
|
|
||||||
const char FLAG_MULTI_INSTANCE[] = "-multiInst";
|
const wchar_t FLAG_MULTI_INSTANCE[] = L"-multiInst";
|
||||||
const char FLAG_NO_PLUGIN[] = "-noPlugin";
|
const wchar_t FLAG_NO_PLUGIN[] = L"-noPlugin";
|
||||||
const char FLAG_READONLY[] = "-ro";
|
const wchar_t FLAG_READONLY[] = L"-ro";
|
||||||
const char FLAG_NOSESSION[] = "-nosession";
|
const wchar_t FLAG_NOSESSION[] = L"-nosession";
|
||||||
const char FLAG_NOTABBAR[] = "-notabbar";
|
const wchar_t FLAG_NOTABBAR[] = L"-notabbar";
|
||||||
|
|
||||||
void doException(Notepad_plus & notepad_plus_plus);
|
void doException(Notepad_plus & notepad_plus_plus);
|
||||||
|
|
||||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpszCmdLine, int nCmdShow)
|
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpszCmdLine, int nCmdShow)
|
||||||
{
|
{
|
||||||
bool TheFirstOne = true;
|
bool TheFirstOne = true;
|
||||||
::SetLastError(NO_ERROR);
|
::SetLastError(NO_ERROR);
|
||||||
|
@ -152,24 +154,24 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpszCmdLine, int nCmdSh
|
||||||
cmdLineParams._isNoSession = true;
|
cmdLineParams._isNoSession = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
string quotFileName = "";
|
wstring quotFileName = L"";
|
||||||
// tell the running instance the FULL path to the new files to load
|
// tell the running instance the FULL path to the new files to load
|
||||||
size_t nrFilesToOpen = params.size();
|
size_t nrFilesToOpen = params.size();
|
||||||
const char * currentFile;
|
const wchar_t * currentFile;
|
||||||
char fullFileName[MAX_PATH];
|
wchar_t fullFileName[MAX_PATH];
|
||||||
//TODO: try merging the flenames and see if it exists, user may have typed a single spaced filename without quotes
|
//TODO: try merging the flenames and see if it exists, user may have typed a single spaced filename without quotes
|
||||||
for(size_t i = 0; i < nrFilesToOpen; i++) {
|
for(size_t i = 0; i < nrFilesToOpen; i++) {
|
||||||
currentFile = params.at(i);
|
currentFile = params.at(i);
|
||||||
//check if relative or full path. Relative paths dont have a colon for driveletter
|
//check if relative or full path. Relative paths dont have a colon for driveletter
|
||||||
BOOL isRelative = ::PathIsRelative(currentFile);
|
BOOL isRelative = ::PathIsRelativeW(currentFile);
|
||||||
quotFileName += "\"";
|
quotFileName += L"\"";
|
||||||
if (isRelative) {
|
if (isRelative) {
|
||||||
::GetFullPathName(currentFile, MAX_PATH, fullFileName, NULL);
|
::GetFullPathNameW(currentFile, MAX_PATH, fullFileName, NULL);
|
||||||
quotFileName += fullFileName;
|
quotFileName += fullFileName;
|
||||||
} else {
|
} else {
|
||||||
quotFileName += currentFile;
|
quotFileName += currentFile;
|
||||||
}
|
}
|
||||||
quotFileName += "\" ";
|
quotFileName += L"\" ";
|
||||||
}
|
}
|
||||||
if ((!isMultiInst) && (!TheFirstOne))
|
if ((!isMultiInst) && (!TheFirstOne))
|
||||||
{
|
{
|
||||||
|
@ -206,10 +208,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpszCmdLine, int nCmdSh
|
||||||
COPYDATASTRUCT fileNamesData;
|
COPYDATASTRUCT fileNamesData;
|
||||||
fileNamesData.dwData = COPYDATA_FILENAMES;
|
fileNamesData.dwData = COPYDATA_FILENAMES;
|
||||||
fileNamesData.lpData = (void *)quotFileName.c_str();
|
fileNamesData.lpData = (void *)quotFileName.c_str();
|
||||||
fileNamesData.cbData = long(quotFileName.length() + 1);
|
fileNamesData.cbData = long((quotFileName.length() + 1) * sizeof(wchar_t));
|
||||||
|
|
||||||
::SendMessage(hNotepad_plus, WM_COPYDATA, (WPARAM)hInstance, (LPARAM)¶mData);
|
::SendMessageW(hNotepad_plus, WM_COPYDATA, (WPARAM)hInstance, (LPARAM)¶mData);
|
||||||
::SendMessage(hNotepad_plus, WM_COPYDATA, (WPARAM)hInstance, (LPARAM)&fileNamesData);
|
::SendMessageW(hNotepad_plus, WM_COPYDATA, (WPARAM)hInstance, (LPARAM)&fileNamesData);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,9 @@
|
||||||
//along with this program; if not, write to the Free Software
|
//along with this program; if not, write to the Free Software
|
||||||
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
#ifndef XPMICONS_H
|
||||||
|
#define XPMICONS_H
|
||||||
|
|
||||||
static char * acTop_xpm[] = {
|
static char * acTop_xpm[] = {
|
||||||
"12 12 56 1",
|
"12 12 56 1",
|
||||||
" c #FFFFFF",
|
" c #FFFFFF",
|
||||||
|
@ -238,3 +241,5 @@ static char * bookmark_xpm[] = {
|
||||||
" r*@s(tut(s@*r ",
|
" r*@s(tut(s@*r ",
|
||||||
" v*w{x&x{w*v ",
|
" v*w{x&x{w*v ",
|
||||||
" l*yyy*l "};
|
" l*yyy*l "};
|
||||||
|
|
||||||
|
#endif //XPMICONS_H
|
||||||
|
|
|
@ -6,6 +6,6 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
PreprocessorDefinitions="__STDC_WANT_SECURE_LIB__=0;_CRT_NONSTDC_NO_DEPRECATE"
|
PreprocessorDefinitions="__STDC_WANT_SECURE_LIB__=0;_CRT_NONSTDC_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS=1"
|
||||||
/>
|
/>
|
||||||
</VisualStudioPropertySheet>
|
</VisualStudioPropertySheet>
|
||||||
|
|
|
@ -157,7 +157,8 @@
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="comctl32.lib shlwapi.lib shell32.lib Oleacc.lib"
|
AdditionalOptions="/nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib"
|
||||||
|
AdditionalDependencies="UnicoWS.lib comctl32.lib shlwapi.lib shell32.lib Oleacc.lib"
|
||||||
ShowProgress="2"
|
ShowProgress="2"
|
||||||
OutputFile="$(OutDir)/notepad++.exe"
|
OutputFile="$(OutDir)/notepad++.exe"
|
||||||
Version="1.0"
|
Version="1.0"
|
||||||
|
@ -409,6 +410,10 @@
|
||||||
RelativePath="..\src\WinControls\AboutDlg\URLCtrl.cpp"
|
RelativePath="..\src\WinControls\AboutDlg\URLCtrl.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\ScitillaComponent\UrlHighlighter.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\src\ScitillaComponent\UserDefineDialog.cpp"
|
RelativePath="..\src\ScitillaComponent\UserDefineDialog.cpp"
|
||||||
>
|
>
|
||||||
|
@ -614,10 +619,6 @@
|
||||||
RelativePath="..\src\resource.h"
|
RelativePath="..\src\resource.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\src\WinControls\Preference\resource.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\src\WinControls\StaticDialog\RunDlg\RunDlg.h"
|
RelativePath="..\src\WinControls\StaticDialog\RunDlg\RunDlg.h"
|
||||||
>
|
>
|
||||||
|
@ -718,6 +719,10 @@
|
||||||
RelativePath="..\src\WinControls\AboutDlg\URLCtrl.h"
|
RelativePath="..\src\WinControls\AboutDlg\URLCtrl.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\ScitillaComponent\UrlHighlighter.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\src\ScitillaComponent\UserDefineDialog.h"
|
RelativePath="..\src\ScitillaComponent\UserDefineDialog.h"
|
||||||
>
|
>
|
||||||
|
|
Loading…
Reference in New Issue