camera.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. */
  6. import { Camera } from '../mol-canvas3d/camera';
  7. import { OrderedMap } from 'immutable';
  8. import { UUID } from '../mol-util';
  9. import { PluginComponent } from './component';
  10. export { CameraSnapshotManager }
  11. class CameraSnapshotManager extends PluginComponent<{ entries: OrderedMap<string, CameraSnapshotManager.Entry> }> {
  12. readonly events = {
  13. changed: this.ev()
  14. };
  15. getEntry(id: string) {
  16. return this.state.entries.get(id);
  17. }
  18. remove(id: string) {
  19. if (!this.state.entries.has(id)) return;
  20. this.updateState({ entries: this.state.entries.delete(id) });
  21. this.events.changed.next();
  22. }
  23. add(e: CameraSnapshotManager.Entry) {
  24. this.updateState({ entries: this.state.entries.set(e.id, e) });
  25. this.events.changed.next();
  26. }
  27. clear() {
  28. if (this.state.entries.size === 0) return;
  29. this.updateState({ entries: OrderedMap<string, CameraSnapshotManager.Entry>() });
  30. this.events.changed.next();
  31. }
  32. getStateSnapshot(): CameraSnapshotManager.StateSnapshot {
  33. const entries: CameraSnapshotManager.Entry[] = [];
  34. this.state.entries.forEach(e => entries.push(e!));
  35. return { entries };
  36. }
  37. setStateSnapshot(state: CameraSnapshotManager.StateSnapshot ) {
  38. const entries = OrderedMap<string, CameraSnapshotManager.Entry>().asMutable();
  39. for (const e of state.entries) {
  40. entries.set(e.id, e);
  41. }
  42. this.updateState({ entries: entries.asImmutable() });
  43. this.events.changed.next();
  44. }
  45. constructor() {
  46. super({ entries: OrderedMap<string, CameraSnapshotManager.Entry>() });
  47. }
  48. }
  49. namespace CameraSnapshotManager {
  50. export interface Entry {
  51. id: UUID,
  52. timestamp: string,
  53. name?: string,
  54. description?: string,
  55. snapshot: Camera.Snapshot
  56. }
  57. export function Entry(snapshot: Camera.Snapshot, name?: string, description?: string): Entry {
  58. return { id: UUID.create22(), timestamp: new Date().toLocaleString(), name, snapshot, description };
  59. }
  60. export interface StateSnapshot {
  61. entries: Entry[]
  62. }
  63. }