sutom/ts/configurationPanel.ts

86 lines
2.7 KiB
TypeScript
Raw Normal View History

import Configuration from "./entites/configuration";
2022-01-29 14:58:08 +01:00
import PanelManager from "./panelManager";
import Sauvegardeur from "./sauvegardeur";
import { VolumeSon } from "./entites/volumeSon";
import AudioPanel from "./audioPanel";
2022-01-29 14:58:08 +01:00
export default class ConfigurationPanel {
private readonly _panelManager: PanelManager;
private readonly _audioPanel: AudioPanel;
2022-01-29 14:58:08 +01:00
private readonly _configBouton: HTMLElement;
public constructor(panelManager: PanelManager, audioPanel: AudioPanel) {
2022-01-29 14:58:08 +01:00
this._panelManager = panelManager;
this._audioPanel = audioPanel;
2022-01-29 14:58:08 +01:00
this._configBouton = document.getElementById("configuration-config-bouton") as HTMLElement;
this._configBouton.addEventListener(
"click",
(() => {
this.afficher();
}).bind(this)
);
}
public afficher(): void {
let titre = "Configuration";
2022-01-29 15:02:15 +01:00
let contenu = document.createElement("div");
let config = Sauvegardeur.chargerConfig() ?? Configuration.Default;
2022-01-29 15:02:15 +01:00
contenu.appendChild(
this.genererConfigItem(
"Volume du son (si activé)",
[
{ value: VolumeSon.Faible.toString(), label: "Faible" },
{ value: VolumeSon.Normal.toString(), label: "Normal" },
{ value: VolumeSon.Fort.toString(), label: "Fort" },
],
(config.volumeSon ?? Configuration.Default.volumeSon).toString(),
(event: Event) => {
event.stopPropagation();
let volumeSon: VolumeSon = parseInt((event.target as HTMLSelectElement).value);
this._audioPanel.setVolumeSonore(volumeSon);
Sauvegardeur.sauvegarderConfig({
...(Sauvegardeur.chargerConfig() ?? Configuration.Default),
volumeSon,
});
}
)
2022-01-29 15:02:15 +01:00
);
2022-01-29 14:58:08 +01:00
this._panelManager.setContenuHtmlElement(titre, contenu);
2022-01-29 14:58:08 +01:00
this._panelManager.setClasses(["config-panel"]);
this._panelManager.afficherPanel();
}
2022-01-29 15:02:15 +01:00
private genererConfigItem(
nomConfig: string,
options: Array<{ value: string; label: string }>,
valeurChoisie: string,
onChange?: (event: Event) => void
): HTMLElement {
2022-01-29 15:02:15 +01:00
let div = document.createElement("div");
div.className = "config-item";
let label = document.createElement("label");
label.innerText = nomConfig;
div.appendChild(label);
let select = document.createElement("select");
for (let optionItem of options) {
2022-01-29 15:02:15 +01:00
let optionElement = document.createElement("option");
optionElement.value = optionItem.value;
optionElement.innerText = optionItem.label;
if (optionItem.value === valeurChoisie) optionElement.selected = true;
2022-01-29 15:02:15 +01:00
select.appendChild(optionElement);
}
if (onChange !== undefined) select.addEventListener("change", onChange);
2022-01-29 15:02:15 +01:00
div.appendChild(select);
return div;
}
2022-01-29 14:58:08 +01:00
}