stage-manager.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import { Stage } from "../drawers/stage";
  2. class StageManager {
  3. constructor() {
  4. this._width = this._getWidth();
  5. this._height = this._getHeigth();
  6. this._files = [];
  7. this.stages = [];
  8. this._stage;
  9. this._bootstrap();
  10. }
  11. getSize() {
  12. return {
  13. w: this._width,
  14. h: this._height
  15. }
  16. }
  17. getCurrentStage() {
  18. return this._stage;
  19. }
  20. getCurrentKonvaStage() {
  21. return this._stage.konvaStage;
  22. }
  23. getCurrentLayer() {
  24. return this._stage.getCurrentLayer();
  25. }
  26. getCurrentKonvaLayer() {
  27. return this._stage.getCurrentKonvaLayer();
  28. }
  29. create() {
  30. let id = this._files.length + 1;
  31. this._createLayer();
  32. this._makeTemplate(this._stage.layer);
  33. this._files.push(this._stage.layer);
  34. this._clearLayers();
  35. return this._stage;
  36. }
  37. getFiles() {
  38. return this._files;
  39. }
  40. _getStage() {
  41. return this._stage;
  42. }
  43. _setStage(stage) {
  44. this._stage = stage;
  45. }
  46. _createLayer() {
  47. const stage = this.getCurrentStage();
  48. const layer = stage.createLayer();
  49. return layer;
  50. }
  51. _getFiles() {
  52. return _files;
  53. }
  54. _clearLayers(layer) {
  55. this._files.forEach(element => {
  56. element.konvaLayer.hide();
  57. });
  58. if (layer == undefined) layer = this.getCurrentLayer();
  59. else this._stage.setCurrentLayer(layer);
  60. layer.konvaLayer.show();
  61. this.getCurrentKonvaStage().draw();
  62. }
  63. _getWidth() {
  64. return $("#content").width();
  65. }
  66. _getHeigth() {
  67. return (
  68. $("#sidebar").height() - $("#header").height() - $("#files").height() - 2
  69. );
  70. }
  71. _evenNewDocument() {
  72. this.create();
  73. }
  74. _getCurrentLayer() {
  75. return _layer.layer;
  76. }
  77. _getCurrentLayerWithSequence() {
  78. return _layer;
  79. }
  80. _selectFile(e) {
  81. const file = $(e.currentTarget);
  82. const id = parseInt(file.attr("file-id"));
  83. const layer = this._files.find(function (element) {
  84. return element.id == id;
  85. });
  86. $(".file").each(function () {
  87. $(this).removeClass("active");
  88. });
  89. file.addClass("active");
  90. if (layer != undefined) this._clearLayers(layer);
  91. this._setLayerTitle(layer);
  92. }
  93. _bootstrap() {
  94. $("#files").empty();
  95. $("body").on("click", "#new-document", this._evenNewDocument.bind(this));
  96. $("body").on("click", ".file", this._selectFile.bind(this));
  97. $("#stages").append(`<div id="container" class="stage"></div>`);
  98. const stage = new Konva.Stage({
  99. container: `container`,
  100. width: this._width,
  101. height: this._height
  102. });
  103. this._setStage(new Stage());
  104. this._stage.setKonvaStage(stage);
  105. this.create();
  106. }
  107. _makeTemplate(layer) {
  108. $(".file").each(function () {
  109. $(this).removeClass("active");
  110. });
  111. $("#files").append(
  112. `<li class="file active" file-id="${layer.id}"><button>${layer.name}</button></li>`
  113. );
  114. this._setLayerTitle(layer);
  115. }
  116. _setLayerTitle(layer) {
  117. $("#selected-document").empty();
  118. $("#selected-document").append(layer.name);
  119. }
  120. }
  121. export const stageManager = new StageManager();