mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-19 23:49:36 +02:00
SynEdit: foldview, add callback list
git-svn-id: trunk@37835 -
This commit is contained in:
parent
46366a57c7
commit
7cf9c40478
@ -386,6 +386,13 @@ type
|
||||
property NestedFoldsList: TLazSynEditNestedFoldsList read GetNestedFoldsList;
|
||||
end;
|
||||
|
||||
{ TFoldChangedHandlerList }
|
||||
|
||||
TFoldChangedHandlerList = class(TMethodList)
|
||||
public
|
||||
procedure CallFoldChangedEvents(AnIndex: Integer);
|
||||
end;
|
||||
|
||||
TSynEditFoldedView = class;
|
||||
|
||||
{ TLazSynDisplayFold }
|
||||
@ -433,6 +440,7 @@ type
|
||||
fNeedCaretCheck : Boolean;
|
||||
FInTopLineChanged: Boolean;
|
||||
FDisplayView: TLazSynDisplayFold;
|
||||
FFoldChangedHandlerList: TFoldChangedHandlerList;
|
||||
|
||||
function GetCount : integer;
|
||||
function GetDisplayView: TLazSynDisplayView;
|
||||
@ -568,6 +576,9 @@ type
|
||||
function CollapsedLineForFoldAtLine(ALine : Integer) : Integer;
|
||||
function ExpandedLineForBlockAtLine(ALine : Integer; HalfExpanded: Boolean = True) : Integer;
|
||||
|
||||
procedure AddFoldChangedHandler(AHandler: TFoldChangedEvent);
|
||||
procedure RemoveFoldChangedHandler(AHandler: TFoldChangedEvent);
|
||||
|
||||
function GetPhysicalCharWidths(Index: Integer): TPhysicalCharWidths;
|
||||
|
||||
function IsFoldedAtTextIndex(AStartIndex, ColIndex: Integer): Boolean; (* Checks xth Fold at nth TextIndex (all lines in buffer) / 1-based *)
|
||||
@ -725,6 +736,17 @@ begin
|
||||
NumEncode86Values[NumEncode86Chars[i]] := i - 1;
|
||||
end;
|
||||
|
||||
{ TFoldChangedHandlerList }
|
||||
|
||||
procedure TFoldChangedHandlerList.CallFoldChangedEvents(AnIndex: Integer);
|
||||
var
|
||||
i: LongInt;
|
||||
begin
|
||||
i:=Count;
|
||||
while NextDownIndex(i) do
|
||||
TFoldChangedEvent(Items[i])(AnIndex);
|
||||
end;
|
||||
|
||||
{ TLazSynDisplayFold }
|
||||
|
||||
constructor TLazSynDisplayFold.Create(AFoldView: TSynEditFoldedView);
|
||||
@ -3232,6 +3254,7 @@ begin
|
||||
fFoldTree := TSynTextFoldAVLTree.Create;
|
||||
FFoldProvider := TSynEditFoldProvider.Create(aTextView, fFoldTree);
|
||||
FDisplayView := TLazSynDisplayFold.Create(Self);
|
||||
FFoldChangedHandlerList := TFoldChangedHandlerList.Create;
|
||||
|
||||
FMarkupInfoFoldedCode := TSynSelectedColor.Create;
|
||||
FMarkupInfoFoldedCode.Background := clNone;
|
||||
@ -3250,6 +3273,7 @@ begin
|
||||
fLines.RemoveEditHandler(@LineEdited);
|
||||
fCaret.RemoveChangeHandler(@DoCaretChanged);
|
||||
FreeAndNil(FDisplayView);
|
||||
FreeAndNil(FFoldChangedHandlerList);
|
||||
fFoldTree.Free;
|
||||
fTextIndexList := nil;
|
||||
fFoldTypeList := nil;
|
||||
@ -3441,6 +3465,7 @@ procedure TSynEditFoldedView.DoFoldChanged(AnIndex: Integer);
|
||||
begin
|
||||
if Assigned(fOnFoldChanged) then
|
||||
fOnFoldChanged(AnIndex);
|
||||
FFoldChangedHandlerList.CallFoldChangedEvents(AnIndex);
|
||||
end;
|
||||
|
||||
procedure TSynEditFoldedView.DoBlockSelChanged(Sender: TObject);
|
||||
@ -4550,6 +4575,17 @@ begin
|
||||
Result := i + 1;
|
||||
end;
|
||||
|
||||
procedure TSynEditFoldedView.AddFoldChangedHandler(AHandler: TFoldChangedEvent);
|
||||
begin
|
||||
FFoldChangedHandlerList.Add(TMethod(AHandler));
|
||||
end;
|
||||
|
||||
procedure TSynEditFoldedView.RemoveFoldChangedHandler(
|
||||
AHandler: TFoldChangedEvent);
|
||||
begin
|
||||
FFoldChangedHandlerList.Remove(TMethod(AHandler));
|
||||
end;
|
||||
|
||||
function TSynEditFoldedView.GetPhysicalCharWidths(Index: Integer): TPhysicalCharWidths;
|
||||
begin
|
||||
Result := fLines.GetPhysicalCharWidths(ScreenLineToTextIndex(Index));
|
||||
|
Loading…
Reference in New Issue
Block a user