protected _enable()

in src/component/keyboard/KeyPlayHandler.ts [41:113]


    protected _enable(): void {
        this._keyDownSubscription = this._container.keyboardService.keyDown$.pipe(
            withLatestFrom(
                this._navigator.playService.playing$,
                this._navigator.playService.direction$,
                this._navigator.playService.speed$,
                this._navigator.stateService.currentImage$.pipe(
                    switchMap(
                        (image: Image): Observable<NavigationEdgeStatus> => {
                            return image.sequenceEdges$;
                        })),
                this._navigator.stateService.state$.pipe(
                    map(
                        (state: State): boolean => {
                            return state === State.Earth;
                        }),
                    distinctUntilChanged())))
            .subscribe(
                (
                    [event, playing, direction, speed, status, earth]:
                        [KeyboardEvent, boolean, NavigationDirection, number, NavigationEdgeStatus, boolean]): void => {

                    if (event.altKey || event.ctrlKey || event.metaKey) {
                        return;
                    }

                    switch (event.key) {
                        case "D":
                            if (!event.shiftKey) {
                                return;
                            }

                            const newDirection: NavigationDirection = playing ?
                                null : direction === NavigationDirection.Next ?
                                    NavigationDirection.Prev : direction === NavigationDirection.Prev ?
                                        NavigationDirection.Next : null;

                            if (newDirection != null) {
                                this._navigator.playService.setDirection(newDirection);
                            }

                            break;
                        case " ":
                            if (event.shiftKey) {
                                return;
                            }

                            if (!earth) {
                                if (playing) {
                                    this._navigator.playService.stop();
                                } else {
                                    for (let edge of status.edges) {
                                        if (edge.data.direction === direction) {
                                            this._navigator.playService.play();
                                        }
                                    }
                                }
                            }

                            break;
                        case "<":
                            this._navigator.playService.setSpeed(speed - 0.05);
                            break;
                        case ">":
                            this._navigator.playService.setSpeed(speed + 0.05);
                            break;
                        default:
                            return;
                    }

                    event.preventDefault();
                });
    }