diff --git a/src/Edit.c b/src/Edit.c index 6440db3e7..794828ca9 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -161,7 +161,7 @@ HWND EditCreate(HWND hwndParent) SendMessage(hwnd,SCI_SETADDITIONALCARETSBLINK,FALSE,0); SendMessage(hwnd,SCI_SETADDITIONALCARETSVISIBLE,FALSE,0); SendMessage(hwnd,SCI_SETMOUSEWHEELCAPTURES,FALSE,0); - SendMessage(hwnd, SCI_SETVIRTUALSPACEOPTIONS, (bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_NP3_SPACE_OPT), 0); + SendMessage(hwnd, SCI_SETVIRTUALSPACEOPTIONS, (bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION), 0); SendMessage(hwnd,SCI_ASSIGNCMDKEY,(SCK_NEXT + (SCMOD_CTRL << 16)),SCI_PARADOWN); SendMessage(hwnd,SCI_ASSIGNCMDKEY,(SCK_PRIOR + (SCMOD_CTRL << 16)),SCI_PARAUP); @@ -4494,14 +4494,18 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA case IDC_FINDTEXT: case IDC_REPLACETEXT: { - BOOL bEnable = (GetWindowTextLengthW(GetDlgItem(hwnd,IDC_FINDTEXT)) || - CB_ERR != SendDlgItemMessage(hwnd,IDC_FINDTEXT,CB_GETCURSEL,0,0)); + BOOL bEnableF = (GetWindowTextLengthW(GetDlgItem(hwnd,IDC_FINDTEXT)) || + CB_ERR != SendDlgItemMessage(hwnd,IDC_FINDTEXT,CB_GETCURSEL,0,0)); - EnableWindow(GetDlgItem(hwnd,IDOK),bEnable); - EnableWindow(GetDlgItem(hwnd,IDC_FINDPREV),bEnable); - EnableWindow(GetDlgItem(hwnd,IDC_REPLACE),bEnable); - EnableWindow(GetDlgItem(hwnd,IDC_REPLACEALL),bEnable); - EnableWindow(GetDlgItem(hwnd,IDC_REPLACEINSEL),bEnable); + BOOL bEnableR = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_REPLACETEXT)) || + CB_ERR != SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_GETCURSEL, 0, 0)); + + EnableWindow(GetDlgItem(hwnd,IDOK),bEnableF); + EnableWindow(GetDlgItem(hwnd,IDC_FINDPREV),bEnableF); + EnableWindow(GetDlgItem(hwnd,IDC_REPLACE),bEnableF); + EnableWindow(GetDlgItem(hwnd,IDC_REPLACEALL),bEnableF); + EnableWindow(GetDlgItem(hwnd,IDC_REPLACEINSEL),bEnableF); + EnableWindow(GetDlgItem(hwnd,IDC_SWAPSTRG),bEnableF || bEnableR); if (HIWORD(wParam) == CBN_CLOSEUP) { LONG lSelEnd; @@ -4557,13 +4561,15 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA cpLastFind = uCPEdit; if (!bSwitchedFindReplace && - !GetDlgItemTextA2W(uCPEdit,hwnd,IDC_FINDTEXT,lpefr->szFind,COUNTOF(lpefr->szFind))) { - + !GetDlgItemTextA2W(uCPEdit,hwnd,IDC_FINDTEXT,lpefr->szFind,COUNTOF(lpefr->szFind))) + { EnableWindow(GetDlgItem(hwnd,IDOK),FALSE); EnableWindow(GetDlgItem(hwnd,IDC_FINDPREV),FALSE); EnableWindow(GetDlgItem(hwnd,IDC_REPLACE),FALSE); EnableWindow(GetDlgItem(hwnd,IDC_REPLACEALL),FALSE); EnableWindow(GetDlgItem(hwnd,IDC_REPLACEINSEL),FALSE); + if (!GetDlgItemTextA2W(uCPEdit, hwnd, IDC_REPLACETEXT, lpefr->szReplace, COUNTOF(lpefr->szReplace))) + EnableWindow(GetDlgItem(hwnd,IDC_SWAPSTRG),FALSE); return TRUE; } @@ -4698,6 +4704,18 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA DestroyWindow(hwnd); break; + case IDC_SWAPSTRG: + { + WCHAR wszFind[1024] = { L'\0' }; + WCHAR wszRepl[1024] = { L'\0' }; + GetDlgItemTextW(hwnd, IDC_FINDTEXT, wszFind, COUNTOF(wszFind)); + GetDlgItemTextW(hwnd, IDC_REPLACETEXT, wszRepl, COUNTOF(wszRepl)); + SetDlgItemTextW(hwnd, IDC_FINDTEXT, wszRepl); + SetDlgItemTextW(hwnd, IDC_REPLACETEXT, wszFind); + PostMessage(hwnd, WM_COMMAND, MAKELONG(IDC_FINDTEXT, 1), 0); + } + break; + case IDACC_FIND: PostMessage(GetParent(hwnd),WM_COMMAND,MAKELONG(IDM_EDIT_FIND,1),0); break; @@ -4736,7 +4754,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA CheckDlgButton(hwnd,IDC_FINDTRANSFORMBS,BST_UNCHECKED); PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,IDC_FINDTEXT)),1); break; - } return TRUE; @@ -5352,6 +5369,7 @@ void EditMarkAll(HWND hwnd, BOOL bMarkOccurrencesMatchCase, BOOL bMarkOccurrence // clear existing marker indicators SendMessage(hwnd, SCI_SETINDICATORCURRENT, INDIC_NP3_MARK_OCCURANCE, 0); SendMessage(hwnd, SCI_INDICATORCLEARRANGE, 0, iTextLen); + iMarkOccurrencesCount = -1; // if nothing selected or multiple lines are selected exit if ((iSelCount == 0) || @@ -5401,7 +5419,6 @@ void EditMarkAll(HWND hwnd, BOOL bMarkOccurrencesMatchCase, BOOL bMarkOccurrence LocalFree(pszText); UpdateStatusbar(); - iMarkOccurrencesCount = 0; return; } diff --git a/src/Helpers.h b/src/Helpers.h index 441aae1f3..330f4697a 100644 --- a/src/Helpers.h +++ b/src/Helpers.h @@ -97,9 +97,6 @@ __inline BOOL IniSectionSetBool(LPWSTR lpCachedIniSection, LPCWSTR lpName, BOOL #define IsWinServer() IsWindowsServer() // Indicates if the current OS is a Windows Server release. // Applications that need to distinguish between server and client versions of Windows should call this function. -#define SCVS_NP3_SPACE_OPT (SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART) - - enum BufferSizes { MICRO_BUFFER = 32, MINI_BUFFER = 64, diff --git a/src/Notepad3.c b/src/Notepad3.c index 76fc41a01..548077e4c 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -1148,13 +1148,10 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) { if (!bDenyVirtualSpaceAccess) { - if (GetAsyncKeyState(VK_MENU) & SHRT_MIN) { // ALT-KEY DOWN - //SendMessage(hwndEdit,SCI_CLEARSELECTIONS,0,0); - SendMessage(hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, (SCVS_NP3_SPACE_OPT | SCVS_USERACCESSIBLE), 0); - } - else { - SendMessage(hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, SCVS_NP3_SPACE_OPT, 0); - } + if (GetAsyncKeyState(VK_MENU) & SHRT_MIN) // ALT-KEY DOWN + SendMessage(hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, (SCVS_RECTANGULARSELECTION | SCVS_USERACCESSIBLE), 0); + else + SendMessage(hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, SCVS_RECTANGULARSELECTION, 0); } switch(umsg) @@ -2968,10 +2965,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) { if (flagPasteBoard) bLastCopyFromMe = TRUE; - - int token = BeginSelUndoAction(); SendMessage(hwndEdit, SCI_COPYALLOWLINE, 0, 0); - EndSelUndoAction(token); UpdateToolbar(); } break; @@ -2981,10 +2975,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) { if (flagPasteBoard) bLastCopyFromMe = TRUE; - - int token = BeginSelUndoAction(); SendMessage(hwndEdit,SCI_COPYRANGE,0,SendMessage(hwndEdit,SCI_GETLENGTH,0,0)); - EndSelUndoAction(token); UpdateToolbar(); } break; @@ -2994,10 +2985,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) { if (flagPasteBoard) bLastCopyFromMe = TRUE; - - int token = BeginSelUndoAction(); EditCopyAppend(hwndEdit); - EndSelUndoAction(token); UpdateToolbar(); } break; @@ -3013,8 +3001,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) if (!pClip) break; // recoding canceled - int token = BeginSelUndoAction(); - if (SendMessage(hwndEdit,SCI_GETSELECTIONEMPTY,0,0)) { int iCurPos = (int)SendMessage(hwndEdit,SCI_GETCURRENTPOS,0,0); @@ -3033,6 +3019,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) } else { + int token = BeginSelUndoAction(); int iCurrPos = (int)SendMessage(hwndEdit, SCI_GETCURRENTPOS, 0, 0); int iAnchor = (int)SendMessage(hwndEdit, SCI_GETANCHOR, 0, 0); @@ -3051,8 +3038,9 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) else SendMessage(hwndEdit, SCI_SETSEL, iCurrPos + lstrlenA(pClip), iCurrPos); } + + EndSelUndoAction(token); } - EndSelUndoAction(token); LocalFree(pClip); UpdateToolbar(); UpdateStatusbar(); @@ -3078,17 +3066,13 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) case IDM_EDIT_SELECTALL: { - 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)) { @@ -3129,14 +3113,12 @@ 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); @@ -3145,7 +3127,6 @@ 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; @@ -3169,7 +3150,6 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) { if (flagPasteBoard) bLastCopyFromMe = TRUE; - int token = BeginSelUndoAction(); SendMessage(hwndEdit,SCI_LINECUT,0,0); UpdateToolbar(); @@ -3181,24 +3161,35 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) case IDM_EDIT_COPYLINE: if (flagPasteBoard) bLastCopyFromMe = TRUE; - SendMessage(hwndEdit,SCI_LINECOPY,0,0); UpdateToolbar(); break; case IDM_EDIT_DELETELINE: - SendMessage(hwndEdit,SCI_LINEDELETE,0,0); + { + int token = BeginSelUndoAction(); + SendMessage(hwndEdit, SCI_LINEDELETE, 0, 0); + EndSelUndoAction(token); + } break; case IDM_EDIT_DELETELINELEFT: - SendMessage(hwndEdit,SCI_DELLINELEFT,0,0); + { + int token = BeginSelUndoAction(); + SendMessage(hwndEdit, SCI_DELLINELEFT, 0, 0); + EndSelUndoAction(token); + } break; case IDM_EDIT_DELETELINERIGHT: - SendMessage(hwndEdit,SCI_DELLINERIGHT,0,0); + { + int token = BeginSelUndoAction(); + SendMessage(hwndEdit, SCI_DELLINERIGHT, 0, 0); + EndSelUndoAction(token); + } break; @@ -4225,6 +4216,7 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) // clear all marks SendMessage(hwndEdit, SCI_SETINDICATORCURRENT, INDIC_NP3_MARK_OCCURANCE, 0); SendMessage(hwndEdit, SCI_INDICATORCLEARRANGE, 0, (int)SendMessage(hwndEdit,SCI_GETLENGTH,0,0)); + iMarkOccurrencesCount = -1; break; case IDM_VIEW_MARKOCCURRENCES_RED: diff --git a/src/Notepad3.rc b/src/Notepad3.rc index d0cb0633d..911332e04 100644 Binary files a/src/Notepad3.rc and b/src/Notepad3.rc differ diff --git a/src/resource.h b/src/resource.h index b8f6cc227..330101953 100644 --- a/src/resource.h +++ b/src/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by Notepad3.rc +// Von Microsoft Visual C++ generierte Includedatei. +// Verwendet durch Notepad3.rc // #define IDR_RT_MANIFEST 1 #define IDR_MAINWND 100 @@ -123,6 +123,7 @@ #define IDC_SCI_VERSION 155 #define IDR_MAINWND2 156 #define IDC_REMOVE 157 +#define IDC_SWAPSTRG 158 #define IDACC_FIND 200 #define IDACC_REPLACE 201 #define IDACC_SAVEPOS 202 @@ -468,7 +469,7 @@ #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 600 #define _APS_NEXT_COMMAND_VALUE 700 -#define _APS_NEXT_CONTROL_VALUE 800 +#define _APS_NEXT_CONTROL_VALUE 801 #define _APS_NEXT_SYMED_VALUE 900 #endif #endif