{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-constraints/src/components/demo/lively-petrinet-toolbar.js"],"names":["Morph","ContextMenu","pt","START","STOP","STEP","RUN","PAUSE","LivelyPetrinetToolbar","initialize","windowTitle","registerButtons","initializeSimulationSlider","initializeSimulationButtons","get","addEventListener","onDelete","stepState","petrinet","stepUntilFired","updateSlider","getCurrentStep","lively","query","undefined","error","isStarted","innerHTML","isRunning","maxStep","max","value","innerText","simulationSlider","event","onSimulationSlider","target","simulationStep","simulationState","setState","startButton","runButton","onStep","onStartButton","start","onStepButton","next","step","onRunButton","sleep","deleteSelectedElement","ms","Promise","resolve","setTimeout"],"mappings":"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","file":"lively-petrinet-toolbar.js","sourcesContent":["import Morph from \"src/components/widgets/lively-morph.js\"\nimport ContextMenu from 'src/client/contextmenu.js';\nimport {pt} from 'src/client/graphics.js';\n\nconst START = \"Start\";\nconst STOP = \"Stop\";\nconst STEP = \"Step\";\nconst RUN = \"Run\";\nconst PAUSE = \"Pause\";\n\n\n\nexport default class LivelyPetrinetToolbar extends Morph {\n\n  initialize() {\n    this.windowTitle = \"LivelyPetrinetToolbar\";\n    this.registerButtons();\n    \n    this.initializeSimulationSlider();\n    this.initializeSimulationButtons();\n    \n    this.get(\"#delete\").addEventListener( \"click\", () => this.onDelete());\n    // We use the yield keyword, so we have to keep a reference on the function\n    this.stepState = this.petrinet.stepUntilFired();\n    this.updateSlider(this.petrinet.getCurrentStep());\n  }\n  \n  \n  \n  // Access\n  \n  \n  \n  get petrinet() {\n    const petrinet = lively.query(this, \"lively-petrinet\");\n    if (petrinet === undefined) {\n      lively.error(\"Error: No Petrinet\")\n    }\n    return petrinet;\n  }\n  \n  isStarted() {\n    return this.get(\"#startButton\").innerHTML == STOP;\n  }\n  \n  isRunning() {\n    return this.get(\"#runButton\").innerHTML == PAUSE;\n  }\n  \n  \n  \n  \n  // Simulation\n  \n  \n  \n  updateSlider(maxStep) {\n    this.get(\"#simulationSlider\").max = maxStep;\n    this.get(\"#simulationSlider\").value = maxStep;\n    this.get(\"#simulationState\").innerText = maxStep;\n  }\n  \n  initializeSimulationSlider() {\n    const simulationSlider = this.get('#simulationSlider');\n    simulationSlider.addEventListener('input', (event) => this.onSimulationSlider(event));\n  }\n  \n  onSimulationSlider({ target: { value: simulationStep } }) {\n    const simulationState = this.get('#simulationState');\n    simulationState.innerText = simulationStep;\n    this.petrinet.setState(simulationStep);\n  }\n  \n  initializeSimulationButtons() {\n    let startButton = this.get(\"#startButton\");\n    let runButton = this.get(\"#runButton\");\n    \n    startButton.innerHTML = START;\n    runButton.innerHTML = RUN;\n  }\n  \n  onStep() {\n    this.petrinet.onStep();\n  }\n  \n  async onStartButton() {\n    let startButton = await this.get(\"#startButton\");\n\n    if (!this.isStarted()) {\n      startButton.innerHTML = STOP;\n      this.petrinet.start();\n    } else {\n      startButton.innerHTML = START;\n      this.get(\"#runButton\").innerHTML = RUN;\n      this.petrinet.setState(0);\n    }\n  }\n  \n  onStepButton() {\n    if (this.isStarted()) {\n      this.stepState.next();\n      const step = this.petrinet.getCurrentStep();\n      this.updateSlider(step);\n    }\n  }\n  \n  async onRunButton(){\n   if (!this.isStarted()) {\n     return;\n   }\n   \n    let runButton = this.get(\"#runButton\");\n    if (!this.isRunning()) {\n      runButton.innerHTML = PAUSE;\n    } else {\n      runButton.innerHTML = RUN;\n    }\n    \n        \n    // StartRunning\n    while (this.isStarted() && this.isRunning()) {\n      this.onStep();\n      await this.sleep(500);\n      this.updateSlider(this.petrinet.getCurrentStep());\n    }\n    \n  }\n\n  \n  \n  // Toolbar\n  \n  \n  \n  onDelete(){\n    //lively.notify(\"Hallo\");\n    this.petrinet.deleteSelectedElement();\n  }\n\n  \n  \n  // Helper\n  \n  \n  \n  async sleep(ms) {\n    return new Promise(resolve => setTimeout(resolve, ms));\n  }\n  \n\n  \n\n  \n\n  \n  \n\n  \n}"]}