12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /**
- * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author David Sehnal <david.sehnal@gmail.com>
- */
- import { PluginCommands } from 'mol-plugin/command';
- import * as React from 'react';
- import { PluginComponent } from './base';
- import { ParamDefinition as PD } from 'mol-util/param-definition';
- import { ParameterControls } from './controls/parameters';
- export class CameraSnapshots extends PluginComponent<{ }, { }> {
- render() {
- return <div>
- <div className='msp-section-header'>Camera Snapshots</div>
- <CameraSnapshotControls />
- <CameraSnapshotList />
- </div>;
- }
- }
- class CameraSnapshotControls extends PluginComponent<{ }, { name: string, description: string }> {
- static Params = {
- name: PD.Text(),
- description: PD.Text()
- }
- state = PD.getDefaultValues(CameraSnapshotControls.Params);
- add = () => {
- PluginCommands.Camera.Snapshots.Add.dispatch(this.plugin, this.state);
- this.setState({ name: '', description: '' })
- }
- clear = () => {
- PluginCommands.Camera.Snapshots.Clear.dispatch(this.plugin, {});
- }
- render() {
- return <div>
- <ParameterControls params={CameraSnapshotControls.Params} values={this.state} onEnter={this.add} onChange={p => this.setState({ [p.name]: p.value } as any)} />
- <div className='msp-btn-row-group'>
- <button className='msp-btn msp-btn-block msp-form-control' onClick={this.add}>Add</button>
- <button className='msp-btn msp-btn-block msp-form-control' onClick={this.clear}>Clear</button>
- </div>
- </div>;
- }
- }
- class CameraSnapshotList extends PluginComponent<{ }, { }> {
- componentDidMount() {
- this.subscribe(this.plugin.events.state.cameraSnapshots.changed, () => this.forceUpdate());
- }
- apply(id: string) {
- return () => PluginCommands.Camera.Snapshots.Apply.dispatch(this.plugin, { id });
- }
- remove(id: string) {
- return () => {
- PluginCommands.Camera.Snapshots.Remove.dispatch(this.plugin, { id });
- }
- }
- render() {
- return <ul style={{ listStyle: 'none' }} className='msp-state-list'>
- {this.plugin.state.cameraSnapshots.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' />
- </button>
- </li>)}
- </ul>;
- }
- }
|