mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-11 21:03:05 +08:00
+ refactoring: Encoding handling
+ more operations for selctions undo/redo
This commit is contained in:
parent
67806856c8
commit
fcd9630519
151
src/Edit.c
151
src/Edit.c
@ -55,20 +55,17 @@ static int yFindReplaceDlgSave;
|
||||
extern int xFindReplaceDlg;
|
||||
extern int yFindReplaceDlg;
|
||||
|
||||
extern int iDefaultEncoding;
|
||||
extern int iDefaultEOLMode;
|
||||
extern int iLineEndings[3];
|
||||
extern BOOL bFixLineEndings;
|
||||
extern BOOL bAutoStripBlanks;
|
||||
|
||||
|
||||
// Default Codepage and Character Set
|
||||
extern int iDefaultEncoding;
|
||||
extern int iDefaultCharSet;
|
||||
extern BOOL bSkipUnicodeDetection;
|
||||
extern BOOL bLoadASCIIasUTF8;
|
||||
extern BOOL bLoadNFOasOEM;
|
||||
extern int iSrcEncoding;
|
||||
extern int iWeakSrcEncoding;
|
||||
|
||||
extern BOOL bAccelWordNavigation;
|
||||
|
||||
@ -529,6 +526,8 @@ char* EditGetClipboardText(HWND hwnd) {
|
||||
else {
|
||||
SendMessage(hwndEdit,SCI_SETSEL,iPos,iAnchor);
|
||||
}
|
||||
EditFixPositions(hwndEdit);
|
||||
|
||||
if (Encoding_Current(CPI_GET) != CPI_UTF8) {
|
||||
return(NULL);
|
||||
}
|
||||
@ -717,14 +716,60 @@ int Encoding_Current(int iEncoding)
|
||||
static int CurrentEncoding = CPI_NONE;
|
||||
|
||||
if (iEncoding >= 0) {
|
||||
if (Encoding_IsValid(iEncoding)) {
|
||||
if (Encoding_IsValid(iEncoding))
|
||||
CurrentEncoding = iEncoding;
|
||||
}
|
||||
else
|
||||
CurrentEncoding = CPI_UTF8;
|
||||
}
|
||||
return CurrentEncoding;
|
||||
}
|
||||
|
||||
|
||||
int Encoding_Source(int iSrcEncoding)
|
||||
{
|
||||
static int SourceEncoding = CPI_NONE;
|
||||
|
||||
if (iSrcEncoding >= 0) {
|
||||
if (Encoding_IsValid(iSrcEncoding))
|
||||
SourceEncoding = iSrcEncoding;
|
||||
else
|
||||
SourceEncoding = CPI_UTF8;
|
||||
}
|
||||
else if (iSrcEncoding == CPI_NONE) {
|
||||
SourceEncoding = CPI_NONE;
|
||||
}
|
||||
return SourceEncoding;
|
||||
}
|
||||
|
||||
|
||||
int Encoding_SrcWeak(int iSrcWeakEnc)
|
||||
{
|
||||
static int SourceWeakEncoding = CPI_NONE;
|
||||
|
||||
if (iSrcWeakEnc >= 0) {
|
||||
if (Encoding_IsValid(iSrcWeakEnc))
|
||||
SourceWeakEncoding = iSrcWeakEnc;
|
||||
else
|
||||
SourceWeakEncoding = CPI_UTF8;
|
||||
}
|
||||
else if (iSrcWeakEnc == CPI_NONE) {
|
||||
SourceWeakEncoding = CPI_NONE;
|
||||
}
|
||||
return SourceWeakEncoding;
|
||||
}
|
||||
|
||||
|
||||
BOOL Encoding_HasChanged(int iOriginalEncoding)
|
||||
{
|
||||
static int OriginalEncoding = CPI_NONE;
|
||||
|
||||
if (iOriginalEncoding >= CPI_NONE) {
|
||||
OriginalEncoding = iOriginalEncoding;
|
||||
}
|
||||
return (BOOL)(OriginalEncoding != Encoding_Current(CPI_GET));
|
||||
}
|
||||
|
||||
|
||||
void Encoding_InitDefaults() {
|
||||
mEncoding[CPI_ANSI_DEFAULT].uCodePage = GetACP();
|
||||
StringCchPrintf(wchANSI,COUNTOF(wchANSI),L" (%u)",mEncoding[CPI_ANSI_DEFAULT].uCodePage);
|
||||
@ -1091,8 +1136,28 @@ int Encoding_SciMappedCodePage(int iEncoding)
|
||||
|
||||
void Encoding_SciSetCodePage(HWND hwnd, int iEncoding)
|
||||
{
|
||||
int charset = SC_CHARSET_ANSI;
|
||||
int cp = Encoding_SciMappedCodePage(iEncoding);
|
||||
|
||||
switch (cp) {
|
||||
case 932:
|
||||
charset = SC_CHARSET_SHIFTJIS;
|
||||
break;
|
||||
case 936:
|
||||
charset = SC_CHARSET_GB2312;
|
||||
break;
|
||||
case 949:
|
||||
charset = SC_CHARSET_HANGUL;
|
||||
break;
|
||||
case 950:
|
||||
charset = SC_CHARSET_CHINESEBIG5;
|
||||
break;
|
||||
default:
|
||||
charset = iDefaultCharSet;
|
||||
break;
|
||||
}
|
||||
SendMessage(hwnd,SCI_SETCODEPAGE,(WPARAM)cp,0);
|
||||
SendMessage(hwnd,SCI_STYLESETCHARACTERSET,(WPARAM)STYLE_DEFAULT,(LPARAM)charset);
|
||||
}
|
||||
|
||||
|
||||
@ -1378,8 +1443,8 @@ BOOL EditLoadFile(
|
||||
dwLastIOError = GetLastError();
|
||||
|
||||
if (hFile == INVALID_HANDLE_VALUE) {
|
||||
iSrcEncoding = CPI_NONE;
|
||||
iWeakSrcEncoding = CPI_NONE;
|
||||
Encoding_Source(CPI_NONE);
|
||||
Encoding_SrcWeak(CPI_NONE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -1393,8 +1458,8 @@ BOOL EditLoadFile(
|
||||
if (InfoBox(MBYESNO,L"MsgFileSizeWarning",IDS_WARNLOADBIGFILE) != IDYES) {
|
||||
CloseHandle(hFile);
|
||||
*pbFileTooBig = TRUE;
|
||||
iSrcEncoding = CPI_NONE;
|
||||
iWeakSrcEncoding = CPI_NONE;
|
||||
Encoding_Source(CPI_NONE);
|
||||
Encoding_SrcWeak(CPI_NONE);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@ -1406,8 +1471,8 @@ BOOL EditLoadFile(
|
||||
|
||||
if (!bReadSuccess) {
|
||||
GlobalFree(lpData);
|
||||
iSrcEncoding = CPI_NONE;
|
||||
iWeakSrcEncoding = CPI_NONE;
|
||||
Encoding_Source(CPI_NONE);
|
||||
Encoding_SrcWeak(CPI_NONE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -1419,22 +1484,23 @@ BOOL EditLoadFile(
|
||||
}
|
||||
|
||||
int _iPrefEncoding = (bPreferOEM) ? g_DOSEncoding : iDefaultEncoding;
|
||||
if (Encoding_IsValid(iWeakSrcEncoding))
|
||||
_iPrefEncoding = iWeakSrcEncoding;
|
||||
if (Encoding_IsValid(Encoding_SrcWeak(CPI_GET)))
|
||||
_iPrefEncoding = Encoding_SrcWeak(CPI_GET);
|
||||
|
||||
BOOL bBOM = FALSE;
|
||||
const int iSrcEnc = Encoding_Source(CPI_GET);
|
||||
|
||||
if (cbData == 0) {
|
||||
FileVars_Init(NULL,0,&fvCurFile);
|
||||
*iEOLMode = iLineEndings[iDefaultEOLMode];
|
||||
if (iSrcEncoding == CPI_NONE) {
|
||||
if (iSrcEnc == CPI_NONE) {
|
||||
if (bLoadASCIIasUTF8 && !bPreferOEM)
|
||||
*iEncoding = CPI_UTF8;
|
||||
else
|
||||
*iEncoding = _iPrefEncoding;
|
||||
}
|
||||
else
|
||||
*iEncoding = iSrcEncoding;
|
||||
*iEncoding = iSrcEnc;
|
||||
|
||||
Encoding_SciSetCodePage(hwnd,*iEncoding);
|
||||
EditSetNewText(hwnd,"",0);
|
||||
@ -1442,20 +1508,21 @@ BOOL EditLoadFile(
|
||||
GlobalFree(lpData);
|
||||
}
|
||||
|
||||
else if (!bSkipEncodingDetection && (iSrcEncoding == CPI_NONE || iSrcEncoding == CPI_UNICODE || iSrcEncoding == CPI_UNICODEBE) &&
|
||||
(iSrcEncoding == CPI_UNICODE || iSrcEncoding == CPI_UNICODEBE || IsUnicode(lpData,cbData,&bBOM,&bReverse)) &&
|
||||
(iSrcEncoding == CPI_UNICODE || iSrcEncoding == CPI_UNICODEBE || !IsUTF8Signature(lpData))) // check for UTF-8 signature
|
||||
else if (!bSkipEncodingDetection &&
|
||||
(iSrcEnc == CPI_NONE || iSrcEnc == CPI_UNICODE || iSrcEnc == CPI_UNICODEBE) &&
|
||||
(iSrcEnc == CPI_UNICODE || iSrcEnc == CPI_UNICODEBE || IsUnicode(lpData,cbData,&bBOM,&bReverse)) &&
|
||||
(iSrcEnc == CPI_UNICODE || iSrcEnc == CPI_UNICODEBE || !IsUTF8Signature(lpData))) // check for UTF-8 signature
|
||||
{
|
||||
char* lpDataUTF8;
|
||||
|
||||
if (iSrcEncoding == CPI_UNICODE) {
|
||||
if (iSrcEnc == CPI_UNICODE) {
|
||||
bBOM = (*((UNALIGNED PWCHAR)lpData) == 0xFEFF);
|
||||
bReverse = FALSE;
|
||||
}
|
||||
else if (iSrcEncoding == CPI_UNICODEBE)
|
||||
else if (iSrcEnc == CPI_UNICODEBE)
|
||||
bBOM = (*((UNALIGNED PWCHAR)lpData) == 0xFFFE);
|
||||
|
||||
if (iSrcEncoding == CPI_UNICODEBE || bReverse) {
|
||||
if (iSrcEnc == CPI_UNICODEBE || bReverse) {
|
||||
_swab(lpData,lpData,cbData);
|
||||
if (bBOM)
|
||||
*iEncoding = CPI_UNICODEBEBOM;
|
||||
@ -1468,15 +1535,16 @@ BOOL EditLoadFile(
|
||||
else
|
||||
*iEncoding = CPI_UNICODE;
|
||||
}
|
||||
Encoding_SciSetCodePage(hwnd,*iEncoding);
|
||||
|
||||
lpDataUTF8 = GlobalAlloc(GPTR,(cbData * 3) + 2);
|
||||
cbData = WideCharToMultiByte(CP_UTF8,0,(bBOM) ? (LPWSTR)lpData + 1 : (LPWSTR)lpData,
|
||||
cbData = WideCharToMultiByte(Encoding_SciGetCodePage(hwnd),0,(bBOM) ? (LPWSTR)lpData + 1 : (LPWSTR)lpData,
|
||||
(bBOM) ? (cbData)/sizeof(WCHAR) : cbData/sizeof(WCHAR) + 1,lpDataUTF8,(int)GlobalSize(lpDataUTF8),NULL,NULL);
|
||||
|
||||
if (cbData == 0) {
|
||||
*pbUnicodeErr = TRUE;
|
||||
cbData = WideCharToMultiByte(CP_ACP,0,(bBOM) ? (LPWSTR)lpData + 1 : (LPWSTR)lpData,
|
||||
(-1),lpDataUTF8,(int)GlobalSize(lpDataUTF8),NULL,NULL);
|
||||
*pbUnicodeErr = TRUE;
|
||||
}
|
||||
|
||||
GlobalFree(lpData);
|
||||
@ -1490,10 +1558,10 @@ BOOL EditLoadFile(
|
||||
|
||||
else {
|
||||
FileVars_Init(lpData,cbData,&fvCurFile);
|
||||
if (!bSkipEncodingDetection && (iSrcEncoding == CPI_NONE || iSrcEncoding == CPI_UTF8 || iSrcEncoding == CPI_UTF8SIGN) &&
|
||||
if (!bSkipEncodingDetection && (iSrcEnc == CPI_NONE || iSrcEnc == CPI_UTF8 || iSrcEnc == CPI_UTF8SIGN) &&
|
||||
((IsUTF8Signature(lpData) ||
|
||||
FileVars_IsUTF8(&fvCurFile) ||
|
||||
(iSrcEncoding == CPI_UTF8 || iSrcEncoding == CPI_UTF8SIGN) ||
|
||||
(iSrcEnc == CPI_UTF8 || iSrcEnc == CPI_UTF8SIGN) ||
|
||||
(!bPreferOEM && bLoadASCIIasUTF8) ||
|
||||
(IsUTF8(lpData,cbData) &&
|
||||
(((UTF8_mbslen_bytes(UTF8StringStart(lpData)) - 1 !=
|
||||
@ -1501,7 +1569,7 @@ BOOL EditLoadFile(
|
||||
(!bPreferOEM && (
|
||||
mEncoding[_iPrefEncoding].uFlags & NCP_UTF8
|
||||
)) ))))) && !(FileVars_IsNonUTF8(&fvCurFile) &&
|
||||
(iSrcEncoding != CPI_UTF8 && iSrcEncoding != CPI_UTF8SIGN)))
|
||||
(iSrcEnc != CPI_UTF8 && iSrcEnc != CPI_UTF8SIGN)))
|
||||
{
|
||||
Encoding_SciSetCodePage(hwnd,CPI_UTF8);
|
||||
EditSetNewText(hwnd,"",0);
|
||||
@ -1524,17 +1592,17 @@ BOOL EditLoadFile(
|
||||
LPWSTR lpDataWide;
|
||||
int cbDataWide;
|
||||
|
||||
if (iSrcEncoding != CPI_NONE)
|
||||
*iEncoding = iSrcEncoding;
|
||||
if (iSrcEnc != CPI_NONE)
|
||||
*iEncoding = iSrcEnc;
|
||||
else {
|
||||
*iEncoding = FileVars_GetEncoding(&fvCurFile);
|
||||
if (*iEncoding == CPI_NONE) {
|
||||
if (fvCurFile.mask & FV_ENCODING)
|
||||
*iEncoding = CPI_ANSI_DEFAULT;
|
||||
else {
|
||||
if (iWeakSrcEncoding == CPI_NONE)
|
||||
if (Encoding_SrcWeak(CPI_GET) == CPI_NONE)
|
||||
*iEncoding = _iPrefEncoding;
|
||||
else if (mEncoding[iWeakSrcEncoding].uFlags & NCP_INTERNAL)
|
||||
else if (mEncoding[Encoding_SrcWeak(CPI_GET)].uFlags & NCP_INTERNAL)
|
||||
*iEncoding = iDefaultEncoding;
|
||||
else
|
||||
*iEncoding = _iPrefEncoding;
|
||||
@ -1553,10 +1621,10 @@ BOOL EditLoadFile(
|
||||
GlobalFree(lpData);
|
||||
lpData = GlobalAlloc(GPTR,cbDataWide * 3 + 16);
|
||||
|
||||
cbData = WideCharToMultiByte(CP_UTF8,0,lpDataWide,cbDataWide,lpData,(int)GlobalSize(lpData),NULL,NULL);
|
||||
GlobalFree(lpDataWide);
|
||||
|
||||
Encoding_SciSetCodePage(hwnd,*iEncoding);
|
||||
cbData = WideCharToMultiByte(Encoding_SciGetCodePage(hwnd),0,lpDataWide,cbDataWide,lpData,(int)GlobalSize(lpData),NULL,NULL);
|
||||
|
||||
GlobalFree(lpDataWide);
|
||||
EditSetNewText(hwnd,"",0);
|
||||
EditSetNewText(hwnd,lpData,cbData);
|
||||
*iEOLMode = EditDetectEOLMode(hwnd,lpData,cbData);
|
||||
@ -1564,7 +1632,7 @@ BOOL EditLoadFile(
|
||||
GlobalFree(lpData);
|
||||
}
|
||||
else {
|
||||
*iEncoding = Encoding_IsValid(iSrcEncoding) ? iSrcEncoding : iDefaultEncoding;
|
||||
*iEncoding = Encoding_IsValid(iSrcEnc) ? iSrcEnc : iDefaultEncoding;
|
||||
Encoding_SciSetCodePage(hwnd,*iEncoding);
|
||||
EditSetNewText(hwnd,"",0);
|
||||
EditSetNewText(hwnd,lpData,cbData);
|
||||
@ -1574,8 +1642,8 @@ BOOL EditLoadFile(
|
||||
}
|
||||
}
|
||||
|
||||
iSrcEncoding = CPI_NONE;
|
||||
iWeakSrcEncoding = CPI_NONE;
|
||||
Encoding_Source(CPI_NONE);
|
||||
Encoding_SrcWeak(CPI_NONE);
|
||||
return TRUE;
|
||||
|
||||
}
|
||||
@ -1694,7 +1762,7 @@ BOOL EditSaveFile(
|
||||
CopyMemory((char*)lpDataWide, bom, 2);
|
||||
bomoffset = 1;
|
||||
}
|
||||
cbDataWide = bomoffset + MultiByteToWideChar(CP_UTF8, 0, lpData, cbData, &lpDataWide[bomoffset], (int)GlobalSize(lpDataWide) / sizeof(WCHAR) - bomoffset);
|
||||
cbDataWide = bomoffset + MultiByteToWideChar(Encoding_SciGetCodePage(hwnd), 0, lpData, cbData, &lpDataWide[bomoffset], (int)GlobalSize(lpDataWide) / sizeof(WCHAR) - bomoffset);
|
||||
if (mEncoding[iEncoding].uFlags & NCP_UNICODE_REVERSE) {
|
||||
_swab((char*)lpDataWide, (char*)lpDataWide, cbDataWide * sizeof(WCHAR));
|
||||
}
|
||||
@ -1729,7 +1797,7 @@ BOOL EditSaveFile(
|
||||
UINT uCodePage = mEncoding[iEncoding].uCodePage;
|
||||
|
||||
LPWSTR lpDataWide = GlobalAlloc(GPTR,cbData * 2 + 16);
|
||||
int cbDataWide = MultiByteToWideChar(CP_UTF8,0,lpData,cbData,lpDataWide,(int)GlobalSize(lpDataWide)/sizeof(WCHAR));
|
||||
int cbDataWide = MultiByteToWideChar(Encoding_SciGetCodePage(hwnd),0,lpData,cbData,lpDataWide,(int)GlobalSize(lpDataWide)/sizeof(WCHAR));
|
||||
|
||||
// Special cases: 42, 50220, 50221, 50222, 50225, 50227, 50229, 54936, 57002-11, 65000, 65001
|
||||
if (uCodePage == CP_UTF7 || uCodePage == 54936) {
|
||||
@ -4836,8 +4904,8 @@ void EditFixPositions(HWND hwnd)
|
||||
int iAnchorPos = (int)SendMessage(hwnd,SCI_GETANCHOR,0,0);
|
||||
|
||||
if (iCurrentPos > 0 && iCurrentPos < iMaxPos) {
|
||||
int iNewPos = (int)SendMessage(hwnd,SCI_POSITIONAFTER,(WPARAM)
|
||||
(int)SendMessage(hwnd,SCI_POSITIONBEFORE,(WPARAM)iCurrentPos,0),0);
|
||||
int iNewPos = (int)SendMessage(hwnd,SCI_POSITIONAFTER,
|
||||
(WPARAM)(int)SendMessage(hwnd,SCI_POSITIONBEFORE,(WPARAM)iCurrentPos,0),0);
|
||||
if (iNewPos != iCurrentPos) {
|
||||
SendMessage(hwnd,SCI_SETCURRENTPOS,(WPARAM)iNewPos,0);
|
||||
iCurrentPos = iNewPos;
|
||||
@ -5005,6 +5073,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
|
||||
if (lstrcmpA( lpszSelection , "" ) == 0 && bFirstTime )
|
||||
{
|
||||
char *pClip = EditGetClipboardText(hwndEdit);
|
||||
|
||||
int len = lstrlenA(pClip);
|
||||
if( len > 0 && len < FNDRPL_BUFFER)
|
||||
{
|
||||
|
||||
@ -168,7 +168,11 @@ typedef struct _np2encoding {
|
||||
WCHAR wchLabel[32];
|
||||
} NP2ENCODING;
|
||||
|
||||
int Encoding_Current(int); // getter/setter
|
||||
int Encoding_Current(int); // getter/setter
|
||||
int Encoding_Source(int); // getter/setter
|
||||
int Encoding_SrcWeak(int); // getter/setter
|
||||
BOOL Encoding_HasChanged(int); // query/setter
|
||||
|
||||
void Encoding_InitDefaults();
|
||||
int Encoding_MapIniSetting(BOOL,int);
|
||||
void Encoding_GetLabel(int);
|
||||
|
||||
271
src/Notepad3.c
271
src/Notepad3.c
@ -236,11 +236,7 @@ FILEVARS fvCurFile;
|
||||
BOOL bModified;
|
||||
BOOL bReadOnly = FALSE;
|
||||
|
||||
int iOriginalEncoding;
|
||||
int iDefaultEncoding;
|
||||
int iSrcEncoding = CPI_NONE;
|
||||
int iWeakSrcEncoding = CPI_NONE;
|
||||
|
||||
int iDefaultCharSet;
|
||||
|
||||
int iEOLMode;
|
||||
@ -888,7 +884,7 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
|
||||
|
||||
// Source Encoding
|
||||
if (lpEncodingArg)
|
||||
iSrcEncoding = Encoding_MatchW(lpEncodingArg);
|
||||
Encoding_Source(Encoding_MatchW(lpEncodingArg));
|
||||
|
||||
// Pathname parameter
|
||||
if (lpFileArg /*&& !flagNewFromClipboard*/)
|
||||
@ -927,15 +923,15 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
|
||||
}
|
||||
|
||||
else {
|
||||
if (iSrcEncoding != CPI_NONE) {
|
||||
Encoding_Current(iSrcEncoding);
|
||||
iOriginalEncoding = iSrcEncoding;
|
||||
if (Encoding_Source(CPI_GET) != CPI_NONE) {
|
||||
Encoding_Current(Encoding_Source(CPI_GET));
|
||||
Encoding_HasChanged(Encoding_Source(CPI_GET));
|
||||
Encoding_SciSetCodePage(hwndEdit,Encoding_Current(CPI_GET));
|
||||
}
|
||||
}
|
||||
|
||||
// reset
|
||||
iSrcEncoding = CPI_NONE;
|
||||
Encoding_Source(CPI_NONE);
|
||||
flagQuietCreate = 0;
|
||||
fKeepTitleExcerpt = 0;
|
||||
|
||||
@ -1014,7 +1010,7 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
|
||||
hwndNextCBChain = SetClipboardViewer(hwndMain);
|
||||
uidsAppTitle = IDS_APPTITLE_PASTEBOARD;
|
||||
SetWindowTitle(hwndMain,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
bLastCopyFromMe = FALSE;
|
||||
|
||||
@ -1275,7 +1271,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
|
||||
if (params->flagFileSpecified) {
|
||||
|
||||
BOOL bOpened = FALSE;
|
||||
iSrcEncoding = params->iSrcEncoding;
|
||||
Encoding_Source(params->iSrcEncoding);
|
||||
|
||||
if (PathIsDirectory(¶ms->wchData)) {
|
||||
WCHAR tchFile[MAX_PATH] = { L'\0' };
|
||||
@ -1332,12 +1328,12 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
|
||||
if (params->flagTitleExcerpt) {
|
||||
StringCchCopyN(szTitleExcerpt,COUNTOF(szTitleExcerpt),StrEnd(¶ms->wchData) + 1,COUNTOF(szTitleExcerpt));
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
}
|
||||
}
|
||||
// reset
|
||||
iSrcEncoding = CPI_NONE;
|
||||
Encoding_Source(CPI_NONE);
|
||||
}
|
||||
|
||||
if (params->flagJumpTo) {
|
||||
@ -1454,12 +1450,12 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
|
||||
|
||||
|
||||
case WM_CHANGENOTIFY:
|
||||
if (iFileWatchingMode == 1 || bModified || Encoding_Current(CPI_GET) != iOriginalEncoding)
|
||||
if (iFileWatchingMode == 1 || bModified || Encoding_HasChanged(CPI_GET))
|
||||
SetForegroundWindow(hwnd);
|
||||
|
||||
if (PathFileExists(szCurFile)) {
|
||||
|
||||
if ((iFileWatchingMode == 2 && !bModified && Encoding_Current(CPI_GET) == iOriginalEncoding) ||
|
||||
if ((iFileWatchingMode == 2 && !bModified && !Encoding_HasChanged(CPI_GET)) ||
|
||||
MsgBox(MBYESNO,IDS_FILECHANGENOTIFY) == IDYES) {
|
||||
|
||||
int iCurPos = (int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
@ -1469,7 +1465,8 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
|
||||
int iXOffset = (int)SendMessage(hwndEdit,SCI_GETXOFFSET,0,0);
|
||||
BOOL bIsTail = (iCurPos == iAnchorPos) && (iCurPos == SendMessage(hwndEdit,SCI_GETLENGTH,0,0));
|
||||
|
||||
iWeakSrcEncoding = Encoding_Current(CPI_GET);
|
||||
Encoding_SrcWeak(Encoding_Current(CPI_GET));
|
||||
|
||||
if (FileLoad(TRUE,FALSE,TRUE,FALSE,szCurFile)) {
|
||||
|
||||
if (bIsTail && iFileWatchingMode == 2) {
|
||||
@ -2409,12 +2406,13 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
int iDocTopLine = (int)SendMessage(hwndEdit,SCI_DOCLINEFROMVISIBLE,(WPARAM)iVisTopLine,0);
|
||||
int iXOffset = (int)SendMessage(hwndEdit,SCI_GETXOFFSET,0,0);
|
||||
|
||||
if ((bModified || Encoding_Current(CPI_GET) != iOriginalEncoding) && MsgBox(MBOKCANCEL,IDS_ASK_REVERT) != IDOK)
|
||||
if ((bModified || Encoding_HasChanged(CPI_GET)) && MsgBox(MBOKCANCEL,IDS_ASK_REVERT) != IDOK)
|
||||
return(0);
|
||||
|
||||
StringCchCopy(tchCurFile2,COUNTOF(tchCurFile2),szCurFile);
|
||||
|
||||
iWeakSrcEncoding = Encoding_Current(CPI_GET);
|
||||
Encoding_SrcWeak(Encoding_Current(CPI_GET));
|
||||
|
||||
if (FileLoad(TRUE,FALSE,TRUE,FALSE,tchCurFile2))
|
||||
{
|
||||
if (SendMessage(hwndEdit,SCI_GETLENGTH,0,0) >= 4) {
|
||||
@ -2473,7 +2471,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
bReadOnly = (dwFileAttributes & FILE_ATTRIBUTE_READONLY);
|
||||
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
}
|
||||
break;
|
||||
@ -2816,11 +2814,11 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
|
||||
if (SendMessage(hwndEdit,SCI_GETLENGTH,0,0) == 0) {
|
||||
Encoding_Current(iNewEncoding);
|
||||
iOriginalEncoding = iNewEncoding;
|
||||
Encoding_HasChanged(iNewEncoding);
|
||||
}
|
||||
else {
|
||||
if (Encoding_IsANSI(Encoding_Current(CPI_GET)) || Encoding_IsANSI(iNewEncoding))
|
||||
iOriginalEncoding = CPI_NONE;
|
||||
Encoding_HasChanged(CPI_NONE);
|
||||
Encoding_Current(iNewEncoding);
|
||||
}
|
||||
|
||||
@ -2828,7 +2826,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
UpdateStatusbar();
|
||||
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
}
|
||||
}
|
||||
@ -2850,13 +2848,13 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
else if (iNewEncoding == CPI_UNICODEBEBOM)
|
||||
iNewEncoding = CPI_UNICODEBE;
|
||||
|
||||
if ((bModified || Encoding_Current(CPI_GET) != iOriginalEncoding) && MsgBox(MBOKCANCEL,IDS_ASK_RECODE) != IDOK)
|
||||
if ((bModified || Encoding_HasChanged(CPI_GET)) && MsgBox(MBOKCANCEL,IDS_ASK_RECODE) != IDOK)
|
||||
return(0);
|
||||
|
||||
if (RecodeDlg(hwnd,&iNewEncoding))
|
||||
{
|
||||
StringCchCopy(tchCurFile2,COUNTOF(tchCurFile2),szCurFile);
|
||||
iSrcEncoding = iNewEncoding;
|
||||
Encoding_Source(iNewEncoding);
|
||||
FileLoad(TRUE,FALSE,TRUE,FALSE,tchCurFile2);
|
||||
}
|
||||
}
|
||||
@ -2881,7 +2879,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
UpdateToolbar();
|
||||
UpdateStatusbar();
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
}
|
||||
break;
|
||||
@ -2929,39 +2927,52 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
|
||||
|
||||
case IDM_EDIT_COPYALL:
|
||||
if (flagPasteBoard)
|
||||
bLastCopyFromMe = TRUE;
|
||||
SendMessage(hwndEdit,SCI_COPYRANGE,0,SendMessage(hwndEdit,SCI_GETLENGTH,0,0));
|
||||
UpdateToolbar();
|
||||
{
|
||||
if (flagPasteBoard)
|
||||
bLastCopyFromMe = TRUE;
|
||||
|
||||
int token = BeginSelUndoAction();
|
||||
SendMessage(hwndEdit,SCI_COPYRANGE,0,SendMessage(hwndEdit,SCI_GETLENGTH,0,0));
|
||||
EndSelUndoAction(token);
|
||||
|
||||
UpdateToolbar();
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case IDM_EDIT_COPYADD:
|
||||
if (flagPasteBoard)
|
||||
bLastCopyFromMe = TRUE;
|
||||
EditCopyAppend(hwndEdit);
|
||||
UpdateToolbar();
|
||||
break;
|
||||
{
|
||||
if (flagPasteBoard)
|
||||
bLastCopyFromMe = TRUE;
|
||||
|
||||
int token = BeginSelUndoAction();
|
||||
EditCopyAppend(hwndEdit);
|
||||
EndSelUndoAction(token);
|
||||
|
||||
UpdateToolbar();
|
||||
}
|
||||
break;
|
||||
|
||||
case IDM_EDIT_SWAP:
|
||||
bSwapClipBoard = TRUE;
|
||||
case IDM_EDIT_PASTE:
|
||||
{
|
||||
char *pClip = EditGetClipboardText(hwndEdit);
|
||||
|
||||
int iPos = (int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
int iAnchor = (int)SendMessage(hwndEdit,SCI_GETANCHOR,0,0);
|
||||
|
||||
char *pClip = EditGetClipboardText(hwndEdit);
|
||||
|
||||
int token = BeginSelUndoAction();
|
||||
|
||||
if (SendMessage(hwndEdit,SCI_GETSELECTIONEMPTY,0,0)) {
|
||||
|
||||
SendMessage(hwndEdit,SCI_REPLACESEL,(WPARAM)0,(LPARAM)pClip);
|
||||
int iNewPos = (int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
SendMessage(hwndEdit,SCI_SETSEL,iPos,iNewPos);
|
||||
|
||||
if (bSwapClipBoard)
|
||||
if (bSwapClipBoard) {
|
||||
int iNewPos = (int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
SendMessage(hwndEdit,SCI_SETSEL,iPos,iNewPos);
|
||||
SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_EDIT_CLEARCLIPBOARD,1),0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (flagPasteBoard)
|
||||
@ -3007,12 +3018,18 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
|
||||
|
||||
case IDM_EDIT_SELECTALL:
|
||||
SendMessage(hwndEdit,SCI_SELECTALL,0,0);
|
||||
{
|
||||
int token = BeginSelUndoAction();
|
||||
SendMessage(hwndEdit,SCI_SELECTALL,0,0);
|
||||
EndSelUndoAction(token);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case IDM_EDIT_SELECTWORD:
|
||||
{
|
||||
int token = BeginSelUndoAction();
|
||||
|
||||
int iPos = (int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
|
||||
if (SendMessage(hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0)) {
|
||||
@ -3053,13 +3070,15 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
int iLineEnd = (int)SendMessage(hwndEdit,SCI_GETLINEENDPOSITION,iLine,0);
|
||||
SendMessage(hwndEdit,SCI_SETSEL,iLineStart,iLineEnd);
|
||||
}
|
||||
EndSelUndoAction(token);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case IDM_EDIT_SELECTLINE:
|
||||
{
|
||||
int token = BeginSelUndoAction();
|
||||
|
||||
int iSelStart = (int)SendMessage(hwndEdit,SCI_GETSELECTIONSTART,0,0);
|
||||
int iSelEnd = (int)SendMessage(hwndEdit,SCI_GETSELECTIONEND,0,0);
|
||||
int iLineStart = (int)SendMessage(hwndEdit,SCI_LINEFROMPOSITION,iSelStart,0);
|
||||
@ -3068,6 +3087,8 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
iSelEnd = (int)SendMessage(hwndEdit,SCI_POSITIONFROMLINE,iLineEnd+1,0);
|
||||
SendMessage(hwndEdit,SCI_SETSEL,iSelStart,iSelEnd);
|
||||
SendMessage(hwndEdit,SCI_CHOOSECARETX,0,0);
|
||||
|
||||
EndSelUndoAction(token);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -3120,38 +3141,18 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
|
||||
case IDM_EDIT_INDENT:
|
||||
{
|
||||
int iLineSelStart = (int)SendMessage(hwndEdit,SCI_LINEFROMPOSITION,
|
||||
(int)SendMessage(hwndEdit,SCI_GETSELECTIONSTART,0,0),0);
|
||||
int iLineSelEnd = (int)SendMessage(hwndEdit,SCI_LINEFROMPOSITION,
|
||||
(int)SendMessage(hwndEdit,SCI_GETSELECTIONEND,0,0),0);
|
||||
|
||||
SendMessage(hwndEdit,SCI_SETTABINDENTS,TRUE,0);
|
||||
if (iLineSelStart == iLineSelEnd) {
|
||||
SendMessage(hwndEdit,SCI_VCHOME,0,0);
|
||||
SendMessage(hwndEdit,SCI_TAB,0,0);
|
||||
}
|
||||
else
|
||||
SendMessage(hwndEdit,SCI_TAB,0,0);
|
||||
SendMessage(hwndEdit,SCI_SETTABINDENTS,bTabIndents,0);
|
||||
int token = BeginSelUndoAction();
|
||||
SendMessage(hwndEdit,SCI_TAB,0,0);
|
||||
EndSelUndoAction(token);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case IDM_EDIT_UNINDENT:
|
||||
{
|
||||
int iLineSelStart = (int)SendMessage(hwndEdit,SCI_LINEFROMPOSITION,
|
||||
(int)SendMessage(hwndEdit,SCI_GETSELECTIONSTART,0,0),0);
|
||||
int iLineSelEnd = (int)SendMessage(hwndEdit,SCI_LINEFROMPOSITION,
|
||||
(int)SendMessage(hwndEdit,SCI_GETSELECTIONEND,0,0),0);
|
||||
|
||||
SendMessage(hwndEdit,SCI_SETTABINDENTS,TRUE,0);
|
||||
if (iLineSelStart == iLineSelEnd) {
|
||||
SendMessage(hwndEdit,SCI_VCHOME,0,0);
|
||||
SendMessage(hwndEdit,SCI_BACKTAB,0,0);
|
||||
}
|
||||
else
|
||||
SendMessage(hwndEdit,SCI_BACKTAB,0,0);
|
||||
SendMessage(hwndEdit,SCI_SETTABINDENTS,bTabIndents,0);
|
||||
int token = BeginSelUndoAction();
|
||||
SendMessage(hwndEdit,SCI_BACKTAB,0,0);
|
||||
EndSelUndoAction(token);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -3159,7 +3160,9 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
case IDM_EDIT_ENCLOSESELECTION:
|
||||
if (EditEncloseSelectionDlg(hwnd,wchPrefixSelection,wchAppendSelection)) {
|
||||
BeginWaitCursor();
|
||||
int token = BeginSelUndoAction();
|
||||
EditEncloseSelection(hwndEdit,wchPrefixSelection,wchAppendSelection);
|
||||
EndSelUndoAction(token);
|
||||
EndWaitCursor();
|
||||
}
|
||||
break;
|
||||
@ -3335,9 +3338,13 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
|
||||
|
||||
case IDM_EDIT_JOINLINESEX:
|
||||
BeginWaitCursor();
|
||||
EditJoinLinesEx(hwndEdit);
|
||||
EndWaitCursor();
|
||||
{
|
||||
BeginWaitCursor();
|
||||
int token = BeginSelUndoAction();
|
||||
EditJoinLinesEx(hwndEdit);
|
||||
EndSelUndoAction(token);
|
||||
EndWaitCursor();
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@ -4397,7 +4404,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
iPathNameFormat = 0;
|
||||
StringCchCopy(szTitleExcerpt,COUNTOF(szTitleExcerpt),L"");
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
break;
|
||||
|
||||
@ -4406,7 +4413,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
iPathNameFormat = 1;
|
||||
StringCchCopy(szTitleExcerpt,COUNTOF(szTitleExcerpt),L"");
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
break;
|
||||
|
||||
@ -4415,7 +4422,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
iPathNameFormat = 2;
|
||||
StringCchCopy(szTitleExcerpt,COUNTOF(szTitleExcerpt),L"");
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
break;
|
||||
|
||||
@ -4423,7 +4430,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
case IDM_VIEW_SHOWEXCERPT:
|
||||
EditGetExcerpt(hwndEdit,szTitleExcerpt,COUNTOF(szTitleExcerpt));
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
break;
|
||||
|
||||
@ -4638,13 +4645,13 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
WCHAR tchCurFile2[MAX_PATH] = { L'\0' };
|
||||
if (lstrlen(szCurFile)) {
|
||||
if (iDefaultEncoding == CPI_UNICODEBOM)
|
||||
iSrcEncoding = CPI_UNICODE;
|
||||
Encoding_Source(CPI_UNICODE);
|
||||
else if (iDefaultEncoding == CPI_UNICODEBEBOM)
|
||||
iSrcEncoding = CPI_UNICODEBE;
|
||||
Encoding_Source(CPI_UNICODEBE);
|
||||
else if (iDefaultEncoding == CPI_UTF8SIGN)
|
||||
iSrcEncoding = CPI_UTF8;
|
||||
Encoding_Source(CPI_UTF8);
|
||||
else
|
||||
iSrcEncoding = iDefaultEncoding;
|
||||
Encoding_Source(iDefaultEncoding);
|
||||
StringCchCopy(tchCurFile2,COUNTOF(tchCurFile2),szCurFile);
|
||||
FileLoad(FALSE,FALSE,TRUE,TRUE,tchCurFile2);
|
||||
}
|
||||
@ -4656,7 +4663,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
WCHAR tchCurFile2[MAX_PATH] = { L'\0' };
|
||||
if (lstrlen(szCurFile)) {
|
||||
iSrcEncoding = CPI_ANSI_DEFAULT;
|
||||
Encoding_Source(CPI_ANSI_DEFAULT);
|
||||
StringCchCopy(tchCurFile2,COUNTOF(tchCurFile2),szCurFile);
|
||||
FileLoad(FALSE,FALSE,TRUE,TRUE,tchCurFile2);
|
||||
}
|
||||
@ -4668,7 +4675,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
WCHAR tchCurFile2[MAX_PATH] = { L'\0' };
|
||||
if (lstrlen(szCurFile)) {
|
||||
iSrcEncoding = CPI_OEM;
|
||||
Encoding_Source(CPI_OEM);
|
||||
StringCchCopy(tchCurFile2,COUNTOF(tchCurFile2),szCurFile);
|
||||
FileLoad(FALSE,FALSE,TRUE,TRUE,tchCurFile2);
|
||||
}
|
||||
@ -5003,7 +5010,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
case CMD_TOGGLETITLE:
|
||||
EditGetExcerpt(hwndEdit,szTitleExcerpt,COUNTOF(szTitleExcerpt));
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
break;
|
||||
|
||||
@ -5552,7 +5559,7 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
case SCN_SAVEPOINTREACHED:
|
||||
bModified = FALSE;
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
UpdateToolbar();
|
||||
break;
|
||||
@ -5570,7 +5577,7 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
case SCN_SAVEPOINTLEFT:
|
||||
bModified = TRUE;
|
||||
SetWindowTitle(hwnd,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
UpdateToolbar();
|
||||
break;
|
||||
@ -6060,13 +6067,12 @@ void LoadSettings()
|
||||
// set flag for encoding default
|
||||
mEncoding[iDefaultEncoding].uFlags |= NCP_DEFAULT;
|
||||
|
||||
|
||||
{
|
||||
CHARSETINFO ci;
|
||||
if (TranslateCharsetInfo((DWORD*)(UINT_PTR)iSciDefaultCodePage, &ci, TCI_SRCCODEPAGE))
|
||||
iDefaultCharSet = ci.ciCharset;
|
||||
if (TranslateCharsetInfo((DWORD*)(UINT_PTR)iSciDefaultCodePage,&ci,TCI_SRCCODEPAGE))
|
||||
iDefaultCharSet = ci.ciCharset; // corresponds to SCI: SC_CHARSET_XXX
|
||||
else
|
||||
iDefaultCharSet = ANSI_CHARSET;
|
||||
iDefaultCharSet = SC_CHARSET_ANSI; // == GDI:ANSI_CHARSET // DEFAULT_CHARSET;
|
||||
}
|
||||
|
||||
// Scintilla Styles
|
||||
@ -6918,7 +6924,7 @@ void UpdateToolbar()
|
||||
EnableTool(IDT_VIEW_TOGGLEFOLDS,i && bShowCodeFolding);
|
||||
EnableTool(IDT_FILE_LAUNCH,i);
|
||||
|
||||
EnableTool(IDT_FILE_SAVE, (bModified || (Encoding_Current(CPI_GET) != iOriginalEncoding)) /*&& !bReadOnly*/);
|
||||
EnableTool(IDT_FILE_SAVE, (bModified || Encoding_HasChanged(CPI_GET)) /*&& !bReadOnly*/);
|
||||
|
||||
CheckTool(IDT_VIEW_WORDWRAP,fWordWrap);
|
||||
}
|
||||
@ -7112,14 +7118,18 @@ int BeginSelUndoAction()
|
||||
int token = -1;
|
||||
UndoRedoSelection sel = { -1 };
|
||||
sel.selMode = (int)SendMessage(hwndEdit,SCI_GETSELECTIONMODE,0,0);
|
||||
sel.anchorPos_undo = (int)SendMessage(hwndEdit, SCI_GETANCHOR, 0, 0);
|
||||
sel.currPos_undo = (int)SendMessage(hwndEdit, SCI_GETCURRENTPOS, 0, 0);
|
||||
if (sel.currPos_undo != sel.anchorPos_undo) {
|
||||
token = UndoSelectionMap(-1, &sel);
|
||||
if (token >= 0) {
|
||||
SendMessage(hwndEdit, SCI_BEGINUNDOACTION, 0, 0);
|
||||
SendMessage(hwndEdit, SCI_ADDUNDOACTION, (WPARAM)token, 0);
|
||||
}
|
||||
if (sel.selMode == SC_SEL_LINES) {
|
||||
sel.anchorPos_undo = (int)SendMessage(hwndEdit,SCI_GETSELECTIONSTART,0,0);
|
||||
sel.currPos_undo = (int)SendMessage(hwndEdit,SCI_GETSELECTIONEND,0,0);
|
||||
}
|
||||
else {
|
||||
sel.anchorPos_undo = (int)SendMessage(hwndEdit,SCI_GETANCHOR,0,0);
|
||||
sel.currPos_undo = (int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
}
|
||||
token = UndoSelectionMap(-1, &sel);
|
||||
if (token >= 0) {
|
||||
SendMessage(hwndEdit, SCI_BEGINUNDOACTION, 0, 0);
|
||||
SendMessage(hwndEdit, SCI_ADDUNDOACTION, (WPARAM)token, 0);
|
||||
}
|
||||
return token;
|
||||
}
|
||||
@ -7137,8 +7147,14 @@ void EndSelUndoAction(int token)
|
||||
UndoRedoSelection sel = { -1 };
|
||||
if (UndoSelectionMap(token,&sel) >= 0) {
|
||||
// mode should not have changed ???
|
||||
sel.anchorPos_redo = (int)SendMessage(hwndEdit,SCI_GETANCHOR,0,0);
|
||||
sel.currPos_redo = (int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
if (sel.selMode == SC_SEL_LINES) {
|
||||
sel.anchorPos_redo = (int)SendMessage(hwndEdit,SCI_GETSELECTIONSTART,0,0);
|
||||
sel.currPos_redo = (int)SendMessage(hwndEdit,SCI_GETSELECTIONEND,0,0);
|
||||
}
|
||||
else {
|
||||
sel.anchorPos_redo = (int)SendMessage(hwndEdit,SCI_GETANCHOR,0,0);
|
||||
sel.currPos_redo = (int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
}
|
||||
}
|
||||
UndoSelectionMap(token,&sel); // set with redo action filled
|
||||
SendMessage(hwndEdit, SCI_ENDUNDOACTION, 0, 0);
|
||||
@ -7160,15 +7176,18 @@ void RestoreSelectionAction(int token, DoAction doAct)
|
||||
int anchorPos = (doAct == UNDO ? sel.anchorPos_undo : sel.anchorPos_redo);
|
||||
int currPos = (doAct == UNDO ? sel.currPos_undo : sel.currPos_redo);
|
||||
SendMessage(hwndEdit,SCI_SETSELECTIONMODE,(WPARAM)sel.selMode,0);
|
||||
if (anchorPos != currPos) {
|
||||
if (sel.selMode == SC_SEL_RECTANGLE) {
|
||||
PostMessage(hwndEdit,SCI_SETRECTANGULARSELECTIONANCHOR,(WPARAM)anchorPos,0);
|
||||
PostMessage(hwndEdit,SCI_SETRECTANGULARSELECTIONCARET,(WPARAM)currPos,0);
|
||||
}
|
||||
else {
|
||||
PostMessage(hwndEdit,SCI_SETSELECTION,(WPARAM)currPos,(LPARAM)anchorPos);
|
||||
}
|
||||
if (sel.selMode == SC_SEL_LINES) {
|
||||
PostMessage(hwndEdit,SCI_SETSELECTIONSTART,(WPARAM)anchorPos,0);
|
||||
PostMessage(hwndEdit,SCI_SETSELECTIONEND,(WPARAM)currPos,0);
|
||||
}
|
||||
else if (sel.selMode == SC_SEL_RECTANGLE) {
|
||||
PostMessage(hwndEdit,SCI_SETRECTANGULARSELECTIONANCHOR,(WPARAM)anchorPos,0);
|
||||
PostMessage(hwndEdit,SCI_SETRECTANGULARSELECTIONCARET,(WPARAM)currPos,0);
|
||||
}
|
||||
else {
|
||||
PostMessage(hwndEdit,SCI_SETSELECTION,(WPARAM)currPos,(LPARAM)anchorPos);
|
||||
}
|
||||
|
||||
PostMessage(hwndEdit,SCI_CANCEL,0,0);
|
||||
}
|
||||
}
|
||||
@ -7287,11 +7306,11 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
|
||||
iEOLMode = iLineEndings[iDefaultEOLMode];
|
||||
SendMessage(hwndEdit,SCI_SETEOLMODE,iLineEndings[iDefaultEOLMode],0);
|
||||
Encoding_Current(iDefaultEncoding);
|
||||
iOriginalEncoding = iDefaultEncoding;
|
||||
Encoding_HasChanged(iDefaultEncoding);
|
||||
Encoding_SciSetCodePage(hwndEdit,iDefaultEncoding);
|
||||
EditSetNewText(hwndEdit,"",0);
|
||||
SetWindowTitle(hwndMain,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
|
||||
// Terminate file watching
|
||||
@ -7345,13 +7364,13 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
|
||||
Style_SetLexer(hwndEdit,NULL);
|
||||
iEOLMode = iLineEndings[iDefaultEOLMode];
|
||||
SendMessage(hwndEdit,SCI_SETEOLMODE,iLineEndings[iDefaultEOLMode],0);
|
||||
if (iSrcEncoding != CPI_NONE) {
|
||||
Encoding_Current(iSrcEncoding);
|
||||
iOriginalEncoding = iSrcEncoding;
|
||||
if (Encoding_Source(CPI_GET) != CPI_NONE) {
|
||||
Encoding_Current(Encoding_Source(CPI_GET));
|
||||
Encoding_HasChanged(Encoding_Source(CPI_GET));
|
||||
}
|
||||
else {
|
||||
Encoding_Current(iDefaultEncoding);
|
||||
iOriginalEncoding = iDefaultEncoding;
|
||||
Encoding_HasChanged(iDefaultEncoding);
|
||||
}
|
||||
Encoding_SciSetCodePage(hwndEdit,Encoding_Current(CPI_GET));
|
||||
bReadOnly = FALSE;
|
||||
@ -7365,9 +7384,9 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
int fileEncoding;
|
||||
int fileEncoding = Encoding_Current(CPI_GET);
|
||||
fSuccess = FileIO(TRUE,szFileName,bNoEncDetect,&fileEncoding,&iEOLMode,&bUnicodeErr,&bFileTooBig,NULL,FALSE);
|
||||
Encoding_Current(fileEncoding);
|
||||
Encoding_Current(fileEncoding); // load may change encoding
|
||||
}
|
||||
if (fSuccess) {
|
||||
StringCchCopy(szCurFile,COUNTOF(szCurFile),szFileName);
|
||||
@ -7378,7 +7397,7 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
|
||||
if (!flagLexerSpecified) // flag will be cleared
|
||||
Style_SetLexerFromFile(hwndEdit,szCurFile);
|
||||
UpdateLineNumberWidth();
|
||||
iOriginalEncoding = Encoding_Current(CPI_GET);
|
||||
Encoding_HasChanged(Encoding_Current(CPI_GET));
|
||||
bModified = FALSE;
|
||||
//bReadOnly = FALSE;
|
||||
SendMessage(hwndEdit,SCI_SETEOLMODE,iEOLMode,0);
|
||||
@ -7386,7 +7405,7 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
|
||||
if (flagUseSystemMRU == 2)
|
||||
SHAddToRecentDocs(SHARD_PATHW,szFileName);
|
||||
SetWindowTitle(hwndMain,uidsAppTitle,fIsElevated,IDS_UNTITLED,szFileName,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
|
||||
// Install watching of the current file
|
||||
@ -7452,7 +7471,7 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
|
||||
}
|
||||
}
|
||||
|
||||
if (!bSaveAlways && (!bModified && (Encoding_Current(CPI_GET) == iOriginalEncoding) || bIsEmptyNewFile) && !bSaveAs)
|
||||
if (!bSaveAlways && (!bModified && !Encoding_HasChanged(CPI_GET) || bIsEmptyNewFile) && !bSaveAs)
|
||||
return TRUE;
|
||||
|
||||
if (bAsk)
|
||||
@ -7480,7 +7499,7 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
|
||||
bReadOnly = (dwFileAttributes & FILE_ATTRIBUTE_READONLY);
|
||||
if (bReadOnly) {
|
||||
SetWindowTitle(hwndMain,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
if (MsgBox(MBYESNOWARN,IDS_READONLY_SAVE,szCurFile) == IDYES)
|
||||
bSaveAs = TRUE;
|
||||
@ -7503,9 +7522,9 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
|
||||
|
||||
if (SaveFileDlg(hwndMain,tchFile,COUNTOF(tchFile),tchInitialDir))
|
||||
{
|
||||
int fileEncoding;
|
||||
int fileEncoding = Encoding_Current(CPI_GET);
|
||||
fSuccess = FileIO(FALSE, tchFile, FALSE, &fileEncoding, &iEOLMode, NULL, NULL, &bCancelDataLoss, bSaveCopy);
|
||||
Encoding_Current(fileEncoding);
|
||||
//~Encoding_Current(fileEncoding); // save should not change encoding
|
||||
if (fSuccess)
|
||||
{
|
||||
if (!bSaveCopy)
|
||||
@ -7530,21 +7549,21 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
|
||||
}
|
||||
|
||||
else {
|
||||
int fileEncoding;
|
||||
int fileEncoding = Encoding_Current(CPI_GET);
|
||||
fSuccess = FileIO(FALSE,szCurFile,FALSE,&fileEncoding,&iEOLMode,NULL,NULL,&bCancelDataLoss,FALSE);
|
||||
Encoding_Current(fileEncoding);
|
||||
//~Encoding_Current(fileEncoding); // save should not change encoding
|
||||
}
|
||||
if (fSuccess)
|
||||
{
|
||||
if (!bSaveCopy)
|
||||
{
|
||||
bModified = FALSE;
|
||||
iOriginalEncoding = Encoding_Current(CPI_GET);
|
||||
Encoding_HasChanged(Encoding_Current(CPI_GET));
|
||||
MRU_AddFile(pFileMRU,szCurFile,flagRelativeFileMRU,flagPortableMyDocs);
|
||||
if (flagUseSystemMRU == 2)
|
||||
SHAddToRecentDocs(SHARD_PATHW,szCurFile);
|
||||
SetWindowTitle(hwndMain,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
|
||||
// Install watching of the current file
|
||||
@ -7560,7 +7579,7 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
|
||||
StringCchCopy(tchFile,COUNTOF(tchFile),szCurFile);
|
||||
|
||||
SetWindowTitle(hwndMain,uidsAppTitle,fIsElevated,IDS_UNTITLED,szCurFile,
|
||||
iPathNameFormat,bModified || Encoding_Current(CPI_GET) != iOriginalEncoding,
|
||||
iPathNameFormat,bModified || Encoding_HasChanged(CPI_GET),
|
||||
IDS_READONLY,bReadOnly,szTitleExcerpt);
|
||||
|
||||
MsgBox(MBWARN,IDS_ERR_SAVEFILE,tchFile);
|
||||
@ -8172,7 +8191,7 @@ void SetNotifyIconTitle(HWND hwnd)
|
||||
else
|
||||
GetString(IDS_UNTITLED,tchTitle,COUNTOF(tchTitle)-4);
|
||||
|
||||
if (bModified || Encoding_Current(CPI_GET) != iOriginalEncoding)
|
||||
if (bModified || Encoding_HasChanged(CPI_GET))
|
||||
StringCchCopy(nid.szTip,COUNTOF(nid.szTip),L"* ");
|
||||
else
|
||||
StringCchCopy(nid.szTip,COUNTOF(nid.szTip),L"");
|
||||
|
||||
@ -41,7 +41,7 @@ typedef struct np3params {
|
||||
} np3params, *LPnp3params;
|
||||
|
||||
|
||||
#define MAX_SELUNDO 512
|
||||
#define MAX_SELUNDO 1024
|
||||
typedef struct _undoSel
|
||||
{
|
||||
int anchorPos_undo;
|
||||
|
||||
BIN
src/Notepad3.rc
BIN
src/Notepad3.rc
Binary file not shown.
Loading…
Reference in New Issue
Block a user