[Developer] Tidy up various minor issues in New Project Template

This commit is contained in:
Marc Durdin 2018-10-03 11:29:02 +10:00
parent b64e1b4839
commit a70efed098
6 changed files with 150 additions and 19 deletions

View file

@ -13,9 +13,9 @@ inherited frmNewProjectParameters: TfrmNewProjectParameters
object lblFileName: TLabel
Left = 12
Top = 275
Width = 50
Width = 64
Height = 13
Caption = '&File Name:'
Caption = '&Keyboard ID:'
FocusControl = editFileName
end
object lblPath: TLabel
@ -55,7 +55,7 @@ inherited frmNewProjectParameters: TfrmNewProjectParameters
Top = 92
Width = 37
Height = 13
Caption = '&Author:'
Caption = 'A&uthor:'
FocusControl = editAuthor
end
object lblTargets: TLabel
@ -75,11 +75,12 @@ inherited frmNewProjectParameters: TfrmNewProjectParameters
FocusControl = gridKeyboardLanguages
end
object editFileName: TEdit
Left = 64
Left = 120
Top = 272
Width = 205
Width = 149
Height = 21
TabOrder = 10
OnChange = editFileNameChange
end
object cmdBrowse: TButton
Left = 275
@ -88,13 +89,15 @@ inherited frmNewProjectParameters: TfrmNewProjectParameters
Height = 21
Caption = '&Browse...'
TabOrder = 11
OnClick = cmdBrowseClick
end
object editPath: TEdit
Left = 64
Left = 120
Top = 245
Width = 289
Width = 233
Height = 21
TabOrder = 9
OnChange = editPathChange
end
object editKeyboardName: TEdit
Left = 120
@ -111,6 +114,7 @@ inherited frmNewProjectParameters: TfrmNewProjectParameters
Height = 21
TabOrder = 1
Text = #169
OnChange = editCopyrightChange
end
object editVersion: TEdit
Left = 120
@ -119,6 +123,7 @@ inherited frmNewProjectParameters: TfrmNewProjectParameters
Height = 21
TabOrder = 2
Text = '1.0'
OnChange = editVersionChange
end
object editAuthor: TEdit
Left = 120
@ -126,6 +131,7 @@ inherited frmNewProjectParameters: TfrmNewProjectParameters
Width = 205
Height = 21
TabOrder = 3
OnChange = editAuthorChange
end
object cmdOK: TButton
Left = 463
@ -152,6 +158,7 @@ inherited frmNewProjectParameters: TfrmNewProjectParameters
Top = 116
Width = 205
Height = 97
OnClickCheck = clbTargetsClickCheck
ItemHeight = 13
TabOrder = 4
end

View file

@ -56,6 +56,13 @@ type
procedure cmdKeyboardEditLanguageClick(Sender: TObject);
procedure cmdKeyboardRemoveLanguageClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure editCopyrightChange(Sender: TObject);
procedure editVersionChange(Sender: TObject);
procedure editAuthorChange(Sender: TObject);
procedure clbTargetsClickCheck(Sender: TObject);
procedure editPathChange(Sender: TObject);
procedure editFileNameChange(Sender: TObject);
procedure cmdBrowseClick(Sender: TObject);
private
pack: TKPSFile;
FSetup: Integer; // Used temporarily for storing language list
@ -178,6 +185,33 @@ begin
FreeAndNil(pack);
end;
procedure TfrmNewProjectParameters.clbTargetsClickCheck(Sender: TObject);
begin
EnableControls;
end;
procedure TfrmNewProjectParameters.cmdBrowseClick(Sender: TObject);
var
FPathName, FFolderName, FProjectName: string;
begin
inherited;
if dlgSave.Execute then
begin
FPathName := ExtractFilePath(ExtractFileDir(dlgSave.FileName));
FFolderName := ExtractFileName(ExtractFileDir(dlgSave.FileName));
FProjectName := ChangeFileExt(ExtractFileName(dlgSave.FileName), '');
if not SameText(FFolderName, FProjectName) then
begin
if MessageDlg('The project will be saved at "'+FPathName+FFolderName+'\'+FProjectName+'\'+FProjectName+'.kpj". Continue?',
mtConfirmation, mbOkCancel, 0) = mrCancel then
Exit;
FPathName := FPathName+FFolderName;
end;
editPath.Text := ExcludeTrailingPathDelimiter(FPathName);
editFileName.Text := FProjectName;
end;
end;
procedure TfrmNewProjectParameters.cmdKeyboardAddLanguageClick(
Sender: TObject);
var
@ -257,11 +291,36 @@ begin
ModalResult := mrOk;
end;
procedure TfrmNewProjectParameters.editAuthorChange(Sender: TObject);
begin
EnableControls;
end;
procedure TfrmNewProjectParameters.editCopyrightChange(Sender: TObject);
begin
EnableControls;
end;
procedure TfrmNewProjectParameters.editFileNameChange(Sender: TObject);
begin
EnableControls;
end;
procedure TfrmNewProjectParameters.editKeyboardNameChange(Sender: TObject);
begin
inherited;
if not editFileName.Modified then
editFileName.Text := TKeyboardUtils.CleanKeyboardID(Trim(editKeyboardName.Text));
EnableControls;
end;
procedure TfrmNewProjectParameters.editPathChange(Sender: TObject);
begin
EnableControls;
end;
procedure TfrmNewProjectParameters.editVersionChange(Sender: TObject);
begin
EnableControls;
end;
procedure TfrmNewProjectParameters.EnableControls;
@ -270,7 +329,8 @@ var
begin
e := (Trim(editKeyboardName.Text) <> '') and
(Trim(editPath.Text) <> '') and
(Trim(editFileName.Text) <> '');
TKeyboardUtils.IsValidKeyboardID(Trim(editFileName.Text)) and
(GetTargets <> []);
cmdOK.Enabled := e;
e := gridKeyboardLanguages.RowCount > 1;

View file

@ -3,9 +3,13 @@ unit Keyman.Developer.System.ImportWindowsKeyboard;
interface
uses
System.SysUtils,
Keyman.Developer.System.KeyboardProjectTemplate;
type
EImportWindowsKeyboard = class(Exception);
TImportWindowsKeyboard = class
private
FBaseKeyboardID: string;
@ -36,6 +40,7 @@ type
IconFilename, TouchLayoutFilename: string);
function ConvertOSKToTouchLayout(const OSKFilename, TouchLayoutFilename: string): Boolean;
function FindBCP47TagForKLID: string; overload;
function GetProjectFilename: string;
public
function Execute: Boolean; overload;
@ -52,7 +57,7 @@ type
property BCP47Tags: string read FBCP47Tags write SetBCP47Tags;
property Author: string read FAuthor write SetAuthor;
property ProjectFilename: string read FProjectFilename;
property ProjectFilename: string read GetProjectFilename;
end;
implementation
@ -60,7 +65,6 @@ implementation
uses
System.Classes,
System.Math,
System.SysUtils,
System.Win.Registry,
Vcl.Graphics,
Winapi.Windows,
@ -73,7 +77,8 @@ uses
KeyboardParser,
kmxfileconsts,
RegistryKeys,
UKeymanTargets;
UKeymanTargets,
utilfiletypes;
{ TImportWindowsKeyboard }
@ -110,6 +115,27 @@ begin
Result := True;
end;
function TImportWindowsKeyboard.GetProjectFilename: string;
var
FTemplate: TKeyboardProjectTemplate;
begin
if FProjectFilename = '' then
begin
// Lookup the KLID in the registry and read basic details
if not LoadKLIDDetails then
raise EImportWindowsKeyboard.Create('The keyboard identified by '+FSourceKLID+' could not be found.');
FTemplate := TKeyboardProjectTemplate.Create(FDestinationPath, Format(FKeyboardIDTemplate, [FBaseKeyboardID]), KMXKeymanTargets + [ktWeb]);
try
Result := FTemplate.ProjectFilename;
finally
FTemplate.Free;
end;
end
else
Result := FProjectFIlename;
end;
procedure TImportWindowsKeyboard.SetAuthor(const Value: string);
begin
FAuthor := Value;

View file

@ -43,6 +43,7 @@ type
procedure WriteRepositoryMetadata;
procedure WriteDocumentation;
procedure WriteKeyboardInfo;
function HasKMX: Boolean;
function HasIcon: Boolean;
procedure Transform(const SourceFile: string; DestFile: string = '');
function DataPath: string;
@ -164,19 +165,24 @@ begin
Result := GetFilename(FTouchLayoutFilename);
end;
function TKeyboardProjectTemplate.HasKMX: Boolean;
begin
Result := (KMXKeymanTargets+[ktAny]) * FTargets <> [];
end;
function TKeyboardProjectTemplate.HasKVKS: Boolean;
begin
Result := KeymanTargetsUsingKVK * FTargets <> [];
Result := (KeymanTargetsUsingKVK+[ktAny]) * FTargets <> [];
end;
function TKeyboardProjectTemplate.HasTouchLayout: Boolean;
begin
Result := TouchKeymanTargets * FTargets <> [];
Result := (TouchKeymanTargets+[ktAny]) * FTargets <> [];
end;
function TKeyboardProjectTemplate.HasIcon: Boolean;
begin
Result := KMXKeymanTargets * FTargets <> [];
Result := (KMXKeymanTargets+[ktAny]) * FTargets <> [];
end;
procedure TKeyboardProjectTemplate.WriteDocumentation;
@ -276,9 +282,12 @@ begin
kps.FileName := GetPackageFilename;
// Add .kmx
f := TPackageContentFile.Create(kps);
f.FileName := FBasePath + FKeyboardID + '\build\' + FKeyboardID + Ext_KeymanFile;
kps.Files.Add(f);
if HasKMX then
begin
f := TPackageContentFile.Create(kps);
f.FileName := FBasePath + FKeyboardID + '\build\' + FKeyboardID + Ext_KeymanFile;
kps.Files.Add(f);
end;
// Add .js
if HasTouchLayout then

View file

@ -34,7 +34,15 @@ end;
function DoImportWindowsKeyboard(FParameters: TKMConvertParameters): Boolean;
var
iwk: TImportWindowsKeyboard;
FTargetFolder: string;
v: Integer;
begin
if not TryStrToInt('$'+FParameters.KLID, v) then
begin
writeln('ERROR: The format of the input parameter -klid '+FParameters.KLID+' is incorrect');
Exit(False);
end;
iwk := TImportWindowsKeyboard.Create;
try
iwk.SourceKLID := FParameters.KLID;
@ -45,6 +53,14 @@ begin
iwk.Version := FParameters.Version;
iwk.BCP47Tags := FParameters.BCP47Tags;
iwk.Author := FParameters.Author;
FTargetFolder := ExtractFileDir(iwk.ProjectFilename);
if DirectoryExists(FTargetFolder) then
begin
writeln('ERROR: The directory "'+FTargetFolder+'" already exists.');
Exit(False);
end;
Result := iwk.Execute;
finally
iwk.Free;
@ -54,6 +70,7 @@ end;
function DoCreateKeyboardTemplate(FParameters: TKMConvertParameters): Boolean;
var
kpt: TKeyboardProjectTemplate;
FTargetFolder: string;
begin
kpt := TKeyboardProjectTemplate.Create(FParameters.Destination, FParameters.KeyboardID, FParameters.Targets);
try
@ -62,6 +79,14 @@ begin
kpt.Version := FParameters.Version;
kpt.BCP47Tags := FParameters.BCP47Tags;
kpt.Author := FParameters.Author;
FTargetFolder := ExtractFileDir(kpt.ProjectFilename);
if DirectoryExists(FTargetFolder) then
begin
writeln('ERROR: The directory "'+FTargetFolder+'" already exists.');
Exit(False);
end;
try
kpt.Generate;
except

View file

@ -77,8 +77,12 @@ uses
{ TBCP47Tag }
procedure TBCP47Tag.Canonicalize;
var
newTag: string;
begin
SetTag(TCanonicalLanguageCodeUtils.FindBestTag(Tag));
newTag := TCanonicalLanguageCodeUtils.FindBestTag(Tag);
if newTag <> '' then
SetTag(newTag);
end;
procedure TBCP47Tag.Clear;