From e576ffd2ba9abfaedd48a543b79f6d2e685a5d21 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Mon, 8 Sep 2014 19:48:54 -0400 Subject: [PATCH] Added basic saving, shortcuts & new buttons! --- .../nbproject/private/private.xml | 4 +- .../nbproject/project.properties | 3 + .../tools/csc/compiler/Compiler.java | 3 +- .../nbproject/genfiles.properties | 4 +- .../nbproject/private/private.xml | 7 +- ConversationEditor/nbproject/project.xml | 24 ++ .../EditorTopComponent.java | 53 ++-- .../csc/conversationeditor/SceneSaver.java | 109 ++++++++ .../csc/conversationeditor/SceneView.java | 24 ++ .../actions/NewConvEnd.java | 7 +- .../actions/NewConvOption.java | 5 +- .../actions/NewConvResponse.java | 5 +- .../actions/NewConversation.java | 39 +++ .../actions/OpenConversation.java | 35 +++ .../actions/SaveConversation.java | 119 +++++++++ .../actions/conversation_tb_new.png | Bin 0 -> 15216 bytes .../actions/conversation_tb_new24.png | Bin 0 -> 15268 bytes .../actions/conversation_tb_save.png | Bin 0 -> 17628 bytes .../actions/conversation_tb_save24.png | Bin 0 -> 18059 bytes .../tools/csc/conversationeditor/layer.xml | 49 ++++ nbproject/platform.properties | 235 +++++++++++++++++- 21 files changed, 683 insertions(+), 42 deletions(-) create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneSaver.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConversation.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/OpenConversation.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/SaveConversation.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_new.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_new24.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_save.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_save24.png diff --git a/ConversationCompiler/nbproject/private/private.xml b/ConversationCompiler/nbproject/private/private.xml index f882026..6807a2b 100644 --- a/ConversationCompiler/nbproject/private/private.xml +++ b/ConversationCompiler/nbproject/private/private.xml @@ -2,8 +2,6 @@ - - file:/C:/Users/Wave/Documents/NetBeansProjects/ConversationScriptCreator/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Compiler.java - + diff --git a/ConversationCompiler/nbproject/project.properties b/ConversationCompiler/nbproject/project.properties index 6baf44e..8377ca3 100644 --- a/ConversationCompiler/nbproject/project.properties +++ b/ConversationCompiler/nbproject/project.properties @@ -1,2 +1,5 @@ javac.source=1.7 javac.compilerargs=-Xlint -Xlint:-serial +license.file=../LICENSE +nbm.homepage=http://www.projectswg.com +nbm.module.author=Waverunner diff --git a/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Compiler.java b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Compiler.java index 8ad9c91..a2b71f7 100644 --- a/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Compiler.java +++ b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Compiler.java @@ -16,7 +16,6 @@ import javax.swing.JOptionPane; import org.netbeans.api.visual.widget.ConnectionWidget; import org.netbeans.api.visual.widget.Widget; import org.openide.windows.TopComponent; -import org.openide.windows.WindowManager; public class Compiler { @@ -28,7 +27,7 @@ public class Compiler { public void compile() throws IOException { - TopComponent component = WindowManager.getDefault().findTopComponent("EditorTopComponent"); + TopComponent component = TopComponent.getRegistry().getActivated(); if (component == null || !(component instanceof EditorTopComponent)) return; diff --git a/ConversationEditor/nbproject/genfiles.properties b/ConversationEditor/nbproject/genfiles.properties index 0a07a29..6c3c408 100644 --- a/ConversationEditor/nbproject/genfiles.properties +++ b/ConversationEditor/nbproject/genfiles.properties @@ -1,8 +1,8 @@ -build.xml.data.CRC32=90d565b1 +build.xml.data.CRC32=a42deb56 build.xml.script.CRC32=af729615 build.xml.stylesheet.CRC32=a56c6a5b@2.66.1 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=90d565b1 +nbproject/build-impl.xml.data.CRC32=a42deb56 nbproject/build-impl.xml.script.CRC32=b2a11926 nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.66.1 diff --git a/ConversationEditor/nbproject/private/private.xml b/ConversationEditor/nbproject/private/private.xml index aabcfea..6807a2b 100644 --- a/ConversationEditor/nbproject/private/private.xml +++ b/ConversationEditor/nbproject/private/private.xml @@ -2,11 +2,6 @@ - - file:/C:/Users/Wave/Documents/NetBeansProjects/ConversationScriptCreator/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationConnectProvider.java - file:/C:/Users/Wave/Documents/NetBeansProjects/ConversationScriptCreator/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationNode.java - file:/C:/Users/Wave/Documents/NetBeansProjects/ConversationScriptCreator/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationWidget.java - file:/C:/Users/Wave/Documents/NetBeansProjects/ConversationScriptCreator/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvEnd.java - + diff --git a/ConversationEditor/nbproject/project.xml b/ConversationEditor/nbproject/project.xml index 3611d1e..c4b3984 100644 --- a/ConversationEditor/nbproject/project.xml +++ b/ConversationEditor/nbproject/project.xml @@ -40,6 +40,14 @@ 7.61.2 + + org.openide.dialogs + + + + 7.36.1 + + org.openide.explorer @@ -48,6 +56,14 @@ 6.56.1 + + org.openide.filesystems + + + + 8.10.1 + + org.openide.nodes @@ -56,6 +72,14 @@ 7.38.1 + + org.openide.text + + + + 6.61.1 + + org.openide.util diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.java index 3d09681..bd3182a 100644 --- a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.java +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.java @@ -1,16 +1,20 @@ package com.projectswg.tools.csc.conversationeditor; +import com.projectswg.tools.csc.conversationeditor.actions.SaveConversation; +import java.awt.Point; +import java.io.IOException; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; import org.netbeans.api.settings.ConvertAsProperties; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; import org.openide.explorer.ExplorerManager; import org.openide.explorer.ExplorerUtils; +import org.openide.util.Exceptions; import org.openide.util.NbBundle.Messages; import org.openide.windows.TopComponent; +import org.xml.sax.SAXException; -/** - * Top component which displays something. - */ @ConvertAsProperties( dtd = "-//com.projectswg.tools.csc.conversationeditor//Editor//EN", autostore = false @@ -24,7 +28,7 @@ import org.openide.windows.TopComponent; @ActionID(category = "Window", id = "com.projectswg.tools.csc.conversationeditor.EditorTopComponent") @ActionReference(path = "Menu/Window" /*, position = 333 */) @TopComponent.OpenActionRegistration( - displayName = "Conversastion Editor", + displayName = "Editor", preferredID = "EditorTopComponent" ) @Messages({ @@ -37,31 +41,40 @@ public final class EditorTopComponent extends TopComponent implements ExplorerMa private final ExplorerManager mgr = new ExplorerManager(); private final SceneView scene; + // New Conversation public EditorTopComponent() { initComponents(); - setName(Bundle.CTL_EditorTopComponent()); + setToolTipText(Bundle.HINT_EditorTopComponent()); SceneView scene = new SceneView(mgr); scrollPane.setViewportView(scene.createView()); - scene.addNode(new ConversationNode("Begin Conversation", false, 1, false, true, 0)); - scene.addNode(new ConversationNode("", false, 1, true, false, 0)); - /* - // Testing widgets! - Widget n1 = scene.addNode(new ConversationNode("conversation/c_newbie_mentor:s_1063", false, 1, false)); - n1.setPreferredLocation(new Point(10, 100)); - - Widget n2 = scene.addNode(new ConversationNode("conversation/c_newbie_mentor:s_109", true, 2, false)); - n2.setPreferredLocation(new Point(480, 100)); - - Widget n3 = scene.addNode(new ConversationNode("conversation/c_newbie_mentor:s_1067", true, 3, false)); - n3.setPreferredLocation(new Point(480, 150));*/ + setName(Bundle.CTL_EditorTopComponent() + " - *New Conversation*"); + scene.addNode(new ConversationNode("Begin Conversation", false, 0, false, true, 0)); + scene.addNode(new ConversationNode("End Conversation", false, 1, true, false, 0)); + associateLookup(ExplorerUtils.createLookup(mgr, getActionMap())); this.scene = scene; } + + // Open Conversation + public EditorTopComponent(String convName) { + initComponents(); + setToolTipText(Bundle.HINT_EditorTopComponent()); + + SceneView scene = new SceneView(mgr); + scene.setSceneName(convName); + + scrollPane.setViewportView(scene.createView()); + + setName(Bundle.CTL_EditorTopComponent() + " - " + (scene.getSceneName().equals("") ? "*New Conversation*" : scene.getSceneName())); + + associateLookup(ExplorerUtils.createLookup(mgr, getActionMap())); + this.scene = scene; + } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always @@ -94,7 +107,11 @@ public final class EditorTopComponent extends TopComponent implements ExplorerMa @Override public void componentClosed() { - // TODO add custom code on component closing + /*try { + SaveConversation.save(scene); + } catch (ParserConfigurationException | IOException | SAXException | TransformerException ex) { + Exceptions.printStackTrace(ex); + }*/ } void writeProperties(java.util.Properties p) { diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneSaver.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneSaver.java new file mode 100644 index 0000000..da1fcb5 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneSaver.java @@ -0,0 +1,109 @@ +package com.projectswg.tools.csc.conversationeditor; + +import java.awt.Point; +import javax.swing.SwingUtilities; +import org.netbeans.api.visual.graph.GraphScene; +import org.netbeans.api.visual.widget.Widget; +import org.w3c.dom.Attr; +import org.w3c.dom.DOMException; +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +// Based off of http://bits.netbeans.org/dev/javadoc/org-netbeans-api-visual/org/netbeans/api/visual/widget/doc-files/documentation.html#Serialization +public class SceneSaver { + private static final String NODE_ELEMENT = "SceneNode"; // NOI18N + private static final String VERSION_ATTR = "version"; // NOI18N + private static final String NODE_NODE = "Node"; // NOI18N + private static final String NODEID_ATTR = "nodeID"; // NOI18N + private static final String X_NODE = "posX"; // NOI18N + private static final String Y_NODE = "posY"; // NOI18N + + private static final String VERSION_VALUE_1 = "1"; // NOI18N + + // creates an sceneXMLNode that has to be placed to the XML file then + public Node serializeData (GraphScene scene, Document file) { + + Node sceneXMLNode = file.createElement(NODE_ELEMENT); + setAttribute(file, sceneXMLNode, VERSION_ATTR, VERSION_VALUE_1); // NOI18N + + for (ConversationNode node : scene.getNodes ()) { + Widget widget = scene.findWidget(node); + if (widget != null) { + Point location = widget.getPreferredLocation(); + if (location != null) { + Node dataXMLNode = file.createElement(NODE_NODE); + + setAttribute(file, dataXMLNode, NODEID_ATTR, String.valueOf(node.getId())); + setAttribute(file, dataXMLNode, X_NODE, Integer.toString(location.x)); + setAttribute(file, dataXMLNode, Y_NODE, Integer.toString(location.y)); + + sceneXMLNode.appendChild(dataXMLNode); + } + } + } + return sceneXMLNode; + } + + // Returns true if deserialization is successfull + // sceneXMLNode has to be found in the XML file first + public boolean deserializeData(final GraphScene scene, final Node sceneXMLNode) { + if (!VERSION_VALUE_1.equals(getAttributeValue(sceneXMLNode, VERSION_ATTR))) + return false; + + SwingUtilities.invokeLater (new Runnable() { + @Override + public void run() { + deserializeDataVersion1(scene, sceneXMLNode); + scene.validate (); + } + }); + + return true; + } + + private void deserializeDataVersion1(GraphScene scene, Node data) { + for (Node node : getChildNode (data)) { + if(NODE_NODE.equals(node.getNodeName())) { + String nodeID = getAttributeValue(node, NODEID_ATTR); + int x = Integer.parseInt(getAttributeValue (node, X_NODE)); + int y = Integer.parseInt(getAttributeValue (node, Y_NODE)); + Widget widget = scene.findWidget(nodeID); + if (widget != null) + widget.setPreferredLocation (new Point (x, y)); + } + } + } + + private static String getAttributeValue(Node node, String attr) { + try { + if (node != null) { + NamedNodeMap map = node.getAttributes (); + if (map != null) { + node = map.getNamedItem (attr); + if (node != null) + return node.getNodeValue (); + } + } + } catch (DOMException e) { + //Debug.warning (e); + } + return null; + } + + private static void setAttribute(Document xml, Node node, String name, String value) { + NamedNodeMap map = node.getAttributes (); + Attr attribute = xml.createAttribute(name); + attribute.setValue (value); + map.setNamedItem (attribute); + } + + private static Node[] getChildNode (Node node) { + NodeList childNodes = node.getChildNodes (); + Node[] nodes = new Node[childNodes != null ? childNodes.getLength () : 0]; + for (int i = 0; i < nodes.length; i++) + nodes[i] = childNodes.item (i); + return nodes; + } +} diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneView.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneView.java index b3a8b6d..c315001 100644 --- a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneView.java +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneView.java @@ -2,7 +2,19 @@ package com.projectswg.tools.csc.conversationeditor; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.io.File; +import java.io.IOException; import javax.swing.JOptionPane; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; import org.netbeans.api.visual.action.ActionFactory; import org.netbeans.api.visual.graph.GraphScene; import org.netbeans.api.visual.widget.LayerWidget; @@ -10,6 +22,9 @@ import org.netbeans.api.visual.widget.Widget; import org.openide.explorer.ExplorerManager; import org.openide.windows.TopComponent; import org.openide.windows.WindowManager; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.xml.sax.SAXException; public class SceneView extends GraphScene{ private final LayerWidget backgroundLayer; @@ -17,6 +32,8 @@ public class SceneView extends GraphScene{ private final LayerWidget connectionLayer; private final ExplorerManager mgr; + private String name = ""; + public SceneView(ExplorerManager mgr) { setLookFeel(new ConversationLookFeel()); @@ -91,4 +108,11 @@ public class SceneView extends GraphScene{ return connectionLayer; } + public String getSceneName() { + return name; + } + + public void setSceneName(String name) { + this.name = name; + } } \ No newline at end of file diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvEnd.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvEnd.java index 0ca1c4f..2f404cb 100644 --- a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvEnd.java +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvEnd.java @@ -16,7 +16,6 @@ import org.openide.awt.ActionReferences; import org.openide.awt.ActionRegistration; import org.openide.util.NbBundle.Messages; import org.openide.windows.TopComponent; -import org.openide.windows.WindowManager; @ActionID( category = "Edit", @@ -24,7 +23,7 @@ import org.openide.windows.WindowManager; ) @ActionRegistration( iconBase = "com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_end.png", - displayName = "#CTL_NewConvEnd" + displayName = "New End Conversation" ) @ActionReferences({ @ActionReference(path = "Menu/Edit", position = 1362), @@ -35,7 +34,7 @@ public final class NewConvEnd implements ActionListener { @Override public void actionPerformed(ActionEvent e) { - TopComponent component = WindowManager.getDefault().findTopComponent("EditorTopComponent"); + TopComponent component = TopComponent.getRegistry().getActivated(); if (component == null || !(component instanceof EditorTopComponent)) return; @@ -45,7 +44,7 @@ public final class NewConvEnd implements ActionListener { if (scene == null) return; - int id = scene.getNodes().size() + 1; + int id = scene.getNodes().size(); scene.addNode(new ConversationNode("New End Conversation " + String.valueOf(id), false, id, true, false, 0)); scene.validate(); diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvOption.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvOption.java index 763bf25..d93b06f 100644 --- a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvOption.java +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvOption.java @@ -11,7 +11,6 @@ import org.openide.awt.ActionReferences; import org.openide.awt.ActionRegistration; import org.openide.util.NbBundle.Messages; import org.openide.windows.TopComponent; -import org.openide.windows.WindowManager; @ActionID( category = "File", @@ -30,7 +29,7 @@ public final class NewConvOption implements ActionListener { @Override public void actionPerformed(ActionEvent e) { - TopComponent component = WindowManager.getDefault().findTopComponent("EditorTopComponent"); + TopComponent component = TopComponent.getRegistry().getActivated(); if (component == null || !(component instanceof EditorTopComponent)) return; @@ -40,7 +39,7 @@ public final class NewConvOption implements ActionListener { if (scene == null) return; - int id = scene.getNodes().size() + 1; + int id = scene.getNodes().size(); scene.addNode(new ConversationNode("New Conversation Option " + String.valueOf(id), true, id, false, false, 0)); scene.validate(); diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvResponse.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvResponse.java index 634a4ae..e0b5fe8 100644 --- a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvResponse.java +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvResponse.java @@ -16,7 +16,6 @@ import org.openide.awt.ActionReferences; import org.openide.awt.ActionRegistration; import org.openide.util.NbBundle.Messages; import org.openide.windows.TopComponent; -import org.openide.windows.WindowManager; @ActionID( category = "File", @@ -35,7 +34,7 @@ public final class NewConvResponse implements ActionListener { @Override public void actionPerformed(ActionEvent e) { - TopComponent component = WindowManager.getDefault().findTopComponent("EditorTopComponent"); + TopComponent component = TopComponent.getRegistry().getActivated(); if (component == null || !(component instanceof EditorTopComponent)) return; @@ -45,7 +44,7 @@ public final class NewConvResponse implements ActionListener { if (scene == null) return; - int id = scene.getNodes().size() + 1; + int id = scene.getNodes().size(); scene.addNode(new ConversationNode("New Conversation Response " + String.valueOf(id), false, id, false, false, 0)); scene.validate(); } diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConversation.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConversation.java new file mode 100644 index 0000000..cd39e53 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConversation.java @@ -0,0 +1,39 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.projectswg.tools.csc.conversationeditor.actions; + +import com.projectswg.tools.csc.conversationeditor.EditorTopComponent; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; +import org.openide.util.NbBundle.Messages; + +@ActionID( + category = "File", + id = "com.projectswg.tools.csc.conversationeditor.actions.NewConversation" +) +@ActionRegistration( + iconBase = "com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_new.png", + displayName = "New Conversation" +) +@ActionReferences({ + @ActionReference(path = "Menu/File", position = -115), + @ActionReference(path = "Toolbars/File", position = 400), + @ActionReference(path = "Shortcuts", name = "D-N") +}) +@Messages("CTL_NewConversation=New Conversation") +public final class NewConversation implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + EditorTopComponent newEditor = new EditorTopComponent(); + newEditor.open(); + newEditor.requestActive(); + } +} diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/OpenConversation.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/OpenConversation.java new file mode 100644 index 0000000..1755b3a --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/OpenConversation.java @@ -0,0 +1,35 @@ +package com.projectswg.tools.csc.conversationeditor.actions; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; +import org.openide.filesystems.FileChooserBuilder; +import org.openide.util.NbBundle.Messages; + +@ActionID(category = "File", id = "org.mycore.OpenFileAction") +@ActionRegistration(displayName = "Open Conversation") +@ActionReferences({ + @ActionReference(path = "Menu/File", position = 10, separatorAfter = 11), + @ActionReference(path = "Shortcuts", name = "D-O") +}) +@Messages("CTL_OpenFileAction=Open Conversation") +public final class OpenConversation implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + //The default dir to use if no value is stored + File home = new File(System.getProperty("user.home")); + + File toAdd = new FileChooserBuilder("user-dir").setTitle("Open Conversation"). + setDefaultWorkingDirectory(home).setApproveText("Open").showOpenDialog(); + //Result will be null if the user clicked cancel or closed the dialog w/o OK + if (toAdd != null) { + // TODO: + } + } + +} diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/SaveConversation.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/SaveConversation.java new file mode 100644 index 0000000..e111be3 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/SaveConversation.java @@ -0,0 +1,119 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.projectswg.tools.csc.conversationeditor.actions; + +import com.projectswg.tools.csc.conversationeditor.EditorTopComponent; +import com.projectswg.tools.csc.conversationeditor.SceneSaver; +import com.projectswg.tools.csc.conversationeditor.SceneView; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.IOException; +import javax.swing.SwingUtilities; +import javax.swing.filechooser.FileFilter; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; +import org.openide.filesystems.FileChooserBuilder; +import org.openide.util.Exceptions; +import org.openide.util.NbBundle.Messages; +import org.openide.windows.TopComponent; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.xml.sax.SAXException; + +@ActionID( + category = "File", + id = "com.projectswg.tools.csc.conversationeditor.actions.SaveConversation" +) +@ActionRegistration( + iconBase = "com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_save.png", + displayName = "Save Conversation" +) +@ActionReferences({ + @ActionReference(path = "Menu/File", position = -90, separatorBefore = -140), + @ActionReference(path = "Toolbars/File", position = 500), + @ActionReference(path = "Shortcuts", name = "D-S") +}) +@Messages("CTL_SaveConversation=Save Conversation") +public final class SaveConversation implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + TopComponent component = TopComponent.getRegistry().getActivated(); + if (component == null || !(component instanceof EditorTopComponent)) + return; + + EditorTopComponent editor = (EditorTopComponent) component; + final SceneView scene = editor.getScene(); + + if (scene == null) + return; + + if (scene.getSceneName().equals("")) { + File home = new File(System.getProperty("user.home")); + + FileChooserBuilder builder = new FileChooserBuilder("user-dir").setTitle("Save Conversation").setDefaultWorkingDirectory(home).setApproveText("Save"); + builder.setAcceptAllFileFilterUsed(true); + + final File file = builder.showSaveDialog(); + + if (file != null) { + scene.setSceneName(file.getName().split(".xml")[0]); + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + try { + save(scene, file.getAbsolutePath()); + } catch (ParserConfigurationException | IOException | SAXException | TransformerException ex) { + Exceptions.printStackTrace(ex); + } + } + }); + editor.setName("Conversation Editor - " + scene.getSceneName()); + } + } + } + + public static void save(SceneView scene, String path) throws ParserConfigurationException, IOException, SAXException, TransformerConfigurationException, TransformerException { + SceneSaver saver = new SceneSaver(); + + File xmlFile = new File(path + ".xml"); + if (!xmlFile.exists()) + xmlFile.createNewFile(); + + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.newDocument(); + + document.createElement("Properties"); + + Node xmlNode = saver.serializeData(scene, document); + document.appendChild(xmlNode); + + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + + DOMSource source = new DOMSource(document); + StreamResult result = new StreamResult(xmlFile); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + + transformer.transform(source, result); + } +} diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_new.png b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_new.png new file mode 100644 index 0000000000000000000000000000000000000000..20b40e8e1d666ac88517fb19b364d7ff4753e8ba GIT binary patch literal 15216 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 literal 0 HcmV?d00001 diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_save24.png b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_save24.png new file mode 100644 index 0000000000000000000000000000000000000000..72bdab01b776b29bcc050820bbae18f5247da304 GIT binary patch literal 18059 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 literal 0 HcmV?d00001 diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/layer.xml b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/layer.xml index 47258db..2ceb81b 100644 --- a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/layer.xml +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/layer.xml @@ -15,6 +15,7 @@ + @@ -31,12 +32,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -45,6 +73,7 @@ + @@ -54,17 +83,28 @@ + + + + + + + + + + + @@ -74,7 +114,16 @@ + + + + + + + + + diff --git a/nbproject/platform.properties b/nbproject/platform.properties index 89fdfd8..d720743 100644 --- a/nbproject/platform.properties +++ b/nbproject/platform.properties @@ -1,18 +1,251 @@ branding.token=conversationscriptcreator cluster.path=\ + ${nbplatform.active.dir}/ide:\ ${nbplatform.active.dir}/platform disabled.modules=\ + com.jcraft.jsch,\ + com.jcraft.jzlib,\ + javaewah.dummy,\ + org.apache.commons.codec,\ + org.apache.commons.httpclient,\ + org.apache.commons.io,\ + org.apache.commons.lang,\ + org.apache.commons.logging,\ + org.apache.ws.commons.util,\ + org.apache.xml.resolver,\ + org.apache.xmlrpc,\ + org.eclipse.core.contenttype,\ + org.eclipse.core.jobs,\ + org.eclipse.core.net,\ + org.eclipse.core.runtime,\ + org.eclipse.core.runtime.compatibility.auth,\ + org.eclipse.equinox.app,\ + org.eclipse.equinox.common,\ + org.eclipse.equinox.preferences,\ + org.eclipse.equinox.registry,\ + org.eclipse.equinox.security,\ + org.eclipse.jgit,\ + org.eclipse.mylyn.bugzilla.core,\ + org.eclipse.mylyn.commons.core,\ + org.eclipse.mylyn.commons.net,\ + org.eclipse.mylyn.commons.repositories.core,\ + org.eclipse.mylyn.commons.xmlrpc,\ + org.eclipse.mylyn.tasks.core,\ + org.eclipse.mylyn.wikitext.confluence.core,\ + org.eclipse.mylyn.wikitext.core,\ + org.eclipse.mylyn.wikitext.textile.core,\ org.jdesktop.layout,\ + org.netbeans.api.debugger,\ + org.netbeans.api.java.classpath,\ + org.netbeans.api.xml,\ + org.netbeans.core.browser,\ + org.netbeans.core.browser.webview,\ org.netbeans.core.execution,\ + org.netbeans.core.ide,\ + org.netbeans.core.multitabs.project,\ + org.netbeans.lib.terminalemulator,\ + org.netbeans.libs.antlr3.runtime,\ + org.netbeans.libs.bytelist,\ + org.netbeans.libs.commons_net,\ + org.netbeans.libs.felix,\ + org.netbeans.libs.freemarker,\ + org.netbeans.libs.git,\ + org.netbeans.libs.ini4j,\ + org.netbeans.libs.javafx,\ + org.netbeans.libs.jaxb,\ + org.netbeans.libs.jsch.agentproxy,\ + org.netbeans.libs.json_simple,\ org.netbeans.libs.jsr223,\ + org.netbeans.libs.jvyamlb,\ + org.netbeans.libs.lucene,\ + org.netbeans.libs.nashorn,\ + org.netbeans.libs.smack,\ + org.netbeans.libs.svnClientAdapter,\ + org.netbeans.libs.svnClientAdapter.javahl,\ + org.netbeans.libs.svnClientAdapter.svnkit,\ + org.netbeans.libs.swingx,\ + org.netbeans.libs.testng,\ + org.netbeans.libs.xerces,\ org.netbeans.modules.autoupdate.cli,\ org.netbeans.modules.autoupdate.services,\ org.netbeans.modules.autoupdate.ui,\ + org.netbeans.modules.bugtracking,\ + org.netbeans.modules.bugtracking.bridge,\ + org.netbeans.modules.bugtracking.commons,\ + org.netbeans.modules.bugzilla,\ + org.netbeans.modules.code.analysis,\ org.netbeans.modules.core.kit,\ + org.netbeans.modules.csl.api,\ + org.netbeans.modules.css.editor,\ + org.netbeans.modules.css.lib,\ + org.netbeans.modules.css.model,\ + org.netbeans.modules.css.prep,\ + org.netbeans.modules.css.visual,\ + org.netbeans.modules.db,\ + org.netbeans.modules.db.core,\ + org.netbeans.modules.db.dataview,\ + org.netbeans.modules.db.drivers,\ + org.netbeans.modules.db.kit,\ + org.netbeans.modules.db.metadata.model,\ + org.netbeans.modules.db.mysql,\ + org.netbeans.modules.db.sql.editor,\ + org.netbeans.modules.db.sql.visualeditor,\ + org.netbeans.modules.dbapi,\ + org.netbeans.modules.defaults,\ + org.netbeans.modules.derby,\ + org.netbeans.modules.diff,\ + org.netbeans.modules.dlight.nativeexecution,\ + org.netbeans.modules.dlight.terminal,\ + org.netbeans.modules.editor,\ + org.netbeans.modules.editor.actions,\ + org.netbeans.modules.editor.bookmarks,\ + org.netbeans.modules.editor.bracesmatching,\ + org.netbeans.modules.editor.breadcrumbs,\ + org.netbeans.modules.editor.codetemplates,\ + org.netbeans.modules.editor.completion,\ + org.netbeans.modules.editor.deprecated.pre65formatting,\ + org.netbeans.modules.editor.errorstripe,\ + org.netbeans.modules.editor.errorstripe.api,\ + org.netbeans.modules.editor.fold,\ + org.netbeans.modules.editor.fold.nbui,\ + org.netbeans.modules.editor.global.format,\ + org.netbeans.modules.editor.guards,\ + org.netbeans.modules.editor.indent,\ + org.netbeans.modules.editor.indent.project,\ + org.netbeans.modules.editor.kit,\ + org.netbeans.modules.editor.lib,\ + org.netbeans.modules.editor.lib2,\ + org.netbeans.modules.editor.macros,\ + org.netbeans.modules.editor.plain,\ + org.netbeans.modules.editor.plain.lib,\ + org.netbeans.modules.editor.search,\ + org.netbeans.modules.editor.settings,\ + org.netbeans.modules.editor.settings.storage,\ + org.netbeans.modules.editor.structure,\ + org.netbeans.modules.editor.tools.storage,\ + org.netbeans.modules.editor.util,\ + org.netbeans.modules.extbrowser,\ + org.netbeans.modules.extexecution,\ + org.netbeans.modules.extexecution.impl,\ org.netbeans.modules.favorites,\ + org.netbeans.modules.git,\ + org.netbeans.modules.gototest,\ + org.netbeans.modules.gsf.codecoverage,\ + org.netbeans.modules.gsf.testrunner,\ + org.netbeans.modules.html,\ + org.netbeans.modules.html.angular,\ + org.netbeans.modules.html.custom,\ + org.netbeans.modules.html.editor,\ + org.netbeans.modules.html.editor.lib,\ + org.netbeans.modules.html.knockout,\ + org.netbeans.modules.html.lexer,\ + org.netbeans.modules.html.parser,\ + org.netbeans.modules.html.validation,\ + org.netbeans.modules.httpserver,\ + org.netbeans.modules.hudson,\ + org.netbeans.modules.hudson.git,\ + org.netbeans.modules.hudson.mercurial,\ + org.netbeans.modules.hudson.subversion,\ + org.netbeans.modules.hudson.tasklist,\ + org.netbeans.modules.hudson.ui,\ + org.netbeans.modules.ide.kit,\ + org.netbeans.modules.image,\ + org.netbeans.modules.javascript2.debug,\ + org.netbeans.modules.javascript2.editor,\ + org.netbeans.modules.javascript2.extjs,\ + org.netbeans.modules.javascript2.jquery,\ + org.netbeans.modules.javascript2.kit,\ + org.netbeans.modules.javascript2.knockout,\ + org.netbeans.modules.jellytools.ide,\ + org.netbeans.modules.jumpto,\ + org.netbeans.modules.languages,\ + org.netbeans.modules.languages.diff,\ + org.netbeans.modules.languages.manifest,\ + org.netbeans.modules.languages.yaml,\ + org.netbeans.modules.lexer,\ + org.netbeans.modules.lexer.nbbridge,\ + org.netbeans.modules.localhistory,\ + org.netbeans.modules.localtasks,\ + org.netbeans.modules.mercurial,\ + org.netbeans.modules.mylyn.util,\ + org.netbeans.modules.notifications,\ + org.netbeans.modules.options.editor,\ + org.netbeans.modules.parsing.api,\ + org.netbeans.modules.parsing.lucene,\ + org.netbeans.modules.parsing.ui,\ + org.netbeans.modules.print.editor,\ + org.netbeans.modules.project.ant,\ + org.netbeans.modules.project.indexingbridge,\ + org.netbeans.modules.project.libraries,\ + org.netbeans.modules.projectapi,\ + org.netbeans.modules.projectui,\ + org.netbeans.modules.projectui.buildmenu,\ + org.netbeans.modules.projectuiapi,\ + org.netbeans.modules.properties,\ + org.netbeans.modules.properties.syntax,\ + org.netbeans.modules.refactoring.api,\ + org.netbeans.modules.schema2beans,\ + org.netbeans.modules.server,\ + org.netbeans.modules.servletapi,\ + org.netbeans.modules.spellchecker,\ + org.netbeans.modules.spellchecker.apimodule,\ + org.netbeans.modules.spellchecker.bindings.htmlxml,\ + org.netbeans.modules.spellchecker.bindings.properties,\ + org.netbeans.modules.spellchecker.dictionary_en,\ + org.netbeans.modules.spellchecker.kit,\ + org.netbeans.modules.spi.actions,\ + org.netbeans.modules.subversion,\ + org.netbeans.modules.swing.validation,\ + org.netbeans.modules.target.iterator,\ + org.netbeans.modules.tasklist.kit,\ + org.netbeans.modules.tasklist.projectint,\ + org.netbeans.modules.tasklist.todo,\ + org.netbeans.modules.tasklist.ui,\ + org.netbeans.modules.team.commons,\ + org.netbeans.modules.team.ide,\ org.netbeans.modules.templates,\ + org.netbeans.modules.terminal,\ + org.netbeans.modules.usersguide,\ + org.netbeans.modules.utilities.project,\ + org.netbeans.modules.versioning,\ + org.netbeans.modules.versioning.core,\ + org.netbeans.modules.versioning.indexingbridge,\ + org.netbeans.modules.versioning.masterfs,\ + org.netbeans.modules.versioning.system.cvss.installer,\ + org.netbeans.modules.versioning.ui,\ + org.netbeans.modules.versioning.util,\ + org.netbeans.modules.web.browser.api,\ + org.netbeans.modules.web.common,\ + org.netbeans.modules.web.indent,\ + org.netbeans.modules.web.webkit.debugging,\ + org.netbeans.modules.xml,\ + org.netbeans.modules.xml.axi,\ + org.netbeans.modules.xml.catalog,\ + org.netbeans.modules.xml.core,\ + org.netbeans.modules.xml.jaxb.api,\ + org.netbeans.modules.xml.lexer,\ + org.netbeans.modules.xml.multiview,\ + org.netbeans.modules.xml.retriever,\ + org.netbeans.modules.xml.schema.completion,\ + org.netbeans.modules.xml.schema.model,\ + org.netbeans.modules.xml.tax,\ + org.netbeans.modules.xml.text,\ + org.netbeans.modules.xml.tools,\ + org.netbeans.modules.xml.wsdl.model,\ + org.netbeans.modules.xml.xam,\ + org.netbeans.modules.xml.xdm,\ + org.netbeans.modules.xsl,\ + org.netbeans.spi.debugger.ui,\ + org.netbeans.spi.editor.hints,\ + org.netbeans.spi.editor.hints.projects,\ + org.netbeans.spi.navigator,\ + org.netbeans.spi.palette,\ + org.netbeans.spi.tasklist,\ + org.netbeans.spi.viewmodel,\ + org.netbeans.swing.dirchooser,\ org.openide.compat,\ org.openide.execution,\ org.openide.options,\ - org.openide.util.enumerations + org.openide.util.enumerations,\ + org.openidex.util nbplatform.active=default