Commit graph

119 commits

Author SHA1 Message Date
Marc Durdin
be2b529e65 fix(developer): exclude nocaps from layer id modifier components
Fixes #7551.
2022-10-27 08:37:04 +11:00
Marc Durdin
3c14a8312f
Merge pull request #7431 from keymanapp/fix/developer/7419-handle-invalid-graphics-in-ico-editor
fix(developer): Handle invalid graphics in icon editor
2022-10-21 09:57:01 +11:00
Marc Durdin
08c9cd6239
Merge pull request #7430 from keymanapp/fix/developer/7425-ctrl-key-press-release
fix(developer): Ctrl key to select key was conflicting with shortcuts
2022-10-19 06:19:48 +11:00
Marc Durdin
ec953cf689
Merge pull request #7372 from keymanapp/fix/developer/4324-handle-model-hints-and-warnings-cleanly
fix(developer): Handle hints and warnings cleanly
2022-10-19 06:19:34 +11:00
Marc Durdin
6b52b439bb fix(developer): address ico validity during assignment 2022-10-14 16:49:17 +11:00
Marc Durdin
f054b06014 chore(developer): minor tweaks for usability
move Clear All button in read-only view
don't show a dialog for invalid graphics
2022-10-11 07:29:46 +11:00
Marc Durdin
bf8f636a14 fix(developer): Handle invalid graphics in icon editor
Fixes #7419.

If the user attempts to add an invalid graphic (e.g. a .png file saved
with a .ico extension), Keyman Developer will no longer crash when
trying to load the file.

Note that while the keyboard will still compile with an invalid graphic,
Keyman for Windows will refuse to install it. I have not tested other
platform handling of such a situation.
2022-10-11 07:18:09 +11:00
Marc Durdin
51a3679a90 fix(developer): Ctrl key to select key was conflicting with shortcuts
Fixes #7425.

In the layout editor, the "Select Key" dialog was being shown sometimes
when using shortcuts such as Ctrl+V. The reason this happened was that
the shortcut handler in Delphi was capturing the keydown of the V key,
so the Ctrl event handler never saw it. Then, if you pressed Ctrl+V, and
released the Ctrl key before releasing the V key (which often happens
when you press a shortcut rapidly), the Ctrl event handler would receive
notification of the Ctrl key release and trigger the "Select Key"
dialog.

This fix shifts the Ctrl key event handler out of the keyboard editor
and into the top-level application events handler -- this is the best
place where we can preview key events before they are passed to the
shortcut handler and controls for processing.

This necessitated adding a general `ControlKeyPressedAndReleased` event
function to the TIKE editor base class. This is currently only used by
`UfrmKeymanWizard` and `UfrmOSKEditor`.

I noted that the OSK editor did not currently support the Ctrl key
event to select a new key. As a part of this fix, I added support for
this, to bring it into line with the Layout Editor and the Touch Layout
Editor.
2022-10-11 06:39:38 +11:00
Marc Durdin
61a058fcec
Merge pull request #7371 from keymanapp/fix/developer/7368-handle-invalid-kps-in-project-view
fix(developer): handle invalid kps xml when loading project view
2022-10-03 14:26:59 +11:00
Marc Durdin
7a819598e7 fix(developer): Handle hints and warnings cleanly
Relates to #4324 (but slightly orthogonal.)

We wanted some message classes to be handled in the lexical model editor
more cleanly, including drill-down to line of error. A few changes
required to make this work well:

1. Parse error messages from kmlmc. This is not perfect but works while
   the two projects are kept in sync, which they always are for Keyman
   Developer. Note that at this stage, .ts warnings are not captured in
   this parser, as they are generated by tsc.
2. Drill-down in Wordlist Editor Frame to find line of error
3. Model editor reports ownership of .tsv files so they can be loaded
4. In case of model editor not open (e.g. building from project view),
   the TSV standalone editor was not displaying the frame, so it never
   actually worked.
5. If the text editor had never loaded, then FindError was effectively
   a no-op; adds code to seek to error line after page load finishes.
6. Ensures that if we attempt to seek an error in a sub-file owned by
   an editor (e.g. .tsv owned by .model.ts, .kvks owned by .kmn), that
   the parent editor will be focused first. Does not verify all paths
   here, just the tsv one.
2022-09-28 20:17:44 +10:00
Marc Durdin
73e0a2e461 fix(developer): generate valid js when using unquoted digits in stores
Fixes #7005.

If a developer used single digit values in stores, unquoted (which is
not really the usual approach, but should work just fine for non-zero
values), the KMW compiler would emit invalid single-digit hexadecimal
escapes for them, e.g. `"\x1"` instead of `"\x01"`.

Sample code:

```
store(option) 1

if(option = 1) + 'a' > 'one'
if(option = 2) + 'a' > 'two'
+ '1' > set(option = 1)
+ '2' > set(option = 2)
```

It is not immediately obvious from this code, but the value `1` is
actually a character with value `'\x01'` or `U+0001`!

The more usual approach will not encounter this problem:

```
store(option) '1'

if(option = '1') + 'a' > 'one'
if(option = '2') + 'a' > 'two'
+ '1' > set(option = '1')
+ '2' > set(option = '2')
```

Note that the following is a compile error (due to internal use of
null terminated strings).

```
store(option) 0
```
2022-09-28 17:00:55 +10:00
Marc Durdin
50614fb088 fix(developer): handle invalid kps xml when loading project view
Fixes #7368.
2022-09-28 16:32:36 +10:00
Marc Durdin
ea902d2f1c
Merge pull request #7225 from keymanapp/fix/developer/7028-touch-layout-desktop-view-has-broken-format
fix(developer): hide key-sizes when in desktop layout in touch layout editor
2022-09-13 11:31:15 +10:00
Marc Durdin
f96e3493af fix(developer): hide key-sizes when in desktop layout in touch layout editor
Fixes #7028.

Note that the desktop layout is not currently used by KeymanWeb. The
designer has a number of additional issues, as the .keyman-touch-layout
format is not well suited to describing a fixed hardware layout, but
fixing this is outside the scope of this issue.
2022-09-07 11:13:22 +10:00
Marc Durdin
c98fb89b86 fix(developer): suppress repeated warnings about unreachable code
Fixes #7216.

The warning message 0x209A 'The rule will never be matched because its
key code is never fired.' was being generated multiple times for a
single line because the `JavaScript_Key` function it is generated by is
used for various purposes.

This PR keeps a cache of reported key rules to ensure that the message
is reported only once for a given key rule, and also improves the
reporting to clarify which specific key is unreachable, which makes it
easier to diagnose when using `any(k)` style messages, for example:

```
lao_phonetic.kmn (237): Warning: 209A The rule will never be matched for key 'ñ' because its key code is never fired.
```

This also reduces the warning to a hint, as this should not be a
blocking issue for a keyboard, rather just a place the keyboard author
can tidy up.
2022-09-07 06:02:46 +10:00
Marc Durdin
5dc5b9325c
Merge pull request #7000 from keymanapp/chore/developer/keymanweb-compiler-remove-unused-dependencies
chore(developer): remove unused dependencies from KeymanWeb compiler 🛩
2022-08-29 14:48:46 -05:00
Marc Durdin
f7189387b3
Merge pull request #7013 from keymanapp/fix/developer/keymanweb-readonly-groups-mismatches
fix(developer): compiler emitting garbage for readonly groups 🎾
2022-08-15 04:40:51 -05:00
Marc Durdin
1a001d6761
Merge pull request #7033 from keymanapp/fix/developer/7032-crash-compiling-ansi-for-web
fix(developer): prevent crash attempting to compile ansi keyboard 🎾
2022-08-15 02:16:02 -05:00
Marc Durdin
e5bd4e0be3 fix(developer): prevent crash attempting to compile ansi keyboard
Fixes #7032.
2022-08-03 12:57:34 -05:00
Marc Durdin
f9240d76a2 fix(developer): stack overflow when compiling non-web keyboard
Fixes #7030.

Prevents a stack overflow / loop when the web target is removed from a
keyboard and it has already been tested on web, and the user presses the
Compile button.
2022-08-03 12:53:03 -05:00
Marc Durdin
5c06d59a5e fix(developer): compiler emitting garbage for readonly groups
Picked up while reviewing code for conversion to C++. The compiler
could, in some circumstances emit garbage code for readonly groups
because we weren't testing all scenarios correctly. In practice, this
would have been rare as readonly groups don't emit characters, but it
should be fixed!
2022-07-29 11:22:30 +10:00
Marc Durdin
4d80760ad9 feat(developer): add languageUsesCasing to Model Editor
Fixes #7007.
2022-07-28 14:55:10 +10:00
Marc Durdin
97817b8724 chore(developer): remove unused dependencies from KeymanWeb compiler 2022-07-27 14:58:13 +10:00
Marc Durdin
66e07aed48
Merge pull request #6989 from keymanapp/fix/developer/improve-error-for-multi-part-key-ids
fix(developer): improve error message for multi-part key ids on <15.0 🎾
2022-07-26 13:55:04 +10:00
Marc Durdin
5895d26e64
Merge pull request #6884 from keymanapp/feat/developer/touch-layout-editor-flick-and-multitap
feat(developer): Rework Touch Layout Editor to support flick and multitap 🙊
2022-07-26 07:14:02 +10:00
Marc Durdin
9d82419aac fix(developer): improve error message for multi-part key ids on <15.0
Relates to https://community.software.sil.org/t/rule-for-touch-layout-question/6482/6
2022-07-26 06:19:02 +10:00
Marc Durdin
0d7e998bb6
Merge pull request #6943 from keymanapp/fix/developer/6897-timeouts-when-server-shutdown
fix(developer): reduce timeouts if server shut down 🎾
2022-07-22 16:42:50 +10:00
Marc Durdin
bde97ccf51
Merge pull request #6942 from keymanapp/fix/developer/crash-on-switching-back-tab
fix(developer): crash when switching back a tab 🎾
2022-07-15 15:44:16 +10:00
Marc Durdin
d2cfd5cc7e chore(developer): address review comments 2022-07-15 06:13:44 +10:00
Marc Durdin
45f97988cf fix(developer): reduce timeouts if server shut down
If Server is shut down, Keyman Developer now handles this better
and offers to restart it in UI interactions, and backs out quietly
in non-UI processes.
2022-07-14 16:28:39 +10:00
Marc Durdin
e42d50a6da fix(developer): crash when switching back a tab
In rare circumstances, Keyman Developer can crash during startup if you
try and switch back to a tab which is not yet available
(Ctrl+Shift+Tab).
2022-07-14 16:24:39 +10:00
Marc Durdin
1659dde17a fix(developer): crash on exit when checking for updates
Fixes #6928.
2022-07-14 16:22:36 +10:00
Marc Durdin
6032181e18 feat(developer): rework displayHint to defaultHint
After a demo of the Touch Layout Editor @jahorton suggested using a
"default hint" model instead of the "display hint" from the design spec.
I liked this and have reworked the design accordingly. With the default
hint model, a source for the hint text can be specified, such as the
default longpress key, or a specific flick key. This can then be
overridden on a key level.

The hint input element now shows a placeholder to indicate the default
hint for the key, and if a hint has been customised for a given key, it
is shown in green on the key cap.

Changing the default hint does not impact any customised hints.
2022-07-14 10:58:59 +10:00
Marc Durdin
02d03588b2 chore(developer): simplify dialog workflow
Most dialogs in touch layout editor can now have just a Close
button with changes taking effect immediately. This helps users
visualize how the options they've chosen will work.
2022-07-14 10:58:58 +10:00
Marc Durdin
1738f12428 feat(developer): add displayHint property to touch layout editor
Moves the top toolbar to the left to make more room, and tidy it up,
and moves various controls into sub-dialogs to make them clearer.

Shortcut buttons to prepopulate the Hint property will come in a
subsequent PR.
2022-07-14 10:58:57 +10:00
Marc Durdin
a362f27dda feat(developer): add hint property to touch layout editor
Also fixes a couple of minor issues with character map integration and
Unicode text fields.
2022-07-14 10:58:56 +10:00
Marc Durdin
54a655e92e feat(developer): add hint and displayHint to touch layout validation and parsing 2022-07-14 10:58:55 +10:00
Marc Durdin
51a94a1d7d feat(developer): cleanup touch layout files on load and save
Improves the .keyman-touch-layout clean schema and adds additional
cleanup during load and save in the Touch Layout Editor.

The compiler already does transforms for the relevant fields to the
formats that KeymanWeb is expecting (in particular, width, pad to
string).

This is preparation for adding hint data to the format as well.
2022-07-14 10:57:39 +10:00
Marc Durdin
60dabb5284 feat(developer): add support for flick and multitap to compiler 2022-07-14 10:57:25 +10:00
Marc Durdin
b702b7dbc3 fix(developer): fix issues with template and presentation 2022-07-14 10:55:03 +10:00
Marc Durdin
d29468441d chore(developer): remove multitap icon cleanly 2022-07-14 10:55:02 +10:00
Marc Durdin
f9241f4cd7 chore(developer): minor cleanup 2022-07-14 10:55:01 +10:00
Marc Durdin
268ba98219 feat(developer): Support new touch layout definitions in Delphi
Also minor tweaks to allow jquery-ui images to load, fixup for broken
file path for node.exe.
2022-07-14 10:55:01 +10:00
Marc Durdin
feee081f6f feat(developer): tweaks ui for selected key cap
* Separates out the 'command' icon key cap controls
* Fixes selection of last active element with undo
2022-07-14 10:55:00 +10:00
Marc Durdin
a637b58066 feat(developer): rework touch layout editor
* Restrucure touch layout editor to make space for additional gesture
  types:
  * Move control bar to right hand side
  * Move key cap edits to control bar.
* Adds flick and multitap gestures:
  * Adds buttons to add longpress keys, flicks or multitaps.
* Adds Unicode value boxes which mirror the key cap text box.
* Updates key width values in real time when resizing
* Maintain selected key as far as possible across layer switch, platform
  switch and presentation view switch.
* Starts to split 'special' key cap icons from normal key caps.
2022-07-14 10:54:59 +10:00
Marc Durdin
5875cf504f chore(developer): update jquery-ui version to 1.13.1 2022-07-14 10:54:58 +10:00
Marc Durdin
054423fbef chore(developer): refactor subkeys out of builder.js 2022-07-14 10:54:57 +10:00
Marc Durdin
83bf20cb44 chore(developer): refactor 'constants' out of builder.js 2022-07-14 10:54:56 +10:00
Marc Durdin
f8f271577b chore(developer): refactor undo actions out of builder.js 2022-07-14 10:54:55 +10:00
Marc Durdin
c88826ccaa chore(developer): refactor builder.js 2022-07-14 10:54:54 +10:00