Newer
Older
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import * as React from 'react';
import { ParametersComponent } from 'mol-app/component/parameters';
import { StateAction } from 'mol-state/action';
import { PluginCommands } from 'mol-plugin/command';
import { UpdateTrajectory } from 'mol-plugin/state/actions/basic';
export class Controls extends PluginComponent<{ }, { }> {
console.log(btoa(JSON.stringify(this._snap)));
}
private setSnapshot = () => {
if (!this._snap) return;
<button onClick={this.getSnapshot}>Get Snapshot</button>
<button onClick={this.setSnapshot}>Set Snapshot</button>
export class _test_TrajectoryControls extends PluginComponent {
<button onClick={() => PluginCommands.State.ApplyAction.dispatch(this.plugin, {
state: this.plugin.state.data,
action: UpdateTrajectory.create({ action: 'advance', by: -1 })
})}><<</button>
<button onClick={() => PluginCommands.State.ApplyAction.dispatch(this.plugin, {
state: this.plugin.state.data,
action: UpdateTrajectory.create({ action: 'reset' })
})}>Reset</button>
<button onClick={() => PluginCommands.State.ApplyAction.dispatch(this.plugin, {
state: this.plugin.state.data,
action: UpdateTrajectory.create({ action: 'advance', by: +1 })
})}>>></button><br />
</div>
}
}
export class _test_ApplyAction extends PluginComponent<{ nodeRef: Transform.Ref, state: State, action: StateAction }, { params: any }> {
const obj = this.props.state.cells.get(this.props.nodeRef)!;
const p = this.props.action.definition.params;
if (!p || !p.default) return {};
const p = this.props.action.definition.params;
if (!p || !p.controls) return {};
state: this.props.state,
action: this.props.action.create(this.state.params),
ref: this.props.nodeRef
});
// this.context.applyTransform(this.props.state, this.props.nodeRef, this.props.transformer, this.state.params);
}
state = { params: this.getDefaultParams() }
render() {
const obj = this.getObj();
return <div key={`${this.props.nodeRef} ${this.props.action.id}`}>
<div style={{ borderBottom: '1px solid #999', marginBottom: '5px' }}><h3>{(action.definition.display && action.definition.display.name) || action.id}</h3></div>
<ParametersComponent params={this.getParamDef()} values={this.state.params as any} onChange={(k, v) => {
this.setState({ params: { ...this.state.params, [k]: v } });
}} />
<div style={{ textAlign: 'right' }}>
<button onClick={() => this.create()}>Create</button>
</div>
export class _test_UpdateTransform extends PluginComponent<{ state: State, nodeRef: Transform.Ref }, { params: any }> {
private getCell(ref?: string) {
return this.props.state.cells.get(ref || this.props.nodeRef)!;
private getDefParams() {
const cell = this.getCell();
return cell.transform.params;
}
private getParamDef() {
const cell = this.getCell();
const def = cell.transform.transformer.definition;
if (!cell.sourceRef || !def.params || !def.params.controls) return void 0;
const src = this.getCell(cell.sourceRef);
}
private update() {
console.log(this.props.nodeRef, this.state.params);
this.plugin.updateTransform(this.props.state, this.props.nodeRef, this.state.params);
// const t = this.context.state.data.tree.nodes.get(this.props.nodeRef)!;
// if (t) this.setState({ params: t.value.params });
// }
state = { params: this.getDefParams() };
const cell = this.getCell();
const transform = cell.transform;
if (!transform || transform.ref === Transform.RootRef) {
return <div />;
}
const params = this.getParamDef();
if (!params) return <div />;
const tr = transform.transformer;
return <div key={`${this.props.nodeRef} ${tr.id}`} style={{ marginBottom: '10ox' }}>
<div style={{ borderBottom: '1px solid #999' }}><h3>{(tr.definition.display && tr.definition.display.name) || tr.definition.name}</h3></div>
<ParametersComponent params={params} values={this.state.params as any} onChange={(k, v) => {
this.setState({ params: { ...this.state.params, [k]: v } });
}} />
<button onClick={() => this.update()} style={{ width: '100%' }}>Update</button>
</div>
}
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
}
export class CameraSnapshots extends PluginComponent<{ }, { }> {
render() {
return <div>
<h3>Camera Snapshots</h3>
<CameraSnapshotControls />
<CameraSnapshotList />
</div>;
}
}
class CameraSnapshotControls extends PluginComponent<{ }, { name: string, description: string }> {
componentDidMount() {
this.subscribe(this.plugin.events.state.cameraSnapshots.changed, () => this.forceUpdate());
}
state = { name: '', description: '' };
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>
<input type='text' value={this.state.name} placeholder='Name...' style={{ width: '33%', display: 'block', float: 'left' }} onChange={e => this.setState({ name: e.target.value })} />
<input type='text' value={this.state.description} placeholder='Description...' style={{ width: '67%', display: 'block' }} onChange={e => this.setState({ description: e.target.value })} />
<button style={{ float: 'right' }} onClick={this.clear}>Clear</button>
<button onClick={this.add}>Add</button>
</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' }}>
{this.plugin.state.cameraSnapshots.entries.valueSeq().map(e =><li key={e!.id}>
<button onClick={this.apply(e!.id)}>Set</button>
{e!.name} <small>{e!.description}</small>
<button onClick={this.remove(e!.id)} style={{ float: 'right' }}>X</button>
</li>)}
</ul>;
}