cncjs

Форк
0
/
combokeys.js 
585 строк · 11.4 Кб
1
import events from 'events';
2
import Mousetrap from 'mousetrap';
3
import log from './log';
4
import { preventDefault } from './dom-events';
5

6
const AXIS_X = 'x';
7
const AXIS_Y = 'y';
8
const AXIS_Z = 'z';
9
const AXIS_A = 'a';
10
//const AXIS_B = 'b';
11
//const AXIS_C = 'c';
12
const FORWARD = 1;
13
const BACKWARD = -1;
14
const OVERSHOOT_FACTOR = 10; // 10x
15
const UNDERSHOOT_FACTOR = 0.1; // 0.1x
16

17
const commandKeys = [
18
  { // Feed Hold
19
    keys: '!',
20
    cmd: 'CONTROLLER_COMMAND',
21
    payload: {
22
      command: 'feedhold'
23
    },
24
    preventDefault: true
25
  },
26
  { // Cycle Start
27
    keys: '~',
28
    cmd: 'CONTROLLER_COMMAND',
29
    payload: {
30
      command: 'cyclestart'
31
    },
32
    preventDefault: true
33
  },
34
  { // Homing
35
    keys: ['ctrl', 'alt', 'command', 'h'].join('+'),
36
    cmd: 'CONTROLLER_COMMAND',
37
    payload: {
38
      command: 'homing'
39
    },
40
    preventDefault: true
41
  },
42
  { // Unlock
43
    keys: ['ctrl', 'alt', 'command', 'u'].join('+'),
44
    cmd: 'CONTROLLER_COMMAND',
45
    payload: {
46
      command: 'unlock'
47
    },
48
    preventDefault: true
49
  },
50
  { // Reset
51
    keys: ['ctrl', 'alt', 'command', 'r'].join('+'),
52
    cmd: 'CONTROLLER_COMMAND',
53
    payload: {
54
      command: 'reset'
55
    },
56
    preventDefault: true
57
  },
58
  { // Select Jog Distance
59
    keys: ['ctrl', 'alt', 'command', '-'].join('+'),
60
    cmd: 'JOG_LEVER_SWITCH',
61
    payload: {
62
      key: '-'
63
    },
64
    preventDefault: true
65
  },
66
  { // Select Jog Distance
67
    keys: ['ctrl', 'alt', 'command', '+'].join('+'),
68
    cmd: 'JOG_LEVER_SWITCH',
69
    payload: {
70
      key: '+'
71
    },
72
    preventDefault: true
73
  },
74
  { // Select Jog Distance
75
    keys: ['ctrl', 'alt', 'command', '='].join('+'),
76
    cmd: 'JOG_LEVER_SWITCH',
77
    payload: {
78
      key: ''
79
    },
80
    preventDefault: true
81
  },
82
  { // Jog Forward
83
    keys: ['ctrl', 'alt', 'command', ']'].join('+'),
84
    cmd: 'JOG',
85
    payload: {
86
      axis: null,
87
      direction: FORWARD,
88
      factor: 1
89
    },
90
    preventDefault: true
91
  },
92
  { // Jog Forward (Alias)
93
    keys: ['ctrl', 'alt', 'command', 'f'].join('+'),
94
    cmd: 'JOG',
95
    payload: {
96
      axis: null,
97
      direction: FORWARD,
98
      factor: 1
99
    },
100
    preventDefault: true
101
  },
102
  { // Jog Backward
103
    keys: ['ctrl', 'alt', 'command', '['].join('+'),
104
    cmd: 'JOG',
105
    payload: {
106
      axis: null,
107
      direction: BACKWARD,
108
      factor: 1
109
    },
110
    preventDefault: true
111
  },
112
  { // Jog Backward (Alias)
113
    keys: ['ctrl', 'alt', 'command', 'b'].join('+'),
114
    cmd: 'JOG',
115
    payload: {
116
      axis: null,
117
      direction: BACKWARD,
118
      factor: 1
119
    },
120
    preventDefault: true
121
  },
122
  { // Jog X+
123
    keys: 'right',
124
    cmd: 'JOG',
125
    payload: {
126
      axis: AXIS_X,
127
      direction: FORWARD,
128
      factor: 1
129
    },
130
    preventDefault: false
131
  },
132
  { // Jog X+ (undershoot)
133
    keys: 'alt+right',
134
    cmd: 'JOG',
135
    payload: {
136
      axis: AXIS_X,
137
      direction: FORWARD,
138
      factor: UNDERSHOOT_FACTOR
139
    },
140
    preventDefault: false
141
  },
142
  { // Jog X+ (overshoot)
143
    keys: 'shift+right',
144
    cmd: 'JOG',
145
    payload: {
146
      axis: AXIS_X,
147
      direction: FORWARD,
148
      factor: OVERSHOOT_FACTOR
149
    },
150
    preventDefault: false
151
  },
152
  { // Jog X-
153
    keys: 'left',
154
    cmd: 'JOG',
155
    payload: {
156
      axis: AXIS_X,
157
      direction: BACKWARD,
158
      factor: 1
159
    },
160
    preventDefault: false
161
  },
162
  { // Jog X- (undershoot)
163
    keys: 'alt+left',
164
    cmd: 'JOG',
165
    payload: {
166
      axis: AXIS_X,
167
      direction: BACKWARD,
168
      factor: UNDERSHOOT_FACTOR
169
    },
170
    preventDefault: false
171
  },
172
  { // Jog X- (overshoot)
173
    keys: 'shift+left',
174
    cmd: 'JOG',
175
    payload: {
176
      axis: AXIS_X,
177
      direction: BACKWARD,
178
      factor: OVERSHOOT_FACTOR
179
    },
180
    preventDefault: false
181
  },
182
  { // Jog Y+
183
    keys: 'up',
184
    cmd: 'JOG',
185
    payload: {
186
      axis: AXIS_Y,
187
      direction: FORWARD,
188
      factor: 1
189
    },
190
    preventDefault: false
191
  },
192
  { // Jog Y+ (undershoot)
193
    keys: 'alt+up',
194
    cmd: 'JOG',
195
    payload: {
196
      axis: AXIS_Y,
197
      direction: FORWARD,
198
      factor: UNDERSHOOT_FACTOR
199
    },
200
    preventDefault: false
201
  },
202
  { // Jog Y+ (overshoot)
203
    keys: 'shift+up',
204
    cmd: 'JOG',
205
    payload: {
206
      axis: AXIS_Y,
207
      direction: FORWARD,
208
      factor: OVERSHOOT_FACTOR
209
    },
210
    preventDefault: false
211
  },
212
  { // Jog Y-
213
    keys: 'down',
214
    cmd: 'JOG',
215
    payload: {
216
      axis: AXIS_Y,
217
      direction: BACKWARD,
218
      factor: 1
219
    },
220
    preventDefault: false
221
  },
222
  { // Jog Y- (undershoot)
223
    keys: 'alt+down',
224
    cmd: 'JOG',
225
    payload: {
226
      axis: AXIS_Y,
227
      direction: BACKWARD,
228
      factor: UNDERSHOOT_FACTOR
229
    },
230
    preventDefault: false
231
  },
232
  { // Jog Y- (overshoot)
233
    keys: 'shift+down',
234
    cmd: 'JOG',
235
    payload: {
236
      axis: AXIS_Y,
237
      direction: BACKWARD,
238
      factor: OVERSHOOT_FACTOR
239
    },
240
    preventDefault: false
241
  },
242
  { // Jog Z+
243
    keys: 'pageup',
244
    cmd: 'JOG',
245
    payload: {
246
      axis: AXIS_Z,
247
      direction: FORWARD,
248
      factor: 1
249
    },
250
    preventDefault: false
251
  },
252
  { // Jog Z+ (undershoot)
253
    keys: 'alt+pageup',
254
    cmd: 'JOG',
255
    payload: {
256
      axis: AXIS_Z,
257
      direction: FORWARD,
258
      factor: UNDERSHOOT_FACTOR
259
    },
260
    preventDefault: false
261
  },
262
  { // Jog Z+ (overshoot)
263
    keys: 'shift+pageup',
264
    cmd: 'JOG',
265
    payload: {
266
      axis: AXIS_Z,
267
      direction: FORWARD,
268
      factor: OVERSHOOT_FACTOR
269
    },
270
    preventDefault: false
271
  },
272
  { // Jog Z-
273
    keys: 'pagedown',
274
    cmd: 'JOG',
275
    payload: {
276
      axis: AXIS_Z,
277
      direction: BACKWARD,
278
      factor: 1
279
    },
280
    preventDefault: false
281
  },
282
  { // Jog Z- (undershoot)
283
    keys: 'alt+pagedown',
284
    cmd: 'JOG',
285
    payload: {
286
      axis: AXIS_Z,
287
      direction: BACKWARD,
288
      factor: UNDERSHOOT_FACTOR
289
    },
290
    preventDefault: false
291
  },
292
  { // Jog Z- (overshoot)
293
    keys: 'shift+pagedown',
294
    cmd: 'JOG',
295
    payload: {
296
      axis: AXIS_Z,
297
      direction: BACKWARD,
298
      factor: OVERSHOOT_FACTOR
299
    },
300
    preventDefault: false
301
  },
302
  { // Jog A+
303
    keys: ']',
304
    cmd: 'JOG',
305
    payload: {
306
      axis: AXIS_A,
307
      direction: FORWARD,
308
      factor: 1
309
    },
310
    preventDefault: false
311
  },
312
  { // Jog A+ (undershoot)
313
    keys: 'alt+]',
314
    cmd: 'JOG',
315
    payload: {
316
      axis: AXIS_A,
317
      direction: FORWARD,
318
      factor: UNDERSHOOT_FACTOR
319
    },
320
    preventDefault: false
321
  },
322
  { // Jog A+ (overshoot)
323
    keys: 'shift+]',
324
    cmd: 'JOG',
325
    payload: {
326
      axis: AXIS_A,
327
      direction: FORWARD,
328
      factor: OVERSHOOT_FACTOR
329
    },
330
    preventDefault: false
331
  },
332
  { // Jog A-
333
    keys: '[',
334
    cmd: 'JOG',
335
    payload: {
336
      axis: AXIS_A,
337
      direction: BACKWARD,
338
      factor: 1
339
    },
340
    preventDefault: false
341
  },
342
  { // Jog A- (undershoot)
343
    keys: 'alt+[',
344
    cmd: 'JOG',
345
    payload: {
346
      axis: AXIS_A,
347
      direction: BACKWARD,
348
      factor: UNDERSHOOT_FACTOR
349
    },
350
    preventDefault: false
351
  },
352
  { // Jog A- (overshoot)
353
    keys: 'shift+[',
354
    cmd: 'JOG',
355
    payload: {
356
      axis: AXIS_A,
357
      direction: BACKWARD,
358
      factor: OVERSHOOT_FACTOR
359
    },
360
    preventDefault: false
361
  },
362
  { // Shuttle Zone -7
363
    keys: ['ctrl', 'alt', 'shift', '7'].join('+'),
364
    cmd: 'SHUTTLE',
365
    payload: {
366
      zone: -7
367
    },
368
    preventDefault: true
369
  },
370
  { // Shuttle Zone -6
371
    keys: ['ctrl', 'alt', 'shift', '6'].join('+'),
372
    cmd: 'SHUTTLE',
373
    payload: {
374
      zone: -6
375
    },
376
    preventDefault: true
377
  },
378
  { // Shuttle Zone -5
379
    keys: ['ctrl', 'alt', 'shift', '5'].join('+'),
380
    cmd: 'SHUTTLE',
381
    payload: {
382
      zone: -5
383
    },
384
    preventDefault: true
385
  },
386
  { // Shuttle Zone -4
387
    keys: ['ctrl', 'alt', 'shift', '4'].join('+'),
388
    cmd: 'SHUTTLE',
389
    payload: {
390
      zone: -4
391
    },
392
    preventDefault: true
393
  },
394
  { // Shuttle Zone -3
395
    keys: ['ctrl', 'alt', 'shift', '3'].join('+'),
396
    cmd: 'SHUTTLE',
397
    payload: {
398
      zone: -3
399
    },
400
    preventDefault: true
401
  },
402
  { // Shuttle Zone -2
403
    keys: ['ctrl', 'alt', 'shift', '2'].join('+'),
404
    cmd: 'SHUTTLE',
405
    payload: {
406
      zone: -2
407
    },
408
    preventDefault: true
409
  },
410
  { // Shuttle Zone -1
411
    keys: ['ctrl', 'alt', 'shift', '1'].join('+'),
412
    cmd: 'SHUTTLE',
413
    payload: {
414
      zone: -1
415
    },
416
    preventDefault: true
417
  },
418
  { // Shuttle Zone 0
419
    keys: ['ctrl', 'alt', 'command', '0'].join('+'),
420
    cmd: 'SHUTTLE',
421
    payload: {
422
      zone: 0
423
    },
424
    preventDefault: true
425
  },
426
  { // Shuttle Zone 1
427
    keys: ['ctrl', 'alt', 'command', '1'].join('+'),
428
    cmd: 'SHUTTLE',
429
    payload: {
430
      zone: 1
431
    },
432
    preventDefault: true
433
  },
434
  { // Shuttle Zone 2
435
    keys: ['ctrl', 'alt', 'command', '2'].join('+'),
436
    cmd: 'SHUTTLE',
437
    payload: {
438
      zone: 2
439
    },
440
    preventDefault: true
441
  },
442
  { // Shuttle Zone 3
443
    keys: ['ctrl', 'alt', 'command', '3'].join('+'),
444
    cmd: 'SHUTTLE',
445
    payload: {
446
      zone: 3
447
    },
448
    preventDefault: true
449
  },
450
  { // Shuttle Zone 4
451
    keys: ['ctrl', 'alt', 'command', '4'].join('+'),
452
    cmd: 'SHUTTLE',
453
    payload: {
454
      zone: 4
455
    },
456
    preventDefault: true
457
  },
458
  { // Shuttle Zone 5
459
    keys: ['ctrl', 'alt', 'command', '5'].join('+'),
460
    cmd: 'SHUTTLE',
461
    payload: {
462
      zone: 5
463
    },
464
    preventDefault: true
465
  },
466
  { // Shuttle Zone 6
467
    keys: ['ctrl', 'alt', 'command', '6'].join('+'),
468
    cmd: 'SHUTTLE',
469
    payload: {
470
      zone: 6
471
    },
472
    preventDefault: true
473
  },
474
  { // Shuttle Zone 7
475
    keys: ['ctrl', 'alt', 'command', '7'].join('+'),
476
    cmd: 'SHUTTLE',
477
    payload: {
478
      zone: 7
479
    },
480
    preventDefault: true
481
  },
482
  { // Select X-axis
483
    keys: ['ctrl', 'alt', 'command', 'x'].join('+'),
484
    cmd: 'SELECT_AXIS',
485
    payload: {
486
      axis: 'x'
487
    },
488
    preventDefault: true
489
  },
490
  { // Select Y-axis
491
    keys: ['ctrl', 'alt', 'command', 'y'].join('+'),
492
    cmd: 'SELECT_AXIS',
493
    payload: {
494
      axis: 'y'
495
    },
496
    preventDefault: true
497
  },
498
  { // Select Z-axis
499
    keys: ['ctrl', 'alt', 'command', 'z'].join('+'),
500
    cmd: 'SELECT_AXIS',
501
    payload: {
502
      axis: 'z'
503
    },
504
    preventDefault: true
505
  },
506
  { // Select A-axis
507
    keys: ['ctrl', 'alt', 'command', 'a'].join('+'),
508
    cmd: 'SELECT_AXIS',
509
    payload: {
510
      axis: 'a'
511
    },
512
    preventDefault: true
513
  },
514
  { // Select B-axis
515
    keys: ['ctrl', 'alt', 'command', 'b'].join('+'),
516
    cmd: 'SELECT_AXIS',
517
    payload: {
518
      axis: 'b'
519
    },
520
    preventDefault: true
521
  },
522
  { // Select C-axis
523
    keys: ['ctrl', 'alt', 'command', 'c'].join('+'),
524
    cmd: 'SELECT_AXIS',
525
    payload: {
526
      axis: 'c'
527
    },
528
    preventDefault: true
529
  }
530
];
531

532
class Combokeys extends events.EventEmitter {
533
    state = {
534
      didBindEvents: false
535
    };
536

537
    list = [];
538

539
    constructor(options = {}) {
540
      super();
541

542
      if (options.autoBind) {
543
        this.bind();
544
      }
545
    }
546

547
    bind() {
548
      if (this.state.didBindEvents) {
549
        return;
550
      }
551
      commandKeys.forEach((o) => {
552
        const { keys, cmd, payload = {} } = o;
553
        const callback = (event) => {
554
          log.debug(`combokeys: keys=${keys} cmd=${cmd} payload=${JSON.stringify(payload)}`);
555
          if (!!o.preventDefault) {
556
            preventDefault(event);
557
          }
558
          this.emit(cmd, event, payload);
559
        };
560
        Mousetrap.bind(keys, callback);
561
        this.list.push({ keys: keys, callback: callback });
562
      });
563
      this.state.didBindEvents = true;
564
    }
565

566
    unbind() {
567
      if (!this.state.didBindEvents) {
568
        return;
569
      }
570
      this.list.forEach((o) => {
571
        const { keys, callback } = o;
572
        Mousetrap.unbind(keys, callback);
573
      });
574
      this.state.didBindEvents = false;
575
    }
576

577
    reset() {
578
      Mousetrap.reset();
579
      this.state.didBindEvents = false;
580
    }
581
}
582

583
const combokeys = new Combokeys({ autoBind: true });
584

585
export default combokeys;
586

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.