mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-02 00:03:46 +02:00
353 lines
9.5 KiB
ObjectPascal
353 lines
9.5 KiB
ObjectPascal
unit pjsprojectoptions;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils,
|
|
// LCL
|
|
StdCtrls, Spin,
|
|
// LazUtils
|
|
LazLoggerBase,
|
|
// IdeIntf
|
|
LazIDEIntf, ProjectIntf, CompOptsIntf, IDEOptionsIntf, IDEOptEditorIntf;
|
|
|
|
type
|
|
|
|
{ TPas2JSProjectOptionsFrame }
|
|
|
|
TPas2JSProjectOptionsFrame = class(TAbstractIDEOptionsEditor)
|
|
BResetRunCommand: TButton;
|
|
BResetCompileCommand: TButton;
|
|
CBRunOnReady: TCheckBox;
|
|
CBServerURL: TComboBox;
|
|
CBUseBrowserConsole: TCheckBox;
|
|
CBUseHTTPServer: TCheckBox;
|
|
CBWebProject: TCheckBox;
|
|
CBHTMLFile: TComboBox;
|
|
CBMaintainHTMLFile: TCheckBox;
|
|
LCBProjectHTMLFile: TLabel;
|
|
RBStartServerAt: TRadioButton;
|
|
RBUseURL: TRadioButton;
|
|
SEPort: TSpinEdit;
|
|
procedure BResetCompileCommandClick(Sender: TObject);
|
|
procedure BResetRunCommandClick(Sender: TObject);
|
|
procedure CBMaintainHTMLFileChange(Sender: TObject);
|
|
procedure CBUseHTTPServerChange(Sender: TObject);
|
|
procedure CBWebProjectChange(Sender: TObject);
|
|
procedure RBStartServerAtChange(Sender: TObject);
|
|
procedure RBUseURLChange(Sender: TObject);
|
|
private
|
|
FDialog: TAbstractOptionsEditorDialog;
|
|
procedure CheckAllControls(aEnabled: Boolean);
|
|
procedure CheckHTMLOptions(aEnabled: Boolean);
|
|
procedure CheckServerOptions(aEnabled: Boolean);
|
|
function FillFilesCombo(PRJ: TLazProject): Integer;
|
|
procedure ToggleCB(CB: TCheckBox; aEnabled: Boolean);
|
|
|
|
public
|
|
function GetTitle: string; override;
|
|
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
|
|
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
|
|
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
|
|
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
|
|
end;
|
|
|
|
Procedure SetDefaultWebRunParams(RunParams : TAbstractRunParamsOptionsMode);
|
|
Procedure SetDefaultNodeRunParams(RunParams : TAbstractRunParamsOptionsMode);
|
|
Procedure SetDefaultWebCompileOptions(CompOpts: TLazCompilerOptions);
|
|
Procedure SetDefaultNodeJSCompileOptions(CompOpts: TLazCompilerOptions);
|
|
|
|
implementation
|
|
|
|
uses pjsdsgnoptions, pjscontroller;
|
|
|
|
Procedure ResetRunParams(RunParams : TAbstractRunParamsOptionsMode);
|
|
|
|
begin
|
|
RunParams.HostApplicationFilename:='';
|
|
RunParams.CmdLineParams:='';
|
|
RunParams.UseLaunchingApplication:=True;
|
|
end;
|
|
|
|
Procedure SetDefaultWebRunParams(RunParams : TAbstractRunParamsOptionsMode);
|
|
|
|
begin
|
|
ResetRunParams(RunParams);
|
|
RunParams.LaunchingApplicationPathPlusParams:='$(Pas2JSBrowser) $(Pas2JSProjectURL)';
|
|
end;
|
|
|
|
Procedure SetDefaultNodeRunParams(RunParams : TAbstractRunParamsOptionsMode);
|
|
|
|
begin
|
|
ResetRunParams(RunParams);
|
|
RunParams.LaunchingApplicationPathPlusParams:='$(Pas2JSNodeJS) "$MakeDir($(ProjPath))$NameOnly($(ProjFile)).js"';
|
|
end;
|
|
|
|
Procedure SetPasJSCompileOptions(CompOpts: TLazCompilerOptions;
|
|
TargetOS, CustomOpts : String);
|
|
|
|
Var
|
|
Compiler : String;
|
|
|
|
begin
|
|
DebugLn(['SetPasJSCompileOptions START']);
|
|
CompOpts.UnitOutputDirectory:='js';
|
|
|
|
CompOpts.TargetFileExt:='.js';
|
|
CompOpts.TargetOS:=TargetOS;
|
|
|
|
CompOpts.AllowLabel:=false;
|
|
CompOpts.UseAnsiStrings:=false;
|
|
|
|
CompOpts.IOChecks:=false;
|
|
CompOpts.StackChecks:=false;
|
|
CompOpts.SmartLinkUnit:=false;
|
|
|
|
CompOpts.GenerateDebugInfo:=false;
|
|
CompOpts.DebugInfoType:=dsAuto;
|
|
CompOpts.UseLineInfoUnit:=false;
|
|
CompOpts.UseHeaptrc:=false;
|
|
CompOpts.Win32GraphicApp:=false;
|
|
|
|
CompOpts.WriteFPCLogo:=true;
|
|
CompOpts.CustomOptions:=CustomOpts;
|
|
|
|
Compiler:='$(pas2js)';
|
|
CompOpts.CompilerPath:=Compiler;
|
|
debugln(['Hint: (lazarus) [pjsprojectoptions.SetPasJSCompileOptions] Compiler=',CompOpts.CompilerPath,' TargetOS=',CompOpts.TargetOS,' Custom="',CompOpts.CustomOptions,'"']);
|
|
end;
|
|
|
|
Procedure SetDefaultWebCompileOptions(CompOpts: TLazCompilerOptions);
|
|
|
|
begin
|
|
SetPasJSCompileOptions(CompOpts,'browser','-Jeutf-8 -Jirtl.js -Jc -Jminclude');
|
|
end;
|
|
|
|
Procedure SetDefaultNodeJSCompileOptions(CompOpts: TLazCompilerOptions);
|
|
|
|
begin
|
|
SetPasJSCompileOptions(CompOpts,'nodejs','-Jeutf-8 -Jminclude');
|
|
end;
|
|
|
|
{$R *.lfm}
|
|
|
|
{ TPas2JSProjectOptionsFrame }
|
|
|
|
function TPas2JSProjectOptionsFrame.GetTitle: string;
|
|
begin
|
|
Result:='Web Project (pas2js)'
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
begin
|
|
// Do nothing
|
|
FDialog:=ADialog;
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.CBWebProjectChange(Sender: TObject);
|
|
begin
|
|
CheckAllControls(CBWebProject.Checked);
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.RBStartServerAtChange(Sender: TObject);
|
|
begin
|
|
SEPort.Enabled:=RBStartServerAt.Enabled and RBStartServerAt.Checked;;
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.RBUseURLChange(Sender: TObject);
|
|
begin
|
|
CBServerURL.Enabled:=RBUseURL.Enabled and RBUseURL.Checked;
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.CBMaintainHTMLFileChange(Sender: TObject);
|
|
begin
|
|
CheckHTMLOptions(CBMaintainHTMLFile.Checked);
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.BResetRunCommandClick(Sender: TObject);
|
|
|
|
Var
|
|
Prj : TLazProject;
|
|
|
|
begin
|
|
PRJ:=LazarusIDE.ActiveProject;
|
|
SetDefaultWebRunParams(Prj.RunParameters.GetOrCreate('Default'));
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.BResetCompileCommandClick(Sender: TObject);
|
|
|
|
Var
|
|
Prj : TLazProject;
|
|
|
|
begin
|
|
PRJ:=LazarusIDE.ActiveProject;
|
|
SetDefaultWebCompileOptions(PRJ.LazBuildModes.BuildModes[0].LazCompilerOptions);
|
|
SetDefaultWebCompileOptions(PRJ.LazCompilerOptions);
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.CBUseHTTPServerChange(Sender: TObject);
|
|
begin
|
|
CheckServerOptions(CBUseHTTPServer.Checked);
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.ToggleCB(CB : TCheckBox; aEnabled: Boolean);
|
|
|
|
begin
|
|
With CB do
|
|
begin
|
|
Enabled:=aEnabled;
|
|
if not AEnabled then
|
|
Checked:=False;
|
|
end;
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.CheckHTMLOptions(aEnabled : Boolean);
|
|
|
|
begin
|
|
ToggleCB(CBUseBrowserConsole,aEnabled);
|
|
ToggleCB(CBRunOnReady,aEnabled);
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.CheckServerOptions(aEnabled : Boolean);
|
|
|
|
begin
|
|
RBStartServerAt.Enabled:=aEnabled;
|
|
RBUseURL.Enabled:=aEnabled;
|
|
SEPort.Enabled:=aEnabled and RBStartServerAt.Checked;
|
|
CBServerURL.Enabled:=aEnabled and RBUseURL.Checked;
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.CheckAllControls(aEnabled : Boolean);
|
|
|
|
begin
|
|
BResetRunCommand.enabled:=aEnabled;
|
|
BResetCompileCommand.Enabled:=aEnabled;
|
|
CBHTMLFile.Enabled:=aEnabled;
|
|
ToggleCB(CBMaintainHTMLFile,aEnabled);
|
|
CheckHTMLOptions(CBMaintainHTMLFile.Checked);
|
|
ToggleCB(CBUseHTTPServer,aEnabled);
|
|
CheckServerOptions(CBUseHTTPServer.Checked)
|
|
end;
|
|
|
|
|
|
// Fill combo with HTM(L) files.
|
|
// Return index of file that has IsProjectHTMLFile set.
|
|
Function TPas2JSProjectOptionsFrame.FillFilesCombo(PRJ : TLazProject) : Integer;
|
|
|
|
Var
|
|
I : integer;
|
|
HPF,PF : TLazProjectFile;
|
|
Ext : String;
|
|
L : TStringList;
|
|
|
|
begin
|
|
Result:=-1;
|
|
HPF:=Nil;
|
|
L:=TstringList.Create;
|
|
try
|
|
For I:=0 to PRJ.FileCount-1 do
|
|
begin
|
|
PF:=PRJ.Files[i];
|
|
Ext:=LowerCase(ExtractFileExt(PF.Filename));
|
|
if Pos(Ext,'.html')>0 then
|
|
begin
|
|
L.AddObject(PF.FileName,PF);
|
|
If PF.CustomData[PJSIsProjectHTMLFile]='1' then
|
|
HPF:=PF;
|
|
end;
|
|
end;
|
|
L.Sort;
|
|
CBHTMLFile.Items:=L;;
|
|
finally
|
|
L.Free;
|
|
end;
|
|
if (HPF<>Nil) then
|
|
Result:=CBHTMLFile.Items.IndexOfObject(HPF);
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
|
|
Var
|
|
Prj : TLazProject;
|
|
HFN : String;
|
|
HTMLIdx : Integer;
|
|
Port : Word;
|
|
URL : String;
|
|
|
|
begin
|
|
if AOptions=nil then ;
|
|
PRJ:=LazarusIDE.ActiveProject;
|
|
HTMLIdx:=FillFilesCombo(PRJ);
|
|
CBWebProject.Checked:=PRJ.CustomData[PJSProjectWebBrowser]='1';
|
|
if HTMLIdx=-1 then
|
|
begin
|
|
HFN:=PRJ.CustomData[PJSProjectHTMLFile];
|
|
HTMLIdx:=CBHTMLFile.Items.IndexOf(HFN);
|
|
end;
|
|
CBHTMLFile.ItemIndex:=HTMLIdx;
|
|
CBMaintainHTMLFile.Checked:=PRJ.CustomData[PJSProjectMaintainHTML]='1';
|
|
CBUseBrowserConsole.Checked:=PRJ.CustomData[PJSProjectWebBrowser]='1';
|
|
CBRunOnReady.Checked:=PRJ.CustomData[PJSProjectRunAtReady]='1';
|
|
Port:=StrToIntDef(PRJ.CustomData[PJSProjectPort],0);
|
|
URL:=PRJ.CustomData[PJSProjectURL];
|
|
CBUseHTTPServer.Checked:=(Port>0) or (URL<>'');
|
|
SEPort.Value:=Port;
|
|
CBServerURL.AddHistoryItem(URL,10,True,False);
|
|
end;
|
|
|
|
procedure TPas2JSProjectOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
|
|
Var
|
|
Prj : TLazProject;
|
|
|
|
Procedure DoBool(N : String; AValue : Boolean);
|
|
|
|
begin
|
|
if AValue then
|
|
PRJ.CustomData[N]:='1';
|
|
end;
|
|
|
|
begin
|
|
if AOptions=nil then ;
|
|
PRJ:=LazarusIDE.ActiveProject;
|
|
// Clear everything
|
|
With PRJ.CustomData do
|
|
begin
|
|
Remove(PJSProjectWebBrowser);
|
|
Remove(PJSProjectHTMLFile);
|
|
Remove(PJSProjectMaintainHTML);
|
|
Remove(PJSProjectWebBrowser);
|
|
Remove(PJSProjectRunAtReady);
|
|
Remove(PJSProjectPort);
|
|
Remove(PJSProjectURL);
|
|
end;
|
|
// Set what is needed
|
|
if CBWebProject.Checked then
|
|
begin
|
|
PRJ.CustomData[PJSProjectWebBrowser]:='1';
|
|
With CBHTMLFile do
|
|
if ItemIndex<>-1 then
|
|
(Items.Objects[ItemIndex] as TLazProjectFile).CustomData[PJSIsProjectHTMLFile]:='1';
|
|
DoBool(PJSProjectMaintainHTML,CBMaintainHTMLFile.Checked);
|
|
DoBool(PJSProjectWebBrowser,CBUseBrowserConsole.Checked);
|
|
DoBool(PJSProjectRunAtReady,CBRunOnReady.Checked);
|
|
if CBUseHTTPServer.Checked then
|
|
begin
|
|
if RBStartServerAt.Checked and (SEPort.Value>0) then
|
|
PRJ.CustomData[PJSProjectPort]:=IntToStr(SEPort.Value);
|
|
if RBUseURL.Checked and (CBServerURL.Text<>'') then
|
|
PRJ.CustomData[PJSProjectURL]:=CBServerURL.Text;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
class function TPas2JSProjectOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result:=TAbstractIDEProjectOptions;
|
|
end;
|
|
|
|
end.
|
|
|