mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-28 23:18:20 +02:00
SynEdit: Refactor/Cleanup
git-svn-id: trunk@18119 -
This commit is contained in:
parent
e9be67479b
commit
435391d80e
@ -515,8 +515,6 @@ type
|
|||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
function LeftSpaces(const Line: string; Physical: boolean): Integer;
|
function LeftSpaces(const Line: string; Physical: boolean): Integer;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
procedure LinesChanging(Sender: TObject);
|
|
||||||
procedure LinesChanged(Sender: TObject);
|
|
||||||
procedure LockUndo;
|
procedure LockUndo;
|
||||||
procedure MoveCaretAndSelection(
|
procedure MoveCaretAndSelection(
|
||||||
{$IFDEF SYN_LAZARUS}const {$ENDIF}ptBefore, ptAfter: TPoint;
|
{$IFDEF SYN_LAZARUS}const {$ENDIF}ptBefore, ptAfter: TPoint;
|
||||||
@ -534,8 +532,7 @@ type
|
|||||||
procedure PrimarySelectionRequest(const RequestedFormatID: TClipboardFormat;
|
procedure PrimarySelectionRequest(const RequestedFormatID: TClipboardFormat;
|
||||||
Data: TStream);
|
Data: TStream);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
function ScanFrom(Index: integer
|
function ScanFrom(Index: integer; AtLeastTilIndex: integer = -1): integer;
|
||||||
{$IFDEF SYN_LAZARUS}; AtLeastTilIndex: integer = -1{$ENDIF}): integer;
|
|
||||||
procedure ScrollTimerHandler(Sender: TObject);
|
procedure ScrollTimerHandler(Sender: TObject);
|
||||||
procedure SelectedColorsChanged(Sender: TObject);
|
procedure SelectedColorsChanged(Sender: TObject);
|
||||||
procedure DoBlockSelectionChanged(Sender: TObject);
|
procedure DoBlockSelectionChanged(Sender: TObject);
|
||||||
@ -633,11 +630,11 @@ type
|
|||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
procedure KeyUp(var Key : Word; Shift : TShiftState); override;
|
procedure KeyUp(var Key : Word; Shift : TShiftState); override;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
procedure ListAdded(Index: integer); //mh 2000-10-10
|
Procedure LineCountChanged(Sender: TSynEditStrings; AIndex, ACount : Integer);
|
||||||
|
Procedure LineTextChanged(Sender: TSynEditStrings; AIndex, ACount : Integer);
|
||||||
|
procedure LinesChanging(Sender: TObject);
|
||||||
|
procedure LinesChanged(Sender: TObject);
|
||||||
procedure ListCleared(Sender: TObject);
|
procedure ListCleared(Sender: TObject);
|
||||||
procedure ListDeleted(Index: integer);
|
|
||||||
procedure ListInserted(Index: integer);
|
|
||||||
procedure ListPutted(Index: integer);
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
procedure FoldChanged(Index: integer);
|
procedure FoldChanged(Index: integer);
|
||||||
function GetTopView : Integer;
|
function GetTopView : Integer;
|
||||||
@ -1293,10 +1290,10 @@ var
|
|||||||
BufSize: integer;
|
BufSize: integer;
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
Mem: HGLOBAL;
|
Mem: HGLOBAL;
|
||||||
|
Failed: boolean;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
P: PChar;
|
P: PChar;
|
||||||
SLen: integer;
|
SLen: integer;
|
||||||
Failed: boolean;
|
|
||||||
begin
|
begin
|
||||||
if SText = '' then exit;
|
if SText = '' then exit;
|
||||||
SLen := Length(SText);
|
SLen := Length(SText);
|
||||||
@ -1418,15 +1415,14 @@ begin
|
|||||||
FTheLinesView := FTabbedLinesView;
|
FTheLinesView := FTabbedLinesView;
|
||||||
|
|
||||||
fCaret.Lines := TSynEditStrings(FTheLinesView);
|
fCaret.Lines := TSynEditStrings(FTheLinesView);
|
||||||
|
TSynEditStringList(fLines).AddChangeHandler(senrLineCount,
|
||||||
|
{$IFDEF FPC}@{$ENDIF}LineCountChanged);
|
||||||
|
TSynEditStringList(fLines).AddChangeHandler(senrLineChange,
|
||||||
|
{$IFDEF FPC}@{$ENDIF}LineTextChanged);
|
||||||
with TSynEditStringList(fLines) do begin
|
with TSynEditStringList(fLines) do begin
|
||||||
OnAdded := {$IFDEF FPC}@{$ENDIF}ListAdded;
|
|
||||||
OnChange := {$IFDEF FPC}@{$ENDIF}LinesChanged;
|
OnChange := {$IFDEF FPC}@{$ENDIF}LinesChanged;
|
||||||
OnChanging := {$IFDEF FPC}@{$ENDIF}LinesChanging;
|
OnChanging := {$IFDEF FPC}@{$ENDIF}LinesChanging;
|
||||||
OnCleared := {$IFDEF FPC}@{$ENDIF}ListCleared;
|
OnCleared := {$IFDEF FPC}@{$ENDIF}ListCleared;
|
||||||
OnDeleted := {$IFDEF FPC}@{$ENDIF}ListDeleted;
|
|
||||||
OnInserted := {$IFDEF FPC}@{$ENDIF}ListInserted;
|
|
||||||
OnPutted := {$IFDEF FPC}@{$ENDIF}ListPutted;
|
|
||||||
// OnScanRanges := {$IFDEF FPC}@{$ENDIF}ListScanRanges;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
fFontDummy := TFont.Create;
|
fFontDummy := TFont.Create;
|
||||||
@ -2112,6 +2108,7 @@ begin
|
|||||||
if fLastControlIsPressed<>(GetKeyShiftState=[SYNEDIT_LINK_MODIFIER]) then
|
if fLastControlIsPressed<>(GetKeyShiftState=[SYNEDIT_LINK_MODIFIER]) then
|
||||||
UpdateCtrlMouse;
|
UpdateCtrlMouse;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
procedure TCustomSynEdit.Loaded;
|
procedure TCustomSynEdit.Loaded;
|
||||||
@ -4860,33 +4857,27 @@ begin
|
|||||||
Update;
|
Update;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCustomSynEdit.ScanFrom(Index: integer
|
function TCustomSynEdit.ScanFrom(Index: integer; AtLeastTilIndex: integer): integer;
|
||||||
{$IFDEF SYN_LAZARUS}; AtLeastTilIndex: integer{$ENDIF}): integer;
|
|
||||||
// Index and AtLeastTilIndex are 0 based
|
// Index and AtLeastTilIndex are 0 based
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
var
|
var
|
||||||
FixFStart: Integer;
|
FixFStart: Integer;
|
||||||
LastLineDiffers : Boolean;
|
LastLineDiffers : Boolean;
|
||||||
procedure SetCodeFoldAttributes;
|
procedure SetCodeFoldAttributes;
|
||||||
begin
|
begin
|
||||||
TSynEditStrings(Lines).FoldMinLevel[Result-1] := fHighlighter.MinimumCodeFoldBlockLevel;
|
FFoldedLinesView.FoldMinLevel[Result-1] := fHighlighter.MinimumCodeFoldBlockLevel;
|
||||||
TSynEditStrings(Lines).FoldEndLevel[Result-1] := fHighlighter.CurrentCodeFoldBlockLevel;
|
FFoldedLinesView.FoldEndLevel[Result-1] := fHighlighter.CurrentCodeFoldBlockLevel;
|
||||||
if (fHighlighter.LastLineCodeFoldLevelFix <> 0) and (result > 1) then begin
|
if (fHighlighter.LastLineCodeFoldLevelFix <> 0) and (result > 1) then begin
|
||||||
TSynEditStrings(Lines).FoldEndLevel[Result-2] :=
|
FFoldedLinesView.FoldEndLevel[Result-2] :=
|
||||||
TSynEditStrings(Lines).FoldEndLevel[Result-2] + fHighlighter.LastLineCodeFoldLevelFix;
|
FFoldedLinesView.FoldEndLevel[Result-2] + fHighlighter.LastLineCodeFoldLevelFix;
|
||||||
if TSynEditStrings(Lines).FoldMinLevel[Result-2] > TSynEditStrings(Lines).FoldEndLevel[Result-2] then
|
if FFoldedLinesView.FoldMinLevel[Result-2] > FFoldedLinesView.FoldEndLevel[Result-2] then
|
||||||
TSynEditStrings(Lines).FoldMinLevel[Result-2] := TSynEditStrings(Lines).FoldEndLevel[Result-2];
|
FFoldedLinesView.FoldMinLevel[Result-2] := FFoldedLinesView.FoldEndLevel[Result-2];
|
||||||
if Result - 1 < FixFStart then FixFStart := Result - 1;
|
if Result - 1 < FixFStart then FixFStart := Result - 1;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
if Index < 0 then Index := 0;
|
if Index < 0 then Index := 0;
|
||||||
{$ENDIF}
|
|
||||||
Result := Index;
|
Result := Index;
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
if not assigned(fHighlighter) or (Index > Lines.Count - 1) then begin
|
if not assigned(fHighlighter) or (Index > Lines.Count - 1) then begin
|
||||||
FFoldedLinesView.FixFoldingAtTextIndex(Index);
|
FFoldedLinesView.FixFoldingAtTextIndex(Index);
|
||||||
fMarkupManager.TextChangedScreen(Max(RowToScreenRow(Index+1), 0), LinesInWindow+1);
|
fMarkupManager.TextChangedScreen(Max(RowToScreenRow(Index+1), 0), LinesInWindow+1);
|
||||||
@ -4900,7 +4891,6 @@ begin
|
|||||||
fHighlighter.ReSetRange;
|
fHighlighter.ReSetRange;
|
||||||
TSynEditStrings(Lines).Ranges[0] := fHighlighter.GetRange;
|
TSynEditStrings(Lines).Ranges[0] := fHighlighter.GetRange;
|
||||||
end;
|
end;
|
||||||
{$ENDIF}
|
|
||||||
if Index >= Lines.Count - 1 then begin
|
if Index >= Lines.Count - 1 then begin
|
||||||
FFoldedLinesView.FixFoldingAtTextIndex(Index);
|
FFoldedLinesView.FixFoldingAtTextIndex(Index);
|
||||||
fMarkupManager.TextChangedScreen(Max(RowToScreenRow(Index+1), 0), LinesInWindow+1);
|
fMarkupManager.TextChangedScreen(Max(RowToScreenRow(Index+1), 0), LinesInWindow+1);
|
||||||
@ -4911,30 +4901,22 @@ begin
|
|||||||
fHighlighter.SetLine(Lines[Result], Result);
|
fHighlighter.SetLine(Lines[Result], Result);
|
||||||
inc(Result);
|
inc(Result);
|
||||||
fHighlighter.NextToEol;
|
fHighlighter.NextToEol;
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
LastLineDiffers := True;
|
LastLineDiffers := True;
|
||||||
while (fHighlighter.GetRange <> TSynEditStrings(Lines).Ranges[Result])
|
while (fHighlighter.GetRange <> TSynEditStrings(Lines).Ranges[Result])
|
||||||
or (fHighlighter.LastLineCodeFoldLevelFix <> 0)
|
or (fHighlighter.LastLineCodeFoldLevelFix <> 0)
|
||||||
or (TSynEditStrings(Lines).FoldMinLevel[Result-1] <> fHighlighter.MinimumCodeFoldBlockLevel)
|
or (FFoldedLinesView.FoldMinLevel[Result-1] <> fHighlighter.MinimumCodeFoldBlockLevel)
|
||||||
or (TSynEditStrings(Lines).FoldEndLevel[Result-1] <> fHighlighter.CurrentCodeFoldBlockLevel)
|
or (FFoldedLinesView.FoldEndLevel[Result-1] <> fHighlighter.CurrentCodeFoldBlockLevel)
|
||||||
or LastLineDiffers or (Result<=AtLeastTilIndex+1)
|
or LastLineDiffers or (Result<=AtLeastTilIndex+1)
|
||||||
{$ELSE}
|
|
||||||
while (fHighlighter.GetRange <> TSynEditStringList(Lines).Ranges[Result])
|
|
||||||
{$ENDIF}
|
|
||||||
do begin
|
do begin
|
||||||
//debugln(['TSynCustomHighlighter.ScanFrom WHILE Y=',Result,' Level=',fHighlighter.CurrentCodeFoldBlockLevel,' ScannedLine="',Lines[Result-1],'"']);
|
//debugln(['TSynCustomHighlighter.ScanFrom WHILE Y=',Result,' Level=',fHighlighter.CurrentCodeFoldBlockLevel,' ScannedLine="',Lines[Result-1],'"']);
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
LastLineDiffers := (fHighlighter.GetRange <> TSynEditStrings(Lines).Ranges[Result])
|
LastLineDiffers := (fHighlighter.GetRange <> TSynEditStrings(Lines).Ranges[Result])
|
||||||
or (fHighlighter.LastLineCodeFoldLevelFix <> 0)
|
or (fHighlighter.LastLineCodeFoldLevelFix <> 0)
|
||||||
or (TSynEditStrings(Lines).FoldMinLevel[Result-1] <> fHighlighter.MinimumCodeFoldBlockLevel)
|
or (FFoldedLinesView.FoldMinLevel[Result-1] <> fHighlighter.MinimumCodeFoldBlockLevel)
|
||||||
or (TSynEditStrings(Lines).FoldEndLevel[Result-1] <> fHighlighter.CurrentCodeFoldBlockLevel);
|
or (FFoldedLinesView.FoldEndLevel[Result-1] <> fHighlighter.CurrentCodeFoldBlockLevel);
|
||||||
TSynEditStrings(Lines).Ranges[Result] := fHighlighter.GetRange;
|
TSynEditStrings(Lines).Ranges[Result] := fHighlighter.GetRange;
|
||||||
SetCodeFoldAttributes;
|
SetCodeFoldAttributes;
|
||||||
//if (Result and $fff)=0 then
|
//if (Result and $fff)=0 then
|
||||||
// debugln('TCustomSynEdit.ScanFrom A Line=', dbgs(Result),' Index=',dbgs(Index),' MinLevel=',dbgs(CodeFoldMinLevel),' EndLevel=',dbgs(CodeFoldEndLevel),' CodeFoldType=',dbgs(ord(CodeFoldType)),' ',dbgs(length(Lines[Result-1])));
|
// debugln('TCustomSynEdit.ScanFrom A Line=', dbgs(Result),' Index=',dbgs(Index),' MinLevel=',dbgs(CodeFoldMinLevel),' EndLevel=',dbgs(CodeFoldEndLevel),' CodeFoldType=',dbgs(ord(CodeFoldType)),' ',dbgs(length(Lines[Result-1])));
|
||||||
{$ELSE}
|
|
||||||
TSynEditStringList(Lines).Ranges[Result-1] := fHighlighter.GetRange;
|
|
||||||
{$ENDIF}
|
|
||||||
fHighlighter.SetLine(Lines[Result], Result);
|
fHighlighter.SetLine(Lines[Result], Result);
|
||||||
//debugln(['TSynCustomHighlighter.ScanFrom SetLine Y=',Result,' Level=',fHighlighter.CurrentCodeFoldBlockLevel,' Line="',Lines[Result],'"']);
|
//debugln(['TSynCustomHighlighter.ScanFrom SetLine Y=',Result,' Level=',fHighlighter.CurrentCodeFoldBlockLevel,' Line="',Lines[Result],'"']);
|
||||||
fHighlighter.NextToEol;
|
fHighlighter.NextToEol;
|
||||||
@ -4943,7 +4925,6 @@ begin
|
|||||||
if Result = Lines.Count then
|
if Result = Lines.Count then
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
// at least one line changed
|
// at least one line changed
|
||||||
// => update code fold attributes of last scanned line
|
// => update code fold attributes of last scanned line
|
||||||
if (Result>Index+1) and (Result<=Lines.Count) then
|
if (Result>Index+1) and (Result<=Lines.Count) then
|
||||||
@ -4953,55 +4934,33 @@ begin
|
|||||||
Min(RowToScreenRow(Result), LinesInWindow+1));
|
Min(RowToScreenRow(Result), LinesInWindow+1));
|
||||||
Topline := TopLine;
|
Topline := TopLine;
|
||||||
if FixFStart < index then Invalidate;
|
if FixFStart < index then Invalidate;
|
||||||
{$ENDIF}
|
|
||||||
Dec(Result);
|
Dec(Result);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{begin} //mh 2000-10-10
|
procedure TCustomSynEdit.LineCountChanged(Sender: TSynEditStrings; AIndex, ACount: Integer);
|
||||||
(*
|
|
||||||
procedure TCustomSynEdit.ListAdded(Sender: TObject);
|
|
||||||
var
|
|
||||||
LastIndex: Integer;
|
|
||||||
begin
|
begin
|
||||||
if Assigned(fHighlighter) then begin
|
ScanFrom(AIndex - 1, Min(AIndex, AIndex + ACount));
|
||||||
if Lines.Count > 1 then begin
|
InvalidateLines(AIndex + 1, -1);
|
||||||
LastIndex := Lines.Count - 1;
|
InvalidateGutterLines(AIndex + 1, -1);
|
||||||
fHighlighter.SetRange(Lines.Objects[LastIndex - 1]);
|
end;
|
||||||
fHighlighter.SetLine(Lines[LastIndex - 1], LastIndex - 1);
|
|
||||||
fHighlighter.NextToEol;
|
procedure TCustomSynEdit.LineTextChanged(Sender: TSynEditStrings; AIndex, ACount: Integer);
|
||||||
Lines.Objects[LastIndex] := fHighlighter.GetRange;
|
var
|
||||||
end else begin
|
EndIndex: Integer;
|
||||||
fHighlighter.ReSetRange;
|
begin
|
||||||
Lines.Objects[0] := fHighlighter.GetRange;
|
if PaintLock>0 then begin
|
||||||
end;
|
if (fHighlighterNeedsUpdateStartLine<1)
|
||||||
end;
|
or (fHighlighterNeedsUpdateStartLine>AIndex+1) then
|
||||||
LastIndex := Lines.Count;
|
fHighlighterNeedsUpdateStartLine:=AIndex+1;
|
||||||
InvalidateLine(LastIndex);
|
if (fHighlighterNeedsUpdateEndLine<1)
|
||||||
*)
|
or (fHighlighterNeedsUpdateEndLine<AIndex+1) then
|
||||||
procedure TCustomSynEdit.ListAdded(Index: integer);
|
fHighlighterNeedsUpdateEndLine:=AIndex+1;
|
||||||
// Index is 0 based
|
exit;
|
||||||
begin
|
end;
|
||||||
//debugln('TCustomSynEdit.ListAdded ',dbgs(Index),' ',dbgs(Assigned(fHighlighter)));
|
EndIndex:=ScanFrom(AIndex) + 1;
|
||||||
{$IFDEF SYN_LAZARUS}
|
InvalidateLines(AIndex + 1, EndIndex);
|
||||||
ScanFrom(Index - 1);
|
InvalidateGutterLines(AIndex + 1, EndIndex);
|
||||||
{$ELSE}
|
|
||||||
if Assigned(fHighlighter) then begin
|
|
||||||
if (Index > 0) then begin
|
|
||||||
// the current line was added, start scanning from the prior line
|
|
||||||
fHighlighter.SetRange(TSynEditStringList(Lines).Ranges[Index - 1]);
|
|
||||||
ScanFrom(Index - 1);
|
|
||||||
end else begin
|
|
||||||
fHighlighter.ResetRange;
|
|
||||||
TSynEditStringList(Lines).Ranges[0] := fHighlighter.GetRange;
|
|
||||||
if (Lines.Count > 1) then
|
|
||||||
ScanFrom(0);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
{$ENDIF}
|
|
||||||
InvalidateLines(Index + 1, -1);
|
|
||||||
InvalidateGutterLines(Index + 1, -1);
|
|
||||||
end;
|
end;
|
||||||
{end} //mh 2000-10-10
|
|
||||||
|
|
||||||
procedure TCustomSynEdit.ListCleared(Sender: TObject);
|
procedure TCustomSynEdit.ListCleared(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
@ -5018,92 +4977,6 @@ begin
|
|||||||
Include(fStatusChanges, scAll);
|
Include(fStatusChanges, scAll);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomSynEdit.ListDeleted(Index: Integer);
|
|
||||||
// Index is 0 based
|
|
||||||
begin
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
ScanFrom(Index - 1);
|
|
||||||
{$ELSE}
|
|
||||||
if Assigned(fHighlighter) and (Lines.Count >= 1) then begin
|
|
||||||
if (Index > 0) then begin
|
|
||||||
// start scanning from prior line
|
|
||||||
{begin} //mh 2000-10-10
|
|
||||||
//DebugLn(['TCustomSynEdit.ListDeleted A Index=',Index]);
|
|
||||||
fHighlighter.SetRange(TSynEditStringList(Lines).Ranges[Index - 1]);
|
|
||||||
ScanFrom(Index - 1);
|
|
||||||
end else begin
|
|
||||||
//DebugLn(['TCustomSynEdit.ListDeleted B Index=',Index]);
|
|
||||||
fHighlighter.ResetRange;
|
|
||||||
TSynEditStringList(Lines).Ranges[0] := fHighlighter.GetRange;
|
|
||||||
{end} //mh 2000-10-10
|
|
||||||
if (Lines.Count > 1) then
|
|
||||||
ScanFrom(0);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
{$ENDIF}
|
|
||||||
InvalidateLines(Index + 1, -1);
|
|
||||||
InvalidateGutterLines(Index + 1, -1);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCustomSynEdit.ListInserted(Index: Integer);
|
|
||||||
// Index is 0 based
|
|
||||||
begin
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
ScanFrom(Index - 1);
|
|
||||||
{$ELSE}
|
|
||||||
if Assigned(fHighlighter) and (Lines.Count >= 1) then begin
|
|
||||||
if (Index > 0) then begin
|
|
||||||
// start scanning from prior line
|
|
||||||
{begin} //mh 2000-10-10
|
|
||||||
// the line and the range of the line
|
|
||||||
//DebugLn(['TCustomSynEdit.ListInserted A Index=',Index]);
|
|
||||||
fHighlighter.SetRange(TSynEditStringList(Lines).Ranges[Index - 1]);
|
|
||||||
ScanFrom(Index - 1);
|
|
||||||
end else begin
|
|
||||||
//DebugLn(['TCustomSynEdit.ListInserted B Index=',Index]);
|
|
||||||
fHighlighter.ReSetRange;
|
|
||||||
TSynEditStringList(Lines).Ranges[0] := fHighlighter.GetRange;
|
|
||||||
{end} //mh 2000-10-10
|
|
||||||
if (Lines.Count > 1) then
|
|
||||||
ScanFrom(0);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
{$ENDIF}
|
|
||||||
InvalidateLines(Index + 1, -1);
|
|
||||||
InvalidateGutterLines(Index + 1, -1);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCustomSynEdit.ListPutted(Index: Integer);
|
|
||||||
// Index is 0 based
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
var
|
|
||||||
EndIndex: Integer;
|
|
||||||
{$ENDIF}
|
|
||||||
begin
|
|
||||||
//DebugLn(['TCustomSynEdit.ListPutted Index=',Index,' PaintLock=',PaintLock]);
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
if PaintLock>0 then begin
|
|
||||||
if (fHighlighterNeedsUpdateStartLine<1)
|
|
||||||
or (fHighlighterNeedsUpdateStartLine>Index+1) then
|
|
||||||
fHighlighterNeedsUpdateStartLine:=Index+1;
|
|
||||||
if (fHighlighterNeedsUpdateEndLine<1)
|
|
||||||
or (fHighlighterNeedsUpdateEndLine<Index+1) then
|
|
||||||
fHighlighterNeedsUpdateEndLine:=Index+1;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
EndIndex:=ScanFrom(Index) + 1;
|
|
||||||
InvalidateLines(Index + 1, EndIndex);
|
|
||||||
InvalidateGutterLines(Index + 1, EndIndex);
|
|
||||||
{$ELSE}
|
|
||||||
if Assigned(fHighlighter) then begin
|
|
||||||
// fHighlighter.SetRange(Lines.Objects[Index]);
|
|
||||||
fHighlighter.SetRange(TSynEditStringList(Lines).Ranges[Index]); //mh 2000-10-10
|
|
||||||
InvalidateLines(Index + 1, ScanFrom(Index) + 1);
|
|
||||||
end else
|
|
||||||
InvalidateLines(Index + 1, Index + 1);
|
|
||||||
{$ENDIF}
|
|
||||||
end;
|
|
||||||
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
procedure TCustomSynEdit.FoldChanged(Index : integer);
|
procedure TCustomSynEdit.FoldChanged(Index : integer);
|
||||||
var
|
var
|
||||||
|
@ -163,10 +163,13 @@ type
|
|||||||
*ViewPos = Line (1-based) in the array of viewable/visible lines
|
*ViewPos = Line (1-based) in the array of viewable/visible lines
|
||||||
*TextIndex = Line (0-based) in the complete text(folded and unfolded)
|
*TextIndex = Line (0-based) in the complete text(folded and unfolded)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TSynEditFoldMinClass = class end; // For RegisterAttribute
|
||||||
|
TSynEditFoldEndClass = class end; // For RegisterAttribute
|
||||||
|
|
||||||
{ TSynEditFoldedView }
|
{ TSynEditFoldedView }
|
||||||
|
|
||||||
TSynEditFoldedView = class {TODO: Make a base class, that just maps everything one to one}
|
TSynEditFoldedView = class // TODO: class(TSynEditStringsLinked)
|
||||||
private
|
private
|
||||||
fCaret: TSynEditCaret;
|
fCaret: TSynEditCaret;
|
||||||
fLines : TSynEditStrings;
|
fLines : TSynEditStrings;
|
||||||
@ -183,6 +186,8 @@ type
|
|||||||
|
|
||||||
function GetCount : integer;
|
function GetCount : integer;
|
||||||
function GetDrawDivider(Index : integer) : Boolean;
|
function GetDrawDivider(Index : integer) : Boolean;
|
||||||
|
function GetFoldEndLevel(Index: integer): integer;
|
||||||
|
function GetFoldMinLevel(Index: integer): integer;
|
||||||
function GetFoldNestLevel(index : Integer): integer;
|
function GetFoldNestLevel(index : Integer): integer;
|
||||||
function GetLines(index : Integer) : String;
|
function GetLines(index : Integer) : String;
|
||||||
function GetDisplayNumber(index : Integer) : Integer;
|
function GetDisplayNumber(index : Integer) : Integer;
|
||||||
@ -191,6 +196,8 @@ type
|
|||||||
function GetFoldType(index : Integer) : TSynEditCodeFoldType;
|
function GetFoldType(index : Integer) : TSynEditCodeFoldType;
|
||||||
function IsFolded(index : integer) : Boolean; // TextIndex
|
function IsFolded(index : integer) : Boolean; // TextIndex
|
||||||
procedure PutRange(Index : integer; const AValue : TSynEditRange);
|
procedure PutRange(Index : integer; const AValue : TSynEditRange);
|
||||||
|
procedure SetFoldEndLevel(Index: integer; const AValue: integer);
|
||||||
|
procedure SetFoldMinLevel(Index: integer; const AValue: integer);
|
||||||
procedure SetTopLine(const ALine : integer);
|
procedure SetTopLine(const ALine : integer);
|
||||||
function GetTopTextIndex : integer;
|
function GetTopTextIndex : integer;
|
||||||
procedure SetTopTextIndex(const AIndex : integer);
|
procedure SetTopTextIndex(const AIndex : integer);
|
||||||
@ -202,6 +209,7 @@ type
|
|||||||
|
|
||||||
procedure DoCaretChanged(Sender : TObject);
|
procedure DoCaretChanged(Sender : TObject);
|
||||||
Procedure LineCountChanged(Sender: TSynEditStrings; AIndex, ACount : Integer);
|
Procedure LineCountChanged(Sender: TSynEditStrings; AIndex, ACount : Integer);
|
||||||
|
Procedure LineTextChanged(Sender: TSynEditStrings; AIndex, ACount : Integer);
|
||||||
Procedure LinesInsertedAtTextIndex(AStartIndex, ALineCount : Integer;
|
Procedure LinesInsertedAtTextIndex(AStartIndex, ALineCount : Integer;
|
||||||
SkipFixFolding : Boolean = False);
|
SkipFixFolding : Boolean = False);
|
||||||
Procedure LinesInsertedAtViewPos(AStartPos, ALineCount : Integer;
|
Procedure LinesInsertedAtViewPos(AStartPos, ALineCount : Integer;
|
||||||
@ -275,6 +283,12 @@ type
|
|||||||
|
|
||||||
property OnFoldChanged: TFoldChangedEvent (* reports 1-based line *) {TODO: synedit expects 0 based }
|
property OnFoldChanged: TFoldChangedEvent (* reports 1-based line *) {TODO: synedit expects 0 based }
|
||||||
read fOnFoldChanged write fOnFoldChanged;
|
read fOnFoldChanged write fOnFoldChanged;
|
||||||
|
public
|
||||||
|
// TextIndex
|
||||||
|
property FoldMinLevel[Index: integer]: integer read GetFoldMinLevel
|
||||||
|
write SetFoldMinLevel;
|
||||||
|
property FoldEndLevel[Index: integer]: integer read GetFoldEndLevel
|
||||||
|
write SetFoldEndLevel;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -1392,13 +1406,16 @@ end;
|
|||||||
|
|
||||||
constructor TSynEditFoldedView.Create(aTextView : TSynEditStrings; ACaret: TSynEditCaret);
|
constructor TSynEditFoldedView.Create(aTextView : TSynEditStrings; ACaret: TSynEditCaret);
|
||||||
begin
|
begin
|
||||||
|
fLines := aTextView;
|
||||||
|
flines.RegisterAttribute(TSynEditFoldMinClass, SizeOf(Integer));
|
||||||
|
flines.RegisterAttribute(TSynEditFoldEndClass, SizeOf(Integer));
|
||||||
fCaret := ACaret;
|
fCaret := ACaret;
|
||||||
fCaret.AddChangeHandler({$IFDEF FPC}@{$ENDIF}DoCaretChanged);
|
fCaret.AddChangeHandler({$IFDEF FPC}@{$ENDIF}DoCaretChanged);
|
||||||
fLines := aTextView;
|
|
||||||
fFoldTree := TSynTextFoldAVLTree.Create;
|
fFoldTree := TSynTextFoldAVLTree.Create;
|
||||||
fTopLine := 0;
|
fTopLine := 0;
|
||||||
fLinesInWindow := -1;
|
fLinesInWindow := -1;
|
||||||
fLines.AddChangeHandler(senrLineCount, {$IFDEF FPC}@{$ENDIF}LineCountChanged);
|
fLines.AddChangeHandler(senrLineCount, {$IFDEF FPC}@{$ENDIF}LineCountChanged);
|
||||||
|
fLines.AddChangeHandler(senrLineChange, {$IFDEF FPC}@{$ENDIF}LineTextChanged);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TSynEditFoldedView.Destroy;
|
destructor TSynEditFoldedView.Destroy;
|
||||||
@ -1537,16 +1554,16 @@ end;
|
|||||||
function TSynEditFoldedView.GetDrawDivider(Index : integer) : Boolean;
|
function TSynEditFoldedView.GetDrawDivider(Index : integer) : Boolean;
|
||||||
begin
|
begin
|
||||||
result := (FoldType[Index] in [cfEnd])
|
result := (FoldType[Index] in [cfEnd])
|
||||||
and (fLines.FoldEndLevel[TextIndex[index]] < CFDividerDrawLevel);
|
and (FoldEndLevel[TextIndex[index]] < CFDividerDrawLevel);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynEditFoldedView.GetFoldNestLevel(index : Integer): integer;
|
function TSynEditFoldedView.GetFoldNestLevel(index : Integer): integer;
|
||||||
begin
|
begin
|
||||||
if (index < 0) or (index > fLinesInWindow) then exit(-1);
|
if (index < 0) or (index > fLinesInWindow) then exit(-1);
|
||||||
if (fFoldTypeList[index] = cfEnd) and (fTextIndexList[index] > 0) then
|
if (fFoldTypeList[index] = cfEnd) and (fTextIndexList[index] > 0) then
|
||||||
Result := fLines.FoldEndLevel[fTextIndexList[index]-1]
|
Result := FoldEndLevel[fTextIndexList[index]-1]
|
||||||
else
|
else
|
||||||
Result := fLines.FoldEndLevel[fTextIndexList[index]];
|
Result := FoldEndLevel[fTextIndexList[index]];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(* Topline *)
|
(* Topline *)
|
||||||
@ -1597,13 +1614,13 @@ begin
|
|||||||
if (node.IsInFold) and (tpos+1 = node.StartLine)
|
if (node.IsInFold) and (tpos+1 = node.StartLine)
|
||||||
then fFoldTypeList[i] := cfCollapsed
|
then fFoldTypeList[i] := cfCollapsed
|
||||||
else
|
else
|
||||||
if fLines.FoldEndLevel[tpos-1] > fLines.FoldMinLevel[tpos-1]
|
if FoldEndLevel[tpos-1] > FoldMinLevel[tpos-1]
|
||||||
then fFoldTypeList[i] := cfExpanded
|
then fFoldTypeList[i] := cfExpanded
|
||||||
else
|
else
|
||||||
if (tpos > 1) and (fLines.FoldEndLevel[tpos-2] > fLines.FoldMinLevel[tpos-1])
|
if (tpos > 1) and (FoldEndLevel[tpos-2] > FoldMinLevel[tpos-1])
|
||||||
then fFoldTypeList[i] := cfEnd
|
then fFoldTypeList[i] := cfEnd
|
||||||
else
|
else
|
||||||
if fLines.FoldEndLevel[tpos-1] > 0
|
if FoldEndLevel[tpos-1] > 0
|
||||||
then fFoldTypeList[i] := cfContinue
|
then fFoldTypeList[i] := cfContinue
|
||||||
else fFoldTypeList[i] := cfNone;
|
else fFoldTypeList[i] := cfNone;
|
||||||
|
|
||||||
@ -1660,6 +1677,34 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
(* Folding *)
|
(* Folding *)
|
||||||
|
procedure TSynEditFoldedView.SetFoldEndLevel(Index: integer; const AValue: integer);
|
||||||
|
begin
|
||||||
|
if (Index >= 0) and (Index < fLines.Count) then
|
||||||
|
fLines.Attribute[TSynEditFoldEndClass, Index] := Pointer(PtrUInt(AValue));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynEditFoldedView.SetFoldMinLevel(Index: integer; const AValue: integer);
|
||||||
|
begin
|
||||||
|
if (Index >= 0) and (Index < fLines.Count) then
|
||||||
|
fLines.Attribute[TSynEditFoldMinClass, Index] := Pointer(PtrUInt(AValue));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynEditFoldedView.GetFoldEndLevel(Index: integer): integer;
|
||||||
|
begin
|
||||||
|
if (Index >= 0) and (Index < fLines.Count) then
|
||||||
|
Result := Integer(fLines.Attribute[TSynEditFoldEndClass, Index])
|
||||||
|
else
|
||||||
|
Result := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynEditFoldedView.GetFoldMinLevel(Index: integer): integer;
|
||||||
|
begin
|
||||||
|
if (Index >= 0) and (Index < fLines.Count) then
|
||||||
|
Result := Integer(fLines.Attribute[TSynEditFoldMinClass, Index])
|
||||||
|
else
|
||||||
|
Result := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSynEditFoldedView.FoldAtLine(AStartLine : Integer);
|
procedure TSynEditFoldedView.FoldAtLine(AStartLine : Integer);
|
||||||
begin
|
begin
|
||||||
FoldAtViewPos(AStartLine + fTopLine);
|
FoldAtViewPos(AStartLine + fTopLine);
|
||||||
@ -1676,11 +1721,11 @@ var
|
|||||||
begin
|
begin
|
||||||
cnt := fLines.Count;
|
cnt := fLines.Count;
|
||||||
// AStartLine is 1-based // FoldEndLevel is 0-based
|
// AStartLine is 1-based // FoldEndLevel is 0-based
|
||||||
lvl := fLines.FoldEndLevel[ALine];
|
lvl := FoldEndLevel[ALine];
|
||||||
i := ALine+1;
|
i := ALine+1;
|
||||||
while (i < cnt) and (fLines.FoldMinLevel[i] >= lvl) do inc(i);
|
while (i < cnt) and (FoldMinLevel[i] >= lvl) do inc(i);
|
||||||
// check if fold last line of block (not mixed "end begin")
|
// check if fold last line of block (not mixed "end begin")
|
||||||
if (i < cnt) and (fLines.FoldEndLevel[i] <= fLines.FoldMinLevel[i]) then inc(i);
|
if (i < cnt) and (FoldEndLevel[i] <= FoldMinLevel[i]) then inc(i);
|
||||||
Result := i-ALine-1;
|
Result := i-ALine-1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1741,8 +1786,8 @@ begin
|
|||||||
fFoldTree.Clear;
|
fFoldTree.Clear;
|
||||||
i := 0;
|
i := 0;
|
||||||
while i < fLines.Count do begin
|
while i < fLines.Count do begin
|
||||||
if (fLines.FoldEndLevel[i] > fLines.FoldMinLevel[i])
|
if (FoldEndLevel[i] > FoldMinLevel[i])
|
||||||
and (fLines.FoldEndLevel[i] > StartLevel) then begin
|
and (FoldEndLevel[i] > StartLevel) then begin
|
||||||
l := LengthForFoldAtTextIndex(i);
|
l := LengthForFoldAtTextIndex(i);
|
||||||
// i is 0-based
|
// i is 0-based
|
||||||
// FoldTree is 1-based AND first line remains visble
|
// FoldTree is 1-based AND first line remains visble
|
||||||
@ -1807,7 +1852,7 @@ begin
|
|||||||
LastCount := cnt;
|
LastCount := cnt;
|
||||||
|
|
||||||
// look at the 0-based cfCollapsed (visible) Line
|
// look at the 0-based cfCollapsed (visible) Line
|
||||||
if not(fLines.FoldEndLevel[line -1] > fLines.FoldMinLevel[line - 1]) then begin
|
if not(FoldEndLevel[line -1] > FoldMinLevel[line - 1]) then begin
|
||||||
// the Fold-Begin of this node has gone
|
// the Fold-Begin of this node has gone
|
||||||
tmpnode := node.Prev;
|
tmpnode := node.Prev;
|
||||||
aFoldTree.RemoveFoldForNodeAtLine(node, -1); // Don't touch any nested node
|
aFoldTree.RemoveFoldForNodeAtLine(node, -1); // Don't touch any nested node
|
||||||
@ -1852,6 +1897,7 @@ end;
|
|||||||
|
|
||||||
procedure TSynEditFoldedView.LineCountChanged(Sender: TSynEditStrings; AIndex, ACount : Integer);
|
procedure TSynEditFoldedView.LineCountChanged(Sender: TSynEditStrings; AIndex, ACount : Integer);
|
||||||
begin
|
begin
|
||||||
|
LineTextChanged(Sender, AIndex, ACount);
|
||||||
// no need for fix folding => synedit will be called, and scanlines will call fixfolding
|
// no need for fix folding => synedit will be called, and scanlines will call fixfolding
|
||||||
{TODO: a "need fix folding" flag => to ensure it will be called if synedit doesnt}
|
{TODO: a "need fix folding" flag => to ensure it will be called if synedit doesnt}
|
||||||
if (fLockCount > 0) and (AIndex < max(fNeedFixFrom, fNeedFixMinEnd)) then begin
|
if (fLockCount > 0) and (AIndex < max(fNeedFixFrom, fNeedFixMinEnd)) then begin
|
||||||
@ -1864,6 +1910,16 @@ begin
|
|||||||
else LinesInsertedAtTextIndex(AIndex, ACount, true);
|
else LinesInsertedAtTextIndex(AIndex, ACount, true);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSynEditFoldedView.LineTextChanged(Sender: TSynEditStrings; AIndex, ACount: Integer);
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
for i := AIndex to AIndex + ACount - 1 do begin
|
||||||
|
FoldMinLevel[Count-1]:=-1;
|
||||||
|
FoldEndLevel[Count-1]:=-1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSynEditFoldedView.FixFoldingAtTextIndex(AStartIndex: Integer; AMinEndLine : Integer);
|
procedure TSynEditFoldedView.FixFoldingAtTextIndex(AStartIndex: Integer; AMinEndLine : Integer);
|
||||||
begin
|
begin
|
||||||
FixFolding(AStartIndex + 1, AMinEndLine, fFoldTree);
|
FixFolding(AStartIndex + 1, AMinEndLine, fFoldTree);
|
||||||
@ -1877,8 +1933,8 @@ begin
|
|||||||
Result := -1;
|
Result := -1;
|
||||||
i := ALine-1;
|
i := ALine-1;
|
||||||
|
|
||||||
if (i>0) and (fLines.FoldMinLevel[i] < fLines.FoldEndLevel[i-1])then begin
|
if (i>0) and (FoldMinLevel[i] < FoldEndLevel[i-1])then begin
|
||||||
if fLines.FoldMinLevel[i] < fLines.FoldEndLevel[i] then begin
|
if FoldMinLevel[i] < FoldEndLevel[i] then begin
|
||||||
// this is a combined "end begin" line
|
// this is a combined "end begin" line
|
||||||
node := fFoldTree.FindFoldForLine(ALine, true);
|
node := fFoldTree.FindFoldForLine(ALine, true);
|
||||||
if node.IsInFold and (node.StartLine = ALine +1) then
|
if node.IsInFold and (node.StartLine = ALine +1) then
|
||||||
@ -1888,8 +1944,8 @@ begin
|
|||||||
// this is a "end" line
|
// this is a "end" line
|
||||||
dec(i);
|
dec(i);
|
||||||
end;
|
end;
|
||||||
l := fLines.FoldEndLevel[i];
|
l := FoldEndLevel[i];
|
||||||
end else if fLines.FoldEndLevel[i] = 0 then
|
end else if FoldEndLevel[i] = 0 then
|
||||||
exit
|
exit
|
||||||
else begin
|
else begin
|
||||||
// check if current line is cfCollapsed
|
// check if current line is cfCollapsed
|
||||||
@ -1897,12 +1953,12 @@ begin
|
|||||||
if node.IsInFold and (node.StartLine = ALine +1) then
|
if node.IsInFold and (node.StartLine = ALine +1) then
|
||||||
dec(i);
|
dec(i);
|
||||||
if i < 0 then exit;
|
if i < 0 then exit;
|
||||||
l := fLines.FoldEndLevel[i]
|
l := FoldEndLevel[i]
|
||||||
end;
|
end;
|
||||||
|
|
||||||
while (i > 0) and (fLines.FoldMinLevel[i] >= l) do
|
while (i > 0) and (FoldMinLevel[i] >= l) do
|
||||||
dec(i);
|
dec(i);
|
||||||
if (fLines.FoldEndLevel[i] > 0) then // TODO, check for collapsed at index = 0
|
if (FoldEndLevel[i] > 0) then // TODO, check for collapsed at index = 0
|
||||||
Result := i + 1;
|
Result := i + 1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -42,22 +42,15 @@ type
|
|||||||
FIsUtf8: Boolean;
|
FIsUtf8: Boolean;
|
||||||
function GetIsUtf8 : Boolean; virtual;
|
function GetIsUtf8 : Boolean; virtual;
|
||||||
procedure SetIsUtf8(const AValue : Boolean); virtual;
|
procedure SetIsUtf8(const AValue : Boolean); virtual;
|
||||||
function GetFoldEndLevel(Index: integer): integer; virtual; abstract;
|
|
||||||
function GetFoldMinLevel(Index: integer): integer; virtual; abstract;
|
|
||||||
procedure SetFoldEndLevel(Index: integer; const AValue: integer); virtual; abstract;
|
|
||||||
procedure SetFoldMinLevel(Index: integer; const AValue: integer); virtual; abstract;
|
|
||||||
function GetRange(Index: integer): TSynEditRange; virtual; abstract;
|
function GetRange(Index: integer): TSynEditRange; virtual; abstract;
|
||||||
procedure PutRange(Index: integer; ARange: TSynEditRange); virtual; abstract;
|
procedure PutRange(Index: integer; ARange: TSynEditRange); virtual; abstract;
|
||||||
function GetAttribute(const Owner: TClass; const Index: Integer): Pointer; virtual; abstract;
|
function GetAttribute(const Owner: TClass; const Index: Integer): Pointer; virtual; abstract;
|
||||||
procedure SetAttribute(const Owner: TClass; const Index: Integer; const AValue: Pointer); virtual; abstract;
|
procedure SetAttribute(const Owner: TClass; const Index: Integer; const AValue: Pointer); virtual; abstract;
|
||||||
procedure RegisterAttribute(const Index: TClass; const Size: Word); virtual; abstract;
|
|
||||||
|
|
||||||
function GetExpandedString(Index: integer): string; virtual; abstract;
|
function GetExpandedString(Index: integer): string; virtual; abstract;
|
||||||
function GetLengthOfLongestLine: integer; virtual; abstract;
|
function GetLengthOfLongestLine: integer; virtual; abstract;
|
||||||
procedure SetTextStr(const Value: string); override;
|
procedure SetTextStr(const Value: string); override;
|
||||||
|
|
||||||
property Attribute[Owner: TClass; Index: Integer]: Pointer
|
|
||||||
read GetAttribute write SetAttribute;
|
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
procedure DeleteLines(Index, NumLines: integer); virtual; abstract;
|
procedure DeleteLines(Index, NumLines: integer); virtual; abstract;
|
||||||
@ -65,6 +58,9 @@ type
|
|||||||
procedure InsertStrings(Index: integer; NewStrings: TStrings); virtual; abstract;
|
procedure InsertStrings(Index: integer; NewStrings: TStrings); virtual; abstract;
|
||||||
procedure ClearRanges(ARange: TSynEditRange); virtual; abstract;
|
procedure ClearRanges(ARange: TSynEditRange); virtual; abstract;
|
||||||
|
|
||||||
|
procedure RegisterAttribute(const Index: TClass; const Size: Word); virtual; abstract;
|
||||||
|
property Attribute[Owner: TClass; Index: Integer]: Pointer
|
||||||
|
read GetAttribute write SetAttribute;
|
||||||
procedure AddChangeHandler(AReason: TSynEditNotifyReason;
|
procedure AddChangeHandler(AReason: TSynEditNotifyReason;
|
||||||
AHandler: TStringListLineCountEvent); virtual; abstract;
|
AHandler: TStringListLineCountEvent); virtual; abstract;
|
||||||
procedure RemoveChangeHandler(AReason: TSynEditNotifyReason;
|
procedure RemoveChangeHandler(AReason: TSynEditNotifyReason;
|
||||||
@ -89,10 +85,6 @@ type
|
|||||||
property LengthOfLongestLine: integer read GetLengthOfLongestLine;
|
property LengthOfLongestLine: integer read GetLengthOfLongestLine;
|
||||||
property IsUtf8: Boolean read GetIsUtf8 write SetIsUtf8;
|
property IsUtf8: Boolean read GetIsUtf8 write SetIsUtf8;
|
||||||
property Ranges[Index: integer]: TSynEditRange read GetRange write PutRange;
|
property Ranges[Index: integer]: TSynEditRange read GetRange write PutRange;
|
||||||
property FoldMinLevel[Index: integer]: integer read GetFoldMinLevel
|
|
||||||
write SetFoldMinLevel;
|
|
||||||
property FoldEndLevel[Index: integer]: integer read GetFoldEndLevel
|
|
||||||
write SetFoldEndLevel;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TSynEditStringsLinked }
|
{ TSynEditStringsLinked }
|
||||||
@ -104,17 +96,11 @@ type
|
|||||||
function GetIsUtf8 : Boolean; override;
|
function GetIsUtf8 : Boolean; override;
|
||||||
procedure SetIsUtf8(const AValue : Boolean); override;
|
procedure SetIsUtf8(const AValue : Boolean); override;
|
||||||
|
|
||||||
function GetFoldEndLevel(Index: integer): integer; override;
|
|
||||||
function GetFoldMinLevel(Index: integer): integer; override;
|
|
||||||
procedure SetFoldEndLevel(Index: integer; const AValue: integer); override;
|
|
||||||
procedure SetFoldMinLevel(Index: integer; const AValue: integer); override;
|
|
||||||
function GetRange(Index: integer): TSynEditRange; override;
|
function GetRange(Index: integer): TSynEditRange; override;
|
||||||
procedure PutRange(Index: integer; ARange: TSynEditRange); override;
|
procedure PutRange(Index: integer; ARange: TSynEditRange); override;
|
||||||
|
|
||||||
function GetAttribute(const Owner: TClass; const Index: Integer): Pointer; override;
|
function GetAttribute(const Owner: TClass; const Index: Integer): Pointer; override;
|
||||||
procedure SetAttribute(const Owner: TClass; const Index: Integer; const AValue: Pointer); override;
|
procedure SetAttribute(const Owner: TClass; const Index: Integer; const AValue: Pointer); override;
|
||||||
// Size: 0 = Bit (TODO); 1..8 Size In Byte "SizeOf()"
|
|
||||||
procedure RegisterAttribute(const Index: TClass; const Size: Word); override;
|
|
||||||
protected
|
protected
|
||||||
function GetCount: integer; override;
|
function GetCount: integer; override;
|
||||||
function GetCapacity: integer;
|
function GetCapacity: integer;
|
||||||
@ -142,24 +128,12 @@ type
|
|||||||
|
|
||||||
procedure ClearRanges(ARange: TSynEditRange); override;
|
procedure ClearRanges(ARange: TSynEditRange); override;
|
||||||
|
|
||||||
|
// Size: 0 = Bit (TODO); 1..8 Size In Byte "SizeOf()"
|
||||||
|
procedure RegisterAttribute(const Index: TClass; const Size: Word); override;
|
||||||
procedure AddChangeHandler(AReason: TSynEditNotifyReason;
|
procedure AddChangeHandler(AReason: TSynEditNotifyReason;
|
||||||
AHandler: TStringListLineCountEvent); override;
|
AHandler: TStringListLineCountEvent); override;
|
||||||
procedure RemoveChangeHandler(AReason: TSynEditNotifyReason;
|
procedure RemoveChangeHandler(AReason: TSynEditNotifyReason;
|
||||||
AHandler: TStringListLineCountEvent); override;
|
AHandler: TStringListLineCountEvent); override;
|
||||||
(* public
|
|
||||||
// Byte to Char
|
|
||||||
function LogicalToPhysicalPos(const p: TPoint): TPoint;
|
|
||||||
function LogicalToPhysicalCol(const Line: string;
|
|
||||||
LogicalPos: integer): integer;
|
|
||||||
function LogicalToPhysicalCol(Line: PChar; LineLen: integer;
|
|
||||||
LogicalPos, StartBytePos, StartPhysicalPos: integer): integer;
|
|
||||||
// Char to Byte
|
|
||||||
function PhysicalToLogicalPos(const p: TPoint): TPoint;
|
|
||||||
function PhysicalToLogicalCol(const Line: string;
|
|
||||||
PhysicalPos: integer): integer;
|
|
||||||
function PhysicalToLogicalCol(const Line: string;
|
|
||||||
PhysicalPos, StartBytePos, StartPhysicalPos: integer): integer;
|
|
||||||
*)
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -363,27 +337,6 @@ begin
|
|||||||
FSynStrings.IsUtf8 := AValue;
|
FSynStrings.IsUtf8 := AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//Fold
|
|
||||||
function TSynEditStringsLinked.GetFoldEndLevel(Index: integer): integer;
|
|
||||||
begin
|
|
||||||
Result:= fSynStrings.FoldEndLevel[Index];
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TSynEditStringsLinked.GetFoldMinLevel(Index: integer): integer;
|
|
||||||
begin
|
|
||||||
Result:= fSynStrings.FoldMinLevel[Index];
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TSynEditStringsLinked.SetFoldEndLevel(Index: integer; const AValue: integer);
|
|
||||||
begin
|
|
||||||
fSynStrings.FoldEndLevel[Index] := AValue;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TSynEditStringsLinked.SetFoldMinLevel(Index: integer; const AValue: integer);
|
|
||||||
begin
|
|
||||||
fSynStrings.FoldMinLevel[Index] := AValue;
|
|
||||||
end;
|
|
||||||
|
|
||||||
//Ranges
|
//Ranges
|
||||||
function TSynEditStringsLinked.GetRange(Index: integer): TSynEditRange;
|
function TSynEditStringsLinked.GetRange(Index: integer): TSynEditRange;
|
||||||
begin
|
begin
|
||||||
|
@ -57,14 +57,8 @@ type
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
TSynEditRangeClass = class end; // For Register
|
TSynEditRangeClass = class end; // For Register
|
||||||
TSynEditFlagsClass = class end; // For Register
|
TSynEditFlagsClass = class end; // For Register
|
||||||
TSynEditFoldMinClass = class end; // For Register
|
|
||||||
TSynEditFoldEndClass = class end; // For Register
|
|
||||||
TSynEditExpLenClass = class end; // For Register
|
|
||||||
|
|
||||||
TSynEditStringFlag = (
|
TSynEditStringFlag = (
|
||||||
sfHasTabs, //
|
|
||||||
sfHasNoTabs, //
|
|
||||||
sfExpandedLengthUnknown, //
|
|
||||||
sfModified, // a line is modified and not saved after
|
sfModified, // a line is modified and not saved after
|
||||||
sfSaved // a line is modified and saved after
|
sfSaved // a line is modified and saved after
|
||||||
);
|
);
|
||||||
@ -161,19 +155,9 @@ type
|
|||||||
Procedure SetAttributeSize(NewSize: Integer);
|
Procedure SetAttributeSize(NewSize: Integer);
|
||||||
procedure SetFlags(Index: Integer; const AValue: TSynEditStringFlags);
|
procedure SetFlags(Index: Integer; const AValue: TSynEditStringFlags);
|
||||||
protected
|
protected
|
||||||
fOnAdded: TStringListIndexEvent;
|
|
||||||
fOnCleared: TNotifyEvent;
|
fOnCleared: TNotifyEvent;
|
||||||
fOnDeleted: TStringListIndexEvent;
|
|
||||||
fOnInserted: TStringListIndexEvent;
|
|
||||||
fOnPutted: TStringListIndexEvent;
|
|
||||||
function GetExpandedString(Index: integer): string; override;
|
function GetExpandedString(Index: integer): string; override;
|
||||||
function GetLengthOfLongestLine: integer; override;
|
function GetLengthOfLongestLine: integer; override;
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
function GetFoldEndLevel(Index: integer): integer; override;
|
|
||||||
function GetFoldMinLevel(Index: integer): integer; override;
|
|
||||||
procedure SetFoldEndLevel(Index: integer; const AValue: integer); override;
|
|
||||||
procedure SetFoldMinLevel(Index: integer; const AValue: integer); override;
|
|
||||||
{$ENDIF}
|
|
||||||
function GetRange(Index: integer): TSynEditRange; {$IFDEF SYN_LAZARUS}override;{$ENDIF}
|
function GetRange(Index: integer): TSynEditRange; {$IFDEF SYN_LAZARUS}override;{$ENDIF}
|
||||||
procedure PutRange(Index: integer; ARange: TSynEditRange); {$IFDEF SYN_LAZARUS}override;{$ENDIF}
|
procedure PutRange(Index: integer; ARange: TSynEditRange); {$IFDEF SYN_LAZARUS}override;{$ENDIF}
|
||||||
function GetAttribute(const Owner: TClass; const Index: Integer): Pointer; override;
|
function GetAttribute(const Owner: TClass; const Index: Integer): Pointer; override;
|
||||||
@ -217,25 +201,16 @@ type
|
|||||||
procedure RemoveChangeHandler(AReason: TSynEditNotifyReason;
|
procedure RemoveChangeHandler(AReason: TSynEditNotifyReason;
|
||||||
AHandler: TStringListLineCountEvent); override;
|
AHandler: TStringListLineCountEvent); override;
|
||||||
public
|
public
|
||||||
property DosFileFormat: boolean read fDosFileFormat write fDosFileFormat;
|
property DosFileFormat: boolean read fDosFileFormat write fDosFileFormat;
|
||||||
{begin} //mh 2000-10-19
|
{begin} //mh 2000-10-19
|
||||||
property ExpandedStrings[Index: integer]: string read GetExpandedString;
|
property ExpandedStrings[Index: integer]: string read GetExpandedString;
|
||||||
property LengthOfLongestLine: integer read GetLengthOfLongestLine;
|
property LengthOfLongestLine: integer read GetLengthOfLongestLine;
|
||||||
{end} //mh 2000-10-19
|
{end} //mh 2000-10-19
|
||||||
property Ranges[Index: integer]: TSynEditRange read GetRange write PutRange;
|
property Ranges[Index: integer]: TSynEditRange read GetRange write PutRange;
|
||||||
property OnAdded: TStringListIndexEvent read fOnAdded write fOnAdded;
|
|
||||||
property OnChange: TNotifyEvent read fOnChange write fOnChange;
|
property OnChange: TNotifyEvent read fOnChange write fOnChange;
|
||||||
property OnChanging: TNotifyEvent read fOnChanging write fOnChanging;
|
property OnChanging: TNotifyEvent read fOnChanging write fOnChanging;
|
||||||
property OnCleared: TNotifyEvent read fOnCleared write fOnCleared;
|
property OnCleared: TNotifyEvent read fOnCleared write fOnCleared;
|
||||||
property OnDeleted: TStringListIndexEvent read fOnDeleted write fOnDeleted;
|
|
||||||
property OnInserted: TStringListIndexEvent read fOnInserted
|
|
||||||
write fOnInserted;
|
|
||||||
property OnPutted: TStringListIndexEvent read fOnPutted write fOnPutted;
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
property FoldMinLevel[Index: integer]: integer read GetFoldMinLevel
|
|
||||||
write SetFoldMinLevel;
|
|
||||||
property FoldEndLevel[Index: integer]: integer read GetFoldEndLevel
|
|
||||||
write SetFoldEndLevel;
|
|
||||||
property Flags[Index: Integer]: TSynEditStringFlags read GetFlags
|
property Flags[Index: Integer]: TSynEditStringFlags read GetFlags
|
||||||
write SetFlags;
|
write SetFlags;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -312,12 +287,11 @@ type
|
|||||||
implementation
|
implementation
|
||||||
|
|
||||||
{$IFNDEF FPC}
|
{$IFNDEF FPC}
|
||||||
|
{$IFDEF SYN_COMPILER_3_UP}
|
||||||
{$IFDEF SYN_COMPILER_3_UP} //mh 2000-10-18
|
|
||||||
resourcestring
|
resourcestring
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
const
|
const
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
const
|
const
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -539,9 +513,6 @@ begin
|
|||||||
SetAttributeSize(0);
|
SetAttributeSize(0);
|
||||||
RegisterAttribute(TSynEditRangeClass, SizeOf(Pointer));
|
RegisterAttribute(TSynEditRangeClass, SizeOf(Pointer));
|
||||||
RegisterAttribute(TSynEditFlagsClass, SizeOf(TSynEditStringFlag));
|
RegisterAttribute(TSynEditFlagsClass, SizeOf(TSynEditStringFlag));
|
||||||
RegisterAttribute(TSynEditFoldMinClass, SizeOf(Integer));
|
|
||||||
RegisterAttribute(TSynEditFoldEndClass, SizeOf(Integer));
|
|
||||||
RegisterAttribute(TSynEditExpLenClass, SizeOf(Integer));
|
|
||||||
fDosFileFormat := TRUE;
|
fDosFileFormat := TRUE;
|
||||||
{begin} //mh 2000-10-19
|
{begin} //mh 2000-10-19
|
||||||
fIndexOfLongestLine := -1;
|
fIndexOfLongestLine := -1;
|
||||||
@ -567,8 +538,6 @@ begin
|
|||||||
Result := Count;
|
Result := Count;
|
||||||
InsertItem(Result, S);
|
InsertItem(Result, S);
|
||||||
FLineRangeNotificationList.CallRangeNotifyEvents(self, Result, Count - Result);
|
FLineRangeNotificationList.CallRangeNotifyEvents(self, Result, Count - Result);
|
||||||
if Assigned(fOnAdded) then
|
|
||||||
fOnAdded(Result);
|
|
||||||
EndUpdate;
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -592,16 +561,9 @@ begin
|
|||||||
Objects[Count-1] := AStrings.Objects[i];
|
Objects[Count-1] := AStrings.Objects[i];
|
||||||
end;
|
end;
|
||||||
SetAttribute(TSynEditRangeClass, Count-1, NullRange);
|
SetAttribute(TSynEditRangeClass, Count-1, NullRange);
|
||||||
SetAttribute(TSynEditExpLenClass, Count-1, Pointer(-1));
|
Flags[Count-1] := [];
|
||||||
Flags[Count-1] := [sfExpandedLengthUnknown];
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
FoldMinLevel[Count-1]:=0;
|
|
||||||
FoldEndLevel[Count-1]:=0;
|
|
||||||
{$ENDIF}
|
|
||||||
end;
|
end;
|
||||||
FLineRangeNotificationList.CallRangeNotifyEvents(self, FirstAdded, Count - FirstAdded);
|
FLineRangeNotificationList.CallRangeNotifyEvents(self, FirstAdded, Count - FirstAdded);
|
||||||
if Assigned(fOnAdded) then
|
|
||||||
fOnAdded(FirstAdded);
|
|
||||||
finally
|
finally
|
||||||
EndUpdate;
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
@ -636,8 +598,6 @@ begin
|
|||||||
SetCount(Count - 1);
|
SetCount(Count - 1);
|
||||||
fIndexOfLongestLine := -1; //mh 2000-10-19
|
fIndexOfLongestLine := -1; //mh 2000-10-19
|
||||||
FLineRangeNotificationList.CallRangeNotifyEvents(self, Index, -1);
|
FLineRangeNotificationList.CallRangeNotifyEvents(self, Index, -1);
|
||||||
if Assigned(fOnDeleted) then
|
|
||||||
fOnDeleted(Index);
|
|
||||||
EndUpdate;
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -662,8 +622,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
SetCount(Count - NumLines);
|
SetCount(Count - NumLines);
|
||||||
FLineRangeNotificationList.CallRangeNotifyEvents(self, Index, -NumLines);
|
FLineRangeNotificationList.CallRangeNotifyEvents(self, Index, -NumLines);
|
||||||
if Assigned(fOnDeleted) then
|
|
||||||
fOnDeleted(Index);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
{end} // DJLP 2000-11-01
|
{end} // DJLP 2000-11-01
|
||||||
@ -695,36 +653,6 @@ begin
|
|||||||
else
|
else
|
||||||
Result := [];
|
Result := [];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynEditStringList.GetFoldEndLevel(Index: integer): integer;
|
|
||||||
begin
|
|
||||||
if (Index >= 0) and (Index < Count) then
|
|
||||||
Result := Integer(GetAttribute(TSynEditFoldEndClass, Index))
|
|
||||||
else
|
|
||||||
Result := 0;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TSynEditStringList.GetFoldMinLevel(Index: integer): integer;
|
|
||||||
begin
|
|
||||||
if (Index >= 0) and (Index < Count) then
|
|
||||||
Result := Integer(GetAttribute(TSynEditFoldMinClass, Index))
|
|
||||||
else
|
|
||||||
Result := 0;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TSynEditStringList.SetFoldEndLevel(Index: integer;
|
|
||||||
const AValue: integer);
|
|
||||||
begin
|
|
||||||
if (Index >= 0) and (Index < Count) then
|
|
||||||
SetAttribute(TSynEditFoldEndClass, Index, Pointer(PtrUInt(AValue)));
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TSynEditStringList.SetFoldMinLevel(Index: integer;
|
|
||||||
const AValue: integer);
|
|
||||||
begin
|
|
||||||
if (Index >= 0) and (Index < Count) then
|
|
||||||
SetAttribute(TSynEditFoldMinClass, Index, Pointer(PtrUInt(AValue)));
|
|
||||||
end;
|
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
function TSynEditStringList.Get(Index: integer): string;
|
function TSynEditStringList.Get(Index: integer): string;
|
||||||
@ -823,8 +751,6 @@ begin
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
InsertItem(Index, S);
|
InsertItem(Index, S);
|
||||||
FLineRangeNotificationList.CallRangeNotifyEvents(self, Index, Count - OldCnt);
|
FLineRangeNotificationList.CallRangeNotifyEvents(self, Index, Count - OldCnt);
|
||||||
if Assigned(fOnInserted) then
|
|
||||||
fOnInserted(Index);
|
|
||||||
EndUpdate;
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -840,12 +766,7 @@ begin
|
|||||||
fList[Index] := S;
|
fList[Index] := S;
|
||||||
FList.Objects[Index] := nil;
|
FList.Objects[Index] := nil;
|
||||||
Ranges[Index] := NullRange;
|
Ranges[Index] := NullRange;
|
||||||
SetAttribute(TSynEditExpLenClass, Index, Pointer(-1));
|
Flags[Index] := [];
|
||||||
Flags[Index] := [sfExpandedLengthUnknown];
|
|
||||||
{$IFDEF SYN_LAZARUS}
|
|
||||||
FoldMinLevel[Index]:=0;
|
|
||||||
FoldEndLevel[Index]:=0;
|
|
||||||
{$ENDIF}
|
|
||||||
EndUpdate;
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -861,8 +782,6 @@ begin
|
|||||||
FList.Move(Index, Index + NumLines, Count-Index);
|
FList.Move(Index, Index + NumLines, Count-Index);
|
||||||
SetCount(Count + NumLines);
|
SetCount(Count + NumLines);
|
||||||
FLineRangeNotificationList.CallRangeNotifyEvents(self, Index, NumLines);
|
FLineRangeNotificationList.CallRangeNotifyEvents(self, Index, NumLines);
|
||||||
if Assigned(fOnAdded) then
|
|
||||||
fOnAdded(Index);
|
|
||||||
finally
|
finally
|
||||||
EndUpdate;
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
@ -909,8 +828,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynEditStringList.Put(Index: integer; const S: string);
|
procedure TSynEditStringList.Put(Index: integer; const S: string);
|
||||||
var
|
|
||||||
f: TSynEditStringFlags;
|
|
||||||
begin
|
begin
|
||||||
if (Index = 0) and (Count = 0) then
|
if (Index = 0) and (Count = 0) then
|
||||||
Add(S)
|
Add(S)
|
||||||
@ -919,15 +836,8 @@ begin
|
|||||||
ListIndexOutOfBounds(Index);
|
ListIndexOutOfBounds(Index);
|
||||||
BeginUpdate;
|
BeginUpdate;
|
||||||
fIndexOfLongestLine := -1;
|
fIndexOfLongestLine := -1;
|
||||||
f := Flags[Index];
|
|
||||||
Include(f, sfExpandedLengthUnknown);
|
|
||||||
Exclude(f, sfHasTabs);
|
|
||||||
Exclude(f, sfHasNoTabs);
|
|
||||||
Flags[Index] := f;
|
|
||||||
FList[Index] := S;
|
FList[Index] := S;
|
||||||
if Assigned(fOnPutted) then
|
FLineChangeNotificationList.CallRangeNotifyEvents(self, Index, 1);
|
||||||
fOnPutted(Index);
|
|
||||||
FLineChangeNotificationList.CallRangeNotifyEvents(self, Index, 1);
|
|
||||||
EndUpdate;
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -63,7 +63,7 @@ constructor TSynEditStringTabExpander.Create(ASynStringSource: TSynEditStrings);
|
|||||||
begin
|
begin
|
||||||
FIndexOfLongestLine := -1;
|
FIndexOfLongestLine := -1;
|
||||||
inherited Create(ASynStringSource);
|
inherited Create(ASynStringSource);
|
||||||
RegisterAttribute(TSynEditStringTabExpander, SizeOf(Integer));
|
fSynStrings.RegisterAttribute(TSynEditStringTabExpander, SizeOf(Integer));
|
||||||
TabWidth := 8;
|
TabWidth := 8;
|
||||||
fSynStrings.AddChangeHandler(senrLineCount, {$IFDEF FPC}@{$ENDIF}LineCountChanged);
|
fSynStrings.AddChangeHandler(senrLineCount, {$IFDEF FPC}@{$ENDIF}LineCountChanged);
|
||||||
fSynStrings.AddChangeHandler(senrLineChange, {$IFDEF FPC}@{$ENDIF}LineCountChanged);
|
fSynStrings.AddChangeHandler(senrLineChange, {$IFDEF FPC}@{$ENDIF}LineCountChanged);
|
||||||
|
Loading…
Reference in New Issue
Block a user