assembly-symmetry.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. import { PluginBehavior } from 'mol-plugin/behavior';
  7. import { ParamDefinition as PD } from 'mol-util/param-definition'
  8. import { AssemblySymmetry } from 'mol-model-props/rcsb/assembly-symmetry';
  9. import { CustomPropertyRegistry } from 'mol-plugin/util/custom-prop-registry';
  10. import { AssemblySymmetryClusterColorThemeProvider } from 'mol-model-props/rcsb/themes/assembly-symmetry';
  11. export const RCSBAssemblySymmetry = PluginBehavior.create<{ autoAttach: boolean }>({
  12. name: 'rcsb-assembly-symmetry-prop',
  13. display: { name: 'RCSB Assembly Symmetry', group: 'Custom Props' },
  14. ctor: class extends PluginBehavior.Handler<{ autoAttach: boolean }> {
  15. private attach = AssemblySymmetry.createAttachTask(this.ctx.fetch);
  16. private provider: CustomPropertyRegistry.Provider = {
  17. option: [AssemblySymmetry.Descriptor.name, 'RCSB Assembly Symmetry'],
  18. descriptor: AssemblySymmetry.Descriptor,
  19. defaultSelected: this.params.autoAttach,
  20. attachableTo: () => true,
  21. attach: this.attach
  22. }
  23. register(): void {
  24. this.ctx.customModelProperties.register(this.provider);
  25. // TODO: support filtering of themes based on the input structure
  26. // in this case, it would check structure.models[0].customProperties.has(AssemblySymmetry.Descriptor)
  27. this.ctx.structureRepresentation.themeCtx.colorThemeRegistry.add('rcsb-assembly-symmetry-cluster', AssemblySymmetryClusterColorThemeProvider)
  28. }
  29. update(p: { autoAttach: boolean }) {
  30. let updated = this.params.autoAttach !== p.autoAttach
  31. this.params.autoAttach = p.autoAttach;
  32. this.provider.defaultSelected = p.autoAttach;
  33. return updated;
  34. }
  35. unregister() {
  36. this.ctx.customModelProperties.unregister(AssemblySymmetry.Descriptor.name);
  37. this.ctx.structureRepresentation.themeCtx.colorThemeRegistry.remove('rcsb-assembly-symmetry-cluster')
  38. }
  39. },
  40. params: () => ({
  41. autoAttach: PD.Boolean(false)
  42. })
  43. });