spiegel-keyman/windows/src/developer/TIKE/debug/UfrmDebugStatus_Options.pas

203 lines
5.1 KiB
ObjectPascal

unit UfrmDebugStatus_Options;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, UfrmDebugStatus_Child, Vcl.StdCtrls;
type
TfrmDebugStatus_Options = class(TfrmDebugStatus_Child)
gbPlatform: TGroupBox;
lblPlatformOS: TLabel;
lblPlatformUI: TLabel;
lblPlatformFormFactor: TLabel;
lblPlatformApplication: TLabel;
lblPlatformBrowser: TLabel;
cbPlatformOS: TComboBox;
cbPlatformUI: TComboBox;
cbPlatformFormFactor: TComboBox;
cbPlatformApplication: TComboBox;
cbPlatformBrowser: TComboBox;
procedure cbPlatformClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure SetPlatform;
procedure EnableControlsAndSetValues;
protected
procedure DebugKeyboardChanged; override;
end;
implementation
{$R *.dfm}
// Matches https://help.keyman.com/developer/language/reference/platform
const
PlatformUI: array[0..1] of string = (
'Touch',
'Hardware'
);
PLATFORM_UI_TOUCH = 0;
PLATFORM_UI_HARDWARE = 1;
PlatformOS: array[0..4] of string = (
'Windows',
'macOS',
'Linux',
'Android',
'iOS'
);
PLATFORM_OS_WINDOWS = 0;
PLATFORM_OS_MAC = 1;
PLATFORM_OS_LINUX = 2;
PLATFORM_OS_ANDROID = 3;
PLATFORM_OS_IOS = 4;
PlatformFormFactor_Desktop: array[0..0] of string = (
'Desktop'
);
PLATFORM_FF_DESKTOP_DESKTOP = 0;
PlatformFormFactor_NonDesktop: array[0..1] of string = (
'Tablet',
'Phone'
);
PLATFORM_FF_NONDESKTOP_TABLET = 1;
PLATFORM_FF_NONDESKTOP_PHONE = 2;
PlatformApplication: array[0..1] of string = (
'Native',
'Web'
);
PLATFORM_APP_NATIVE = 0;
PLATFORM_APP_WEB = 1;
PlatformBrowser: array[0..6] of string = (
'',
'IE',
'Chrome',
'Firefox',
'Safari',
'Opera',
'Edge'
);
PLATFORM_BROWSER_NA = 0;
PLATFORM_BROWSER_IE = 1;
PLATFORM_BROWSER_CHROME = 2;
PLATFORM_BROWSER_FIREFOX = 3;
PLATFORM_BROWSER_SAFARI = 4;
PLATFORM_BROWSER_OPERA = 5;
PLATFORM_BROWSER_EDGE = 6;
procedure TfrmDebugStatus_Options.cbPlatformClick(Sender: TObject);
begin
EnableControlsAndSetValues;
SetPlatform;
memoDebug.SetFocus;
end;
procedure TfrmDebugStatus_Options.DebugKeyboardChanged;
begin
if debugkeyboard = nil then
Exit;
EnableControlsAndSetValues;
SetPlatform;
end;
procedure Fill(cb: TComboBox; const a: array of string);
var
s: string;
n: Integer;
begin
n := cb.ItemIndex;
cb.Clear;
cb.Items.BeginUpdate;
for s in a do
cb.Items.Add(s);
cb.Items.EndUpdate;
if (n < cb.Items.Count) and (n > 0)
then cb.ItemIndex := n
else cb.ItemIndex := 0;
end;
procedure TfrmDebugStatus_Options.EnableControlsAndSetValues;
begin
// Here we enable the specific allowable combinations of various
// platform variables. These may change over time, e.g. if we eventually
// support touch on Windows
case cbPlatformOS.ItemIndex of
PLATFORM_OS_WINDOWS, PLATFORM_OS_MAC, PLATFORM_OS_LINUX:
begin
cbPlatformUI.ItemIndex := PLATFORM_UI_HARDWARE;
cbPlatformUI.Enabled := False;
Fill(cbPlatformFormFactor, PlatformFormFactor_Desktop);
cbPlatformFormFactor.ItemIndex := PLATFORM_FF_DESKTOP_DESKTOP;
cbPlatformFormFactor.Enabled := False;
end;
PLATFORM_OS_IOS:
begin
cbPlatformUI.ItemIndex := PLATFORM_UI_HARDWARE;
cbPlatformUI.Enabled := False;
Fill(cbPlatformFormFactor, PlatformFormFactor_NonDesktop);
if cbPlatformFormFactor.ItemIndex < 0 then
cbPlatformFormFactor.ItemIndex := PLATFORM_FF_NONDESKTOP_TABLET;
cbPlatformFormFactor.Enabled := True;
end;
PLATFORM_OS_ANDROID:
begin
cbPlatformUI.Enabled := True;
Fill(cbPlatformFormFactor, PlatformFormFactor_NonDesktop);
if cbPlatformFormFactor.ItemIndex < 0 then
cbPlatformFormFactor.ItemIndex := PLATFORM_FF_NONDESKTOP_TABLET;
cbPlatformFormFactor.Enabled := True;
end;
end;
if cbPlatformApplication.ItemIndex = PLATFORM_APP_NATIVE then
begin
cbPlatformBrowser.Enabled := False;
cbPlatformBrowser.ItemIndex := PLATFORM_BROWSER_NA;
end
else
begin
cbPlatformBrowser.Enabled := True;
if cbPlatformBrowser.ItemIndex = PLATFORM_BROWSER_NA then
cbPlatformBrowser.ItemIndex := PLATFORM_BROWSER_CHROME;
end;
end;
procedure TfrmDebugStatus_Options.FormCreate(Sender: TObject);
begin
inherited;
Fill(cbPlatformOS, PlatformOS);
Fill(cbPlatformUI, PlatformUI);
// cbPlatformFormFactor is filled based on state of cbPlatformOS
Fill(cbPlatformApplication, PlatformApplication);
Fill(cbPlatformBrowser, PlatformBrowser);
end;
procedure TfrmDebugStatus_Options.SetPlatform;
var
p: string;
begin
p := cbPlatformOS.Text;
if p.StartsWith('mac') then
// We need to allow all three synonyms here, because the compiler does not
// validate these platform strings, but they are defined as valid
// alternatives
p := 'mac macos macosx';
p := p + ' ' +
cbPlatformUI.Text + ' ' +
cbPlatformFormFactor.Text + ' ' +
cbPlatformApplication.Text + ' ' +
cbPlatformBrowser.Text;
DebugCore.KMXPlatform := p.ToLower;
end;
end.