SynEdit: foldview, add callback list

git-svn-id: trunk@37835 -
This commit is contained in:
martin 2012-07-01 13:02:55 +00:00
parent 46366a57c7
commit 7cf9c40478

View File

@ -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));