Commit 90c1a185 authored by Jucelino Fonseca's avatar Jucelino Fonseca

Ajustes

parent 412edb52
object ExplorerV2: TExplorerV2 object ExplorerV2: TExplorerV2
Left = 565 Left = 523
Height = 871 Height = 871
Top = 77 Top = 77
Width = 1387 Width = 1387
......
...@@ -3,11 +3,11 @@ unit ituExplorerV2; ...@@ -3,11 +3,11 @@ unit ituExplorerV2;
interface interface
uses uses
LCLIntf, SysUtils, Variants, Classes, Graphics, Controls, Forms, LCLIntf, SysUtils, Variants, Classes, Graphics, Controls, Forms, Clipbrd,
Clipbrd, Dialogs, ExtCtrls, StdCtrls, ComCtrls, ActnList, Dialogs, ExtCtrls, StdCtrls, ComCtrls, ActnList, LCLType,
LCLType, acuSQLDialectManager, ImgList, acuframework, utuMessage, acuSQLDialectManager, ImgList, acuframework, utuMessage, IntegracaoDelphiSUML,
IntegracaoDelphiSUML, acuObjectExplorer, Menus, Buttons, SynEdit, acuObjectExplorer, Menus, Buttons, SynEdit, SynHighlighterSQL, SynCompletion,
SynHighlighterSQL, SynCompletion, acuModel, acuRepositorySQL, SynEditKeyCmds, Types; acuModel, acuRepositorySQL, SynEditKeyCmds, SynHighlighterPython, Types;
type type
...@@ -133,13 +133,19 @@ type ...@@ -133,13 +133,19 @@ type
procedure ResizeColumns(piListView: TListView); procedure ResizeColumns(piListView: TListView);
function GetStringEntreParenteses(piString : string) : string; function GetStringEntreParenteses(piString : string) : string;
function GetNumeroDeStringOID (piString : string) : string; function GetNumeroDeStringOID (piString : string) : string;
function GetClassTicket(piBloco,piPropertyName : string):acClassTicket;
procedure CopiaTextoObjeto (piObjeto : TTreeNode); procedure CopiaTextoObjeto (piObjeto : TTreeNode);
function BuscaParcial(piSubstring,piTexto :string): boolean;
function BuscaParcialClasse(piCLasse: string; piFiltrar: boolean): boolean; function BuscaParcialClasse(piCLasse: string; piFiltrar: boolean): boolean;
function BuscarParcialChildClass(piClassTicket : acClassTicket; piFiltrar: boolean): boolean; function BuscarParcialChildClass(piClassTicket : acClassTicket; piFiltrar: boolean): boolean;
function FindParcialNodeClass(piClassTicketPai : acClassTicket; piFiltrar: boolean):acClassTicket; function FindParcialNodeClass(piClassTicketPai : acClassTicket; piFiltrar: boolean):acClassTicket;
function GetClassTicketRelation(piSynCompletion: TSynCompletion):acClassTicket;
procedure PreencherSynCompletionRelacionamentos(piClassTicket : acClassTicket;piSynCompletion : TSynCompletion);
procedure PreencherSynCompletionClasses(piSynCompletion : TSynCompletion); procedure PreencherSynCompletionClasses(piSynCompletion : TSynCompletion);
procedure PreencherSynCompletionAtributos(piSynCompletion : TSynCompletion;piClassTicket : acClassTicket = nil); procedure PreencherSynCompletionAtributos(piSynCompletion : TSynCompletion;piClassTicket : acClassTicket);
procedure ExecutarSybCompletion(piSynCompletion : TSynCompletion); procedure ExecutarSybCompletion(piSynCompletion : TSynCompletion);
procedure PreencherAposDigitarPonto(piSynCompletion : TSynCompletion;piClassTicketPai : acClassTicket = nil);
procedure AlimentarListaCompletion(piLinha:string;piAceitaAtributo : boolean;piLista : TStrings);
protected protected
procedure CreateParams(var Params : TCreateParams); override; procedure CreateParams(var Params : TCreateParams); override;
function Connect : acPersistenceSession; function Connect : acPersistenceSession;
...@@ -481,9 +487,7 @@ procedure TExplorerV2.SynEditOQLCommandProcessed(Sender: TObject; ...@@ -481,9 +487,7 @@ procedure TExplorerV2.SynEditOQLCommandProcessed(Sender: TObject;
begin begin
if Achar = '.' then if Achar = '.' then
begin begin
PreencherSynCompletionAtributos(scpAtributoCompletion); PreencherAposDigitarPonto(scpAtributoCompletion);
scpClasseCompletion.Editor := nil;
scpAtributoCompletion.Editor := SynEditOQL;
ExecutarSybCompletion(scpAtributoCompletion); ExecutarSybCompletion(scpAtributoCompletion);
end; end;
...@@ -523,15 +527,9 @@ begin ...@@ -523,15 +527,9 @@ begin
li_Pos := Pos('.',ls_Aux); li_Pos := Pos('.',ls_Aux);
if li_Pos > 0 then if li_Pos > 0 then
begin begin
PreencherSynCompletionAtributos(scpAtributoCompletion,lClassTicket); PreencherAposDigitarPonto(scpAtributoCompletion,lClassTicket);
if not Assigned(scpAtributoCompletion.Editor) then
begin
scpAtributoCompletion.Editor := SynEditOQL;
scpClasseCompletion.Editor := nil;
end;
lbMostrarClasse := false; lbMostrarClasse := false;
end; end;
end; end;
end; end;
...@@ -655,6 +653,23 @@ begin ...@@ -655,6 +653,23 @@ begin
Clipbrd.Clipboard.AsText := lString; Clipbrd.Clipboard.AsText := lString;
end; end;
function TExplorerV2.BuscaParcial(piSubstring, piTexto: string): boolean;
var lSubstring,
lTexto : string;
begin
if trim(piSubstring) <> '' then
begin
lSubstring := TiraAcentos(trim(UpperCase(piSubstring)));
lTexto := TiraAcentos(trim(UpperCase(piTexto)));
result := Pos(lSubstring,lTexto) > 0;
end
else
begin
result := true;
end;
end;
function TExplorerV2.BuscaParcialClasse(piCLasse: string; piFiltrar: boolean): boolean; function TExplorerV2.BuscaParcialClasse(piCLasse: string; piFiltrar: boolean): boolean;
var lClasseTree, var lClasseTree,
lClasseP : string; lClasseP : string;
...@@ -743,6 +758,55 @@ begin ...@@ -743,6 +758,55 @@ begin
end; 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); procedure TExplorerV2.PreencherSynCompletionClasses(piSynCompletion : TSynCompletion);
var lEnumerator : acEnumerator; var lEnumerator : acEnumerator;
lClassTicket : acClassTicket; lClassTicket : acClassTicket;
...@@ -762,30 +826,17 @@ begin ...@@ -762,30 +826,17 @@ begin
end; end;
procedure TExplorerV2.PreencherSynCompletionAtributos(piSynCompletion: TSynCompletion;piClassTicket : acClassTicket = nil); procedure TExplorerV2.PreencherSynCompletionAtributos(piSynCompletion: TSynCompletion;piClassTicket : acClassTicket);
var li : integer; var li : integer;
lAttributeTicket : acAttributeTicket; lAttributeTicket : acAttributeTicket;
lClassTicket : acClassTicket;
ls_NameClass : string;
begin begin
if not Assigned(piClassTicket) then
begin if Assigned(piClassTicket) then
ls_NameClass := trim(SynEditOQL.GetWordAtRowCol(SynEditOQL.PrevWordPos));
if ls_NameClass <> '' then
begin
lClassTicket := self.MetaModel.GetClassTicketByName(ls_NameClass);
end;
end
else
begin
lClassTicket := piClassTicket;;
end;
if Assigned(lClassTicket) then
begin begin
piSynCompletion.ItemList.Clear; piSynCompletion.ItemList.Clear;
for li := 0 to pred(lClassTicket.Attributes.Count) do for li := 0 to pred(piClassTicket.Attributes.Count) do
begin begin
lAttributeTicket := acAttributeTicket(lClassTicket.Attributes.Objects[li]); lAttributeTicket := acAttributeTicket(piClassTicket.Attributes.Objects[li]);
if lAttributeTicket.Stereotype = acAttributeStereotype.pvPersistent then if lAttributeTicket.Stereotype = acAttributeStereotype.pvPersistent then
begin begin
piSynCompletion.ItemList.Add(lAttributeTicket.AttributeName); piSynCompletion.ItemList.Add(lAttributeTicket.AttributeName);
...@@ -806,6 +857,158 @@ begin ...@@ -806,6 +857,158 @@ begin
piSynCompletion.Execute('',apoint); piSynCompletion.Execute('',apoint);
end; 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);
var lClassTicketCurrent,
lClassTicketAux: acClassTicket;
lEnumerator : acEnumerator;
li,
li_Pos : integer;
ls_aux,
ls_Objeto : string;
lRelationTicket : acRelationTicket;
lbAchei : boolean;
lAttributeTicket : acAttributeTicket;
begin
li_Pos := Pos ('.',piLinha);
piLista.Clear;
if li_Pos <= 0 then
begin
lEnumerator := self.MetaModel.ClassTickets.GetEnumerator;
try
piLista.Clear;
while not lEnumerator.EOL do
begin
lClassTicketCurrent := acClassTicket(lEnumerator.Current);
if BuscaParcial(piLinha,lClassTicketCurrent.PersistentObjectClassName) then
begin
piLista.Add(lClassTicketCurrent.PersistentObjectClassName);
end;
lEnumerator.MoveNext;
end;
finally
lEnumerator.Free;
end;
end
else
begin
ls_aux := trim(piLinha);
lClassTicketAux := nil;
ls_Objeto := trim(Copy(ls_aux,0,li_Pos -1));
lClassTicketCurrent := self.MetaModel.GetClassTicketByName(ls_Objeto);
while li_Pos > 0 do
begin
ls_aux := trim(Copy(ls_aux,li_Pos +1,Length(ls_aux)));
li_Pos := Pos ('.',ls_aux);
ls_Objeto := trim(Copy(ls_aux,0,li_Pos -1));
if Assigned(lClassTicketCurrent) and (ls_Objeto <> '') then
begin
lbAchei := false;
for li := 0 to pred(lClassTicketCurrent.RelationTicketsIn.Count) do
begin
lRelationTicket := acRelationTicket(lClassTicketCurrent.RelationTicketsIn.Objects[li]);
if SameText(lRelationTicket.DestinationPropertyName, ls_Objeto) then
begin
lClassTicketAux := lRelationTicket.OriginClassTicket;
lbAchei := true;
break;
end;
end;
if not lbAchei then
begin
for li := 0 to pred(lClassTicketCurrent.RelationTicketsOut.Count) do
begin
if SameText(lRelationTicket.DestinationPropertyName, ls_Objeto) then
begin
lClassTicketAux := lRelationTicket.OriginClassTicket;
break;
end;
end;
end;
end;
end;
if Assigned(lClassTicketAux) then
begin
lClassTicketCurrent := lClassTicketAux;
end;
if Assigned(lClassTicketCurrent) then
begin
if piAceitaAtributo then
begin
for li := 0 to pred(lClassTicketCurrent.Attributes.Count) do
begin
lAttributeTicket := acAttributeTicket(lClassTicketCurrent.Attributes.Objects[li]);
if lAttributeTicket.Stereotype = acAttributeStereotype.pvPersistent then
begin
piLista.Add(lAttributeTicket.AttributeName);
end;
end;
end;
for li := 0 to pred(lClassTicketCurrent.RelationTicketsIn.Count) do
begin
lRelationTicket := acRelationTicket(lClassTicketCurrent.RelationTicketsIn.Objects[li]);
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);
end;
end;
end;
end;
procedure TExplorerV2.CreateParams(var Params: TCreateParams); procedure TExplorerV2.CreateParams(var Params: TCreateParams);
begin begin
inherited CreateParams(Params); inherited CreateParams(Params);
...@@ -1182,6 +1385,24 @@ begin ...@@ -1182,6 +1385,24 @@ begin
Result := lString; Result := lString;
end; end;
function TExplorerV2.GetClassTicket(piBloco, piPropertyName: string
): acClassTicket;
var lEnumerator: acEnumerator;
lRelationTicket : acRelationTicket;
begin
lEnumerator := MetaModel.RelationTickets.GetEnumerator;
try
while not lEnumerator.EOL do
begin
lRelationTicket := acRelationTicket(lEnumerator.Current);
//if lRelationTicket.;
lEnumerator.MoveNext;
end;
finally
lEnumerator.Free;
end;
end;
function TExplorerV2.GetStringEntreParenteses(piString: string): string; function TExplorerV2.GetStringEntreParenteses(piString: string): string;
var var
lString : string; lString : string;
...@@ -1447,4 +1668,4 @@ begin ...@@ -1447,4 +1668,4 @@ begin
{$ENDIF} {$ENDIF}
end; end;
end. end.11
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