+ refactoring: usage of undo/redo action stack

This commit is contained in:
Rainer Kottenhoff 2018-01-23 22:13:27 +01:00
parent ef2b2030b8
commit aa1c3c7d4c
3 changed files with 203 additions and 276 deletions

View File

@ -326,7 +326,7 @@ void EditSetNewText(HWND hwnd,char* lpstrText,DWORD cbText)
SendMessage(hwnd,SCI_CANCEL,0,0);
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,0,0);
UndoRedoSelectionMap(-1,NULL);
UndoRedoActionMap(-1,NULL);
SendMessage(hwnd,SCI_CLEARALL,0,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)MARKER_NP3_BOOKMARK,0);
SendMessage(hwnd,SCI_SETSCROLLWIDTH, DEFAULT_SCROLL_WIDTH,0);
@ -365,7 +365,7 @@ BOOL EditConvertText(HWND hwnd, int encSource, int encDest, BOOL bSetSavePoint)
{
SendMessage(hwnd,SCI_CANCEL,0,0);
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,0,0);
UndoRedoSelectionMap(-1,NULL);
UndoRedoActionMap(-1,NULL);
SendMessage(hwnd,SCI_CLEARALL,0,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)MARKER_NP3_BOOKMARK,0);
Encoding_SciSetCodePage(hwnd,encDest);
@ -406,7 +406,7 @@ BOOL EditConvertText(HWND hwnd, int encSource, int encDest, BOOL bSetSavePoint)
SendMessage(hwnd,SCI_CANCEL,0,0);
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,0,0);
UndoRedoSelectionMap(-1,NULL);
UndoRedoActionMap(-1,NULL);
SendMessage(hwnd,SCI_CLEARALL,0,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)MARKER_NP3_BOOKMARK,0);
Encoding_SciSetCodePage(hwnd,encDest);
@ -1256,11 +1256,11 @@ void EditInvertCase(HWND hwnd)
WideCharToMultiByte(cpEdit,0,pszTextW,cchTextW,pszText,(int)GlobalSize(pszText),NULL,NULL);
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
SendMessage(hwnd,SCI_CLEAR,0,0);
SendMessage(hwnd,SCI_ADDTEXT,(WPARAM)(iSelEnd - iSelStart),(LPARAM)pszText);
SendMessage(hwnd,SCI_SETSEL,(WPARAM)iAnchorPos,(LPARAM)iCurPos);
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
EndUndoAction(token);
}
GlobalFree(pszText);
@ -1319,11 +1319,11 @@ void EditTitleCase(HWND hwnd)
WideCharToMultiByte(cpEdit,0,pszTextW,cchTextW,pszText,(int)GlobalSize(pszText),NULL,NULL);
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
SendMessage(hwnd,SCI_CLEAR,0,0);
SendMessage(hwnd,SCI_ADDTEXT,(WPARAM)(iSelEnd - iSelStart),(LPARAM)pszText);
SendMessage(hwnd,SCI_SETSEL,(WPARAM)iAnchorPos,(LPARAM)iCurPos);
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
EndUndoAction(token);
}
GlobalFree(pszText);
@ -1395,11 +1395,11 @@ void EditSentenceCase(HWND hwnd)
WideCharToMultiByte(cpEdit,0,pszTextW,cchTextW,pszText,(int)GlobalSize(pszText),NULL,NULL);
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
SendMessage(hwnd,SCI_CLEAR,0,0);
SendMessage(hwnd,SCI_ADDTEXT,(WPARAM)(iSelEnd - iSelStart),(LPARAM)pszText);
SendMessage(hwnd,SCI_SETSEL,(WPARAM)iAnchorPos,(LPARAM)iCurPos);
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
EndUndoAction(token);
}
GlobalFree(pszText);
@ -1478,11 +1478,11 @@ void EditURLEncode(HWND hwnd)
else
iCurPos = iAnchorPos + cchEscaped;
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
SendMessage(hwnd,SCI_CLEAR,0,0);
SendMessage(hwnd,SCI_ADDTEXT,(WPARAM)cchEscaped,(LPARAM)pszEscaped);
SendMessage(hwnd,SCI_SETSEL,(WPARAM)iAnchorPos,(LPARAM)iCurPos);
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
EndUndoAction(token);
LocalFree(pszText);
LocalFree(pszTextW);
@ -1563,11 +1563,11 @@ void EditURLDecode(HWND hwnd)
else
iCurPos = iAnchorPos + cchUnescaped;
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
SendMessage(hwnd,SCI_CLEAR,0,0);
SendMessage(hwnd,SCI_ADDTEXT,(WPARAM)cchUnescaped,(LPARAM)pszUnescaped);
SendMessage(hwnd,SCI_SETSEL,(WPARAM)iAnchorPos,(LPARAM)iCurPos);
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
EndUndoAction(token);
LocalFree(pszText);
LocalFree(pszTextW);
@ -1586,31 +1586,32 @@ void EditURLDecode(HWND hwnd)
//
void EditEscapeCChars(HWND hwnd) {
if (SendMessage(hwnd,SCI_GETSELECTIONEND,0,0) - SendMessage(hwnd,SCI_GETSELECTIONSTART,0,0))
if (!SciCall_IsSelectionEmpty())
{
if (!SciCall_IsSelectionRectangle())
if (SciCall_IsSelectionRectangle())
{
EDITFINDREPLACE efr = { "", "", "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL };
efr.hwnd = hwnd;
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\\");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\"");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\"");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\'");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\'");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
MsgBox(MBWARN, IDS_SELRECT);
return;
}
else
MsgBox(MBWARN,IDS_SELRECT);
EDITFINDREPLACE efr = { "", "", "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL };
efr.hwnd = hwnd;
int token = BeginUndoAction();
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\\");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\"");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\"");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\'");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\'");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
EndUndoAction(token);
}
}
@ -1621,31 +1622,32 @@ void EditEscapeCChars(HWND hwnd) {
//
void EditUnescapeCChars(HWND hwnd) {
if (SendMessage(hwnd,SCI_GETSELECTIONEND,0,0) - SendMessage(hwnd,SCI_GETSELECTIONSTART,0,0))
if (!SciCall_IsSelectionEmpty())
{
if (!SciCall_IsSelectionRectangle())
if (SciCall_IsSelectionRectangle())
{
EDITFINDREPLACE efr = { "", "", "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL };
efr.hwnd = hwnd;
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\\");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\"");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\"");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\'");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\'");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
MsgBox(MBWARN, IDS_SELRECT);
return;
}
else
MsgBox(MBWARN,IDS_SELRECT);
EDITFINDREPLACE efr = { "", "", "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL };
efr.hwnd = hwnd;
int token = BeginUndoAction();
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\\");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\"");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\"");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\'");
StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\'");
EditReplaceAllInSelection(hwnd,&efr,FALSE);
EndUndoAction(token);
}
}
@ -1923,17 +1925,17 @@ void EditTabsToSpaces(HWND hwnd,int nTabWidth,BOOL bOnlyIndentingWS)
iCurPos = iSelStart + cchConvM;
}
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
EditEnterTargetTransaction();
SendMessage(hwnd, SCI_SETTARGETRANGE, iSelStart, iSelEnd);
SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cchConvM, (LPARAM)pszText);
EditLeaveTargetTransaction();
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
SciCall_SetSel(iAnchorPos, iCurPos);
EndUndoAction(token);
GlobalFree(pszText);
}
else
@ -2052,16 +2054,15 @@ void EditSpacesToTabs(HWND hwnd,int nTabWidth,BOOL bOnlyIndentingWS)
iCurPos = iSelStart + cchConvM;
}
SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
int token = BeginUndoAction();
EditEnterTargetTransaction();
SendMessage(hwnd, SCI_SETTARGETRANGE, iSelStart, iSelEnd);
SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cchConvM, (LPARAM)pszText);
EditLeaveTargetTransaction();
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
SciCall_SetSel(iAnchorPos, iCurPos);
EndUndoAction(token);
GlobalFree(pszText);
}
@ -2087,12 +2088,12 @@ void EditMoveUp(HWND hwnd)
int iLineCurPos = iCurPos - SciCall_PositionFromLine(iCurLine);
int iLineAnchorPos = iAnchorPos - SciCall_PositionFromLine(iAnchorLine);
if (iCurLine > 0) {
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
SendMessage(hwnd,SCI_LINETRANSPOSE,0,0);
SciCall_SetSel(SciCall_PositionFromLine(iAnchorLine - 1) + iLineAnchorPos,
SciCall_PositionFromLine(iCurLine - 1) + iLineCurPos);
SendMessage(hwnd,SCI_CHOOSECARETX,0,0);
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
EndUndoAction(token);
}
}
else if (!SciCall_IsSelectionRectangle()) {
@ -2120,7 +2121,7 @@ void EditMoveUp(HWND hwnd)
--iLineDest;
}
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
EditEnterTargetTransaction();
SendMessage(hwnd, SCI_SETTARGETRANGE, iLineSrcStart, iLineSrcEnd);
@ -2147,7 +2148,6 @@ void EditMoveUp(HWND hwnd)
}
EditLeaveTargetTransaction();
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
if (iCurPos < iAnchorPos) {
iCurPos = SciCall_PositionFromLine(iCurLine - 1);
@ -2159,6 +2159,7 @@ void EditMoveUp(HWND hwnd)
}
SciCall_SetSel(iAnchorPos, iCurPos);
EndUndoAction(token);
}
}
else
@ -2182,13 +2183,13 @@ void EditMoveDown(HWND hwnd)
int iLineCurPos = iCurPos - SciCall_PositionFromLine(iCurLine);
int iLineAnchorPos = iAnchorPos - SciCall_PositionFromLine(iAnchorLine);
if (iCurLine < (SciCall_GetLineCount() - 1)) {
SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
int token = BeginUndoAction();
SciCall_GotoLine(iCurLine + 1);
SendMessage(hwnd, SCI_LINETRANSPOSE, 0, 0);
SciCall_SetSel(SciCall_PositionFromLine(iAnchorLine + 1) + iLineAnchorPos,
SciCall_PositionFromLine(iCurLine + 1) + iLineCurPos);
SendMessage(hwnd, SCI_CHOOSECARETX, 0, 0);
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
EndUndoAction(token);
}
}
else if (!SciCall_IsSelectionRectangle())
@ -2235,7 +2236,7 @@ void EditMoveDown(HWND hwnd)
iLineSrcEnd = SciCall_PositionFromLine(iLineSrc + 1);
iLineDest = min(iCurLine,iAnchorLine);
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
EditEnterTargetTransaction();
SendMessage(hwnd, SCI_SETTARGETRANGE, iLineSrcStart, iLineSrcEnd);
@ -2252,7 +2253,6 @@ void EditMoveDown(HWND hwnd)
}
EditLeaveTargetTransaction();
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
LocalFree(pLine);
@ -2266,6 +2266,7 @@ void EditMoveDown(HWND hwnd)
}
SciCall_SetSel(iAnchorPos, iCurPos);
EndUndoAction(token);
}
}
else
@ -2458,7 +2459,7 @@ void EditModifyLines(HWND hwnd,LPCWSTR pwszPrefix,LPCWSTR pwszAppend)
}
}
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
for (iLine = iLineStart; iLine <= iLineEnd; iLine++)
{
@ -2502,7 +2503,6 @@ void EditModifyLines(HWND hwnd,LPCWSTR pwszPrefix,LPCWSTR pwszAppend)
SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)mszInsert);
}
}
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
// extend selection to start of first line
// the above code is not required when last line has been excluded
@ -2520,6 +2520,9 @@ void EditModifyLines(HWND hwnd,LPCWSTR pwszPrefix,LPCWSTR pwszAppend)
}
SciCall_SetSel(iAnchorPos, iCurPos);
}
EndUndoAction(token);
}
else
MsgBox(MBWARN,IDS_SELRECT);
@ -2535,6 +2538,7 @@ void EditAlignText(HWND hwnd,int nMode)
#define BUFSIZE_ALIGN 1024
BOOL bModified = FALSE;
int token = -1;
int iSelStart = SciCall_GetSelectionStart();
int iSelEnd = SciCall_GetSelectionEnd();
@ -2595,7 +2599,7 @@ void EditAlignText(HWND hwnd,int nMode)
if ((iIndentPos == iEndPos) && (iEndPos > 0)) {
if (!bModified) {
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
token = BeginUndoAction();
bModified = TRUE;
}
SciCall_SetSel(SciCall_PositionFromLine(iLine), iEndPos);
@ -2614,7 +2618,7 @@ void EditAlignText(HWND hwnd,int nMode)
int cchLine = (int)SendMessage(hwnd,SCI_GETLINE,(WPARAM)iLine,(LPARAM)tchLineBuf);
if (!bModified) {
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
token = BeginUndoAction();
bModified = TRUE;
}
@ -2759,8 +2763,6 @@ void EditAlignText(HWND hwnd,int nMode)
}
}
}
if (bModified)
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
}
else
MsgBox(MBINFO,IDS_BUFFERTOOSMALL);
@ -2775,6 +2777,10 @@ void EditAlignText(HWND hwnd,int nMode)
iCurPos = SciCall_PositionFromLine(iLineEnd + 1);
}
SciCall_SetSel(iAnchorPos, iCurPos);
if (bModified && (token >= 0)) {
EndUndoAction(token);
}
}
else
MsgBox(MBWARN,IDS_SELRECT);
@ -2803,7 +2809,7 @@ void EditEncloseSelection(HWND hwnd,LPCWSTR pwszOpen,LPCWSTR pwszClose)
if (!SciCall_IsSelectionRectangle())
{
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
if (StringCchLenA(mszOpen,COUNTOF(mszOpen))) {
SciCall_SetSel(iSelStart, iSelStart);
@ -2816,8 +2822,6 @@ void EditEncloseSelection(HWND hwnd,LPCWSTR pwszOpen,LPCWSTR pwszClose)
SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)mszClose);
}
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
// Fix selection
if (iSelStart == iSelEnd)
SciCall_SetSel(iSelStart + StringCchLenA(mszOpen, COUNTOF(mszOpen)),
@ -2835,6 +2839,8 @@ void EditEncloseSelection(HWND hwnd,LPCWSTR pwszOpen,LPCWSTR pwszClose)
}
SciCall_SetSel(iAnchorPos, iCurPos);
}
EndUndoAction(token);
}
else
MsgBox(MBWARN,IDS_SELRECT);
@ -2885,7 +2891,7 @@ void EditToggleLineComments(HWND hwnd,LPCWSTR pwszComment,BOOL bInsertAtStart)
}
}
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
for (int iLine = iLineStart; iLine <= iLineEnd; iLine++)
{
@ -2928,7 +2934,6 @@ void EditToggleLineComments(HWND hwnd,LPCWSTR pwszComment,BOOL bInsertAtStart)
}
}
}
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
if (iSelStart != iSelEnd)
{
@ -2944,6 +2949,7 @@ void EditToggleLineComments(HWND hwnd,LPCWSTR pwszComment,BOOL bInsertAtStart)
SciCall_SetSel(iAnchorPos, iCurPos);
}
EndUndoAction(token);
}
else
MsgBox(MBWARN,IDS_SELRECT);
@ -2961,6 +2967,7 @@ void EditPadWithSpaces(HWND hwnd,BOOL bSkipEmpty,BOOL bNoUndoGroup)
int iLine = 0;
BOOL bIsRectangular = FALSE;
BOOL bReducedSelection = FALSE;
int token = -1;
int iSelStart = 0;
int iSelEnd = 0;
@ -3034,7 +3041,7 @@ void EditPadWithSpaces(HWND hwnd,BOOL bSkipEmpty,BOOL bNoUndoGroup)
pmszPadStr[size] = '\0';
if (!bNoUndoGroup)
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
token = BeginUndoAction();
for (iLine = iLineStart; iLine <= iLineEnd; iLine++) {
@ -3064,9 +3071,6 @@ void EditPadWithSpaces(HWND hwnd,BOOL bSkipEmpty,BOOL bNoUndoGroup)
if (pmszPadStr)
LocalFree(pmszPadStr);
if (!bNoUndoGroup)
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
}
if (!bIsRectangular && (SciCall_LineFromPosition(iSelStart) != SciCall_LineFromPosition(iSelEnd)))
@ -3096,6 +3100,9 @@ void EditPadWithSpaces(HWND hwnd,BOOL bSkipEmpty,BOOL bNoUndoGroup)
SendMessage(hwnd,SCI_SETRECTANGULARSELECTIONCARET,(WPARAM)iCurPos,0);
SendMessage(hwnd,SCI_SETRECTANGULARSELECTIONANCHOR,(WPARAM)iAnchorPos,0);
}
if (!bNoUndoGroup && (token >= 0))
EndUndoAction(token);
}
@ -3129,7 +3136,7 @@ void EditStripFirstCharacter(HWND hwnd)
if (iSelEnd <= SciCall_PositionFromLine(iLineEnd)) { --iLineEnd; }
g_flagIgnoreNotifyChange = TRUE;
SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
int token = BeginUndoAction();
EditEnterTargetTransaction();
int chCnt = 0;
@ -3143,12 +3150,13 @@ void EditStripFirstCharacter(HWND hwnd)
}
EditLeaveTargetTransaction();
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
g_flagIgnoreNotifyChange = FALSE;
if (!bIsSelEmpty) {
SciCall_SetSel(iSelStart, (iSelEnd - chCnt));
}
EndUndoAction(token);
UpdateUI();
}
@ -3182,8 +3190,8 @@ void EditStripLastCharacter(HWND hwnd)
if (iSelStart >= SciCall_GetLineEndPosition(iLineStart)) { ++iLineStart; }
if (iSelEnd < SciCall_GetLineEndPosition(iLineEnd)) { --iLineEnd; }
int token = BeginUndoAction();
g_flagIgnoreNotifyChange = TRUE;
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
EditEnterTargetTransaction();
for (int iLine = iLineStart; iLine <= iLineEnd; ++iLine)
@ -3198,8 +3206,8 @@ void EditStripLastCharacter(HWND hwnd)
}
EditLeaveTargetTransaction();
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
g_flagIgnoreNotifyChange = FALSE;
EndUndoAction(token);
}
@ -3233,8 +3241,8 @@ void EditStripTrailingBlanks(HWND hwnd, BOOL bIgnoreSelection)
if (iSelEnd < SciCall_GetLineEndPosition(iLineEnd)) { --iLineEnd; }
int token = BeginUndoAction();
g_flagIgnoreNotifyChange = TRUE;
SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
EditEnterTargetTransaction();
for (int iLine = iLineStart; iLine <= iLineEnd; ++iLine)
@ -3255,8 +3263,8 @@ void EditStripTrailingBlanks(HWND hwnd, BOOL bIgnoreSelection)
}
EditLeaveTargetTransaction();
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
g_flagIgnoreNotifyChange = FALSE;
EndUndoAction(token);
}
//=============================================================================
@ -3330,7 +3338,7 @@ void EditCompressSpaces(HWND hwnd)
if (bModified) {
SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
int token = BeginUndoAction();
EditEnterTargetTransaction();
if (iSelStart != iSelEnd) {
@ -3352,7 +3360,7 @@ void EditCompressSpaces(HWND hwnd)
SciCall_SetSel(iAnchorPos, iCurPos);
EditLeaveTargetTransaction();
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
EndUndoAction(token);
}
}
if (pszIn)
@ -3389,7 +3397,7 @@ void EditRemoveBlankLines(HWND hwnd,BOOL bMerge)
if ((iSelEnd <= SciCall_PositionFromLine(iLineEnd)) && (iLineEnd != SciCall_GetLineCount() - 1)) { --iLineEnd; }
g_flagIgnoreNotifyChange = TRUE;
SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
int token = BeginUndoAction();
EditEnterTargetTransaction();
for (int iLine = iLineStart; iLine <= iLineEnd; )
@ -3414,7 +3422,7 @@ void EditRemoveBlankLines(HWND hwnd,BOOL bMerge)
}
EditLeaveTargetTransaction();
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
EndUndoAction(token);
g_flagIgnoreNotifyChange = FALSE;
}
@ -3600,16 +3608,15 @@ void EditWrapToColumn(HWND hwnd,int nColumn/*,int nTabWidth*/)
iCurPos = iSelStart + cchConvM;
}
SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
int token = BeginUndoAction();
EditEnterTargetTransaction();
SendMessage(hwnd, SCI_SETTARGETRANGE, iSelStart, iSelEnd);
SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cchConvM, (LPARAM)pszText);
EditLeaveTargetTransaction();
SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
SciCall_SetSel(iAnchorPos, iCurPos);
EndUndoAction(token);
GlobalFree(pszText);
}
@ -3713,16 +3720,15 @@ void EditJoinLinesEx(HWND hwnd, BOOL bPreserveParagraphs, BOOL bCRLF2Space)
iCurPos = iSelStart + cchJoin;
}
SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
int token = BeginUndoAction();
EditEnterTargetTransaction();
SendMessage(hwnd, SCI_SETTARGETRANGE, iSelStart, iSelEnd);
SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cchJoin, (LPARAM)pszJoin);
EditLeaveTargetTransaction();
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
SciCall_SetSel(iAnchorPos, iCurPos);
EndUndoAction(token);
}
@ -3776,6 +3782,7 @@ int CmpLogicalRev(const void *s1, const void *s2) {
}
}
void EditSortLines(HWND hwnd, int iSortFlags)
{
BOOL bIsRectangular = FALSE;
@ -3871,7 +3878,7 @@ void EditSortLines(HWND hwnd, int iSortFlags)
iTabWidth = (UINT)SendMessage(hwnd, SCI_GETTABWIDTH, 0, 0);
SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
int token = BeginUndoAction();
if (bIsRectangular)
EditPadWithSpaces(hwnd, !(iSortFlags & SORT_SHUFFLE), TRUE);
@ -4009,7 +4016,6 @@ void EditSortLines(HWND hwnd, int iSortFlags)
SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)-1, (LPARAM)pmszResult);
EditLeaveTargetTransaction();
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
LocalFree(pmszResult);
@ -4022,6 +4028,8 @@ void EditSortLines(HWND hwnd, int iSortFlags)
else {
SendMessage(hwnd, SCI_SETSEL, (WPARAM)iAnchorPos, (LPARAM)iCurPos);
}
EndUndoAction(token);
}
@ -5490,6 +5498,7 @@ static UT_icd ReplPos_icd = { sizeof(ReplPos_t), NULL, NULL, NULL };
int EditReplaceAllInRange(HWND hwnd, LPCEDITFINDREPLACE lpefr, BOOL bShowInfo, int iStartPos, int iEndPos)
{
int token = -1;
char szFind[FNDRPL_BUFFER];
if (iStartPos > iEndPos)
@ -5545,7 +5554,7 @@ int EditReplaceAllInRange(HWND hwnd, LPCEDITFINDREPLACE lpefr, BOOL bShowInfo, i
int iCount = utarray_len(ReplPosUTArray);
if (iCount > 0)
SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
token = BeginUndoAction();
// === iterate over findings and replace strings ===
@ -5579,8 +5588,8 @@ int EditReplaceAllInRange(HWND hwnd, LPCEDITFINDREPLACE lpefr, BOOL bShowInfo, i
utarray_free(ReplPosUTArray);
LocalFree(pszReplace);
if (iCount > 0)
SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
if ((iCount > 0) && (token >= 0))
EndUndoAction(token);
if (bShowInfo) {
if (iCount > 0)
@ -5602,12 +5611,8 @@ BOOL EditReplaceAll(HWND hwnd,LPCEDITFINDREPLACE lpefr,BOOL bShowInfo)
int start = 0;
int end = SciCall_GetTextLength();
int token = BeginSelUndoAction();
int iCount = EditReplaceAllInRange(hwnd, lpefr, bShowInfo, start, end);
EndSelUndoAction(token);
return (iCount > 0) ? TRUE : FALSE;
}
@ -5623,15 +5628,11 @@ BOOL EditReplaceAllInSelection(HWND hwnd,LPCEDITFINDREPLACE lpefr,BOOL bShowInfo
return FALSE;
}
int token = BeginSelUndoAction();
int start = SciCall_GetSelectionStart();
int end = SciCall_GetSelectionEnd();
int iCount = EditReplaceAllInRange(hwnd, lpefr, bShowInfo, start, end);
EndSelUndoAction(token);
if (iCount <= 0)
return FALSE;

View File

@ -955,19 +955,21 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
// Check for /c [if no file is specified] -- even if a file is specified
/*else */if (flagNewFromClipboard) {
if (SendMessage(g_hwndEdit,SCI_CANPASTE,0,0)) {
if (SendMessage(g_hwndEdit, SCI_CANPASTE, 0, 0)) {
BOOL bAutoIndent2 = bAutoIndent;
bAutoIndent = 0;
EditJumpTo(g_hwndEdit,-1,0);
SendMessage(g_hwndEdit,SCI_BEGINUNDOACTION,0,0);
if (SendMessage(g_hwndEdit,SCI_GETLENGTH,0,0) > 0)
SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
SendMessage(g_hwndEdit,SCI_PASTE,0,0);
SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
SendMessage(g_hwndEdit,SCI_ENDUNDOACTION,0,0);
EditJumpTo(g_hwndEdit, -1, 0);
SendMessage(g_hwndEdit, SCI_BEGINUNDOACTION, 0, 0);
if (SendMessage(g_hwndEdit, SCI_GETLENGTH, 0, 0) > 0) {
SendMessage(g_hwndEdit, SCI_NEWLINE, 0, 0);
}
SendMessage(g_hwndEdit, SCI_PASTE, 0, 0);
SendMessage(g_hwndEdit, SCI_NEWLINE, 0, 0);
SendMessage(g_hwndEdit, SCI_ENDUNDOACTION, 0, 0);
bAutoIndent = bAutoIndent2;
if (flagJumpTo)
EditJumpTo(g_hwndEdit,iInitialLine,iInitialColumn);
if (flagJumpTo) {
EditJumpTo(g_hwndEdit, iInitialLine, iInitialColumn);
}
EditEnsureSelectionVisible(g_hwndEdit);
}
}
@ -3025,7 +3027,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (flagPasteBoard)
bLastCopyFromMe = TRUE;
int token = BeginSelUndoAction();
int token = BeginUndoAction();
if (!SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0))
{
SendMessage(g_hwndEdit, SCI_CUT, 0, 0);
@ -3034,7 +3036,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
SendMessage(g_hwndEdit, SCI_COPYALLOWLINE, 0, 0);
SendMessage(g_hwndEdit, SCI_LINEDELETE, 0, 0);
}
EndSelUndoAction(token);
EndUndoAction(token);
UpdateToolbar();
}
break;
@ -3083,7 +3085,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
int iCurrPos = (int)SendMessage(g_hwndEdit, SCI_GETCURRENTPOS, 0, 0);
int iAnchor = iCurrPos;
int token = BeginSelUndoAction();
int token = BeginUndoAction();
if (SendMessage(g_hwndEdit,SCI_GETSELECTIONEMPTY,0,0))
{
@ -3114,7 +3116,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
SendMessage(g_hwndEdit, SCI_SETSEL, iCurrPos + lstrlenA(pClip), iCurrPos);
}
EndSelUndoAction(token);
EndUndoAction(token);
LocalFree(pClip);
@ -3198,20 +3200,12 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_MOVELINEUP:
{
int token = BeginSelUndoAction();
EditMoveUp(g_hwndEdit);
EndSelUndoAction(token);
}
EditMoveUp(g_hwndEdit);
break;
case IDM_EDIT_MOVELINEDOWN:
{
int token = BeginSelUndoAction();
EditMoveDown(g_hwndEdit);
EndSelUndoAction(token);
}
EditMoveDown(g_hwndEdit);
break;
@ -3224,10 +3218,10 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
if (flagPasteBoard)
bLastCopyFromMe = TRUE;
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_LINECUT,0,0);
UpdateToolbar();
EndSelUndoAction(token);
EndUndoAction(token);
}
break;
@ -3242,45 +3236,45 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_DELETELINE:
{
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_LINEDELETE, 0, 0);
EndSelUndoAction(token);
EndUndoAction(token);
}
break;
case IDM_EDIT_DELETELINELEFT:
{
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_DELLINELEFT, 0, 0);
EndSelUndoAction(token);
EndUndoAction(token);
}
break;
case IDM_EDIT_DELETELINERIGHT:
{
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_DELLINERIGHT, 0, 0);
EndSelUndoAction(token);
EndUndoAction(token);
}
break;
case IDM_EDIT_INDENT:
{
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_TAB,0,0);
EndSelUndoAction(token);
EndUndoAction(token);
}
break;
case IDM_EDIT_UNINDENT:
{
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_BACKTAB,0,0);
EndSelUndoAction(token);
EndUndoAction(token);
}
break;
@ -3288,9 +3282,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_ENCLOSESELECTION:
if (EditEncloseSelectionDlg(hwnd,wchPrefixSelection,wchAppendSelection)) {
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditEncloseSelection(g_hwndEdit,wchPrefixSelection,wchAppendSelection);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3299,9 +3291,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_SELECTIONDUPLICATE:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_SELECTIONDUPLICATE,0,0);
EndSelUndoAction(token);
EndUndoAction(token);
EndWaitCursor();
}
break;
@ -3310,9 +3302,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_PADWITHSPACES:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditPadWithSpaces(g_hwndEdit,FALSE,FALSE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3321,9 +3311,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_STRIP1STCHAR:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditStripFirstCharacter(g_hwndEdit);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3332,9 +3320,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_STRIPLASTCHAR:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditStripLastCharacter(g_hwndEdit);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3342,10 +3328,8 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_TRIMLINES:
{
int token = BeginSelUndoAction();
BeginWaitCursor(NULL);
EditStripTrailingBlanks(g_hwndEdit, FALSE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3354,9 +3338,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_COMPRESSWS:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditCompressSpaces(g_hwndEdit);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3365,9 +3347,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_MERGEBLANKLINES:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditRemoveBlankLines(g_hwndEdit,TRUE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3376,9 +3356,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_REMOVEBLANKLINES:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditRemoveBlankLines(g_hwndEdit,FALSE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3388,9 +3366,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
if (EditModifyLinesDlg(hwnd,wchPrefixLines,wchAppendLines)) {
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditModifyLines(g_hwndEdit,wchPrefixLines,wchAppendLines);
EndSelUndoAction(token);
EndWaitCursor();
}
}
@ -3401,9 +3377,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
if (EditAlignDlg(hwnd,&iAlignMode)) {
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditAlignText(g_hwndEdit,iAlignMode);
EndSelUndoAction(token);
EndWaitCursor();
}
}
@ -3414,9 +3388,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
if (EditSortDlg(hwnd,&iSortOptions)) {
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditSortLines(g_hwndEdit,iSortOptions);
EndSelUndoAction(token);
EndWaitCursor();
}
}
@ -3432,9 +3404,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
iWrapCol = max(min(iWrapCol,512),1);
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditWrapToColumn(g_hwndEdit,iWrapCol);
EndSelUndoAction(token);
EndWaitCursor();
}
}
@ -3444,12 +3414,12 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_SPLITLINES:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
int token = BeginUndoAction();
EditEnterTargetTransaction();
SciCall_TargetFromSelection();
SendMessage(g_hwndEdit,SCI_LINESSPLIT,0,0);
EditLeaveTargetTransaction();
EndSelUndoAction(token);
EndUndoAction(token);
EndWaitCursor();
}
break;
@ -3458,9 +3428,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_JOINLINES:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditJoinLinesEx(g_hwndEdit, FALSE, TRUE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3468,9 +3436,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_JOINLN_NOSP:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditJoinLinesEx(g_hwndEdit, FALSE, FALSE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3478,9 +3444,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_JOINLINES_PARA:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditJoinLinesEx(g_hwndEdit, TRUE, TRUE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3489,9 +3453,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTUPPERCASE:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_UPPERCASE,0,0);
EndSelUndoAction(token);
EndUndoAction(token);
EndWaitCursor();
}
break;
@ -3500,9 +3464,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTLOWERCASE:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_LOWERCASE,0,0);
EndSelUndoAction(token);
EndUndoAction(token);
EndWaitCursor();
}
break;
@ -3511,9 +3475,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_INVERTCASE:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditInvertCase(g_hwndEdit);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3522,9 +3484,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_TITLECASE:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditTitleCase(g_hwndEdit);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3533,9 +3493,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_SENTENCECASE:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditSentenceCase(g_hwndEdit);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3544,9 +3502,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTTABS:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditTabsToSpaces(g_hwndEdit, iTabWidth, FALSE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3555,9 +3511,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTSPACES:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditSpacesToTabs(g_hwndEdit, iTabWidth, FALSE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3566,9 +3520,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTTABS2:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditTabsToSpaces(g_hwndEdit, iTabWidth, TRUE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3577,9 +3529,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTSPACES2:
{
BeginWaitCursor(NULL);
int token = BeginSelUndoAction();
EditSpacesToTabs(g_hwndEdit, iTabWidth, TRUE);
EndSelUndoAction(token);
EndWaitCursor();
}
break;
@ -3604,9 +3554,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
char *p = StrChrA(msz, ',');
if (p)
*p = 0;
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_REPLACESEL,0,(LPARAM)msz);
EndSelUndoAction(token);
EndUndoAction(token);
}
}
break;
@ -3651,9 +3601,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
UINT uCP = Encoding_SciGetCodePage(g_hwndEdit);
WideCharToMultiByteStrg(uCP,tchDateTime,mszBuf);
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_REPLACESEL,0,(LPARAM)mszBuf);
EndSelUndoAction(token);
EndUndoAction(token);
}
break;
@ -3683,9 +3633,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
UINT uCP = Encoding_SciGetCodePage(g_hwndEdit);
WideCharToMultiByteStrg(uCP,pszInsert,mszBuf);
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_REPLACESEL,0,(LPARAM)mszBuf);
EndSelUndoAction(token);
EndUndoAction(token);
}
break;
@ -3701,9 +3651,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
UINT uCP = Encoding_SciGetCodePage(g_hwndEdit);
char mszGuid[40 * 4]; // UTF-8 max of 4 bytes per char
if (WideCharToMultiByteStrg(uCP,pwszGuid,mszGuid)) {
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_REPLACESEL,0,(LPARAM)mszGuid);
EndSelUndoAction(token);
EndUndoAction(token);
}
}
}
@ -4690,7 +4640,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case CMD_CTRLENTER:
{
int token = BeginSelUndoAction();
int token = BeginUndoAction();
int iPos = (int)SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0);
int iLine = (int)SendMessage(g_hwndEdit,SCI_LINEFROMPOSITION,(WPARAM)iPos,0);
if (iLine <= 0) {
@ -4703,7 +4653,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
SendMessage(g_hwndEdit,SCI_GETLINEENDPOSITION,(WPARAM)(iLine - 1),0),0);
SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
}
EndSelUndoAction(token);
EndUndoAction(token);
}
break;
@ -4723,12 +4673,12 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
SendMessage(g_hwndEdit, SCI_CLEAR, 0, 0);
}
else {
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_CLEAR, 0, 0);
// possible unexpected behavior on Virtual Space Access, so:
const int iPos = SciCall_GetCurrentPos();
SendMessage(g_hwndEdit, SCI_SETSELECTION, iPos, iPos);
EndSelUndoAction(token);
EndUndoAction(token);
}
}
break;
@ -4738,9 +4688,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
if ((BOOL)SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0))
SendMessage(g_hwndEdit, SCI_DELETEBACK, 0, 0);
else {
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_DELETEBACK, 0, 0);
EndSelUndoAction(token);
EndUndoAction(token);
}
break;
@ -4764,9 +4714,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
int iIndentPos = (int)SendMessage(g_hwndEdit,SCI_GETLINEINDENTPOSITION,(WPARAM)iLine,0);
if (iPos != iAnchor) {
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_SETSEL,(WPARAM)iPos,(LPARAM)iPos);
EndSelUndoAction(token);
EndUndoAction(token);
}
else {
if (iPos == iStartPos)
@ -4789,9 +4739,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
int iEndPos = (int)SendMessage(g_hwndEdit,SCI_GETLINEENDPOSITION,(WPARAM)iLine,0);
if (iPos != iAnchor) {
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_SETSEL, (WPARAM)iPos, (LPARAM)iPos);
EndSelUndoAction(token);
EndUndoAction(token);
}
else {
if (iStartPos != iEndPos)
@ -4805,13 +4755,13 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case CMD_CTRLTAB:
{
int token = ((BOOL)SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0)) ? -1 : BeginSelUndoAction();
int token = ((BOOL)SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0)) ? -1 : BeginUndoAction();
SendMessage(g_hwndEdit,SCI_SETTABINDENTS,FALSE,0);
SendMessage(g_hwndEdit,SCI_SETUSETABS,TRUE,0);
SendMessage(g_hwndEdit,SCI_TAB,0,0);
SendMessage(g_hwndEdit,SCI_SETUSETABS,!bTabsAsSpaces,0);
SendMessage(g_hwndEdit,SCI_SETTABINDENTS,bTabIndents,0);
if (token >= 0) EndSelUndoAction(token);
if (token >= 0) EndUndoAction(token);
}
break;
@ -5106,56 +5056,32 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case CMD_STRINGIFY:
{
int token = BeginSelUndoAction();
EditEncloseSelection(g_hwndEdit,L"'",L"'");
EndSelUndoAction(token);
}
EditEncloseSelection(g_hwndEdit,L"'",L"'");
break;
case CMD_STRINGIFY2:
{
int token = BeginSelUndoAction();
EditEncloseSelection(g_hwndEdit,L"\"",L"\"");
EndSelUndoAction(token);
}
EditEncloseSelection(g_hwndEdit,L"\"",L"\"");
break;
case CMD_EMBRACE:
{
int token = BeginSelUndoAction();
EditEncloseSelection(g_hwndEdit,L"(",L")");
EndSelUndoAction(token);
}
EditEncloseSelection(g_hwndEdit,L"(",L")");
break;
case CMD_EMBRACE2:
{
int token = BeginSelUndoAction();
EditEncloseSelection(g_hwndEdit,L"[",L"]");
EndSelUndoAction(token);
}
EditEncloseSelection(g_hwndEdit,L"[",L"]");
break;
case CMD_EMBRACE3:
{
int token = BeginSelUndoAction();
EditEncloseSelection(g_hwndEdit,L"{",L"}");
EndSelUndoAction(token);
}
EditEncloseSelection(g_hwndEdit,L"{",L"}");
break;
case CMD_EMBRACE4:
{
int token = BeginSelUndoAction();
EditEncloseSelection(g_hwndEdit,L"`",L"`");
EndSelUndoAction(token);
}
EditEncloseSelection(g_hwndEdit,L"`",L"`");
break;
@ -5670,10 +5596,10 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
// check for ADDUNDOACTION step
if (scn->modificationType & SC_MOD_CONTAINER) {
if (scn->modificationType & SC_PERFORMED_UNDO) {
RestoreSelectionAction(scn->token, UNDO);
RestoreAction(scn->token, UNDO);
}
else if (scn->modificationType & SC_PERFORMED_REDO) {
RestoreSelectionAction(scn->token, REDO);
RestoreAction(scn->token, REDO);
}
}
else if (scn->modificationType & SC_MOD_CHANGESTYLE) {
@ -5802,10 +5728,10 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
StringCchCompareINA(tchIns, COUNTOF(tchIns), "</link>", -1) &&
StringCchCompareINA(tchIns, COUNTOF(tchIns), "</meta>", -1))
{
int token = BeginSelUndoAction();
int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_REPLACESEL, 0, (LPARAM)tchIns);
SendMessage(g_hwndEdit, SCI_SETSEL, iCurPos, iCurPos);
EndSelUndoAction(token);
EndUndoAction(token);
}
}
}
@ -7471,10 +7397,10 @@ void InvalidateSelections()
//=============================================================================
//
// BeginSelUndoAction()
// BeginUndoAction()
//
//
int BeginSelUndoAction()
int BeginUndoAction()
{
int token = -1;
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
@ -7497,7 +7423,7 @@ int BeginSelUndoAction()
sel.anchorPos_undo = (int)SendMessage(g_hwndEdit,SCI_GETANCHOR,0,0);
sel.currPos_undo = (int)SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0);
}
token = UndoRedoSelectionMap(-1, &sel);
token = UndoRedoActionMap(-1, &sel);
if (token >= 0) {
SendMessage(g_hwndEdit, SCI_BEGINUNDOACTION, 0, 0);
SendMessage(g_hwndEdit, SCI_ADDUNDOACTION, (WPARAM)token, 0);
@ -7509,14 +7435,14 @@ int BeginSelUndoAction()
//=============================================================================
//
// EndSelUndoAction()
// EndUndoAction()
//
//
void EndSelUndoAction(int token)
void EndUndoAction(int token)
{
if (token >= 0) {
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
if (UndoRedoSelectionMap(token,&sel) >= 0) {
if (UndoRedoActionMap(token,&sel) >= 0) {
// mode and type should not have changed
if (sel.selMode == SC_SEL_LINES) {
sel.anchorPos_redo = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONSTART,0,0);
@ -7535,7 +7461,7 @@ void EndSelUndoAction(int token)
sel.currPos_redo = (int)SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0);
}
}
UndoRedoSelectionMap(token,&sel); // set with redo action filled
UndoRedoActionMap(token,&sel); // set with redo action filled
SendMessage(g_hwndEdit, SCI_ENDUNDOACTION, 0, 0);
}
}
@ -7543,13 +7469,13 @@ void EndSelUndoAction(int token)
//=============================================================================
//
// RestoreSelectionAction()
// RestoreAction()
//
//
void RestoreSelectionAction(int token, DoAction doAct)
void RestoreAction(int token, DoAction doAct)
{
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
if (UndoRedoSelectionMap(token,&sel) >= 0) {
if (UndoRedoActionMap(token,&sel) >= 0) {
// we are inside undo/redo transaction, so do delayed PostMessage() instead of SendMessage()
int anchorPos = (doAct == UNDO ? sel.anchorPos_undo : sel.anchorPos_redo);
int currPos = (doAct == UNDO ? sel.currPos_undo : sel.currPos_redo);
@ -7585,7 +7511,7 @@ void RestoreSelectionAction(int token, DoAction doAct)
//
//
int UndoRedoSelectionMap(int token, UndoRedoSelection_t* selection)
int UndoRedoActionMap(int token, UndoRedoSelection_t* selection)
{
if (UndoRedoSelectionUTArray == NULL)
return -1;
@ -8902,7 +8828,7 @@ void CALLBACK WatchTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
//
void CALLBACK PasteBoardTimer(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
if (dwLastCopyTime > 0 && GetTickCount() - dwLastCopyTime > 200) {
if ((dwLastCopyTime > 0) && ((GetTickCount() - dwLastCopyTime) > 200)) {
if (SendMessage(g_hwndEdit,SCI_CANPASTE,0,0)) {
@ -8910,15 +8836,15 @@ void CALLBACK PasteBoardTimer(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
bAutoIndent = 0;
EditJumpTo(g_hwndEdit,-1,0);
SendMessage(g_hwndEdit,SCI_BEGINUNDOACTION,0,0);
if (SendMessage(g_hwndEdit,SCI_GETLENGTH,0,0) > 0)
SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
if (SendMessage(g_hwndEdit, SCI_GETLENGTH, 0, 0) > 0) {
SendMessage(g_hwndEdit, SCI_NEWLINE, 0, 0);
}
SendMessage(g_hwndEdit,SCI_PASTE,0,0);
SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
SendMessage(g_hwndEdit,SCI_ENDUNDOACTION,0,0);
EditEnsureSelectionVisible(g_hwndEdit);
bAutoIndent = bAutoIndent2;
}
dwLastCopyTime = 0;
}

View File

@ -150,10 +150,10 @@ void UpdateUI();
void InvalidateSelections();
int BeginSelUndoAction();
void EndSelUndoAction(int);
void RestoreSelectionAction(int,DoAction);
int UndoRedoSelectionMap(int,UndoRedoSelection_t*);
int BeginUndoAction();
void EndUndoAction(int);
void RestoreAction(int,DoAction);
int UndoRedoActionMap(int,UndoRedoSelection_t*);
void OpenHotSpotURL(int, BOOL);