|
@@ -4,44 +4,70 @@
|
|
|
* @author David Sehnal <david.sehnal@gmail.com>
|
|
|
*/
|
|
|
|
|
|
-import { PluginStateObject } from './base';
|
|
|
import { CifFile } from 'mol-io/reader/cif';
|
|
|
-import { Model as _Model, Structure as _Structure } from 'mol-model/structure'
|
|
|
+import { Model as _Model, Structure as _Structure } from 'mol-model/structure';
|
|
|
+import { VolumeData } from 'mol-model/volume';
|
|
|
+import { PluginBehavior } from 'mol-plugin/behavior/behavior';
|
|
|
+import { Representation } from 'mol-repr';
|
|
|
import { StructureRepresentation } from 'mol-repr/structure/index';
|
|
|
import { VolumeRepresentation } from 'mol-repr/volume';
|
|
|
-import { VolumeData } from 'mol-model/volume';
|
|
|
+import { StateObject, Transformer } from 'mol-state';
|
|
|
+
|
|
|
+export type TypeClass = 'root' | 'data' | 'prop'
|
|
|
+
|
|
|
+export namespace PluginStateObject {
|
|
|
+ export type Any = StateObject<any, TypeInfo>
|
|
|
+
|
|
|
+ export type TypeClass = 'Root' | 'Group' | 'Data' | 'Object' | 'Representation3D' | 'Behavior'
|
|
|
+ export interface TypeInfo { name: string, typeClass: TypeClass }
|
|
|
+
|
|
|
+ export const Create = StateObject.factory<TypeInfo>();
|
|
|
+
|
|
|
+ export function isRepresentation3D(o?: Any): o is StateObject<Representation.Any, TypeInfo> {
|
|
|
+ return !!o && o.type.typeClass === 'Representation3D';
|
|
|
+ }
|
|
|
|
|
|
-const _create = PluginStateObject.Create, _createRepr3D = PluginStateObject.CreateRepresentation3D
|
|
|
+ export function isBehavior(o?: Any): o is StateObject<PluginBehavior, TypeInfo> {
|
|
|
+ return !!o && o.type.typeClass === 'Behavior';
|
|
|
+ }
|
|
|
|
|
|
-namespace PluginStateObjects {
|
|
|
- export class Root extends _create({ name: 'Root', typeClass: 'Root' }) { }
|
|
|
+ export function CreateRepresentation3D<T extends Representation.Any>(type: { name: string }) {
|
|
|
+ return Create<T>({ ...type, typeClass: 'Representation3D' })
|
|
|
+ }
|
|
|
|
|
|
- export class Group extends _create({ name: 'Group', typeClass: 'Group' }) { }
|
|
|
+ export function CreateBehavior<T extends PluginBehavior>(type: { name: string }) {
|
|
|
+ return Create<T>({ ...type, typeClass: 'Behavior' })
|
|
|
+ }
|
|
|
+
|
|
|
+ export class Root extends Create({ name: 'Root', typeClass: 'Root' }) { }
|
|
|
+
|
|
|
+ export class Group extends Create({ name: 'Group', typeClass: 'Group' }) { }
|
|
|
|
|
|
export namespace Data {
|
|
|
- export class String extends _create<string>({ name: 'String Data', typeClass: 'Data', }) { }
|
|
|
- export class Binary extends _create<Uint8Array>({ name: 'Binary Data', typeClass: 'Data' }) { }
|
|
|
- export class Json extends _create<any>({ name: 'JSON Data', typeClass: 'Data' }) { }
|
|
|
- export class Cif extends _create<CifFile>({ name: 'CIF File', typeClass: 'Data' }) { }
|
|
|
+ export class String extends Create<string>({ name: 'String Data', typeClass: 'Data', }) { }
|
|
|
+ export class Binary extends Create<Uint8Array>({ name: 'Binary Data', typeClass: 'Data' }) { }
|
|
|
+ export class Json extends Create<any>({ name: 'JSON Data', typeClass: 'Data' }) { }
|
|
|
+ export class Cif extends Create<CifFile>({ name: 'CIF File', typeClass: 'Data' }) { }
|
|
|
|
|
|
// TODO
|
|
|
- // export class MultipleRaw extends _create<{
|
|
|
+ // export class MultipleRaw extends Create<{
|
|
|
// [key: string]: { type: 'String' | 'Binary', data: string | Uint8Array }
|
|
|
// }>({ name: 'Data', typeClass: 'Data', shortName: 'MD', description: 'Multiple Keyed Data.' }) { }
|
|
|
}
|
|
|
|
|
|
export namespace Molecule {
|
|
|
- export class Trajectory extends _create<ReadonlyArray<_Model>>({ name: 'Trajectory', typeClass: 'Object' }) { }
|
|
|
- export class Model extends _create<_Model>({ name: 'Model', typeClass: 'Object' }) { }
|
|
|
- export class Structure extends _create<_Structure>({ name: 'Structure', typeClass: 'Object' }) { }
|
|
|
- export class Representation3D extends _createRepr3D<StructureRepresentation<any>>({ name: 'Structure 3D' }) { }
|
|
|
+ export class Trajectory extends Create<ReadonlyArray<_Model>>({ name: 'Trajectory', typeClass: 'Object' }) { }
|
|
|
+ export class Model extends Create<_Model>({ name: 'Model', typeClass: 'Object' }) { }
|
|
|
+ export class Structure extends Create<_Structure>({ name: 'Structure', typeClass: 'Object' }) { }
|
|
|
+ export class Representation3D extends CreateRepresentation3D<StructureRepresentation<any>>({ name: 'Structure 3D' }) { }
|
|
|
}
|
|
|
|
|
|
export namespace Volume {
|
|
|
- export class Data extends _create<VolumeData>({ name: 'Volume Data', typeClass: 'Object' }) { }
|
|
|
- export class Representation3D extends _createRepr3D<VolumeRepresentation<any>>({ name: 'Volume 3D' }) { }
|
|
|
+ export class Data extends Create<VolumeData>({ name: 'Volume Data', typeClass: 'Object' }) { }
|
|
|
+ export class Representation3D extends CreateRepresentation3D<VolumeRepresentation<any>>({ name: 'Volume 3D' }) { }
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-export { PluginStateObjects }
|
|
|
+export namespace PluginStateTransform {
|
|
|
+ export const Create = Transformer.factory('ms-plugin');
|
|
|
+}
|