marker-action.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /**
  2. * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. import { OrderedSet } from '../mol-data/int';
  7. export enum MarkerAction {
  8. Highlight,
  9. RemoveHighlight,
  10. Select,
  11. Deselect,
  12. Toggle,
  13. Clear
  14. }
  15. export function applyMarkerAction(array: Uint8Array, set: OrderedSet, action: MarkerAction) {
  16. let changed = false;
  17. OrderedSet.forEach(set, i => {
  18. let v = array[i];
  19. switch (action) {
  20. case MarkerAction.Highlight:
  21. if (v % 2 === 0) {
  22. v += 1;
  23. }
  24. break;
  25. case MarkerAction.RemoveHighlight:
  26. if (v % 2 !== 0) {
  27. v -= 1;
  28. }
  29. break;
  30. case MarkerAction.Select:
  31. if (v < 2)
  32. v += 2;
  33. // v += 2
  34. break;
  35. case MarkerAction.Deselect:
  36. // if (v >= 2) {
  37. // v -= 2
  38. // }
  39. v = v % 2;
  40. break;
  41. case MarkerAction.Toggle:
  42. if (v >= 2) {
  43. v -= 2;
  44. }
  45. else {
  46. v += 2;
  47. }
  48. break;
  49. case MarkerAction.Clear:
  50. v = 0;
  51. break;
  52. }
  53. changed = array[i] !== v || changed;
  54. array[i] = v;
  55. })
  56. return changed;
  57. }