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

Ajustes

parent 412edb52
object ExplorerV2: TExplorerV2
Left = 565
Left = 523
Height = 871
Top = 77
Width = 1387
......
......@@ -3,11 +3,11 @@ unit ituExplorerV2;
interface
uses
LCLIntf, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Clipbrd, Dialogs, ExtCtrls, StdCtrls, ComCtrls, ActnList,
LCLType, acuSQLDialectManager, ImgList, acuframework, utuMessage,
IntegracaoDelphiSUML, acuObjectExplorer, Menus, Buttons, SynEdit,
SynHighlighterSQL, SynCompletion, acuModel, acuRepositorySQL, SynEditKeyCmds, Types;
LCLIntf, SysUtils, Variants, Classes, Graphics, Controls, Forms, Clipbrd,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, ActnList, LCLType,
acuSQLDialectManager, ImgList, acuframework, utuMessage, IntegracaoDelphiSUML,
acuObjectExplorer, Menus, Buttons, SynEdit, SynHighlighterSQL, SynCompletion,
acuModel, acuRepositorySQL, SynEditKeyCmds, SynHighlighterPython, Types;
type
......@@ -133,13 +133,19 @@ type
procedure ResizeColumns(piListView: TListView);
function GetStringEntreParenteses(piString : string) : string;
function GetNumeroDeStringOID (piString : string) : string;
function GetClassTicket(piBloco,piPropertyName : string):acClassTicket;
procedure CopiaTextoObjeto (piObjeto : TTreeNode);
function BuscaParcial(piSubstring,piTexto :string): boolean;
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 = nil);
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);
protected
procedure CreateParams(var Params : TCreateParams); override;
function Connect : acPersistenceSession;
......@@ -481,9 +487,7 @@ procedure TExplorerV2.SynEditOQLCommandProcessed(Sender: TObject;
begin
if Achar = '.' then
begin
PreencherSynCompletionAtributos(scpAtributoCompletion);
scpClasseCompletion.Editor := nil;
scpAtributoCompletion.Editor := SynEditOQL;
PreencherAposDigitarPonto(scpAtributoCompletion);
ExecutarSybCompletion(scpAtributoCompletion);
end;
......@@ -523,15 +527,9 @@ begin
li_Pos := Pos('.',ls_Aux);
if li_Pos > 0 then
begin
PreencherSynCompletionAtributos(scpAtributoCompletion,lClassTicket);
if not Assigned(scpAtributoCompletion.Editor) then
begin
scpAtributoCompletion.Editor := SynEditOQL;
scpClasseCompletion.Editor := nil;
end;
PreencherAposDigitarPonto(scpAtributoCompletion,lClassTicket);
lbMostrarClasse := false;
end;
end;
end;
......@@ -655,6 +653,23 @@ begin
Clipbrd.Clipboard.AsText := lString;
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;
var lClasseTree,
lClasseP : string;
......@@ -743,6 +758,55 @@ 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;
......@@ -762,30 +826,17 @@ begin
end;
procedure TExplorerV2.PreencherSynCompletionAtributos(piSynCompletion: TSynCompletion;piClassTicket : acClassTicket = nil);
procedure TExplorerV2.PreencherSynCompletionAtributos(piSynCompletion: TSynCompletion;piClassTicket : acClassTicket);
var li : integer;
lAttributeTicket : acAttributeTicket;
lClassTicket : acClassTicket;
ls_NameClass : string;
begin
if not Assigned(piClassTicket) 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 := piClassTicket;;
end;
if Assigned(lClassTicket) then
if Assigned(piClassTicket) then
begin
piSynCompletion.ItemList.Clear;
for li := 0 to pred(lClassTicket.Attributes.Count) do
for li := 0 to pred(piClassTicket.Attributes.Count) do
begin
lAttributeTicket := acAttributeTicket(lClassTicket.Attributes.Objects[li]);
lAttributeTicket := acAttributeTicket(piClassTicket.Attributes.Objects[li]);
if lAttributeTicket.Stereotype = acAttributeStereotype.pvPersistent then
begin
piSynCompletion.ItemList.Add(lAttributeTicket.AttributeName);
......@@ -806,6 +857,158 @@ begin
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);
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);
begin
inherited CreateParams(Params);
......@@ -1182,6 +1385,24 @@ begin
Result := lString;
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;
var
lString : string;
......@@ -1447,4 +1668,4 @@ begin
{$ENDIF}
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