mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 08:25:32 +00:00
100 lines
2.5 KiB
ObjectPascal
100 lines
2.5 KiB
ObjectPascal
(*
|
|
Name: ExtShiftState
|
|
Copyright: Copyright (C) SIL International.
|
|
Documentation:
|
|
Description:
|
|
Create Date: 23 Aug 2006
|
|
|
|
Modified Date: 15 Jan 2007
|
|
Authors: mcdurdin
|
|
Related Files:
|
|
Dependencies:
|
|
|
|
Bugs:
|
|
Todo:
|
|
Notes:
|
|
History: 23 Aug 2006 - mcdurdin - Initial version
|
|
28 Sep 2006 - mcdurdin - Added ext shift state validation
|
|
15 Jan 2007 - mcdurdin - Add ExtShiftStateToString function
|
|
*)
|
|
unit ExtShiftState;
|
|
|
|
interface
|
|
|
|
type
|
|
TExtShiftStateValue = (essShift, essCtrl, essAlt, essLCtrl, essRCtrl, essLAlt, essRAlt);
|
|
TExtShiftState = set of TExtShiftStateValue;
|
|
|
|
const
|
|
ValidExtShiftStates: array[0..13] of TExtShiftState = (
|
|
[],
|
|
[essShift],
|
|
[essCtrl],
|
|
[essShift, essCtrl],
|
|
[essAlt],
|
|
[essShift, essAlt],
|
|
[essCtrl, essAlt],
|
|
[essShift, essCtrl, essAlt],
|
|
[essRCtrl],
|
|
[essShift, essRCtrl],
|
|
[essRAlt],
|
|
[essShift, essRAlt],
|
|
[essRCtrl, essRAlt],
|
|
[essShift, essRCtrl, essRAlt]);
|
|
|
|
function CleanExtShiftState(Value: TExtShiftState): TExtShiftState;
|
|
function ValidExtShiftStateIndex(Value: TExtShiftState): Integer;
|
|
function ExtShiftStateToString(Value: TExtShiftState): string;
|
|
|
|
implementation
|
|
|
|
uses
|
|
System.TypInfo;
|
|
|
|
function CleanExtShiftState(Value: TExtShiftState): TExtShiftState;
|
|
begin
|
|
if essRCtrl in Value then
|
|
begin
|
|
Exclude(Value, essLCtrl);
|
|
Exclude(Value, essCtrl);
|
|
if essLAlt in Value then Value := Value + [essRAlt] - [essLAlt];
|
|
if essAlt in Value then Value := Value + [essRAlt] - [essAlt];
|
|
end;
|
|
if essRAlt in Value then
|
|
begin
|
|
Exclude(Value, essLAlt);
|
|
Exclude(Value, essAlt);
|
|
if essLCtrl in Value then Value := Value + [essRCtrl] - [essLCtrl];
|
|
if essCtrl in Value then Value := Value + [essRCtrl] - [essCtrl];
|
|
end;
|
|
Result := Value;
|
|
end;
|
|
|
|
function ValidExtShiftStateIndex(Value: TExtShiftState): Integer;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
Value := CleanExtShiftState(Value);
|
|
for i := Low(ValidExtShiftStates) to High(ValidExtShiftStates) do
|
|
if ValidExtShiftStates[i] = Value then
|
|
begin
|
|
Result := i;
|
|
Exit;
|
|
end;
|
|
Result := 0;
|
|
end;
|
|
|
|
function ExtShiftStateToString(Value: TExtShiftState): string;
|
|
var
|
|
i: TExtShiftStateValue;
|
|
begin
|
|
Result := '';
|
|
for I := Low(TExtShiftStateValue) to High(TExtShiftStateValue) do
|
|
if I in Value then
|
|
begin
|
|
if Result <> '' then Result := Result + ', ';
|
|
Result := Result + GetEnumName(TypeInfo(TExtShiftStateValue), Ord(I));
|
|
end;
|
|
end;
|
|
|
|
end.
|