comparison foosdk/sdk/libPPUI/wtl-pp.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
comparison
equal deleted inserted replaced
0:e9bb126753e7 1:20d02a178406
1 #include "stdafx.h"
2 #include "wtl-pp.h"
3
4 void CEditPPHooks::DeleteLastWord( CEdit wnd, bool bForward ) {
5 if ( wnd.GetWindowLong(GWL_STYLE) & ES_READONLY ) return;
6 CString buffer;
7 if ( wnd.GetWindowText(buffer) <= 0 ) return;
8 const int len = buffer.GetLength();
9 int selStart = len, selEnd = len;
10 wnd.GetSel(selStart, selEnd);
11 if ( selStart < 0 || selStart > len ) selStart = len; // sanity
12 if ( selEnd < selStart ) selEnd = selStart; // sanity
13 int work = selStart;
14 if ( work == selEnd ) {
15 // Only do our stuff if there is nothing yet selected. Otherwise first delete selection.
16 if (bForward) {
17 // go forward (ctrl+del)
18 if (work < len && isSpecial(buffer[work])) { // linebreaks etc?
19 do ++ work; while( work < len && isSpecial(buffer[work]));
20 } else {
21 // delete apparent spacing
22 while ( work < len && isWordDelimiter(buffer[work])) ++ work;
23 // delete apparent word
24 while ( work < len && (!isWordDelimiter(buffer[work]) && !isSpecial(buffer[work]))) ++ work;
25 }
26
27 if ( selEnd < work ) {
28 wnd.SetSel(selEnd, work, TRUE );
29 wnd.ReplaceSel( TEXT(""), TRUE );
30 }
31 } else {
32 // go backward (ctrl+backspace)
33 if ( work > 0 && isSpecial(buffer[work-1])) { // linebreaks etc?
34 do --work; while( work > 0 && isSpecial(buffer[work-1]));
35 } else {
36 // delete apparent spacing
37 while( work > 0 && isWordDelimiter(buffer[work-1]) ) --work;
38 // delete apparent word
39 while( work > 0 && (!isWordDelimiter(buffer[work-1]) && !isSpecial(buffer[work-1]))) --work;
40 }
41 if ( selEnd > work ) {
42 wnd.SetSel(work, selEnd, TRUE );
43 wnd.ReplaceSel( TEXT(""), TRUE );
44 }
45 }
46 }
47 }