mirror of https://gitlab.com/basile.b/dexed.git
DCD integration, cache import list, avoid too much updates when libman is often updated
This commit is contained in:
parent
649d29432d
commit
b0f23d591b
|
@ -22,6 +22,7 @@ type
|
||||||
TCEDcdWrapper = class(TWritableLfmTextComponent, ICEProjectObserver, ICEMultiDocObserver)
|
TCEDcdWrapper = class(TWritableLfmTextComponent, ICEProjectObserver, ICEMultiDocObserver)
|
||||||
private
|
private
|
||||||
fTempLines: TStringList;
|
fTempLines: TStringList;
|
||||||
|
fImportCache: TStringList;
|
||||||
//fPortNum: Word;
|
//fPortNum: Word;
|
||||||
fServerWasRunning: boolean;
|
fServerWasRunning: boolean;
|
||||||
fClient, fServer: TProcess;
|
fClient, fServer: TProcess;
|
||||||
|
@ -30,6 +31,7 @@ type
|
||||||
fProj: TCEProject;
|
fProj: TCEProject;
|
||||||
procedure killServer;
|
procedure killServer;
|
||||||
procedure terminateClient;
|
procedure terminateClient;
|
||||||
|
procedure waitClient;
|
||||||
//
|
//
|
||||||
procedure projNew(aProject: TCEProject);
|
procedure projNew(aProject: TCEProject);
|
||||||
procedure projChanged(aProject: TCEProject);
|
procedure projChanged(aProject: TCEProject);
|
||||||
|
@ -45,7 +47,6 @@ type
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
//
|
//
|
||||||
procedure restartServer;
|
|
||||||
procedure addImportFolder(const aFolder: string);
|
procedure addImportFolder(const aFolder: string);
|
||||||
procedure getComplAtCursor(aList: TStrings);
|
procedure getComplAtCursor(aList: TStrings);
|
||||||
procedure getCallTip(out tips: string);
|
procedure getCallTip(out tips: string);
|
||||||
|
@ -74,7 +75,7 @@ begin
|
||||||
//
|
//
|
||||||
fClient := TProcess.Create(self);
|
fClient := TProcess.Create(self);
|
||||||
fClient.Executable := clientName;
|
fClient.Executable := clientName;
|
||||||
fClient.Options := [poUsePipes{$IFDEF WINDOWS}, poNewConsole{$ENDIF}{$IFDEF LINUX}, poWaitOnExit{$ENDIF}];
|
fClient.Options := [poUsePipes{$IFDEF WINDOWS}, poNewConsole{$ENDIF}];
|
||||||
fClient.ShowWindow := swoHIDE;
|
fClient.ShowWindow := swoHIDE;
|
||||||
//
|
//
|
||||||
fServerWasRunning := AppIsRunning((serverName));
|
fServerWasRunning := AppIsRunning((serverName));
|
||||||
|
@ -87,6 +88,7 @@ begin
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
fTempLines := TStringList.Create;
|
fTempLines := TStringList.Create;
|
||||||
|
fImportCache := TStringList.Create;
|
||||||
|
|
||||||
if (fServer <> nil) then
|
if (fServer <> nil) then
|
||||||
fServer.Execute;
|
fServer.Execute;
|
||||||
|
@ -97,6 +99,7 @@ end;
|
||||||
destructor TCEDcdWrapper.destroy;
|
destructor TCEDcdWrapper.destroy;
|
||||||
begin
|
begin
|
||||||
EntitiesConnector.removeObserver(self);
|
EntitiesConnector.removeObserver(self);
|
||||||
|
fImportCache.Free;
|
||||||
if fTempLines <> nil then
|
if fTempLines <> nil then
|
||||||
fTempLines.Free;
|
fTempLines.Free;
|
||||||
if fServer <> nil then begin
|
if fServer <> nil then begin
|
||||||
|
@ -195,7 +198,6 @@ procedure TCEDcdWrapper.killServer;
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
if not fAvailable then exit;
|
||||||
//
|
//
|
||||||
while fClient.Running do;
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
fClient.Parameters.Add('--shutdown');
|
fClient.Parameters.Add('--shutdown');
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
|
@ -205,20 +207,21 @@ begin
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEDcdWrapper.restartServer;
|
procedure TCEDcdWrapper.waitClient;
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
while fClient.Running do;
|
||||||
//
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEDcdWrapper.addImportFolder(const aFolder: string);
|
procedure TCEDcdWrapper.addImportFolder(const aFolder: string);
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
if not fAvailable then exit;
|
||||||
//
|
//
|
||||||
while fClient.Running do sleep(1);
|
if fImportCache.IndexOf(aFolder) <> -1 then exit;
|
||||||
|
fImportCache.Add(aFolder);
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
fClient.Parameters.Add('-I' + aFolder);
|
fClient.Parameters.Add('-I' + aFolder);
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
|
waitClient;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEDcdWrapper.getCallTip(out tips: string);
|
procedure TCEDcdWrapper.getCallTip(out tips: string);
|
||||||
|
@ -229,12 +232,12 @@ begin
|
||||||
fTempLines.Assign(fDoc.Lines);
|
fTempLines.Assign(fDoc.Lines);
|
||||||
fTempLines.SaveToFile(fDoc.tempFilename);
|
fTempLines.SaveToFile(fDoc.tempFilename);
|
||||||
//
|
//
|
||||||
terminateClient;
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
fClient.Parameters.Add('-c');
|
fClient.Parameters.Add('-c');
|
||||||
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
||||||
fClient.Parameters.Add(fDoc.tempFilename);
|
fClient.Parameters.Add(fDoc.tempFilename);
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
|
waitClient;
|
||||||
//
|
//
|
||||||
fTempLines.LoadFromStream(fClient.Output);
|
fTempLines.LoadFromStream(fClient.Output);
|
||||||
if fTempLines.Count = 0 then exit;
|
if fTempLines.Count = 0 then exit;
|
||||||
|
@ -257,12 +260,12 @@ begin
|
||||||
fTempLines.Assign(fDoc.Lines);
|
fTempLines.Assign(fDoc.Lines);
|
||||||
fTempLines.SaveToFile(fDoc.tempFilename);
|
fTempLines.SaveToFile(fDoc.tempFilename);
|
||||||
//
|
//
|
||||||
terminateClient;
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
fClient.Parameters.Add('-c');
|
fClient.Parameters.Add('-c');
|
||||||
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
||||||
fClient.Parameters.Add(fDoc.tempFilename);
|
fClient.Parameters.Add(fDoc.tempFilename);
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
|
waitClient;
|
||||||
//
|
//
|
||||||
fTempLines.LoadFromStream(fClient.Output);
|
fTempLines.LoadFromStream(fClient.Output);
|
||||||
if fTempLines.Count = 0 then exit;
|
if fTempLines.Count = 0 then exit;
|
||||||
|
@ -310,13 +313,13 @@ begin
|
||||||
fTempLines.Assign(fDoc.Lines);
|
fTempLines.Assign(fDoc.Lines);
|
||||||
fTempLines.SaveToFile(fDoc.tempFilename);
|
fTempLines.SaveToFile(fDoc.tempFilename);
|
||||||
//
|
//
|
||||||
terminateClient;
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
fClient.Parameters.Add('-d');
|
fClient.Parameters.Add('-d');
|
||||||
fClient.Parameters.Add('-c');
|
fClient.Parameters.Add('-c');
|
||||||
fClient.Parameters.Add(intToStr(i - 1));
|
fClient.Parameters.Add(intToStr(i - 1));
|
||||||
fClient.Parameters.Add(fDoc.tempFilename);
|
fClient.Parameters.Add(fDoc.tempFilename);
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
|
waitClient;
|
||||||
//
|
//
|
||||||
aComment := '';
|
aComment := '';
|
||||||
fTempLines.LoadFromStream(fClient.Output);
|
fTempLines.LoadFromStream(fClient.Output);
|
||||||
|
@ -335,13 +338,13 @@ begin
|
||||||
fTempLines.Assign(fDoc.Lines);
|
fTempLines.Assign(fDoc.Lines);
|
||||||
fTempLines.SaveToFile(fDoc.tempFilename);
|
fTempLines.SaveToFile(fDoc.tempFilename);
|
||||||
//
|
//
|
||||||
terminateClient;
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
fClient.Parameters.Add('-l');
|
fClient.Parameters.Add('-l');
|
||||||
fClient.Parameters.Add('-c');
|
fClient.Parameters.Add('-c');
|
||||||
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
||||||
fClient.Parameters.Add(fDoc.tempFilename);
|
fClient.Parameters.Add(fDoc.tempFilename);
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
|
waitClient;
|
||||||
//
|
//
|
||||||
str := 'a';
|
str := 'a';
|
||||||
setlength(str, 256);
|
setlength(str, 256);
|
||||||
|
|
Loading…
Reference in New Issue