diff --git a/AlgebraicDataflowArchitectureModel/models/SimpleUI5.model b/AlgebraicDataflowArchitectureModel/models/SimpleUI5.model index ca722e7..7d6f424 100644 --- a/AlgebraicDataflowArchitectureModel/models/SimpleUI5.model +++ b/AlgebraicDataflowArchitectureModel/models/SimpleUI5.model @@ -11,12 +11,6 @@ input1 := "input1" input2 := "input2" input3 := "input3" - input1 := "input1" - input2 := "input2" - input3 := "input3" - input1 := "input1" - input2 := "input2" - input3 := "input3" } native channel ScreenUpdate { in screen(curSc: Json, update(curSc, nextSc)) = nextSc diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java index ca94bdc..b8655a1 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java @@ -44,16 +44,16 @@ public MapTerm toMap() { MapTerm res = new MapTerm(); - res.insert("\"type\"", new Constant("\"" + type + "\"")); - res.insert("\"id\"", new Constant("\"" + id + "\"")); - res.insert("\"text\"", new Constant(text)); + res.insert("type", new Constant("\"" + type + "\"")); + res.insert("id", new Constant("\"" + id + "\"")); + res.insert("text", new Constant(text)); MapTerm stylesMap = new MapTerm(); for(String prop : styles.keySet()) { - stylesMap.insert(prop, new Constant(styles.get(prop))); + stylesMap.insert(prop, new Constant("\"" + styles.get(prop) + "\"")); } - res.insert("\"styles\"", stylesMap); + res.insert("styles", stylesMap); String classTmp = "\"" + String.join(" ", classes) + "\""; - res.insert("\"class\"", new Constant(classTmp)); + res.insert("class", new Constant(classTmp)); return res; } diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java index 15daf52..2f8b54c 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java @@ -81,8 +81,8 @@ try { Expression eventMessage = parser.parseTerm(stream,simulator.getModel()); ResourcePath resPath = simulator.getModel().getResourcePath("curScreen"); - - simulator.transition(new Event(channel, eventMessage, resPath, simulator.getCurState().getResource("curScreen"))); + Event event = new Event(channel, eventMessage, resPath, simulator.getCurState().getResource("curScreen")); + simulator.transition(event); } catch (ExpectedRightBracket | WrongJsonExpression | ExpectedColon | ExpectedDoubleQuotation | ParameterizedIdentifierIsFutureWork | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage | UnificationFailed | ValueUndefined e) { // TODO 自動生成された catch ブロック @@ -103,7 +103,7 @@ if (curScExp instanceof JsonTerm && nextScExp instanceof JsonTerm) { JsonTerm sendData = new JsonTerm(); - sendData.addMember("method", new Constant("updateHtml")); + sendData.addMember("method", new Constant("\"updateHtml\"")); JsonTerm sendElements = new JsonTerm(); ListTerm addElements = new ListTerm(); ListTerm delElements = new ListTerm(); @@ -130,7 +130,7 @@ } sendElements.addMember("add", addElements); - sendElements.addMember("delete", delElements); +// sendElements.addMember("delete", delElements); sendData.addMember("data", sendElements); ws.send(sendData.toString(), sessionId); } @@ -142,7 +142,7 @@ Resource widgetsResource = screenResource.getChildrenMap().get("widgets"); for(String newWid: newWidSet) { - Expression value = ((JsonTerm) newWidgets).get(newWid); + Expression value = ((MapTerm) newWidgets).get(newWid); if(value instanceof JsonTerm) { JsonTerm widget = (JsonTerm) value; Resource widgetResource = widgetsResource.getChildrenMap().get(newWid); @@ -157,6 +157,9 @@ case "\"textInput\"": addTextInput(widget, newWid, addElements, widgetResource); break; + case "\"table\"": + addTable(widget, newWid, addElements, widgetResource); + break; } } } @@ -189,7 +192,7 @@ //ボタンが押されたり離されたりした時を検知 ResourcePath resPath = mouseEventChannel.getOutputResources().iterator().next(); - button.setRestEventListener(new HtmlElementMouseSender(simulator, mouseEventChannel, resPath, widgetResource.getChildrenMap().get("state"))); + button.setRestEventListener(new HtmlElementMouseSender(simulator, mouseEventChannel, resPath, widgetResource)); //ボタンが透明になったことを通知 HtmlElementVisibilityReceiver nativeVisibilityReceiver = new HtmlElementVisibilityReceiver(button, ws, sessionId); @@ -260,7 +263,7 @@ private void addTextInput(JsonTerm widget, String wid, ListTerm addElements, Resource widgetResource) { String text = widget.get("text").toString(); - HtmlElement textInput = new HtmlElement("textInput", wid, text); + HtmlElement textInput = new HtmlElement("table", wid, text); Set keySet = widget.keySet(); textInput.setStyle("position", "absolute"); @@ -305,6 +308,53 @@ addElements.append(textInput.toMap()); } + private void addTable(JsonTerm widget, String wid, ListTerm addElements, Resource widgetResource) { + String text = widget.get("text").toString(); + HtmlElement button = new HtmlElement("table", wid, text); + + Set keySet = widget.keySet(); + button.setStyle("position", "absolute"); + if(keySet.contains("x")) { + button.setStyle("left", "" + widget.get("x") + "px"); + } + if(keySet.contains("y")) { + button.setStyle("top", "" + widget.get("y") + "px"); + } + if(keySet.contains("width")) { + button.setStyle("width", "" + widget.get("width") + "px"); + } + if(keySet.contains("height")) { + button.setStyle("height", "" + widget.get("height") + "px"); + } + + //ボタンが押されたり離されたりした時を検知 + ResourcePath resPath = mouseEventChannel.getOutputResources().iterator().next(); + button.setRestEventListener(new HtmlElementMouseSender(simulator, mouseEventChannel, resPath, widgetResource)); + + //ボタンが透明になったことを通知 + HtmlElementVisibilityReceiver nativeVisibilityReceiver = new HtmlElementVisibilityReceiver(button, ws, sessionId); + simulator.addNativeReceiver(nativeVisibilityReceiver, setVisibleChannel, widgetResource.getChildrenMap().get("visible")); + Map resources = channelAndResourcesForReceiving.get(setVisibleChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForReceiving.put(setVisibleChannel, resources); + } + resources.put(wid, widgetResource); + + //ボタンの文字が変わったことを通知 + HtmlElementTextReceiver nativeTextReceiver = new HtmlElementTextReceiver(button, ws, sessionId); + simulator.addNativeReceiver(nativeTextReceiver, setTextChannel, widgetResource.getChildrenMap().get("text")); + resources = channelAndResourcesForReceiving.get(setTextChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForReceiving.put(setTextChannel, resources); + } + resources.put(wid, widgetResource); + + elements.put(wid, button); + addElements.append(button.toMap()); + } + private void deleteOldWidgets(Set oldWidSet, ListTerm delElements) { for (String oldWid : oldWidSet) { elements.remove(oldWid);