Commit 01e2f5b7 authored by Jucelino Fonseca's avatar Jucelino Fonseca

ajustes

parent 90c1a185
......@@ -11751,11 +11751,6 @@ object ExplorerV2: TExplorerV2
ParentColor = False
ParentFont = False
TabOrder = 0
OnQuadClick = SynEditOQLQuadClick
OnDragDrop = memOQLQuery2DragDrop
OnDragOver = memOQLQuery2DragOver
OnKeyPress = SynEditOQLKeyPress
OnClickLink = SynEditOQLClickLink
BorderStyle = bsNone
Gutter.Width = 42
Gutter.MouseActions = <>
......@@ -12213,8 +12208,8 @@ object ExplorerV2: TExplorerV2
MouseLinkColor.Foreground = clBlue
LineHighlightColor.Background = clNone
LineHighlightColor.Foreground = clNone
OnChange = SynEditOQLChange
OnCommandProcessed = SynEditOQLCommandProcessed
OnProcessCommand = SynEditOQLProcessCommand
OnProcessUserCommand = SynEditOQLProcessUserCommand
inline SynLeftGutterPartList1: TSynGutterPartList
object SynGutterMarks1: TSynGutterMarks
......@@ -13973,22 +13968,6 @@ object ExplorerV2: TExplorerV2
Left = 1400
Top = 10
end
object scpAtributoCompletion: TSynCompletion
OnExecute = scpAtributoCompletionExecute
Position = 0
LinesInWindow = 6
SelectedColor = clHighlight
CaseSensitive = False
Width = 262
AutoUseSingleIdent = True
ShortCut = 16416
EndOfTokenChr = '()[].'
ExecCommandID = ecSynCompletionExecute
Editor = SynEditOQL
ToggleReplaceWhole = False
Left = 744
Top = 208
end
object ilModel: TImageList
Left = 140
Top = 210
......@@ -14284,8 +14263,7 @@ object ExplorerV2: TExplorerV2
0000000000000000000000000000
}
end
object scpClasseCompletion: TSynCompletion
OnExecute = scpAtributoCompletionExecute
object scpListCompletion: TSynCompletion
Position = 0
LinesInWindow = 6
SelectedColor = clHighlight
......@@ -14294,7 +14272,6 @@ object ExplorerV2: TExplorerV2
AutoUseSingleIdent = True
ShortCut = 16416
EndOfTokenChr = '()[].'
OnCodeCompletion = scpClasseCompletionCodeCompletion
ExecCommandID = ecSynCompletionExecute
Editor = SynEditOQL
ToggleReplaceWhole = False
......
......@@ -9,6 +9,10 @@ uses
acuObjectExplorer, Menus, Buttons, SynEdit, SynHighlighterSQL, SynCompletion,
acuModel, acuRepositorySQL, SynEditKeyCmds, SynHighlighterPython, Types;
const
__WHERE = 'WHERE';
__SELECT = 'SELECT';
__FROM = 'FROM';
type
TDLLDialog = class(TForm)
......@@ -41,8 +45,7 @@ type
sbStatusBar: TStatusBar;
spResultXML: TSplitter;
spResultObject: TSplitter;
scpAtributoCompletion: TSynCompletion;
scpClasseCompletion: TSynCompletion;
scpListCompletion: TSynCompletion;
SynEditOQL: TSynEdit;
SynEditSQL: TSynEdit;
SynSQLSyn1: TSynSQLSyn;
......@@ -91,13 +94,14 @@ type
procedure scpClasseCompletionCodeCompletion(var Value: string;
SourceValue: string; var SourceStart, SourceEnd: TPoint;
KeyChar: TUTF8Char; Shift: TShiftState);
procedure scpClasseCompletionExecute(Sender: TObject);
procedure SynEditOQLChange(Sender: TObject);
procedure SynEditOQLClickLink(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SynEditOQLCommandProcessed(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
procedure SynEditOQLKeyPress(Sender: TObject; var Key: char);
procedure SynEditOQLProcessCommand(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
procedure SynEditOQLProcessUserCommand(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
procedure SynEditOQLQuadClick(Sender: TObject);
......@@ -139,13 +143,9 @@ type
function BuscaParcialClasse(piCLasse: string; piFiltrar: boolean): boolean;
function BuscarParcialChildClass(piClassTicket : acClassTicket; piFiltrar: boolean): boolean;
function FindParcialNodeClass(piClassTicketPai : acClassTicket; piFiltrar: boolean):acClassTicket;
function GetClassTicketRelation(piSynCompletion: TSynCompletion):acClassTicket;
procedure PreencherSynCompletionRelacionamentos(piClassTicket : acClassTicket;piSynCompletion : TSynCompletion);
procedure PreencherSynCompletionClasses(piSynCompletion : TSynCompletion);
procedure PreencherSynCompletionAtributos(piSynCompletion : TSynCompletion;piClassTicket : acClassTicket);
procedure ExecutarSybCompletion(piSynCompletion : TSynCompletion);
procedure PreencherAposDigitarPonto(piSynCompletion : TSynCompletion;piClassTicketPai : acClassTicket = nil);
procedure AlimentarListaCompletion(piLinha:string;piAceitaAtributo : boolean;piLista : TStrings);
procedure LoadListCompletion(piLinha:string;piAceitaAtributo : boolean;piLista : TStrings);
procedure PreparaSynCompletion;
protected
procedure CreateParams(var Params : TCreateParams); override;
function Connect : acPersistenceSession;
......@@ -462,14 +462,9 @@ procedure TExplorerV2.scpClasseCompletionCodeCompletion(var Value: string;
SourceValue: string; var SourceStart, SourceEnd: TPoint; KeyChar: TUTF8Char;
Shift: TShiftState);
begin
end;
procedure TExplorerV2.scpClasseCompletionExecute(Sender: TObject);
begin
end;
procedure TExplorerV2.SynEditOQLChange(Sender: TObject);
begin
......@@ -485,12 +480,11 @@ end;
procedure TExplorerV2.SynEditOQLCommandProcessed(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
begin
if Achar = '.' then
begin
PreencherAposDigitarPonto(scpAtributoCompletion);
ExecutarSybCompletion(scpAtributoCompletion);
end;
if AChar = '.' then
begin
PreparaSynCompletion;
ExecutarSybCompletion(scpListCompletion);
end;
end;
procedure TExplorerV2.SynEditOQLKeyPress(Sender: TObject; var Key: char);
......@@ -498,51 +492,17 @@ begin
end;
procedure TExplorerV2.SynEditOQLProcessUserCommand(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
var lClassTicket : acClassTicket;
ls_NameClass : string;
lbMostrarClasse : boolean;
ls_Aux : string;
li_Pos : integer;
p1,zeroPoint : TPoint;
procedure TExplorerV2.SynEditOQLProcessCommand(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
begin
{ p1 := SynEdit1.NextTokenPos ;//logical = byte position
zeroPoint := SynEdit1.PrevWordPos;
//ShowMessage(SynEdit1.TextBetweenPoints[zeroPoint ,p1]);
if Assigned(p1) then
ShowMessage(SynEdit1.TextBetweenPoints[zeroPoint,p1]); }
lbMostrarClasse := true;
ls_NameClass := trim(SynEditOQL.GetWordAtRowCol(SynEditOQL.PrevWordPos));
if ls_NameClass <> '' then
begin
lClassTicket := self.MetaModel.GetClassTicketByName(ls_NameClass);
if Assigned(lClassTicket) then
begin
p1 := SynEditOQL.NextTokenPos ;//logical = byte position
zeroPoint := SynEditOQL.PrevWordPos;
ls_Aux := SynEditOQL.TextBetweenPoints[zeroPoint,p1];
li_Pos := Pos('.',ls_Aux);
if li_Pos > 0 then
begin
PreencherAposDigitarPonto(scpAtributoCompletion,lClassTicket);
lbMostrarClasse := false;
end;
end;
end;
if lbMostrarClasse then
begin
if not Assigned(scpClasseCompletion.Editor) then
begin
scpAtributoCompletion.Editor := nil;
scpClasseCompletion.Editor := SynEditOQL;
ExecutarSybCompletion(scpClasseCompletion);
end;
end;
end;
procedure TExplorerV2.SynEditOQLProcessUserCommand(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
begin
PreparaSynCompletion;
// ExecutarSybCompletion(scpListCompletion);
end;
......@@ -758,154 +718,18 @@ begin
end;
function TExplorerV2.GetClassTicketRelation(piSynCompletion: TSynCompletion): acClassTicket;
var p1,zeroPoint: TPoint;
ls_aux : string;
lPropertyName: string;
begin
//http://wiki.lazarus.freepascal.org/SynEdit#Logical.2FPhysical_caret_position
{p1 := SynEdit1.CaretXY ;
ls_aux := SynEdit1.LineText;
li_Pos := Pos('ng',ls_aux);
zeroPoint.X := li_pos;
zeroPoint.y := SynEdit1.CaretY;
ls_aux := trim(SynEdit1.TextBetweenPoints[zeroPoint,p1]);
lPropertyName := trim(SynEditOQL.GetWordAtRowCol(SynEditOQL.PrevWordPos)); }
result := GetClassTicket(ls_aux,lPropertyName);
end;
procedure TExplorerV2.PreencherSynCompletionRelacionamentos(piClassTicket : acClassTicket;
piSynCompletion: TSynCompletion);
var li : integer;
lRelationTicket : acRelationTicket;
ls_NameRelacionamento : string;
lClassTicketRelation : acClassTicket;
begin
piSynCompletion.ItemList.Clear;
if not Assigned(piClassTicket) then
begin
lClassTicketRelation := GetClassTicketRelation(piSynCompletion);
exit;
end
else
begin
lClassTicketRelation := piClassTicket;
end;
for li := 0 to pred(lClassTicketRelation.RelationTicketsIn.Count) do
begin
lRelationTicket := acRelationTicket(lClassTicketRelation.RelationTicketsIn.Objects[li]);
piSynCompletion.ItemList.Add(lRelationTicket.DestinationPropertyName);
end;
for li := 0 to pred(lClassTicketRelation.RelationTicketsOut.Count) do
begin
lRelationTicket := acRelationTicket(lClassTicketRelation.RelationTicketsOut.Objects[li]);
piSynCompletion.ItemList.Add(lRelationTicket.OriginPropertyName);
end;
end;
procedure TExplorerV2.PreencherSynCompletionClasses(piSynCompletion : TSynCompletion);
var lEnumerator : acEnumerator;
lClassTicket : acClassTicket;
begin
lEnumerator := self.MetaModel.ClassTickets.GetEnumerator;
try
piSynCompletion.ItemList.Clear;
while not lEnumerator.EOL do
begin
lClassTicket := acClassTicket(lEnumerator.Current);
piSynCompletion.ItemList.Add(lClassTicket.PersistentObjectClassName);
lEnumerator.MoveNext;
end;
finally
lEnumerator.Free;
end;
end;
procedure TExplorerV2.PreencherSynCompletionAtributos(piSynCompletion: TSynCompletion;piClassTicket : acClassTicket);
var li : integer;
lAttributeTicket : acAttributeTicket;
begin
if Assigned(piClassTicket) then
begin
piSynCompletion.ItemList.Clear;
for li := 0 to pred(piClassTicket.Attributes.Count) do
begin
lAttributeTicket := acAttributeTicket(piClassTicket.Attributes.Objects[li]);
if lAttributeTicket.Stereotype = acAttributeStereotype.pvPersistent then
begin
piSynCompletion.ItemList.Add(lAttributeTicket.AttributeName);
end;
end;
end;
end;
procedure TExplorerV2.ExecutarSybCompletion(piSynCompletion: TSynCompletion);
var apoint,temppoint:tpoint;
begin
//will compare the schema_tablename to a list of available schema names for the current database.
//will compare the schema_tablename to a list of available schema names for the current database.
temppoint := SynEditOQL.CaretXY;
temppoint.y := temppoint.y+1;
apoint := SynEditOQL.ClientToScreen(SynEditOQL.RowColumnToPixels(temppoint));
piSynCompletion.Execute('',apoint);
end;
procedure TExplorerV2.PreencherAposDigitarPonto(piSynCompletion : TSynCompletion;piClassTicketPai : acClassTicket = nil);
var li,li_Pos : integer;
lAttributeTicket : acAttributeTicket;
lClassTicket : acClassTicket;
ls_Aux,
ls_NameClass : string;
p1,zeroPoint : TPoint;
begin
piSynCompletion.ItemList.Clear;
p1 := SynEditOQL.NextTokenPos ;//logical = byte position
zeroPoint := SynEditOQL.PrevWordPos;
ls_Aux := SynEditOQL.TextBetweenPoints[zeroPoint,p1];
li_Pos := Pos('..',ls_Aux);
if li_Pos > 0 then
begin
exit;
end;
if not Assigned(piClassTicketPai) then
begin
ls_NameClass := trim(SynEditOQL.GetWordAtRowCol(SynEditOQL.PrevWordPos));
if ls_NameClass <> '' then
begin
lClassTicket := self.MetaModel.GetClassTicketByName(ls_NameClass);
end;
end
else
begin
lClassTicket := piClassTicketPai;
end;
ls_Aux := LowerCase(SynEditOQL.LineText);
li_Pos := Pos('from',ls_Aux);
if li_Pos > 0 then
begin
PreencherSynCompletionRelacionamentos(lClassTicket,piSynCompletion)
end
else
begin
PreencherSynCompletionAtributos(piSynCompletion,lClassTicket);
end;
if not Assigned(piSynCompletion.Editor) then
begin
piSynCompletion.Editor := SynEditOQL;
scpClasseCompletion.Editor := nil;
end;
end;
procedure TExplorerV2.AlimentarListaCompletion(piLinha: string; piAceitaAtributo: boolean; piLista: TStrings);
procedure TExplorerV2.LoadListCompletion(piLinha: string; piAceitaAtributo: boolean; piLista: TStrings);
var lClassTicketCurrent,
lClassTicketAux: acClassTicket;
......@@ -918,13 +742,17 @@ var lClassTicketCurrent,
lbAchei : boolean;
lAttributeTicket : acAttributeTicket;
begin
li_Pos := Pos ('.',piLinha);
piLista.Clear;
if li_Pos <= 0 then
li_Pos := Pos ('..',piLinha);
if li_Pos > 0 then
begin
exit;
end;
li_Pos := Pos ('.',piLinha);
if li_Pos <= 0 then
begin
lEnumerator := self.MetaModel.ClassTickets.GetEnumerator;
try
piLista.Clear;
while not lEnumerator.EOL do
begin
lClassTicketCurrent := acClassTicket(lEnumerator.Current);
......@@ -966,20 +794,19 @@ begin
begin
for li := 0 to pred(lClassTicketCurrent.RelationTicketsOut.Count) do
begin
if SameText(lRelationTicket.DestinationPropertyName, ls_Objeto) then
lRelationTicket := acRelationTicket(lClassTicketCurrent.RelationTicketsOut.Objects[li]);
if SameText(lRelationTicket.OriginPropertyName, ls_Objeto) then
begin
lClassTicketAux := lRelationTicket.OriginClassTicket;
lClassTicketAux := lRelationTicket.DestinationClassTicket;
break;
end;
end;
end;
lClassTicketCurrent := lClassTicketAux;
end;
end;
if Assigned(lClassTicketAux) then
begin
lClassTicketCurrent := lClassTicketAux;
end;
if Assigned(lClassTicketCurrent) then
begin
if piAceitaAtributo then
......@@ -996,19 +823,68 @@ begin
for li := 0 to pred(lClassTicketCurrent.RelationTicketsIn.Count) do
begin
lRelationTicket := acRelationTicket(lClassTicketCurrent.RelationTicketsIn.Objects[li]);
piLista.Add(lRelationTicket.DestinationPropertyName);
if trim(lRelationTicket.DestinationPropertyName) <> '' then
piLista.Add(lRelationTicket.DestinationPropertyName);
end;
for li := 0 to pred(lClassTicketCurrent.RelationTicketsOut.Count) do
begin
lRelationTicket := acRelationTicket(lClassTicketCurrent.RelationTicketsOut.Objects[li]);
piLista.Add(lRelationTicket.OriginPropertyName);
if trim(lRelationTicket.OriginPropertyName) <> '' then
piLista.Add(lRelationTicket.OriginPropertyName);
end;
end;
end;
end;
procedure TExplorerV2.PreparaSynCompletion;
var lAceitaAtributo : boolean;
ls_espaco,
ls_Aux : string;
li_Pos : integer;
p1,zeroPoint : TPoint;
begin
scpListCompletion.ItemList.Clear;
p1 := SynEditOQL.CaretXY ;
zeroPoint.X := 0;
zeroPoint.y := SynEditOQL.CaretY;
ls_aux := trim(SynEditOQL.TextBetweenPoints[zeroPoint,p1]);
ls_espaco := ' ';
lAceitaAtributo := true;
li_Pos := Pos(__FROM,uppercase(ls_aux));
if li_Pos > 0 then
begin
ls_aux:=trim(Copy(ls_aux,li_Pos + Length(__FROM),Length(ls_aux)));
lAceitaAtributo:= false;
end;
li_Pos := Pos(__SELECT,uppercase(ls_aux));
if li_Pos > 0 then
begin
ls_aux:=trim(Copy(ls_aux,li_Pos + Length(__SELECT),Length(ls_aux)));
lAceitaAtributo:= false;;
end;
li_Pos := Pos(__WHERE,uppercase(ls_aux));
if li_Pos > 0 then
begin
ls_aux:=trim(Copy(ls_aux,li_Pos + Length(__WHERE),Length(ls_aux)));
lAceitaAtributo:= true;;
end;
li_Pos := Pos(ls_espaco,trim(ls_aux));
while li_Pos > 0 do
begin
ls_aux:=trim(Copy(ls_aux,li_Pos + 1,Length(ls_aux)));
li_Pos := Pos(ls_espaco,ls_aux);
end;
LoadListCompletion(ls_aux,lAceitaAtributo,scpListCompletion.ItemList);
end;
procedure TExplorerV2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
......@@ -1032,8 +908,8 @@ begin
fUtil.AlimentarMetamodel(lMetaModelGenOpt, nil);
FMetaModelPersistenceMap := fUtil.MetaModelPersistenceMap;
MetaModel := fUtil.MetaModel;
PreencherSynCompletionClasses(scpClasseCompletion);
scpAtributoCompletion.Editor := nil;
// PreencherSynCompletionClasses(scpListCompletion);
end;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment