mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-09 10:25:32 +00:00
[Developer] Tidy up various minor issues in New Project Template
This commit is contained in:
parent
b64e1b4839
commit
a70efed098
6 changed files with 150 additions and 19 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue