From c5316da8aaea3667d45f383eff151dcc2cde8699 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Sun, 23 Sep 2018 13:37:45 +1000 Subject: [PATCH] [Developer] Refactor TkpsProjectFile to remove actions from base data class into TkpsProjectFileAction --- windows/src/developer/TIKE/Tike.dpr | 3 +- windows/src/developer/TIKE/Tike.dproj | 1 + ...eveloper.System.Project.kpsProjectFile.pas | 108 +-------------- ...er.System.Project.kpsProjectFileAction.pas | 130 ++++++++++++++++++ ....Developer.UI.Project.kpsProjectFileUI.pas | 12 +- .../src/developer/kmcomp/kccompileproject.pas | 17 +-- windows/src/developer/kmcomp/kmcomp.dpr | 4 +- windows/src/developer/kmcomp/kmcomp.dproj | 2 + 8 files changed, 149 insertions(+), 128 deletions(-) create mode 100644 windows/src/developer/TIKE/project/Keyman.Developer.System.Project.kpsProjectFileAction.pas diff --git a/windows/src/developer/TIKE/Tike.dpr b/windows/src/developer/TIKE/Tike.dpr index 74f2525e67..62f0ea5f71 100644 --- a/windows/src/developer/TIKE/Tike.dpr +++ b/windows/src/developer/TIKE/Tike.dpr @@ -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} diff --git a/windows/src/developer/TIKE/Tike.dproj b/windows/src/developer/TIKE/Tike.dproj index 749a484457..65854aceb4 100644 --- a/windows/src/developer/TIKE/Tike.dproj +++ b/windows/src/developer/TIKE/Tike.dproj @@ -510,6 +510,7 @@ + Cfg_2 diff --git a/windows/src/developer/TIKE/project/Keyman.Developer.System.Project.kpsProjectFile.pas b/windows/src/developer/TIKE/project/Keyman.Developer.System.Project.kpsProjectFile.pas index ec114699b5..580ad84263 100644 --- a/windows/src/developer/TIKE/project/Keyman.Developer.System.Project.kpsProjectFile.pas +++ b/windows/src/developer/TIKE/project/Keyman.Developer.System.Project.kpsProjectFile.pas @@ -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. diff --git a/windows/src/developer/TIKE/project/Keyman.Developer.System.Project.kpsProjectFileAction.pas b/windows/src/developer/TIKE/project/Keyman.Developer.System.Project.kpsProjectFileAction.pas new file mode 100644 index 0000000000..3b4603127f --- /dev/null +++ b/windows/src/developer/TIKE/project/Keyman.Developer.System.Project.kpsProjectFileAction.pas @@ -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. diff --git a/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.kpsProjectFileUI.pas b/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.kpsProjectFileUI.pas index 309c5f5061..49064d1dcf 100644 --- a/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.kpsProjectFileUI.pas +++ b/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.kpsProjectFileUI.pas @@ -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. diff --git a/windows/src/developer/kmcomp/kccompileproject.pas b/windows/src/developer/kmcomp/kccompileproject.pas index 057d22eba4..0b8a506d1a 100644 --- a/windows/src/developer/kmcomp/kccompileproject.pas +++ b/windows/src/developer/kmcomp/kccompileproject.pas @@ -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; diff --git a/windows/src/developer/kmcomp/kmcomp.dpr b/windows/src/developer/kmcomp/kmcomp.dpr index 933416defb..7961ced7a7 100644 --- a/windows/src/developer/kmcomp/kmcomp.dpr +++ b/windows/src/developer/kmcomp/kmcomp.dpr @@ -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} diff --git a/windows/src/developer/kmcomp/kmcomp.dproj b/windows/src/developer/kmcomp/kmcomp.dproj index 7a71db621a..df5c58eaee 100644 --- a/windows/src/developer/kmcomp/kmcomp.dproj +++ b/windows/src/developer/kmcomp/kmcomp.dproj @@ -207,6 +207,8 @@ + + Cfg_2 Base