Add hotkeys, document hotkeys, make 'DefaultGUI' runnable via NodeJS, generate hotkey documentation

This commit is contained in:
Pieter Vander Vennet 2022-12-24 03:44:21 +01:00
parent e2419c19cd
commit 43613e4ece
16 changed files with 328 additions and 89 deletions

View file

@ -7,6 +7,7 @@ import BaseLayer from "../../Models/BaseLayer"
import AvailableBaseLayers from "../../Logic/Actors/AvailableBaseLayers"
import BaseUIElement from "../BaseUIElement"
import { GeoOperations } from "../../Logic/GeoOperations"
import Hotkeys from "../Base/Hotkeys"
class SingleLayerSelectionButton extends Toggle {
public readonly activate: () => void
@ -48,13 +49,13 @@ class SingleLayerSelectionButton extends Toggle {
let toggle: BaseUIElement = new Toggle(
selected,
unselected,
options.currentBackground.map((bg) => bg.category === options.preferredType)
options.currentBackground.map((bg) => bg?.category === options.preferredType)
)
super(
toggle,
undefined,
available.map((av) => av.category === options.preferredType)
available.map((av) => av?.category === options.preferredType)
)
/**
@ -174,6 +175,7 @@ export default class BackgroundMapSwitch extends Combine {
options?: {
preferredCategory?: string
allowedCategories?: ("osmbasedmap" | "photo" | "map")[]
enableHotkeys?: boolean
}
) {
const allowedCategories = options?.allowedCategories ?? ["osmbasedmap", "photo", "map"]
@ -183,7 +185,7 @@ export default class BackgroundMapSwitch extends Combine {
let activatePrevious: () => void = undefined
for (const category of allowedCategories) {
let preferredLayer = undefined
if (previousLayer.category === category) {
if (previousLayer?.category === category) {
preferredLayer = previousLayer
}
@ -198,6 +200,16 @@ export default class BackgroundMapSwitch extends Combine {
if (category === options?.preferredCategory) {
button.activate()
}
if (options?.enableHotkeys) {
Hotkeys.RegisterHotkey(
{ nomod: category.charAt(0).toUpperCase() },
"Switch to a background layer of category " + category,
() => {
button.activate()
}
)
}
buttons.push(button)
}