mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 07:59:28 +02:00
Synedit: Refactor, move Caret to it's own class. (Just the first step)
git-svn-id: trunk@17411 -
This commit is contained in:
parent
1c61f8a45b
commit
7d42cea472
@ -385,8 +385,8 @@ type
|
|||||||
fBlockBegin: TPoint; // logical position (byte)
|
fBlockBegin: TPoint; // logical position (byte)
|
||||||
fBlockEnd: TPoint; // logical position (byte)
|
fBlockEnd: TPoint; // logical position (byte)
|
||||||
fBlockIndent: integer;
|
fBlockIndent: integer;
|
||||||
fCaretX: Integer; // physical position (screen)
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
|
fCaret: TSynEditCaret;
|
||||||
fCtrlMouseActive: boolean;
|
fCtrlMouseActive: boolean;
|
||||||
fMarkupManager : TSynEditMarkupManager;
|
fMarkupManager : TSynEditMarkupManager;
|
||||||
fMarkupHighAll : TSynEditMarkupHighlightAll;
|
fMarkupHighAll : TSynEditMarkupHighlightAll;
|
||||||
@ -394,9 +394,11 @@ type
|
|||||||
fMarkupCtrlMouse : TSynEditMarkupCtrlMouseLink;
|
fMarkupCtrlMouse : TSynEditMarkupCtrlMouseLink;
|
||||||
fMarkupSpecialLine : TSynEditMarkupSpecialLine;
|
fMarkupSpecialLine : TSynEditMarkupSpecialLine;
|
||||||
fMarkupSelection : TSynEditMarkupSelection;
|
fMarkupSelection : TSynEditMarkupSelection;
|
||||||
|
{$ELSE}
|
||||||
|
fCaretX: Integer; // position in Expanded Line = physical position (screen) when LeftChar=1
|
||||||
|
fCaretY: Integer;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
fLastCaretX: integer; // physical position (screen) //mh 2000-10-19
|
fLastCaretX: integer; // physical position (screen) //mh 2000-10-19
|
||||||
fCaretY: Integer;
|
|
||||||
fCharsInWindow: Integer;
|
fCharsInWindow: Integer;
|
||||||
fCharWidth: Integer;
|
fCharWidth: Integer;
|
||||||
fFontDummy: TFont;
|
fFontDummy: TFont;
|
||||||
@ -512,6 +514,8 @@ type
|
|||||||
function GetCaretXY: TPoint;
|
function GetCaretXY: TPoint;
|
||||||
function GetFont: TFont;
|
function GetFont: TFont;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
|
function GetCaretX : Integer;
|
||||||
|
function GetCaretY : Integer;
|
||||||
function GetHighlightAllColor : TSynSelectedColor;
|
function GetHighlightAllColor : TSynSelectedColor;
|
||||||
function GetIncrementColor : TSynSelectedColor;
|
function GetIncrementColor : TSynSelectedColor;
|
||||||
function GetSelectedColor : TSynSelectedColor;
|
function GetSelectedColor : TSynSelectedColor;
|
||||||
@ -873,8 +877,13 @@ type
|
|||||||
property CanPaste: Boolean read GetCanPaste;
|
property CanPaste: Boolean read GetCanPaste;
|
||||||
property CanRedo: boolean read GetCanRedo;
|
property CanRedo: boolean read GetCanRedo;
|
||||||
property CanUndo: boolean read GetCanUndo;
|
property CanUndo: boolean read GetCanUndo;
|
||||||
|
{$IFDEF SYN_LAZARUS}
|
||||||
|
property CaretX: Integer read GetCaretX write SetCaretX;
|
||||||
|
property CaretY: Integer read GetCaretY write SetCaretY;
|
||||||
|
{$ELSE}
|
||||||
property CaretX: Integer read fCaretX write SetCaretX;
|
property CaretX: Integer read fCaretX write SetCaretX;
|
||||||
property CaretY: Integer read fCaretY write SetCaretY;
|
property CaretY: Integer read fCaretY write SetCaretY;
|
||||||
|
{$ENDIF}
|
||||||
property CaretXY: TPoint read GetCaretXY write SetCaretXY;
|
property CaretXY: TPoint read GetCaretXY write SetCaretXY;
|
||||||
property CharsInWindow: Integer read fCharsInWindow;
|
property CharsInWindow: Integer read fCharsInWindow;
|
||||||
property CharWidth: integer read fCharWidth;
|
property CharWidth: integer read fCharWidth;
|
||||||
@ -1302,7 +1311,7 @@ begin
|
|||||||
Result:=RowCol;
|
Result:=RowCol;
|
||||||
Result.X := (Result.X - 1) * fCharWidth + fTextOffset;
|
Result.X := (Result.X - 1) * fCharWidth + fTextOffset;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
Result.Y := RowToScreenRow(fCaretY) * fTextHeight + 1;
|
Result.Y := RowToScreenRow(CaretY) * fTextHeight + 1;
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
Result.Y := (Result.Y - fTopLine) * fTextHeight + 1;
|
Result.Y := (Result.Y - fTopLine) * fTextHeight + 1;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -1448,6 +1457,7 @@ begin
|
|||||||
// fLines := TSynEditList.Create;
|
// fLines := TSynEditList.Create;
|
||||||
fLines := TSynEditStringList.Create;
|
fLines := TSynEditStringList.Create;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
|
fCaret := TSynEditCaret.Create;
|
||||||
fTextView := TSynEditFoldedView.Create(TSynEditStringList(fLines));
|
fTextView := TSynEditFoldedView.Create(TSynEditStringList(fLines));
|
||||||
fTextView.OnFoldChanged := {$IFDEF FPC}@{$ENDIF}FoldChanged;
|
fTextView.OnFoldChanged := {$IFDEF FPC}@{$ENDIF}FoldChanged;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -1563,10 +1573,11 @@ begin
|
|||||||
fTopLine := 1;
|
fTopLine := 1;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
fTextView.TopLine := 1;
|
fTextView.TopLine := 1;
|
||||||
{$ENDIF}
|
{$ELSE}
|
||||||
fCaretX := 1;
|
fCaretX := 1;
|
||||||
fLastCaretX := 1; //mh 2000-10-19
|
|
||||||
fCaretY := 1;
|
fCaretY := 1;
|
||||||
|
{$ENDIF}
|
||||||
|
fLastCaretX := 1; //mh 2000-10-19
|
||||||
fBlockBegin := Point(1, 1);
|
fBlockBegin := Point(1, 1);
|
||||||
fBlockEnd := fBlockBegin;
|
fBlockEnd := fBlockBegin;
|
||||||
// find / replace
|
// find / replace
|
||||||
@ -1694,6 +1705,7 @@ begin
|
|||||||
FreeAndNil(fFontDummy);
|
FreeAndNil(fFontDummy);
|
||||||
FreeAndNil(fTextView);
|
FreeAndNil(fTextView);
|
||||||
FreeAndNil(fLines);
|
FreeAndNil(fLines);
|
||||||
|
FreeAndNil(fCaret);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
@ -1722,13 +1734,13 @@ function TCustomSynEdit.CaretXPix: Integer;
|
|||||||
var
|
var
|
||||||
p: TPoint;
|
p: TPoint;
|
||||||
begin
|
begin
|
||||||
p := Point(fCaretX, fCaretY);
|
p := Point(CaretX, CaretY);
|
||||||
Result := RowColumnToPixels(p).X;
|
Result := RowColumnToPixels(p).X;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCustomSynEdit.CaretYPix: Integer;
|
function TCustomSynEdit.CaretYPix: Integer;
|
||||||
begin
|
begin
|
||||||
Result := RowColumnToPixels(Point(1, fCaretY)).Y;
|
Result := RowColumnToPixels(Point(1, CaretY)).Y;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomSynEdit.FontChanged(Sender: TObject);
|
procedure TCustomSynEdit.FontChanged(Sender: TObject);
|
||||||
@ -2452,7 +2464,7 @@ begin
|
|||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
LogCaretXY:=PhysicalToLogicalPos(CaretXY);
|
LogCaretXY:=PhysicalToLogicalPos(CaretXY);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
fLastCaretX := fCaretX; //mh 2000-10-19
|
fLastCaretX := CaretX; //mh 2000-10-19
|
||||||
if Button = mbLeft then begin
|
if Button = mbLeft then begin
|
||||||
//DebugLn('TCustomSynEdit.MouseDown ',DbgSName(Self),' START CAPTURE');
|
//DebugLn('TCustomSynEdit.MouseDown ',DbgSName(Self),' START CAPTURE');
|
||||||
MouseCapture := True;
|
MouseCapture := True;
|
||||||
@ -4772,6 +4784,16 @@ begin
|
|||||||
if fBlockIndent=AValue then exit;
|
if fBlockIndent=AValue then exit;
|
||||||
fBlockIndent:=AValue;
|
fBlockIndent:=AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCustomSynEdit.GetCaretX : Integer;
|
||||||
|
begin
|
||||||
|
Result:= fCaret.CharPos;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCustomSynEdit.GetCaretY : Integer;
|
||||||
|
begin
|
||||||
|
Result:= fCaret.LinePos;
|
||||||
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
procedure TCustomSynEdit.SetCaretX(Value: Integer);
|
procedure TCustomSynEdit.SetCaretX(Value: Integer);
|
||||||
@ -4783,7 +4805,7 @@ end;
|
|||||||
procedure TCustomSynEdit.SetCaretY(Value: Integer);
|
procedure TCustomSynEdit.SetCaretY(Value: Integer);
|
||||||
begin
|
begin
|
||||||
if not (eoKeepCaretX in Options) then begin //mh 2000-11-08
|
if not (eoKeepCaretX in Options) then begin //mh 2000-11-08
|
||||||
fLastCaretX := fCaretX;
|
fLastCaretX := CaretX;
|
||||||
end;
|
end;
|
||||||
SetCaretXY(Point(fLastCaretX{CaretX}, Value)); //mh 2000-10-19
|
SetCaretXY(Point(fLastCaretX{CaretX}, Value)); //mh 2000-10-19
|
||||||
end;
|
end;
|
||||||
@ -4823,27 +4845,33 @@ begin
|
|||||||
Value.X := nMaxX;
|
Value.X := nMaxX;
|
||||||
if Value.X < 1 then
|
if Value.X < 1 then
|
||||||
Value.X := 1;
|
Value.X := 1;
|
||||||
if (Value.X <> fCaretX) or (Value.Y <> fCaretY) then begin
|
if (Value.X <> CaretX) or (Value.Y <> CaretY) then begin
|
||||||
IncPaintLock;
|
IncPaintLock;
|
||||||
try
|
try
|
||||||
// simply include the flags, fPaintLock is > 0
|
// simply include the flags, fPaintLock is > 0
|
||||||
if fCaretX <> Value.X then begin
|
if CaretX <> Value.X then begin
|
||||||
|
{$IFNDEF SYN_LAZARUS}
|
||||||
fCaretX := Value.X;
|
fCaretX := Value.X;
|
||||||
|
{$ENDIF}
|
||||||
Include(fStatusChanges, scCaretX);
|
Include(fStatusChanges, scCaretX);
|
||||||
end;
|
end;
|
||||||
if fCaretY <> Value.Y then begin
|
if CaretY <> Value.Y then begin
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
InvalidateGutterLines(fCaretY, fCaretY);
|
InvalidateGutterLines(CaretY, CaretY);
|
||||||
InvalidateGutterLines(Value.Y, Value.Y);
|
InvalidateGutterLines(Value.Y, Value.Y);
|
||||||
{$ENDIF}
|
{$ELSE}
|
||||||
fCaretY := Value.Y;
|
fCaretY := Value.Y;
|
||||||
|
{$ENDIF}
|
||||||
Include(fStatusChanges, scCaretY);
|
Include(fStatusChanges, scCaretY);
|
||||||
end;
|
end;
|
||||||
|
{$IFDEF SYN_LAZARUS}
|
||||||
|
fCaret.LineCharPos:= Value;
|
||||||
|
{$ENDIF}
|
||||||
EnsureCursorPosVisible;
|
EnsureCursorPosVisible;
|
||||||
Include(fStateFlags, sfCaretChanged);
|
Include(fStateFlags, sfCaretChanged);
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
if fTextView.FoldedAtTextIndex[fCaretY - 1] then
|
if fTextView.FoldedAtTextIndex[CaretY - 1] then
|
||||||
fTextView.UnFoldAtTextIndex(fCaretY - 1, true);
|
fTextView.UnFoldAtTextIndex(CaretY - 1, true);
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
Include(fStateFlags, sfScrollbarChanged);
|
Include(fStateFlags, sfScrollbarChanged);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -4852,7 +4880,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
fLastCaretX:=fCaretX;
|
fLastCaretX:=CaretX;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -5161,7 +5189,7 @@ var
|
|||||||
TSynEditStringList(Lines).InsertLines(CaretY, CountLines(P)); // djlp 2000-09-07
|
TSynEditStringList(Lines).InsertLines(CaretY, CountLines(P)); // djlp 2000-09-07
|
||||||
end else begin
|
end else begin
|
||||||
TrimmedSetLine(CaretY - 1, sLeftSide + Value + sRightSide);
|
TrimmedSetLine(CaretY - 1, sLeftSide + Value + sRightSide);
|
||||||
fCaretX := LogicalToPhysicalPos(
|
CaretX := LogicalToPhysicalPos(
|
||||||
Point(1 + Length(sLeftSide + Value),CaretY)).X;
|
Point(1 + Length(sLeftSide + Value),CaretY)).X;
|
||||||
end;
|
end;
|
||||||
// step2: insert left lines of Value
|
// step2: insert left lines of Value
|
||||||
@ -5170,7 +5198,7 @@ var
|
|||||||
Inc(P);
|
Inc(P);
|
||||||
if P^ = #10 then
|
if P^ = #10 then
|
||||||
Inc(P);
|
Inc(P);
|
||||||
Inc(fCaretY);
|
CaretY := CaretY + 1;
|
||||||
Start := P;
|
Start := P;
|
||||||
P := GetEOL(Start);
|
P := GetEOL(Start);
|
||||||
if P = Start then begin
|
if P = Start then begin
|
||||||
@ -5195,7 +5223,7 @@ var
|
|||||||
end;
|
end;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
if p^=#0 then
|
if p^=#0 then
|
||||||
fCaretX := LogicalToPhysicalPos(
|
CaretX := LogicalToPhysicalPos(
|
||||||
Point(1 + Length(Lines[CaretY - 1]) - Length(sRightSide),
|
Point(1 + Length(Lines[CaretY - 1]) - Length(sRightSide),
|
||||||
CaretY)).X;
|
CaretY)).X;
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
@ -5205,7 +5233,7 @@ var
|
|||||||
Inc(Result);
|
Inc(Result);
|
||||||
end;
|
end;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
//DebugLn(['InsertNormal ',Length(Lines[CaretY - 1]),' ',Length(sRightSide),' ',fCaretX]);
|
//DebugLn(['InsertNormal ',Length(Lines[CaretY - 1]),' ',Length(sRightSide),' ',CaretX]);
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
fCaretX := 1 + Length(Lines[CaretY - 1]) - Length(sRightSide);
|
fCaretX := 1 + Length(Lines[CaretY - 1]) - Length(sRightSide);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -5266,7 +5294,7 @@ var
|
|||||||
inc(p,2)
|
inc(p,2)
|
||||||
else
|
else
|
||||||
Inc(P);
|
Inc(P);
|
||||||
Inc(fCaretY);
|
CaretY := CaretY + 1;
|
||||||
end;
|
end;
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
if P^ = #13 then begin
|
if P^ = #13 then begin
|
||||||
@ -5277,7 +5305,7 @@ var
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Start := P;
|
Start := P;
|
||||||
until P^ = #0;
|
until P^ = #0;
|
||||||
Inc(fCaretX, Length(Str));
|
CaretX:= CaretX + Length(Str);
|
||||||
Result := 0;
|
Result := 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -5289,7 +5317,7 @@ var
|
|||||||
n: Integer;
|
n: Integer;
|
||||||
begin
|
begin
|
||||||
Result := 0;
|
Result := 0;
|
||||||
fCaretX := 1;
|
CaretX := 1;
|
||||||
// Insert string before current line
|
// Insert string before current line
|
||||||
Start := PChar(Value);
|
Start := PChar(Value);
|
||||||
repeat
|
repeat
|
||||||
@ -5307,10 +5335,10 @@ var
|
|||||||
Lines.Add(Str);
|
Lines.Add(Str);
|
||||||
if eoTrimTrailingSpaces in Options then
|
if eoTrimTrailingSpaces in Options then
|
||||||
Lines[CaretY - 1] := TrimRight(Lines[CaretY - 1]);
|
Lines[CaretY - 1] := TrimRight(Lines[CaretY - 1]);
|
||||||
fCaretX := 1 + Length(Str);
|
CaretX := 1 + Length(Str);
|
||||||
end else begin
|
end else begin
|
||||||
TrimmedSetLine(CaretY - 1, Str);
|
TrimmedSetLine(CaretY - 1, Str);
|
||||||
Inc(fCaretY);
|
CaretY := CaretY + 1;
|
||||||
Inc(Result);
|
Inc(Result);
|
||||||
if P^ = #13 then
|
if P^ = #13 then
|
||||||
Inc(P);
|
Inc(P);
|
||||||
@ -5380,7 +5408,7 @@ begin
|
|||||||
DeleteSelection;
|
DeleteSelection;
|
||||||
if (Value <> nil) and (Value[0] <> #0) then
|
if (Value <> nil) and (Value[0] <> #0) then
|
||||||
InsertText;
|
InsertText;
|
||||||
fLastCaretX := fCaretX; //mh 2000-10-19
|
fLastCaretX := CaretX; //mh 2000-10-19
|
||||||
if CaretY < 1 then
|
if CaretY < 1 then
|
||||||
CaretY := 1;
|
CaretY := 1;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
@ -5512,7 +5540,7 @@ begin
|
|||||||
NewX:=Max(1,Min(fMaxLeftChar,NewCaret.X));
|
NewX:=Max(1,Min(fMaxLeftChar,NewCaret.X));
|
||||||
if CaretX<>NewX then begin
|
if CaretX<>NewX then begin
|
||||||
IncPaintLock;
|
IncPaintLock;
|
||||||
fCaretX:=NewX;
|
CaretX:=NewX;
|
||||||
DecPaintLock;
|
DecPaintLock;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -5908,8 +5936,8 @@ begin
|
|||||||
if Index > Lines.Count - 1 then Exit;
|
if Index > Lines.Count - 1 then Exit;
|
||||||
if not assigned(fHighlighter) then begin
|
if not assigned(fHighlighter) then begin
|
||||||
fTextView.FixFoldingAtTextIndex(Index);
|
fTextView.FixFoldingAtTextIndex(Index);
|
||||||
if fTextView.FoldedAtTextIndex[fCaretY - 1] then
|
if fTextView.FoldedAtTextIndex[CaretY - 1] then
|
||||||
fTextView.UnFoldAtTextIndex(fCaretY - 1);
|
fTextView.UnFoldAtTextIndex(CaretY - 1);
|
||||||
Topline := TopLine;
|
Topline := TopLine;
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -5953,8 +5981,8 @@ begin
|
|||||||
if (Result>Index+1) and (Result<=Lines.Count) then
|
if (Result>Index+1) and (Result<=Lines.Count) then
|
||||||
SetCodeFoldAttributes;
|
SetCodeFoldAttributes;
|
||||||
fTextView.FixFoldingAtTextIndex(Index, Result);
|
fTextView.FixFoldingAtTextIndex(Index, Result);
|
||||||
if fTextView.FoldedAtTextIndex[fCaretY - 1] then
|
if fTextView.FoldedAtTextIndex[CaretY - 1] then
|
||||||
fTextView.UnFoldAtTextIndex(fCaretY - 1);
|
fTextView.UnFoldAtTextIndex(CaretY - 1);
|
||||||
Topline := TopLine;
|
Topline := TopLine;
|
||||||
if FixFStart < index then Invalidate;
|
if FixFStart < index then Invalidate;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -6707,7 +6735,7 @@ begin
|
|||||||
Inc(Run,2)
|
Inc(Run,2)
|
||||||
else
|
else
|
||||||
Inc(Run);
|
Inc(Run);
|
||||||
Inc(fCaretY);
|
CaretY := CaretY + 1;
|
||||||
end;
|
end;
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
if Run <> StrToDelete then begin
|
if Run <> StrToDelete then begin
|
||||||
@ -7704,7 +7732,7 @@ begin
|
|||||||
MoveCaretAndSelection(CaretXY, Point(1 + Length(LineText), CaretY),
|
MoveCaretAndSelection(CaretXY, Point(1 + Length(LineText), CaretY),
|
||||||
Command = ecSelLineEnd);
|
Command = ecSelLineEnd);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
fLastCaretX := fCaretX;
|
fLastCaretX := CaretX;
|
||||||
end;
|
end;
|
||||||
{end} //mh 2000-10-19
|
{end} //mh 2000-10-19
|
||||||
// vertical caret movement or selection
|
// vertical caret movement or selection
|
||||||
@ -7796,7 +7824,7 @@ begin
|
|||||||
MoveCaretAndSelection
|
MoveCaretAndSelection
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
(CaretXY, PPoint(Data)^, Command = ecSelGotoXY);
|
(CaretXY, PPoint(Data)^, Command = ecSelGotoXY);
|
||||||
fLastCaretX := fCaretX; //mh 2000-10-19
|
fLastCaretX := CaretX; //mh 2000-10-19
|
||||||
Update;
|
Update;
|
||||||
end;
|
end;
|
||||||
// word selection
|
// word selection
|
||||||
@ -7814,7 +7842,7 @@ begin
|
|||||||
MoveCaretAndSelection
|
MoveCaretAndSelection
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
(Caret, CaretNew, Command = ecSelWordLeft);
|
(Caret, CaretNew, Command = ecSelWordLeft);
|
||||||
fLastCaretX := fCaretX; //mh 2000-10-19
|
fLastCaretX := CaretX; //mh 2000-10-19
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
Update;
|
Update;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -7831,7 +7859,7 @@ begin
|
|||||||
MoveCaretAndSelection
|
MoveCaretAndSelection
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
(Caret, CaretNew, Command = ecSelWordRight);
|
(Caret, CaretNew, Command = ecSelWordRight);
|
||||||
fLastCaretX := fCaretX; //mh 2000-10-19
|
fLastCaretX := CaretX; //mh 2000-10-19
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
Update;
|
Update;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -7911,14 +7939,14 @@ begin
|
|||||||
// ' Temp="',DbgStr(Temp),'" Helper="',DbgStr(Helper),'"');
|
// ' Temp="',DbgStr(Temp),'" Helper="',DbgStr(Helper),'"');
|
||||||
Temp:=copy(Temp,1,LogSpacePos-1)+copy(Temp,LogCaretXY.X,MaxInt);
|
Temp:=copy(Temp,1,LogSpacePos-1)+copy(Temp,LogCaretXY.X,MaxInt);
|
||||||
TrimmedSetLine(CaretY - 1, Temp);
|
TrimmedSetLine(CaretY - 1, Temp);
|
||||||
fCaretX := LogicalToPhysicalCol(Temp,LogSpacePos);
|
CaretX := LogicalToPhysicalCol(Temp,LogSpacePos);
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
Helper := Copy(Temp, 1, SpaceCount1 - SpaceCount2);
|
Helper := Copy(Temp, 1, SpaceCount1 - SpaceCount2);
|
||||||
Delete(Temp, 1, SpaceCount1 - SpaceCount2);
|
Delete(Temp, 1, SpaceCount1 - SpaceCount2);
|
||||||
TrimmedSetLine(CaretY - 1, Temp);
|
TrimmedSetLine(CaretY - 1, Temp);
|
||||||
fCaretX := fCaretX - (SpaceCount1 - SpaceCount2);
|
fCaretX := fCaretX - (SpaceCount1 - SpaceCount2);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
fLastCaretX := fCaretX;
|
fLastCaretX := CaretX;
|
||||||
StatusChanged([scCaretX]);
|
StatusChanged([scCaretX]);
|
||||||
end else begin
|
end else begin
|
||||||
// delete char
|
// delete char
|
||||||
@ -8277,7 +8305,7 @@ begin
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
DoLinesInserted(CaretY - InsDelta, 1);
|
DoLinesInserted(CaretY - InsDelta, 1);
|
||||||
EnsureCursorPosVisible; //JGF 2000-09-23
|
EnsureCursorPosVisible; //JGF 2000-09-23
|
||||||
fLastCaretX := fCaretX; //mh 2000-10-19
|
fLastCaretX := CaretX; //mh 2000-10-19
|
||||||
end;
|
end;
|
||||||
ecTab:
|
ecTab:
|
||||||
if not ReadOnly then DoTabKey;
|
if not ReadOnly then DoTabKey;
|
||||||
@ -10254,7 +10282,7 @@ begin
|
|||||||
Inc(Run,2)
|
Inc(Run,2)
|
||||||
else
|
else
|
||||||
Inc(Run);
|
Inc(Run);
|
||||||
inc(fCaretY);
|
CaretY := CaretY + 1;
|
||||||
end;
|
end;
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
if Run^ = #13 then
|
if Run^ = #13 then
|
||||||
|
@ -271,6 +271,29 @@ type
|
|||||||
property Options: TSynSearchOptions write SetOptions;
|
property Options: TSynSearchOptions write SetOptions;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$IFDEF SYN_LAZARUS}
|
||||||
|
|
||||||
|
{ TSynEditCaret }
|
||||||
|
|
||||||
|
TSynEditCaret = class
|
||||||
|
fLinePos : Integer; // 1 based
|
||||||
|
fCharPos : Integer; // 1 based
|
||||||
|
fOnChangeList : TMethodList;
|
||||||
|
private
|
||||||
|
function GetLineCharPos : TPoint;
|
||||||
|
procedure SetLineCharPos(const AValue : TPoint);
|
||||||
|
procedure setCharPos(const AValue : Integer);
|
||||||
|
procedure setLinePos(const AValue : Integer);
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure AddChangeHandler(AHandler: TNotifyEvent);
|
||||||
|
procedure RemoveChangeHandler(AHandler: TNotifyEvent);
|
||||||
|
property LinePos : Integer read fLinePos write setLinePos;
|
||||||
|
property CharPos : Integer read fCharPos write setCharPos;
|
||||||
|
property LineCharPos : TPoint read GetLineCharPos write SetLineCharPos;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -806,5 +829,60 @@ begin
|
|||||||
end;
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
|
{ TSynEditCaret }
|
||||||
|
|
||||||
|
{$IFDEF SYN_LAZARUS}
|
||||||
|
|
||||||
|
function TSynEditCaret.GetLineCharPos : TPoint;
|
||||||
|
begin
|
||||||
|
Result := Point(fCharPos, fLinePos);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynEditCaret.SetLineCharPos(const AValue : TPoint);
|
||||||
|
begin
|
||||||
|
if (fCharPos = AValue.X) and (fLinePos = AValue.Y) then exit;
|
||||||
|
fCharPos:= AValue.X;
|
||||||
|
fLinePos:= AValue.Y;
|
||||||
|
fOnChangeList.CallNotifyEvents(self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynEditCaret.setCharPos(const AValue : Integer);
|
||||||
|
begin
|
||||||
|
if fCharPos = AValue then exit;
|
||||||
|
fCharPos:= AValue;
|
||||||
|
fOnChangeList.CallNotifyEvents(self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynEditCaret.setLinePos(const AValue : Integer);
|
||||||
|
begin
|
||||||
|
if fLinePos = AValue then exit;
|
||||||
|
fLinePos:= AValue;
|
||||||
|
fOnChangeList.CallNotifyEvents(self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TSynEditCaret.Create;
|
||||||
|
begin
|
||||||
|
fOnChangeList := TMethodList.Create;
|
||||||
|
fLinePos:= 1;
|
||||||
|
fCharPos:= 1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TSynEditCaret.Destroy;
|
||||||
|
begin
|
||||||
|
FreeAndNil(fOnChangeList);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynEditCaret.AddChangeHandler(AHandler : TNotifyEvent);
|
||||||
|
begin
|
||||||
|
fOnChangeList.Add(TMethod(AHandler));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynEditCaret.RemoveChangeHandler(AHandler : TNotifyEvent);
|
||||||
|
begin
|
||||||
|
fOnChangeList.Remove(TMethod(AHandler));
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user