[Developer] Refactor TkpsProjectFile to remove actions from base data class into TkpsProjectFileAction

This commit is contained in:
Marc Durdin 2018-09-23 13:37:45 +10:00
parent b4773ca324
commit c5316da8aa
8 changed files with 149 additions and 128 deletions

View file

@ -269,7 +269,8 @@ uses
Keyman.Developer.System.HttpServer.AppSource in 'http\Keyman.Developer.System.HttpServer.AppSource.pas',
Keyman.UI.FontUtils in '..\..\global\delphi\general\Keyman.UI.FontUtils.pas',
Keyman.Developer.System.TouchLayoutToVisualKeyboardConverter in '..\kmconvert\Keyman.Developer.System.TouchLayoutToVisualKeyboardConverter.pas',
Keyman.Developer.System.Project.kmnProjectFileAction in 'project\Keyman.Developer.System.Project.kmnProjectFileAction.pas';
Keyman.Developer.System.Project.kmnProjectFileAction in 'project\Keyman.Developer.System.Project.kmnProjectFileAction.pas',
Keyman.Developer.System.Project.kpsProjectFileAction in 'project\Keyman.Developer.System.Project.kpsProjectFileAction.pas';
{$R *.RES}
{$R ICONS.RES}

View file

@ -510,6 +510,7 @@
<DCCReference Include="..\..\global\delphi\general\Keyman.UI.FontUtils.pas"/>
<DCCReference Include="..\kmconvert\Keyman.Developer.System.TouchLayoutToVisualKeyboardConverter.pas"/>
<DCCReference Include="project\Keyman.Developer.System.Project.kmnProjectFileAction.pas"/>
<DCCReference Include="project\Keyman.Developer.System.Project.kpsProjectFileAction.pas"/>
<None Include="Profiling\AQtimeModule1.aqt"/>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>

View file

@ -42,7 +42,6 @@ uses
Xml.XMLIntf,
KPSFile,
Keyman.Developer.System.Project.ProjectLog,
Keyman.Developer.System.Project.ProjectFile,
Keyman.Developer.System.Project.ProjectFiles,
Keyman.Developer.System.Project.ProjectFileType;
@ -58,7 +57,6 @@ type
function GetOutputFilename: string;
function GetTargetFilename: string;
function GetTargetInstallerFilename: string;
procedure SelfMessage(Sender: TObject; msg: string; State: TProjectLogState); // I4706
protected
function GetRelativeOrder: Integer; override;
procedure GetFileParameters; override;
@ -66,10 +64,6 @@ type
procedure Load(node: IXMLNode; LoadState: Boolean); override; // I4698
procedure Save(node: IXMLNode; SaveState: Boolean); override; // I4698
function CompilePackageInstaller(APack: TKPSFile; FSilent: Boolean): Boolean;
function CompilePackage(APack: TKPSFile; FSilent: Boolean): Boolean;
function Clean: Boolean;
property WarnAsError: Boolean read FWarnAsError write FWarnAsError; // I4706
property OutputFilename: string read GetOutputFilename;
@ -84,100 +78,14 @@ implementation
uses
System.Variants,
Winapi.ShellApi,
Winapi.Windows,
Keyman.Developer.System.Project.Project,
CompilePackage,
CompilePackageInstaller,
PackageInfo,
utilexecute;
PackageInfo;
{-------------------------------------------------------------------------------
- TkmnProjectFile -
-------------------------------------------------------------------------------}
function TkpsProjectFile.CompilePackage(APack: TKPSFile; FSilent: Boolean): Boolean;
var
pack: TKPSFile;
begin
HasCompileWarning := False; // I4706
if APack = nil then
begin
pack := TKPSFile.Create;
pack.FileName := FileName;
pack.LoadXML;
end
else
pack := APack;
try
try
Result := DoCompilePackage(pack, SelfMessage, FSilent, TargetFilename);
if HasCompileWarning and (WarnAsError or OwnerProject.Options.CompilerWarningsAsErrors) then // I4706
Result := False;
if Result then
Log(plsInfo, '''' + FileName + ''' compiled successfully to '''+TargetFileName+'''.')
else
begin
if FileExists(TargetFilename) then
System.SysUtils.DeleteFile(TargetFilename);
Log(plsError, '''' + FileName + ''' was not compiled successfully.');
end;
except
on E:Exception do
begin
Log(plsError, E.Message);
Result := False;
end;
end;
finally
if APack = nil then
pack.Free;
end;
end;
function TkpsProjectFile.CompilePackageInstaller(APack: TKPSFile; FSilent: Boolean): Boolean;
var
pack: TKPSFile;
begin
HasCompileWarning := False; // I4706
if APack = nil then
begin
pack := TKPSFile.Create;
pack.FileName := FileName;
pack.LoadXML;
end
else
pack := APack;
try
try
Result := DoCompilePackageInstaller(pack, SelfMessage, FSilent, '', TargetInstallerFilename, False);
if HasCompileWarning and (WarnAsError or OwnerProject.Options.CompilerWarningsAsErrors) then // I4706
Result := False;
if Result
then Log(plsInfo, '''' + FileName + ''' compiled successfully.')
else Log(plsError, '''' + FileName + ''' was not compiled successfully.');
except
on E:Exception do
begin
Log(plsError, E.Message);
Result := False;
end;
end;
finally
if APack = nil then
pack.Free;
end;
end;
procedure TkpsProjectFile.GetFileParameters;
var
i: Integer;
@ -262,20 +170,6 @@ begin
if FHeader_Version <> '' then node.AddChild('Version').NodeValue := FHeader_Version;
end;
procedure TkpsProjectFile.SelfMessage(Sender: TObject; msg: string; State: TProjectLogState); // I4706
begin
if State = plsWarning then
HasCompileWarning := True;
Log(State, msg);
end;
function TkpsProjectFile.Clean: Boolean;
begin
CleanFile(OutputFileName);
CleanFile(TargetInstallerFilename); // I4737
Result := True;
end;
initialization
RegisterProjectFileType('.kps', TkpsProjectFile);
end.

View file

@ -0,0 +1,130 @@
unit Keyman.Developer.System.Project.kpsProjectFileAction;
interface
uses
System.SysUtils,
Keyman.Developer.System.Project.kpsProjectFile,
Keyman.Developer.System.Project.ProjectFile,
Keyman.Developer.System.Project.ProjectFiles,
Keyman.Developer.System.Project.ProjectFileType,
Keyman.Developer.System.Project.ProjectLog,
KPSFile;
type
TkpsProjectFileAction = class(TkpsProjectFile)
private
procedure SelfMessage(Sender: TObject; msg: string; State: TProjectLogState); // I4706
public
function CompilePackageInstaller(APack: TKPSFile; FSilent: Boolean): Boolean;
function CompilePackage(APack: TKPSFile; FSilent: Boolean): Boolean;
function Clean: Boolean;
end;
implementation
uses
CompilePackage,
CompilePackageInstaller,
PackageInfo,
utilexecute;
function TkpsProjectFileAction.CompilePackage(APack: TKPSFile; FSilent: Boolean): Boolean;
var
pack: TKPSFile;
begin
HasCompileWarning := False; // I4706
if APack = nil then
begin
pack := TKPSFile.Create;
pack.FileName := FileName;
pack.LoadXML;
end
else
pack := APack;
try
try
Result := DoCompilePackage(pack, SelfMessage, FSilent, TargetFilename);
if HasCompileWarning and (WarnAsError or OwnerProject.Options.CompilerWarningsAsErrors) then // I4706
Result := False;
if Result then
Log(plsInfo, '''' + FileName + ''' compiled successfully to '''+TargetFileName+'''.')
else
begin
if FileExists(TargetFilename) then
System.SysUtils.DeleteFile(TargetFilename);
Log(plsError, '''' + FileName + ''' was not compiled successfully.');
end;
except
on E:Exception do
begin
Log(plsError, E.Message);
Result := False;
end;
end;
finally
if APack = nil then
pack.Free;
end;
end;
function TkpsProjectFileAction.CompilePackageInstaller(APack: TKPSFile; FSilent: Boolean): Boolean;
var
pack: TKPSFile;
begin
HasCompileWarning := False; // I4706
if APack = nil then
begin
pack := TKPSFile.Create;
pack.FileName := FileName;
pack.LoadXML;
end
else
pack := APack;
try
try
Result := DoCompilePackageInstaller(pack, SelfMessage, FSilent, '', TargetInstallerFilename, False);
if HasCompileWarning and (WarnAsError or OwnerProject.Options.CompilerWarningsAsErrors) then // I4706
Result := False;
if Result
then Log(plsInfo, '''' + FileName + ''' compiled successfully.')
else Log(plsError, '''' + FileName + ''' was not compiled successfully.');
except
on E:Exception do
begin
Log(plsError, E.Message);
Result := False;
end;
end;
finally
if APack = nil then
pack.Free;
end;
end;
function TkpsProjectFileAction.Clean: Boolean;
begin
CleanFile(OutputFileName);
CleanFile(TargetInstallerFilename); // I4737
Result := True;
end;
procedure TkpsProjectFileAction.SelfMessage(Sender: TObject; msg: string; State: TProjectLogState); // I4706
begin
if State = plsWarning then
HasCompileWarning := True;
Log(State, msg);
end;
initialization
RegisterProjectFileType('.kps', TkpsProjectFileAction);
end.

View file

@ -26,7 +26,7 @@ uses
Keyman.Developer.System.Project.ProjectFile,
Keyman.Developer.UI.Project.ProjectFilesUI,
Keyman.Developer.UI.Project.ProjectFileUI,
Keyman.Developer.System.Project.kpsProjectFile;
Keyman.Developer.System.Project.kpsProjectFileAction;
type
TkpsProjectFileUI = class(TOpenableProjectFileUI)
@ -42,12 +42,12 @@ type
function CompilePackageInstaller(FSilent: Boolean): Boolean;
function GetPack: TKPSFile;
function GetProjectFile: TkpsProjectFile;
function GetProjectFile: TkpsProjectFileAction;
function TestPackageState(FCompiledName: string; FSilent: Boolean): Boolean;
public
function DoAction(action: TProjectFileAction; FSilent: Boolean): Boolean; override;
procedure BuildMenu(Menu: TPopupMenu); override;
property ProjectFile: TkpsProjectFile read GetProjectFile;
property ProjectFile: TkpsProjectFileAction read GetProjectFile;
end;
implementation
@ -129,9 +129,9 @@ begin
else Result := nil;
end;
function TkpsProjectFileUI.GetProjectFile: TkpsProjectFile;
function TkpsProjectFileUI.GetProjectFile: TkpsProjectFileAction;
begin
Result := FOwner as TkpsProjectFile;
Result := FOwner as TkpsProjectFileAction;
end;
function TkpsProjectFileUI.InstallPackage: Boolean;
@ -248,5 +248,5 @@ begin
end;
initialization
RegisterProjectFileUIType(TkpsProjectFile, TkpsProjectFileUI);
RegisterProjectFileUIType(TkpsProjectFileAction, TkpsProjectFileUI);
end.

View file

@ -29,7 +29,7 @@ uses
System.SysUtils,
Keyman.Developer.System.Project.kmnProjectFileAction,
Keyman.Developer.System.Project.kpsProjectFile,
Keyman.Developer.System.Project.kpsProjectFileAction,
Keyman.Developer.System.Project.ProjectLog,
Keyman.Developer.System.Project.ProjectFile;
@ -51,7 +51,7 @@ var
i: Integer;
Found: Boolean;
kmn: TkmnProjectFileAction;
kps: TkpsProjectFile;
kps: TkpsProjectFileAction;
function Matches(AFile: TProjectFile; AClass: TProjectFileClass): Boolean;
begin
@ -84,9 +84,9 @@ begin
end;
for i := 0 to Files.Count - 1 do
if Matches(Files[i], TkpsProjectFile) then
if Matches(Files[i], TkpsProjectFileAction) then
begin
kps := Files[i] as TkpsProjectFile;
kps := Files[i] as TkpsProjectFileAction;
kps.WarnAsError := AWarnAsError;
if AClean then
begin
@ -97,15 +97,6 @@ begin
Found := True;
end;
(* if HasKPPFile and not AClean then
for i := 0 to Files.Count - 1 do
if Matches(Files[i], TkpsProjectFile) then
begin
kps := Files[i] as TkpsProjectFile;
kps.WarnAsError := AWarnAsError;
if not kps.CompilePackageInstaller(nil, False) then Exit;
Found := True;
end;*)
finally
Free;
end;

View file

@ -104,7 +104,9 @@ uses
Keyman.System.Standards.BCP47SuppressScriptRegistry in '..\..\global\delphi\standards\Keyman.System.Standards.BCP47SuppressScriptRegistry.pas',
Keyman.System.Standards.LibPalasoAllTagsRegistry in '..\..\global\delphi\standards\Keyman.System.Standards.LibPalasoAllTagsRegistry.pas',
Keyman.System.CanonicalLanguageCodeUtils in '..\..\global\delphi\general\Keyman.System.CanonicalLanguageCodeUtils.pas',
TextFileFormat in '..\TIKE\main\TextFileFormat.pas';
TextFileFormat in '..\TIKE\main\TextFileFormat.pas',
Keyman.Developer.System.Project.kmnProjectFileAction in '..\TIKE\project\Keyman.Developer.System.Project.kmnProjectFileAction.pas',
Keyman.Developer.System.Project.kpsProjectFileAction in '..\TIKE\project\Keyman.Developer.System.Project.kpsProjectFileAction.pas';
{$R icons.RES}
{$R version.res}

View file

@ -207,6 +207,8 @@
<DCCReference Include="..\..\global\delphi\standards\Keyman.System.Standards.LibPalasoAllTagsRegistry.pas"/>
<DCCReference Include="..\..\global\delphi\general\Keyman.System.CanonicalLanguageCodeUtils.pas"/>
<DCCReference Include="..\TIKE\main\TextFileFormat.pas"/>
<DCCReference Include="..\TIKE\project\Keyman.Developer.System.Project.kmnProjectFileAction.pas"/>
<DCCReference Include="..\TIKE\project\Keyman.Developer.System.Project.kpsProjectFileAction.pas"/>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>