From 0b12a4fa5211c4975d041aac95b308111ab2cbb1 Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Wed, 20 Feb 2019 17:26:32 +0100 Subject: [PATCH] mol-plugin: refactored CameraSnapshotManager --- src/mol-plugin/state.ts | 3 ++- src/mol-plugin/state/camera.ts | 33 +++++++++++++++------------------ src/mol-plugin/ui/camera.tsx | 2 +- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/mol-plugin/state.ts b/src/mol-plugin/state.ts index e583ebe6d..60bc4a272 100644 --- a/src/mol-plugin/state.ts +++ b/src/mol-plugin/state.ts @@ -22,7 +22,7 @@ class PluginState { readonly dataState: State; readonly behaviorState: State; readonly animation: PluginAnimationManager; - readonly cameraSnapshots = new CameraSnapshotManager(); + readonly cameraSnapshots: CameraSnapshotManager; readonly snapshots = new PluginStateSnapshotManager(); @@ -89,6 +89,7 @@ class PluginState { this.behavior.currentObject.next(this.dataState.behaviors.currentObject.value); + this.cameraSnapshots = new CameraSnapshotManager(plugin); this.animation = new PluginAnimationManager(plugin); } } diff --git a/src/mol-plugin/state/camera.ts b/src/mol-plugin/state/camera.ts index b05a2b069..86709a7a1 100644 --- a/src/mol-plugin/state/camera.ts +++ b/src/mol-plugin/state/camera.ts @@ -7,57 +7,54 @@ import { Camera } from 'mol-canvas3d/camera'; import { OrderedMap } from 'immutable'; import { UUID } from 'mol-util'; -import { RxEventHelper } from 'mol-util/rx-event-helper'; +import { PluginComponent } from 'mol-plugin/component'; +import { PluginContext } from 'mol-plugin/context'; export { CameraSnapshotManager } -class CameraSnapshotManager { - private ev = RxEventHelper.create(); - private _entries = OrderedMap<string, CameraSnapshotManager.Entry>().asMutable(); - +class CameraSnapshotManager extends PluginComponent<{ entries: OrderedMap<string, CameraSnapshotManager.Entry> }> { readonly events = { changed: this.ev() }; - get entries() { return this._entries; } - getEntry(id: string) { - return this._entries.get(id); + return this.state.entries.get(id); } remove(id: string) { - if (!this._entries.has(id)) return; - this._entries.delete(id); + if (!this.state.entries.has(id)) return; + this.updateState({ entries: this.state.entries.delete(id) }); this.events.changed.next(); } add(e: CameraSnapshotManager.Entry) { - this._entries.set(e.id, e); + this.updateState({ entries: this.state.entries.set(e.id, e) }); this.events.changed.next(); } clear() { - if (this._entries.size === 0) return; - this._entries = OrderedMap<string, CameraSnapshotManager.Entry>().asMutable(); + if (this.state.entries.size === 0) return; + this.updateState({ entries: OrderedMap<string, CameraSnapshotManager.Entry>() }); this.events.changed.next(); } getStateSnapshot(): CameraSnapshotManager.StateSnapshot { const entries: CameraSnapshotManager.Entry[] = []; - this._entries.forEach(e => entries.push(e!)); + this.state.entries.forEach(e => entries.push(e!)); return { entries }; } setStateSnapshot(state: CameraSnapshotManager.StateSnapshot ) { - this._entries = OrderedMap<string, CameraSnapshotManager.Entry>().asMutable(); + const entries = OrderedMap<string, CameraSnapshotManager.Entry>().asMutable(); for (const e of state.entries) { - this._entries.set(e.id, e); + entries.set(e.id, e); } + this.updateState({ entries: entries.asImmutable() }); this.events.changed.next(); } - dispose() { - this.ev.dispose(); + constructor(ctx: PluginContext) { + super(ctx, { entries: OrderedMap<string, CameraSnapshotManager.Entry>() }); } } diff --git a/src/mol-plugin/ui/camera.tsx b/src/mol-plugin/ui/camera.tsx index c818c3068..796bc5d86 100644 --- a/src/mol-plugin/ui/camera.tsx +++ b/src/mol-plugin/ui/camera.tsx @@ -65,7 +65,7 @@ class CameraSnapshotList extends PluginUIComponent<{ }, { }> { render() { return <ul style={{ listStyle: 'none' }} className='msp-state-list'> - {this.plugin.state.cameraSnapshots.entries.valueSeq().map(e =><li key={e!.id}> + {this.plugin.state.cameraSnapshots.state.entries.valueSeq().map(e =><li key={e!.id}> <button className='msp-btn msp-btn-block msp-form-control' onClick={this.apply(e!.id)}>{e!.name || e!.timestamp} <small>{e!.description}</small></button> <button onClick={this.remove(e!.id)} className='msp-btn msp-btn-link msp-state-list-remove-button'> <span className='msp-icon msp-icon-remove' /> -- GitLab