# HG changeset patch # User drewp@bigasterisk.com # Date 2023-06-02 01:53:26 # Node ID c5cd51e32fc522fc64161f2a1746202bcf205fe8 # Parent d050b8efda9d63575616aa1d35d5fa67f81fff4f refactor diff --git a/light9/fade/Light9EffectFader.ts b/light9/fade/Light9EffectFader.ts new file mode 100644 --- /dev/null +++ b/light9/fade/Light9EffectFader.ts @@ -0,0 +1,124 @@ +import { css, html, LitElement } from "lit"; +import { customElement, property, state } from "lit/decorators.js"; +import { NamedNode } from "n3"; +import { getTopGraph } from "../web/RdfdbSyncedGraph"; +import { showRoot } from "../web/show_specific"; +import { SyncedGraph } from "../web/SyncedGraph"; +import { meter } from "./Light9FadeUi"; +export { Light9Fader } from "./Light9Fader"; + + +@customElement("light9-effect-fader") +export class Light9EffectFader extends LitElement { + static styles = [ + css` + :host { + display: inline-block; + border: 2px gray outset; + background: #272727; + } + light9-fader { + margin: 4px; + width: 100%; + } + `, + ]; + render() { + return html` + +
${this.value.toPrecision(3)}
+
eff:
+
attr:
+
Slider ${this.column}
+ `; + } + + graph?: SyncedGraph; + ctx: NamedNode = new NamedNode(showRoot + "/fade"); + @property() uri!: NamedNode; + @property() column!: string; + @property() effect?: NamedNode; + @property() effectAttr?: NamedNode; + @state() setting?: NamedNode; + + @property() value: number = 0.0; + + constructor() { + super(); + getTopGraph().then((g) => { + this.graph = g; + this.graph.runHandler(this.compile.bind(this, this.graph), `config ${this.uri.value}`); + this.graph.runHandler(this.compileValue.bind(this, this.graph), `valueSync ${this.uri.value}`); + }); + } + + private compile(graph: SyncedGraph) { + const U = graph.U(); + if (!graph.contains(this.uri, U("rdf:type"), U(":Fader"))) { + // not loaded yet, perhaps + this.column = "unset"; + this.effect = undefined; + this.effectAttr = undefined; + return; + } + this.column = graph.stringValue(this.uri, U(":column")); + this.effect = graph.uriValue(this.uri, U(":effect")); + this.setting = graph.uriValue(this.uri, U(":setting")); + if (this.setting !== undefined) { + try { + this.effectAttr = graph.uriValue(this.setting, U(":effectAttr")); + } catch (e) { + this.effectAttr = undefined; + } + } + } + + private compileValue(graph: SyncedGraph) { + const U = graph.U(); + if (!graph.contains(this.uri, U("rdf:type"), U(":Fader"))) { + // not loaded yet + // console.timeEnd(`valueSync ${this.uri.value}`) + return; + } + const st = graph.uriValue(this.uri, U(":setting")); + this.value = graph.floatValue(st, graph.Uri(":value")); + } + + onSliderInput(ev: CustomEvent) { + if (this.graph === undefined) { + return; + } + const U = this.graph.U(); + const prev = this.value; + const v: number = ev.detail.value; + this.value = parseFloat(v.toPrecision(3)); // rewrite pls + if (this.value == prev) { + return; + } + meter.tick(); + if (!this.setting) { + throw new Error("can't make new settings yet"); + } + this.graph.patchObject(this.setting, this.graph.Uri(":value"), this.graph.LiteralRoundedFloat(this.value), this.ctx); + } + + onEffectChange(ev: CustomEvent) { + if (this.graph === undefined) { + return; + } + const { newValue } = ev.detail; + this.graph.patchObject(this.uri, this.graph.Uri(":effect"), newValue, this.ctx); + } + + onEffectAttrChange(ev: CustomEvent) { + if (this.graph === undefined) { + return; + } + const { newValue } = ev.detail; + if (this.setting === undefined) { + this.setting = this.graph.nextNumberedResource(this.graph.Uri(":fade_set")); + this.graph.patchObject(this.uri, this.graph.Uri(":setting"), this.setting, this.ctx); + } + this.graph.patchObject(this.setting, this.graph.Uri(":effectAttr"), newValue, this.ctx); + } +} diff --git a/light9/fade/Light9FadeUi.ts b/light9/fade/Light9FadeUi.ts --- a/light9/fade/Light9FadeUi.ts +++ b/light9/fade/Light9FadeUi.ts @@ -1,16 +1,16 @@ import debug from "debug"; import { css, html, LitElement } from "lit"; -import { customElement, property, state } from "lit/decorators.js"; +import { customElement, property } from "lit/decorators.js"; import { NamedNode } from "n3"; import { getTopGraph } from "../web/RdfdbSyncedGraph"; -import { shortShow, showRoot } from "../web/show_specific"; +import { shortShow } from "../web/show_specific"; import { SyncedGraph } from "../web/SyncedGraph"; export { EditChoice } from "../web/EditChoice"; -export { Light9Fader } from "./Light9Fader"; +export { Light9EffectFader } from "./Light9EffectFader"; debug.enable("*"); const log = debug("fade"); -let meter: FPSMeter; +export let meter: FPSMeter; @customElement("light9-fade-ui") export class Light9FadeUi extends LitElement { @@ -62,117 +62,4 @@ export class Light9FadeUi extends LitEle } } -@customElement("light9-effect-fader") -export class Light9EffectFader extends LitElement { - static styles = [ - css` - :host { - display: inline-block; - border: 2px gray outset; - background: #272727; - } - light9-fader { - margin: 4px; - width: 100%; - } - `, - ]; - render() { - return html` - -
${this.value.toPrecision(3)}
-
eff:
-
attr:
-
<=> Slider ${this.column}
- `; - } - graph?: SyncedGraph; - ctx: NamedNode = new NamedNode(showRoot + "/fade"); - @property() uri!: NamedNode; - @property() column!: string; - @property() effect?: NamedNode; - @property() effectAttr?: NamedNode - @state() setting?: NamedNode; - - @property() value: number = 0.0; - - constructor() { - super(); - getTopGraph().then((g) => { - this.graph = g; - this.graph.runHandler(this.compile.bind(this, this.graph), `config ${this.uri.value}`); - this.graph.runHandler(this.compileValue.bind(this, this.graph), `valueSync ${this.uri.value}`); - }); - } - - private compile(graph: SyncedGraph) { - const U = graph.U(); - if (!graph.contains(this.uri, U("rdf:type"), U(":Fader"))) { - // not loaded yet, perhaps - this.column = "unset"; - this.effect = undefined; - this.effectAttr = undefined; - return; - } - this.column = graph.stringValue(this.uri, U(":column")); - this.effect = graph.uriValue(this.uri, U(":effect")); - this.setting = graph.uriValue(this.uri, U(":setting")); - if (this.setting !== undefined) { - try { - this.effectAttr = graph.uriValue(this.setting, U(":effectAttr")); - } catch (e) { - this.effectAttr = undefined; - } - } - } - - private compileValue(graph: SyncedGraph) { - const U = graph.U(); - if (!graph.contains(this.uri, U("rdf:type"), U(":Fader"))) { - // not loaded yet - // console.timeEnd(`valueSync ${this.uri.value}`) - return; - } - const st = graph.uriValue(this.uri, U(":setting")); - this.value = graph.floatValue(st, graph.Uri(":value")); - } - - onSliderInput(ev: CustomEvent) { - if (this.graph === undefined) { - return; - } - const U = this.graph.U(); - const prev = this.value; - const v: number = ev.detail.value; - this.value = parseFloat(v.toPrecision(3)); // rewrite pls - if (this.value == prev) { - return; - } - meter.tick(); - if (!this.setting) { - throw new Error("can't make new settings yet"); - } - this.graph.patchObject(this.setting, this.graph.Uri(":value"), this.graph.LiteralRoundedFloat(this.value), this.ctx); - } - - onEffectChange(ev: CustomEvent) { - if (this.graph === undefined) { - return; - } - const { newValue } = ev.detail; - this.graph.patchObject(this.uri, this.graph.Uri(":effect"), newValue, this.ctx); - } - - onEffectAttrChange(ev: CustomEvent) { - if (this.graph === undefined) { - return; - } - const { newValue } = ev.detail; - if (this.setting === undefined) { - this.setting = this.graph.nextNumberedResource(this.graph.Uri(":fade_set")); - this.graph.patchObject(this.uri, this.graph.Uri(":setting"), this.setting, this.ctx); - } - this.graph.patchObject(this.setting, this.graph.Uri(":effectAttr"), newValue, this.ctx); - } -}