0000: 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 66 78 #include "stdafx
0010: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 69 .h"..#include "i
0020: 70 5f 76 69 65 77 2e 68 22 0d 0a 75 73 69 6e 67 p_view.h"..using
0030: 20 6e 61 6d 65 73 70 61 63 65 20 65 64 69 74 77 namespace editw
0040: 69 6e 67 3b 0d 0a 75 73 69 6e 67 20 6e 61 6d 65 ing;..using name
0050: 73 70 61 63 65 20 65 64 69 74 77 69 6e 67 3a 3a space editwing::
0060: 76 69 65 77 3b 0d 0a 75 73 69 6e 67 20 64 6f 63 view;..using doc
0070: 3a 3a 49 6e 73 65 72 74 3b 0d 0a 75 73 69 6e 67 ::Insert;..using
0080: 20 64 6f 63 3a 3a 44 65 6c 65 74 65 3b 0d 0a 75 doc::Delete;..u
0090: 73 69 6e 67 20 64 6f 63 3a 3a 52 65 70 6c 61 63 sing doc::Replac
00a0: 65 3b 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d e;........//====
00b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
00c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
00d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
00e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
00f0: 3d 3d 3d 3d 3d 0d 0a 2f 2f 2d 2d 2d 2d 20 69 70 =====..//---- ip
0100: 5f 63 75 72 73 6f 72 2e 63 70 70 20 83 4a 81 5b _cursor.cpp .J.[
0110: 83 5c 83 8b 83 52 83 93 83 67 83 8d 81 5b 83 8b .\...R...g...[..
0120: 0d 0a 2f 2f 0d 0a 2f 2f 09 09 83 4a 83 8c 83 62 ..//..//...J...b
0130: 83 67 82 f0 95 5c 8e a6 82 b5 82 bd 82 e8 49 4d .g...\........IM
0140: 45 82 c9 93 4b 93 96 82 c9 91 ce 89 9e 82 b5 82 E...K...........
0150: bd 82 e8 90 46 81 58 81 42 0d 0a 2f 2f 09 09 82 ....F.X.B..//...
0160: c6 82 b1 82 eb 82 c5 8b 5e 96 e2 82 c8 82 cc 82 ........^.......
0170: be 82 aa 20 43 61 72 65 74 20 82 c1 82 c4 81 75 ... Caret .....u
0180: 83 4a 83 8c 83 62 83 67 81 76 82 c6 0d 0a 2f 2f .J...b.g.v....//
0190: 09 09 93 c7 82 de 82 cc 82 a9 81 75 83 4c 83 83 ...........u.L..
01a0: 83 8c 83 62 83 67 81 76 82 c6 93 c7 82 de 82 cc ...b.g.v........
01b0: 82 a9 81 48 0d 0a 2f 2f 0d 0a 2f 2f 2d 2d 2d 2d ...H..//..//----
01c0: 20 69 70 5f 74 65 78 74 2e 63 70 70 20 20 20 95 ip_text.cpp .
01d0: b6 8e 9a 97 f1 91 80 8d ec 81 45 91 bc 0d 0a 2f ..........E..../
01e0: 2f 2d 2d 2d 2d 20 69 70 5f 70 61 72 73 65 2e 63 /---- ip_parse.c
01f0: 70 70 20 20 83 4c 81 5b 83 8f 81 5b 83 68 89 f0 pp .L.[...[.h..
0200: 90 cd 0d 0a 2f 2f 2d 2d 2d 2d 20 69 70 5f 77 72 ....//---- ip_wr
0210: 61 70 2e 63 70 70 20 20 20 90 dc 82 e8 95 d4 82 ap.cpp .......
0220: b5 0d 0a 2f 2f 2d 2d 2d 2d 20 69 70 5f 73 63 72 ...//---- ip_scr
0230: 6f 6c 6c 2e 63 70 70 20 83 58 83 4e 83 8d 81 5b oll.cpp .X.N...[
0240: 83 8b 0d 0a 2f 2f 2d 2d 2d 2d 20 69 70 5f 64 72 ....//---- ip_dr
0250: 61 77 2e 63 70 70 20 20 20 95 60 89 e6 81 45 91 aw.cpp .`...E.
0260: bc 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ...//===========
0270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0290: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
02a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a ==============..
02b0: 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d ......//--------
02c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0300: 2d 0d 0a 2f 2f 20 43 61 72 65 74 90 a7 8c e4 97 -..// Caret.....
0310: 70 83 89 83 62 83 70 81 5b 0d 0a 2f 2f 2d 2d 2d p...b.p.[..//---
0320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0360: 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 63 6c 61 73 73 20 ------....class
0370: 65 64 69 74 77 69 6e 67 3a 3a 76 69 65 77 3a 3a editwing::view::
0380: 43 61 72 65 74 20 3a 20 70 75 62 6c 69 63 20 4f Caret : public O
0390: 62 6a 65 63 74 0d 0a 7b 0d 0a 70 75 62 6c 69 63 bject..{..public
03a0: 3a 0d 0a 0d 0a 09 43 61 72 65 74 28 20 48 57 4e :.....Caret( HWN
03b0: 44 20 77 6e 64 20 29 0d 0a 09 09 3a 20 68 77 6e D wnd )....: hwn
03c0: 64 5f 28 20 77 6e 64 20 29 2c 20 63 72 65 61 74 d_( wnd ), creat
03d0: 65 64 5f 28 20 66 61 6c 73 65 20 29 20 7b 7d 0d ed_( false ) {}.
03e0: 0a 0d 0a 09 7e 43 61 72 65 74 28 29 0d 0a 09 09 ....~Caret()....
03f0: 7b 20 44 65 73 74 72 6f 79 28 29 3b 20 7d 0d 0a { Destroy(); }..
0400: 0d 0a 09 76 6f 69 64 20 53 68 6f 77 28 29 0d 0a ...void Show()..
0410: 09 09 7b 20 69 66 28 20 63 72 65 61 74 65 64 5f ..{ if( created_
0420: 20 29 20 3a 3a 53 68 6f 77 43 61 72 65 74 28 20 ) ::ShowCaret(
0430: 68 77 6e 64 5f 20 29 3b 20 7d 0d 0a 0d 0a 09 76 hwnd_ ); }.....v
0440: 6f 69 64 20 48 69 64 65 28 29 0d 0a 09 09 7b 20 oid Hide()....{
0450: 69 66 28 20 63 72 65 61 74 65 64 5f 20 29 20 3a if( created_ ) :
0460: 3a 48 69 64 65 43 61 72 65 74 28 20 68 77 6e 64 :HideCaret( hwnd
0470: 5f 20 29 3b 20 7d 0d 0a 0d 0a 09 76 6f 69 64 20 _ ); }.....void
0480: 44 65 73 74 72 6f 79 28 29 0d 0a 09 09 7b 20 69 Destroy()....{ i
0490: 66 28 20 63 72 65 61 74 65 64 5f 20 29 20 3a 3a f( created_ ) ::
04a0: 44 65 73 74 72 6f 79 43 61 72 65 74 28 29 2c 20 DestroyCaret(),
04b0: 63 72 65 61 74 65 64 5f 3d 66 61 6c 73 65 3b 20 created_=false;
04c0: 7d 0d 0a 0d 0a 09 76 6f 69 64 20 53 65 74 50 6f }.....void SetPo
04d0: 73 28 20 69 6e 74 20 78 2c 20 69 6e 74 20 79 20 s( int x, int y
04e0: 29 0d 0a 09 09 7b 20 69 66 28 20 63 72 65 61 74 )....{ if( creat
04f0: 65 64 5f 20 29 20 3a 3a 53 65 74 43 61 72 65 74 ed_ ) ::SetCaret
0500: 50 6f 73 28 78 2c 79 29 2c 20 69 6d 65 28 29 2e Pos(x,y), ime().
0510: 53 65 74 50 6f 73 28 68 77 6e 64 5f 2c 78 2c 79 SetPos(hwnd_,x,y
0520: 29 3b 20 7d 0d 0a 0d 0a 09 76 6f 69 64 20 43 72 ); }.....void Cr
0530: 65 61 74 65 28 20 69 6e 74 20 48 2c 20 69 6e 74 eate( int H, int
0540: 20 57 2c 20 63 6f 6e 73 74 20 4c 4f 47 46 4f 4e W, const LOGFON
0550: 54 26 20 6c 66 20 29 0d 0a 09 09 7b 0d 0a 09 09 T& lf )....{....
0560: 09 69 66 28 20 63 72 65 61 74 65 64 5f 20 29 0d .if( created_ ).
0570: 0a 09 09 09 09 3a 3a 44 65 73 74 72 6f 79 43 61 .....::DestroyCa
0580: 72 65 74 28 29 3b 0d 0a 09 09 09 63 72 65 61 74 ret();.....creat
0590: 65 64 5f 20 3d 20 74 72 75 65 3b 0d 0a 09 09 09 ed_ = true;.....
05a0: 3a 3a 43 72 65 61 74 65 43 61 72 65 74 28 20 68 ::CreateCaret( h
05b0: 77 6e 64 5f 2c 20 4e 55 4c 4c 2c 20 57 2c 20 48 wnd_, NULL, W, H
05c0: 20 29 3b 0d 0a 09 09 09 69 6d 65 28 29 2e 53 65 );.....ime().Se
05d0: 74 46 6f 6e 74 28 20 68 77 6e 64 5f 2c 20 6c 66 tFont( hwnd_, lf
05e0: 20 29 3b 0d 0a 09 09 09 53 68 6f 77 28 29 3b 0d );.....Show();.
05f0: 0a 09 09 7d 0d 0a 0d 0a 09 62 6f 6f 6c 20 69 73 ...}.....bool is
0600: 41 6c 69 76 65 28 29 0d 0a 09 09 7b 20 72 65 74 Alive()....{ ret
0610: 75 72 6e 20 63 72 65 61 74 65 64 5f 3b 20 7d 0d urn created_; }.
0620: 0a 0d 0a 09 48 57 4e 44 20 68 77 6e 64 28 29 0d ....HWND hwnd().
0630: 0a 09 09 7b 20 72 65 74 75 72 6e 20 68 77 6e 64 ...{ return hwnd
0640: 5f 3b 20 7d 0d 0a 0d 0a 70 72 69 76 61 74 65 3a _; }....private:
0650: 0d 0a 0d 0a 09 63 6f 6e 73 74 20 48 57 4e 44 20 .....const HWND
0660: 68 77 6e 64 5f 3b 0d 0a 09 62 6f 6f 6c 20 20 20 hwnd_;...bool
0670: 20 63 72 65 61 74 65 64 5f 3b 0d 0a 7d 3b 0d 0a created_;..};..
0680: 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d ......//--------
0690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
06a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
06b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
06c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
06d0: 2d 0d 0a 2f 2f 20 83 4a 81 5b 83 5c 83 8b 8f 89 -..// .J.[.\....
06e0: 8a fa 89 bb 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d ......//--------
06f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0730: 2d 0d 0a 0d 0a 43 75 72 73 6f 72 3a 3a 43 75 72 -....Cursor::Cur
0740: 73 6f 72 28 20 48 57 4e 44 20 77 6e 64 2c 20 56 sor( HWND wnd, V
0750: 69 65 77 49 6d 70 6c 26 20 76 77 2c 20 64 6f 63 iewImpl& vw, doc
0760: 3a 3a 44 6f 63 49 6d 70 6c 26 20 64 63 20 29 0d ::DocImpl& dc ).
0770: 0a 09 3a 20 76 69 65 77 5f 20 20 20 28 20 76 77 ..: view_ ( vw
0780: 20 29 0d 0a 09 2c 20 64 6f 63 5f 20 20 20 20 28 )..., doc_ (
0790: 20 64 63 20 29 0d 0a 09 2c 20 70 45 76 48 61 6e dc )..., pEvHan
07a0: 5f 20 28 20 26 64 65 66 61 75 6c 74 48 61 6e 64 _ ( &defaultHand
07b0: 6c 65 72 5f 20 29 0d 0a 09 2c 20 63 61 72 65 74 ler_ )..., caret
07c0: 5f 20 20 28 20 6e 65 77 20 43 61 72 65 74 28 77 _ ( new Caret(w
07d0: 6e 64 29 20 29 0d 0a 09 2c 20 62 49 6e 73 5f 20 nd) )..., bIns_
07e0: 20 20 28 20 74 72 75 65 20 29 0d 0a 09 2c 20 62 ( true )..., b
07f0: 52 4f 5f 20 20 20 20 28 20 66 61 6c 73 65 20 29 RO_ ( false )
0800: 0d 0a 09 2c 20 74 69 6d 65 72 49 44 5f 28 20 30 ..., timerID_( 0
0810: 20 29 0d 0a 09 2c 20 6c 69 6e 65 53 65 6c 65 63 )..., lineSelec
0820: 74 4d 6f 64 65 5f 28 20 66 61 6c 73 65 20 29 0d tMode_( false ).
0830: 0a 7b 0d 0a 09 2f 2f 20 82 c4 82 ab 82 c6 81 5b .{...// .......[
0840: 82 c9 8f ee 95 f1 8f 89 8a fa 89 bb 0d 0a 09 3a ...............:
0850: 3a 53 79 73 74 65 6d 50 61 72 61 6d 65 74 65 72 :SystemParameter
0860: 73 49 6e 66 6f 28 20 53 50 49 5f 47 45 54 4b 45 sInfo( SPI_GETKE
0870: 59 42 4f 41 52 44 53 50 45 45 44 2c 20 30 2c 20 YBOARDSPEED, 0,
0880: 26 6b 65 79 52 65 70 54 69 6d 65 5f 2c 20 30 20 &keyRepTime_, 0
0890: 29 3b 0d 0a 09 63 75 72 5f 2e 74 6c 20 3d 20 63 );...cur_.tl = c
08a0: 75 72 5f 2e 61 64 20 3d 20 63 75 72 5f 2e 76 6c ur_.ad = cur_.vl
08b0: 20 3d 20 63 75 72 5f 2e 72 6c 20 3d 20 30 3b 0d = cur_.rl = 0;.
08c0: 0a 09 63 75 72 5f 2e 76 78 20 3d 20 63 75 72 5f ..cur_.vx = cur_
08d0: 2e 72 78 20 3d 20 30 3b 20 73 65 6c 5f 20 3d 20 .rx = 0; sel_ =
08e0: 63 75 72 5f 3b 0d 0a 7d 0d 0a 0d 0a 43 75 72 73 cur_;..}....Curs
08f0: 6f 72 3a 3a 7e 43 75 72 73 6f 72 28 29 0d 0a 7b or::~Cursor()..{
0900: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 ..}....void Curs
0910: 6f 72 3a 3a 41 64 64 48 61 6e 64 6c 65 72 28 20 or::AddHandler(
0920: 43 75 72 45 76 48 61 6e 64 6c 65 72 2a 20 65 76 CurEvHandler* ev
0930: 20 29 0d 0a 7b 0d 0a 09 70 45 76 48 61 6e 5f 20 )..{...pEvHan_
0940: 3d 20 65 76 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 = ev;..}....void
0950: 20 43 75 72 73 6f 72 3a 3a 44 65 6c 48 61 6e 64 Cursor::DelHand
0960: 6c 65 72 28 20 43 75 72 45 76 48 61 6e 64 6c 65 ler( CurEvHandle
0970: 72 2a 20 65 76 20 29 0d 0a 7b 0d 0a 09 69 66 28 r* ev )..{...if(
0980: 20 65 76 20 3d 3d 20 70 45 76 48 61 6e 5f 20 29 ev == pEvHan_ )
0990: 0d 0a 09 09 70 45 76 48 61 6e 5f 20 3d 20 26 64 ....pEvHan_ = &d
09a0: 65 66 61 75 6c 74 48 61 6e 64 6c 65 72 5f 3b 0d efaultHandler_;.
09b0: 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d .}........//----
09c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
09d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
09e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
09f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a00: 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 83 77 83 8b 83 70 -----..// .w...p
0a10: 81 5b 8a d6 90 94 8c 51 0d 0a 2f 2f 2d 2d 2d 2d .[.....Q..//----
0a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a60: 2d 2d 2d 2d 2d 0d 0a 0d 0a 76 6f 69 64 20 43 75 -----....void Cu
0a70: 72 73 6f 72 3a 3a 55 70 64 61 74 65 43 61 72 65 rsor::UpdateCare
0a80: 74 50 6f 73 28 29 0d 0a 7b 0d 0a 09 2f 2f 20 83 tPos()..{...// .
0a90: 81 83 93 83 6f 95 cf 90 94 82 cc 92 6c 82 f0 8c ....o.......l...
0aa0: b3 82 c9 81 41 8e c0 8d db 82 c9 43 61 72 65 74 ....A......Caret
0ab0: 82 f0 93 ae 82 a9 82 b7 8f 88 97 9d 0d 0a 09 69 ...............i
0ac0: 6e 74 20 78 2c 20 79 3b 0d 0a 09 76 69 65 77 5f nt x, y;...view_
0ad0: 2e 47 65 74 4f 72 69 67 69 6e 28 20 26 78 2c 20 .GetOrigin( &x,
0ae0: 26 79 20 29 3b 0d 0a 09 78 20 2b 3d 20 63 75 72 &y );...x += cur
0af0: 5f 2e 76 78 3b 0d 0a 09 79 20 2b 3d 20 63 75 72 _.vx;...y += cur
0b00: 5f 2e 76 6c 20 2a 20 76 69 65 77 5f 2e 66 6e 74 _.vl * view_.fnt
0b10: 28 29 2e 48 28 29 3b 0d 0a 0d 0a 09 2f 2f 20 8d ().H();.....// .
0b20: 73 94 d4 8d 86 83 5d 81 5b 83 93 82 c9 43 61 72 s.....].[....Car
0b30: 65 74 82 aa 82 a0 82 c1 82 c4 82 e0 8d a2 82 e9 et..............
0b40: 82 cc 82 c5 8d b6 82 c9 92 c7 82 a2 82 e2 82 e9 ................
0b50: 0d 0a 09 69 66 28 20 30 3c 78 20 26 26 20 78 3c ...if( 0<x && x<
0b60: 76 69 65 77 5f 2e 6c 65 66 74 28 29 20 29 0d 0a view_.left() )..
0b70: 09 09 78 20 3d 20 2d 76 69 65 77 5f 2e 6c 65 66 ..x = -view_.lef
0b80: 74 28 29 3b 0d 0a 0d 0a 09 2f 2f 20 83 5a 83 62 t();.....// .Z.b
0b90: 83 67 0d 0a 09 63 61 72 65 74 5f 2d 3e 53 65 74 .g...caret_->Set
0ba0: 50 6f 73 28 20 78 2c 20 79 20 29 3b 0d 0a 09 70 Pos( x, y );...p
0bb0: 45 76 48 61 6e 5f 2d 3e 6f 6e 5f 6d 6f 76 65 28 EvHan_->on_move(
0bc0: 20 63 75 72 5f 2c 20 73 65 6c 5f 20 29 3b 0d 0a cur_, sel_ );..
0bd0: 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 }....void Cursor
0be0: 3a 3a 52 65 64 72 61 77 28 20 63 6f 6e 73 74 20 ::Redraw( const
0bf0: 56 50 6f 73 26 20 73 2c 20 63 6f 6e 73 74 20 56 VPos& s, const V
0c00: 50 6f 73 26 20 65 20 29 0d 0a 7b 0d 0a 09 69 6e Pos& e )..{...in
0c10: 74 20 78 2c 20 79 3b 20 2f 2f 20 8c b4 93 5f 0d t x, y; // ..._.
0c20: 0a 09 76 69 65 77 5f 2e 47 65 74 4f 72 69 67 69 ..view_.GetOrigi
0c30: 6e 28 20 26 78 2c 20 26 79 20 29 3b 0d 0a 0d 0a n( &x, &y );....
0c40: 09 50 4f 49 4e 54 20 73 70 20 3d 20 7b 78 2b 73 .POINT sp = {x+s
0c50: 2e 76 78 2c 20 79 2b 73 2e 76 6c 2a 76 69 65 77 .vx, y+s.vl*view
0c60: 5f 2e 66 6e 74 28 29 2e 48 28 29 7d 3b 0d 0a 09 _.fnt().H()};...
0c70: 50 4f 49 4e 54 20 65 70 20 3d 20 7b 78 2b 65 2e POINT ep = {x+e.
0c80: 76 78 2c 20 79 2b 65 2e 76 6c 2a 76 69 65 77 5f vx, y+e.vl*view_
0c90: 2e 66 6e 74 28 29 2e 48 28 29 7d 3b 0d 0a 09 69 .fnt().H()};...i
0ca0: 66 28 20 73 20 3e 20 65 20 29 20 2f 2f 20 53 77 f( s > e ) // Sw
0cb0: 61 70 0d 0a 09 09 73 70 2e 78 5e 3d 65 70 2e 78 ap....sp.x^=ep.x
0cc0: 2c 20 65 70 2e 78 5e 3d 73 70 2e 78 2c 20 73 70 , ep.x^=sp.x, sp
0cd0: 2e 78 5e 3d 65 70 2e 78 2c 0d 0a 09 09 73 70 2e .x^=ep.x,....sp.
0ce0: 79 5e 3d 65 70 2e 79 2c 20 65 70 2e 79 5e 3d 73 y^=ep.y, ep.y^=s
0cf0: 70 2e 79 2c 20 73 70 2e 79 5e 3d 65 70 2e 79 3b p.y, sp.y^=ep.y;
0d00: 0d 0a 09 65 70 2e 78 2b 3d 32 3b 0d 0a 0d 0a 09 ...ep.x+=2;.....
0d10: 2f 2f 20 8e e8 94 b2 82 ab 31 36 62 69 74 83 60 // ......16bit.`
0d20: 83 46 83 62 83 4e 93 fc 82 e8 81 63 0d 0a 09 63 .F.b.N.....c...c
0d30: 6f 6e 73 74 20 6c 6f 6e 67 20 4c 46 54 20 3d 20 onst long LFT =
0d40: 76 69 65 77 5f 2e 6c 65 66 74 28 29 3b 0d 0a 09 view_.left();...
0d50: 63 6f 6e 73 74 20 6c 6f 6e 67 20 52 48 54 20 3d const long RHT =
0d60: 20 76 69 65 77 5f 2e 72 69 67 68 74 28 29 3b 0d view_.right();.
0d70: 0a 09 63 6f 6e 73 74 20 6c 6f 6e 67 20 54 4f 50 ..const long TOP
0d80: 20 3d 20 30 3b 0d 0a 09 63 6f 6e 73 74 20 69 6e = 0;...const in
0d90: 74 20 20 42 54 4d 20 3d 20 76 69 65 77 5f 2e 62 t BTM = view_.b
0da0: 6f 74 74 6f 6d 28 29 3b 0d 0a 0d 0a 09 69 66 28 ottom();.....if(
0db0: 20 73 70 2e 79 20 3d 3d 20 65 70 2e 79 20 29 0d sp.y == ep.y ).
0dc0: 0a 09 7b 0d 0a 09 09 52 45 43 54 20 72 63 20 3d ..{....RECT rc =
0dd0: 20 7b 20 4d 61 78 28 4c 46 54 2c 73 70 2e 78 29 { Max(LFT,sp.x)
0de0: 2c 20 73 70 2e 79 2c 20 4d 69 6e 28 52 48 54 2c , sp.y, Min(RHT,
0df0: 65 70 2e 78 29 2c 20 73 70 2e 79 2b 76 69 65 77 ep.x), sp.y+view
0e00: 5f 2e 66 6e 74 28 29 2e 48 28 29 20 7d 3b 0d 0a _.fnt().H() };..
0e10: 09 09 3a 3a 49 6e 76 61 6c 69 64 61 74 65 52 65 ..::InvalidateRe
0e20: 63 74 28 20 63 61 72 65 74 5f 2d 3e 68 77 6e 64 ct( caret_->hwnd
0e30: 28 29 2c 20 26 72 63 2c 20 46 41 4c 53 45 20 29 (), &rc, FALSE )
0e40: 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 7b ;...}...else...{
0e50: 0d 0a 09 09 52 45 43 54 20 72 63 20 3d 20 7b 20 ....RECT rc = {
0e60: 4d 61 78 28 4c 46 54 2c 73 70 2e 78 29 2c 20 4d Max(LFT,sp.x), M
0e70: 61 78 28 54 4f 50 2c 73 70 2e 79 29 2c 20 52 48 ax(TOP,sp.y), RH
0e80: 54 2c 20 4d 69 6e 3c 69 6e 74 3e 28 42 54 4d 2c T, Min<int>(BTM,
0e90: 73 70 2e 79 2b 76 69 65 77 5f 2e 66 6e 74 28 29 sp.y+view_.fnt()
0ea0: 2e 48 28 29 29 20 7d 3b 0d 0a 09 09 3a 3a 49 6e .H()) };....::In
0eb0: 76 61 6c 69 64 61 74 65 52 65 63 74 28 20 63 61 validateRect( ca
0ec0: 72 65 74 5f 2d 3e 68 77 6e 64 28 29 2c 20 26 72 ret_->hwnd(), &r
0ed0: 63 2c 20 46 41 4c 53 45 20 29 3b 0d 0a 09 09 52 c, FALSE );....R
0ee0: 45 43 54 20 72 65 20 3d 20 7b 20 4c 46 54 2c 20 ECT re = { LFT,
0ef0: 4d 61 78 28 54 4f 50 2c 65 70 2e 79 29 2c 20 4d Max(TOP,ep.y), M
0f00: 69 6e 28 52 48 54 2c 65 70 2e 78 29 2c 20 4d 69 in(RHT,ep.x), Mi
0f10: 6e 3c 69 6e 74 3e 28 42 54 4d 2c 65 70 2e 79 2b n<int>(BTM,ep.y+
0f20: 76 69 65 77 5f 2e 66 6e 74 28 29 2e 48 28 29 29 view_.fnt().H())
0f30: 20 7d 3b 0d 0a 09 09 3a 3a 49 6e 76 61 6c 69 64 };....::Invalid
0f40: 61 74 65 52 65 63 74 28 20 63 61 72 65 74 5f 2d ateRect( caret_-
0f50: 3e 68 77 6e 64 28 29 2c 20 26 72 65 2c 20 46 41 >hwnd(), &re, FA
0f60: 4c 53 45 20 29 3b 0d 0a 09 09 52 45 43 54 20 72 LSE );....RECT r
0f70: 64 20 3d 20 7b 20 4c 46 54 2c 20 4d 61 78 28 54 d = { LFT, Max(T
0f80: 4f 50 2c 72 63 2e 62 6f 74 74 6f 6d 29 2c 20 52 OP,rc.bottom), R
0f90: 48 54 2c 20 4d 69 6e 3c 69 6e 74 3e 28 28 6c 6f HT, Min<int>((lo
0fa0: 6e 67 29 42 54 4d 2c 72 65 2e 74 6f 70 29 20 7d ng)BTM,re.top) }
0fb0: 3b 0d 0a 09 09 3a 3a 49 6e 76 61 6c 69 64 61 74 ;....::Invalidat
0fc0: 65 52 65 63 74 28 20 63 61 72 65 74 5f 2d 3e 68 eRect( caret_->h
0fd0: 77 6e 64 28 29 2c 20 26 72 64 2c 20 46 41 4c 53 wnd(), &rd, FALS
0fe0: 45 20 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 62 E );...}..}....b
0ff0: 6f 6f 6c 20 43 75 72 73 6f 72 3a 3a 67 65 74 43 ool Cursor::getC
1000: 75 72 50 6f 73 28 20 63 6f 6e 73 74 20 56 50 6f urPos( const VPo
1010: 73 2a 2a 20 73 74 61 72 74 2c 20 63 6f 6e 73 74 s** start, const
1020: 20 56 50 6f 73 2a 2a 20 65 6e 64 20 29 20 63 6f VPos** end ) co
1030: 6e 73 74 0d 0a 7b 0d 0a 09 2a 73 74 61 72 74 20 nst..{...*start
1040: 3d 20 2a 65 6e 64 20 3d 20 26 63 75 72 5f 3b 0d = *end = &cur_;.
1050: 0a 09 69 66 28 20 63 75 72 5f 3d 3d 73 65 6c 5f ..if( cur_==sel_
1060: 20 29 2f 2f 7c 7c 20 21 63 61 72 65 74 5f 2d 3e )//|| !caret_->
1070: 69 73 41 6c 69 76 65 28 29 20 29 0d 0a 09 09 72 isAlive() )....r
1080: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09 69 eturn false;...i
1090: 66 28 20 63 75 72 5f 20 3c 20 73 65 6c 5f 20 29 f( cur_ < sel_ )
10a0: 0d 0a 09 09 2a 65 6e 64 20 3d 20 26 73 65 6c 5f ....*end = &sel_
10b0: 3b 0d 0a 09 65 6c 73 65 0d 0a 09 09 2a 73 74 61 ;...else....*sta
10c0: 72 74 20 3d 20 26 73 65 6c 5f 3b 0d 0a 09 72 65 rt = &sel_;...re
10d0: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d turn true;..}...
10e0: 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d .......//-------
10f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1130: 2d 2d 0d 0a 2f 2f 20 56 69 65 77 82 a9 82 e7 82 --..// View.....
1140: cc 8e 77 97 df 82 f0 8f 88 97 9d 0d 0a 2f 2f 2d ..w..........//-
1150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1190: 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 76 6f 69 64 --------....void
11a0: 20 43 75 72 73 6f 72 3a 3a 6f 6e 5f 73 65 74 66 Cursor::on_setf
11b0: 6f 63 75 73 28 29 0d 0a 7b 0d 0a 09 63 61 72 65 ocus()..{...care
11c0: 74 5f 2d 3e 43 72 65 61 74 65 28 20 76 69 65 77 t_->Create( view
11d0: 5f 2e 66 6e 74 28 29 2e 48 28 29 2c 0d 0a 09 09 _.fnt().H(),....
11e0: 28 62 49 6e 73 5f 20 3f 20 32 20 3a 20 76 69 65 (bIns_ ? 2 : vie
11f0: 77 5f 2e 66 6e 74 28 29 2e 57 28 29 29 2c 20 76 w_.fnt().W()), v
1200: 69 65 77 5f 2e 66 6e 74 28 29 2e 4c 6f 67 46 6f iew_.fnt().LogFo
1210: 6e 74 28 29 20 29 3b 0d 0a 09 55 70 64 61 74 65 nt() );...Update
1220: 43 61 72 65 74 50 6f 73 28 29 3b 0d 0a 7d 0d 0a CaretPos();..}..
1230: 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a 6f ..void Cursor::o
1240: 6e 5f 6b 69 6c 6c 66 6f 63 75 73 28 29 0d 0a 7b n_killfocus()..{
1250: 0d 0a 09 63 61 72 65 74 5f 2d 3e 44 65 73 74 72 ...caret_->Destr
1260: 6f 79 28 29 3b 0d 0a 09 52 65 64 72 61 77 28 20 oy();...Redraw(
1270: 63 75 72 5f 2c 20 73 65 6c 5f 20 29 3b 0d 0a 7d cur_, sel_ );..}
1280: 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a ....void Cursor:
1290: 3a 6f 6e 5f 73 63 72 6f 6c 6c 5f 62 65 67 69 6e :on_scroll_begin
12a0: 28 29 0d 0a 7b 0d 0a 09 63 61 72 65 74 5f 2d 3e ()..{...caret_->
12b0: 48 69 64 65 28 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f Hide();..}....vo
12c0: 69 64 20 43 75 72 73 6f 72 3a 3a 6f 6e 5f 73 63 id Cursor::on_sc
12d0: 72 6f 6c 6c 5f 65 6e 64 28 29 0d 0a 7b 0d 0a 09 roll_end()..{...
12e0: 55 70 64 61 74 65 43 61 72 65 74 50 6f 73 28 29 UpdateCaretPos()
12f0: 3b 0d 0a 09 63 61 72 65 74 5f 2d 3e 53 68 6f 77 ;...caret_->Show
1300: 28 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 ();..}....void C
1310: 75 72 73 6f 72 3a 3a 52 65 73 65 74 50 6f 73 28 ursor::ResetPos(
1320: 29 0d 0a 7b 0d 0a 09 2f 2f 20 90 dd 92 e8 95 cf )..{...// ......
1330: 8d 58 82 c8 82 c7 82 c9 91 ce 89 9e 0d 0a 09 76 .X.............v
1340: 69 65 77 5f 2e 43 6f 6e 76 44 50 6f 73 54 6f 56 iew_.ConvDPosToV
1350: 50 6f 73 28 20 63 75 72 5f 2c 20 26 63 75 72 5f Pos( cur_, &cur_
1360: 20 29 3b 0d 0a 09 76 69 65 77 5f 2e 43 6f 6e 76 );...view_.Conv
1370: 44 50 6f 73 54 6f 56 50 6f 73 28 20 73 65 6c 5f DPosToVPos( sel_
1380: 2c 20 26 73 65 6c 5f 20 29 3b 0d 0a 09 55 70 64 , &sel_ );...Upd
1390: 61 74 65 43 61 72 65 74 50 6f 73 28 29 3b 0d 0a ateCaretPos();..
13a0: 09 69 66 28 20 63 61 72 65 74 5f 2d 3e 69 73 41 .if( caret_->isA
13b0: 6c 69 76 65 28 29 20 29 0d 0a 09 09 76 69 65 77 live() )....view
13c0: 5f 2e 53 63 72 6f 6c 6c 54 6f 28 20 63 75 72 5f _.ScrollTo( cur_
13d0: 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 );..}....void C
13e0: 75 72 73 6f 72 3a 3a 6f 6e 5f 74 65 78 74 5f 75 ursor::on_text_u
13f0: 70 64 61 74 65 0d 0a 09 28 20 63 6f 6e 73 74 20 pdate...( const
1400: 44 50 6f 73 26 20 73 2c 20 63 6f 6e 73 74 20 44 DPos& s, const D
1410: 50 6f 73 26 20 65 2c 20 63 6f 6e 73 74 20 44 50 Pos& e, const DP
1420: 6f 73 26 20 65 32 2c 20 62 6f 6f 6c 20 6d 43 75 os& e2, bool mCu
1430: 72 20 29 0d 0a 7b 0d 0a 09 56 50 6f 73 2a 20 73 r )..{...VPos* s
1440: 65 61 72 63 68 5f 62 61 73 65 20 20 3d 20 4e 55 earch_base = NU
1450: 4c 4c 3b 0d 0a 0d 0a 09 69 66 28 20 6d 43 75 72 LL;.....if( mCur
1460: 20 26 26 20 73 3d 3d 63 75 72 5f 20 26 26 20 65 && s==cur_ && e
1470: 3d 3d 73 65 6c 5f 20 29 0d 0a 09 7b 0d 0a 09 09 ==sel_ )...{....
1480: 73 65 61 72 63 68 5f 62 61 73 65 20 3d 20 26 63 search_base = &c
1490: 75 72 5f 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 20 ur_;...}...else
14a0: 69 66 28 20 6d 43 75 72 20 26 26 20 73 3d 3d 73 if( mCur && s==s
14b0: 65 6c 5f 20 26 26 20 65 3d 3d 63 75 72 5f 20 29 el_ && e==cur_ )
14c0: 0d 0a 09 7b 0d 0a 09 09 73 65 61 72 63 68 5f 62 ...{....search_b
14d0: 61 73 65 20 3d 20 26 73 65 6c 5f 3b 0d 0a 09 7d ase = &sel_;...}
14e0: 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09 09 52 ...else...{....R
14f0: 65 64 72 61 77 28 20 63 75 72 5f 2c 20 73 65 6c edraw( cur_, sel
1500: 5f 20 29 3b 0d 0a 09 09 69 66 28 20 6d 43 75 72 _ );....if( mCur
1510: 20 26 26 20 63 61 72 65 74 5f 2d 3e 69 73 41 6c && caret_->isAl
1520: 69 76 65 28 29 20 29 0d 0a 09 09 7b 0d 0a 09 09 ive() )....{....
1530: 09 69 66 28 20 63 75 72 5f 20 3c 3d 20 73 20 29 .if( cur_ <= s )
1540: 0d 0a 09 09 09 09 73 65 61 72 63 68 5f 62 61 73 ......search_bas
1550: 65 20 3d 20 26 63 75 72 5f 3b 0d 0a 09 09 7d 0d e = &cur_;....}.
1560: 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09 ...else....{....
1570: 09 69 66 28 20 73 20 3c 20 63 75 72 5f 20 29 0d .if( s < cur_ ).
1580: 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 20 63 ....{......if( c
1590: 75 72 5f 20 3c 3d 20 65 20 29 0d 0a 09 09 09 09 ur_ <= e )......
15a0: 09 63 75 72 5f 20 3d 20 65 32 3b 0d 0a 09 09 09 .cur_ = e2;.....
15b0: 09 65 6c 73 65 20 69 66 28 20 63 75 72 5f 2e 74 .else if( cur_.t
15c0: 6c 20 3d 3d 20 65 2e 74 6c 20 29 0d 0a 09 09 09 l == e.tl ).....
15d0: 09 09 63 75 72 5f 2e 74 6c 3d 65 32 2e 74 6c 2c ..cur_.tl=e2.tl,
15e0: 20 63 75 72 5f 2e 61 64 3d 65 32 2e 61 64 2b 63 cur_.ad=e2.ad+c
15f0: 75 72 5f 2e 61 64 2d 65 2e 61 64 3b 0d 0a 09 09 ur_.ad-e.ad;....
1600: 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 63 75 72 ..else.......cur
1610: 5f 2e 74 6c 3d 65 32 2e 74 6c 2d 65 2e 74 6c 3b _.tl=e2.tl-e.tl;
1620: 0d 0a 09 09 09 09 76 69 65 77 5f 2e 43 6f 6e 76 ......view_.Conv
1630: 44 50 6f 73 54 6f 56 50 6f 73 28 20 63 75 72 5f DPosToVPos( cur_
1640: 2c 20 26 63 75 72 5f 20 29 3b 0d 0a 09 09 09 7d , &cur_ );.....}
1650: 0d 0a 09 09 09 69 66 28 20 73 20 3c 20 73 65 6c .....if( s < sel
1660: 5f 20 29 0d 0a 09 09 09 09 73 65 6c 5f 20 3d 20 _ )......sel_ =
1670: 63 75 72 5f 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a cur_;....}...}..
1680: 0d 0a 09 69 66 28 20 6d 43 75 72 20 29 0d 0a 09 ...if( mCur )...
1690: 7b 0d 0a 09 09 76 69 65 77 5f 2e 43 6f 6e 76 44 {....view_.ConvD
16a0: 50 6f 73 54 6f 56 50 6f 73 28 20 65 32 2c 20 26 PosToVPos( e2, &
16b0: 63 75 72 5f 2c 20 73 65 61 72 63 68 5f 62 61 73 cur_, search_bas
16c0: 65 20 29 3b 0d 0a 09 09 73 65 6c 5f 20 3d 20 63 e );....sel_ = c
16d0: 75 72 5f 3b 0d 0a 09 09 69 66 28 20 63 61 72 65 ur_;....if( care
16e0: 74 5f 2d 3e 69 73 41 6c 69 76 65 28 29 20 29 0d t_->isAlive() ).
16f0: 0a 09 09 09 76 69 65 77 5f 2e 53 63 72 6f 6c 6c ....view_.Scroll
1700: 54 6f 28 20 63 75 72 5f 20 29 3b 0d 0a 09 7d 0d To( cur_ );...}.
1710: 0a 09 55 70 64 61 74 65 43 61 72 65 74 50 6f 73 ..UpdateCaretPos
1720: 28 29 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f ();..}........//
1730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 83 4c ---------..// .L
1780: 81 5b 93 fc 97 cd 82 d6 82 cc 91 ce 89 9e 0d 0a .[..............
1790: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d //--------------
17a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
17b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
17c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
17d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 76 -----------....v
17e0: 6f 69 64 20 43 75 72 45 76 48 61 6e 64 6c 65 72 oid CurEvHandler
17f0: 3a 3a 6f 6e 5f 63 68 61 72 28 20 43 75 72 73 6f ::on_char( Curso
1800: 72 26 20 63 75 72 2c 20 75 6e 69 63 6f 64 65 20 r& cur, unicode
1810: 77 63 68 20 29 0d 0a 7b 0d 0a 09 63 75 72 2e 49 wch )..{...cur.I
1820: 6e 70 75 74 43 68 61 72 28 20 77 63 68 20 29 3b nputChar( wch );
1830: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 45 ..}....void CurE
1840: 76 48 61 6e 64 6c 65 72 3a 3a 6f 6e 5f 69 6d 65 vHandler::on_ime
1850: 28 20 43 75 72 73 6f 72 26 20 63 75 72 2c 20 75 ( Cursor& cur, u
1860: 6e 69 63 6f 64 65 2a 20 73 74 72 2c 20 75 6c 6f nicode* str, ulo
1870: 6e 67 20 6c 65 6e 20 29 0d 0a 7b 0d 0a 09 63 75 ng len )..{...cu
1880: 72 2e 49 6e 70 75 74 28 20 73 74 72 2c 20 6c 65 r.Input( str, le
1890: 6e 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 n );..}....void
18a0: 43 75 72 45 76 48 61 6e 64 6c 65 72 3a 3a 6f 6e CurEvHandler::on
18b0: 5f 6b 65 79 28 20 43 75 72 73 6f 72 26 20 63 75 _key( Cursor& cu
18c0: 72 2c 20 69 6e 74 20 76 6b 2c 20 62 6f 6f 6c 20 r, int vk, bool
18d0: 73 66 74 2c 20 62 6f 6f 6c 20 63 74 6c 20 29 0d sft, bool ctl ).
18e0: 0a 7b 0d 0a 09 73 77 69 74 63 68 28 20 76 6b 20 .{...switch( vk
18f0: 29 0d 0a 09 7b 0d 0a 09 63 61 73 65 20 56 4b 5f )...{...case VK_
1900: 48 4f 4d 45 3a 09 63 75 72 2e 48 6f 6d 65 28 20 HOME:.cur.Home(
1910: 63 74 6c 2c 20 73 66 74 20 29 3b 09 62 72 65 61 ctl, sft );.brea
1920: 6b 3b 0d 0a 09 63 61 73 65 20 56 4b 5f 45 4e 44 k;...case VK_END
1930: 3a 09 63 75 72 2e 45 6e 64 28 20 63 74 6c 2c 20 :.cur.End( ctl,
1940: 73 66 74 20 29 3b 09 62 72 65 61 6b 3b 0d 0a 09 sft );.break;...
1950: 63 61 73 65 20 56 4b 5f 52 49 47 48 54 3a 09 63 case VK_RIGHT:.c
1960: 75 72 2e 52 69 67 68 74 28 20 63 74 6c 2c 20 73 ur.Right( ctl, s
1970: 66 74 20 29 3b 09 62 72 65 61 6b 3b 0d 0a 09 63 ft );.break;...c
1980: 61 73 65 20 56 4b 5f 4c 45 46 54 3a 09 63 75 72 ase VK_LEFT:.cur
1990: 2e 4c 65 66 74 28 20 63 74 6c 2c 20 73 66 74 20 .Left( ctl, sft
19a0: 29 3b 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 );.break;...case
19b0: 20 56 4b 5f 55 50 3a 09 09 63 75 72 2e 55 70 28 VK_UP:..cur.Up(
19c0: 20 63 74 6c 2c 20 73 66 74 20 29 3b 09 09 62 72 ctl, sft );..br
19d0: 65 61 6b 3b 0d 0a 09 63 61 73 65 20 56 4b 5f 44 eak;...case VK_D
19e0: 4f 57 4e 3a 09 63 75 72 2e 44 6f 77 6e 28 20 63 OWN:.cur.Down( c
19f0: 74 6c 2c 20 73 66 74 20 29 3b 09 62 72 65 61 6b tl, sft );.break
1a00: 3b 0d 0a 09 63 61 73 65 20 56 4b 5f 50 52 49 4f ;...case VK_PRIO
1a10: 52 3a 09 63 75 72 2e 50 61 67 65 55 70 28 20 73 R:.cur.PageUp( s
1a20: 66 74 20 29 3b 09 09 62 72 65 61 6b 3b 0d 0a 09 ft );..break;...
1a30: 63 61 73 65 20 56 4b 5f 4e 45 58 54 3a 09 63 75 case VK_NEXT:.cu
1a40: 72 2e 50 61 67 65 44 6f 77 6e 28 20 73 66 74 20 r.PageDown( sft
1a50: 29 3b 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 );.break;...case
1a60: 20 56 4b 5f 44 45 4c 45 54 45 3a 09 63 75 72 2e VK_DELETE:.cur.
1a70: 44 65 6c 28 29 3b 09 09 09 09 62 72 65 61 6b 3b Del();....break;
1a80: 0d 0a 09 63 61 73 65 20 56 4b 5f 42 41 43 4b 3a ...case VK_BACK:
1a90: 09 63 75 72 2e 44 65 6c 42 61 63 6b 28 29 3b 09 .cur.DelBack();.
1aa0: 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 ..break;...case
1ab0: 56 4b 5f 49 4e 53 45 52 54 3a 20 63 75 72 2e 53 VK_INSERT: cur.S
1ac0: 65 74 49 6e 73 4d 6f 64 65 28 21 63 75 72 2e 69 etInsMode(!cur.i
1ad0: 73 49 6e 73 4d 6f 64 65 28 29 29 3b 20 62 72 65 sInsMode()); bre
1ae0: 61 6b 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f ak;...}..}....vo
1af0: 69 64 20 43 75 72 73 6f 72 3a 3a 6f 6e 5f 63 68 id Cursor::on_ch
1b00: 61 72 28 20 54 43 48 41 52 20 63 68 20 29 0d 0a ar( TCHAR ch )..
1b10: 7b 0d 0a 09 69 66 28 20 21 62 52 4f 5f 20 26 26 {...if( !bRO_ &&
1b20: 20 63 68 21 3d 30 78 37 66 0d 0a 09 20 26 26 20 ch!=0x7f... &&
1b30: 28 28 75 6e 73 69 67 6e 65 64 29 63 68 3e 3d 30 ((unsigned)ch>=0
1b40: 78 32 30 20 7c 7c 20 63 68 3d 3d 54 45 58 54 28 x20 || ch==TEXT(
1b50: 27 5c 72 27 29 20 7c 7c 20 63 68 3d 3d 54 45 58 '\r') || ch==TEX
1b60: 54 28 27 5c 74 27 29 29 20 29 0d 0a 09 7b 0d 0a T('\t')) )...{..
1b70: 09 23 69 66 64 65 66 20 5f 55 4e 49 43 4f 44 45 .#ifdef _UNICODE
1b80: 0d 0a 09 09 70 45 76 48 61 6e 5f 2d 3e 6f 6e 5f ....pEvHan_->on_
1b90: 63 68 61 72 28 20 2a 74 68 69 73 2c 20 63 68 20 char( *this, ch
1ba0: 29 3b 0d 0a 09 23 65 6c 73 65 0d 0a 09 09 75 6e );...#else....un
1bb0: 69 63 6f 64 65 20 77 63 20 3d 20 63 68 3b 0d 0a icode wc = ch;..
1bc0: 09 09 69 66 28 20 63 68 20 26 20 30 78 38 30 20 ..if( ch & 0x80
1bd0: 29 20 2f 2f 20 94 f1 41 53 43 49 49 95 b6 8e 9a ) // ..ASCII....
1be0: 82 c9 82 cd 83 67 83 8a 83 72 83 41 83 8b 82 c5 .....g...r.A....
1bf0: 82 c8 82 a2 95 cf 8a b7 82 aa 95 4b 97 76 0d 0a ...........K.v..
1c00: 09 09 09 3a 3a 4d 75 6c 74 69 42 79 74 65 54 6f ...::MultiByteTo
1c10: 57 69 64 65 43 68 61 72 28 20 43 50 5f 41 43 50 WideChar( CP_ACP
1c20: 2c 20 4d 42 5f 43 4f 4d 50 4f 53 49 54 45 2c 20 , MB_COMPOSITE,
1c30: 26 63 68 2c 20 31 2c 20 26 77 63 2c 20 31 20 29 &ch, 1, &wc, 1 )
1c40: 3b 0d 0a 09 09 70 45 76 48 61 6e 5f 2d 3e 6f 6e ;....pEvHan_->on
1c50: 5f 63 68 61 72 28 20 2a 74 68 69 73 2c 20 77 63 _char( *this, wc
1c60: 20 29 3b 0d 0a 09 23 65 6e 64 69 66 0d 0a 09 7d );...#endif...}
1c70: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 ..}....void Curs
1c80: 6f 72 3a 3a 6f 6e 5f 69 6d 65 5f 63 6f 6d 70 6f or::on_ime_compo
1c90: 73 69 74 69 6f 6e 28 20 4c 50 41 52 41 4d 20 6c sition( LPARAM l
1ca0: 70 20 29 0d 0a 7b 0d 0a 09 76 69 65 77 5f 2e 53 p )..{...view_.S
1cb0: 63 72 6f 6c 6c 54 6f 28 20 63 75 72 5f 20 29 3b crollTo( cur_ );
1cc0: 0d 0a 09 69 66 28 20 21 62 52 4f 5f 20 26 26 20 ...if( !bRO_ &&
1cd0: 28 6c 70 26 47 43 53 5f 52 45 53 55 4c 54 53 54 (lp&GCS_RESULTST
1ce0: 52 29 20 29 0d 0a 09 7b 0d 0a 09 09 75 6e 69 63 R) )...{....unic
1cf0: 6f 64 65 2a 20 73 74 72 3b 0d 0a 09 09 75 6c 6f ode* str;....ulo
1d00: 6e 67 20 20 20 20 6c 65 6e 3b 0d 0a 09 09 69 6d ng len;....im
1d10: 65 28 29 2e 47 65 74 53 74 72 69 6e 67 28 20 63 e().GetString( c
1d20: 61 72 65 74 5f 2d 3e 68 77 6e 64 28 29 2c 20 26 aret_->hwnd(), &
1d30: 73 74 72 2c 20 26 6c 65 6e 20 29 3b 0d 0a 09 09 str, &len );....
1d40: 69 66 28 20 73 74 72 20 29 0d 0a 09 09 7b 0d 0a if( str )....{..
1d50: 09 09 09 70 45 76 48 61 6e 5f 2d 3e 6f 6e 5f 69 ...pEvHan_->on_i
1d60: 6d 65 28 20 2a 74 68 69 73 2c 20 73 74 72 2c 20 me( *this, str,
1d70: 6c 65 6e 20 29 3b 0d 0a 09 09 09 64 65 6c 65 74 len );.....delet
1d80: 65 20 5b 5d 20 73 74 72 3b 0d 0a 09 09 7d 0d 0a e [] str;....}..
1d90: 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 .}..}....void Cu
1da0: 72 73 6f 72 3a 3a 6f 6e 5f 6b 65 79 64 6f 77 6e rsor::on_keydown
1db0: 28 20 69 6e 74 20 76 6b 2c 20 4c 50 41 52 41 4d ( int vk, LPARAM
1dc0: 20 66 6c 61 67 20 29 0d 0a 7b 0d 0a 09 62 6f 6f flag )..{...boo
1dd0: 6c 20 73 66 74 20 3d 20 28 3a 3a 47 65 74 4b 65 l sft = (::GetKe
1de0: 79 53 74 61 74 65 28 56 4b 5f 53 48 49 46 54 29 yState(VK_SHIFT)
1df0: 3e 3e 31 35 29 21 3d 30 3b 0d 0a 09 62 6f 6f 6c >>15)!=0;...bool
1e00: 20 63 74 6c 20 3d 20 28 3a 3a 47 65 74 4b 65 79 ctl = (::GetKey
1e10: 53 74 61 74 65 28 56 4b 5f 43 4f 4e 54 52 4f 4c State(VK_CONTROL
1e20: 29 3e 3e 31 35 29 21 3d 30 3b 0d 0a 09 70 45 76 )>>15)!=0;...pEv
1e30: 48 61 6e 5f 2d 3e 6f 6e 5f 6b 65 79 28 20 2a 74 Han_->on_key( *t
1e40: 68 69 73 2c 20 76 6b 2c 20 73 66 74 2c 20 63 74 his, vk, sft, ct
1e50: 6c 20 29 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f l );..}......../
1e60: 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /---------------
1e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 83 ----------..// .
1eb0: 82 81 5b 83 68 90 d8 91 d6 0d 0a 2f 2f 2d 2d 2d ..[.h......//---
1ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f00: 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 76 6f 69 64 20 43 ------....void C
1f10: 75 72 73 6f 72 3a 3a 53 65 74 49 6e 73 4d 6f 64 ursor::SetInsMod
1f20: 65 28 20 62 6f 6f 6c 20 62 49 6e 73 20 29 0d 0a e( bool bIns )..
1f30: 7b 0d 0a 09 62 49 6e 73 5f 20 3d 20 62 49 6e 73 {...bIns_ = bIns
1f40: 3b 0d 0a 09 6f 6e 5f 73 65 74 66 6f 63 75 73 28 ;...on_setfocus(
1f50: 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 );..}....void Cu
1f60: 72 73 6f 72 3a 3a 53 65 74 52 4f 4d 6f 64 65 28 rsor::SetROMode(
1f70: 20 62 6f 6f 6c 20 62 52 4f 20 29 0d 0a 7b 0d 0a bool bRO )..{..
1f80: 09 62 52 4f 5f 20 3d 20 62 52 4f 3b 0d 0a 7d 0d .bRO_ = bRO;..}.
1f90: 0a 0d 0a 0d 0a 09 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d ........//------
1fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1fe0: 2d 2d 2d 0d 0a 2f 2f 20 95 b6 8e 9a 93 fc 97 cd ---..// ........
1ff0: 81 45 8d ed 8f 9c 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d .E......//------
2000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2040: 2d 2d 2d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 ---....void Curs
2050: 6f 72 3a 3a 49 6e 70 75 74 43 68 61 72 28 20 75 or::InputChar( u
2060: 6e 69 63 6f 64 65 20 63 68 20 29 0d 0a 7b 0d 0a nicode ch )..{..
2070: 09 2f 2f 20 81 75 8f e3 8f 91 83 82 81 5b 83 68 .// .u.......[.h
2080: 20 81 95 20 91 49 91 f0 8f f3 91 d4 82 c5 82 c8 .. .I..........
2090: 82 a2 20 81 95 20 8d 73 96 96 82 c5 82 c8 82 a2 .. .. .s........
20a0: 81 76 82 c8 82 e7 89 45 88 ea 95 b6 8e 9a 91 49 .v.....E.......I
20b0: 91 f0 0d 0a 09 69 66 28 20 21 62 49 6e 73 5f 20 .....if( !bIns_
20c0: 26 26 20 63 75 72 5f 3d 3d 73 65 6c 5f 20 26 26 && cur_==sel_ &&
20d0: 20 64 6f 63 5f 2e 6c 65 6e 28 63 75 72 5f 2e 74 doc_.len(cur_.t
20e0: 6c 29 21 3d 63 75 72 5f 2e 61 64 20 29 0d 0a 09 l)!=cur_.ad )...
20f0: 09 52 69 67 68 74 28 20 66 61 6c 73 65 2c 20 74 .Right( false, t
2100: 72 75 65 20 29 3b 0d 0a 0d 0a 09 2f 2f 20 93 fc rue );.....// ..
2110: 97 cd 0d 0a 09 49 6e 70 75 74 28 20 26 63 68 2c .....Input( &ch,
2120: 20 31 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 1 );..}....void
2130: 20 43 75 72 73 6f 72 3a 3a 49 6e 70 75 74 28 20 Cursor::Input(
2140: 63 6f 6e 73 74 20 75 6e 69 63 6f 64 65 2a 20 73 const unicode* s
2150: 74 72 2c 20 75 6c 6f 6e 67 20 6c 65 6e 20 29 0d tr, ulong len ).
2160: 0a 7b 0d 0a 09 69 66 28 20 63 75 72 5f 3d 3d 73 .{...if( cur_==s
2170: 65 6c 5f 20 29 0d 0a 09 09 64 6f 63 5f 2e 45 78 el_ )....doc_.Ex
2180: 65 63 75 74 65 28 20 49 6e 73 65 72 74 28 20 63 ecute( Insert( c
2190: 75 72 5f 2c 20 73 74 72 2c 20 6c 65 6e 20 29 20 ur_, str, len )
21a0: 29 3b 0d 0a 09 65 6c 73 65 0d 0a 09 09 64 6f 63 );...else....doc
21b0: 5f 2e 45 78 65 63 75 74 65 28 20 52 65 70 6c 61 _.Execute( Repla
21c0: 63 65 28 20 63 75 72 5f 2c 20 73 65 6c 5f 2c 20 ce( cur_, sel_,
21d0: 73 74 72 2c 20 6c 65 6e 20 29 20 29 3b 0d 0a 7d str, len ) );..}
21e0: 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a ....void Cursor:
21f0: 3a 49 6e 70 75 74 28 20 63 6f 6e 73 74 20 63 68 :Input( const ch
2200: 61 72 2a 20 73 74 72 2c 20 75 6c 6f 6e 67 20 6c ar* str, ulong l
2210: 65 6e 20 29 0d 0a 7b 0d 0a 09 75 6e 69 63 6f 64 en )..{...unicod
2220: 65 2a 20 75 73 74 72 20 3d 20 6e 65 77 20 75 6e e* ustr = new un
2230: 69 63 6f 64 65 5b 20 6c 65 6e 2a 34 20 5d 3b 0d icode[ len*4 ];.
2240: 0a 09 6c 65 6e 20 3d 20 3a 3a 4d 75 6c 74 69 42 ..len = ::MultiB
2250: 79 74 65 54 6f 57 69 64 65 43 68 61 72 28 20 43 yteToWideChar( C
2260: 50 5f 41 43 50 2c 20 30 2c 20 73 74 72 2c 20 6c P_ACP, 0, str, l
2270: 65 6e 2c 20 75 73 74 72 2c 20 6c 65 6e 2a 34 20 en, ustr, len*4
2280: 29 3b 0d 0a 09 49 6e 70 75 74 28 20 75 73 74 72 );...Input( ustr
2290: 2c 20 6c 65 6e 20 29 3b 0d 0a 09 64 65 6c 65 74 , len );...delet
22a0: 65 20 5b 5d 20 75 73 74 72 3b 0d 0a 7d 0d 0a 0d e [] ustr;..}...
22b0: 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a 44 65 .void Cursor::De
22c0: 6c 42 61 63 6b 28 29 0d 0a 7b 0d 0a 09 2f 2f 20 lBack()..{...//
22d0: 91 49 91 f0 8f f3 91 d4 82 c8 82 e7 20 42 61 63 .I.......... Bac
22e0: 6b 53 70 61 63 65 20 3d 3d 20 44 65 6c 65 74 65 kSpace == Delete
22f0: 0d 0a 09 2f 2f 20 82 c5 82 c8 82 af 82 ea 82 ce ...// ..........
2300: 81 41 20 42 61 63 6b 53 70 61 63 65 20 3d 3d 20 .A BackSpace ==
2310: 4c 65 66 74 20 2b 20 44 65 6c 65 74 65 20 28 8e Left + Delete (.
2320: e8 94 b2 82 ab 0d 0a 09 69 66 28 20 63 75 72 5f ........if( cur_
2330: 20 3d 3d 20 73 65 6c 5f 20 29 0d 0a 09 7b 0d 0a == sel_ )...{..
2340: 09 09 69 66 28 20 63 75 72 5f 2e 74 6c 3d 3d 30 ..if( cur_.tl==0
2350: 20 26 26 20 63 75 72 5f 2e 61 64 3d 3d 30 20 29 && cur_.ad==0 )
2360: 0d 0a 09 09 09 72 65 74 75 72 6e 3b 0d 0a 09 09 .....return;....
2370: 4c 65 66 74 28 20 66 61 6c 73 65 2c 20 66 61 6c Left( false, fal
2380: 73 65 20 29 3b 0d 0a 09 7d 0d 0a 09 44 65 6c 28 se );...}...Del(
2390: 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 );..}....void Cu
23a0: 72 73 6f 72 3a 3a 44 65 6c 28 29 0d 0a 7b 0d 0a rsor::Del()..{..
23b0: 09 2f 2f 20 91 49 91 f0 8f f3 91 d4 82 c8 82 e7 .// .I..........
23c0: 20 63 75 72 5f 20 81 60 20 73 65 6c 5f 20 82 f0 cur_ .` sel_ ..
23d0: 8d ed 8f 9c 0d 0a 09 2f 2f 20 82 c5 82 c8 82 af .......// ......
23e0: 82 ea 82 ce 81 41 20 63 75 72 5f 20 81 60 20 72 .....A cur_ .` r
23f0: 69 67 68 74 4f 66 28 63 75 72 5f 29 20 82 f0 8d ightOf(cur_) ...
2400: ed 8f 9c 0d 0a 09 44 50 6f 73 20 64 70 20 3d 20 ......DPos dp =
2410: 28 63 75 72 5f 3d 3d 73 65 6c 5f 20 3f 20 64 6f (cur_==sel_ ? do
2420: 63 5f 2e 72 69 67 68 74 4f 66 28 63 75 72 5f 29 c_.rightOf(cur_)
2430: 20 3a 20 28 44 50 6f 73 29 73 65 6c 5f 20 29 3b : (DPos)sel_ );
2440: 0d 0a 09 69 66 28 20 63 75 72 5f 20 21 3d 20 64 ...if( cur_ != d
2450: 70 20 29 0d 0a 09 09 64 6f 63 5f 2e 45 78 65 63 p )....doc_.Exec
2460: 75 74 65 28 20 44 65 6c 65 74 65 28 20 63 75 72 ute( Delete( cur
2470: 5f 2c 20 64 70 20 29 20 29 3b 0d 0a 7d 0d 0a 0d _, dp ) );..}...
2480: 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d .....//---------
2490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
24a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
24b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
24c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
24d0: 0d 0a 2f 2f 20 83 65 83 4c 83 58 83 67 8e e6 93 ..// .e.L.X.g...
24e0: be 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ...//-----------
24f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a --------------..
2530: 0d 0a 6b 69 3a 3a 61 61 72 72 3c 75 6e 69 63 6f ..ki::aarr<unico
2540: 64 65 3e 20 43 75 72 73 6f 72 3a 3a 67 65 74 53 de> Cursor::getS
2550: 65 6c 65 63 74 65 64 53 74 72 28 29 20 63 6f 6e electedStr() con
2560: 73 74 0d 0a 7b 0d 0a 09 44 50 6f 73 20 64 6d 3d st..{...DPos dm=
2570: 63 75 72 5f 2c 20 64 4d 3d 73 65 6c 5f 3b 0d 0a cur_, dM=sel_;..
2580: 09 69 66 28 20 63 75 72 5f 20 3e 20 73 65 6c 5f .if( cur_ > sel_
2590: 20 29 0d 0a 09 09 64 6d 3d 73 65 6c 5f 2c 20 64 )....dm=sel_, d
25a0: 4d 3d 63 75 72 5f 3b 0d 0a 0d 0a 09 2f 2f 20 83 M=cur_;.....// .
25b0: 65 83 4c 83 58 83 67 8e e6 93 be 0d 0a 09 69 6e e.L.X.g.......in
25c0: 74 20 6c 65 6e 20 3d 20 64 6f 63 5f 2e 67 65 74 t len = doc_.get
25d0: 52 61 6e 67 65 4c 65 6e 67 74 68 28 20 64 6d 2c RangeLength( dm,
25e0: 20 64 4d 20 29 3b 0d 0a 09 6b 69 3a 3a 61 61 72 dM );...ki::aar
25f0: 72 3c 75 6e 69 63 6f 64 65 3e 20 75 62 28 20 6e r<unicode> ub( n
2600: 65 77 20 75 6e 69 63 6f 64 65 5b 6c 65 6e 2b 31 ew unicode[len+1
2610: 5d 20 29 3b 0d 0a 09 64 6f 63 5f 2e 67 65 74 54 ] );...doc_.getT
2620: 65 78 74 28 20 75 62 2e 67 65 74 28 29 2c 20 64 ext( ub.get(), d
2630: 6d 2c 20 64 4d 20 29 3b 0d 0a 09 72 65 74 75 72 m, dM );...retur
2640: 6e 20 75 62 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f 2d 2d n ub;..}....//--
2650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2690: 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 83 4e 83 8a -------..// .N..
26a0: 83 62 83 76 83 7b 81 5b 83 68 8f 88 97 9d 0d 0a .b.v.{.[.h......
26b0: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d //--------------
26c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
26d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
26e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
26f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 76 -----------....v
2700: 6f 69 64 20 43 75 72 73 6f 72 3a 3a 43 75 74 28 oid Cursor::Cut(
2710: 29 0d 0a 7b 0d 0a 09 69 66 28 20 63 75 72 5f 20 )..{...if( cur_
2720: 21 3d 20 73 65 6c 5f 20 29 0d 0a 09 7b 0d 0a 09 != sel_ )...{...
2730: 09 2f 2f 20 83 52 83 73 81 5b 82 b5 82 c4 8d ed .// .R.s.[......
2740: 8f 9c 0d 0a 09 09 43 6f 70 79 28 29 3b 0d 0a 09 ......Copy();...
2750: 09 44 65 6c 28 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a .Del();...}..}..
2760: 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a 43 ..void Cursor::C
2770: 6f 70 79 28 29 0d 0a 7b 0d 0a 09 43 6c 69 70 62 opy()..{...Clipb
2780: 6f 61 72 64 20 63 6c 70 28 20 63 61 72 65 74 5f oard clp( caret_
2790: 2d 3e 68 77 6e 64 28 29 2c 20 66 61 6c 73 65 20 ->hwnd(), false
27a0: 29 3b 0d 0a 09 69 66 28 20 63 75 72 5f 3d 3d 73 );...if( cur_==s
27b0: 65 6c 5f 20 7c 7c 20 21 63 6c 70 2e 69 73 4f 70 el_ || !clp.isOp
27c0: 65 6e 65 64 28 29 20 29 0d 0a 09 09 72 65 74 75 ened() )....retu
27d0: 72 6e 3b 0d 0a 0d 0a 09 44 50 6f 73 20 64 6d 3d rn;.....DPos dm=
27e0: 63 75 72 5f 2c 20 64 4d 3d 73 65 6c 5f 3b 0d 0a cur_, dM=sel_;..
27f0: 09 69 66 28 20 63 75 72 5f 20 3e 20 73 65 6c 5f .if( cur_ > sel_
2800: 20 29 0d 0a 09 09 64 6d 3d 73 65 6c 5f 2c 20 64 )....dm=sel_, d
2810: 4d 3d 63 75 72 5f 3b 0d 0a 0d 0a 09 48 47 4c 4f M=cur_;.....HGLO
2820: 42 41 4c 20 20 68 3b 0d 0a 09 75 6e 69 63 6f 64 BAL h;...unicod
2830: 65 2a 20 70 3b 0d 0a 09 69 6e 74 20 20 20 20 6c e* p;...int l
2840: 65 6e 20 3d 20 64 6f 63 5f 2e 67 65 74 52 61 6e en = doc_.getRan
2850: 67 65 4c 65 6e 67 74 68 28 20 64 6d 2c 20 64 4d geLength( dm, dM
2860: 20 29 3b 0d 0a 0d 0a 09 69 66 28 20 61 70 70 28 );.....if( app(
2870: 29 2e 69 73 4e 54 28 29 20 29 0d 0a 09 7b 0d 0a ).isNT() )...{..
2880: 09 09 2f 2f 20 4e 54 8c 6e 82 c8 82 e7 82 bb 82 ..// NT.n.......
2890: cc 82 dc 82 dc 83 5f 83 43 83 8c 83 4e 83 67 82 ......_.C...N.g.
28a0: c9 0d 0a 09 09 68 20 3d 20 3a 3a 47 6c 6f 62 61 .....h = ::Globa
28b0: 6c 41 6c 6c 6f 63 28 20 47 4d 45 4d 5f 4d 4f 56 lAlloc( GMEM_MOV
28c0: 45 41 42 4c 45 2c 20 28 6c 65 6e 2b 31 29 2a 32 EABLE, (len+1)*2
28d0: 20 29 3b 0d 0a 09 09 64 6f 63 5f 2e 67 65 74 54 );....doc_.getT
28e0: 65 78 74 28 20 73 74 61 74 69 63 5f 63 61 73 74 ext( static_cast
28f0: 3c 75 6e 69 63 6f 64 65 2a 3e 28 3a 3a 47 6c 6f <unicode*>(::Glo
2900: 62 61 6c 4c 6f 63 6b 28 68 29 29 2c 20 64 6d 2c balLock(h)), dm,
2910: 20 64 4d 20 29 3b 0d 0a 09 09 3a 3a 47 6c 6f 62 dM );....::Glob
2920: 61 6c 55 6e 6c 6f 63 6b 28 20 68 20 29 3b 0d 0a alUnlock( h );..
2930: 09 09 63 6c 70 2e 53 65 74 44 61 74 61 28 20 43 ..clp.SetData( C
2940: 46 5f 55 4e 49 43 4f 44 45 54 45 58 54 2c 20 68 F_UNICODETEXT, h
2950: 20 29 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a );...}...else..
2960: 09 7b 0d 0a 09 09 2f 2f 20 39 78 8c 6e 82 c8 82 .{....// 9x.n...
2970: e7 95 cf 8a b7 82 aa 95 4b 97 76 0d 0a 09 09 68 ........K.v....h
2980: 20 3d 20 3a 3a 47 6c 6f 62 61 6c 41 6c 6c 6f 63 = ::GlobalAlloc
2990: 28 20 47 4d 45 4d 5f 4d 4f 56 45 41 42 4c 45 2c ( GMEM_MOVEABLE,
29a0: 20 28 6c 65 6e 2b 31 29 2a 33 20 29 3b 0d 0a 09 (len+1)*3 );...
29b0: 09 70 20 3d 20 6e 65 77 20 75 6e 69 63 6f 64 65 .p = new unicode
29c0: 5b 6c 65 6e 2b 31 5d 3b 0d 0a 09 09 64 6f 63 5f [len+1];....doc_
29d0: 2e 67 65 74 54 65 78 74 28 20 70 2c 20 64 6d 2c .getText( p, dm,
29e0: 20 64 4d 20 29 3b 0d 0a 09 09 3a 3a 57 69 64 65 dM );....::Wide
29f0: 43 68 61 72 54 6f 4d 75 6c 74 69 42 79 74 65 28 CharToMultiByte(
2a00: 20 43 50 5f 41 43 50 2c 20 30 2c 20 70 2c 20 2d CP_ACP, 0, p, -
2a10: 31 2c 0d 0a 09 09 09 73 74 61 74 69 63 5f 63 61 1,.....static_ca
2a20: 73 74 3c 63 68 61 72 2a 3e 28 3a 3a 47 6c 6f 62 st<char*>(::Glob
2a30: 61 6c 4c 6f 63 6b 28 68 29 29 2c 20 28 6c 65 6e alLock(h)), (len
2a40: 2b 31 29 2a 33 2c 20 4e 55 4c 4c 2c 20 4e 55 4c +1)*3, NULL, NUL
2a50: 4c 20 29 3b 0d 0a 09 09 3a 3a 47 6c 6f 62 61 6c L );....::Global
2a60: 55 6e 6c 6f 63 6b 28 20 68 20 29 3b 0d 0a 09 09 Unlock( h );....
2a70: 63 6c 70 2e 53 65 74 44 61 74 61 28 20 43 46 5f clp.SetData( CF_
2a80: 54 45 58 54 2c 20 68 20 29 3b 0d 0a 09 09 64 65 TEXT, h );....de
2a90: 6c 65 74 65 20 5b 5d 20 70 3b 0d 0a 09 7d 0d 0a lete [] p;...}..
2aa0: 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 }....void Cursor
2ab0: 3a 3a 50 61 73 74 65 28 29 0d 0a 7b 0d 0a 09 43 ::Paste()..{...C
2ac0: 6c 69 70 62 6f 61 72 64 20 63 6c 70 28 20 63 61 lipboard clp( ca
2ad0: 72 65 74 5f 2d 3e 68 77 6e 64 28 29 2c 20 74 72 ret_->hwnd(), tr
2ae0: 75 65 20 29 3b 0d 0a 09 69 66 28 20 63 6c 70 2e ue );...if( clp.
2af0: 69 73 4f 70 65 6e 65 64 28 29 20 29 0d 0a 09 7b isOpened() )...{
2b00: 0d 0a 09 09 43 6c 69 70 62 6f 61 72 64 3a 3a 54 ....Clipboard::T
2b10: 65 78 74 20 74 78 74 20 3d 20 63 6c 70 2e 47 65 ext txt = clp.Ge
2b20: 74 55 6e 69 63 6f 64 65 54 65 78 74 28 29 3b 0d tUnicodeText();.
2b30: 0a 09 09 69 66 28 20 74 78 74 2e 64 61 74 61 28 ...if( txt.data(
2b40: 29 20 21 3d 20 4e 55 4c 4c 20 29 0d 0a 09 09 09 ) != NULL ).....
2b50: 64 6f 63 5f 2e 45 78 65 63 75 74 65 28 0d 0a 09 doc_.Execute(...
2b60: 09 09 09 52 65 70 6c 61 63 65 28 20 63 75 72 5f ...Replace( cur_
2b70: 2c 20 73 65 6c 5f 2c 20 74 78 74 2e 64 61 74 61 , sel_, txt.data
2b80: 28 29 2c 20 6d 79 5f 6c 73 74 72 6c 65 6e 57 28 (), my_lstrlenW(
2b90: 74 78 74 2e 64 61 74 61 28 29 29 20 29 0d 0a 09 txt.data()) )...
2ba0: 09 09 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 0d ..);...}..}.....
2bb0: 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ...//-----------
2bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a --------------..
2c00: 2f 2f 20 83 4a 81 5b 83 5c 83 8b 88 da 93 ae 0d // .J.[.\.......
2c10: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .//-------------
2c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a ------------....
2c60: 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a 4d 6f 76 void Cursor::Mov
2c70: 65 43 75 72 28 20 63 6f 6e 73 74 20 44 50 6f 73 eCur( const DPos
2c80: 26 20 64 70 2c 20 62 6f 6f 6c 20 73 65 6c 65 63 & dp, bool selec
2c90: 74 20 29 0d 0a 7b 0d 0a 09 56 50 6f 73 20 76 70 t )..{...VPos vp
2ca0: 3b 0d 0a 09 76 69 65 77 5f 2e 43 6f 6e 76 44 50 ;...view_.ConvDP
2cb0: 6f 73 54 6f 56 50 6f 73 28 20 64 70 2c 20 26 76 osToVPos( dp, &v
2cc0: 70 20 29 3b 0d 0a 09 4d 6f 76 65 54 6f 28 20 76 p );...MoveTo( v
2cd0: 70 2c 20 73 65 6c 65 63 74 20 29 3b 0d 0a 7d 0d p, select );..}.
2ce0: 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a ...void Cursor::
2cf0: 4d 6f 76 65 54 6f 28 20 63 6f 6e 73 74 20 56 50 MoveTo( const VP
2d00: 6f 73 26 20 76 70 2c 20 62 6f 6f 6c 20 73 65 6c os& vp, bool sel
2d10: 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 73 65 6c 20 )..{...if( sel
2d20: 29 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 91 49 91 f0 )...{....// .I..
2d30: 8f f3 91 d4 82 aa 95 cf 82 ed 82 e9 94 cd 88 cd ................
2d40: 82 f0 8d c4 95 60 89 e6 0d 0a 09 09 52 65 64 72 .....`......Redr
2d50: 61 77 28 20 76 70 2c 20 63 75 72 5f 20 29 3b 0d aw( vp, cur_ );.
2d60: 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a ..}...else...{..
2d70: 09 09 2f 2f 20 91 49 91 f0 89 f0 8f 9c 82 b3 82 ..// .I.........
2d80: ea 82 e9 94 cd 88 cd 82 f0 8d c4 95 60 89 e6 0d ............`...
2d90: 0a 09 09 69 66 28 20 63 75 72 5f 20 21 3d 20 73 ...if( cur_ != s
2da0: 65 6c 5f 20 29 0d 0a 09 09 09 52 65 64 72 61 77 el_ ).....Redraw
2db0: 28 20 63 75 72 5f 2c 20 73 65 6c 5f 20 29 3b 0d ( cur_, sel_ );.
2dc0: 0a 09 09 73 65 6c 5f 20 3d 20 76 70 3b 0d 0a 09 ...sel_ = vp;...
2dd0: 7d 0d 0a 09 63 75 72 5f 20 3d 20 76 70 3b 0d 0a }...cur_ = vp;..
2de0: 09 55 70 64 61 74 65 43 61 72 65 74 50 6f 73 28 .UpdateCaretPos(
2df0: 29 3b 0d 0a 09 76 69 65 77 5f 2e 53 63 72 6f 6c );...view_.Scrol
2e00: 6c 54 6f 28 20 63 75 72 5f 20 29 3b 0d 0a 7d 0d lTo( cur_ );..}.
2e10: 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a ...void Cursor::
2e20: 48 6f 6d 65 28 20 62 6f 6f 6c 20 77 69 64 65 2c Home( bool wide,
2e30: 20 62 6f 6f 6c 20 73 65 6c 65 63 74 20 29 0d 0a bool select )..
2e40: 7b 0d 0a 09 56 50 6f 73 20 6e 70 3b 0d 0a 09 6e {...VPos np;...n
2e50: 70 2e 61 64 20 3d 20 6e 70 2e 76 78 20 3d 20 6e p.ad = np.vx = n
2e60: 70 2e 72 78 20 3d 20 6e 70 2e 72 6c 20 3d 20 30 p.rx = np.rl = 0
2e70: 3b 0d 0a 09 69 66 28 20 77 69 64 65 20 29 20 2f ;...if( wide ) /
2e80: 2f 20 95 b6 8f 91 82 cc 93 aa 82 d6 0d 0a 09 09 / ..............
2e90: 6e 70 2e 74 6c 20 3d 20 6e 70 2e 76 6c 20 3d 20 np.tl = np.vl =
2ea0: 30 3b 0d 0a 09 65 6c 73 65 20 2f 2f 20 8d 73 82 0;...else // .s.
2eb0: cc 93 aa 82 d6 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 ........{....//
2ec0: 31 2e 30 37 2e 34 20 2d 2d 3e 20 31 2e 30 38 20 1.07.4 --> 1.08
2ed0: 3a 3a 20 56 69 72 74 75 61 6c 20 48 6f 6d 65 0d :: Virtual Home.
2ee0: 0a 09 09 2f 2f 20 6e 70 2e 74 6c 20 3d 20 63 75 ...// np.tl = cu
2ef0: 72 5f 2e 74 6c 2c 20 6e 70 2e 76 6c 20 3d 20 63 r_.tl, np.vl = c
2f00: 75 72 5f 2e 76 6c 2d 63 75 72 5f 2e 72 6c 3b 0d ur_.vl-cur_.rl;.
2f10: 0a 0d 0a 09 09 69 66 28 20 63 75 72 5f 2e 72 6c .....if( cur_.rl
2f20: 20 3d 3d 20 30 20 29 0d 0a 09 09 09 6e 70 2e 74 == 0 ).....np.t
2f30: 6c 20 3d 20 63 75 72 5f 2e 74 6c 2c 20 6e 70 2e l = cur_.tl, np.
2f40: 76 6c 20 3d 20 63 75 72 5f 2e 76 6c 2d 63 75 72 vl = cur_.vl-cur
2f50: 5f 2e 72 6c 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 _.rl;....else...
2f60: 09 09 76 69 65 77 5f 2e 43 6f 6e 76 44 50 6f 73 ..view_.ConvDPos
2f70: 54 6f 56 50 6f 73 28 20 64 6f 63 5f 2e 72 69 67 ToVPos( doc_.rig
2f80: 68 74 4f 66 28 44 50 6f 73 28 63 75 72 5f 2e 74 htOf(DPos(cur_.t
2f90: 6c 2c 20 76 69 65 77 5f 2e 72 6c 65 6e 64 28 63 l, view_.rlend(c
2fa0: 75 72 5f 2e 74 6c 2c 63 75 72 5f 2e 72 6c 2d 31 ur_.tl,cur_.rl-1
2fb0: 29 29 29 2c 20 26 6e 70 2c 20 26 63 75 72 5f 20 ))), &np, &cur_
2fc0: 29 3b 0d 0a 09 7d 0d 0a 09 4d 6f 76 65 54 6f 28 );...}...MoveTo(
2fd0: 20 6e 70 2c 20 73 65 6c 65 63 74 20 29 3b 0d 0a np, select );..
2fe0: 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 }....void Cursor
2ff0: 3a 3a 45 6e 64 28 20 62 6f 6f 6c 20 77 69 64 65 ::End( bool wide
3000: 2c 20 62 6f 6f 6c 20 73 65 6c 65 63 74 20 29 0d , bool select ).
3010: 0a 7b 0d 0a 09 56 50 6f 73 20 6e 70 3b 0d 0a 09 .{...VPos np;...
3020: 69 66 28 20 77 69 64 65 20 29 20 2f 2f 20 95 b6 if( wide ) // ..
3030: 8f 91 82 cc 96 96 94 f6 82 d6 0d 0a 09 7b 0d 0a .............{..
3040: 09 09 6e 70 2e 74 6c 20 3d 20 64 6f 63 5f 2e 74 ..np.tl = doc_.t
3050: 6c 6e 28 29 2d 31 3b 0d 0a 09 09 6e 70 2e 76 6c ln()-1;....np.vl
3060: 20 3d 20 76 69 65 77 5f 2e 76 6c 6e 28 29 2d 31 = view_.vln()-1
3070: 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 20 2f 2f 20 ;...}...else //
3080: 8d 73 82 cc 96 96 94 f6 82 d6 0d 0a 09 7b 0d 0a .s...........{..
3090: 09 09 2f 2f 20 31 2e 30 37 2e 34 20 2d 2d 3e 20 ..// 1.07.4 -->
30a0: 31 2e 30 38 20 3a 3a 20 56 69 72 74 75 61 6c 20 1.08 :: Virtual
30b0: 45 6e 64 0d 0a 09 09 2f 2f 20 6e 70 2e 74 6c 20 End....// np.tl
30c0: 3d 20 63 75 72 5f 2e 74 6c 3b 0d 0a 09 09 2f 2f = cur_.tl;....//
30d0: 20 6e 70 2e 76 6c 20 3d 20 63 75 72 5f 2e 76 6c np.vl = cur_.vl
30e0: 20 2b 20 76 69 65 77 5f 2e 72 6c 6e 28 6e 70 2e + view_.rln(np.
30f0: 74 6c 29 20 2d 20 31 20 2d 20 63 75 72 5f 2e 72 tl) - 1 - cur_.r
3100: 6c 3b 0d 0a 0d 0a 09 09 76 69 65 77 5f 2e 43 6f l;......view_.Co
3110: 6e 76 44 50 6f 73 54 6f 56 50 6f 73 28 20 44 50 nvDPosToVPos( DP
3120: 6f 73 28 63 75 72 5f 2e 74 6c 2c 20 76 69 65 77 os(cur_.tl, view
3130: 5f 2e 72 6c 65 6e 64 28 63 75 72 5f 2e 74 6c 2c _.rlend(cur_.tl,
3140: 63 75 72 5f 2e 72 6c 29 29 2c 20 26 6e 70 2c 20 cur_.rl)), &np,
3150: 26 63 75 72 5f 20 29 3b 0d 0a 09 09 4d 6f 76 65 &cur_ );....Move
3160: 54 6f 28 20 6e 70 2c 20 73 65 6c 65 63 74 20 29 To( np, select )
3170: 3b 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 7d ;....return;...}
3180: 0d 0a 09 6e 70 2e 61 64 20 3d 20 64 6f 63 5f 2e ...np.ad = doc_.
3190: 6c 65 6e 28 6e 70 2e 74 6c 29 3b 0d 0a 09 6e 70 len(np.tl);...np
31a0: 2e 72 6c 20 3d 20 76 69 65 77 5f 2e 72 6c 6e 28 .rl = view_.rln(
31b0: 6e 70 2e 74 6c 29 2d 31 3b 0d 0a 09 6e 70 2e 72 np.tl)-1;...np.r
31c0: 78 20 3d 20 6e 70 2e 76 78 20 3d 20 76 69 65 77 x = np.vx = view
31d0: 5f 2e 47 65 74 4c 61 73 74 57 69 64 74 68 28 20 _.GetLastWidth(
31e0: 6e 70 2e 74 6c 20 29 3b 0d 0a 0d 0a 09 4d 6f 76 np.tl );.....Mov
31f0: 65 54 6f 28 20 6e 70 2c 20 73 65 6c 65 63 74 20 eTo( np, select
3200: 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 );..}....void Cu
3210: 72 73 6f 72 3a 3a 55 64 28 20 69 6e 74 20 64 79 rsor::Ud( int dy
3220: 2c 20 62 6f 6f 6c 20 73 65 6c 65 63 74 20 29 0d , bool select ).
3230: 0a 7b 0d 0a 09 2f 2f 20 82 cd 82 dd 8f 6f 82 b7 .{...// .....o..
3240: 8f ea 8d 87 82 cd 81 41 90 e6 93 aa 8d 73 2f 8f .......A.....s/.
3250: 49 92 5b 8d 73 82 c5 8e 7e 82 dc 82 e9 82 e6 82 I.[.s...~.......
3260: a4 82 c9 90 a7 8c c0 0d 0a 09 56 50 6f 73 20 6e ..........VPos n
3270: 70 20 3d 20 63 75 72 5f 3b 0d 0a 09 69 66 28 20 p = cur_;...if(
3280: 28 73 69 67 6e 65 64 29 6e 70 2e 76 6c 20 2b 20 (signed)np.vl +
3290: 64 79 20 3c 20 30 20 29 0d 0a 09 09 64 79 20 3d dy < 0 )....dy =
32a0: 20 2d 28 73 69 67 6e 65 64 29 6e 70 2e 76 6c 3b -(signed)np.vl;
32b0: 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e 70 2e 76 ...else if( np.v
32c0: 6c 20 2b 20 64 79 20 3e 3d 20 76 69 65 77 5f 2e l + dy >= view_.
32d0: 76 6c 6e 28 29 20 29 0d 0a 09 09 64 79 20 3d 20 vln() )....dy =
32e0: 76 69 65 77 5f 2e 76 6c 6e 28 29 2d 6e 70 2e 76 view_.vln()-np.v
32f0: 6c 2d 31 3b 0d 0a 0d 0a 09 6e 70 2e 76 6c 20 2b l-1;.....np.vl +
3300: 3d 20 64 79 3b 0d 0a 09 6e 70 2e 72 6c 20 2b 3d = dy;...np.rl +=
3310: 20 64 79 3b 0d 0a 09 69 66 28 20 64 79 3c 30 20 dy;...if( dy<0
3320: 29 20 2f 2f 20 8f e3 82 d6 96 df 82 e9 8f ea 8d ) // ...........
3330: 87 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 83 57 83 83 ....{....// .W..
3340: 83 93 83 76 90 e6 98 5f 97 9d 8d 73 82 cc 8d 73 ...v..._...s...s
3350: 93 aa 82 d6 44 61 73 68 21 0d 0a 09 09 77 68 69 ....Dash!....whi
3360: 6c 65 28 20 28 73 69 67 6e 65 64 29 6e 70 2e 72 le( (signed)np.r
3370: 6c 20 3c 20 30 20 29 0d 0a 09 09 09 6e 70 2e 72 l < 0 ).....np.r
3380: 6c 20 2b 3d 20 76 69 65 77 5f 2e 72 6c 6e 28 2d l += view_.rln(-
3390: 2d 6e 70 2e 74 6c 29 3b 0d 0a 09 7d 0d 0a 09 65 -np.tl);...}...e
33a0: 6c 73 65 20 69 66 28 20 64 79 3e 30 20 29 20 2f lse if( dy>0 ) /
33b0: 2f 20 89 ba 82 d6 90 69 82 de 8f ea 8d 87 0d 0a / .....i........
33c0: 09 7b 0d 0a 09 09 2f 2f 20 83 57 83 83 83 93 83 .{....// .W.....
33d0: 76 90 e6 98 5f 97 9d 8d 73 82 cc 8d 73 93 aa 82 v..._...s...s...
33e0: d6 44 61 73 68 21 0d 0a 09 09 77 68 69 6c 65 28 .Dash!....while(
33f0: 20 28 73 69 67 6e 65 64 29 6e 70 2e 72 6c 20 3e (signed)np.rl >
3400: 20 30 20 29 0d 0a 09 09 09 6e 70 2e 72 6c 20 2d 0 ).....np.rl -
3410: 3d 20 76 69 65 77 5f 2e 72 6c 6e 28 6e 70 2e 74 = view_.rln(np.t
3420: 6c 2b 2b 29 3b 0d 0a 09 09 69 66 28 20 28 73 69 l++);....if( (si
3430: 67 6e 65 64 29 6e 70 2e 72 6c 20 3c 20 30 20 29 gned)np.rl < 0 )
3440: 0d 0a 09 09 09 6e 70 2e 72 6c 20 2b 3d 20 76 69 .....np.rl += vi
3450: 65 77 5f 2e 72 6c 6e 28 2d 2d 6e 70 2e 74 6c 29 ew_.rln(--np.tl)
3460: 3b 20 2f 2f 8d 73 82 ab 89 df 82 ac 8f 43 90 b3 ; //.s.......C..
3470: 81 60 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20 78 8d .`...}.....// x.
3480: c0 95 57 8c 88 92 e8 82 c9 82 a9 82 a9 82 e9 0d ..W.............
3490: 0a 09 63 6f 6e 73 74 20 75 6e 69 63 6f 64 65 2a ..const unicode*
34a0: 20 73 74 72 20 3d 20 64 6f 63 5f 2e 74 6c 28 6e str = doc_.tl(n
34b0: 70 2e 74 6c 29 3b 0d 0a 0d 0a 09 2f 2f 20 89 45 p.tl);.....// .E
34c0: 8a f1 82 b9 82 c9 82 c8 82 c1 82 c4 82 e9 81 42 ...............B
34d0: 95 73 8e a9 91 52 81 48 0d 0a 09 6e 70 2e 61 64 .s...R.H...np.ad
34e0: 20 3d 20 28 6e 70 2e 72 6c 3d 3d 30 20 3f 20 30 = (np.rl==0 ? 0
34f0: 20 3a 20 76 69 65 77 5f 2e 72 6c 65 6e 64 28 6e : view_.rlend(n
3500: 70 2e 74 6c 2c 6e 70 2e 72 6c 2d 31 29 2b 31 29 p.tl,np.rl-1)+1)
3510: 3b 0d 0a 09 6e 70 2e 76 78 20 3d 20 28 6e 70 2e ;...np.vx = (np.
3520: 72 6c 3d 3d 30 20 3f 20 30 20 3a 20 76 69 65 77 rl==0 ? 0 : view
3530: 5f 2e 66 6e 74 28 29 2e 57 28 26 73 74 72 5b 6e _.fnt().W(&str[n
3540: 70 2e 61 64 2d 31 5d 29 29 3b 0d 0a 09 77 68 69 p.ad-1]));...whi
3550: 6c 65 28 20 6e 70 2e 76 78 20 3c 20 6e 70 2e 72 le( np.vx < np.r
3560: 78 20 26 26 20 6e 70 2e 61 64 20 3c 20 76 69 65 x && np.ad < vie
3570: 77 5f 2e 72 6c 65 6e 64 28 6e 70 2e 74 6c 2c 6e w_.rlend(np.tl,n
3580: 70 2e 72 6c 29 20 29 0d 0a 09 7b 0d 0a 09 09 2f p.rl) )...{..../
3590: 2f 20 8d b6 8a f1 82 b9 82 c9 82 b5 82 c4 82 dd / ..............
35a0: 82 bd 81 42 0d 0a 09 09 75 6c 6f 6e 67 20 6e 65 ...B....ulong ne
35b0: 77 76 78 3b 0d 0a 09 09 69 66 28 20 73 74 72 5b wvx;....if( str[
35c0: 6e 70 2e 61 64 5d 20 3d 3d 20 4c 27 5c 74 27 20 np.ad] == L'\t'
35d0: 29 0d 0a 09 09 09 6e 65 77 76 78 20 3d 20 76 69 ).....newvx = vi
35e0: 65 77 5f 2e 66 6e 74 28 29 2e 6e 65 78 74 54 61 ew_.fnt().nextTa
35f0: 62 28 6e 70 2e 76 78 29 3b 0d 0a 09 09 65 6c 73 b(np.vx);....els
3600: 65 0d 0a 09 09 09 6e 65 77 76 78 20 3d 20 6e 70 e.....newvx = np
3610: 2e 76 78 20 2b 20 76 69 65 77 5f 2e 66 6e 74 28 .vx + view_.fnt(
3620: 29 2e 57 28 26 73 74 72 5b 6e 70 2e 61 64 5d 29 ).W(&str[np.ad])
3630: 3b 0d 0a 09 09 69 66 28 20 6e 65 77 76 78 20 3e ;....if( newvx >
3640: 20 75 6c 6f 6e 67 28 6e 70 2e 72 78 29 20 29 0d ulong(np.rx) ).
3650: 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 6e 70 ....break;....np
3660: 2e 76 78 20 3d 20 6e 65 77 76 78 3b 0d 0a 09 09 .vx = newvx;....
3670: 2b 2b 6e 70 2e 61 64 3b 0d 0a 09 7d 0d 0a 0d 0a ++np.ad;...}....
3680: 09 4d 6f 76 65 54 6f 28 20 6e 70 2c 20 73 65 6c .MoveTo( np, sel
3690: 65 63 74 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 ect );..}....voi
36a0: 64 20 43 75 72 73 6f 72 3a 3a 55 70 28 20 62 6f d Cursor::Up( bo
36b0: 6f 6c 20 77 69 64 65 2c 20 62 6f 6f 6c 20 73 65 ol wide, bool se
36c0: 6c 65 63 74 20 29 0d 0a 7b 0d 0a 09 55 64 28 20 lect )..{...Ud(
36d0: 77 69 64 65 3f 2d 33 3a 2d 31 2c 20 73 65 6c 65 wide?-3:-1, sele
36e0: 63 74 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 ct );..}....void
36f0: 20 43 75 72 73 6f 72 3a 3a 44 6f 77 6e 28 20 62 Cursor::Down( b
3700: 6f 6f 6c 20 77 69 64 65 2c 20 62 6f 6f 6c 20 73 ool wide, bool s
3710: 65 6c 65 63 74 20 29 0d 0a 7b 0d 0a 09 55 64 28 elect )..{...Ud(
3720: 20 77 69 64 65 3f 33 3a 31 2c 20 73 65 6c 65 63 wide?3:1, selec
3730: 74 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 t );..}....void
3740: 43 75 72 73 6f 72 3a 3a 50 61 67 65 55 70 28 20 Cursor::PageUp(
3750: 62 6f 6f 6c 20 73 65 6c 65 63 74 20 29 0d 0a 7b bool select )..{
3760: 0d 0a 09 55 64 28 20 2d 76 69 65 77 5f 2e 63 79 ...Ud( -view_.cy
3770: 28 29 2f 76 69 65 77 5f 2e 66 6e 74 28 29 2e 48 ()/view_.fnt().H
3780: 28 29 2c 20 73 65 6c 65 63 74 20 29 3b 0d 0a 7d (), select );..}
3790: 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a ....void Cursor:
37a0: 3a 50 61 67 65 44 6f 77 6e 28 20 62 6f 6f 6c 20 :PageDown( bool
37b0: 73 65 6c 65 63 74 20 29 0d 0a 7b 0d 0a 09 55 64 select )..{...Ud
37c0: 28 20 76 69 65 77 5f 2e 63 79 28 29 2f 76 69 65 ( view_.cy()/vie
37d0: 77 5f 2e 66 6e 74 28 29 2e 48 28 29 2c 20 73 65 w_.fnt().H(), se
37e0: 6c 65 63 74 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f lect );..}....vo
37f0: 69 64 20 43 75 72 73 6f 72 3a 3a 4c 65 66 74 28 id Cursor::Left(
3800: 20 62 6f 6f 6c 20 77 69 64 65 2c 20 62 6f 6f 6c bool wide, bool
3810: 20 73 65 6c 65 63 74 20 29 0d 0a 7b 0d 0a 09 56 select )..{...V
3820: 50 6f 73 20 6e 70 3b 0d 0a 09 69 66 28 20 63 75 Pos np;...if( cu
3830: 72 5f 21 3d 73 65 6c 5f 20 26 26 20 21 73 65 6c r_!=sel_ && !sel
3840: 65 63 74 20 29 0d 0a 09 09 6e 70 20 3d 20 4d 69 ect )....np = Mi
3850: 6e 28 20 63 75 72 5f 2c 20 73 65 6c 5f 20 29 2c n( cur_, sel_ ),
3860: 20 6e 70 2e 72 78 20 3d 20 6e 70 2e 76 78 3b 0d np.rx = np.vx;.
3870: 0a 09 65 6c 73 65 0d 0a 09 09 76 69 65 77 5f 2e ..else....view_.
3880: 43 6f 6e 76 44 50 6f 73 54 6f 56 50 6f 73 28 20 ConvDPosToVPos(
3890: 64 6f 63 5f 2e 6c 65 66 74 4f 66 28 63 75 72 5f doc_.leftOf(cur_
38a0: 2c 77 69 64 65 29 2c 20 26 6e 70 2c 20 26 63 75 ,wide), &np, &cu
38b0: 72 5f 20 29 3b 0d 0a 09 4d 6f 76 65 54 6f 28 20 r_ );...MoveTo(
38c0: 6e 70 2c 20 73 65 6c 65 63 74 20 29 3b 0d 0a 7d np, select );..}
38d0: 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a ....void Cursor:
38e0: 3a 52 69 67 68 74 28 20 62 6f 6f 6c 20 77 69 64 :Right( bool wid
38f0: 65 2c 20 62 6f 6f 6c 20 73 65 6c 65 63 74 20 29 e, bool select )
3900: 0d 0a 7b 0d 0a 09 56 50 6f 73 20 6e 70 3b 0d 0a ..{...VPos np;..
3910: 09 69 66 28 20 63 75 72 5f 21 3d 73 65 6c 5f 20 .if( cur_!=sel_
3920: 26 26 20 21 73 65 6c 65 63 74 20 29 0d 0a 09 09 && !select )....
3930: 6e 70 20 3d 20 4d 61 78 28 20 63 75 72 5f 2c 20 np = Max( cur_,
3940: 73 65 6c 5f 20 29 2c 20 6e 70 2e 72 78 20 3d 20 sel_ ), np.rx =
3950: 6e 70 2e 76 78 3b 0d 0a 09 65 6c 73 65 0d 0a 09 np.vx;...else...
3960: 09 76 69 65 77 5f 2e 43 6f 6e 76 44 50 6f 73 54 .view_.ConvDPosT
3970: 6f 56 50 6f 73 28 20 64 6f 63 5f 2e 72 69 67 68 oVPos( doc_.righ
3980: 74 4f 66 28 63 75 72 5f 2c 77 69 64 65 29 2c 20 tOf(cur_,wide),
3990: 26 6e 70 2c 20 26 63 75 72 5f 20 29 3b 0d 0a 09 &np, &cur_ );...
39a0: 4d 6f 76 65 54 6f 28 20 6e 70 2c 20 73 65 6c 65 MoveTo( np, sele
39b0: 63 74 20 29 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a ct );..}........
39c0: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d //--------------
39d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
39e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
39f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 -----------..//
3a10: 83 7d 83 45 83 58 93 fc 97 cd 82 d6 82 cc 91 ce .}.E.X..........
3a20: 89 9e 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ....//----------
3a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d ---------------.
3a70: 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a ...void Cursor::
3a80: 6f 6e 5f 6c 62 75 74 74 6f 6e 5f 64 62 6c 28 20 on_lbutton_dbl(
3a90: 73 68 6f 72 74 20 78 2c 20 73 68 6f 72 74 20 79 short x, short y
3aa0: 20 29 0d 0a 7b 0d 0a 09 2f 2f 20 8d 73 94 d4 8d )..{...// .s...
3ab0: 86 83 5d 81 5b 83 93 82 cc 8f ea 8d 87 82 cd 93 ..].[...........
3ac0: c1 82 c9 89 bd 82 e0 82 b5 82 c8 82 a2 0d 0a 09 ................
3ad0: 69 66 28 20 76 69 65 77 5f 2e 6c 6e 61 28 29 2d if( view_.lna()-
3ae0: 76 69 65 77 5f 2e 66 6e 74 28 29 2e 46 28 29 20 view_.fnt().F()
3af0: 3c 20 78 20 29 0d 0a 09 09 2f 2f 20 8d 73 96 96 < x )....// .s..
3b00: 82 cc 8f ea 8d 87 82 e0 93 c1 82 c9 89 bd 82 e0 ................
3b10: 82 b5 82 c8 82 a2 0d 0a 09 09 69 66 28 20 63 75 ..........if( cu
3b20: 72 5f 2e 61 64 20 21 3d 20 64 6f 63 5f 2e 6c 65 r_.ad != doc_.le
3b30: 6e 28 63 75 72 5f 2e 74 6c 29 20 29 0d 0a 09 09 n(cur_.tl) )....
3b40: 7b 0d 0a 09 09 09 56 50 6f 73 20 6e 70 3b 0d 0a {.....VPos np;..
3b50: 09 09 09 76 69 65 77 5f 2e 43 6f 6e 76 44 50 6f ...view_.ConvDPo
3b60: 73 54 6f 56 50 6f 73 28 20 64 6f 63 5f 2e 77 6f sToVPos( doc_.wo
3b70: 72 64 53 74 61 72 74 4f 66 28 63 75 72 5f 29 2c rdStartOf(cur_),
3b80: 20 26 6e 70 2c 20 26 63 75 72 5f 20 29 3b 0d 0a &np, &cur_ );..
3b90: 09 09 09 4d 6f 76 65 54 6f 28 20 6e 70 2c 20 66 ...MoveTo( np, f
3ba0: 61 6c 73 65 20 29 3b 0d 0a 09 09 09 52 69 67 68 alse );.....Righ
3bb0: 74 28 20 74 72 75 65 2c 20 74 72 75 65 20 29 3b t( true, true );
3bc0: 0d 0a 09 09 7d 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c ....}..}....bool
3bd0: 20 43 75 72 73 6f 72 3a 3a 6f 6e 5f 63 6f 6e 74 Cursor::on_cont
3be0: 65 78 74 6d 65 6e 75 28 20 73 68 6f 72 74 20 78 extmenu( short x
3bf0: 2c 20 73 68 6f 72 74 20 79 20 29 0d 0a 7b 0d 0a , short y )..{..
3c00: 09 2f 2f 20 4e 6f 74 20 54 72 61 63 6b 65 64 0d .// Not Tracked.
3c10: 0a 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d ..return false;.
3c20: 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f .}....void Curso
3c30: 72 3a 3a 6f 6e 5f 6c 62 75 74 74 6f 6e 5f 64 6f r::on_lbutton_do
3c40: 77 6e 28 20 73 68 6f 72 74 20 78 2c 20 73 68 6f wn( short x, sho
3c50: 72 74 20 79 2c 20 62 6f 6f 6c 20 73 68 69 66 74 rt y, bool shift
3c60: 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 21 73 68 69 )..{...if( !shi
3c70: 66 74 20 29 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 82 ft )...{....// .
3c80: b1 82 ea 82 dc 82 c5 82 cc 91 49 91 f0 94 cd 88 ..........I.....
3c90: cd 82 f0 83 4e 83 8a 83 41 0d 0a 09 09 52 65 64 ....N...A....Red
3ca0: 72 61 77 28 20 63 75 72 5f 2c 20 73 65 6c 5f 20 raw( cur_, sel_
3cb0: 29 3b 0d 0a 0d 0a 09 09 2f 2f 20 8d 73 94 d4 8d );......// .s...
3cc0: 86 83 5d 81 5b 83 93 82 cc 83 4e 83 8a 83 62 83 ..].[.....N...b.
3cd0: 4e 82 be 82 c1 82 bd 82 e7 81 41 8d 73 91 49 91 N.........A.s.I.
3ce0: f0 83 82 81 5b 83 68 82 c9 0d 0a 09 09 6c 69 6e ....[.h......lin
3cf0: 65 53 65 6c 65 63 74 4d 6f 64 65 5f 20 3d 20 28 eSelectMode_ = (
3d00: 20 78 20 3c 20 76 69 65 77 5f 2e 6c 6e 61 28 29 x < view_.lna()
3d10: 2d 76 69 65 77 5f 2e 66 6e 74 28 29 2e 46 28 29 -view_.fnt().F()
3d20: 20 29 3b 0d 0a 0d 0a 09 09 2f 2f 20 91 49 91 f0 );......// .I..
3d30: 8a 4a 8e 6e 88 ca 92 75 82 f0 92 b2 90 ae 0d 0a .J.n...u........
3d40: 09 09 76 69 65 77 5f 2e 47 65 74 56 50 6f 73 28 ..view_.GetVPos(
3d50: 20 78 2c 20 79 2c 20 26 73 65 6c 5f 20 29 3b 0d x, y, &sel_ );.
3d60: 0a 09 09 69 66 28 20 6c 69 6e 65 53 65 6c 65 63 ...if( lineSelec
3d70: 74 4d 6f 64 65 5f 20 29 0d 0a 09 09 09 76 69 65 tMode_ ).....vie
3d80: 77 5f 2e 43 6f 6e 76 44 50 6f 73 54 6f 56 50 6f w_.ConvDPosToVPo
3d90: 73 28 20 44 50 6f 73 28 73 65 6c 5f 2e 74 6c 2c s( DPos(sel_.tl,
3da0: 30 29 2c 20 26 73 65 6c 5f 2c 20 26 73 65 6c 5f 0), &sel_, &sel_
3db0: 20 29 3b 0d 0a 09 09 63 75 72 5f 20 3d 20 73 65 );....cur_ = se
3dc0: 6c 5f 3b 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20 88 l_;...}.....// .
3dd0: da 93 ae 81 49 0d 0a 09 4d 6f 76 65 42 79 4d 6f ....I...MoveByMo
3de0: 75 73 65 28 20 64 72 61 67 58 5f 3d 78 2c 20 64 use( dragX_=x, d
3df0: 72 61 67 59 5f 3d 79 20 29 3b 0d 0a 0d 0a 09 2f ragY_=y );...../
3e00: 2f 20 83 7d 83 45 83 58 88 ca 92 75 82 cc 92 c7 / .}.E.X...u....
3e10: 90 d5 8a 4a 8e 6e 0d 0a 09 74 69 6d 65 72 49 44 ...J.n...timerID
3e20: 5f 20 3d 20 3a 3a 53 65 74 54 69 6d 65 72 28 20 _ = ::SetTimer(
3e30: 63 61 72 65 74 5f 2d 3e 68 77 6e 64 28 29 2c 20 caret_->hwnd(),
3e40: 31 37 38 31 31 36 2c 20 6b 65 79 52 65 70 54 69 178116, keyRepTi
3e50: 6d 65 5f 2c 20 4e 55 4c 4c 20 29 3b 0d 0a 09 3a me_, NULL );...:
3e60: 3a 53 65 74 43 61 70 74 75 72 65 28 20 63 61 72 :SetCapture( car
3e70: 65 74 5f 2d 3e 68 77 6e 64 28 29 20 29 3b 0d 0a et_->hwnd() );..
3e80: 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 }....void Cursor
3e90: 3a 3a 6f 6e 5f 6c 62 75 74 74 6f 6e 5f 75 70 28 ::on_lbutton_up(
3ea0: 20 73 68 6f 72 74 20 78 2c 20 73 68 6f 72 74 20 short x, short
3eb0: 79 20 29 0d 0a 7b 0d 0a 09 2f 2f 20 92 c7 90 d5 y )..{...// ....
3ec0: 89 f0 8f 9c 0d 0a 09 69 66 28 20 74 69 6d 65 72 .......if( timer
3ed0: 49 44 5f 20 21 3d 20 30 20 29 0d 0a 09 7b 0d 0a ID_ != 0 )...{..
3ee0: 09 09 3a 3a 52 65 6c 65 61 73 65 43 61 70 74 75 ..::ReleaseCaptu
3ef0: 72 65 28 29 3b 0d 0a 09 09 3a 3a 4b 69 6c 6c 54 re();....::KillT
3f00: 69 6d 65 72 28 20 63 61 72 65 74 5f 2d 3e 68 77 imer( caret_->hw
3f10: 6e 64 28 29 2c 20 74 69 6d 65 72 49 44 5f 20 29 nd(), timerID_ )
3f20: 3b 0d 0a 09 09 74 69 6d 65 72 49 44 5f 20 3d 20 ;....timerID_ =
3f30: 30 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 0;...}..}....voi
3f40: 64 20 43 75 72 73 6f 72 3a 3a 6f 6e 5f 6d 6f 75 d Cursor::on_mou
3f50: 73 65 5f 6d 6f 76 65 28 20 73 68 6f 72 74 20 78 se_move( short x
3f60: 2c 20 73 68 6f 72 74 20 79 20 29 0d 0a 7b 0d 0a , short y )..{..
3f70: 09 69 66 28 20 74 69 6d 65 72 49 44 5f 20 21 3d .if( timerID_ !=
3f80: 20 30 20 29 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 56 0 )...{....// V
3f90: 69 65 77 93 e0 95 94 82 c8 82 e7 4d 6f 75 73 65 iew........Mouse
3fa0: 4d 6f 76 65 82 c9 94 bd 89 9e 0d 0a 09 09 50 4f Move..........PO
3fb0: 49 4e 54 20 70 74 20 3d 20 7b 20 64 72 61 67 58 INT pt = { dragX
3fc0: 5f 3d 78 2c 20 64 72 61 67 59 5f 3d 79 20 7d 3b _=x, dragY_=y };
3fd0: 0d 0a 09 09 69 66 28 20 50 74 49 6e 52 65 63 74 ....if( PtInRect
3fe0: 28 20 26 76 69 65 77 5f 2e 7a 6f 6e 65 28 29 2c ( &view_.zone(),
3ff0: 20 70 74 20 29 20 29 0d 0a 09 09 09 4d 6f 76 65 pt ) ).....Move
4000: 42 79 4d 6f 75 73 65 28 20 64 72 61 67 58 5f 2c ByMouse( dragX_,
4010: 20 64 72 61 67 59 5f 20 29 3b 0d 0a 09 7d 0d 0a dragY_ );...}..
4020: 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 }....void Cursor
4030: 3a 3a 6f 6e 5f 74 69 6d 65 72 28 29 0d 0a 7b 0d ::on_timer()..{.
4040: 0a 09 2f 2f 20 56 69 65 77 8a 4f 95 94 82 c8 82 ..// View.O.....
4050: e7 54 69 6d 65 72 82 c9 94 bd 89 9e 0d 0a 09 50 .Timer.........P
4060: 4f 49 4e 54 20 70 74 20 3d 20 7b 20 64 72 61 67 OINT pt = { drag
4070: 58 5f 2c 20 64 72 61 67 59 5f 20 7d 3b 0d 0a 09 X_, dragY_ };...
4080: 69 66 28 20 21 50 74 49 6e 52 65 63 74 28 20 26 if( !PtInRect( &
4090: 76 69 65 77 5f 2e 7a 6f 6e 65 28 29 2c 20 70 74 view_.zone(), pt
40a0: 20 29 20 29 0d 0a 09 09 4d 6f 76 65 42 79 4d 6f ) )....MoveByMo
40b0: 75 73 65 28 20 64 72 61 67 58 5f 2c 20 64 72 61 use( dragX_, dra
40c0: 67 59 5f 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 gY_ );..}....voi
40d0: 64 20 43 75 72 73 6f 72 3a 3a 4d 6f 76 65 42 79 d Cursor::MoveBy
40e0: 4d 6f 75 73 65 28 20 69 6e 74 20 78 2c 20 69 6e Mouse( int x, in
40f0: 74 20 79 20 29 0d 0a 7b 0d 0a 09 56 50 6f 73 20 t y )..{...VPos
4100: 76 70 3b 0d 0a 09 76 69 65 77 5f 2e 47 65 74 56 vp;...view_.GetV
4110: 50 6f 73 28 20 78 2c 20 79 2c 20 26 76 70 2c 20 Pos( x, y, &vp,
4120: 6c 69 6e 65 53 65 6c 65 63 74 4d 6f 64 65 5f 20 lineSelectMode_
4130: 29 3b 0d 0a 09 4d 6f 76 65 54 6f 28 20 76 70 2c );...MoveTo( vp,
4140: 20 74 72 75 65 20 29 3b 0d 0a 7d 0d 0a 0d 0a 2f true );..}..../
4150: 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /---------------
4160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 8d ----------..// .
41a0: c4 95 cf 8a b7 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d .......//-------
41b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
41c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
41d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
41e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
41f0: 2d 2d 0d 0a 0d 0a 69 6e 74 20 43 75 72 73 6f 72 --....int Cursor
4200: 3a 3a 6f 6e 5f 69 6d 65 5f 72 65 63 6f 6e 76 65 ::on_ime_reconve
4210: 72 74 73 74 72 69 6e 67 28 20 52 45 43 4f 4e 56 rtstring( RECONV
4220: 45 52 54 53 54 52 49 4e 47 2a 20 72 73 20 29 0d ERTSTRING* rs ).
4230: 0a 7b 0d 0a 09 69 66 28 20 21 20 69 73 53 65 6c .{...if( ! isSel
4240: 65 63 74 65 64 28 29 20 7c 7c 20 63 75 72 5f 2e ected() || cur_.
4250: 74 6c 20 21 3d 20 73 65 6c 5f 2e 74 6c 20 29 0d tl != sel_.tl ).
4260: 0a 09 09 72 65 74 75 72 6e 20 30 3b 0d 0a 0d 0a ...return 0;....
4270: 23 69 66 64 65 66 20 5f 55 4e 49 43 4f 44 45 0d #ifdef _UNICODE.
4280: 0a 09 61 61 72 72 3c 75 6e 69 63 6f 64 65 3e 20 ..aarr<unicode>
4290: 73 74 72 20 3d 20 67 65 74 53 65 6c 65 63 74 65 str = getSelecte
42a0: 64 53 74 72 28 29 3b 0d 0a 23 65 6c 73 65 0d 0a dStr();..#else..
42b0: 09 61 61 72 72 3c 63 68 61 72 3e 20 73 74 72 3b .aarr<char> str;
42c0: 0d 0a 09 7b 0d 0a 09 09 61 61 72 72 3c 75 6e 69 ...{....aarr<uni
42d0: 63 6f 64 65 3e 20 75 62 20 3d 20 67 65 74 53 65 code> ub = getSe
42e0: 6c 65 63 74 65 64 53 74 72 28 29 3b 0d 0a 09 09 lectedStr();....
42f0: 75 6c 6f 6e 67 20 6c 65 6e 3b 0d 0a 09 09 66 6f ulong len;....fo
4300: 72 28 6c 65 6e 3d 30 3b 20 75 62 5b 6c 65 6e 5d r(len=0; ub[len]
4310: 3b 20 2b 2b 6c 65 6e 29 3b 0d 0a 09 09 6b 69 3a ; ++len);....ki:
4320: 3a 61 61 72 72 3c 63 68 61 72 3e 20 6e 77 28 20 :aarr<char> nw(
4330: 6e 65 77 20 54 43 48 41 52 5b 28 6c 65 6e 2b 31 new TCHAR[(len+1
4340: 29 2a 33 5d 20 29 3b 0d 0a 09 09 73 74 72 20 3d )*3] );....str =
4350: 20 6e 77 3b 0d 0a 09 09 3a 3a 57 69 64 65 43 68 nw;....::WideCh
4360: 61 72 54 6f 4d 75 6c 74 69 42 79 74 65 28 20 43 arToMultiByte( C
4370: 50 5f 41 43 50 2c 20 30 2c 20 75 62 2e 67 65 74 P_ACP, 0, ub.get
4380: 28 29 2c 20 2d 31 2c 0d 0a 09 09 09 73 74 72 2e (), -1,.....str.
4390: 67 65 74 28 29 2c 20 28 6c 65 6e 2b 31 29 2a 33 get(), (len+1)*3
43a0: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 20 29 3b 0d , NULL, NULL );.
43b0: 0a 09 7d 0d 0a 23 65 6e 64 69 66 0d 0a 09 63 6f ..}..#endif...co
43c0: 6e 73 74 20 75 6c 6f 6e 67 20 6c 65 6e 20 3d 20 nst ulong len =
43d0: 3a 3a 6c 73 74 72 6c 65 6e 28 73 74 72 2e 67 65 ::lstrlen(str.ge
43e0: 74 28 29 29 3b 0d 0a 09 69 66 28 20 72 73 20 21 t());...if( rs !
43f0: 3d 20 4e 55 4c 4c 20 29 0d 0a 09 7b 0d 0a 09 09 = NULL )...{....
4400: 72 73 2d 3e 64 77 53 69 7a 65 20 20 20 20 20 20 rs->dwSize
4410: 20 20 20 20 20 20 3d 20 73 69 7a 65 6f 66 28 52 = sizeof(R
4420: 45 43 4f 4e 56 45 52 54 53 54 52 49 4e 47 29 20 ECONVERTSTRING)
4430: 2b 20 28 6c 65 6e 2b 31 29 2a 73 69 7a 65 6f 66 + (len+1)*sizeof
4440: 28 54 43 48 41 52 29 3b 0d 0a 09 09 72 73 2d 3e (TCHAR);....rs->
4450: 64 77 56 65 72 73 69 6f 6e 20 20 20 20 20 20 20 dwVersion
4460: 20 20 3d 20 30 3b 0d 0a 09 09 72 73 2d 3e 64 77 = 0;....rs->dw
4470: 53 74 72 4f 66 66 73 65 74 20 20 20 20 20 20 20 StrOffset
4480: 3d 20 73 69 7a 65 6f 66 28 52 45 43 4f 4e 56 45 = sizeof(RECONVE
4490: 52 54 53 54 52 49 4e 47 29 3b 0d 0a 09 09 72 73 RTSTRING);....rs
44a0: 2d 3e 64 77 53 74 72 4c 65 6e 20 20 20 20 20 20 ->dwStrLen
44b0: 20 20 20 20 3d 20 6c 65 6e 3b 0d 0a 09 09 72 73 = len;....rs
44c0: 2d 3e 64 77 43 6f 6d 70 53 74 72 4f 66 66 73 65 ->dwCompStrOffse
44d0: 74 20 20 20 3d 20 30 3b 0d 0a 09 09 72 73 2d 3e t = 0;....rs->
44e0: 64 77 43 6f 6d 70 53 74 72 4c 65 6e 20 20 20 20 dwCompStrLen
44f0: 20 20 3d 20 6c 65 6e 3b 0d 0a 09 09 72 73 2d 3e = len;....rs->
4500: 64 77 54 61 72 67 65 74 53 74 72 4f 66 66 73 65 dwTargetStrOffse
4510: 74 20 3d 20 30 3b 0d 0a 09 09 72 73 2d 3e 64 77 t = 0;....rs->dw
4520: 54 61 72 67 65 74 53 74 72 4c 65 6e 20 20 20 20 TargetStrLen
4530: 3d 20 6c 65 6e 3b 0d 0a 09 09 6d 65 6d 6d 6f 76 = len;....memmov
4540: 65 28 20 28 28 63 68 61 72 2a 29 72 73 29 2b 72 e( ((char*)rs)+r
4550: 73 2d 3e 64 77 53 74 72 4f 66 66 73 65 74 2c 20 s->dwStrOffset,
4560: 73 74 72 2e 67 65 74 28 29 2c 20 28 6c 65 6e 2b str.get(), (len+
4570: 31 29 2a 73 69 7a 65 6f 66 28 54 43 48 41 52 29 1)*sizeof(TCHAR)
4580: 20 29 3b 0d 0a 0d 0a 09 09 69 66 28 20 73 65 6c );......if( sel
4590: 5f 20 3c 20 63 75 72 5f 20 29 0d 0a 09 09 7b 0d _ < cur_ )....{.
45a0: 0a 09 09 09 44 50 6f 73 20 70 73 65 6c 5f 20 3d ....DPos psel_ =
45b0: 20 73 65 6c 5f 3b 0d 0a 09 09 09 4d 6f 76 65 43 sel_;.....MoveC
45c0: 75 72 28 20 63 75 72 5f 2c 20 66 61 6c 73 65 20 ur( cur_, false
45d0: 29 3b 0d 0a 09 09 09 4d 6f 76 65 43 75 72 28 20 );.....MoveCur(
45e0: 70 73 65 6c 5f 2c 20 74 72 75 65 20 29 3b 0d 0a psel_, true );..
45f0: 09 09 7d 0d 0a 09 7d 0d 0a 09 72 65 74 75 72 6e ..}...}...return
4600: 20 73 69 7a 65 6f 66 28 52 45 43 4f 4e 56 45 52 sizeof(RECONVER
4610: 54 53 54 52 49 4e 47 29 20 2b 20 28 6c 65 6e 2b TSTRING) + (len+
4620: 31 29 2a 73 69 7a 65 6f 66 28 54 43 48 41 52 29 1)*sizeof(TCHAR)
4630: 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 75 72 ;..}....bool Cur
4640: 73 6f 72 3a 3a 6f 6e 5f 69 6d 65 5f 63 6f 6e 66 sor::on_ime_conf
4650: 69 72 6d 72 65 63 6f 6e 76 65 72 74 73 74 72 69 irmreconvertstri
4660: 6e 67 28 20 52 45 43 4f 4e 56 45 52 54 53 54 52 ng( RECONVERTSTR
4670: 49 4e 47 2a 20 72 73 20 29 0d 0a 7b 0d 0a 09 72 ING* rs )..{...r
4680: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 7d 0d eturn false;..}.
4690: 0a 0d 0a ...