From 3620074c860aaa5573f4b1947fcfd99e26b46ff6 Mon Sep 17 00:00:00 2001 From: Misode Date: Mon, 25 May 2020 19:04:25 +0200 Subject: [PATCH] Add boolean nodes --- src/app/app.ts | 4 +++- src/model/DataModel.ts | 14 +++++++++----- src/nodes/BooleanNode.ts | 22 ++++++++++++++++++++++ 3 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 src/nodes/BooleanNode.ts diff --git a/src/app/app.ts b/src/app/app.ts index 0b10c355..35d740fc 100644 --- a/src/app/app.ts +++ b/src/app/app.ts @@ -6,6 +6,7 @@ import { DataModel } from '../model/DataModel' import { TreeView } from '../view/TreeView' import { SourceView } from '../view/SourceView' import { ListNode } from '../nodes/ListNode' +import { BooleanNode } from '../nodes/BooleanNode' const EntityCollection = ['sheep', 'pig'] @@ -15,7 +16,8 @@ const predicateTree = new RootNode('predicate', { }), predicate: new ObjectNode({ type: new EnumNode(EntityCollection), - nbt: new StringNode() + nbt: new StringNode(), + test: new BooleanNode() }), effects: new ListNode( new ObjectNode({ diff --git a/src/model/DataModel.ts b/src/model/DataModel.ts index 7373db96..83a15462 100644 --- a/src/model/DataModel.ts +++ b/src/model/DataModel.ts @@ -24,14 +24,18 @@ export class DataModel { this.listeners.forEach(listener => listener.invalidated(this)) } - set(path: Path, value: any) { + get(path: Path) { let node = this.data; - for (let index of path.pop()) { - if (node[index] === undefined) { - node[index] = {} - } + for (let index of path) { + if (node === undefined) node = {} node = node[index] } + return node + } + + set(path: Path, value: any) { + let node = this.get(path.pop()) + if (node === undefined) node = {} console.log('Set', path.toString(), JSON.stringify(value)) diff --git a/src/nodes/BooleanNode.ts b/src/nodes/BooleanNode.ts new file mode 100644 index 00000000..1bfc2d42 --- /dev/null +++ b/src/nodes/BooleanNode.ts @@ -0,0 +1,22 @@ +import { AbstractNode, NodeMods, RenderOptions } from "./AbstractNode"; +import { Path } from "../model/Path"; +import { TreeView } from "../view/TreeView"; + +export class BooleanNode extends AbstractNode { + constructor(mods?: NodeMods) { + super(mods) + } + + render(path: Path, value: boolean, view: TreeView, options?: RenderOptions) { + const falseButton = view.registerClick(el => { + view.model.set(path, value === false ? undefined : false) + }) + const trueButton = view.registerClick(el => { + view.model.set(path, value === true ? undefined : true) + }) + return this.wrap(path, view, ` + ${options?.hideLabel ? `` : ``} + False + True`) + } +}