From 2cb21358105c218b9ddd41c3828096e7b60c7452 Mon Sep 17 00:00:00 2001 From: Brendan Robert Date: Mon, 22 Jun 2015 01:40:07 -0500 Subject: [PATCH 1/5] Big step forward in supporting user-defined types, global functions and global variables (still in progress). This has all the new XML/bean support and most of the Blockly glue to make things work. --- .../badvision/outlaweditor/MythosEditor.java | 50 +++++- .../ui/MythosScriptEditorController.java | 5 +- .../jaxb/OutlawSchema/OutlawSchema.xsd | 34 ++++ .../mythos-editor/js/mythos_uncompressed.js | 152 +++++++++++++++--- 4 files changed, 210 insertions(+), 31 deletions(-) diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/MythosEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/MythosEditor.java index 915d5814..590f83a2 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/MythosEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/MythosEditor.java @@ -3,12 +3,13 @@ package org.badvision.outlaweditor; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.StringWriter; -import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.AnchorPane; @@ -23,6 +24,8 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.badvision.outlaweditor.data.xml.Block; +import org.badvision.outlaweditor.data.xml.Global.UserTypes.UserType; +import org.badvision.outlaweditor.data.xml.Global.Variables.Variable; import org.badvision.outlaweditor.data.xml.Script; import org.badvision.outlaweditor.ui.ApplicationUIController; import org.badvision.outlaweditor.ui.MythosScriptEditorController; @@ -104,7 +107,6 @@ public class MythosEditor { xml = xml.replaceAll("'", "'"); xml = xml.replace("?>", "?>"); xml += ""; - System.out.println("xml: " + xml); return generateLoadScript(xml); } catch (JAXBException ex) { Logger.getLogger(MythosEditor.class.getName()).log(Level.SEVERE, null, ex); @@ -134,8 +136,44 @@ public class MythosEditor { script.setName(name); ApplicationUIController.getController().redrawScripts(); } - - public List getUserTypes() { - return new ArrayList(); + + public List diff --git a/OutlawEditor/src/main/resources/mythos/mythos-editor/js/mythos_uncompressed.js b/OutlawEditor/src/main/resources/mythos/mythos-editor/js/mythos_uncompressed.js index a35b481f..38ec6232 100644 --- a/OutlawEditor/src/main/resources/mythos/mythos-editor/js/mythos_uncompressed.js +++ b/OutlawEditor/src/main/resources/mythos/mythos-editor/js/mythos_uncompressed.js @@ -36,15 +36,18 @@ if (typeof Mythos === "undefined") { // Mythos.editor.log("Add local functions"); Mythos.addFunctionsFromLocalScope(); // Mythos.editor.log("Reinitalizing toolbox"); - Blockly.mainWorkspace.updateToolbox(document.getElementById('toolbox')); + Mythos.workspace.updateToolbox(document.getElementById('toolbox')); // Mythos.editor.log("Done"); }, each: function (list, func) { -// Mythos.editor.log(list.toString()); - if (list && list.length > 0) { + if (list && list instanceof Array) { for (var i = 0; i < list.length; i++) { func(list[i]); } + } else if (list) { + for (var i=0; i < list.size(); i++) { + func(list.get(i)); + } } }, addUserDefinedTypes: function () { @@ -146,10 +149,11 @@ if (typeof Mythos === "undefined") { addFunctionsFromGlobalScope: function () { var toolbarCategory = document.getElementById("globalFunctions"); Mythos.each(Mythos.editor.getGlobalFunctions(), function (func) { + Mythos.editor.log("Adding "+func.getName()); var scriptNode = document.createElement("block"); scriptNode.setAttribute("type", "global_" + func.getName()); toolbarCategory.appendChild(scriptNode); - Blockly.blocks['global_' + func.getName()] = { + Blockly.Blocks['global_' + func.getName()] = { init: function () { this.setColour(250); this.appendDummyInput() @@ -159,6 +163,7 @@ if (typeof Mythos === "undefined") { } }; }); + Mythos.editor.log(toolbarCategory.outerHTML); }, addVariablesFromLocalScope: function () { From e41e515014cf6d790ca8443dace8baa78bbdbf94 Mon Sep 17 00:00:00 2001 From: Brendan Robert Date: Tue, 23 Jun 2015 01:37:39 -0500 Subject: [PATCH 3/5] Global functions now have proper return and non-return variant calls and full parameter support! --- .../badvision/outlaweditor/MythosEditor.java | 24 +++++++++--- .../mythos-editor/js/mythos_uncompressed.js | 38 +++++++++++++++---- 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/MythosEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/MythosEditor.java index 5fcaf3ea..ba74ec6b 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/MythosEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/MythosEditor.java @@ -11,6 +11,7 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; +import java.util.stream.Stream; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.AnchorPane; @@ -24,9 +25,11 @@ import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import org.badvision.outlaweditor.data.xml.Arg; import org.badvision.outlaweditor.data.xml.Block; import org.badvision.outlaweditor.data.xml.Global.UserTypes.UserType; import org.badvision.outlaweditor.data.xml.Global.Variables.Variable; +import org.badvision.outlaweditor.data.xml.Mutation; import org.badvision.outlaweditor.data.xml.Script; import org.badvision.outlaweditor.ui.ApplicationUIController; import org.badvision.outlaweditor.ui.MythosScriptEditorController; @@ -138,13 +141,13 @@ public class MythosEditor { ApplicationUIController.getController().redrawScripts(); } - public List