1. Dec 04, 2023
    • Marc Durdin's avatar
      feat(developer): Open files in per-project instances · ff5a366c
      Marc Durdin authored
      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.
      ff5a366c
  2. Dec 01, 2023
    • Marc Durdin's avatar
      chore(developer): remove obsolete files · 915510b8
      Marc Durdin authored
      915510b8
    • Marc Durdin's avatar
      feat(developer): Multi-process model for projects 🦕 · 39b7c882
      Marc Durdin authored
      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).
      39b7c882
  3. Nov 25, 2023
    • Marc Durdin's avatar
      chore(developer): require project file to exist · 11ae17c7
      Marc Durdin authored
      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.
      11ae17c7
  4. Nov 22, 2023
  5. Nov 16, 2023
  6. Nov 15, 2023
  7. Nov 14, 2023