Commit 30df7598 authored by Jucelino Fonseca's avatar Jucelino Fonseca

Ajustes e Testes

parent b385ee3f
...@@ -12210,6 +12210,7 @@ object ExplorerV2: TExplorerV2 ...@@ -12210,6 +12210,7 @@ object ExplorerV2: TExplorerV2
MouseLinkColor.Foreground = clBlue MouseLinkColor.Foreground = clBlue
LineHighlightColor.Background = clNone LineHighlightColor.Background = clNone
LineHighlightColor.Foreground = clNone LineHighlightColor.Foreground = clNone
OnCommandProcessed = SynEditOQLCommandProcessed
inline SynLeftGutterPartList1: TSynGutterPartList inline SynLeftGutterPartList1: TSynGutterPartList
object SynGutterMarks1: TSynGutterMarks object SynGutterMarks1: TSynGutterMarks
Width = 30 Width = 30
......
...@@ -11,6 +11,7 @@ uses ...@@ -11,6 +11,7 @@ uses
const const
__OID = 'OID';
__WHERE = 'WHERE'; __WHERE = 'WHERE';
__SELECT = 'SELECT'; __SELECT = 'SELECT';
__FROM = 'FROM'; __FROM = 'FROM';
...@@ -25,8 +26,9 @@ const ...@@ -25,8 +26,9 @@ const
__PARENTESES_FECHADO = ')'; __PARENTESES_FECHADO = ')';
__EXISTS = 'EXISTS'; __EXISTS = 'EXISTS';
__IN = 'IN'; __IN = 'IN';
__ASTERICO = '*';
__PONTO = '.'; __PONTO = '.';
__ASTERICO = '*';
{
__E_COMERCIAL = '&'; __E_COMERCIAL = '&';
__PERCENTUAL = '%'; __PERCENTUAL = '%';
__IGUAL = '='; __IGUAL = '=';
...@@ -35,8 +37,8 @@ const ...@@ -35,8 +37,8 @@ const
__PONTENCIA = '^'; __PONTENCIA = '^';
__SINAL_MAIOR = '>'; __SINAL_MAIOR = '>';
__SINAL_MENOR = '<'; __SINAL_MENOR = '<';
__SINAL_MENOS = '-'; __SINAL_MENOS = '-'; }
__OID = 'OID';
type type
TDLLDialog = class(TForm) TDLLDialog = class(TForm)
...@@ -115,6 +117,8 @@ type ...@@ -115,6 +117,8 @@ type
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure actResultsPanelExecute(Sender: TObject); procedure actResultsPanelExecute(Sender: TObject);
procedure rbSequencialClick(Sender: TObject); procedure rbSequencialClick(Sender: TObject);
procedure SynEditOQLCommandProcessed(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
procedure SynEditOQLKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure SynEditOQLKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure SynEditOQLUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); procedure SynEditOQLUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
procedure tvModelExplorerGetSelectedIndex(Sender: TObject; Node: TTreeNode); procedure tvModelExplorerGetSelectedIndex(Sender: TObject; Node: TTreeNode);
...@@ -180,10 +184,14 @@ type ...@@ -180,10 +184,14 @@ type
function GetClassTicketByNameRelation(piNameObjeto : string; out piNameAntObjeto : string) : acClassTicket; function GetClassTicketByNameRelation(piNameObjeto : string; out piNameAntObjeto : string) : acClassTicket;
function GetClassTicketByNameANDAlias(piNameObjeto : string) : acClassTicket; function GetClassTicketByNameANDAlias(piNameObjeto : string) : acClassTicket;
// //
function GetTextoAfterWord(piSynEdit: TSynEdit): string;
function GetTextoBeforeWord(piSynEdit: TSynEdit): string;
function GetWordsBetweenPoint(piSynEdit: TSynEdit): string;
function GetTextBetweenLines(piSynEdit: TSynEdit; out piWord : string; out piCareWordXY :TPoint): string;
function RetirarPalavraChaveOLQ(piSynEdit :TSynEdit;opEve: TFaOpenEvent):string; function RetirarPalavraChaveOLQ(piSynEdit :TSynEdit;opEve: TFaOpenEvent):string;
function IsKeyword(piItem : string): boolean; function IsKeyword(piItem : string): boolean;
function GetTextBetweenWord(piSynEdit :TSynEdit;piWordPos: TPoint;piWord : string) : string; function GetTextBetweenWord(piSynEdit :TSynEdit;piWordPos: TPoint;piWord : string) : string;
function IsExepressaoValida(piOpEve: TFaOpenEvent;piTexto : string; piTemPalavraAntes : Boolean = false):boolean;
protected protected
procedure CreateParams(var Params : TCreateParams); override; procedure CreateParams(var Params : TCreateParams); override;
function Connect : acPersistenceSession; function Connect : acPersistenceSession;
...@@ -489,12 +497,18 @@ procedure TExplorerV2.rbSequencialClick(Sender: TObject); ...@@ -489,12 +497,18 @@ procedure TExplorerV2.rbSequencialClick(Sender: TObject);
begin begin
end; end;
procedure TExplorerV2.SynEditOQLCommandProcessed(Sender: TObject;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
begin
fhlt1.CloseCompletionWindow;
end;
procedure TExplorerV2.SynEditOQLKeyUp(Sender: TObject; var Key: Word; procedure TExplorerV2.SynEditOQLKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState); Shift: TShiftState);
var lmostrar : boolean; var lmostrar : boolean;
begin begin
lmostrar := true; lmostrar := true;
// Ctrl + Espao // Ctrl + Espao
if ( (Shift = [ssCtrl]) and (Key = 86) ) if ( (Shift = [ssCtrl]) and (Key = 86) )
then then
...@@ -1183,6 +1197,155 @@ begin ...@@ -1183,6 +1197,155 @@ begin
end; end;
end; end;
function TExplorerV2.GetTextoAfterWord(piSynEdit: TSynEdit): string;
var lWord : string;
p1,p2,PointAtual: TPoint;
begin
p1 := piSynEdit.PrevWordPos;
lWord := piSynEdit.GetWordAtRowCol(p1);
p1.X := p1.X + Length(lWord);
PointAtual := piSynEdit.CaretXY;
P2 := PointAtual;
result := piSynEdit.TextBetweenPoints[p1,p2];
if (trim(result) = '') and (p1.Y <> p2.Y) then
begin
p1.X := 0;
result := piSynEdit.TextBetweenPoints[p1,p2];
while (trim(result) = '') and (p1.Y > 0) do
begin
p2.Y := p1.Y;
p1.Y := p1.Y - 1;
result := piSynEdit.TextBetweenPoints[p1,p2];
end;
if trim(result) <> '' then
begin
piSynEdit.CaretX := Length(result);
piSynEdit.CaretY := p1.Y;
p1 := piSynEdit.PrevWordPos;
lWord := piSynEdit.GetWordAtRowCol(p1);
p1.X := p1.X + Length(lWord);
p2 := piSynEdit.CaretXY;
p2.X := Length(result);
result := piSynEdit.TextBetweenPoints[p1,p2];
piSynEdit.CaretXY := PointAtual;;
end;
end
end;
function TExplorerV2.GetTextoBeforeWord(piSynEdit: TSynEdit): string;
var p1,p2: TPoint;
begin
p1 := piSynEdit.CaretXY;
p2 := piSynEdit.NextWordPos;
result := piSynEdit.TextBetweenPoints[p1,p2];
end;
function TExplorerV2.GetWordsBetweenPoint(piSynEdit: TSynEdit): string;
var lWord,
lWordAux,
ls_caractere,
ls_texto : string;
li_CareWordX,
li_LenWord,
li_PosInicio,
li_LenFim : integer;
p1,p2: TPoint;
begin
ls_texto := GetTextBetweenLines(piSynEdit,lWord,p1);
p2 := p1;
result := lWord;
li_PosInicio := p1.X;
li_LenFim := Length(lWord);
while (li_PosInicio > 0) and (lWord <> '') do
begin
p1.X := li_PosInicio - 1;
ls_caractere := trim(Copy(ls_texto,p1.X,1));
if ls_caractere = __PONTO then
begin
lWord := trim(piSynEdit.GetWordAtRowCol(p1));
li_LenWord := Length(lWord);
li_LenFim := li_LenFim + li_LenWord + 1;
p1.X := p1.X - li_LenWord;
end
else if ls_caractere = '' then
begin
break;
end
else
begin
lWordAux := trim(piSynEdit.GetWordAtRowCol(p1));
if (lWordAux)<> lWord then
begin
break;
end;
end;
li_PosInicio := p1.X;
end;
result := trim(Copy(ls_texto,li_PosInicio,li_LenFim));
if Pos(__PONTO,result) = 1 then
begin
result := trim(Copy(result,2,li_LenFim));
end;
end;
function TExplorerV2.GetTextBetweenLines(piSynEdit: TSynEdit; out
piWord: string; out piCareWordXY: TPoint): string;
var p1, p2, PointAtual: TPoint;
lLen : integer;
begin
p1 := piSynEdit.PrevWordPos;
piCareWordXY := p1;
p2 := piSynEdit.CaretXY;
PointAtual := P2;
if p1.Y <> p2.Y then
begin
piWord := trim(piSynEdit.GetWordAtRowCol(p1));
p1.X := 0;
if ((p2.Y - p1.Y) > 0) AND
(piWord = '') then
begin
result := piSynEdit.TextBetweenPoints[p1,p2];
while (trim(result) = '') and (p1.Y > 0) do
begin
p2.Y := p1.Y;
p1.Y := p1.Y - 1;
result := piSynEdit.TextBetweenPoints[p1,p2];
end;
lLen := Length(result);
piSynEdit.CaretX := lLen;
piSynEdit.CaretY := p1.Y;
piCareWordXY := piSynEdit.PrevWordPos;
piWord := trim(piSynEdit.GetWordAtRowCol(piCareWordXY));
piSynEdit.CaretXY:= PointAtual;
end
else
begin
result := piSynEdit.TextBetweenPoints[p1,p2];
piCareWordXY.X := piCareWordXY.X - Length(piWord);
end;
result := StringReplace(result,#13,'',[rfReplaceAll]);
result := StringReplace(result,#10,'',[rfReplaceAll]);
end
else
begin
result := piSynEdit.LineText;
piWord := trim(piSynEdit.GetWordAtRowCol(p1));
end;
end;
{ {
procedure TExplorerV2.PreparaSynCompletion; procedure TExplorerV2.PreparaSynCompletion;
var lAceitaAtributo : boolean; var lAceitaAtributo : boolean;
...@@ -1232,149 +1395,73 @@ begin ...@@ -1232,149 +1395,73 @@ begin
end; } end; }
function TExplorerV2.RetirarPalavraChaveOLQ(piSynEdit: TSynEdit;opEve: TFaOpenEvent): string; function TExplorerV2.RetirarPalavraChaveOLQ(piSynEdit: TSynEdit;opEve: TFaOpenEvent): string;
var lWord, var lTextAfterWord,
lText, lTextNextPoint: string;
ls_espaco, lTemPalavra : Boolean;
ls_aux : string;
li_Pos : integer;
p2,
p1,zeroPoint : TPoint;
begin begin
result := '';
p2 := piSynEdit.PrevWordPos; lTextAfterWord := GetTextoAfterWord(piSynEdit);
lWord := trim(piSynEdit.GetWordAtRowCol(p2)); result := GetWordsBetweenPoint(piSynEdit);
lText := GetTextBetweenWord(piSynEdit,p2,lWord); lTextNextPoint := GetTextoBeforeWord(piSynEdit);
if not IsKeyword(lWord) then
begin if not IsKeyword(result) then
if (opEve = fopEvenSelectCompleto) or begin
(opEve = fopEvenFromCompleto) or lTemPalavra := trim(result) <> '';
(opEve = fopEvenWhereCompleto) if (result <> '') and (lTextAfterWord <> '') then
then begin
begin if trim(lTextAfterWord) <> '' then
if trim(lText) <> '' then begin
begin if SameText(__PONTO,lTextAfterWord) then
result := lText;
end;
if (opEve = fopEvenSelectCompleto) or
(opEve = fopEvenFromCompleto)
then
begin
if ContemPalavra(__VIRGULA,lText) then
begin begin
result := ''; result := result + lTextAfterWord
end; end
end else
else if (opEve = fopEvenWhereCompleto) then
begin
if ContemPalavra(__ASTERICO,lText) or
ContemPalavra(__E_COMERCIAL,lText) or
ContemPalavra(__PERCENTUAL,lText) or
ContemPalavra(__IGUAL,lText) or
ContemPalavra(__SINAL_MAIS,lText) or
ContemPalavra(__DIVISOR,lText) or
ContemPalavra(__PONTENCIA,lText) or
ContemPalavra(__PARENTESES_ABERTO,lText) or
ContemPalavra(__SINAL_MAIOR,lText) or
ContemPalavra(__SINAL_MENOR,lText) or
ContemPalavra(__SINAL_MENOS,lText)
then
begin begin
result := ''; result := lTextAfterWord;
end; if IsExepressaoValida(OpEve,trim(lTextAfterWord),lTemPalavra) then
end; begin
end result := '';
else end;
begin end;
if (trim(lWord) = trim(lText)) or end
ContemPalavra(__PONTO,lText) else if trim(lTextAfterWord) = '' then
then begin
begin result := result + lTextAfterWord;
result := lText; end;
end; end
end else if (lTextAfterWord <> '') then
end begin
else result := lTextAfterWord;
begin end;
end
if (lWord = lText) then else
begin begin
result := lWord; lTemPalavra := false;
end if (trim(lTextAfterWord) = '') or (trim(lTextNextPoint) = '') then
else if ContemPalavra(__ASTERICO,lText) then
begin begin
result := lText; result := '';
end; if not IsExepressaoValida(opEve,trim(lTextAfterWord),lTemPalavra) then
end; begin
result := lTextAfterWord;
end;
if not IsExepressaoValida(opEve,trim(lTextNextPoint),lTemPalavra) then
begin
result := lTextNextPoint;
end;
if result <> '' then if not IsExepressaoValida(opEve,trim(lTextAfterWord),lTemPalavra) then
begin
p1 := piSynEdit.CaretXY ;
zeroPoint.X := 0;
zeroPoint.y := piSynEdit.CaretY;
ls_aux := piSynEdit.TextBetweenPoints[zeroPoint,p1];
ls_espaco := ' ';
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;
result :=ls_aux; {
li_Pos := Pos(result,ls_aux) ;
if li_Pos > 0 then
begin
ls_espaco := ' ';
ls_aux := trim(Copy(ls_aux,0,li_Pos));
li_Pos := Pos(ls_espaco,trim(ls_aux));
while li_Pos > 0 do
begin begin
ls_aux := trim(Copy(ls_aux,li_Pos + 1,Length(ls_aux))); result := lTextAfterWord;
li_Pos := Pos(ls_espaco,ls_aux);
end; end;
result := ls_aux + result;
end }
end
{ p1 := piSynEdit.CaretXY ;
zeroPoint.X := 0;
zeroPoint.y := piSynEdit.CaretY;
ls_aux := piSynEdit.TextBetweenPoints[zeroPoint,p1];
ls_aux := Copy(ls_aux, Length(ls_aux), Length(ls_aux));
result := trim(piSynEdit.TextBetweenPoints[zeroPoint,p1]);
ls_espaco := ' ';
li_Pos := Pos(__FROM,uppercase(result));
if li_Pos > 0 then
begin
result:=trim(Copy(result,li_Pos + Length(__FROM),Length(result)));
end;
li_Pos := Pos(__SELECT,uppercase(result)); if not IsExepressaoValida(opEve,trim(lTextNextPoint),lTemPalavra) then
if li_Pos > 0 then begin
begin result := lTextNextPoint;
result:=trim(Copy(result,li_Pos + Length(__SELECT),Length(result))); end;
end; end;
li_Pos := Pos(__WHERE,uppercase(result)); end;
if li_Pos > 0 then
begin
result:=trim(Copy(result,li_Pos + Length(__WHERE),Length(result)));
end;
li_Pos := Pos(ls_espaco,trim(result));
while li_Pos > 0 do
begin
result := trim(Copy(result,li_Pos + 1,Length(result)));
li_Pos := Pos(ls_espaco,result);
end;
if ls_aux = ' ' then
begin
result := result + ls_aux;
// showMessage(Result)
end;
}
end; end;
...@@ -1427,6 +1514,56 @@ begin ...@@ -1427,6 +1514,56 @@ begin
result := piSynEdit.TextBetweenPoints[p1, piSynEdit.CaretXY]; } result := piSynEdit.TextBetweenPoints[p1, piSynEdit.CaretXY]; }
end; end;
function TExplorerV2.IsExepressaoValida(piOpEve: TFaOpenEvent; piTexto: string;piTemPalavraAntes : Boolean = false ): boolean;
var ls_expressao : string;
li_Pos,
li_Len : integer;
ls_Caractere : string;
begin
result := true;
ls_expressao := '';
li_Pos := 1;
li_len := Length(piTexto);
if (piOpEve = fopEvenSelectCompleto) then
begin
ls_expressao := '=,()*';
if (trim(piTexto) = __ASTERICO) then
begin
li_Pos := li_Len + 1;
result := false;
end;
end
else if (piOpEve = fopEvenFromCompleto) then
begin
ls_expressao := '=,()';
end
else if (piOpEve = fopEvenWhereCompleto) then
begin
if piTemPalavraAntes then
begin
ls_expressao := '=<>(*-+/';
end
else
begin
ls_expressao := '=,<>()*-+./[]{}';
end;
end;
while li_Pos <= li_Len do
begin
ls_Caractere := trim(Copy(piTexto,li_Pos,1));
if ls_Caractere <> '' then
begin
if Pos(ls_Caractere,ls_expressao) <= 0 then
begin
result := false;
break;
end;
end;
li_Pos := li_Pos + 1;
end;
end;
procedure TExplorerV2.CreateParams(var Params: TCreateParams); procedure TExplorerV2.CreateParams(var Params: TCreateParams);
begin begin
inherited CreateParams(Params); inherited CreateParams(Params);
......
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