From 7c60c7ce47c6c7fae9240dd92e7776ee89b87294 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 29 Dec 2021 14:45:01 +0100 Subject: [PATCH] SynCompletion: Add OnBeforeComplete event. Issue #30965 and Merge-request !53 --- components/synedit/syncompletion.pas | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/components/synedit/syncompletion.pas b/components/synedit/syncompletion.pas index 1c3ddab52a..f14b0c836f 100644 --- a/components/synedit/syncompletion.pas +++ b/components/synedit/syncompletion.pas @@ -206,6 +206,7 @@ type procedure IncHintLock; procedure DecHintLock; procedure DoOnDragResize(Sender: TObject); + procedure ClearCurrentString; public constructor Create(AOwner: Tcomponent); override; destructor Destroy; override; @@ -264,9 +265,22 @@ type { TSynBaseCompletion } + TSynBaseCompletion = class; + TOnBeforeExeucteFlag = (befAbort); + TOnBeforeExeucteFlags = set of TOnBeforeExeucteFlag; + + TOnBeforeExecuteEvent = procedure( + ASender: TSynBaseCompletion; + var ACurrentString: String; + var APosition: Integer; // Defaults to -1. If left at -1 position will be calculated from CurrentString + var AnX, AnY: Integer; // Coordinates for the form + var AnResult: TOnBeforeExeucteFlags + ) of object; + TSynBaseCompletion = class(TLazSynMultiEditPlugin) private FAutoUseSingleIdent: Boolean; + FOnBeforeExecute: TOnBeforeExecuteEvent; Form: TSynBaseCompletionForm; FAddedPersistentCaret, FChangedNoneBlink: boolean; FOnExecute: TNotifyEvent; @@ -342,6 +356,7 @@ type property ClSelect: TColor read GetClSelect write SetClSelect; deprecated; // use SelectedColor property NbLinesInWindow: Integer read GetNbLinesInWindow write SetNbLinesInWindow; deprecated; published + property OnBeforeExecute: TOnBeforeExecuteEvent read FOnBeforeExecute write FOnBeforeExecute; property OnExecute: TNotifyEvent read FOnExecute write FOnExecute; property OnPaintItem: TSynBaseCompletionPaintItem read GetOnPaintItem write SetOnPaintItem; @@ -1330,6 +1345,12 @@ begin FOnDragResized(Sender); end; +procedure TSynBaseCompletionForm.ClearCurrentString; +begin + FCurrentString := ''; + FPosition := 0; +end; + procedure TSynBaseCompletionForm.SetItemList(const Value: TStrings); begin FItemList.Assign(Value); @@ -1456,6 +1477,8 @@ end; procedure TSynBaseCompletion.Execute(s: string; x, y: integer); var CurSynEdit: TCustomSynEdit; + p: Integer; + r: TOnBeforeExeucteFlags; begin //writeln('TSynBaseCompletion.Execute ',Form.CurrentEditor.Name); @@ -1463,7 +1486,19 @@ begin FAddedPersistentCaret := False; FChangedNoneBlink := False; + Form.ClearCurrentString; + p := -1; + r := []; + if Assigned(OnBeforeExecute) then + OnBeforeExecute(Self, s, p, x, y, r); + if befAbort in r then + exit; + + CurrentString := s; + if p >= 0 then + Position := p; + if Assigned(OnExecute) then OnExecute(Self); if (ItemList.Count=1) and Assigned(OnValidate) and FAutoUseSingleIdent then begin