diff --git a/models/SimpleUI2.model b/models/SimpleUI2.model
index bf240ca..da3b0c3 100644
--- a/models/SimpleUI2.model
+++ b/models/SimpleUI2.model
@@ -1,5 +1,5 @@
native channel ScreenUpdate {
- in screen(curSc: Json, update(nextSc)) = nextSc
+ in screen(curSc: Json, update(curSc, nextSc)) = nextSc
}
native channel SetVisible(wid: Str) {
diff --git a/src/main/java/com/example/test/rest_controllers/ElementsController.java b/src/main/java/com/example/test/rest_controllers/ElementsController.java
new file mode 100644
index 0000000..354b46a
--- /dev/null
+++ b/src/main/java/com/example/test/rest_controllers/ElementsController.java
@@ -0,0 +1,22 @@
+package com.example.test.rest_controllers;
+
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/elements")
+public class ElementsController {
+
+ @PostMapping("/buttonPressed")
+ public void buttonPressed(@RequestParam("id") String id) {
+ System.out.println("button " + id + " pressed!");
+ }
+
+ @PostMapping("/buttonReleased")
+ public void buttonReleased(@RequestParam("id") String id) {
+ System.out.println("button " + id + " released!");
+ }
+
+}
diff --git a/src/main/java/com/example/test/services/ButtonService.java b/src/main/java/com/example/test/services/ButtonService.java
new file mode 100644
index 0000000..0b39ce0
--- /dev/null
+++ b/src/main/java/com/example/test/services/ButtonService.java
@@ -0,0 +1,19 @@
+package com.example.test.services;
+
+import org.springframework.stereotype.Service;
+
+import models.dataConstraintModel.ResourcePath;
+import models.dataFlowModel.DataTransferChannel;
+import simulator.Resource;
+import simulator.Simulator;
+import simulator.interfaces.NativeSender;
+
+@Service
+public class ButtonService extends NativeSender{
+
+ public ButtonService(Simulator simulator, DataTransferChannel channel, ResourcePath resourcePath,
+ Resource resource) {
+ super(simulator, channel, resourcePath, resource);
+ }
+
+}
diff --git a/src/main/resources/static/simulator_ws.js b/src/main/resources/static/simulator_ws.js
index 52f151e..4e932f2 100644
--- a/src/main/resources/static/simulator_ws.js
+++ b/src/main/resources/static/simulator_ws.js
@@ -1,3 +1,4 @@
+const apiUrl = "http://localhost:8080/api"
let socket = new WebSocket("ws://localhost:8080/ws");
socket.onmessage = function(event) {
@@ -8,7 +9,7 @@
console.log(method);
switch(method){
case "updateHtml":
- put_htmls(json_data.elements);
+ put_htmls(json_data.data);
break;
}
@@ -18,7 +19,15 @@
function put_htmls(elements){
let container = document.getElementById("container");
- for(const elem of elements){
+ let addElems = elements.add;
+ let delElems = elements.delete;
+ for(const id of delElems) {
+ let elem = document.getElementById(id);
+ if(elem) {
+ elem.parentNode.removeChild(elem);
+ }
+ }
+ for(const elem of addElems){
let id = elem.id;
let type = elem.type;
let styles = elem.styles;
@@ -28,14 +37,42 @@
let value = styles[prop];
style += `${prop}: ${value};`
}
+ let style_attribute = Object.keys(styles).lenget > 0 ? `style="${style}"` : "";
switch(type){
case "button":
- container.insertAdjacentHTML("beforeend", ``)
+ container.insertAdjacentHTML("beforeend", ``)
+ let button = document.getElementById(id);
+ button.addEventListener("mousedown", buttonPressed);
+ button.addEventListener("mouseup", buttonReleased);
break;
}
}
}
+function buttonPressed(event){
+ const data = {id: event.target.id};
+ const formBody = new URLSearchParams(data);
+ fetch(`${apiUrl}/elements/buttonPressed`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ body: formBody.toString()
+ });
+}
+
+function buttonReleased(event) {
+ const data = {id: event.target.id};
+ const formBody = new URLSearchParams(data);
+ fetch(`${apiUrl}/elements/buttonReleased`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ body: formBody.toString()
+ });
+}
+
socket.onopen = function(event) {
console.log("open socket");
}