diff --git a/config-serializer/config-items/KeyAction.ts b/config-serializer/config-items/KeyAction.ts index 4f200fee..adecf42b 100644 --- a/config-serializer/config-items/KeyAction.ts +++ b/config-serializer/config-items/KeyAction.ts @@ -2,9 +2,11 @@ class KeyAction { static fromJsObject(jsObject: any): KeyAction { switch (jsObject.keyActionType) { - case KeystrokeAction.actionTypeString: + case KeystrokeAction.keyActionTypeString: return new KeystrokeAction().fromJsObject(jsObject); - case KeyActionNone.actionTypeString: + case MouseAction.keyActionTypeString: + return new MouseAction().fromJsObject(jsObject); + case KeyActionNone.keyActionTypeString: return new KeyActionNone().fromJsObject(jsObject); default: throw 'Invalid KeyAction.keyActionType: "${jsObject.actionType}"'; @@ -17,7 +19,9 @@ class KeyAction { if (KeystrokeAction.isScancodeValid(keyActionFirstByte)) { return new KeystrokeAction().fromBinary(buffer); - } else if (keyActionFirstByte === KeyActionNone.keyActionNoneId) { + } else if (keyActionFirstByte === MouseAction.keyActionId) { + return new MouseAction().fromBinary(buffer); + } else if (keyActionFirstByte === KeyActionNone.keyActionId) { return new KeyActionNone().fromBinary(buffer); } else { throw 'Invalid KeyAction first byte "${keyActionFirstByte}"'; diff --git a/config-serializer/config-items/KeyActionNone.ts b/config-serializer/config-items/KeyActionNone.ts index 3ee0871e..7f13c9e2 100644 --- a/config-serializer/config-items/KeyActionNone.ts +++ b/config-serializer/config-items/KeyActionNone.ts @@ -1,11 +1,11 @@ class KeyActionNone extends KeyAction implements Serializable { - static actionTypeString = 'none'; - static keyActionNoneId = 0; + static keyActionTypeString = 'none'; + static keyActionId = 0; static keyActionNoneParam = 0; fromJsObject(jsObject: any): KeyActionNone { - if (jsObject.keyActionType !== KeyActionNone.actionTypeString) { + if (jsObject.keyActionType !== KeyActionNone.keyActionTypeString) { throw 'Invalid KeyActionNone.keyActionType: "${jsObject.keyActionType}"'; } return this; @@ -13,7 +13,7 @@ class KeyActionNone extends KeyAction implements Serializable { fromBinary(buffer: UhkBuffer): KeyActionNone { let keyActionId = buffer.readUInt8(); - if (keyActionId !== KeyActionNone.keyActionNoneId) { + if (keyActionId !== KeyActionNone.keyActionId) { throw 'Invalid KeyActionNone.id: ${keyActionId}'; } @@ -27,12 +27,12 @@ class KeyActionNone extends KeyAction implements Serializable { toJsObject(): any { return { - keyActionType: KeyActionNone.actionTypeString + keyActionType: KeyActionNone.keyActionTypeString }; } toBinary(buffer: UhkBuffer) { - buffer.writeUInt8(KeyActionNone.keyActionNoneId); + buffer.writeUInt8(KeyActionNone.keyActionId); buffer.writeUInt8(KeyActionNone.keyActionNoneParam); } } diff --git a/config-serializer/config-items/KeystrokeAction.ts b/config-serializer/config-items/KeystrokeAction.ts index 2ac7cde1..4241d2f3 100644 --- a/config-serializer/config-items/KeystrokeAction.ts +++ b/config-serializer/config-items/KeystrokeAction.ts @@ -1,13 +1,13 @@ class KeystrokeAction extends KeyAction implements Serializable { - static actionTypeString = 'keystroke'; + static keyActionTypeString = 'keystroke'; static firstValidScancode = 1; static lastValidScancode = 231; _scancode: number; modifierMask: number; - get scancode() { + get scancode(): number { return this._scancode; } @@ -37,7 +37,7 @@ class KeystrokeAction extends KeyAction implements Serializable toJsObject(): any { return { - keyActionType: KeystrokeAction.actionTypeString, + keyActionType: KeystrokeAction.keyActionTypeString, scancode: this.scancode, modifierMask: this.modifierMask }; diff --git a/config-serializer/config-items/MouseAction.ts b/config-serializer/config-items/MouseAction.ts new file mode 100644 index 00000000..81594ef1 --- /dev/null +++ b/config-serializer/config-items/MouseAction.ts @@ -0,0 +1,68 @@ +enum MouseActionParam { + leftClick, + middleClick, + rightClick, + moveUp, + moveDown, + moveLeft, + moveRight, + scrollUp, + scrollDown, + scrollLeft, + scrollRight, + accelerate, + decelerate +} + +class MouseAction extends KeyAction implements Serializable { + static keyActionTypeString = 'mouse'; + static keyActionId = 244; + + _mouseAction: MouseActionParam; + + get mouseAction(): number { + return this._mouseAction; + } + + set mouseAction(mouseAction) { + if (!MouseAction.isMouseActionValid(mouseAction)) { + throw 'Invalid MouseAction.mouseAction: ${mouseAction}'; + } + this._mouseAction = mouseAction; + } + + static isMouseActionValid(keyActionParam): boolean { + return MouseActionParam[keyActionParam] !== undefined; + } + + fromJsObject(jsObject: any): MouseAction { + this.mouseAction = jsObject.mouseAction; + return this; + } + + fromBinary(buffer: UhkBuffer): MouseAction { + let keyActionId = buffer.readUInt8(); + if (keyActionId !== MouseAction.keyActionId) { + throw 'Invalid MouseAction.id: ${keyActionId}'; + } + + let keyActionParam = buffer.readUInt8(); + if (!MouseAction.isMouseActionValid(keyActionParam)) { + throw 'Invalid MouseAction.param: ${keyActionParam}'; + } + + return this; + } + + toJsObject(): any { + return { + keyActionType: MouseAction.keyActionTypeString, + mouseAction: MouseActionParam[this.mouseAction] + }; + } + + toBinary(buffer: UhkBuffer) { + buffer.writeUInt8(MouseAction.keyActionId); + buffer.writeUInt8(this.mouseAction); + } +} diff --git a/config-serializer/config-items/config-items.ts b/config-serializer/config-items/config-items.ts index ace84e3a..515bb8ba 100644 --- a/config-serializer/config-items/config-items.ts +++ b/config-serializer/config-items/config-items.ts @@ -1,3 +1,4 @@ /// /// +/// /// diff --git a/config-serializer/serializeConfig.ts b/config-serializer/serializeConfig.ts index dda5141b..bd42a2db 100644 --- a/config-serializer/serializeConfig.ts +++ b/config-serializer/serializeConfig.ts @@ -22,7 +22,6 @@ let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_CTRL = 240; let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_SHIFT = 241; let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_ALT = 242; let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_SUPER = 243; -let KEY_ACTION_ID_MOUSE = 244; let KEY_ACTION_ID_PLAY_MACRO = 245; let KEY_ACTION_ID_SWITCH_KEYMAP = 246; let KEY_ACTION_ID_NONE = 255; @@ -34,19 +33,6 @@ let SWITCH_LAYER_TOGGLE = 0x80; let NONE_ACTION_PADDING = 0; -let MOUSE_ACTION_ID_LEFT_CLICK = 0; -let MOUSE_ACTION_ID_MIDDLE_CLICK = 1; -let MOUSE_ACTION_ID_RIGHT_CLICK = 2; -let MOUSE_ACTION_ID_MOVE_UP = 3; -let MOUSE_ACTION_ID_MOVE_DOWN = 4; -let MOUSE_ACTION_ID_MOVE_LEFT = 5; -let MOUSE_ACTION_ID_MOVE_RIGHT = 6; -let MOUSE_ACTION_ID_SCROLL_UP = 7; -let MOUSE_ACTION_ID_SCROLL_DOWN = 8; -let MOUSE_ACTION_ID_SCROLL_LEFT = 9; -let MOUSE_ACTION_ID_SCROLL_RIGHT = 10; -let MOUSE_ACTION_ID_ACCELERATE = 11; -let MOUSE_ACTION_ID_DECELERATE = 12; function serializeKeyActions(keyActionsParam) { keyActionsParam.forEach(function(keyAction) { @@ -60,9 +46,6 @@ function serializeKeyAction(keyAction) { case 'dualRoleKeystroke': serializeDualRoleKeyAction(keyAction); break; - case 'mouse': - serializeMouseAction(keyAction); - break; case 'playMacro': serializeMacroAction(keyAction); break; @@ -94,25 +77,6 @@ function serializeDualRoleKeyAction(dualRoleKeyAction) { writer.writeUInt8(dualRoleKeyAction.scancode); } -function serializeMouseAction(mouseAction) { - writer.writeUInt8(KEY_ACTION_ID_MOUSE); - writer.writeUInt8({ - leftClick : MOUSE_ACTION_ID_LEFT_CLICK, - middleClick: MOUSE_ACTION_ID_MIDDLE_CLICK, - rightClick : MOUSE_ACTION_ID_RIGHT_CLICK, - moveUp : MOUSE_ACTION_ID_MOVE_UP, - moveDown : MOUSE_ACTION_ID_MOVE_DOWN, - moveLeft : MOUSE_ACTION_ID_MOVE_LEFT, - moveRight : MOUSE_ACTION_ID_MOVE_RIGHT, - scrollUp : MOUSE_ACTION_ID_SCROLL_UP, - scrollDown : MOUSE_ACTION_ID_SCROLL_DOWN, - scrollLeft : MOUSE_ACTION_ID_SCROLL_LEFT, - scrollRight: MOUSE_ACTION_ID_SCROLL_RIGHT, - accelerate : MOUSE_ACTION_ID_ACCELERATE, - decelerate : MOUSE_ACTION_ID_DECELERATE - }[mouseAction.mouseAction]); -} - function serializeMacroAction(macroAction) { writer.writeUInt8(KEY_ACTION_ID_PLAY_MACRO); writer.writeUInt8(macroAction.macroId);