Files
agent/config-serializer/config-items/KeyAction.ts

57 lines
2.2 KiB
TypeScript

// A KeyAction is composed of 2 bytes in the RAM of the UHK: id byte, and param byte.
// Id denotes the subclass of the KeyAction and param is subclass-specific.
enum KeyActionId {
NoneAction = 0,
KeyStrokeActionFirst = TypeChecker.firstValidScancode, // 1
// Intermediary scancodes = 2 to 230
KeyStrokeActionLast = TypeChecker.lastValidScancode, // 231
SwitchLayerAction = 232,
SwitchKeymapAction = 233,
MouseAction = 234,
PlayMacroAction = 235,
DualRoleActionLeftCtrl = 236,
DualRoleActionLeftShift = 237,
DualRoleActionLeftAlt = 238,
DualRoleActionLeftSuper = 239,
DualRoleActionRightCtrl = 240,
DualRoleActionRightShift = 241,
DualRoleActionRightAlt = 242,
DualRoleActionRightSuper = 243,
DualRoleActionMod = 244,
DualRoleActionFn = 245,
DualRoleActionMouse = 246
// Let's leave space for further layers - additional actions should descend from 255
}
class KeyAction {
static fromJsObject(jsObject: any): KeyAction {
switch (jsObject.keyActionType) {
case KeystrokeAction.keyActionTypeString:
return new KeystrokeAction().fromJsObject(jsObject);
case MouseAction.keyActionTypeString:
return new MouseAction().fromJsObject(jsObject);
case NoneAction.keyActionTypeString:
return new NoneAction().fromJsObject(jsObject);
default:
throw 'Invalid KeyAction.keyActionType: "${jsObject.actionType}"';
}
}
static fromBinary(buffer: UhkBuffer): KeyAction {
let keyActionFirstByte = buffer.readUInt8();
buffer.backtrack();
if (TypeChecker.isScancodeValid(keyActionFirstByte)) {
return new KeystrokeAction().fromBinary(buffer);
} else if (keyActionFirstByte === KeyActionId.MouseAction) {
return new MouseAction().fromBinary(buffer);
} else if (keyActionFirstByte === KeyActionId.NoneAction) {
return new NoneAction().fromBinary(buffer);
} else {
throw 'Invalid KeyAction first byte "${keyActionFirstByte}"';
}
}
}