Commit graph

63 commits

Author SHA1 Message Date
Marc Durdin
5ecc3aa3e3 chore(developer): clarify project upgrade messages about file locations 2024-06-19 06:23:34 +10:00
Marc Durdin
6d2164f1e6 fix(developer): ensure folder for MRU list is always created
This arises if `%AppData%/Keyman/Keyman Developer` folder is missing.
It is sporadic because most times, Keyman Developer Server wins a
startup race and creates the folder before this code is ever reached.

Fixes: #11551
Fixes: KEYMAN-DEVELOPER-1MY
2024-05-27 10:50:58 +07:00
Marc Durdin
d406329f81 docs(developer): add help site links
Also fixes an inadvertent issue where F1 was not opening context help in
the text editor anywhere in Keyman Developer. This means that pressing
F1 while a keyword is highlighted in a .kmn keyboard will not re-open
the context help for that keyword once more (yay!)
2024-03-05 03:12:05 -06:00
Marc Durdin
978fb125e6
Merge pull request #10781 from keymanapp/fix/developer/10684-crash-opening-invalid-project
fix(developer): crash opening invalid project
2024-02-21 12:00:57 +07:00
Marc Durdin
7601ac9fca
Merge pull request #10775 from keymanapp/fix/developer/10546-tike-ide-message-formatting
fix(developer): match kmc console formatting for messages in IDE
2024-02-21 12:00:28 +07:00
Marc Durdin
5881645042 fix(developer): crash opening invalid project
Fixes #10684.

If a project .kpj file was not saved in UTF-8 or ANSI, or had a BOM,
then Keyman Developer would crash with an access violation due to an
uninitialized variable.
2024-02-20 13:04:07 +07:00
Marc Durdin
e431f850a0 fix(developer): match kmc console formatting for messages in IDE
Fixes #10546.

Format compiler messages in the same way as kmc, and match the colors
from kmc's console log messages.
2024-02-20 07:12:49 +07:00
Marc Durdin
013fdfaf0c fix(developer): prevent renaming of new project types in New Project dialog
Fixes #10548.
2024-02-19 15:32:31 +07:00
Marc Durdin
a918cc182f fix(developer): keyboard that targets only web can cause crashes and other problems
Fixes #10655.
Fixes #10663.

If a .kmn file had only a .js target, then Keyman Developer would return
an empty string for the target (based on .kmx). This meant that the path
for the compiler was an empty string, the path for opening the build
folder was an empty string.

Refactored the relevant code to simplify the logic a little.
2024-02-07 13:15:51 +07:00
Marc Durdin
7b0406d64d fix(developer): use keyboard3 tag rather than DTD to identify LDML keyboard xml files
Fixes #10469.
2024-01-23 13:37:57 +07:00
Marc Durdin
cb6968b1c0 chore(developer): fixup generated xml to valid sample keyboard 2024-01-19 11:47:20 +07:00
Marc Durdin
2b02d73347 feat(developer): New LDML Keyboard Project form
Fixes #10135.

Adds a new LDML Keyboard Project template and form, and allows
instantiation from kmconvert command-line and from the New Project
dialog in Keyman Developer IDE.
2024-01-18 15:19:41 +07:00
Marc Durdin
070ead74cf fix(developer): new file support for handle project 2.0
Fixes #10276.

Adding new files to a v2.0 project was unsupported. This requires a
little bit of a logic change to the two new File New dialogs:

1. The New File Details dialog does not allow changing from the
   SourcePath of the project.
2. The New File dialog does allow changing to any path. If you select a
   path outside the project path, it will open in a new window.
2024-01-05 14:19:02 +07:00
Marc Durdin
1b45c6b8e9
Merge pull request #10155 from keymanapp/feat/developer/10138-new-project-new-process
feat(developer): New Project opens in new process 🦕
2023-12-13 08:45:53 +11:00
Marc Durdin
1f06224c6e
Merge pull request #10151 from keymanapp/fix/developer/10144-10145-10146-10148
fix(developer): various project fixes 🦕
2023-12-13 08:45:30 +11:00
Marc Durdin
22b7f5bf07 fix(developer): crash loading a project when referenced .xml is missing
Fixes #10181.
2023-12-11 12:05:56 +07:00
Marc Durdin
40b5828263 feat(developer): New Project opens in new process
Fixes #10138.

If the current instance of Keyman Developer already has a project open,
then the New Project dialog will now open the new project in a new
instance of Keyman Developer.

Note: this also moves a couple of functions out of dmActionsMain and
into UfrmMain, as their functionality belongs more closely there. The
`TmodActionsMain.OpenProject` function has been renamed to
`TfrmMain.OpenProjectInCurrentProcess` to clarify its usage and context.
2023-12-06 12:10:12 +07:00
Marc Durdin
fe772e1008 fix(developer): Validate SourcePath and BuildPath in Project Settings
Fixes #10148.

We now force the SourcePath and BuildPath project properties to be a
direct subfolder of the project folder, in order to avoid issues with
paths in the future. This is only applied to v2.0 projects, and only
enforced via the UI at this point.
2023-12-06 09:55:26 +07:00
Marc Durdin
6c918e6aa8 fix(developer): Option to disable prompting for project upgrade
Fixes #10146.

Some developers may wish to stick with kpj-1.0 for now, and the prompt
to upgrade would annoying because it cannot be hidden. This resolves
that.

Note that I haven't at this point renamed UrlRenderer.pas, although it
may be worth considering in the future.
2023-12-06 09:54:12 +07:00
Marc Durdin
149fc5e7c8 fix(developer): Support opening .keyman-touch-layout
Fixes #10144.

Also adds .keyboard_info, for now, although it is removed in 17.0, as
there will be numerous projects which still have a .keyboard_info and
it is handy to be able to load it and view its contents while upgrading.
2023-12-06 09:50:30 +07:00
Marc Durdin
4f83c9cf14 chore(developer): remove commented code
From TODO item in #9948.
2023-12-06 09:49:55 +07:00
Marc Durdin
4641684501 fix(developer): prevent opening .kpj in multiple processes
Fixes #10003.

Multiple small fixes required here:
* Add .kpj as an editable file type
* Ensure that when OpenFile returns nil (which it always will for a
  .kpj), that we don't crash
* Ensure that projects open in a new process rather than replacing the
  current project session

Adds a TODO for New Project -- this should be opened in a new process if
we already have a project open in the current process. Will push this
into a separate PR.
2023-12-05 15:08:05 +07:00
Marc Durdin
ff5a366c45 feat(developer): Open files in per-project instances
Refactor the file-opening code so it can be used by Keyman Developer UI
as well as command-line, and then add support for opening files in
per-project instances from File|Open and friends.

Also moves the initialization code out of tike.dpr into
Keyman.Developer.System.Main.pas, which makes it easier to maintain and
read.
2023-12-04 08:47:36 +07:00
Marc Durdin
39b7c882a3 feat(developer): Multi-process model for projects 🦕
This is a bit of an omnibus commit, apologies for that. This commit
moves Keyman Developer to a proper multi-process model, where editing
files from multiple projects is handled much more cleanly, with each
project loaded in a separate process.

Files that are edited outside of a project structure are loaded into a
'temporary project' in a single process, which provides a pathway for
existing users who may have legacy files outside the normal Keyman
Developer project model.

There are several components to this:

1. Inter-process communication (Multiprocess, CopyDataHelper units and
   multiprocess test project). These modules establish a method of
   enumerating running Keyman Developer instances (with EnumWindow),
   recording relevant metadata for each instance (by thread id) in the
   registry (registry used because it manages contention without
   additional effort from us), and communicating between processes with
   WM_COPYDATA.
2. Command-line parsing (TikeCommandLine). Determines project ownership
   (ProjectOwningFile) for each filename passed on the command-line, and
   passes these over to existing instances of Keyman Developer that have
   that project loaded, or starts new instances as needed.
3. Temporary project management. Mostly in ProjectUI.

Also, moved GlobalProjectStateWnd management out of ProjectFile.pas and
into Project.pas, alongside other global project variables.

A follow-up will add functionality to determine if a file opened within
the Keyman Developer UI should open in the same instance or in a
separate instance (see TfrmKeymanDeveloper.OpenFileInProject). This will
use the same methodology as TikeCommandLine does now, so may involve
further refactoring.

This commit establishes the idea of 'keyman.kpj' as a future default
filename for Keyman Developer projects, but does not enable it, in
ProjectOwningFile. It is planned to introduce this fixed filename in
version 18.0 (see #10113).
2023-12-01 11:48:09 +07:00
Marc Durdin
11ae17c7c0 chore(developer): require project file to exist
Reverts some of the version 2.0 project functionality, as there are a
number of challenges around populating files for folders that don't have
project definitions, particularly if user attempts to load a folder that
is not a project folder after all but happens, e.g. to have a source
folder in it.
2023-11-25 16:14:22 +10:00
Marc Durdin
55c0c6fd08 fix(developer): projects 2.0 internal path enumeration
Restricts enumeration of files for the project to the project folder and
the SourcePath folder. This prevents problems where a project may be in
a folder with many subfolders which would take a long time to enumerate,
and avoids confusion where there are source-type files in other folders.

At the same time, sorts out forward slash vs backslash in paths. While
forward slash works in many scenarios, there are several filename
manipulation functions, such as ExpandFileName, which would build valid
but non-optimal paths when forward slashes were encountered, which
cascaded into files appearing to be different and presentation issues.
2023-11-16 11:47:35 +07:00
Marc Durdin
4fe5df1e69 chore(developer): show only source path files in project views
Relates to #9948.

For v2.0 projects, only show .kmn, .kps, .model.ts, .tsv, and .xml files
if they are source files within Options.SourcePath.
2023-11-14 06:02:04 +07:00
Marc Durdin
53b57939e4 feat(developer): handle errors loading projects
Relates to #9948.

Prevents loading of projects other than v1.0, v2.0, and also handles
error cases when attempting to load projects.
2023-11-13 13:41:58 +07:00
Marc Durdin
c488460c71 chore(developer): manage SourcePath in project upgrade
Relates to #9948.

When upgrading a project to v2.0, it is important that all source files
are in the same folder. This change makes the upgrade process verify
that this is the case and blocks the upgrade if there are source files
in multiple folders.

Source files are .kmn, .xml (ldml keyboard), .kps, and .model.ts.
2023-11-13 12:12:11 +07:00
Marc Durdin
d39af4edc5 chore(developer): only build source files
For batch builds (e.g. project/compile all) of v2.0 projects, we only
want to build files that are listed in the project's $SOURCEPATH, so
that the project can contain extra folders with source file types that
won't break a project-level build.

Any source file types in extra folders can still be built one-by-one,
which is helpful for investigation and test for keyboard authors, but
will not be built if project build is selected.

This commit also formalizes the source/ SourcePath for upgraded projects
which contain a source/ folder. If the project to be upgraded does not
contain the source/ folder, then no SourcePath is assigned, and any
source file in any folder will be built.
2023-11-12 06:43:39 +07:00
Marc Durdin
f9272aac21 feat(developer): Project Settings Form for 17.0+ projects 2023-11-12 06:40:58 +07:00
Marc Durdin
3c0b7a9b51 fix(developer): Project upgrade messages now show in Messages panel
Relates to #9948.

Having the project upgrade messages in the Messages panel means that
users can refer to them as they clean up their projects to bring them
into the v17 format.
2023-11-08 12:33:42 +07:00
Marc Durdin
5e9056f142 feat(developer): show .xml LDML keyboards in project
Identifies .xml keyboards when building file list, then shows those
appropriately in the keyboard list. Also enables grouped actions such
as keyboard_compileall for those keyboards.
2023-11-08 10:06:25 +07:00
Marc Durdin
a923537ed4 feat(developer): Actions to support LdmlKeyboardEditor
Adds actions to support LdmlKeyboardEditor, and refactors and
reorganizes the existing actions along the way to make them clearer.

Compile, Install, and Uninstall supported at this time
2023-11-08 08:16:11 +07:00
Marc Durdin
7b8fe32161 feat(developer): Add basic LDML XML keyboard file support to TIKE projects 2023-11-08 05:51:28 +07:00
Marc Durdin
857017f4ad chore(developer): remove obsolete project code
Removes old state load/save from each project file type, and the
unused WarnAsError property, in preparation for xmlLdmlProjectFile.
2023-11-07 14:57:40 +07:00
Marc Durdin
96e78c6818 chore(developer): fix typo 2023-11-07 14:57:08 +07:00
Marc Durdin
a312f735ad chore(developer): tweak prompt for project upgrade 2023-11-07 14:29:04 +07:00
Marc Durdin
eb97eb94b5 chore(developer): hide 'Remove From Project' for v2.0 projects
Relates to #9948.
2023-11-07 14:26:49 +07:00
Marc Durdin
0285993fcf feat(developer): New Project - Description field and tweaks
Fixes #9869.

Adds a 'Description' field, tweaks Copyright strings, and tweaks
default content for documentation to the New Project wizards and
kmconvert.
2023-11-07 06:04:33 +07:00
Marc Durdin
4c5a91081f feat(developer): Support v2.0 projects in TIKE
Relates to #9948. Starts basic support for v2.0 projects.

For all operating modes:

- Remove blank projects / untitled projects mode
- Add Open Project Folder buttons and links
- Remove Project Save As
- Render uses in-memory XML
- Upgrade to v2.0 project file (along with checks)

For v2.0 projects:

- Remove 'Add File to Project'
- Populate Files to list all files in folder (note: consider efficiency
  here as currently files are parsed for subfile data)
- Version 2.0 project options and defaults
2023-11-07 05:18:25 +07:00
Marc Durdin
6f6e07975b chore(developer): remove compile.pas and CompileErrorCodes.pas
Fixes #9923.

These are no longer used because we now use kmc for builds. This also
means that the kmcomp-x64-structures test is no longer required, because
that was used to keep the Delphi and C++ structures in sync.

There are some minor details around error message identifiers that are
still present in a handful of places, but they are work for another
time.
2023-11-02 13:12:28 +07:00
Marc Durdin
cb3d526310
Merge pull request #9619 from keymanapp/chore/developer/9551-remove-keyboard_info-sources
chore(developer): remove .keyboard_info sources 🎺
2023-10-03 15:38:37 +02:00
Marc Durdin
05e2b196dc
Merge branch 'epic/package-metadata' into feat/windows/create-installer-without-buildpkg 2023-10-03 15:38:17 +02:00
Marc Durdin
70dfbce5aa
Merge pull request #9571 from keymanapp/feat/developer/remove-kmcmpdll
feat(developer): remove kmcomp, kmcmpdll 🎺
2023-10-03 15:35:19 +02:00
Marc Durdin
311c7675ee
chore: Update developer/src/tike/project/Keyman.Developer.System.Project.kmnProjectFileAction.pas 2023-10-04 00:34:57 +11:00
Marc Durdin
a093507a4c chore(developer): remove .keyboard_info sources
Fixes #9551.

Removes various .keyboard_info files from test fixtures and also removes
generation of .keyboard_info source files from kmconvert, alongside now-
redundant tests (cvt.dpr).
2023-09-25 12:19:26 +07:00
Marc Durdin
fd9b131307 chore(developer): remove Package Installer UI from TIKE 2023-09-25 10:27:59 +07:00
Marc Durdin
4c07b6c49c feat(developer): remove kmcmpdll 2023-09-02 12:25:29 +04:00
Marc Durdin
44d57e8041 feat(developer): compile kmn files with kmc in tike 2023-09-01 20:40:16 +04:00