diff --git a/windows/src/developer/TIKE/Tike.dpr b/windows/src/developer/TIKE/Tike.dpr
index 03dc9a224c..d4cfa4d477 100644
--- a/windows/src/developer/TIKE/Tike.dpr
+++ b/windows/src/developer/TIKE/Tike.dpr
@@ -80,7 +80,7 @@ uses
UfrmRegressionTestFailure in 'dialogs\UfrmRegressionTestFailure.pas' {frmRegressionTestFailure},
XString in '..\..\global\delphi\general\XString.pas',
debugkeyboard in 'debug\debugkeyboard.pas',
- UfrmMustIncludeDebug in 'dialogs\UfrmMustIncludeDebug.pas' {frmMustIncludeDebug},
+ Keyman.Developer.UI.UfrmMessageDlgWithSave in 'dialogs\Keyman.Developer.UI.UfrmMessageDlgWithSave.pas' {frmMessageDlgWithSave},
debugdeadkeys in 'debug\debugdeadkeys.pas',
MessageIdentifiers in 'main\MessageIdentifiers.pas',
exceptionw in '..\..\global\delphi\general\exceptionw.pas',
@@ -293,7 +293,8 @@ uses
Keyman.Developer.System.LexicalModelParser in 'main\Keyman.Developer.System.LexicalModelParser.pas',
Keyman.Developer.System.LexicalModelParserTypes in 'main\Keyman.Developer.System.LexicalModelParserTypes.pas',
Keyman.Developer.UI.UfrmWordlistEditor in 'child\Keyman.Developer.UI.UfrmWordlistEditor.pas' {frmWordlistEditor},
- Keyman.Developer.UI.dmActionsModelEditor in 'actions\Keyman.Developer.UI.dmActionsModelEditor.pas' {modActionsModelEditor: TDataModule};
+ Keyman.Developer.UI.dmActionsModelEditor in 'actions\Keyman.Developer.UI.dmActionsModelEditor.pas' {modActionsModelEditor: TDataModule},
+ UfrmMustIncludeDebug in 'dialogs\UfrmMustIncludeDebug.pas' {frmMustIncludeDebug};
{$R *.RES}
{$R ICONS.RES}
@@ -321,8 +322,8 @@ begin
if TikeActive then Exit;
InitClasses;
Application.CreateForm(TmodWebHttpServer, modWebHttpServer);
- Application.CreateForm(TfrmKeymanDeveloper, frmKeymanDeveloper);
- Application.Run;
+ Application.CreateForm(TfrmKeymanDeveloper, frmKeymanDeveloper);
+ Application.Run;
end;
finally
FInitializeCEF.Free;
diff --git a/windows/src/developer/TIKE/Tike.dproj b/windows/src/developer/TIKE/Tike.dproj
index 77b8f26bd7..8c94445fd5 100644
--- a/windows/src/developer/TIKE/Tike.dproj
+++ b/windows/src/developer/TIKE/Tike.dproj
@@ -7,7 +7,7 @@
1
Application
VCL
- 18.7
+ 18.8
Win32
@@ -215,8 +215,8 @@
-
-
+
+
@@ -553,6 +553,10 @@
dfm
TDataModule
+
+
+ dfm
+
Cfg_2
@@ -670,12 +674,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -688,138 +700,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-xxxhdpi
1
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
res\values
1
+
+ res\values
+ 1
+
@@ -889,6 +1005,9 @@
0
+
+ 0
+
0
@@ -1220,6 +1339,9 @@
1
+
+ 1
+
@@ -1263,6 +1385,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -1285,6 +1411,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -1322,6 +1454,7 @@
+
12
diff --git a/windows/src/developer/TIKE/child/UfrmKeymanWizard.dfm b/windows/src/developer/TIKE/child/UfrmKeymanWizard.dfm
index 38de6cb78f..189eab30d8 100644
--- a/windows/src/developer/TIKE/child/UfrmKeymanWizard.dfm
+++ b/windows/src/developer/TIKE/child/UfrmKeymanWizard.dfm
@@ -958,6 +958,10 @@ inherited frmKeymanWizard: TfrmKeymanWizard
object pageLayoutCode: TTabSheet
Caption = 'Code'
ImageIndex = -1
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
end
end
end
@@ -1004,10 +1008,16 @@ inherited frmKeymanWizard: TfrmKeymanWizard
object pageOnScreenKeyboard: TTabSheet
Caption = 'On-Screen'
ImageIndex = 7
+ ExplicitLeft = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
end
object pageTouchLayout: TTabSheet
Caption = 'Touch Layout'
ImageIndex = 16
+ ExplicitLeft = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
object pagesTouchLayout: TPageControl
Left = 0
Top = 0
@@ -1022,28 +1032,48 @@ inherited frmKeymanWizard: TfrmKeymanWizard
object pageTouchLayoutDesign: TTabSheet
Caption = 'Design'
ImageIndex = -1
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
end
object pageTouchLayoutCode: TTabSheet
Caption = 'Code'
ImageIndex = -1
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
end
end
end
object pageIncludeCodes: TTabSheet
Caption = 'Char Codes'
ImageIndex = 9
+ ExplicitLeft = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
end
object pageKMWEmbedJS: TTabSheet
Caption = 'Embedded JS'
ImageIndex = 9
+ ExplicitLeft = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
end
object pageKMWEmbedCSS: TTabSheet
Caption = 'Embedded CSS'
ImageIndex = 9
+ ExplicitLeft = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
end
object pageKMWHelp: TTabSheet
Caption = 'Embedded Help'
ImageIndex = 9
+ ExplicitLeft = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
end
object pageCompile: TTabSheet
Caption = 'Build'
@@ -1058,7 +1088,6 @@ inherited frmKeymanWizard: TfrmKeymanWizard
Color = 14211288
ParentBackground = False
TabOrder = 0
- ExplicitTop = -3
object lblCongrats: TLabel
Left = 10
Top = 13
diff --git a/windows/src/developer/TIKE/child/UfrmKeymanWizard.pas b/windows/src/developer/TIKE/child/UfrmKeymanWizard.pas
index b5366d0795..144ac535cb 100644
--- a/windows/src/developer/TIKE/child/UfrmKeymanWizard.pas
+++ b/windows/src/developer/TIKE/child/UfrmKeymanWizard.pas
@@ -575,6 +575,7 @@ uses
Keyman.Developer.System.Project.ProjectLog,
Keyman.Developer.System.Project.kmnProjectFileAction,
Keyman.Developer.UI.Project.ProjectFileUI,
+ Keyman.Developer.UI.UfrmMessageDlgWithSave,
RegExpr,
ErrorControlledRegistry,
RedistFiles,
@@ -1506,13 +1507,25 @@ begin
end;
function TfrmKeymanWizard.PrepareForBuild(var DebugReset: Boolean): Boolean; // I4504
+var
+ FSave: Boolean;
begin
if IsDebugVisible then
begin
- case MessageDlg('You must reset the debugger before recompiling your keyboard. Reset the debugger and recompile?',
- mtConfirmation, mbYesNoCancel, 0) of
- mrNo, mrCancel: Exit(False);
+ if not FKeymanDeveloperOptions.DebuggerAutoResetBeforeCompiling then
+ begin
+ if TfrmMessageDlgWithSave.Execute(
+ 'You must reset the debugger before recompiling your keyboard. Reset the debugger and recompile?',
+ 'Always reset the debugger automatically before compiling',
+ '', True, FSave) in [mrNo, mrCancel] then
+ Exit(False);
+ if FSave then
+ begin
+ FKeymanDeveloperOptions.DebuggerAutoResetBeforeCompiling := True;
+ FKeymanDeveloperOptions.Write;
+ end;
end;
+
DebugReset := True;
StopDebugging;
end;
@@ -3207,6 +3220,8 @@ begin
end;
procedure TfrmKeymanWizard.cmdImportFromOnScreenClick(Sender: TObject); // I3945 // I4034
+var
+ FSave: Boolean;
begin
if (FFeature[kfOSK].FileName = '') or not FKeyboardParser.Features.ContainsKey(kfOSK) then // I4058 // I4138
begin
@@ -3216,8 +3231,24 @@ begin
if Self.Modified then // I4059
begin
- ShowMessage('You must save changes to the keyboard before importing');
- Exit;
+ if not FKeymanDeveloperOptions.OSKAutoSaveBeforeImporting then
+ begin
+ if TfrmMessageDlgWithSave.Execute(
+ 'You must save changes to your keyboard before import. Save now and import?',
+ 'Always save changes automatically before importing',
+ '', True, FSave) in [mrNo, mrCancel] then
+ Exit;
+ if FSave then
+ begin
+ FKeymanDeveloperOptions.OSKAutoSaveBeforeImporting := True;
+ FKeymanDeveloperOptions.Write;
+ end;
+
+ if not modActionsMain.actFileSave.Execute then
+ begin
+ Exit;
+ end;
+ end;
end;
Self.Modified := True;
diff --git a/windows/src/developer/TIKE/dialogs/Keyman.Developer.UI.UfrmMessageDlgWithSave.dfm b/windows/src/developer/TIKE/dialogs/Keyman.Developer.UI.UfrmMessageDlgWithSave.dfm
new file mode 100644
index 0000000000..fbd8cfd5da
--- /dev/null
+++ b/windows/src/developer/TIKE/dialogs/Keyman.Developer.UI.UfrmMessageDlgWithSave.dfm
@@ -0,0 +1,60 @@
+inherited frmMessageDlgWithSave: TfrmMessageDlgWithSave
+ Left = 192
+ Top = 114
+ BorderIcons = [biSystemMenu]
+ BorderStyle = bsDialog
+ Caption = 'Keyman Developer'
+ ClientHeight = 133
+ ClientWidth = 393
+ Font.Name = 'MS Sans Serif'
+ Position = poScreenCenter
+ ExplicitWidth = 399
+ ExplicitHeight = 162
+ PixelsPerInch = 96
+ TextHeight = 13
+ object lblMessage: TLabel
+ Left = 8
+ Top = 8
+ Width = 377
+ Height = 58
+ AutoSize = False
+ WordWrap = True
+ end
+ object cmdYes: TButton
+ Left = 65
+ Top = 100
+ Width = 73
+ Height = 25
+ Caption = '&Yes'
+ Default = True
+ ModalResult = 6
+ TabOrder = 1
+ end
+ object cmdNo: TButton
+ Left = 160
+ Top = 100
+ Width = 73
+ Height = 25
+ Caption = '&No'
+ ModalResult = 7
+ TabOrder = 2
+ end
+ object cmdCancel: TButton
+ Left = 255
+ Top = 100
+ Width = 73
+ Height = 25
+ Cancel = True
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 3
+ end
+ object chkSave: TCheckBox
+ Left = 8
+ Top = 72
+ Width = 377
+ Height = 17
+ Caption = '&Remember this choice for next time'
+ TabOrder = 0
+ end
+end
diff --git a/windows/src/developer/TIKE/dialogs/Keyman.Developer.UI.UfrmMessageDlgWithSave.pas b/windows/src/developer/TIKE/dialogs/Keyman.Developer.UI.UfrmMessageDlgWithSave.pas
new file mode 100644
index 0000000000..5514f76964
--- /dev/null
+++ b/windows/src/developer/TIKE/dialogs/Keyman.Developer.UI.UfrmMessageDlgWithSave.pas
@@ -0,0 +1,63 @@
+(*
+ Copyright (C) 2020 SIL International.
+
+ Show a message dialog with a check box to 'remember Yes choice
+ for next time'.
+*)
+unit Keyman.Developer.UI.UfrmMessageDlgWithSave;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, UfrmTike;
+
+type
+ TfrmMessageDlgWithSave = class(TTikeForm)
+ lblMessage: TLabel;
+ cmdYes: TButton;
+ cmdNo: TButton;
+ cmdCancel: TButton;
+ chkSave: TCheckBox;
+ private
+ FHelpTopic: string;
+ protected
+ function GetHelpTopic: string; override;
+ public
+ // Always has Yes, No and Cancel
+ class function Execute(const Message, SaveCaption, HelpTopic: string; DefaultSaveChecked: Boolean; var SaveOption: Boolean): TModalResult;
+ end;
+
+implementation
+
+uses
+ Keyman.Developer.System.HelpTopics,
+
+ KeymanDeveloperOptions;
+
+{$R *.DFM}
+
+class function TfrmMessageDlgWithSave.Execute(const Message, SaveCaption, HelpTopic: string;
+ DefaultSaveChecked: Boolean; var SaveOption: Boolean): TModalResult;
+var
+ dlg: TfrmMessageDlgWithSave;
+begin
+ dlg := TfrmMessageDlgWithSave.Create(Application);
+ try
+ dlg.chkSave.Checked := DefaultSaveChecked;
+ dlg.chkSave.Caption := SaveCaption;
+ dlg.lblMessage.Caption := Message;
+ dlg.FHelpTopic := HelpTopic;
+ Result := dlg.ShowModal;
+ SaveOption := dlg.chkSave.Checked;
+ finally
+ dlg.Free;
+ end;
+end;
+
+function TfrmMessageDlgWithSave.GetHelpTopic: string;
+begin
+ Result := FHelpTopic;
+end;
+
+end.
diff --git a/windows/src/developer/TIKE/dialogs/UfrmOptions.dfm b/windows/src/developer/TIKE/dialogs/UfrmOptions.dfm
index 856b16b4e7..6b59d066e5 100644
--- a/windows/src/developer/TIKE/dialogs/UfrmOptions.dfm
+++ b/windows/src/developer/TIKE/dialogs/UfrmOptions.dfm
@@ -24,10 +24,6 @@ inherited frmOptions: TfrmOptions
object tabGeneral: TTabSheet
Caption = 'General'
ImageIndex = 2
- ExplicitLeft = 0
- ExplicitTop = 0
- ExplicitWidth = 0
- ExplicitHeight = 0
object cmdProxySettings: TButton
Left = 8
Top = 209
@@ -118,13 +114,25 @@ inherited frmOptions: TfrmOptions
OnClick = cmdBrowseDefaultProjectPathClick
end
end
+ object chkAutoSaveBeforeCompiling: TCheckBox
+ Left = 152
+ Top = 182
+ Width = 218
+ Height = 17
+ Caption = '&Automatically save before compiling'
+ TabOrder = 7
+ end
+ object chkOSKAutoSaveBeforeImporting: TCheckBox
+ Left = 152
+ Top = 205
+ Width = 218
+ Height = 17
+ Caption = '&Automatically save before importing OSK'
+ TabOrder = 8
+ end
end
object tabEditor: TTabSheet
Caption = 'Editor'
- ExplicitLeft = 0
- ExplicitTop = 0
- ExplicitWidth = 0
- ExplicitHeight = 0
object gbEditorSpaces: TGroupBox
Left = 11
Top = 16
@@ -244,15 +252,11 @@ inherited frmOptions: TfrmOptions
object tabDebugger: TTabSheet
Caption = 'Debugger'
ImageIndex = 3
- ExplicitLeft = 0
- ExplicitTop = 0
- ExplicitWidth = 0
- ExplicitHeight = 0
object gbDebuggerSettings: TGroupBox
Left = 8
- Top = 8
+ Top = 7
Width = 313
- Height = 129
+ Height = 146
Caption = 'Settings'
TabOrder = 0
object chkUseOldDebugger: TCheckBox
@@ -289,16 +293,24 @@ inherited frmOptions: TfrmOptions
end
object chkDebuggerAutoRecompile: TCheckBox
Left = 8
- Top = 100
+ Top = 101
Width = 289
Height = 17
Caption = '&Automatically recompile if no debug information available'
TabOrder = 4
end
+ object chkDebuggerAutoResetBeforeCompiling: TCheckBox
+ Left = 8
+ Top = 122
+ Width = 250
+ Height = 17
+ Caption = '&Automatically reset debugger before recompiling'
+ TabOrder = 5
+ end
end
object gbWebHost: TGroupBox
Left = 8
- Top = 143
+ Top = 159
Width = 313
Height = 89
Caption = 'Web Host'
@@ -324,10 +336,6 @@ inherited frmOptions: TfrmOptions
object tabCharMap: TTabSheet
Caption = 'Character Map'
ImageIndex = 4
- ExplicitLeft = 0
- ExplicitTop = 0
- ExplicitWidth = 0
- ExplicitHeight = 0
object gbCharMapCharacterLookups: TGroupBox
Left = 8
Top = 8
@@ -442,7 +450,7 @@ inherited frmOptions: TfrmOptions
Top = 403
end
object dlgBrowseDefaultProjectPath: TBrowse4Folder
- InitialDir = ''
+ InitialDir = 'C:\Users\mcdurdin\Desktop\'
Root = Desktop
Title = 'Browse for Default Project Folder'
Left = 176
diff --git a/windows/src/developer/TIKE/dialogs/UfrmOptions.pas b/windows/src/developer/TIKE/dialogs/UfrmOptions.pas
index c687525f76..cea5040614 100644
--- a/windows/src/developer/TIKE/dialogs/UfrmOptions.pas
+++ b/windows/src/developer/TIKE/dialogs/UfrmOptions.pas
@@ -98,6 +98,9 @@ type
editDefaultProjectPath: TEdit;
cmdBrowseDefaultProjectPath: TButton;
dlgBrowseDefaultProjectPath: TBrowse4Folder;
+ chkAutoSaveBeforeCompiling: TCheckBox;
+ chkOSKAutoSaveBeforeImporting: TCheckBox;
+ chkDebuggerAutoResetBeforeCompiling: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure cmdOKClick(Sender: TObject);
procedure cmdDefaultFontClick(Sender: TObject);
@@ -178,6 +181,10 @@ begin
chkDebuggerShowStoreOffset.Checked := DebuggerShowStoreOffset;
chkDebuggerAutoRecompile.Checked := DebuggerAutoRecompileWithDebugInfo;
+ chkDebuggerAutoResetBeforeCompiling.Checked := DebuggerAutoResetBeforeCompiling;
+ chkAutoSaveBeforeCompiling.Checked := AutoSaveBeforeCompiling;
+ chkOSKAutoSaveBeforeImporting.Checked := OSKAutoSaveBeforeImporting;
+
chkCharMapAutoLookup.Checked := CharMapAutoLookup;
chkCharMapDisableDatabaseLookups.Checked := CharMapDisableDatabaseLookups;
@@ -272,6 +279,10 @@ begin
DebuggerShowStoreOffset := chkDebuggerShowStoreOffset.Checked;
DebuggerAutoRecompileWithDebugInfo := chkDebuggerAutoRecompile.Checked;
+ DebuggerAutoResetBeforeCompiling := chkDebuggerAutoResetBeforeCompiling.Checked;
+ AutoSaveBeforeCompiling := chkAutoSaveBeforeCompiling.Checked;
+ OSKAutoSaveBeforeImporting := chkOSKAutoSaveBeforeImporting.Checked;
+
WebHostDefaultPort := StrToIntDef(editWebHostDefaultPort.Text, 8008); // I4021
CharMapAutoLookup := chkCharMapAutoLookup.Checked;
diff --git a/windows/src/developer/TIKE/main/KeymanDeveloperOptions.pas b/windows/src/developer/TIKE/main/KeymanDeveloperOptions.pas
index 6cbc7a8efb..20e6fb8a50 100644
--- a/windows/src/developer/TIKE/main/KeymanDeveloperOptions.pas
+++ b/windows/src/developer/TIKE/main/KeymanDeveloperOptions.pas
@@ -59,6 +59,9 @@ type
FEditorTheme: string;
FFix183_LadderLength: Integer;
FDefaultProjectPath: string;
+ FDebuggerAutoResetBeforeCompiling: Boolean;
+ FAutoSaveBeforeCompiling: Boolean;
+ FOSKAutoSaveBeforeImporting: Boolean;
procedure CloseRegistry;
procedure OpenRegistry;
function regReadString(const nm, def: string): string;
@@ -88,6 +91,9 @@ type
property DebuggerSingleStepAfterBreak: Boolean read FDebuggerSingleStepAfterBreak write FDebuggerSingleStepAfterBreak;
property DebuggerShowStoreOffset: Boolean read FDebuggerShowStoreOffset write FDebuggerShowStoreOffset;
property DebuggerAutoRecompileWithDebugInfo: Boolean read FDebuggerAutoRecompileWithDebugInfo write FDebuggerAutoRecompileWithDebugInfo;
+ property DebuggerAutoResetBeforeCompiling: Boolean read FDebuggerAutoResetBeforeCompiling write FDebuggerAutoResetBeforeCompiling;
+ property AutoSaveBeforeCompiling: Boolean read FAutoSaveBeforeCompiling write FAutoSaveBeforeCompiling;
+ property OSKAutoSaveBeforeImporting: Boolean read FOSKAutoSaveBeforeImporting write FOSKAutoSaveBeforeImporting;
property WebHostDefaultPort: Integer read FWebHostDefaultPort write FWebHostDefaultPort; // I4021
@@ -181,6 +187,9 @@ begin
FDebuggerSingleStepAfterBreak := regReadBool(SRegValue_IDEOptDebuggerSingleStepAfterBreak, False);
FDebuggerShowStoreOffset := regReadBool(SRegValue_IDEOptDebuggerShowStoreOffset, False);
FDebuggerAutoRecompileWithDebugInfo := regReadBool(SRegValue_IDEOptDebuggerAutoRecompileWithDebugInfo, False);
+ FDebuggerAutoResetBeforeCompiling := regReadBool(SRegValue_IDEOptDebuggerAutoResetBeforeCompiling, False);
+ FAutoSaveBeforeCompiling := regReadBool(SRegValue_IDEOptAutoSaveBeforeCompiling, False);
+ FOSKAutoSaveBeforeImporting := regReadBool(SRegValue_IDEOptOSKAutoSaveBeforeImporting, False);
FWebHostDefaultPort := regReadInt(SRegValue_IDEOptWebHostPort, 8008);
@@ -224,8 +233,14 @@ begin
regWriteBool(SRegValue_IDEOptDebuggerShowStoreOffset, FDebuggerShowStoreOffset);
regWriteBool(SRegValue_IDEOptDebuggerAutoRecompileWithDebugInfo, FDebuggerAutoRecompileWithDebugInfo);
+ regWriteBool(SRegValue_IDEOptDebuggerAutoResetBeforeCompiling, FDebuggerAutoResetBeforeCompiling);
+ regWriteBool(SRegValue_IDEOptAutoSaveBeforeCompiling, FAutoSaveBeforeCompiling);
+ regWriteBool(SRegValue_IDEOptOSKAutoSaveBeforeImporting, FOSKAutoSaveBeforeImporting);
+
+
regWriteInt(SRegValue_IDEOptWebHostPort, FWebHostDefaultPort);
+
regWriteBool(SRegValue_IDEOptCharMapDisableDatabaseLookups, FCharMapDisableDatabaseLookups);
regWriteBool(SRegValue_IDEOptCharMapAutoLookup, FCharMapAutoLookup);
diff --git a/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.kmnProjectFileUI.pas b/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.kmnProjectFileUI.pas
index 8b02c1301d..a555d81bfd 100644
--- a/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.kmnProjectFileUI.pas
+++ b/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.kmnProjectFileUI.pas
@@ -60,6 +60,8 @@ uses
Vcl.Graphics,
Vcl.Controls,
dmActionsMain,
+
+ Keyman.Developer.UI.UfrmMessageDlgWithSave,
UfrmMain,
UfrmFontHelper,
UfrmKeymanWizard,
@@ -92,6 +94,8 @@ begin
end;
function TkmnProjectFileUI.CompileKeyboard(FSilent: Boolean): Boolean;
+var
+ FSave: Boolean;
begin
Result := False;
@@ -99,8 +103,21 @@ begin
begin
if not FSilent then
begin
- if MessageDlg('The keyboard file has been modified. You must save before compiling.'+#13#10+'Save the keyboard and continue?',
- mtConfirmation, mbOkCancel, 0) = mrCancel then Exit;
+ if not FKeymanDeveloperOptions.AutoSaveBeforeCompiling then
+ begin
+ if TfrmMessageDlgWithSave.Execute(
+ 'The keyboard file has been modified. You must save before compiling.'+#13#10#13#10+
+ 'Save the keyboard and continue?',
+ 'Always save automatically before compiling',
+ '', True, FSave) in [mrNo, mrCancel] then
+ Exit(False);
+ if FSave then
+ begin
+ FKeymanDeveloperOptions.AutoSaveBeforeCompiling := True;
+ FKeymanDeveloperOptions.Write;
+ end;
+ end;
+
if not modActionsMain.actFileSave.Execute then Exit;
end
else
diff --git a/windows/src/global/delphi/general/RegistryKeys.pas b/windows/src/global/delphi/general/RegistryKeys.pas
index 22bd7a5472..84b767e546 100644
--- a/windows/src/global/delphi/general/RegistryKeys.pas
+++ b/windows/src/global/delphi/general/RegistryKeys.pas
@@ -377,6 +377,10 @@ const
SRegValue_IDEOptDebuggerShowStoreOffset = 'debugger show store offset'; // CU
SRegValue_IDEOptDebuggerAutoRecompileWithDebugInfo = 'debugger recompile with debug info'; // CU
+ SRegValue_IDEOptDebuggerAutoResetBeforeCompiling = 'debugger auto reset before compilng'; // CU
+ SRegValue_IDEOptAutoSaveBeforeCompiling = 'auto save before compiling'; // CU
+ SRegValue_IDEOptOSKAutoSaveBeforeImporting = 'osk auto save before importing'; // CU
+
SRegValue_IDEOptWebHostPort = 'web host port'; // I4021
SRegValue_IDEOptCharMapDisableDatabaseLookups = 'char map disable database lookups'; // CU