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