editor, call tips, decrease level on open paren deletion

This commit is contained in:
Basile Burg 2016-04-16 17:36:22 +02:00
parent 8261d07ca4
commit db17fb68a8
1 changed files with 47 additions and 41 deletions

View File

@ -151,7 +151,6 @@ type
procedure loadCache; procedure loadCache;
class procedure cleanCache; static; class procedure cleanCache; static;
procedure setDefaultFontSize(aValue: Integer); procedure setDefaultFontSize(aValue: Integer);
procedure getCallTips;
procedure DDocTimerEvent(sender: TObject); procedure DDocTimerEvent(sender: TObject);
procedure AutoDotTimerEvent(sender: TObject); procedure AutoDotTimerEvent(sender: TObject);
procedure InitHintWins; procedure InitHintWins;
@ -197,8 +196,9 @@ type
procedure saveTempFile; procedure saveTempFile;
// //
procedure invertVersionAllNone; procedure invertVersionAllNone;
procedure showCallTips; procedure showCallTips(findOpenParen: boolean = true);
procedure hideCallTips; procedure hideCallTips;
procedure decCallTipsLvl;
procedure showDDocs; procedure showDDocs;
procedure hideDDocs; procedure hideDDocs;
// //
@ -924,7 +924,7 @@ begin
begin begin
hideCallTips; hideCallTips;
hideDDocs; hideDDocs;
showCallTips; showCallTips(true);
end; end;
ecCurlyBraceClose: ecCurlyBraceClose:
curlyBraceCloseAndIndent(self); curlyBraceCloseAndIndent(self);
@ -1026,7 +1026,7 @@ begin
end; end;
end; end;
procedure TCESynMemo.showCallTips; procedure TCESynMemo.showCallTips(findOpenParen: boolean = true);
var var
str: string; str: string;
i: integer; i: integer;
@ -1035,7 +1035,7 @@ begin
fCallTipStrings.Clear; fCallTipStrings.Clear;
str := LineText[1..CaretX]; str := LineText[1..CaretX];
i := CaretX; i := CaretX;
while true do if findOpenParen then while true do
begin begin
if i = 1 then if i = 1 then
break; break;
@ -1090,6 +1090,21 @@ begin
fCallTipWin.Hide; fCallTipWin.Hide;
end; end;
procedure TCESynMemo.decCallTipsLvl;
var
i: integer;
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;
procedure TCESynMemo.showDDocs; procedure TCESynMemo.showDDocs;
var var
str: string; str: string;
@ -1112,11 +1127,6 @@ begin
fDDocWin.Hide; fDDocWin.Hide;
end; end;
procedure TCESynMemo.getCallTips();
begin
showCallTips;
end;
procedure TCESynMemo.setDDocDelay(aValue: Integer); procedure TCESynMemo.setDDocDelay(aValue: Integer);
begin begin
fDDocDelay:=aValue; fDDocDelay:=aValue;
@ -1428,30 +1438,37 @@ end;
{$REGION user input ------------------------------------------------------------} {$REGION user input ------------------------------------------------------------}
procedure TCESynMemo.KeyDown(var Key: Word; Shift: TShiftState); procedure TCESynMemo.KeyDown(var Key: Word; Shift: TShiftState);
var
i: integer;
begin begin
if Key = VK_RETURN then case Key of
begin VK_BACK: if fCallTipWin.Visible and (CaretX > 1)
if (fAutoCloseCurlyBrace in [autoCloseOnNewLineEof .. autoCloseOnNewLineLexically]) then and (LineText[LogicalCaretXY.X-1] = '(') then
case fAutoCloseCurlyBrace of decCallTipsLvl;
autoCloseOnNewLineAlways: if (CaretX > 1) and (LineText[LogicalCaretXY.X - 1] = '{') then VK_RETURN:
begin begin
Key := 0; if (fAutoCloseCurlyBrace in [autoCloseOnNewLineEof .. autoCloseOnNewLineLexically]) then
curlyBraceCloseAndIndent(self); case fAutoCloseCurlyBrace of
end; autoCloseOnNewLineAlways: if (CaretX > 1) and (LineText[LogicalCaretXY.X - 1] = '{') then
autoCloseOnNewLineEof: if (CaretX > 1) and (LineText[LogicalCaretXY.X - 1] = '{') then
if (CaretY = Lines.Count) and (CaretX = LineText.length+1) then
begin begin
Key := 0; Key := 0;
curlyBraceCloseAndIndent(self); curlyBraceCloseAndIndent(self);
end; end;
autoCloseOnNewLineLexically: if LogicalCaretXY.X - 1 >= lineText.length then autoCloseOnNewLineEof: if (CaretX > 1) and (LineText[LogicalCaretXY.X - 1] = '{') then
begin if (CaretY = Lines.Count) and (CaretX = LineText.length+1) then
fLexToks.Clear; begin
lex(lines.Text, fLexToks); Key := 0;
if lexCanCloseBrace then curlyBraceCloseAndIndent(self);
end;
autoCloseOnNewLineLexically: if LogicalCaretXY.X - 1 >= lineText.length then
begin begin
Key := 0; fLexToks.Clear;
curlyBraceCloseAndIndent(self); lex(lines.Text, fLexToks);
if lexCanCloseBrace then
begin
Key := 0;
curlyBraceCloseAndIndent(self);
end;
end; end;
end; end;
end; end;
@ -1499,19 +1516,8 @@ begin
c := Key; c := Key;
inherited; inherited;
case c of case c of
'(': getCallTips; '(': showCallTips(false);
')': if fCallTipWin.Visible then ')': if fCallTipWin.Visible then decCallTipsLvl;
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;
'{': '{':
case fAutoCloseCurlyBrace of case fAutoCloseCurlyBrace of
autoCloseAlways: autoCloseAlways: