lazarus/components/pas2js/pjsprojectoptions.pp
mattias fc9573c72e pas2js: less hints
git-svn-id: trunk@60113 -
2019-01-19 17:38:16 +00:00

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.