Files
4yn_slidershim/src/App.svelte
T
2022-01-29 02:51:09 +08:00

182 lines
4.8 KiB
Svelte

<script lang="ts">
import { onMount } from "svelte";
import { emit, listen } from "@tauri-apps/api/event";
import Preview from "./Preview.svelte";
let deviceMode = "none";
let outputMode = "none";
let ledMode = "none";
let keyboardSensitivity = 20;
let outputWebsocketUrl = "http://localhost:3000";
let ledSensitivity = 20;
let ledWebsocketUrl = "http://localhost:3001";
onMount(async () => {
await listen("showConfig", (event) => {
const payload: any = event.payload;
deviceMode = payload.deviceMode;
outputMode = payload.outputMode;
ledMode = payload.ledMode;
keyboardSensitivity = payload.keyboardSensitivity;
outputWebsocketUrl = payload.outputWebsocketUrl;
ledSensitivity = payload.ledSensitivity;
ledWebsocketUrl = payload.ledWebsocketUrl;
});
});
async function setConfig() {
console.log("Updating config");
await emit(
"setConfig",
JSON.stringify({
deviceMode,
outputMode,
ledMode,
keyboardSensitivity,
outputWebsocketUrl,
ledSensitivity,
ledWebsocketUrl,
})
);
console.log("Done");
}
async function hide() {
await emit("hide", "");
}
async function quit() {
await emit("quit", "");
}
</script>
<main class="main">
<div class="row">
<div class="header">
<!-- slidershim by @4yn -->
slidershim
</div>
</div>
<div class="row">
<Preview />
</div>
<div class="row">
<div class="label">Input Device</div>
<div class="input">
<select bind:value={deviceMode}>
<option value="none">None</option>
<option value="tasoller-one">GAMO2 Tasoller, 1.0 HID Firmware</option>
<option value="tasoller-two">GAMO2 Tasoller, 2.0 HID Firmware</option>
<option value="yuancon">Yuancon Laverita, HID Firmware</option>
<option value="brokenithm">Brokenithm</option>
<option value="brokenithm-ground">Brokenithm, Ground only</option>
</select>
</div>
</div>
<div class="row">
<div class="label">Output Mode</div>
<div class="input">
<select bind:value={outputMode}>
<option value="none">None</option>
<option value="kb-32-tasoller">Keyboard 32-zone, Tasoller Layout</option
>
<option value="kb-32-yuancon">Keyboard 32-zone, Yuancon Layout</option>
<option value="kb-6-deemo">Keyboard 6-zone, Deemo Layout</option>
<option value="websocket">Websocket</option>
</select>
</div>
</div>
{#if outputMode.slice(0, 2) === "kb"}
<div class="row">
<div class="label">Sensitivity</div>
<div class="input">
<input
type="number"
min="1"
max="255"
step="1"
bind:value={keyboardSensitivity}
/>
</div>
</div>
<div class="row">
<div class="label" />
<div class="input">
<input
type="range"
min="1"
max="255"
step="1"
bind:value={keyboardSensitivity}
/>
</div>
</div>
{/if}
{#if outputMode === "websocket"}
<div class="row">
<div class="label">Output URL</div>
<div class="input">
<input placeholder="URL" bind:value={outputWebsocketUrl} />
</div>
</div>
{/if}
<div class="row">
<div class="label">LED Mode</div>
<div class="input">
<select bind:value={ledMode}>
<option value="none">None</option>
<option value="reactive-4">Reactive, 4-Zone</option>
<option value="reactive-8">Reactive, 8-Zone</option>
<option value="reactive-16">Reactive, 16-Zone</option>
<option value="attract">Rainbow Attract Mode</option>
<option value="test">LED Test</option>
<option value="websocket">Websocket</option>
</select>
</div>
</div>
{#if ledMode.slice(0, 8) === "reactive"}
<div class="row">
<div class="label">Sensitivity</div>
<div class="input">
<input
type="number"
min="1"
max="255"
step="1"
bind:value={keyboardSensitivity}
/>
</div>
</div>
<div class="row">
<div class="label" />
<div class="input">
<input
type="range"
min="1"
max="255"
step="1"
bind:value={keyboardSensitivity}
/>
</div>
</div>
{/if}
{#if ledMode === "websocket"}
<div class="row">
<div class="label">LED URL</div>
<div class="input">
<input placeholder="URL" bind:value={ledWebsocketUrl} />
</div>
</div>
{/if}
<div class="row">
<button on:click={async () => await setConfig()}>Apply</button>
<button on:click={async () => await hide()}>Hide</button>
<button on:click={async () => await quit()}>Quit</button>
</div>
</main>
<style>
</style>