mirror of https://gitlab.com/basile.b/dexed.git
stack call tips
This commit is contained in:
parent
64f38ecc87
commit
491042dd85
|
@ -583,9 +583,9 @@ end;
|
||||||
|
|
||||||
function uniqueObjStr(const aObject: Tobject): string;
|
function uniqueObjStr(const aObject: Tobject): string;
|
||||||
begin
|
begin
|
||||||
{$HINTS OFF}{$WARNINGS OFF}{$R-}
|
{$PUSH}{$HINTS OFF}{$WARNINGS OFF}{$R-}
|
||||||
exit( format('%.8X',[NativeUint(aObject)]));
|
exit( format('%.8X',[NativeUint(aObject)]));
|
||||||
{$HINTS ON}{$WARNINGS ON}{$R+}
|
{$POP}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function shortenPath(const aPath: string; charThresh: Word = 60): string;
|
function shortenPath(const aPath: string; charThresh: Word = 60): string;
|
||||||
|
|
|
@ -129,6 +129,7 @@ type
|
||||||
fMatchSelectionOpts: TSynSearchOptions;
|
fMatchSelectionOpts: TSynSearchOptions;
|
||||||
fMatchIdentOpts: TSynSearchOptions;
|
fMatchIdentOpts: TSynSearchOptions;
|
||||||
fMatchOpts: TIdentifierMatchOptions;
|
fMatchOpts: TIdentifierMatchOptions;
|
||||||
|
fCallTipStrings: TStringList;
|
||||||
procedure setMatchOpts(value: TIdentifierMatchOptions);
|
procedure setMatchOpts(value: TIdentifierMatchOptions);
|
||||||
function getMouseFileBytePos: Integer;
|
function getMouseFileBytePos: Integer;
|
||||||
procedure changeNotify(Sender: TObject);
|
procedure changeNotify(Sender: TObject);
|
||||||
|
@ -154,6 +155,7 @@ type
|
||||||
procedure addBreakPoint(line: integer);
|
procedure addBreakPoint(line: integer);
|
||||||
procedure removeBreakPoint(line: integer);
|
procedure removeBreakPoint(line: integer);
|
||||||
function findBreakPoint(line: integer): boolean;
|
function findBreakPoint(line: integer): boolean;
|
||||||
|
procedure showCallTips(const tips: string);
|
||||||
protected
|
protected
|
||||||
procedure DoEnter; override;
|
procedure DoEnter; override;
|
||||||
procedure DoExit; override;
|
procedure DoExit; override;
|
||||||
|
@ -429,6 +431,7 @@ const
|
||||||
thresh = 6;
|
thresh = 6;
|
||||||
begin
|
begin
|
||||||
fPos := 0;
|
fPos := 0;
|
||||||
|
{$PUSH}
|
||||||
{$HINTS OFF}{$WARNINGS OFF}
|
{$HINTS OFF}{$WARNINGS OFF}
|
||||||
if fList.Count > 0 then
|
if fList.Count > 0 then
|
||||||
begin
|
begin
|
||||||
|
@ -436,7 +439,7 @@ begin
|
||||||
if (delta > -thresh) and (delta < thresh) then exit;
|
if (delta > -thresh) and (delta < thresh) then exit;
|
||||||
end;
|
end;
|
||||||
fList.Insert(0, Pointer(NativeInt(fMemo.CaretY)));
|
fList.Insert(0, Pointer(NativeInt(fMemo.CaretY)));
|
||||||
{$HINTS ON}{$WARNINGS ON}
|
{$POP}
|
||||||
while fList.Count > fMax do
|
while fList.Count > fMax do
|
||||||
fList.Delete(fList.Count-1);
|
fList.Delete(fList.Count-1);
|
||||||
end;
|
end;
|
||||||
|
@ -491,6 +494,7 @@ begin
|
||||||
fCompletion.TheForm.ShowInTaskBar:=stNever;
|
fCompletion.TheForm.ShowInTaskBar:=stNever;
|
||||||
fCompletion.ShortCut:=0;
|
fCompletion.ShortCut:=0;
|
||||||
fCompletion.LinesInWindow:=15;
|
fCompletion.LinesInWindow:=15;
|
||||||
|
fCallTipStrings:= TStringList.Create;
|
||||||
//
|
//
|
||||||
MouseLinkColor.Style:= [fsUnderline];
|
MouseLinkColor.Style:= [fsUnderline];
|
||||||
with MouseActions.Add do begin
|
with MouseActions.Add do begin
|
||||||
|
@ -536,6 +540,7 @@ begin
|
||||||
fPositions.Free;
|
fPositions.Free;
|
||||||
fCompletion.Free;
|
fCompletion.Free;
|
||||||
fBreakPoints.Free;
|
fBreakPoints.Free;
|
||||||
|
fCallTipStrings.Free;
|
||||||
//
|
//
|
||||||
if fileExists(fTempFileName) then
|
if fileExists(fTempFileName) then
|
||||||
sysutils.DeleteFile(fTempFileName);
|
sysutils.DeleteFile(fTempFileName);
|
||||||
|
@ -576,8 +581,8 @@ procedure TCESynMemo.DoExit;
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fFocusForInput := false;
|
fFocusForInput := false;
|
||||||
fDDocWin.Hide;
|
hideDDocs;
|
||||||
fCallTipWin.Hide;
|
hideCallTips;
|
||||||
if fCompletion.IsActive then
|
if fCompletion.IsActive then
|
||||||
fCompletion.Deactivate;
|
fCompletion.Deactivate;
|
||||||
end;
|
end;
|
||||||
|
@ -593,8 +598,8 @@ begin
|
||||||
fCacheLoaded := true;
|
fCacheLoaded := true;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
fDDocWin.Hide;
|
hideDDocs;
|
||||||
fCallTipWin.Hide;
|
hideCallTips;
|
||||||
if fCompletion.IsActive then
|
if fCompletion.IsActive then
|
||||||
fCompletion.Deactivate;
|
fCompletion.Deactivate;
|
||||||
end;
|
end;
|
||||||
|
@ -779,9 +784,10 @@ end;
|
||||||
procedure TCESynMemo.showCallTips;
|
procedure TCESynMemo.showCallTips;
|
||||||
var
|
var
|
||||||
str: string;
|
str: string;
|
||||||
pnt: TPoint;
|
|
||||||
i: integer;
|
i: integer;
|
||||||
begin
|
begin
|
||||||
|
if not fCallTipWin.Visible then
|
||||||
|
fCallTipStrings.Clear;
|
||||||
str := LineText[1..CaretX];
|
str := LineText[1..CaretX];
|
||||||
i := CaretX;
|
i := CaretX;
|
||||||
while true do
|
while true do
|
||||||
|
@ -798,16 +804,36 @@ begin
|
||||||
DcdWrapper.getCallTip(str);
|
DcdWrapper.getCallTip(str);
|
||||||
if str.isNotEmpty then
|
if str.isNotEmpty then
|
||||||
begin
|
begin
|
||||||
pnt := ClientToScreen(point(CaretXPix, CaretYPix));
|
i := fCallTipStrings.Count;
|
||||||
fCallTipWin.FontSize := Font.Size;
|
if fCallTipStrings.Count <> 0 then
|
||||||
fCallTipWin.HintRect := fCallTipWin.CalcHintRect(0, str, nil);
|
fCallTipStrings.Insert(0, '---');
|
||||||
fCallTipWin.OffsetHintRect(pnt, Font.Size * 2);
|
fCallTipStrings.Insert(0, str);
|
||||||
fCallTipWin.ActivateHint(str);
|
i := fCallTipStrings.Count - i;
|
||||||
|
// overload count to delete on ')'
|
||||||
|
{$PUSH}{$HINTS OFF}{$WARNINGS OFF}
|
||||||
|
fCallTipStrings.Objects[0] := TObject(pointer(i));
|
||||||
|
{$POP}
|
||||||
|
str := fCallTipStrings.Text;
|
||||||
|
showCallTips(str);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemo.showCallTips(const tips: string);
|
||||||
|
var
|
||||||
|
pnt: TPoint;
|
||||||
|
begin
|
||||||
|
if tips.isEmpty then exit;
|
||||||
|
//
|
||||||
|
pnt := ClientToScreen(point(CaretXPix, CaretYPix));
|
||||||
|
fCallTipWin.FontSize := Font.Size;
|
||||||
|
fCallTipWin.HintRect := fCallTipWin.CalcHintRect(0, tips, nil);
|
||||||
|
fCallTipWin.OffsetHintRect(pnt, Font.Size * 2);
|
||||||
|
fCallTipWin.ActivateHint(tips);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCESynMemo.hideCallTips;
|
procedure TCESynMemo.hideCallTips;
|
||||||
begin
|
begin
|
||||||
|
fCallTipStrings.Clear;
|
||||||
fCallTipWin.Hide;
|
fCallTipWin.Hide;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -1112,8 +1138,8 @@ begin
|
||||||
VK_BROWSER_FORWARD: fPositions.next;
|
VK_BROWSER_FORWARD: fPositions.next;
|
||||||
VK_ESCAPE:
|
VK_ESCAPE:
|
||||||
begin
|
begin
|
||||||
fCallTipWin.Hide;
|
hideCallTips;
|
||||||
fDDocWin.Hide;
|
hideDDocs;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if not (Shift = [ssCtrl]) then exit;
|
if not (Shift = [ssCtrl]) then exit;
|
||||||
|
@ -1141,12 +1167,24 @@ end;
|
||||||
procedure TCESynMemo.UTF8KeyPress(var Key: TUTF8Char);
|
procedure TCESynMemo.UTF8KeyPress(var Key: TUTF8Char);
|
||||||
var
|
var
|
||||||
c: TUTF8Char;
|
c: TUTF8Char;
|
||||||
|
i: integer;
|
||||||
begin
|
begin
|
||||||
c := Key;
|
c := Key;
|
||||||
inherited;
|
inherited;
|
||||||
case c of
|
case c of
|
||||||
'(': getCallTips;
|
'(': getCallTips;
|
||||||
')': fCallTipWin.Hide;
|
')': if fCallTipWin.Visible then
|
||||||
|
begin
|
||||||
|
{$PUSH}{$HINTS OFF}{$WARNINGS OFF}
|
||||||
|
i := integer(pointer(fCallTipStrings.Objects[0]));
|
||||||
|
{$POP}
|
||||||
|
for i in [0..i-1] do
|
||||||
|
fCallTipStrings.Delete(0);
|
||||||
|
if fCallTipStrings.Count = 0 then
|
||||||
|
hideCallTips
|
||||||
|
else
|
||||||
|
showCallTips(fCallTipStrings.Text);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
if fCompletion.IsActive then
|
if fCompletion.IsActive then
|
||||||
fCompletion.CurrentString:=GetWordAtRowCol(LogicalCaretXY);
|
fCompletion.CurrentString:=GetWordAtRowCol(LogicalCaretXY);
|
||||||
|
@ -1155,16 +1193,16 @@ end;
|
||||||
procedure TCESynMemo.MouseLeave;
|
procedure TCESynMemo.MouseLeave;
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fDDocWin.Hide;
|
hideDDocs;
|
||||||
fCallTipWin.Hide;
|
hideCallTips;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESynMemo.MouseMove(Shift: TShiftState; X, Y: Integer);
|
procedure TCESynMemo.MouseMove(Shift: TShiftState; X, Y: Integer);
|
||||||
var
|
var
|
||||||
dX, dY: Integer;
|
dX, dY: Integer;
|
||||||
begin
|
begin
|
||||||
fDDocWin.Hide;
|
hideDDocs;
|
||||||
fCallTipWin.Hide;
|
hideCallTips;
|
||||||
inherited;
|
inherited;
|
||||||
dx := X - fOldMousePos.x;
|
dx := X - fOldMousePos.x;
|
||||||
dy := Y - fOldMousePos.y;
|
dy := Y - fOldMousePos.y;
|
||||||
|
@ -1184,8 +1222,8 @@ begin
|
||||||
inherited;
|
inherited;
|
||||||
highlightCurrentIdentifier;
|
highlightCurrentIdentifier;
|
||||||
fCanShowHint := false;
|
fCanShowHint := false;
|
||||||
fDDocWin.Hide;
|
hideCallTips;
|
||||||
fCallTipWin.Hide;
|
hideDDocs;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESynMemo.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y:Integer);
|
procedure TCESynMemo.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y:Integer);
|
||||||
|
@ -1219,9 +1257,9 @@ function TCESynMemo.BreakPointLine(index: integer): integer;
|
||||||
begin
|
begin
|
||||||
if index >= fBreakPoints.Count then
|
if index >= fBreakPoints.Count then
|
||||||
exit(0);
|
exit(0);
|
||||||
{$WARNINGS OFF}
|
{$PUSH}{$WARNINGS OFF}
|
||||||
exit(Integer(fBreakPoints.Items[index]));
|
exit(Integer(fBreakPoints.Items[index]));
|
||||||
{$WARNINGS ON}
|
{$POP}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESynMemo.addBreakPoint(line: integer);
|
procedure TCESynMemo.addBreakPoint(line: integer);
|
||||||
|
@ -1236,9 +1274,9 @@ begin
|
||||||
m.ImageIndex := 0;
|
m.ImageIndex := 0;
|
||||||
m.Visible := true;
|
m.Visible := true;
|
||||||
Marks.Add(m);
|
Marks.Add(m);
|
||||||
{$WARNINGS OFF}
|
{$PUSH}{$WARNINGS OFF}
|
||||||
fBreakPoints.Add(pointer(line));
|
fBreakPoints.Add(pointer(line));
|
||||||
{$WARNINGS ON}
|
{$POP}
|
||||||
if assigned(fBreakpointEvent) then
|
if assigned(fBreakpointEvent) then
|
||||||
fBreakpointEvent(self, line, bpAdded);
|
fBreakpointEvent(self, line, bpAdded);
|
||||||
end;
|
end;
|
||||||
|
@ -1249,18 +1287,18 @@ begin
|
||||||
exit;
|
exit;
|
||||||
if marks.Line[line].isNotNil and (marks.Line[line].Count > 0) then
|
if marks.Line[line].isNotNil and (marks.Line[line].Count > 0) then
|
||||||
marks.Line[line].Clear(true);
|
marks.Line[line].Clear(true);
|
||||||
{$WARNINGS OFF}
|
{$PUSH}{$WARNINGS OFF}
|
||||||
fBreakPoints.Remove(pointer(line));
|
fBreakPoints.Remove(pointer(line));
|
||||||
{$WARNINGS ON}
|
{$POP}
|
||||||
if assigned(fBreakpointEvent) then
|
if assigned(fBreakpointEvent) then
|
||||||
fBreakpointEvent(self, line, bpRemoved);
|
fBreakpointEvent(self, line, bpRemoved);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCESynMemo.findBreakPoint(line: integer): boolean;
|
function TCESynMemo.findBreakPoint(line: integer): boolean;
|
||||||
begin
|
begin
|
||||||
{$WARNINGS OFF}
|
{$PUSH}{$WARNINGS OFF}
|
||||||
exit(fBreakPoints.IndexOf(pointer(line)) <> -1);
|
exit(fBreakPoints.IndexOf(pointer(line)) <> -1);
|
||||||
{$WARNINGS ON}
|
{$POP}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESynMemo.gutterClick(Sender: TObject; X, Y, Line: integer; mark: TSynEditMark);
|
procedure TCESynMemo.gutterClick(Sender: TObject; X, Y, Line: integer; mark: TSynEditMark);
|
||||||
|
|
Loading…
Reference in New Issue