mirror of
https://github.com/keymanapp/keyman.git
synced 2026-09-16 04:37:41 +00:00
190 lines
4.8 KiB
ObjectPascal
190 lines
4.8 KiB
ObjectPascal
(*
|
|
Name: Keyman.Developer.UI.Project.kmnProjectFileUI
|
|
Copyright: Copyright (C) 2003-2019 SIL International.
|
|
Documentation:
|
|
Description:
|
|
Create Date: 22 August 2019
|
|
|
|
Modified Date: 22 August 2019
|
|
Authors: mcdurdin
|
|
Related Files:
|
|
Dependencies:
|
|
|
|
Bugs:
|
|
Todo:
|
|
Notes:
|
|
History:
|
|
*)
|
|
unit Keyman.Developer.UI.Project.modelTsProjectFileUI;
|
|
|
|
interface
|
|
|
|
uses
|
|
System.UITypes,
|
|
Menus,
|
|
Keyman.Developer.UI.Project.ProjectFilesUI,
|
|
Keyman.Developer.UI.Project.ProjectFileUI,
|
|
Keyman.Developer.UI.Project.ProjectUIFileType,
|
|
UfrmMessages,
|
|
Keyman.Developer.System.Project.modelTsProjectFile,
|
|
Keyman.Developer.System.Project.modelTsProjectFileAction;
|
|
|
|
type
|
|
TmodelTsProjectFileUI = class(TOpenableProjectFileUI)
|
|
private
|
|
function GetProjectFile: TmodelTsProjectFileAction;
|
|
|
|
function GetDebug: Boolean;
|
|
procedure SetDebug(const Value: Boolean);
|
|
function CompileModel(FSilent: Boolean): Boolean;
|
|
function TestKeymanWeb(FSilent: Boolean): Boolean;
|
|
function TestModelState(FCompiledName: string; FSilent: Boolean): Boolean;
|
|
public
|
|
function DoAction(action: TProjectFileAction; FSilent: Boolean): Boolean; override;
|
|
property Debug: Boolean read GetDebug write SetDebug;
|
|
property ProjectFile: TmodelTsProjectFileAction read GetProjectFile;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Winapi.Windows,
|
|
System.SysUtils,
|
|
Vcl.Dialogs,
|
|
Vcl.Graphics,
|
|
Vcl.Controls,
|
|
|
|
dmActionsMain,
|
|
KeyboardFonts,
|
|
UmodWebHttpServer,
|
|
UfrmMain,
|
|
UfrmMDIEditor,
|
|
Keyman.Developer.System.ServerAPI,
|
|
Keyman.Developer.UI.UfrmModelEditor,
|
|
KeymanDeveloperUtils,
|
|
KeymanDeveloperOptions,
|
|
System.Classes,
|
|
System.Variants,
|
|
utilsystem;
|
|
|
|
function TmodelTsProjectFileUI.DoAction(action: TProjectFileAction; FSilent: Boolean): Boolean;
|
|
begin
|
|
case action of
|
|
pfaCompile: Result := CompileModel(FSilent);
|
|
pfaClean: Result := ProjectFile.Clean;
|
|
pfaTestKeymanWeb: Result := TestKeymanWeb(FSilent);
|
|
else
|
|
Result := False;
|
|
end;
|
|
end;
|
|
|
|
function TmodelTsProjectFileUI.CompileModel(FSilent: Boolean): Boolean;
|
|
begin
|
|
Result := False;
|
|
|
|
if ProjectFile.Modified then
|
|
begin
|
|
if not FSilent then
|
|
begin
|
|
if MessageDlg('The lexical model file has been modified. You must save before compiling.'+#13#10+'Save the lexical model and continue?',
|
|
mtConfirmation, mbOkCancel, 0) = mrCancel then Exit;
|
|
if not modActionsMain.actFileSave.Execute then Exit;
|
|
end
|
|
else
|
|
Exit;
|
|
end;
|
|
|
|
if not FSilent then
|
|
frmMessages.DoShowForm;
|
|
|
|
Result := ProjectFile.CompileModel;
|
|
|
|
|
|
if Result and TServerDebugAPI.IsModelRegistered(ProjectFile.TargetFileName) then
|
|
TestKeymanWeb(True);
|
|
end;
|
|
|
|
function TmodelTsProjectFileUI.GetDebug: Boolean;
|
|
begin
|
|
Result := ProjectFile.Debug;
|
|
end;
|
|
|
|
function TmodelTsProjectFileUI.GetProjectFile: TmodelTsProjectFileAction;
|
|
begin
|
|
Result := FOwner as TmodelTsProjectFileAction;
|
|
end;
|
|
|
|
procedure TmodelTsProjectFileUI.SetDebug(const Value: Boolean);
|
|
begin
|
|
ProjectFile.Debug := Value;
|
|
end;
|
|
|
|
function TmodelTsProjectFileUI.TestKeymanWeb(FSilent: Boolean): Boolean;
|
|
var
|
|
FCompiledName: string;
|
|
editor: TfrmTikeEditor;
|
|
wizard: TfrmModelEditor;
|
|
begin
|
|
editor := frmKeymanDeveloper.FindEditorByFileName(ProjectFile.FileName); // I4021
|
|
if not Assigned(editor) or not (editor is TfrmModelEditor) then
|
|
Exit(False);
|
|
wizard := editor as TfrmModelEditor;
|
|
|
|
FCompiledName := ProjectFile.TargetFilename;
|
|
if not TestModelState(FCompiledName, FSilent) then
|
|
Exit(False);
|
|
|
|
if FileExists(ProjectFile.TestKeyboard) then
|
|
TServerDebugAPI.RegisterKeyboard(ProjectFile.TestKeyboard, '1.0', '', '');
|
|
TServerDebugAPI.RegisterModel(FCompiledName);
|
|
|
|
wizard.NotifyStartedWebDebug; // I4021
|
|
|
|
Result := True;
|
|
end;
|
|
|
|
function TmodelTsProjectFileUI.TestModelState(FCompiledName: string;
|
|
FSilent: Boolean): Boolean;
|
|
var
|
|
ftts, ftjs: TDateTime;
|
|
begin
|
|
Result := False;
|
|
|
|
if not FileExists(FCompiledName) then
|
|
if FSilent then
|
|
begin
|
|
if not CompileModel(FSilent) then Exit;
|
|
end
|
|
else
|
|
case MessageDlg('You need to compile the model before you can continue. Compile now?',
|
|
mtConfirmation, mbOkCancel, 0) of
|
|
mrOk: if not CompileModel(FSilent) then Exit;
|
|
mrCancel: Exit;
|
|
end;
|
|
|
|
FileAge(ProjectFile.FileName, ftts);
|
|
FileAge(FCompiledName, ftjs);
|
|
|
|
if ProjectFile.Modified or (ftts > ftjs) then
|
|
if FSilent then
|
|
begin
|
|
if not CompileModel(FSilent) then Exit;
|
|
end
|
|
else
|
|
case MessageDlg('The source file has changed. Recompile before continuing?',
|
|
mtConfirmation, mbYesNoCancel, 0) of
|
|
mrYes: if not CompileModel(FSilent) then Exit;
|
|
mrNo: ;
|
|
mrCancel: Exit;
|
|
end;
|
|
|
|
Result := True;
|
|
end;
|
|
|
|
initialization
|
|
RegisterProjectFileUIType(TmodelTsProjectFileAction, TmodelTsProjectFileUI);
|
|
end.
|
|
|
|
|
|
|
|
|