Connect data filter editor to the auto completion object. Fixes issue #1045.

This commit is contained in:
Ansgar Becker
2009-08-29 18:31:32 +00:00
parent a554f209bd
commit fe31264f6b
2 changed files with 50 additions and 39 deletions

View File

@ -6463,7 +6463,7 @@ object MainForm: TMainForm
Left = 40 Left = 40
Top = 128 Top = 128
end end
object SynCompletionProposal1: TSynCompletionProposal object SynCompletionProposal: TSynCompletionProposal
Options = [scoLimitToMatchedText, scoUseInsertList, scoUsePrettyText, scoUseBuiltInTimer, scoEndCharCompletion, scoCompleteWithTab, scoCompleteWithEnter] Options = [scoLimitToMatchedText, scoUseInsertList, scoUsePrettyText, scoUseBuiltInTimer, scoEndCharCompletion, scoCompleteWithTab, scoCompleteWithEnter]
NbLinesInWindow = 12 NbLinesInWindow = 12
Width = 350 Width = 350
@ -6491,12 +6491,12 @@ object MainForm: TMainForm
ItemHeight = 18 ItemHeight = 18
Images = PngImageListMain Images = PngImageListMain
Margin = 1 Margin = 1
OnExecute = SynCompletionProposal1Execute OnExecute = SynCompletionProposalExecute
ShortCut = 16416 ShortCut = 16416
Editor = SynMemoQuery Editor = SynMemoQuery
TimerInterval = 500 TimerInterval = 500
OnAfterCodeCompletion = SynCompletionProposal1AfterCodeCompletion OnAfterCodeCompletion = SynCompletionProposalAfterCodeCompletion
OnCodeCompletion = SynCompletionProposal1CodeCompletion OnCodeCompletion = SynCompletionProposalCodeCompletion
Left = 40 Left = 40
Top = 304 Top = 304
EndOfTokenChrW = ',()[]. ='#9 EndOfTokenChrW = ',()[]. ='#9

View File

@ -314,7 +314,7 @@ type
ZSQLMonitor1: TZSQLMonitor; ZSQLMonitor1: TZSQLMonitor;
menuExporttables: TMenuItem; menuExporttables: TMenuItem;
popupDbGridHeader: TPopupMenu; popupDbGridHeader: TPopupMenu;
SynCompletionProposal1: TSynCompletionProposal; SynCompletionProposal: TSynCompletionProposal;
OpenDialogSQLFile: TOpenDialog; OpenDialogSQLFile: TOpenDialog;
SaveDialogSQLFile: TSaveDialog; SaveDialogSQLFile: TSaveDialog;
SynEditSearch1: TSynEditSearch; SynEditSearch1: TSynEditSearch;
@ -530,11 +530,11 @@ type
var AllowChange: Boolean); var AllowChange: Boolean);
procedure btnDataClick(Sender: TObject); procedure btnDataClick(Sender: TObject);
procedure ListTablesChange(Sender: TBaseVirtualTree; Node: PVirtualNode); procedure ListTablesChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
procedure SynCompletionProposal1AfterCodeCompletion(Sender: TObject; procedure SynCompletionProposalAfterCodeCompletion(Sender: TObject;
const Value: WideString; Shift: TShiftState; Index: Integer; EndToken: WideChar); const Value: WideString; Shift: TShiftState; Index: Integer; EndToken: WideChar);
procedure SynCompletionProposal1CodeCompletion(Sender: TObject; procedure SynCompletionProposalCodeCompletion(Sender: TObject;
var Value: WideString; Shift: TShiftState; Index: Integer; EndToken: WideChar); var Value: WideString; Shift: TShiftState; Index: Integer; EndToken: WideChar);
procedure SynCompletionProposal1Execute(Kind: SynCompletionType; procedure SynCompletionProposalExecute(Kind: SynCompletionType;
Sender: TObject; var CurrentInput: WideString; var x, y: Integer; Sender: TObject; var CurrentInput: WideString; var x, y: Integer;
var CanExecute: Boolean); var CanExecute: Boolean);
procedure PageControlMainChange(Sender: TObject); procedure PageControlMainChange(Sender: TObject);
@ -1330,7 +1330,10 @@ begin
SetVistaFonts(Font); SetVistaFonts(Font);
InheritFont(Font); InheritFont(Font);
InheritFont(tabsetQueryHelpers.Font); InheritFont(tabsetQueryHelpers.Font);
InheritFont(SynCompletionProposal1.Font); InheritFont(SynCompletionProposal.Font);
// Enable auto completion in data tab, filter editor
SynCompletionProposal.AddEditor(SynMemoFilter);
// Fix node height on Virtual Trees for current DPI settings // Fix node height on Virtual Trees for current DPI settings
FixVT(DBTree); FixVT(DBTree);
@ -4497,22 +4500,22 @@ end;
{ Proposal about to insert a String into synmemo } { Proposal about to insert a String into synmemo }
procedure TMainForm.SynCompletionProposal1CodeCompletion(Sender: TObject; procedure TMainForm.SynCompletionProposalCodeCompletion(Sender: TObject;
var Value: WideString; Shift: TShiftState; Index: Integer; EndToken: WideChar); var Value: WideString; Shift: TShiftState; Index: Integer; EndToken: WideChar);
begin begin
SynCompletionProposal1.Editor.UndoList.AddGroupBreak; (Sender as TSynCompletionProposal).Form.CurrentEditor.UndoList.AddGroupBreak;
end; end;
procedure TMainForm.SynCompletionProposal1AfterCodeCompletion(Sender: TObject; procedure TMainForm.SynCompletionProposalAfterCodeCompletion(Sender: TObject;
const Value: WideString; Shift: TShiftState; Index: Integer; EndToken: WideChar); const Value: WideString; Shift: TShiftState; Index: Integer; EndToken: WideChar);
begin begin
SynCompletionProposal1.Editor.UndoList.AddGroupBreak; (Sender as TSynCompletionProposal).Form.CurrentEditor.UndoList.AddGroupBreak;
end; end;
{ Proposal-Combobox pops up } { Proposal-Combobox pops up }
procedure TMainForm.SynCompletionProposal1Execute(Kind: SynCompletionType; procedure TMainForm.SynCompletionProposalExecute(Kind: SynCompletionType;
Sender: TObject; var CurrentInput: WideString; var x, y: Integer; Sender: TObject; var CurrentInput: WideString; var x, y: Integer;
var CanExecute: Boolean); var CanExecute: Boolean);
var var
@ -4528,6 +4531,7 @@ var
Start, Start,
TokenTypeInt : Integer; TokenTypeInt : Integer;
Attri : TSynHighlighterAttributes; Attri : TSynHighlighterAttributes;
Proposal : TSynCompletionProposal;
Editor : TCustomSynEdit; Editor : TCustomSynEdit;
Queries : TWideStringList; Queries : TWideStringList;
const const
@ -4548,8 +4552,8 @@ const
lntView: Icon := ICONINDEX_VIEW; lntView: Icon := ICONINDEX_VIEW;
else Icon := -1; else Icon := -1;
end; end;
SynCompletionProposal1.InsertList.Add( ObjName ); Proposal.InsertList.Add( ObjName );
SynCompletionProposal1.ItemList.Add( WideFormat(ItemPattern, [Icon, ObjType, ObjName]) ); Proposal.ItemList.Add( WideFormat(ItemPattern, [Icon, ObjType, ObjName]) );
end; end;
procedure addColumns( tablename: WideString ); procedure addColumns( tablename: WideString );
@ -4572,8 +4576,8 @@ const
if ds = nil then exit; if ds = nil then exit;
for i:=0 to ds.RecordCount-1 do for i:=0 to ds.RecordCount-1 do
begin begin
SynCompletionProposal1.InsertList.Add( ds.FieldByName( 'Field' ).AsWideString ); Proposal.InsertList.Add( ds.FieldByName( 'Field' ).AsWideString );
SynCompletionProposal1.ItemList.Add( WideFormat(ItemPattern, [ICONINDEX_FIELD, GetFirstWord(ds.FieldByName('Type').AsString), ds.FieldByName('Field').AsWideString]) ); Proposal.ItemList.Add( WideFormat(ItemPattern, [ICONINDEX_FIELD, GetFirstWord(ds.FieldByName('Type').AsString), ds.FieldByName('Field').AsWideString]) );
ds.Next; ds.Next;
end; end;
ds.Close; ds.Close;
@ -4581,16 +4585,17 @@ const
end; end;
begin begin
Editor := (Sender as TSynCompletionProposal).Editor; Proposal := Sender as TSynCompletionProposal;
Editor := Proposal.Form.CurrentEditor;
Editor.GetHighlighterAttriAtRowColEx(Editor.CaretXY, Token, TokenTypeInt, Start, Attri); Editor.GetHighlighterAttriAtRowColEx(Editor.CaretXY, Token, TokenTypeInt, Start, Attri);
if TtkTokenKind(TokenTypeInt) = tkString then begin if TtkTokenKind(TokenTypeInt) = tkString then begin
CanExecute := False; CanExecute := False;
Exit; Exit;
end; end;
SynCompletionProposal1.InsertList.Clear; Proposal.InsertList.Clear;
SynCompletionProposal1.ItemList.Clear; Proposal.ItemList.Clear;
PrevShortToken := SynCompletionProposal1.PreviousToken; PrevShortToken := Proposal.PreviousToken;
PrevShortToken := WideDequotedStr(PrevShortToken, '`'); PrevShortToken := WideDequotedStr(PrevShortToken, '`');
rx := TRegExpr.Create; rx := TRegExpr.Create;
@ -4609,6 +4614,11 @@ begin
// spaces are not detected correctly. // spaces are not detected correctly.
// 1. find the currently edited sql-statement around the cursor position in synmemo // 1. find the currently edited sql-statement around the cursor position in synmemo
if Editor = SynMemoFilter then begin
// Concat query segments, set in viewdata(), so the below regular expressions can find structure
sql := DataGridCurrentFullSelect + DataGridCurrentFrom + ' WHERE ' + Editor.Text;
end else begin
// Proposal in one of the query tabs
Queries := parsesql(Editor.Text); Queries := parsesql(Editor.Text);
j := 0; j := 0;
for i:=0 to Queries.Count-1 do begin for i:=0 to Queries.Count-1 do begin
@ -4619,6 +4629,7 @@ begin
end; end;
end; end;
FreeAndNil(Queries); FreeAndNil(Queries);
end;
// 2. Parse FROM clause to detect relevant table/view, probably aliased // 2. Parse FROM clause to detect relevant table/view, probably aliased
rx.ModifierG := True; rx.ModifierG := True;
@ -4672,11 +4683,11 @@ begin
end; end;
end; end;
if SynCompletionProposal1.ItemList.count = 0 then begin if Proposal.ItemList.count = 0 then begin
// Add databases // Add databases
for i := 0 to Databases.Count - 1 do begin for i := 0 to Databases.Count - 1 do begin
SynCompletionProposal1.InsertList.Add(Databases[i]); Proposal.InsertList.Add(Databases[i]);
SynCompletionProposal1.ItemList.Add(WideFormat(ItemPattern, [ICONINDEX_DB, 'database', Databases[i]])); Proposal.ItemList.Add(WideFormat(ItemPattern, [ICONINDEX_DB, 'database', Databases[i]]));
end; end;
if ActiveDatabase <> '' then begin if ActiveDatabase <> '' then begin
@ -4687,7 +4698,7 @@ begin
ds.Next; ds.Next;
end; end;
if Length(CurrentInput) = 0 then // assume that we have already a dbname in memo if Length(CurrentInput) = 0 then // assume that we have already a dbname in memo
SynCompletionProposal1.Position := Databases.Count; Proposal.Position := Databases.Count;
end; end;
// Add functions // Add functions
@ -4695,14 +4706,14 @@ begin
// Don't display unsupported functions here // Don't display unsupported functions here
if MySqlFunctions[i].Version > mysql_version then if MySqlFunctions[i].Version > mysql_version then
continue; continue;
SynCompletionProposal1.InsertList.Add( MySQLFunctions[i].Name + MySQLFunctions[i].Declaration ); Proposal.InsertList.Add( MySQLFunctions[i].Name + MySQLFunctions[i].Declaration );
SynCompletionProposal1.ItemList.Add( WideFormat(ItemPattern, [ICONINDEX_FUNCTION, 'function', MySQLFunctions[i].Name + '\color{clSilver}' + MySQLFunctions[i].Declaration] ) ); Proposal.ItemList.Add( WideFormat(ItemPattern, [ICONINDEX_FUNCTION, 'function', MySQLFunctions[i].Name + '\color{clSilver}' + MySQLFunctions[i].Declaration] ) );
end; end;
// Add keywords // Add keywords
for i := 0 to MySQLKeywords.Count - 1 do begin for i := 0 to MySQLKeywords.Count - 1 do begin
SynCompletionProposal1.InsertList.Add( MySQLKeywords[i] ); Proposal.InsertList.Add( MySQLKeywords[i] );
SynCompletionProposal1.ItemList.Add( WideFormat(ItemPattern, [ICONINDEX_KEYWORD, 'keyword', MySQLKeywords[i]] ) ); Proposal.ItemList.Add( WideFormat(ItemPattern, [ICONINDEX_KEYWORD, 'keyword', MySQLKeywords[i]] ) );
end; end;
end; end;
@ -9184,7 +9195,7 @@ begin
QueryTab.Memo.OnDragOver := SynMemoQuery.OnDragOver; QueryTab.Memo.OnDragOver := SynMemoQuery.OnDragOver;
QueryTab.Memo.OnDropFiles := SynMemoQuery.OnDropFiles; QueryTab.Memo.OnDropFiles := SynMemoQuery.OnDropFiles;
QueryTab.Memo.OnStatusChange := SynMemoQuery.OnStatusChange; QueryTab.Memo.OnStatusChange := SynMemoQuery.OnStatusChange;
SynCompletionProposal1.AddEditor(QueryTab.Memo); SynCompletionProposal.AddEditor(QueryTab.Memo);
QueryTab.spltHelpers := TSplitter.Create(QueryTab.pnlMemo); QueryTab.spltHelpers := TSplitter.Create(QueryTab.pnlMemo);
QueryTab.spltHelpers.Parent := QueryTab.pnlMemo; QueryTab.spltHelpers.Parent := QueryTab.pnlMemo;