mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-06 10:00:34 +02:00
SynCompletion: Cancel on Topline change (window would be misplaced otherwise)
git-svn-id: trunk@26548 -
This commit is contained in:
parent
edd9101c91
commit
662e9519a7
@ -144,7 +144,11 @@ type
|
|||||||
fCurrentEditor: TComponent;
|
fCurrentEditor: TComponent;
|
||||||
FOnMeasureItem: TSynBaseCompletionMeasureItem;
|
FOnMeasureItem: TSynBaseCompletionMeasureItem;
|
||||||
FOnPositionChanged: TNotifyEvent;
|
FOnPositionChanged: TNotifyEvent;
|
||||||
|
procedure SetCurrentEditor(const AValue: TComponent);
|
||||||
procedure SetLongLineHintTime(const AValue: Integer);
|
procedure SetLongLineHintTime(const AValue: Integer);
|
||||||
|
procedure EditorStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||||
|
protected
|
||||||
|
procedure SetVisible(Value: Boolean); override;
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: Tcomponent); override;
|
constructor Create(AOwner: Tcomponent); override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -166,7 +170,7 @@ type
|
|||||||
write SetNbLinesInWindow;
|
write SetNbLinesInWindow;
|
||||||
property ClSelect: TColor read FClSelect write FClSelect;
|
property ClSelect: TColor read FClSelect write FClSelect;
|
||||||
property CaseSensitive: boolean read FCaseSensitive write FCaseSensitive;
|
property CaseSensitive: boolean read FCaseSensitive write FCaseSensitive;
|
||||||
property CurrentEditor: TComponent read fCurrentEditor write fCurrentEditor;
|
property CurrentEditor: TComponent read fCurrentEditor write SetCurrentEditor;
|
||||||
property FontHeight:integer read FFontHeight;
|
property FontHeight:integer read FFontHeight;
|
||||||
property OnSearchPosition:TSynBaseCompletionSearchPosition
|
property OnSearchPosition:TSynBaseCompletionSearchPosition
|
||||||
read FOnSearchPosition write FOnSearchPosition;
|
read FOnSearchPosition write FOnSearchPosition;
|
||||||
@ -812,6 +816,34 @@ begin
|
|||||||
FHintTimer.Interval := AValue;
|
FHintTimer.Interval := AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSynBaseCompletionForm.EditorStatusChanged(Sender: TObject;
|
||||||
|
Changes: TSynStatusChanges);
|
||||||
|
begin
|
||||||
|
if (scTopLine in Changes) and Assigned(OnCancel) then
|
||||||
|
OnCancel(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynBaseCompletionForm.SetCurrentEditor(const AValue: TComponent);
|
||||||
|
begin
|
||||||
|
if fCurrentEditor = AValue then exit;
|
||||||
|
if fCurrentEditor <> nil then
|
||||||
|
TSynEdit(fCurrentEditor).UnRegisterStatusChangedHandler({$IFDEF FPC}@{$ENDIF}EditorStatusChanged);
|
||||||
|
fCurrentEditor := AValue;
|
||||||
|
if (fCurrentEditor <> nil) and Visible then
|
||||||
|
TSynEdit(fCurrentEditor).RegisterStatusChangedHandler({$IFDEF FPC}@{$ENDIF}EditorStatusChanged);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynBaseCompletionForm.SetVisible(Value: Boolean);
|
||||||
|
begin
|
||||||
|
inherited SetVisible(Value);
|
||||||
|
if (fCurrentEditor <> nil) then begin
|
||||||
|
if Visible then
|
||||||
|
TSynEdit(fCurrentEditor).RegisterStatusChangedHandler({$IFDEF FPC}@{$ENDIF}EditorStatusChanged)
|
||||||
|
else
|
||||||
|
TSynEdit(fCurrentEditor).UnRegisterStatusChangedHandler({$IFDEF FPC}@{$ENDIF}EditorStatusChanged);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSynBaseCompletionForm.SetItemList(const Value: TStrings);
|
procedure TSynBaseCompletionForm.SetItemList(const Value: TStrings);
|
||||||
begin
|
begin
|
||||||
FItemList.Assign(Value);
|
FItemList.Assign(Value);
|
||||||
|
@ -306,6 +306,13 @@ type
|
|||||||
var Command: TSynEditorCommand; var ComboKeyStrokes: TSynEditKeyStrokes);
|
var Command: TSynEditorCommand; var ComboKeyStrokes: TSynEditKeyStrokes);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TSynStatusChangedHandlerList }
|
||||||
|
|
||||||
|
TSynStatusChangedHandlerList = Class(TMethodList)
|
||||||
|
public
|
||||||
|
procedure CallStatusChangedHandlers(Sender: TObject; Changes: TSynStatusChanges);
|
||||||
|
end;
|
||||||
|
|
||||||
TSynMouseLinkEvent = procedure (
|
TSynMouseLinkEvent = procedure (
|
||||||
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean) of object;
|
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean) of object;
|
||||||
|
|
||||||
@ -418,6 +425,7 @@ type
|
|||||||
fTSearch: TSynEditSearch;
|
fTSearch: TSynEditSearch;
|
||||||
fHookedCommandHandlers: TList;
|
fHookedCommandHandlers: TList;
|
||||||
FHookedKeyTranslationList: TSynHookedKeyTranslationList;
|
FHookedKeyTranslationList: TSynHookedKeyTranslationList;
|
||||||
|
FStatusChangedList: TSynStatusChangedHandlerList;
|
||||||
FPlugins: TList;
|
FPlugins: TList;
|
||||||
fScrollTimer: TTimer;
|
fScrollTimer: TTimer;
|
||||||
fScrollDeltaX, fScrollDeltaY: Integer;
|
fScrollDeltaX, fScrollDeltaY: Integer;
|
||||||
@ -798,6 +806,10 @@ type
|
|||||||
|
|
||||||
procedure RegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent);
|
procedure RegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent);
|
||||||
procedure UnRegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent);
|
procedure UnRegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent);
|
||||||
|
|
||||||
|
procedure RegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent);
|
||||||
|
procedure UnRegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent);
|
||||||
|
|
||||||
function RowColumnToPixels(
|
function RowColumnToPixels(
|
||||||
{$IFDEF SYN_LAZARUS}const {$ENDIF}RowCol: TPoint): TPoint;
|
{$IFDEF SYN_LAZARUS}const {$ENDIF}RowCol: TPoint): TPoint;
|
||||||
function SearchReplace(const ASearch, AReplace: string;
|
function SearchReplace(const ASearch, AReplace: string;
|
||||||
@ -1633,6 +1645,7 @@ begin
|
|||||||
Cursor := crIBeam;
|
Cursor := crIBeam;
|
||||||
fPlugins := TList.Create;
|
fPlugins := TList.Create;
|
||||||
FHookedKeyTranslationList := TSynHookedKeyTranslationList.Create;
|
FHookedKeyTranslationList := TSynHookedKeyTranslationList.Create;
|
||||||
|
FStatusChangedList := TSynStatusChangedHandlerList.Create;
|
||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
// needed before setting color
|
// needed before setting color
|
||||||
fMarkupHighCaret := TSynEditMarkupHighlightAllCaret.Create(self);
|
fMarkupHighCaret := TSynEditMarkupHighlightAllCaret.Create(self);
|
||||||
@ -1887,6 +1900,7 @@ begin
|
|||||||
RemoveHandlers;
|
RemoveHandlers;
|
||||||
|
|
||||||
FreeAndNil(FHookedKeyTranslationList);
|
FreeAndNil(FHookedKeyTranslationList);
|
||||||
|
FreeAndNil(FStatusChangedList);
|
||||||
fHookedCommandHandlers:=nil;
|
fHookedCommandHandlers:=nil;
|
||||||
fPlugins:=nil;
|
fPlugins:=nil;
|
||||||
FCaret.Lines := nil;
|
FCaret.Lines := nil;
|
||||||
@ -8420,6 +8434,16 @@ begin
|
|||||||
FHookedKeyTranslationList.Remove(TMEthod(AHandlerProc));
|
FHookedKeyTranslationList.Remove(TMEthod(AHandlerProc));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomSynEdit.RegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent);
|
||||||
|
begin
|
||||||
|
FStatusChangedList.Add(TMethod(AStatusChangeProc));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCustomSynEdit.UnRegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent);
|
||||||
|
begin
|
||||||
|
FStatusChangedList.Remove(TMethod(AStatusChangeProc));
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomSynEdit.NotifyHookedCommandHandlers(AfterProcessing: boolean;
|
procedure TCustomSynEdit.NotifyHookedCommandHandlers(AfterProcessing: boolean;
|
||||||
var Command: TSynEditorCommand;
|
var Command: TSynEditorCommand;
|
||||||
var AChar: TUTF8Char; Data: pointer);
|
var AChar: TUTF8Char; Data: pointer);
|
||||||
@ -8474,6 +8498,7 @@ end;
|
|||||||
|
|
||||||
procedure TCustomSynEdit.DoOnStatusChange(Changes: TSynStatusChanges);
|
procedure TCustomSynEdit.DoOnStatusChange(Changes: TSynStatusChanges);
|
||||||
begin
|
begin
|
||||||
|
FStatusChangedList.CallStatusChangedHandlers(Self, Changes);
|
||||||
if Assigned(fOnStatusChange) then begin
|
if Assigned(fOnStatusChange) then begin
|
||||||
fOnStatusChange(Self, fStatusChanges);
|
fOnStatusChange(Self, fStatusChanges);
|
||||||
fStatusChanges := [];
|
fStatusChanges := [];
|
||||||
@ -8647,6 +8672,18 @@ begin
|
|||||||
IsStartOfCombo, Handled, Command, False, ComboKeyStrokes);
|
IsStartOfCombo, Handled, Command, False, ComboKeyStrokes);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TSynStatusChangedHandlerList }
|
||||||
|
|
||||||
|
procedure TSynStatusChangedHandlerList.CallStatusChangedHandlers(Sender: TObject;
|
||||||
|
Changes: TSynStatusChanges);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
i:=Count;
|
||||||
|
while NextDownIndex(i) do
|
||||||
|
TStatusChangeEvent(Items[i])(Sender, Changes);
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
InitSynDefaultFont;
|
InitSynDefaultFont;
|
||||||
SynDefaultBeautifier := TSynBeautifier.Create(Application);
|
SynDefaultBeautifier := TSynBeautifier.Create(Application);
|
||||||
|
Loading…
Reference in New Issue
Block a user