mirror of https://gitlab.com/basile.b/dexed.git
#99, restart DCD when possible
This commit is contained in:
parent
d7de93a500
commit
e5551d4612
|
@ -12,8 +12,6 @@ uses
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
//TODO-cCompilerPaths: add a way to relaunch DCD after compiler change
|
|
||||||
|
|
||||||
TCompilersPaths = class(TWritableLfmTextComponent)
|
TCompilersPaths = class(TWritableLfmTextComponent)
|
||||||
strict private
|
strict private
|
||||||
fDefaultCompiler: DCompiler;
|
fDefaultCompiler: DCompiler;
|
||||||
|
@ -75,7 +73,7 @@ type
|
||||||
procedure assign(source: TPersistent); override;
|
procedure assign(source: TPersistent); override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TForm1 = class(TForm, ICEEditableOptions, ICECompilerSelector)
|
TForm1 = class(TForm, ICEEditableOptions, ICECompilerSelector, ICEProjectObserver)
|
||||||
selDefault: TComboBox;
|
selDefault: TComboBox;
|
||||||
selDMDrt: TDirectoryEdit;
|
selDMDrt: TDirectoryEdit;
|
||||||
selUSER2std: TDirectoryEdit;
|
selUSER2std: TDirectoryEdit;
|
||||||
|
@ -118,6 +116,7 @@ type
|
||||||
strict private
|
strict private
|
||||||
fPaths: TCompilersPaths;
|
fPaths: TCompilersPaths;
|
||||||
fPathsBackup: TCompilersPaths;
|
fPathsBackup: TCompilersPaths;
|
||||||
|
fProj: ICECommonProject;
|
||||||
procedure selectedExe(sender: TObject; var value: string);
|
procedure selectedExe(sender: TObject; var value: string);
|
||||||
procedure selectedRt(sender: TObject; var value: string);
|
procedure selectedRt(sender: TObject; var value: string);
|
||||||
procedure selectedStd(sender: TObject; var value: string);
|
procedure selectedStd(sender: TObject; var value: string);
|
||||||
|
@ -137,6 +136,14 @@ type
|
||||||
function isCompilerValid(value: DCompiler): boolean;
|
function isCompilerValid(value: DCompiler): boolean;
|
||||||
function getCompilerPath(value: DCompiler): string;
|
function getCompilerPath(value: DCompiler): string;
|
||||||
procedure getCompilerImports(value: DCompiler; paths: TStrings);
|
procedure getCompilerImports(value: DCompiler; paths: TStrings);
|
||||||
|
//
|
||||||
|
procedure projNew(project: ICECommonProject);
|
||||||
|
procedure projChanged(project: ICECommonProject);
|
||||||
|
procedure projClosing(project: ICECommonProject);
|
||||||
|
procedure projFocused(project: ICECommonProject);
|
||||||
|
procedure projCompiling(project: ICECommonProject);
|
||||||
|
procedure projCompiled(project: ICECommonProject; success: boolean);
|
||||||
|
procedure updateDCD;
|
||||||
public
|
public
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
|
@ -145,6 +152,9 @@ type
|
||||||
implementation
|
implementation
|
||||||
{$R *.lfm}
|
{$R *.lfm}
|
||||||
|
|
||||||
|
uses
|
||||||
|
ce_libman;
|
||||||
|
|
||||||
var
|
var
|
||||||
Form1: TForm1;
|
Form1: TForm1;
|
||||||
|
|
||||||
|
@ -155,7 +165,6 @@ const
|
||||||
constructor TForm1.create(aOwner: TComponent);
|
constructor TForm1.create(aOwner: TComponent);
|
||||||
var
|
var
|
||||||
fname: string;
|
fname: string;
|
||||||
imprt: TStringList;
|
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
fPaths:= TCompilersPaths.Create(self);
|
fPaths:= TCompilersPaths.Create(self);
|
||||||
|
@ -173,13 +182,7 @@ begin
|
||||||
fPathsBackup.Assign(fPaths);
|
fPathsBackup.Assign(fPaths);
|
||||||
dataToGui;
|
dataToGui;
|
||||||
|
|
||||||
imprt := TStringList.Create;
|
updateDCD;
|
||||||
try
|
|
||||||
getCompilerImports(fPaths.defaultCompiler, imprt);
|
|
||||||
DcdWrapper.addImportFolders(imprt);
|
|
||||||
finally
|
|
||||||
imprt.free;
|
|
||||||
end;
|
|
||||||
|
|
||||||
selDMDexe.OnAcceptFileName:= @selectedExe;
|
selDMDexe.OnAcceptFileName:= @selectedExe;
|
||||||
selGDCexe.OnAcceptFileName:= @selectedExe;
|
selGDCexe.OnAcceptFileName:= @selectedExe;
|
||||||
|
@ -396,6 +399,35 @@ begin
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEProjectObserver ----------------------------------------------------}
|
||||||
|
procedure TForm1.projNew(project: ICECommonProject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.projChanged(project: ICECommonProject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.projClosing(project: ICECommonProject);
|
||||||
|
begin
|
||||||
|
if fProj = project then
|
||||||
|
fProj := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.projFocused(project: ICECommonProject);
|
||||||
|
begin
|
||||||
|
fProj := project;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.projCompiling(project: ICECommonProject);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.projCompiled(project: ICECommonProject; success: boolean);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION ICEEditableOptions ----------------------------------------------------}
|
{$REGION ICEEditableOptions ----------------------------------------------------}
|
||||||
function TForm1.optionedWantCategory(): string;
|
function TForm1.optionedWantCategory(): string;
|
||||||
begin
|
begin
|
||||||
|
@ -420,8 +452,19 @@ begin
|
||||||
begin
|
begin
|
||||||
fPathsBackup.assign(fPaths);
|
fPathsBackup.assign(fPaths);
|
||||||
if fPaths.wouldNeedRestart and fPaths.modified then
|
if fPaths.wouldNeedRestart and fPaths.modified then
|
||||||
dlgOkInfo('A restart might be necessary so that DCD caches a different version'
|
begin
|
||||||
+ 'of the runtime and the standard library.');
|
if not DCDWrapper.launchedByCe then
|
||||||
|
dlgOkInfo('Coedit and DCD must be restarted manually in order to cache'
|
||||||
|
+ ' the right runtime and the standard library versions.')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
DCDWrapper.relaunch;
|
||||||
|
updateDCD;
|
||||||
|
LibMan.updateDCD;
|
||||||
|
if assigned(fProj) then
|
||||||
|
fProj.activate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
fPaths.modified:=false;
|
fPaths.modified:=false;
|
||||||
fPaths.wouldNeedRestart:=false;
|
fPaths.wouldNeedRestart:=false;
|
||||||
end;
|
end;
|
||||||
|
@ -496,6 +539,19 @@ end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION Compilers paths things ------------------------------------------------}
|
{$REGION Compilers paths things ------------------------------------------------}
|
||||||
|
procedure TForm1.updateDCD;
|
||||||
|
var
|
||||||
|
imprt: TStringList;
|
||||||
|
begin
|
||||||
|
imprt := TStringList.Create;
|
||||||
|
try
|
||||||
|
getCompilerImports(fPaths.defaultCompiler, imprt);
|
||||||
|
DcdWrapper.addImportFolders(imprt);
|
||||||
|
finally
|
||||||
|
imprt.free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TForm1.dataToGui;
|
procedure TForm1.dataToGui;
|
||||||
begin
|
begin
|
||||||
with fPaths do
|
with fPaths do
|
||||||
|
|
|
@ -41,6 +41,7 @@ type
|
||||||
procedure updateServerlistening;
|
procedure updateServerlistening;
|
||||||
procedure writeSourceToInput; inline;
|
procedure writeSourceToInput; inline;
|
||||||
function checkDcdSocket: boolean;
|
function checkDcdSocket: boolean;
|
||||||
|
function getIfLaunched: boolean;
|
||||||
//
|
//
|
||||||
procedure projNew(project: ICECommonProject);
|
procedure projNew(project: ICECommonProject);
|
||||||
procedure projChanged(project: ICECommonProject);
|
procedure projChanged(project: ICECommonProject);
|
||||||
|
@ -59,6 +60,8 @@ type
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
//
|
//
|
||||||
|
class procedure relaunch; static;
|
||||||
|
//
|
||||||
procedure addImportFolders(const folders: TStrings);
|
procedure addImportFolders(const folders: TStrings);
|
||||||
procedure addImportFolder(const folder: string);
|
procedure addImportFolder(const folder: string);
|
||||||
procedure getComplAtCursor(list: TStringList);
|
procedure getComplAtCursor(list: TStringList);
|
||||||
|
@ -68,6 +71,7 @@ type
|
||||||
procedure getLocalSymbolUsageFromCursor(var locs: TIntOpenArray);
|
procedure getLocalSymbolUsageFromCursor(var locs: TIntOpenArray);
|
||||||
//
|
//
|
||||||
property available: boolean read fAvailable;
|
property available: boolean read fAvailable;
|
||||||
|
property launchedByCe: boolean read getIfLaunched;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function DCDWrapper: TCEDcdWrapper;
|
function DCDWrapper: TCEDcdWrapper;
|
||||||
|
@ -105,7 +109,8 @@ begin
|
||||||
fClient.ShowWindow := swoHIDE;
|
fClient.ShowWindow := swoHIDE;
|
||||||
//
|
//
|
||||||
fServerWasRunning := AppIsRunning((serverName));
|
fServerWasRunning := AppIsRunning((serverName));
|
||||||
if not fServerWasRunning then begin
|
if not fServerWasRunning then
|
||||||
|
begin
|
||||||
fServer := TProcess.Create(self);
|
fServer := TProcess.Create(self);
|
||||||
fServer.Executable := exeFullName(serverName);
|
fServer.Executable := exeFullName(serverName);
|
||||||
fServer.Options := [{$IFDEF WINDOWS} poNewConsole{$ENDIF}];
|
fServer.Options := [{$IFDEF WINDOWS} poNewConsole{$ENDIF}];
|
||||||
|
@ -133,6 +138,17 @@ begin
|
||||||
EntitiesConnector.addObserver(self);
|
EntitiesConnector.addObserver(self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class procedure TCEDcdWrapper.relaunch;
|
||||||
|
begin
|
||||||
|
fDcdWrapper.Free;
|
||||||
|
fDcdWrapper := TCEDcdWrapper.create(nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCEDcdWrapper.getIfLaunched: boolean;
|
||||||
|
begin
|
||||||
|
result := fServer.isNotNil;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCEDcdWrapper.updateServerlistening;
|
procedure TCEDcdWrapper.updateServerlistening;
|
||||||
begin
|
begin
|
||||||
fServerListening := AppIsRunning((serverName));
|
fServerListening := AppIsRunning((serverName));
|
||||||
|
@ -159,6 +175,7 @@ begin
|
||||||
i +=1;
|
i +=1;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
fServer.Terminate(0);
|
||||||
fServer.Free;
|
fServer.Free;
|
||||||
end;
|
end;
|
||||||
fClient.Free;
|
fClient.Free;
|
||||||
|
@ -320,7 +337,8 @@ begin
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
fClient.Parameters.Add('--shutdown');
|
fClient.Parameters.Add('--shutdown');
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
sleep(500);
|
while fServer.Running or fClient.Running do
|
||||||
|
sleep(50);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEDcdWrapper.waitClient;
|
procedure TCEDcdWrapper.waitClient;
|
||||||
|
|
Loading…
Reference in New Issue