Merge (Hold|Press|Release)(Key|Modifiers) into KeyMacroAction (#99)

This commit is contained in:
József Farkas
2016-09-07 09:02:10 +02:00
committed by GitHub
parent 858fa0d87c
commit 8a76da8df5
13 changed files with 198 additions and 350 deletions

View File

@@ -5,15 +5,15 @@ import { Component, Input, OnChanges, OnInit } from '@angular/core';
import {KeyModifiers} from '../../../../config-serializer/config-items/KeyModifiers'; import {KeyModifiers} from '../../../../config-serializer/config-items/KeyModifiers';
import { import {
DelayMacroAction, DelayMacroAction,
HoldModifiersMacroAction, KeyMacroAction,
MacroAction, MacroAction,
MoveMouseMacroAction, MoveMouseMacroAction,
PressModifiersMacroAction,
ReleaseModifiersMacroAction,
ScrollMouseMacroAction, ScrollMouseMacroAction,
TextMacroAction TextMacroAction
} from '../../../../config-serializer/config-items/macro-action'; } from '../../../../config-serializer/config-items/macro-action';
import {MapperService} from '../../../../services/mapper.service';
@Component({ @Component({
selector: 'macro-item', selector: 'macro-item',
template: require('./macro-item.component.html'), template: require('./macro-item.component.html'),
@@ -29,7 +29,7 @@ export class MacroItemComponent implements OnInit, OnChanges {
private iconName: string; private iconName: string;
private title: string; private title: string;
constructor() { } constructor(private mapper: MapperService) { }
ngOnInit() { ngOnInit() {
this.updateView(); this.updateView();
@@ -75,42 +75,23 @@ export class MacroItemComponent implements OnInit, OnChanges {
if (Math.abs(action.y) > 0) { if (Math.abs(action.y) > 0) {
this.title += ` ${needAnd ? 'and' : 'by'} ${Math.abs(action.y)}px ${action.y > 0 ? 'down' : 'up'}ward`; this.title += ` ${needAnd ? 'and' : 'by'} ${Math.abs(action.y)}px ${action.y > 0 ? 'down' : 'up'}ward`;
} }
} else if (this.macroAction instanceof PressModifiersMacroAction) { } else if (this.macroAction instanceof KeyMacroAction) {
const keyMacroAction: KeyMacroAction = <KeyMacroAction>this.macroAction;
this.title += 'KeyMacroAction: ';
if (keyMacroAction.isPressAction()) {
this.title = 'Press';
} else if (keyMacroAction.isHoldAction()) {
this.title = 'Hold';
} else {
this.title = 'Release';
}
if (keyMacroAction.hasScancode()) {
this.title += ' ' + this.mapper.scanCodeToText(keyMacroAction.scancode).join(' ');
}
this.iconName = 'square'; this.iconName = 'square';
let action: PressModifiersMacroAction = this.macroAction as PressModifiersMacroAction;
if (action.modifierMask === 0) {
this.title = 'Invalid PressModifiersMacroAction!';
return;
}
this.title = 'Press: ';
for (let i = KeyModifiers.leftCtrl; i !== KeyModifiers.rightCtrl; i <<= 1) { for (let i = KeyModifiers.leftCtrl; i !== KeyModifiers.rightCtrl; i <<= 1) {
if (action.isModifierActive(i)) { if (keyMacroAction.isModifierActive(i)) {
this.title += ' ' + KeyModifiers[i];
}
}
} else if (this.macroAction instanceof HoldModifiersMacroAction) {
this.iconName = 'square';
let action: HoldModifiersMacroAction = this.macroAction as HoldModifiersMacroAction;
if (action.modifierMask === 0) {
this.title = 'Invalid HoldModifiersMacroAction!';
return;
}
this.title = 'Hold: ';
for (let i = KeyModifiers.leftCtrl; i !== KeyModifiers.rightCtrl; i <<= 1) {
if (action.isModifierActive(i)) {
this.title += ' ' + KeyModifiers[i];
}
}
} else if (this.macroAction instanceof ReleaseModifiersMacroAction) {
this.iconName = 'square';
let action: ReleaseModifiersMacroAction = this.macroAction as ReleaseModifiersMacroAction;
if (action.modifierMask === 0) {
this.title = 'Invalid ReleaseModifiersMacroAction!';
return;
}
this.title = 'Release: ';
for (let i = KeyModifiers.leftCtrl; i !== KeyModifiers.rightCtrl; i <<= 1) {
if (action.isModifierActive(i)) {
this.title += ' ' + KeyModifiers[i]; this.title += ' ' + KeyModifiers[i];
} }
} }

View File

@@ -1,37 +0,0 @@
import {assertUInt8} from '../../assert';
import {UhkBuffer} from '../../UhkBuffer';
import {MacroAction, MacroActionId, macroActionType} from './MacroAction';
export class HoldKeyMacroAction extends MacroAction {
@assertUInt8
scancode: number;
_fromJsObject(jsObject: any): HoldKeyMacroAction {
this.assertMacroActionType(jsObject);
this.scancode = jsObject.scancode;
return this;
}
_fromBinary(buffer: UhkBuffer): HoldKeyMacroAction {
this.readAndAssertMacroActionId(buffer);
this.scancode = buffer.readUInt8();
return this;
}
_toJsObject(): any {
return {
macroActionType: macroActionType.HoldKeyMacroAction,
scancode: this.scancode
};
}
_toBinary(buffer: UhkBuffer) {
buffer.writeUInt8(MacroActionId.HoldKeyMacroAction);
buffer.writeUInt8(this.scancode);
}
toString(): string {
return `<HoldKeyMacroAction scancode="${this.scancode}">`;
}
}

View File

@@ -1,42 +0,0 @@
import {assertUInt8} from '../../assert';
import {UhkBuffer} from '../../UhkBuffer';
import {KeyModifiers} from '../KeyModifiers';
import {MacroAction, MacroActionId, macroActionType} from './MacroAction';
export class HoldModifiersMacroAction extends MacroAction {
@assertUInt8
modifierMask: number;
_fromJsObject(jsObject: any): HoldModifiersMacroAction {
this.assertMacroActionType(jsObject);
this.modifierMask = jsObject.modifierMask;
return this;
}
_fromBinary(buffer: UhkBuffer): HoldModifiersMacroAction {
this.readAndAssertMacroActionId(buffer);
this.modifierMask = buffer.readUInt8();
return this;
}
_toJsObject(): any {
return {
macroActionType: macroActionType.HoldModifiersMacroAction,
modifierMask: this.modifierMask
};
}
_toBinary(buffer: UhkBuffer) {
buffer.writeUInt8(MacroActionId.HoldModifiersMacroAction);
buffer.writeUInt8(this.modifierMask);
}
toString(): string {
return `<HoldModifiersMacroAction modifierMask="${this.modifierMask}">`;
}
isModifierActive(modifier: KeyModifiers): boolean {
return (this.modifierMask & modifier) > 0;
}
}

View File

@@ -0,0 +1,117 @@
import { assertEnum, assertUInt8 } from '../../assert';
import { UhkBuffer} from '../../UhkBuffer';
import { KeyModifiers } from '../KeyModifiers';
import { MacroAction, MacroActionId, macroActionType } from './MacroAction';
const NUM_OF_COMBINATIONS = 3; // Cases: scancode, modifer, both
enum Action {
press = 0,
hold = 1,
release = 2
}
interface JsObjectKeyMacroAction {
macroActionType: string;
action: string;
scancode?: number;
modifierMask?: number;
}
export class KeyMacroAction extends MacroAction {
@assertEnum(Action)
action: Action;
@assertUInt8
scancode: number;
@assertUInt8
modifierMask: number;
_fromJsObject(jsObject: JsObjectKeyMacroAction): KeyMacroAction {
this.assertMacroActionType(jsObject);
this.action = Action[jsObject.action];
this.scancode = jsObject.scancode;
this.modifierMask = jsObject.modifierMask;
return this;
}
_fromBinary(buffer: UhkBuffer): KeyMacroAction {
let macroActionId: MacroActionId = this.readAndAssertMacroActionId(buffer);
let keyMacroType: number = macroActionId - MacroActionId.KeyMacroAction;
this.action = Math.floor(keyMacroType / NUM_OF_COMBINATIONS);
keyMacroType %= NUM_OF_COMBINATIONS;
if (keyMacroType % 2 === 0) {
this.scancode = buffer.readUInt8();
}
if (keyMacroType !== 0) {
this.modifierMask = buffer.readUInt8();
}
return this;
}
_toJsObject(): any {
let jsObject: JsObjectKeyMacroAction = {
macroActionType: macroActionType.KeyMacroAction,
action: Action[this.action]
};
if (this.hasScancode()) {
jsObject.scancode = this.scancode;
}
if (this.hasModifiers()) {
jsObject.modifierMask = this.modifierMask;
}
return jsObject;
}
_toBinary(buffer: UhkBuffer) {
let keyMacroType: number = MacroActionId.KeyMacroAction;
keyMacroType += NUM_OF_COMBINATIONS * this.action;
if (this.hasModifiers()) {
++keyMacroType;
if (this.hasScancode()) {
++keyMacroType;
}
}
buffer.writeUInt8(keyMacroType);
if (this.hasScancode()) {
buffer.writeUInt8(this.scancode);
}
if (this.hasModifiers()) {
buffer.writeUInt8(this.modifierMask);
}
}
toString(): string {
return `<KeyMacroAction action="${this.action}" scancode="${this.scancode}" modifierMask="${this.modifierMask}">`;
}
isModifierActive(modifier: KeyModifiers): boolean {
return (this.modifierMask & modifier) > 0;
}
hasScancode(): boolean {
return !!this.scancode;
}
hasModifiers(): boolean {
return !!this.modifierMask;
}
isHoldAction(): boolean {
return this.action === Action.hold;
}
isPressAction(): boolean {
return this.action === Action.press;
}
isReleaseAction(): boolean {
return this.action === Action.release;
}
}

View File

@@ -2,35 +2,38 @@ import {Serializable} from '../../Serializable';
import {UhkBuffer} from '../../UhkBuffer'; import {UhkBuffer} from '../../UhkBuffer';
export enum MacroActionId { export enum MacroActionId {
PressKeyMacroAction = 0, KeyMacroAction = 0,
HoldKeyMacroAction = 1, /*
ReleaseKeyMacroAction = 2, 0 - 8 are reserved for KeyMacroAction
PressModifiersMacroAction = 3, PressKeyMacroAction with scancode: 0
HoldModifiersMacroAction = 4, PressKeyMacroAction with modifiers: 1
ReleaseModifiersMacroAction = 5, PressKeyMacroAction with scancode and modifiers 2
PressMouseButtonsMacroAction = 6, HoldKeyMacroAction with scancode: 3
HoldMouseButtonsMacroAction = 7, HoldKeyMacroAction with modifiers: 4
ReleaseMouseButtonsMacroAction = 8, HoldKeyMacroAction with scancode and modifiers 5
MoveMouseMacroAction = 9, ReleaseKeyMacroAction with scancode: 6
ScrollMouseMacroAction = 10, ReleaseKeyMacroAction with modifiers: 7
DelayMacroAction = 11, ReleaseKeyMacroAction with scancode and modifiers 8
TextMacroAction = 12 */
LastKeyMacroAction = 8,
PressMouseButtonsMacroAction = 9,
HoldMouseButtonsMacroAction = 10,
ReleaseMouseButtonsMacroAction = 11,
MoveMouseMacroAction = 12,
ScrollMouseMacroAction = 13,
DelayMacroAction = 14,
TextMacroAction = 15
} }
export let macroActionType = { export let macroActionType = {
PressKeyMacroAction : 'pressKey', KeyMacroAction : 'key',
HoldKeyMacroAction : 'holdKey', PressMouseButtonsMacroAction : 'pressMouseButtons',
ReleaseKeyMacroAction : 'releaseKey', HoldMouseButtonsMacroAction : 'holdMouseButtons',
PressModifiersMacroAction : 'pressModifiers', ReleaseMouseButtonsMacroAction : 'releaseMouseButtons',
HoldModifiersMacroAction : 'holdModifiers', MoveMouseMacroAction : 'moveMouse',
ReleaseModifiersMacroAction : 'releaseModifiers', ScrollMouseMacroAction : 'scrollMouse',
PressMouseButtonsMacroAction : 'pressMouseButtons', DelayMacroAction : 'delay',
HoldMouseButtonsMacroAction : 'holdMouseButtons', TextMacroAction : 'text'
ReleaseMouseButtonsMacroAction : 'releaseMouseButtons',
MoveMouseMacroAction : 'moveMouse',
ScrollMouseMacroAction : 'scrollMouse',
DelayMacroAction : 'delay',
TextMacroAction : 'text'
}; };
export abstract class MacroAction extends Serializable<MacroAction> { export abstract class MacroAction extends Serializable<MacroAction> {
@@ -42,13 +45,19 @@ export abstract class MacroAction extends Serializable<MacroAction> {
} }
} }
readAndAssertMacroActionId(buffer: UhkBuffer) { readAndAssertMacroActionId(buffer: UhkBuffer): MacroActionId {
let classname = this.constructor.name; let classname: string = this.constructor.name;
let readMacroActionId = buffer.readUInt8(); let readMacroActionId: MacroActionId = buffer.readUInt8();
let macroActionId = MacroActionId[<string> classname]; let macroActionId: MacroActionId = MacroActionId[classname];
if (readMacroActionId !== macroActionId) { if (macroActionId === MacroActionId.KeyMacroAction) {
if (readMacroActionId < MacroActionId.KeyMacroAction || readMacroActionId > MacroActionId.LastKeyMacroAction) {
throw `Invalid ${classname} first byte: ${readMacroActionId}`;
}
}
else if (readMacroActionId !== macroActionId) {
throw `Invalid ${classname} first byte: ${readMacroActionId}`; throw `Invalid ${classname} first byte: ${readMacroActionId}`;
} }
return readMacroActionId;
} }
abstract _fromJsObject(jsObject: any): MacroAction; abstract _fromJsObject(jsObject: any): MacroAction;

View File

@@ -1,16 +1,11 @@
import {ClassArray} from '../../ClassArray'; import {ClassArray} from '../../ClassArray';
import {UhkBuffer} from '../../UhkBuffer'; import {UhkBuffer} from '../../UhkBuffer';
import {DelayMacroAction} from './DelayMacroAction'; import {DelayMacroAction} from './DelayMacroAction';
import {HoldKeyMacroAction} from './HoldKeyMacroAction';
import {HoldModifiersMacroAction} from './HoldModifiersMacroAction';
import {HoldMouseButtonsMacroAction} from './HoldMouseButtonsMacroAction'; import {HoldMouseButtonsMacroAction} from './HoldMouseButtonsMacroAction';
import {KeyMacroAction} from './KeyMacroAction';
import {MacroAction, MacroActionId, macroActionType} from './MacroAction'; import {MacroAction, MacroActionId, macroActionType} from './MacroAction';
import {MoveMouseMacroAction} from './MoveMouseMacroAction'; import {MoveMouseMacroAction} from './MoveMouseMacroAction';
import {PressKeyMacroAction} from './PressKeyMacroAction';
import {PressModifiersMacroAction} from './PressModifiersMacroAction';
import {PressMouseButtonsMacroAction} from './PressMouseButtonsMacroAction'; import {PressMouseButtonsMacroAction} from './PressMouseButtonsMacroAction';
import {ReleaseKeyMacroAction} from './ReleaseKeyMacroAction';
import {ReleaseModifiersMacroAction} from './ReleaseModifiersMacroAction';
import {ReleaseMouseButtonsMacroAction} from './ReleaseMouseButtonsMacroAction'; import {ReleaseMouseButtonsMacroAction} from './ReleaseMouseButtonsMacroAction';
import {ScrollMouseMacroAction} from './ScrollMouseMacroAction'; import {ScrollMouseMacroAction} from './ScrollMouseMacroAction';
import {TextMacroAction} from './TextMacroAction'; import {TextMacroAction} from './TextMacroAction';
@@ -19,18 +14,8 @@ export class MacroActions extends ClassArray<MacroAction> {
jsObjectToClass(jsObject: any): MacroAction { jsObjectToClass(jsObject: any): MacroAction {
switch (jsObject.macroActionType) { switch (jsObject.macroActionType) {
case macroActionType.PressKeyMacroAction: case macroActionType.KeyMacroAction:
return new PressKeyMacroAction().fromJsObject(jsObject); return new KeyMacroAction().fromJsObject(jsObject);
case macroActionType.HoldKeyMacroAction:
return new HoldKeyMacroAction().fromJsObject(jsObject);
case macroActionType.ReleaseKeyMacroAction:
return new ReleaseKeyMacroAction().fromJsObject(jsObject);
case macroActionType.PressModifiersMacroAction:
return new PressModifiersMacroAction().fromJsObject(jsObject);
case macroActionType.HoldModifiersMacroAction:
return new HoldModifiersMacroAction().fromJsObject(jsObject);
case macroActionType.ReleaseModifiersMacroAction:
return new ReleaseModifiersMacroAction().fromJsObject(jsObject);
case macroActionType.PressMouseButtonsMacroAction: case macroActionType.PressMouseButtonsMacroAction:
return new PressMouseButtonsMacroAction().fromJsObject(jsObject); return new PressMouseButtonsMacroAction().fromJsObject(jsObject);
case macroActionType.HoldMouseButtonsMacroAction: case macroActionType.HoldMouseButtonsMacroAction:
@@ -59,19 +44,10 @@ export class MacroActions extends ClassArray<MacroAction> {
buffer.enableDump = false; buffer.enableDump = false;
} }
if (macroActionFirstByte >= MacroActionId.KeyMacroAction && macroActionFirstByte <= MacroActionId.LastKeyMacroAction) {
return new KeyMacroAction().fromBinary(buffer);
}
switch (macroActionFirstByte) { switch (macroActionFirstByte) {
case MacroActionId.PressKeyMacroAction:
return new PressKeyMacroAction().fromBinary(buffer);
case MacroActionId.HoldKeyMacroAction:
return new HoldKeyMacroAction().fromBinary(buffer);
case MacroActionId.ReleaseKeyMacroAction:
return new ReleaseKeyMacroAction().fromBinary(buffer);
case MacroActionId.PressModifiersMacroAction:
return new PressModifiersMacroAction().fromBinary(buffer);
case MacroActionId.HoldModifiersMacroAction:
return new HoldModifiersMacroAction().fromBinary(buffer);
case MacroActionId.ReleaseModifiersMacroAction:
return new ReleaseModifiersMacroAction().fromBinary(buffer);
case MacroActionId.PressMouseButtonsMacroAction: case MacroActionId.PressMouseButtonsMacroAction:
return new PressMouseButtonsMacroAction().fromBinary(buffer); return new PressMouseButtonsMacroAction().fromBinary(buffer);
case MacroActionId.HoldMouseButtonsMacroAction: case MacroActionId.HoldMouseButtonsMacroAction:

View File

@@ -1,37 +0,0 @@
import {assertUInt8} from '../../assert';
import {UhkBuffer} from '../../UhkBuffer';
import {MacroAction, MacroActionId, macroActionType} from './MacroAction';
export class PressKeyMacroAction extends MacroAction {
@assertUInt8
scancode: number;
_fromJsObject(jsObject: any): PressKeyMacroAction {
this.assertMacroActionType(jsObject);
this.scancode = jsObject.scancode;
return this;
}
_fromBinary(buffer: UhkBuffer): PressKeyMacroAction {
this.readAndAssertMacroActionId(buffer);
this.scancode = buffer.readUInt8();
return this;
}
_toJsObject(): any {
return {
macroActionType: macroActionType.PressKeyMacroAction,
scancode: this.scancode
};
}
_toBinary(buffer: UhkBuffer) {
buffer.writeUInt8(MacroActionId.PressKeyMacroAction);
buffer.writeUInt8(this.scancode);
}
toString(): string {
return `<PressKeyMacroAction scancode="${this.scancode}">`;
}
}

View File

@@ -1,42 +0,0 @@
import {assertUInt8} from '../../assert';
import {UhkBuffer} from '../../UhkBuffer';
import {KeyModifiers} from '../KeyModifiers';
import {MacroAction, MacroActionId, macroActionType} from './MacroAction';
export class PressModifiersMacroAction extends MacroAction {
@assertUInt8
modifierMask: number;
_fromJsObject(jsObject: any): PressModifiersMacroAction {
this.assertMacroActionType(jsObject);
this.modifierMask = jsObject.modifierMask;
return this;
}
_fromBinary(buffer: UhkBuffer): PressModifiersMacroAction {
this.readAndAssertMacroActionId(buffer);
this.modifierMask = buffer.readUInt8();
return this;
}
_toJsObject(): any {
return {
macroActionType: macroActionType.PressModifiersMacroAction,
modifierMask: this.modifierMask
};
}
_toBinary(buffer: UhkBuffer) {
buffer.writeUInt8(MacroActionId.PressModifiersMacroAction);
buffer.writeUInt8(this.modifierMask);
}
toString(): string {
return `<PressModifiersMacroAction modifierMask="${this.modifierMask}">`;
}
isModifierActive(modifier: KeyModifiers): boolean {
return (this.modifierMask & modifier) > 0;
}
}

View File

@@ -1,37 +0,0 @@
import {assertUInt8} from '../../assert';
import {UhkBuffer} from '../../UhkBuffer';
import {MacroAction, MacroActionId, macroActionType} from './MacroAction';
export class ReleaseKeyMacroAction extends MacroAction {
@assertUInt8
scancode: number;
_fromJsObject(jsObject: any): ReleaseKeyMacroAction {
this.assertMacroActionType(jsObject);
this.scancode = jsObject.scancode;
return this;
}
_fromBinary(buffer: UhkBuffer): ReleaseKeyMacroAction {
this.readAndAssertMacroActionId(buffer);
this.scancode = buffer.readUInt8();
return this;
}
_toJsObject(): any {
return {
macroActionType: macroActionType.ReleaseKeyMacroAction,
scancode: this.scancode
};
}
_toBinary(buffer: UhkBuffer) {
buffer.writeUInt8(MacroActionId.ReleaseKeyMacroAction);
buffer.writeUInt8(this.scancode);
}
toString(): string {
return `<ReleaseKeyMacroAction scancode="${this.scancode}">`;
}
}

View File

@@ -1,42 +0,0 @@
import {assertUInt8} from '../../assert';
import {UhkBuffer} from '../../UhkBuffer';
import {KeyModifiers} from '../KeyModifiers';
import {MacroAction, MacroActionId, macroActionType} from './MacroAction';
export class ReleaseModifiersMacroAction extends MacroAction {
@assertUInt8
modifierMask: number;
_fromJsObject(jsObject: any): ReleaseModifiersMacroAction {
this.assertMacroActionType(jsObject);
this.modifierMask = jsObject.modifierMask;
return this;
}
_fromBinary(buffer: UhkBuffer): ReleaseModifiersMacroAction {
this.readAndAssertMacroActionId(buffer);
this.modifierMask = buffer.readUInt8();
return this;
}
_toJsObject(): any {
return {
macroActionType: macroActionType.ReleaseModifiersMacroAction,
modifierMask: this.modifierMask
};
}
_toBinary(buffer: UhkBuffer) {
buffer.writeUInt8(MacroActionId.ReleaseModifiersMacroAction);
buffer.writeUInt8(this.modifierMask);
}
toString(): string {
return `<ReleaseModifiersMacroAction modifierMask="${this.modifierMask}">`;
}
isModifierActive(modifier: KeyModifiers): boolean {
return (this.modifierMask & modifier) > 0;
}
}

View File

@@ -1,15 +1,10 @@
export * from './DelayMacroAction'; export * from './DelayMacroAction';
export * from './HoldKeyMacroAction';
export * from './HoldModifiersMacroAction';
export * from './HoldMouseButtonsMacroAction'; export * from './HoldMouseButtonsMacroAction';
export * from './KeyMacroAction';
export * from './MacroAction'; export * from './MacroAction';
export * from './MacroActions'; export * from './MacroActions';
export * from './MoveMouseMacroAction'; export * from './MoveMouseMacroAction';
export * from './PressKeyMacroAction';
export * from './PressModifiersMacroAction';
export * from './PressMouseButtonsMacroAction'; export * from './PressMouseButtonsMacroAction';
export * from './ReleaseKeyMacroAction';
export * from './ReleaseModifiersMacroAction';
export * from './ReleaseMouseButtonsMacroAction'; export * from './ReleaseMouseButtonsMacroAction';
export * from './ScrollMouseMacroAction'; export * from './ScrollMouseMacroAction';
export * from './TextMacroAction'; export * from './TextMacroAction';

View File

@@ -985,27 +985,33 @@
"name": "My address", "name": "My address",
"macroActions": [ "macroActions": [
{ {
"macroActionType": "pressKey", "macroActionType": "key",
"action": "press",
"scancode": 111 "scancode": 111
}, },
{ {
"macroActionType": "holdKey", "macroActionType": "key",
"action": "hold",
"scancode": 83 "scancode": 83
}, },
{ {
"macroActionType": "releaseKey", "macroActionType": "key",
"action": "release",
"scancode": 112 "scancode": 112
}, },
{ {
"macroActionType": "pressModifiers", "macroActionType": "key",
"action": "press",
"modifierMask": 93 "modifierMask": 93
}, },
{ {
"macroActionType": "holdModifiers", "macroActionType": "key",
"action": "hold",
"modifierMask": 101 "modifierMask": 101
}, },
{ {
"macroActionType": "releaseModifiers", "macroActionType": "key",
"action": "release",
"modifierMask": 133 "modifierMask": 133
}, },
{ {
@@ -1047,7 +1053,8 @@
"name": "Blah Blah blah", "name": "Blah Blah blah",
"macroActions": [ "macroActions": [
{ {
"macroActionType": "pressKey", "macroActionType": "key",
"action": "press",
"scancode": 111 "scancode": 111
}, },
{ {

View File

@@ -99,7 +99,7 @@ export class MapperService {
} }
public scanCodeToText(scanCode: number): string[] { public scanCodeToText(scanCode: number): string[] {
return this.scanCodeTextMap[scanCode]; return this.scanCodeTextMap[scanCode] || [ 'Unkown' ];
} }
public scanCodeToSvgImagePath(scanCode: number): string { public scanCodeToSvgImagePath(scanCode: number): string {