From 3637c5abc1a155bf42c8a32ab61cb18ee3e9893c Mon Sep 17 00:00:00 2001 From: Waverunner Date: Mon, 8 Sep 2014 13:25:39 -0400 Subject: [PATCH] Added creator files --- ConversationCompiler/build.xml | 8 + ConversationCompiler/manifest.mf | 5 + ConversationCompiler/nbproject/build-impl.xml | 45 ++++ .../nbproject/genfiles.properties | 8 + .../nbproject/private/private.xml | 9 + .../nbproject/project.properties | 2 + ConversationCompiler/nbproject/project.xml | 69 +++++ .../nbproject/suite.properties | 1 + .../tools/csc/compiler/Bundle.properties | 1 + .../tools/csc/compiler/Compiler.java | 179 +++++++++++++ .../csc/compiler/wizard/Bundle.properties | 9 + .../compiler/wizard/CompileVisualPanel1.form | 158 +++++++++++ .../compiler/wizard/CompileVisualPanel1.java | 155 +++++++++++ .../compiler/wizard/CompileWizardAction.java | 72 +++++ .../compiler/wizard/CompileWizardPanel1.java | 63 +++++ .../csc/compiler/wizard/csc_wizard_bg.png | Bin 0 -> 31994 bytes ConversationEditor/build.xml | 8 + ConversationEditor/manifest.mf | 7 + ConversationEditor/nbproject/build-impl.xml | 45 ++++ .../nbproject/genfiles.properties | 8 + .../nbproject/private/private.xml | 12 + .../nbproject/project.properties | 2 + ConversationEditor/nbproject/project.xml | 90 +++++++ ConversationEditor/nbproject/suite.properties | 1 + .../csc/conversationeditor/Bundle.properties | 8 + .../ConversationConnectProvider.java | 58 ++++ .../ConversationLookFeel.java | 95 +++++++ .../conversationeditor/ConversationNode.java | 248 ++++++++++++++++++ .../ConversationWidget.java | 105 ++++++++ .../EditorTopComponent.form | 34 +++ .../EditorTopComponent.java | 120 +++++++++ .../EditorTopComponentWstcref.xml | 6 + .../csc/conversationeditor/SceneView.java | 94 +++++++ .../actions/NewConvEnd.java | 53 ++++ .../actions/NewConvOption.java | 48 ++++ .../actions/NewConvResponse.java | 52 ++++ .../actions/conversation_tb_end.png | Bin 0 -> 21206 bytes .../actions/conversation_tb_end24.png | Bin 0 -> 21224 bytes .../actions/conversation_tb_option.png | Bin 0 -> 18975 bytes .../actions/conversation_tb_option24.png | Bin 0 -> 19037 bytes .../actions/conversation_tb_response.png | Bin 0 -> 18953 bytes .../actions/conversation_tb_response24.png | Bin 0 -> 19100 bytes .../conversationeditor/conversation_begin.png | Bin 0 -> 20592 bytes .../conversationeditor/conversation_end.png | Bin 0 -> 23907 bytes .../conversation_option.png | Bin 0 -> 18147 bytes .../conversation_response.png | Bin 0 -> 17969 bytes .../tools/csc/conversationeditor/csc_logo.png | Bin 0 -> 22083 bytes .../tools/csc/conversationeditor/layer.xml | 88 +++++++ .../conversationeditor/propertiesWsmode.xml | 20 ++ .../conversationeditor/propertiesWstcref.xml | 11 + build.xml | 8 + nbproject/build-impl.xml | 50 ++++ nbproject/genfiles.properties | 11 + nbproject/platform.properties | 18 ++ nbproject/platform.xml | 34 +++ nbproject/private/platform-private.properties | 1 + nbproject/private/private.xml | 7 + nbproject/project.properties | 15 ++ nbproject/project.xml | 9 + 59 files changed, 2150 insertions(+) create mode 100644 ConversationCompiler/build.xml create mode 100644 ConversationCompiler/manifest.mf create mode 100644 ConversationCompiler/nbproject/build-impl.xml create mode 100644 ConversationCompiler/nbproject/genfiles.properties create mode 100644 ConversationCompiler/nbproject/private/private.xml create mode 100644 ConversationCompiler/nbproject/project.properties create mode 100644 ConversationCompiler/nbproject/project.xml create mode 100644 ConversationCompiler/nbproject/suite.properties create mode 100644 ConversationCompiler/src/com/projectswg/tools/csc/compiler/Bundle.properties create mode 100644 ConversationCompiler/src/com/projectswg/tools/csc/compiler/Compiler.java create mode 100644 ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/Bundle.properties create mode 100644 ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileVisualPanel1.form create mode 100644 ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileVisualPanel1.java create mode 100644 ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileWizardAction.java create mode 100644 ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileWizardPanel1.java create mode 100644 ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/csc_wizard_bg.png create mode 100644 ConversationEditor/build.xml create mode 100644 ConversationEditor/manifest.mf create mode 100644 ConversationEditor/nbproject/build-impl.xml create mode 100644 ConversationEditor/nbproject/genfiles.properties create mode 100644 ConversationEditor/nbproject/private/private.xml create mode 100644 ConversationEditor/nbproject/project.properties create mode 100644 ConversationEditor/nbproject/project.xml create mode 100644 ConversationEditor/nbproject/suite.properties create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/Bundle.properties create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationConnectProvider.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationLookFeel.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationNode.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationWidget.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.form create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponentWstcref.xml create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneView.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvEnd.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvOption.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvResponse.java create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_end.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_end24.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_option.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_option24.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_response.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_response24.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/conversation_begin.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/conversation_end.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/conversation_option.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/conversation_response.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/csc_logo.png create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/layer.xml create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/propertiesWsmode.xml create mode 100644 ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/propertiesWstcref.xml create mode 100644 build.xml create mode 100644 nbproject/build-impl.xml create mode 100644 nbproject/genfiles.properties create mode 100644 nbproject/platform.properties create mode 100644 nbproject/platform.xml create mode 100644 nbproject/private/platform-private.properties create mode 100644 nbproject/private/private.xml create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml diff --git a/ConversationCompiler/build.xml b/ConversationCompiler/build.xml new file mode 100644 index 0000000..ea549b7 --- /dev/null +++ b/ConversationCompiler/build.xml @@ -0,0 +1,8 @@ + + + + + + Builds, tests, and runs the project com.projectswg.tools.csc.compiler. + + diff --git a/ConversationCompiler/manifest.mf b/ConversationCompiler/manifest.mf new file mode 100644 index 0000000..c928f8f --- /dev/null +++ b/ConversationCompiler/manifest.mf @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +OpenIDE-Module: com.projectswg.tools.csc.compiler +OpenIDE-Module-Localizing-Bundle: com/projectswg/tools/csc/compiler/Bundle.properties +OpenIDE-Module-Specification-Version: 1.0 + diff --git a/ConversationCompiler/nbproject/build-impl.xml b/ConversationCompiler/nbproject/build-impl.xml new file mode 100644 index 0000000..6e6aa5e --- /dev/null +++ b/ConversationCompiler/nbproject/build-impl.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + You must set 'suite.dir' to point to your containing module suite + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ConversationCompiler/nbproject/genfiles.properties b/ConversationCompiler/nbproject/genfiles.properties new file mode 100644 index 0000000..29e95dc --- /dev/null +++ b/ConversationCompiler/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=beb6af21 +build.xml.script.CRC32=16594606 +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=beb6af21 +nbproject/build-impl.xml.script.CRC32=bd99f65f +nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.66.1 diff --git a/ConversationCompiler/nbproject/private/private.xml b/ConversationCompiler/nbproject/private/private.xml new file mode 100644 index 0000000..f882026 --- /dev/null +++ b/ConversationCompiler/nbproject/private/private.xml @@ -0,0 +1,9 @@ + + + + + + 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 new file mode 100644 index 0000000..6baf44e --- /dev/null +++ b/ConversationCompiler/nbproject/project.properties @@ -0,0 +1,2 @@ +javac.source=1.7 +javac.compilerargs=-Xlint -Xlint:-serial diff --git a/ConversationCompiler/nbproject/project.xml b/ConversationCompiler/nbproject/project.xml new file mode 100644 index 0000000..b082702 --- /dev/null +++ b/ConversationCompiler/nbproject/project.xml @@ -0,0 +1,69 @@ + + + org.netbeans.modules.apisupport.project + + + com.projectswg.tools.csc.compiler + + + + com.projectswg.tools.csc.conversationeditor + + + + 1.0 + + + + org.netbeans.api.visual + + + + 2.42.1 + + + + org.openide.awt + + + + 7.61.2 + + + + org.openide.dialogs + + + + 7.36.1 + + + + org.openide.nodes + + + + 7.38.1 + + + + org.openide.util + + + + 8.37.1 + + + + org.openide.windows + + + + 6.70.1 + + + + + + + diff --git a/ConversationCompiler/nbproject/suite.properties b/ConversationCompiler/nbproject/suite.properties new file mode 100644 index 0000000..29d7cc9 --- /dev/null +++ b/ConversationCompiler/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Bundle.properties b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Bundle.properties new file mode 100644 index 0000000..99a6c2f --- /dev/null +++ b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Bundle.properties @@ -0,0 +1 @@ +OpenIDE-Module-Name=Conversation Compiler diff --git a/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Compiler.java b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Compiler.java new file mode 100644 index 0000000..8ad9c91 --- /dev/null +++ b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/Compiler.java @@ -0,0 +1,179 @@ +package com.projectswg.tools.csc.compiler; + +import com.projectswg.tools.csc.conversationeditor.ConversationNode; +import com.projectswg.tools.csc.conversationeditor.ConversationWidget; +import com.projectswg.tools.csc.conversationeditor.EditorTopComponent; +import com.projectswg.tools.csc.conversationeditor.SceneView; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +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 { + + private final File file; + + public Compiler(File file) { + this.file = file; + } + + public void compile() throws IOException { + + TopComponent component = WindowManager.getDefault().findTopComponent("EditorTopComponent"); + if (component == null || !(component instanceof EditorTopComponent)) + return; + + EditorTopComponent editor = (EditorTopComponent) component; + SceneView scene = editor.getScene(); + + if (scene == null) { + JOptionPane.showMessageDialog(null, "The scene was null! You must restart the editor in order to compile :(", + "Conversation Script Creator", JOptionPane.ERROR_MESSAGE); + return; + } + + try (BufferedWriter bw = new BufferedWriter(new FileWriter(file.getAbsolutePath()))) { + createBaseFile(bw); + + List connectedNodes = scene.getConnectionLayer().getChildren(); + LinkedHashMap> conversationLinks = new LinkedHashMap<>(); + + for (Widget widget : connectedNodes) { + ConnectionWidget connection = (ConnectionWidget) widget; + + ConversationWidget source = (ConversationWidget) connection.getSourceAnchor().getRelatedWidget(); + ConversationNode sNode = source.getAttachedNode(); + + if (!conversationLinks.containsKey(sNode)) { + conversationLinks.put(sNode, new ArrayList()); + } + + ConversationWidget target = (ConversationWidget) connection.getTargetAnchor().getRelatedWidget(); + ConversationNode tNode = target.getAttachedNode(); + + if (conversationLinks.containsKey(sNode)) + conversationLinks.get(sNode).add(tNode); + else + System.out.println("No key for node " + sNode.getStf()); + + //System.out.println("This connection widget came from " + sNode.getStf() + " and is pointing to " + tNode.getStf()); + //compiler.compileTarget(tNode); + } + + for (Map.Entry> entry : conversationLinks.entrySet()) { + /*System.out.println("Handling for node " + entry.getKey().getStf()); + for (ConversationNode node : entry.getValue()) { + System.out.println("Node: " + node.getStf()); + }*/ + if (entry.getKey().isStartNode()) { + createOptionsAndHandler(bw, entry.getKey(), entry.getValue(), 1, conversationLinks); + break; + } + } + } + } + + private void createBaseFile(BufferedWriter bw) throws IOException { + bw.write("# Base file generated using Conversation Script Creator for ProjectSWG\n"); + + bw.write("from resources.common import ConversationOption\n" + + "from resources.common import OutOfBand\n" + + "from resources.common import ProsePackage\n" + + "from java.util import Vector\n"); + bw.newLine(); + bw.write("import sys\n"); + bw.newLine(); + bw.write("def startConversation(core, actor, npc):\n"); + } + + private void createResponseHandler(BufferedWriter bw, ArrayList options, int handleNum, + LinkedHashMap> conversationLinks) throws IOException { + + LinkedHashMap> handleFuncs = new LinkedHashMap<>(); + + bw.write("def handleOptionScreen" + handleNum + "(core, actor, npc, selection):\n"); + bw.newLine(); + int count = handleNum + 1; + for (ConversationNode selectedOption : options) { + bw.write(" " + (options.indexOf(selectedOption) > 0 ? "elif" : "if") + " selection == " + options.indexOf(selectedOption) + ":\n"); + if (conversationLinks.containsKey(selectedOption)) { + bw.write(" #Handler for Option " + selectedOption.getStf() + "\n"); + for (ConversationNode handleNode : conversationLinks.get(selectedOption)) { + if (!handleNode.isOption()) { + if (conversationLinks.get(handleNode) == null) { + bw.write(" core.conversationService.sendStopConversation(actor, npc, 'conversation/c_newbie_secondchance', 's_136')\n"); + } else { + createOptions(bw, conversationLinks.get(handleNode), count++, " "); + bw.write(" core.conversationService.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@" + handleNode.getStf() + "')\n"); + handleFuncs.put(handleNode, conversationLinks.get(handleNode)); // Put these nodes in list so we can create the handlers later. + } + } + } + } + bw.write(" return\n"); + bw.newLine(); + } + bw.write(" return\n"); + + bw.newLine(); + + int currentHandler = handleNum + 1; + for (Map.Entry> handleNode : handleFuncs.entrySet()) { + createResponseHandler(bw, handleNode.getValue(), currentHandler++, conversationLinks); + } + } + + private void createOptionsAndHandler(BufferedWriter bw, ConversationNode response, ArrayList options, int handleScreenNum, + LinkedHashMap> conversationLinks) throws IOException { + + bw.write(" options = new Vector()\n"); + + if (options.size() > 1) { + ArrayList orderedOptions = new ArrayList<>(); + for (ConversationNode unOrdered : options) { + orderedOptions.add(unOrdered.getOptionId(), unOrdered); + } + for (ConversationNode option : orderedOptions) { + bw.write(" options.add(ConversationOption(OutOfBand.ProsePackage('@" + option.getStf() +"'), " + options.indexOf(option) + ")\n"); + } + } else { + for (ConversationNode option : options) { + bw.write(" options.add(ConversationOption(OutOfBand.ProsePackage('@" + option.getStf() +"'), " + options.indexOf(option) + ")\n"); + } + } + + bw.write(" core.conversationService.sendConversationOptions(actor, npc, handleOptionScreen" + String.valueOf(handleScreenNum) + ")\n"); + bw.write(" core.conversationService.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@" + response.getStf() + "'))\n"); + bw.write(" return\n"); + bw.newLine(); + createResponseHandler(bw, options, handleScreenNum, conversationLinks); + } + + private void createOptions(BufferedWriter bw, ArrayList options, int handleScreenNum, String space) throws IOException { + bw.write(space + "options = new Vector()\n"); + + if (options.size() > 1) { + ArrayList orderedOptions = new ArrayList<>(); + for (ConversationNode unOrdered : options) { + orderedOptions.add(unOrdered.getOptionId(), unOrdered); + } + for (ConversationNode option : orderedOptions) { + bw.write(space + "options.add(ConversationOption(OutOfBand.ProsePackage('@" + option.getStf() +"'), " + options.indexOf(option) + ")\n"); + } + } else { + for (ConversationNode option : options) { + bw.write(space + "options.add(ConversationOption(OutOfBand.ProsePackage('@" + option.getStf() +"'), " + options.indexOf(option) + ")\n"); + } + } + bw.write(space + "core.conversationService.sendConversationOptions(actor, npc, handleOptionScreen" + String.valueOf(handleScreenNum) + ")\n"); + } +} diff --git a/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/Bundle.properties b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/Bundle.properties new file mode 100644 index 0000000..21a26e1 --- /dev/null +++ b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/Bundle.properties @@ -0,0 +1,9 @@ +CompileVisualPanel1.jLabel1.text=Location +CompileVisualPanel1.jLabel2.text=Please select the location where you wish to build the script to. +CompileVisualPanel1.btnBrowse.text=Browse +CompileVisualPanel1.txtLocation.text= +CompileVisualPanel1.jLabel3.text=Script Name +CompileVisualPanel1.txtName.text=conversation_script +CompileVisualPanel1.jLabel4.text=Enter a name for the compiled script. This should not include any extensions (ex: .py) +CompileVisualPanel1.jLabel5.text=Script will be built to: +CompileVisualPanel1.txtBuildLoc.text= diff --git a/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileVisualPanel1.form b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileVisualPanel1.form new file mode 100644 index 0000000..b8e3267 --- /dev/null +++ b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileVisualPanel1.form @@ -0,0 +1,158 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileVisualPanel1.java b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileVisualPanel1.java new file mode 100644 index 0000000..27c3692 --- /dev/null +++ b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileVisualPanel1.java @@ -0,0 +1,155 @@ +/* + * 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.compiler.wizard; + +import javax.swing.JFileChooser; +import javax.swing.JPanel; + +public final class CompileVisualPanel1 extends JPanel { + + /** + * Creates new form CompileVisualPanel1 + */ + public CompileVisualPanel1() { + initComponents(); + } + + @Override + public String getName() { + return "Select Location"; + } + + /** + * 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 regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + jLabel1 = new javax.swing.JLabel(); + txtLocation = new javax.swing.JTextField(); + btnBrowse = new javax.swing.JButton(); + jLabel2 = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + txtName = new javax.swing.JTextField(); + jLabel4 = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + txtBuildLoc = new javax.swing.JTextField(); + + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(CompileVisualPanel1.class, "CompileVisualPanel1.jLabel1.text")); // NOI18N + + txtLocation.setEditable(false); + txtLocation.setText(org.openide.util.NbBundle.getMessage(CompileVisualPanel1.class, "CompileVisualPanel1.txtLocation.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(btnBrowse, org.openide.util.NbBundle.getMessage(CompileVisualPanel1.class, "CompileVisualPanel1.btnBrowse.text")); // NOI18N + btnBrowse.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnBrowseActionPerformed(evt); + } + }); + + jLabel2.setLabelFor(txtLocation); + org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(CompileVisualPanel1.class, "CompileVisualPanel1.jLabel2.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(CompileVisualPanel1.class, "CompileVisualPanel1.jLabel3.text")); // NOI18N + + txtName.setText(org.openide.util.NbBundle.getMessage(CompileVisualPanel1.class, "CompileVisualPanel1.txtName.text")); // NOI18N + txtName.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyTyped(java.awt.event.KeyEvent evt) { + txtNameKeyTyped(evt); + } + }); + + jLabel4.setLabelFor(txtName); + org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(CompileVisualPanel1.class, "CompileVisualPanel1.jLabel4.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(CompileVisualPanel1.class, "CompileVisualPanel1.jLabel5.text")); // NOI18N + + txtBuildLoc.setEditable(false); + txtBuildLoc.setText(org.openide.util.NbBundle.getMessage(CompileVisualPanel1.class, "CompileVisualPanel1.txtBuildLoc.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(txtName)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel5) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(txtBuildLoc)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(txtLocation, javax.swing.GroupLayout.PREFERRED_SIZE, 266, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnBrowse, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jLabel2) + .addComponent(jLabel4)) + .addGap(0, 0, Short.MAX_VALUE)))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(btnBrowse) + .addComponent(txtLocation, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1)) + .addGap(14, 14, 14) + .addComponent(jLabel4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel3) + .addComponent(txtName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(48, 48, 48) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel5) + .addComponent(txtBuildLoc, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(124, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + private void btnBrowseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBrowseActionPerformed + JFileChooser chooser = new JFileChooser(); + chooser.setDialogTitle("Select Location"); + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + int returnVal = chooser.showDialog(this, "Select"); + if (returnVal == JFileChooser.APPROVE_OPTION) { + txtLocation.setText(chooser.getSelectedFile().getPath()); + txtBuildLoc.setText(txtLocation.getText() + "\\" + txtName.getText() + ".py"); + } + }//GEN-LAST:event_btnBrowseActionPerformed + + private void txtNameKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNameKeyTyped + txtBuildLoc.setText(txtLocation.getText() + "\\" + txtName.getText() + ".py"); + }//GEN-LAST:event_txtNameKeyTyped + + public String getBuildLocation() { + return txtBuildLoc.getText(); + } + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton btnBrowse; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; + private javax.swing.JTextField txtBuildLoc; + private javax.swing.JTextField txtLocation; + private javax.swing.JTextField txtName; + // End of variables declaration//GEN-END:variables +} diff --git a/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileWizardAction.java b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileWizardAction.java new file mode 100644 index 0000000..9ee66cc --- /dev/null +++ b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileWizardAction.java @@ -0,0 +1,72 @@ +/* + * 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.compiler.wizard; + +import com.projectswg.tools.csc.compiler.Compiler; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.IOException; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JComponent; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.WizardDescriptor; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.Exceptions; +import org.openide.util.ImageUtilities; + +@ActionID(category="...", id="com.projectswg.tools.csc.compiler.wizard.CompileWizardAction") +@ActionRegistration(displayName="Create Script") +@ActionReference(path="Menu/File") +public final class CompileWizardAction implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + List> panels = new ArrayList<>(); + CompileWizardPanel1 compilePanel = new CompileWizardPanel1(); + panels.add(compilePanel); + String[] steps = new String[panels.size()]; + for (int i = 0; i < panels.size(); i++) { + Component c = panels.get(i).getComponent(); + // Default step name to component name of panel. + steps[i] = c.getName(); + if (c instanceof JComponent) { // assume Swing components + JComponent jc = (JComponent) c; + jc.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, i); + jc.putClientProperty(WizardDescriptor.PROP_CONTENT_DATA, steps); + jc.putClientProperty(WizardDescriptor.PROP_AUTO_WIZARD_STYLE, true); + jc.putClientProperty(WizardDescriptor.PROP_CONTENT_DISPLAYED, true); + jc.putClientProperty(WizardDescriptor.PROP_CONTENT_NUMBERED, true); + } + } + WizardDescriptor wiz = new WizardDescriptor(new WizardDescriptor.ArrayIterator<>(panels)); + // {0} will be replaced by WizardDesriptor.Panel.getComponent().getName() + wiz.setTitleFormat(new MessageFormat("{0}")); + wiz.setTitle("Compile Conversation Script"); + wiz.putProperty(WizardDescriptor.PROP_IMAGE, ImageUtilities.loadImage("com/projectswg/tools/csc/compiler/wizard/csc_wizard_bg.png")); + + if (DialogDisplayer.getDefault().notify(wiz) == WizardDescriptor.FINISH_OPTION) { + File file = new File(compilePanel.getComponent().getBuildLocation()); + + if (file.exists()) { + DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message("Script already exists: " + file.getAbsolutePath(), NotifyDescriptor.ERROR_MESSAGE)); + } else { + Compiler compiler = new Compiler(file); + try { + compiler.compile(); + } catch (IOException ex) { + Exceptions.printStackTrace(ex); + } + } + } + } +} \ No newline at end of file diff --git a/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileWizardPanel1.java b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileWizardPanel1.java new file mode 100644 index 0000000..f755e24 --- /dev/null +++ b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/CompileWizardPanel1.java @@ -0,0 +1,63 @@ +/* + * 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.compiler.wizard; + +import javax.swing.event.ChangeListener; +import org.openide.WizardDescriptor; +import org.openide.util.HelpCtx; + +public class CompileWizardPanel1 implements WizardDescriptor.Panel { + + private CompileVisualPanel1 component; + + // Get the visual component for the panel. In this template, the component + // is kept separate. This can be more efficient: if the wizard is created + // but never displayed, or not all panels are displayed, it is better to + // create only those which really need to be visible. + @Override + public CompileVisualPanel1 getComponent() { + if (component == null) { + component = new CompileVisualPanel1(); + } + return component; + } + + @Override + public HelpCtx getHelp() { + // Show no Help button for this panel: + return HelpCtx.DEFAULT_HELP; + // If you have context help: + // return new HelpCtx("help.key.here"); + } + + @Override + public boolean isValid() { + // If it is always OK to press Next or Finish, then: + return true; + // If it depends on some condition (form filled out...) and + // this condition changes (last form field filled in...) then + // use ChangeSupport to implement add/removeChangeListener below. + // WizardDescriptor.ERROR/WARNING/INFORMATION_MESSAGE will also be useful. + } + + @Override + public void addChangeListener(ChangeListener l) { + } + + @Override + public void removeChangeListener(ChangeListener l) { + } + + @Override + public void readSettings(WizardDescriptor wiz) { + // use wiz.getProperty to retrieve previous panel state + } + + @Override + public void storeSettings(WizardDescriptor wiz) { + // use wiz.putProperty to remember current panel state + } +} diff --git a/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/csc_wizard_bg.png b/ConversationCompiler/src/com/projectswg/tools/csc/compiler/wizard/csc_wizard_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..75c76d6bd8e1a8f5b97fd247f8cbf9386777ec4e GIT binary patch literal 31994 zcmeIb1z1(v7U;j|?go+W+MDi91tbMTh0SIYA`Mc~ZGfnB3KAj$A`;ReAsr&!CEXow zb3C5o;hxL8@7?$RzkA;Y--j^QSYymNe{;;S<`~Ow6RM%Ego8<|&in6>G03aa2 zzqim);a5ZymG8lSVAv@eI066`(b+cw5SKs>0GKx{<>WLpENq=@9W89_XjSCoXzd(q z%`ET30Kj!HQQKTc`#Y(`?&y~6^$?$z*KM^(&}p?~ANvqTFtgKP;9m=&do@6!Swo

hZ7!YR(<8Wvu!6Ize&#JY$kr_K&wW_ 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 Ci^t9Y literal 0 HcmV?d00001 diff --git a/ConversationEditor/build.xml b/ConversationEditor/build.xml new file mode 100644 index 0000000..90f8abf --- /dev/null +++ b/ConversationEditor/build.xml @@ -0,0 +1,8 @@ + + + + + + Builds, tests, and runs the project com.projectswg.tools.csc.conversationeditor. + + diff --git a/ConversationEditor/manifest.mf b/ConversationEditor/manifest.mf new file mode 100644 index 0000000..d317c66 --- /dev/null +++ b/ConversationEditor/manifest.mf @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +OpenIDE-Module: com.projectswg.tools.csc.conversationeditor +OpenIDE-Module-Layer: com/projectswg/tools/csc/conversationeditor/layer.xml +OpenIDE-Module-Localizing-Bundle: com/projectswg/tools/csc/conversationeditor/Bundle.properties +OpenIDE-Module-Requires: org.openide.windows.WindowManager +OpenIDE-Module-Specification-Version: 1.0 + diff --git a/ConversationEditor/nbproject/build-impl.xml b/ConversationEditor/nbproject/build-impl.xml new file mode 100644 index 0000000..576d29c --- /dev/null +++ b/ConversationEditor/nbproject/build-impl.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + You must set 'suite.dir' to point to your containing module suite + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ConversationEditor/nbproject/genfiles.properties b/ConversationEditor/nbproject/genfiles.properties new file mode 100644 index 0000000..0a07a29 --- /dev/null +++ b/ConversationEditor/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=90d565b1 +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.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 new file mode 100644 index 0000000..aabcfea --- /dev/null +++ b/ConversationEditor/nbproject/private/private.xml @@ -0,0 +1,12 @@ + + + + + + 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.properties b/ConversationEditor/nbproject/project.properties new file mode 100644 index 0000000..6baf44e --- /dev/null +++ b/ConversationEditor/nbproject/project.properties @@ -0,0 +1,2 @@ +javac.source=1.7 +javac.compilerargs=-Xlint -Xlint:-serial diff --git a/ConversationEditor/nbproject/project.xml b/ConversationEditor/nbproject/project.xml new file mode 100644 index 0000000..3611d1e --- /dev/null +++ b/ConversationEditor/nbproject/project.xml @@ -0,0 +1,90 @@ + + + org.netbeans.modules.apisupport.project + + + com.projectswg.tools.csc.conversationeditor + + + + org.netbeans.api.visual + + + + 2.42.1 + + + + org.netbeans.modules.options.api + + + + 1 + 1.39.1 + + + + org.netbeans.modules.settings + + + + 1 + 1.44.1 + + + + org.openide.awt + + + + 7.61.2 + + + + org.openide.explorer + + + + 6.56.1 + + + + org.openide.nodes + + + + 7.38.1 + + + + org.openide.util + + + + 8.37.1 + + + + org.openide.util.lookup + + + + 8.24.1 + + + + org.openide.windows + + + + 6.70.1 + + + + + com.projectswg.tools.csc.conversationeditor + com.projectswg.tools.csc.conversationeditor.actions + + + + diff --git a/ConversationEditor/nbproject/suite.properties b/ConversationEditor/nbproject/suite.properties new file mode 100644 index 0000000..29d7cc9 --- /dev/null +++ b/ConversationEditor/nbproject/suite.properties @@ -0,0 +1 @@ +suite.dir=${basedir}/.. diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/Bundle.properties b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/Bundle.properties new file mode 100644 index 0000000..71fa881 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/Bundle.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Display-Category=Tools +OpenIDE-Module-Long-Description=\ + This is the visual editor that allows a visual representation of conversations in SWG based off of supported scripting formats. +OpenIDE-Module-Name=Conversation Editor +OpenIDE-Module-Short-Description=Visual editor for SWG conversations +GeneralPanel.jLabel1.text=Compile Location +GeneralPanel.jTextField1.text=C:/conversation_script.py +GeneralPanel.jButton1.text=Browse diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationConnectProvider.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationConnectProvider.java new file mode 100644 index 0000000..b45a820 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationConnectProvider.java @@ -0,0 +1,58 @@ +package com.projectswg.tools.csc.conversationeditor; + +import java.awt.Point; +import javax.swing.JOptionPane; +import org.netbeans.api.visual.action.ConnectProvider; +import org.netbeans.api.visual.action.ConnectorState; +import org.netbeans.api.visual.anchor.AnchorFactory; +import org.netbeans.api.visual.anchor.AnchorShape; +import org.netbeans.api.visual.widget.ConnectionWidget; +import org.netbeans.api.visual.widget.Scene; +import org.netbeans.api.visual.widget.Widget; + +public class ConversationConnectProvider implements ConnectProvider { + + private final SceneView scene; + + public ConversationConnectProvider(SceneView scene) { + this.scene = scene; + } + + @Override + public boolean isSourceWidget(Widget source) { + return source instanceof ConversationWidget; + } + + @Override + public ConnectorState isTargetWidget(Widget source, Widget target) { + return source != target && target instanceof ConversationWidget ? ConnectorState.ACCEPT : ConnectorState.REJECT; + } + + @Override + public boolean hasCustomTargetWidgetResolver(Scene scene) { + return false; + } + + @Override + public Widget resolveTargetWidget(Scene scene, Point point) { + return null; + } + + @Override + public void createConnection(Widget source, Widget target) { + if (source instanceof ConversationWidget && target instanceof ConversationWidget) { + if (((ConversationWidget)source).getAttachedNode().isEndNode()) { + JOptionPane.showMessageDialog(null, "Cannot attach end conversation node to responses/options!", "Conversation Script Creator", JOptionPane.INFORMATION_MESSAGE); + return; + } + ConnectionWidget conn = new ConnectionWidget(scene); + conn.setTargetAnchorShape(AnchorShape.TRIANGLE_FILLED); + conn.setTargetAnchor(AnchorFactory.createRectangularAnchor(target)); + conn.setSourceAnchor(AnchorFactory.createRectangularAnchor(source)); + scene.getConnectionLayer().addChild(conn); + + ((ConversationWidget)source).getAttachedNode().setCompiled(false); + ((ConversationWidget)target).getAttachedNode().setCompiled(false); + } + } +} diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationLookFeel.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationLookFeel.java new file mode 100644 index 0000000..e9b54f2 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationLookFeel.java @@ -0,0 +1,95 @@ +package com.projectswg.tools.csc.conversationeditor; + +import java.awt.Color; +import java.awt.Paint; +import org.netbeans.api.visual.border.Border; +import org.netbeans.api.visual.border.BorderFactory; +import org.netbeans.api.visual.laf.LookFeel; +import org.netbeans.api.visual.model.ObjectState; + +public class ConversationLookFeel extends LookFeel{ + private static final Color COLOR_SELECTED = new Color (0x447BCD); + private static final Color COLOR_HIGHLIGHTED = COLOR_SELECTED.darker (); + private static final Color COLOR_HOVERED = new Color (0x52E544); + private static final Color LINE_COLOR = new Color (0x466f16); + private static final int MARGIN = 3; + private static final int ARC = 10; + private static final int MINI_THICKNESS = 1; + + private static final Border BORDER_NORMAL = BorderFactory.createEmptyBorder (MARGIN, MARGIN); + private static final Border BORDER_HOVERED = BorderFactory.createRoundedBorder (ARC, ARC, MARGIN, MARGIN, COLOR_HOVERED, COLOR_HOVERED.darker ()); + private static final Border BORDER_SELECTED = BorderFactory.createRoundedBorder (ARC, ARC, MARGIN, MARGIN, COLOR_SELECTED, COLOR_SELECTED.darker ()); + + private static final Border MINI_BORDER_NORMAL = BorderFactory.createEmptyBorder (MINI_THICKNESS); + private static final Border MINI_BORDER_HOVERED = BorderFactory.createRoundedBorder (MINI_THICKNESS, MINI_THICKNESS, MINI_THICKNESS, MINI_THICKNESS, COLOR_HOVERED, COLOR_HOVERED.darker ()); + private static final Border MINI_BORDER_SELECTED = BorderFactory.createRoundedBorder (MINI_THICKNESS, MINI_THICKNESS, MINI_THICKNESS, MINI_THICKNESS, COLOR_SELECTED, COLOR_SELECTED.darker ()); + + @Override + public Paint getBackground() { + return Color.BLACK; + } + + @Override + public Color getForeground() { + return Color.BLACK; + } + + @Override + public Border getBorder(ObjectState state) { + if (state.isHovered ()) + return BORDER_HOVERED; + if (state.isSelected ()) + return BORDER_SELECTED; + if (state.isFocused ()) + return BORDER_HOVERED; + return BORDER_NORMAL; + } + + @Override + public Border getMiniBorder (ObjectState state) { + if (state.isHovered ()) + return MINI_BORDER_HOVERED; + if (state.isSelected ()) + return MINI_BORDER_SELECTED; + if (state.isFocused ()) + return MINI_BORDER_HOVERED; + return MINI_BORDER_NORMAL; + } + + @Override + public boolean getOpaque (ObjectState state) { + return state.isHovered () || state.isSelected (); + } + + @Override + public Color getLineColor (ObjectState state) { + if (state.isHovered ()) + return COLOR_HOVERED; + if (state.isSelected ()) + return COLOR_SELECTED; + if (state.isHighlighted () || state.isFocused ()) + return COLOR_HIGHLIGHTED; + return Color.BLACK; + } + + @Override + public Paint getBackground (ObjectState state) { + if (state.isHovered ()) + return COLOR_HOVERED; + if (state.isSelected ()) + return COLOR_SELECTED; + if (state.isHighlighted () || state.isFocused ()) + return COLOR_HIGHLIGHTED; + return Color.WHITE; + } + + @Override + public Color getForeground (ObjectState state) { // Determines LabelWidget's color + return state.isSelected () ? Color.BLACK : Color.WHITE; + } + + @Override + public int getMargin () { + return MARGIN; + } +} diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationNode.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationNode.java new file mode 100644 index 0000000..9025bda --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationNode.java @@ -0,0 +1,248 @@ +package com.projectswg.tools.csc.conversationeditor; + +import java.lang.reflect.InvocationTargetException; +import org.openide.nodes.AbstractNode; +import org.openide.nodes.Children; +import org.openide.nodes.PropertySupport; +import org.openide.nodes.Sheet; +import org.openide.util.Lookup; + +public class ConversationNode extends AbstractNode implements Lookup.Provider { + private final int id; + private int optionId; + private String displayText; + private String stf; + private boolean option; + private boolean locked; + private boolean compiled; + private boolean endNode; + private boolean startNode; + + public ConversationNode(String stf, boolean isOption, int id, boolean isEndNode, boolean isStartNode, int optionId) { + super(Children.LEAF); + + this.stf = stf; + this.option = isOption; + this.displayText = ""; + this.id = id; + this.endNode = isEndNode; + this.startNode = isStartNode; + this.optionId = optionId; + + // Properties Window + if (!isStartNode) + setDisplayName("Conversation " + ((isOption) ? "Option " + String.valueOf(id) : ((isEndNode) ? "End" : "Response " + String.valueOf(id)))); + else + setDisplayName("Begin Conversation Node"); + + setShortDescription("Properties for this Conversation Node"); + } + + public String getStf() { + return stf; + } + + public void setStf(String stf) { + firePropertyChange("stf", this.stf, stf); + this.stf = stf; + } + + public String getDisplayText() { + return displayText; + } + + public void setDisplayText(String displayText) { + firePropertyChange("display", this.displayText, displayText); + this.displayText = displayText; + } + + public boolean isOption() { + return option; + } + + public void setOption(boolean option) { + this.option = option; + } + + public boolean isLocked() { + return locked; + } + + public void setLocked(boolean locked) { + this.locked = locked; + } + + public int getId() { + return id; + } + + public boolean isCompiled() { + return compiled; + } + + public void setCompiled(boolean compiled) { + this.compiled = compiled; + } + + public boolean isEndNode() { + return endNode; + } + + public void setEndNode(boolean endNode) { + this.endNode = endNode; + } + + public boolean isStartNode() { + return this.startNode; + } + + public void setStartNode(boolean startNode) { + this.startNode = startNode; + } + + public int getOptionId() { + return this.optionId; + } + + public void setOptionId(int optionId) { + this.optionId = optionId; + } + + @Override + protected Sheet createSheet() { + Sheet sheet = super.createSheet(); + Sheet.Set set = Sheet.createPropertiesSet(); + + set.put(new IdProperty(this)); + set.put(new StfProperty(this)); + set.put(new DisplayProperty(this)); + if (!endNode) { + set.put(new TypeProperty(this)); + + if (option) { + set.put(new OptionIdProperty(this)); + } + } + set.put(new LockedProperty(this)); + + sheet.put(set); + return sheet; + } +} + +class OptionIdProperty extends PropertySupport.ReadWrite { + + private final ConversationNode node; + + public OptionIdProperty(ConversationNode node) { + super("optionId", Integer.class, "Option ID", "ID used for displaying the order of this option in relation to the response (what option should show first in" + + "list of options)"); + this.node = node; + } + + @Override + public Integer getValue() throws IllegalAccessException, InvocationTargetException { + return node.getOptionId(); + } + + @Override + public void setValue(Integer val) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { + node.setOptionId(val); + } + +} + +class IdProperty extends PropertySupport.ReadOnly { + private final ConversationNode node; + + public IdProperty(ConversationNode node) { + super("id", Integer.class, "Id", "Conversation Node Id"); + this.node = node; + } + + @Override + public Integer getValue() throws IllegalAccessException, InvocationTargetException { + return node.getId(); + } + +} +class StfProperty extends PropertySupport.ReadWrite { + + private final ConversationNode node; + + public StfProperty(ConversationNode node) { + super("stf", String.class, "STF", "STF file for this conversation node. Ex: conversation/c_newbie_mentor:s_109"); + this.setValue("oneline", true); + this.node = node; + } + + @Override + public String getValue() throws IllegalAccessException, InvocationTargetException { + return node.getStf(); + } + + @Override + public void setValue(String val) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { + node.setStf(String.valueOf(val)); + } +} + +class TypeProperty extends PropertySupport.ReadOnly { + + private final ConversationNode node; + + public TypeProperty(ConversationNode node) { + super("option", Boolean.class, "Option", "The conversation node is a response or a option"); + this.node = node; + } + + @Override + public Boolean getValue() throws IllegalAccessException, InvocationTargetException { + return node.isOption(); + } + + @Override + public void setValue(Boolean val) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { + node.setOption(val); + } +} + +class DisplayProperty extends PropertySupport.ReadWrite { + private final ConversationNode node; + + public DisplayProperty(ConversationNode node) { + super ("display", String.class, "Text", "Optional text. This won't affect anything and can be left blank.\n" + + "You can use this for entering the value of a key from the coresponding STF for quick reference."); + this.node = node; + } + + @Override + public String getValue() throws IllegalAccessException, InvocationTargetException { + return node.getDisplayText(); + } + + @Override + public void setValue(String val) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { + node.setDisplayText(val); + } +} + +class LockedProperty extends PropertySupport.ReadWrite { + private final ConversationNode node; + + public LockedProperty(ConversationNode node) { + super("locked", Boolean.class, "Locked", "Determines if this node can be moved."); + this.node = node; + } + + @Override + public Boolean getValue() throws IllegalAccessException, InvocationTargetException { + return node.isLocked(); + } + + @Override + public void setValue(Boolean val) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { + node.setLocked(val); + } + +} diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationWidget.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationWidget.java new file mode 100644 index 0000000..1b7d18b --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/ConversationWidget.java @@ -0,0 +1,105 @@ +package com.projectswg.tools.csc.conversationeditor; + +import java.awt.Point; +import java.beans.PropertyVetoException; +import org.netbeans.api.visual.action.ActionFactory; +import org.netbeans.api.visual.action.MoveStrategy; +import org.netbeans.api.visual.action.SelectProvider; +import org.netbeans.api.visual.layout.LayoutFactory; +import org.netbeans.api.visual.widget.LabelWidget; +import org.netbeans.api.visual.widget.Widget; +import org.netbeans.api.visual.widget.general.IconNodeWidget; +import org.openide.explorer.ExplorerManager; +import org.openide.util.Exceptions; +import org.openide.util.ImageUtilities; +import org.openide.util.LookupEvent; +import org.openide.util.LookupListener; + +public class ConversationWidget extends IconNodeWidget implements LookupListener { + private final ConversationNode attachedNode; + private final ExplorerManager mgr; + + public ConversationWidget(SceneView scene, final ExplorerManager mgr, final ConversationNode node, boolean endConversation) { + super(scene.getScene()); + + this.attachedNode = node; + this.mgr = mgr; + + if (node.isEndNode()) { + setLabel(node.getStf()); + setImage(ImageUtilities.loadImage("com/projectswg/tools/csc/conversationeditor/conversation_end.png")); + } else { + setLabel(node.getStf()); + + if (node.isStartNode()) { + setImage(ImageUtilities.loadImage("com/projectswg/tools/csc/conversationeditor/conversation_begin.png")); + } else { + setImage(node.isOption() ? ImageUtilities.loadImage("com/projectswg/tools/csc/conversationeditor/conversation_option.png") + : ImageUtilities.loadImage("com/projectswg/tools/csc/conversationeditor/conversation_response.png")); + } + } + + // Alignment/pos/ori + getLabelWidget().setAlignment(LabelWidget.Alignment.CENTER); + setLayout(LayoutFactory.createOverlayLayout()); + + // Add Actions + getActions().addAction(ActionFactory.createExtendedConnectAction(scene.getConnectionLayer(), new ConversationConnectProvider(scene))); + getActions().addAction(ActionFactory.createMoveAction(new MoveStrategy() { + @Override + public Point locationSuggested(Widget widget, Point originalLocation, Point suggestedLocation) { + if (!(widget instanceof ConversationWidget)) + return suggestedLocation; + + if (((ConversationWidget) widget).getAttachedNode().isLocked()) + return originalLocation; + + return suggestedLocation; + } + }, ActionFactory.createDefaultMoveProvider())); + getActions().addAction(ActionFactory.createSelectAction(new SelectProvider() { + + @Override + public boolean isAimingAllowed(Widget widget, Point point, boolean bln) { + return true; + } + + @Override + public boolean isSelectionAllowed(Widget widget, Point point, boolean bln) { + return true; + } + + @Override + public void select(Widget widget, Point point, boolean bln) { + if (!(widget instanceof ConversationWidget)) + return; + + ConversationWidget convWidget = (ConversationWidget) widget; + ConversationNode convNode = convWidget.getAttachedNode(); + convWidget.getExpManager().setRootContext(convNode); + + ConversationNode[] nodes = new ConversationNode[1]; + nodes[0] = node; + try { + convWidget.getExpManager().setSelectedNodes(nodes); + } catch (PropertyVetoException ex) { + Exceptions.printStackTrace(ex); + } + } + }, true)); + + } + + public ConversationNode getAttachedNode() { + return attachedNode; + } + + public ExplorerManager getExpManager() { + return mgr; + } + + @Override + public void resultChanged(LookupEvent ev) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } +} diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.form b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.form new file mode 100644 index 0000000..605be9b --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.form @@ -0,0 +1,34 @@ + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.java new file mode 100644 index 0000000..3d09681 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponent.java @@ -0,0 +1,120 @@ +package com.projectswg.tools.csc.conversationeditor; + +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.NbBundle.Messages; +import org.openide.windows.TopComponent; + +/** + * Top component which displays something. + */ +@ConvertAsProperties( + dtd = "-//com.projectswg.tools.csc.conversationeditor//Editor//EN", + autostore = false +) +@TopComponent.Description( + preferredID = "EditorTopComponent", + //iconBase="SET/PATH/TO/ICON/HERE", + persistenceType = TopComponent.PERSISTENCE_ALWAYS +) +@TopComponent.Registration(mode = "editor", openAtStartup = true) +@ActionID(category = "Window", id = "com.projectswg.tools.csc.conversationeditor.EditorTopComponent") +@ActionReference(path = "Menu/Window" /*, position = 333 */) +@TopComponent.OpenActionRegistration( + displayName = "Conversastion Editor", + preferredID = "EditorTopComponent" +) +@Messages({ + "CTL_EditorAction=Conversation Editor", + "CTL_EditorTopComponent=Conversation Editor", + "HINT_EditorTopComponent=Conversation Editor window" +}) +public final class EditorTopComponent extends TopComponent implements ExplorerManager.Provider { + + private final ExplorerManager mgr = new ExplorerManager(); + private final SceneView scene; + + 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));*/ + + 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 + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + scrollPane = new javax.swing.JScrollPane(); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane scrollPane; + // End of variables declaration//GEN-END:variables + @Override + public void componentOpened() { + // TODO add custom code on component opening + } + + @Override + public void componentClosed() { + // TODO add custom code on component closing + } + + void writeProperties(java.util.Properties p) { + // better to version settings since initial version as advocated at + // http://wiki.apidesign.org/wiki/PropertyFiles + p.setProperty("version", "1.0"); + // TODO store your settings + } + + void readProperties(java.util.Properties p) { + String version = p.getProperty("version"); + // TODO read your settings according to their version + } + + @Override + public ExplorerManager getExplorerManager() { + return mgr; + } + + public SceneView getScene() { + return scene; + } +} diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponentWstcref.xml b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponentWstcref.xml new file mode 100644 index 0000000..b6a0cb2 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/EditorTopComponentWstcref.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneView.java b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneView.java new file mode 100644 index 0000000..b3a8b6d --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/SceneView.java @@ -0,0 +1,94 @@ +package com.projectswg.tools.csc.conversationeditor; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import javax.swing.JOptionPane; +import org.netbeans.api.visual.action.ActionFactory; +import org.netbeans.api.visual.graph.GraphScene; +import org.netbeans.api.visual.widget.LayerWidget; +import org.netbeans.api.visual.widget.Widget; +import org.openide.explorer.ExplorerManager; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; + +public class SceneView extends GraphScene{ + private final LayerWidget backgroundLayer; + private final LayerWidget mainLayer; + private final LayerWidget connectionLayer; + private final ExplorerManager mgr; + + public SceneView(ExplorerManager mgr) { + setLookFeel(new ConversationLookFeel()); + + backgroundLayer = new LayerWidget(this); + addChild(backgroundLayer); + + mainLayer = new LayerWidget(this); + addChild(mainLayer); + + getActions().addAction(ActionFactory.createZoomAction()); + getActions().addAction(ActionFactory.createWheelPanAction()); + connectionLayer = new LayerWidget(this); + addChild(connectionLayer); + + this.mgr = mgr; + + } + + @Override + protected Widget attachNodeWidget(ConversationNode n) { + final ConversationWidget widget = new ConversationWidget(this, mgr, n, n.isEndNode()); + widget.getActions().addAction(createObjectHoverAction()); + + n.addPropertyChangeListener(new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + TopComponent component = WindowManager.getDefault().findTopComponent("EditorTopComponent"); + if (component == null || !(component instanceof EditorTopComponent)) + return; + + EditorTopComponent editor = (EditorTopComponent) component; + SceneView scene = editor.getScene(); + + if (scene == null) + return; + + switch(evt.getPropertyName()) { + case "stf": + widget.getLabelWidget().setLabel((String) evt.getNewValue()); + widget.repaint(); + + scene.validate(); + break; + } + } + }); + mainLayer.addChild(widget); + return widget; + } + + @Override + protected Widget attachEdgeWidget(String e) { + JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), + "Edge widget attachments is not support yet.", "Conversation Script Editor", JOptionPane.WARNING_MESSAGE); + return null; + } + + @Override + protected void attachEdgeSourceAnchor(String e, ConversationNode n, ConversationNode n1) { + JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), + "Edge widget attachments is not support yet.", "Conversation Script Editor", JOptionPane.WARNING_MESSAGE); + } + + @Override + protected void attachEdgeTargetAnchor(String e, ConversationNode n, ConversationNode n1) { + JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), + "Edge widget attachments is not support yet.", "Conversation Script Editor", JOptionPane.WARNING_MESSAGE); + } + + public LayerWidget getConnectionLayer() { + return connectionLayer; + } + +} \ 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 new file mode 100644 index 0000000..0ca1c4f --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvEnd.java @@ -0,0 +1,53 @@ +/* + * 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.ConversationNode; +import com.projectswg.tools.csc.conversationeditor.EditorTopComponent; +import com.projectswg.tools.csc.conversationeditor.SceneView; +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; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; + +@ActionID( + category = "Edit", + id = "com.projectswg.tools.csc.conversationeditor.actions.NewConvEnd" +) +@ActionRegistration( + iconBase = "com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_end.png", + displayName = "#CTL_NewConvEnd" +) +@ActionReferences({ + @ActionReference(path = "Menu/Edit", position = 1362), + @ActionReference(path = "Toolbars/Edit", position = 450) +}) +@Messages("CTL_NewConvEnd=New End Conversation") +public final class NewConvEnd implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + TopComponent component = WindowManager.getDefault().findTopComponent("EditorTopComponent"); + if (component == null || !(component instanceof EditorTopComponent)) + return; + + EditorTopComponent editor = (EditorTopComponent) component; + SceneView scene = editor.getScene(); + + if (scene == null) + return; + + int id = scene.getNodes().size() + 1; + 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 new file mode 100644 index 0000000..763bf25 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvOption.java @@ -0,0 +1,48 @@ +package com.projectswg.tools.csc.conversationeditor.actions; + +import com.projectswg.tools.csc.conversationeditor.ConversationNode; +import com.projectswg.tools.csc.conversationeditor.EditorTopComponent; +import com.projectswg.tools.csc.conversationeditor.SceneView; +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; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; + +@ActionID( + category = "File", + id = "com.projectswg.tools.csc.conversationeditor.actions.NewConvOption" +) +@ActionRegistration( + iconBase = "com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_option.png", + displayName = "New Option" +) +@ActionReferences({ + @ActionReference(path = "Menu/Edit", position = 1250), + @ActionReference(path = "Toolbars/Edit", position = 250) +}) +@Messages("CTL_NewConvOption=New Option") +public final class NewConvOption implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + TopComponent component = WindowManager.getDefault().findTopComponent("EditorTopComponent"); + if (component == null || !(component instanceof EditorTopComponent)) + return; + + EditorTopComponent editor = (EditorTopComponent) component; + SceneView scene = editor.getScene(); + + if (scene == null) + return; + + int id = scene.getNodes().size() + 1; + 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 new file mode 100644 index 0000000..634a4ae --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/NewConvResponse.java @@ -0,0 +1,52 @@ +/* + * 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.ConversationNode; +import com.projectswg.tools.csc.conversationeditor.EditorTopComponent; +import com.projectswg.tools.csc.conversationeditor.SceneView; +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; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; + +@ActionID( + category = "File", + id = "com.projectswg.tools.csc.conversationeditor.actions.NewConvResponse" +) +@ActionRegistration( + iconBase = "com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_response.png", + displayName = "New Response" +) +@ActionReferences({ + @ActionReference(path = "Menu/Edit", position = 1350, separatorAfter = 1375), + @ActionReference(path = "Toolbars/Edit", position = 350) +}) +@Messages("CTL_NewConvResponse=New Response") +public final class NewConvResponse implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + TopComponent component = WindowManager.getDefault().findTopComponent("EditorTopComponent"); + if (component == null || !(component instanceof EditorTopComponent)) + return; + + EditorTopComponent editor = (EditorTopComponent) component; + SceneView scene = editor.getScene(); + + if (scene == null) + return; + + int id = scene.getNodes().size() + 1; + 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/conversation_tb_end.png b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_end.png new file mode 100644 index 0000000000000000000000000000000000000000..d804b079b3abc78b3ccd955a8e7af3ef28eb5faa GIT binary patch literal 21206 zcmeI44~!I78Ni29k)HHQ(;BOS-R>0?ac=(ZpBeTR?{4q70}jr+qa2i^eLM5!ZhE^r z+u6ChmUq5tsB?9SWS zxxF%QpsjtE?C!^V-}k-ue)HZpZ@#zeJ>9F9Ut9O7I*OvM?d(YPpwIdCYwjHMe)DVR z0s6Qm-?6?xQT4yGU$gF8QvYd+>OQLX^;`X2t7OHsK_idNt2%+J9UiqtfF?_AQx{?_BTLt&8MR$A zZCkLYPh)1+l+2ttRl3v()VHoKIb|rrHiXVpvNVxZL(x?k4^0-*63{e3qlG9)(;Npy zIxVp(t*J^xgn-jTjZH99oK@yjxuMQn!2&r2qK1%iqmCMh32^}9X+X1DT%-j-RB6C+ zDjfmQC}4#&4+QAC_Lxs`y~fnh5(XL1SOh+mVtKx`wYj-j;M#b$JrauxY^0TIZxIAO z>bk9AI>mj5Ua$;vlZPE5=q$`$cz1QFTanS71(pY90os$jDeTU6ydv>}vu&J3BLl@= zn#lqffog)ODywt~+m(&&X;l?iTHr*127)Hh@pz1t;(Ux1`Izh9V?KQw zqk}M)v||;`N;E6>al9R?xCoL_#ByCZTGKlz7@9Q-OxQetrdzTU9J}2G7HVyEf???M z>-3yzj20HVUaQTfcdrbB+yGRQjBDr?_)QXw9s4r+6}WPWksE=gbrDw&%@Ba@8_+By zHPgt3^eh;F%w2gn5VDLA$mcV<0_<7AjO5gE5XNiM9jV93e{rxXH1&&_sGeS8PN5Il zpl7@`fdnI^AP1!w9aTh)j;9rtRz;Q5)OeInR~8gmo0VW!TC@MlsG0^W8&Onr(IR{V z1ym8e#iAMwAP1vq2n8*IL*b=eIYDMQnT?XDT75sn(ZY>)<@=;R)>Uq#o>1cim@bIGSgfbNDdj*g~Am zEc#k=?KTwR?1MmbfQhh7DfXK< z(X6Rb1Q$jT zL?F0=P{KL{7e*08Ah?21!a4*OMiE3HxPnl^Is_L+5kw%kf>6Rb1Q$jTL?F0=P{KL{ z7e*08Ah?21!a4*OMiE3HxPnl^Is_L+5kw%kf>6Rb1Q$jTL?F0=P{KL{7e*08Ah?21 z!a4*OMiE3HxPnl^Is_L+5kw%kf>6Rb1Q$jTL?F0=P{KL{7e*08Ah?21!a4*OMiE3H zxPnl^Is_L+5kw%kf>6Rb1Q$jTL?F0=P{KL{7e*08cu!n)mES0YIrPJXqv#h1cYS>4 zPW0=AA*G|Ii=xIBQPkFL6m{-A`aDTd!z@Mp>rRT2ze`b{Furrg@7pPA*0#=6b6@dq z-`{m;!iy>idU;+J1~X!A$+)XVWFo>|oT z=Ua9?G9KPO@7(N-naAcX-1x0qZ+YnWliz;h_|p1!fAr|W+#i=tytwb{dtQ66;V(BY zd;8@B&vop4eBs(f6WepKUw(FPQ*6)KHwUd@ID2mc9cpOVcdPp7(Y4J9m9y-q8NtyI*g9Va@6TukJhb>f|fOo>`w= z`ooVMIkLeJKePFp$Bw;h`}Kl#b0c0RRYM@#a$!>9i=e|*Uj zaRXgHGJ5WbU(7yy$JR&8`&T?(_oW|ffZ5@*_y1#DyJ71+XYT&WgA@0jd-}I0&JI%t z?^|(TV)LA0Q*_SZGbc};UnoA%weiMTr=hZ~=drn4#~=Q~SYhauHQ`>+|JIf*@BIAf zr5&eE{r%y|o8Fpp)Ae7zzB$!%UDNC1-+17q;~IO)qQ;(|#SUh^cY5X8SIkM`NWJlToV109O5NhyVZp literal 0 HcmV?d00001 diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_end24.png b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_end24.png new file mode 100644 index 0000000000000000000000000000000000000000..59061ad47d2a69850b065ef40c4942b1927ef3f3 GIT binary patch literal 21224 zcmeI4dyo{x8NdfLqL)C)A5kiXa%+iE5@zSUyEEBa>)5^H4p?&Bop1+QFgw$8H?q64 z&d%NLT~f+{F(D6Q3{;e)67#T9@ei*w7*mx8=E38S2obAJB@Yy_Qbv$yf)yeu(=)r% zJ3F^00|$x3zN+2*=>ER1yMNvN&CJ)!ZtGsPY;Ma(S_p!e+tr!wfu9TP*Ogbm_ZQ2p z|AZe`6*~t?1TpWo_G{LTPtLoJAiAH{`}(c^%t}cy@)21zvLI5)7oj#mByO%0Wn~kv zLRm1V7h1z7f3`au($&`RS|LMciYYLpcaE8$cWhOkGPX$()$q;9mPAE@4)VZ~LzR54 zP?9RGVaKloWxJRPha44aQ){@*ZZOoJ=?Ik&)q)sVWD#GCW5@$|4z$$7nIm#vtgJ>)&HOeH-N= zP)ORbiljx7=KC1dj#Z2RWf-wsSB}>7PD+Mmm1PsO4Z`J?tOmz!cY}peDJK|)Zd$7s zRHIy4?0Ri9o8G-LBo_vOnxtGqx4>_bpzPR}(=WozDMn!gnASPW9$X!d%{)i0!;P~!xcv&2z5 z)K&v;u`uX1;_=~c=ptT0E?iK(bjCd6n5rsDOwPi4Qh|$SNuJ|lq{y)%8PjAss|WzF z9Pdsm-kI;Em@3ElC@XR@nbqLUC7b1Ccr}bMWHigg<8qW!XhodC%*E_GRhE`$e5dMr z#+Z3bMFI1DccTg~67Tsj&p4*i3>#ND2JT0Oi^A>6tE3p^MN(E`@wmunw5YLoXI_M7 z$QjR^2Iop;R_QM6>X)+s&X2~p@75JzqDu8EZJaaGsU}pmG(?3jhx_O(K$J9&b zo(`ZgN#a@D(?|FfN0eb#DBw7SXLsfk%Psa;J? zb=Vm-J8=M?<<63ag-@LD@IdlVcPA}qIQ5w~Oj^x5Os%`QcH6rOQ{X`_v$l7Sc{A_E z`DDSX!){_)Z^5OVu0!=)_7bWhX@;4Xtt7f5Oi=Ygj~|q`lu|~{Ff)b@?c}BTXC+b_j6z-lHQZ}wT5)McmJ*XpV@l#Gc&g7OzO z)n5q;gV2Bz;2}!gpjPU)SgKp4ZeaGx`C<+`SM0H}k7=cL z__hXyIQt+F9$-Q&Q;Pj2PBiU>-(~>Gs334~89OGPV!wrhuRpEBgI}j17N*A>8-GPp z!-44xJry;>>N4|u@4(ps)l&Ga2Ka>v3VoxZadT9I>4kr0n$4MGyhw3PK6#U|a}A5CP)~LJ8?$TnI%F0pkin3F%;52t^P9;|f9v>0n$4MGyhw z3PK6#U|a}A5CP)~LJ8?$TnI%F0pkin3F%;52t^P9;|f9v>0n$4MGyhw3PK6#U|a}A z5CP)~LJ8?$TnI%F0pkin3F%;52t^P9;|f9v>0n$4MGyhw3PK6#U|a}A5CP)~LJ8?$ zTnI%F0pkin3F%;52t^P9;|f9v>0n$4MGyhw3PK6#U|a}A5CP)~LJ8?$TnI%F;azdH z)PJK86yOgNmfG6>#H0-zWuQkv*iVQ@7nXq3omVZ>FT?W9-6$mV_tjaxlmhi>)e6y zRNq^3;*)Dqpf(pw1@T)W1NVLFz|J?` z4FBQy$ckCo_s5S}lm9xcoFZ`b! znS-aK!zWJsa6;Mg^0U2XzPM$>>is*G6H6}N`n#2@X4A*aCr+K*^YY3M%>HQkvR%Eu z?B00eHE&OrhD*Qs)id+Qw_SD5pI$#Q>p<_~k9CEw`O3)Wh|Blx`_yHVi{`@?4{i9x zx>x>o?CyuVul&xwXXpR^%$wK$yY0sZB9Z;qwk&z%_GM4~@px{<{TsgeY9Vp&!PoNZ z*RQ$dCzF$%gY1zThYG8$;SXGBL6H%leUBkE}Vh{NX2$ zk8OVE=Z{`DG4c57iS>6rrZ4!=7rwV-f1!MOq5936)_su9T(R)p!~2L6Pd~7H?`z}# Ruz!oP3;zGIN0)Bg@*gb8dl3Kt literal 0 HcmV?d00001 diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_option.png b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_option.png new file mode 100644 index 0000000000000000000000000000000000000000..072e17ca9401da9c9ee622cf3e436afcbdfaecfe GIT binary patch literal 18975 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 literal 0 HcmV?d00001 diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_option24.png b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_option24.png new file mode 100644 index 0000000000000000000000000000000000000000..385d64241eb790750608bc84a9054dd3fbccac55 GIT binary patch literal 19037 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 Qmo;^^Eld7z(W?9Z4J`-l(f|Me literal 0 HcmV?d00001 diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_response24.png b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/actions/conversation_tb_response24.png new file mode 100644 index 0000000000000000000000000000000000000000..fd02fdc2518e9a9a2922709f529f3dddd61ebb52 GIT binary patch literal 19100 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 a`B>@Z568%-28XowM^%;A_&1b3x#-_h=tdv_ literal 0 HcmV?d00001 diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/conversation_begin.png b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/conversation_begin.png new file mode 100644 index 0000000000000000000000000000000000000000..4825acf7f9bdab02c9ea89cc083ffaef4b041839 GIT binary patch literal 20592 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 literal 0 HcmV?d00001 diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/conversation_option.png b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/conversation_option.png new file mode 100644 index 0000000000000000000000000000000000000000..15b95eda70d9f7de7074282f78c2e8fc03d070e1 GIT binary patch literal 18147 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 GU-$wsa)`hH literal 0 HcmV?d00001 diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/csc_logo.png b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/csc_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc71c82d518caf2a46297baca4e9958d3108498 GIT binary patch literal 22083 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 J3yeG>{|lNk=W74} 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 new file mode 100644 index 0000000..47258db --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/layer.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/propertiesWsmode.xml b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/propertiesWsmode.xml new file mode 100644 index 0000000..fdbed37 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/propertiesWsmode.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/propertiesWstcref.xml b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/propertiesWstcref.xml new file mode 100644 index 0000000..a706bb6 --- /dev/null +++ b/ConversationEditor/src/com/projectswg/tools/csc/conversationeditor/propertiesWstcref.xml @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..9a75610 --- /dev/null +++ b/build.xml @@ -0,0 +1,8 @@ + + + + + + Builds the module suite ConversationScriptCreator. + + diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml new file mode 100644 index 0000000..0c8e1b3 --- /dev/null +++ b/nbproject/build-impl.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 0000000..ba706a6 --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,11 @@ +build.xml.data.CRC32=351e2a03 +build.xml.script.CRC32=bfbbd184 +build.xml.stylesheet.CRC32=eaf9f76a@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=351e2a03 +nbproject/build-impl.xml.script.CRC32=e2a68411 +nbproject/build-impl.xml.stylesheet.CRC32=0f381476@2.66.1 +nbproject/platform.xml.data.CRC32=351e2a03 +nbproject/platform.xml.script.CRC32=6dcbd131 +nbproject/platform.xml.stylesheet.CRC32=4e1f53d4@2.66.1 diff --git a/nbproject/platform.properties b/nbproject/platform.properties new file mode 100644 index 0000000..89fdfd8 --- /dev/null +++ b/nbproject/platform.properties @@ -0,0 +1,18 @@ +branding.token=conversationscriptcreator +cluster.path=\ + ${nbplatform.active.dir}/platform +disabled.modules=\ + org.jdesktop.layout,\ + org.netbeans.core.execution,\ + org.netbeans.libs.jsr223,\ + org.netbeans.modules.autoupdate.cli,\ + org.netbeans.modules.autoupdate.services,\ + org.netbeans.modules.autoupdate.ui,\ + org.netbeans.modules.core.kit,\ + org.netbeans.modules.favorites,\ + org.netbeans.modules.templates,\ + org.openide.compat,\ + org.openide.execution,\ + org.openide.options,\ + org.openide.util.enumerations +nbplatform.active=default diff --git a/nbproject/platform.xml b/nbproject/platform.xml new file mode 100644 index 0000000..020ab53 --- /dev/null +++ b/nbproject/platform.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/private/platform-private.properties b/nbproject/private/platform-private.properties new file mode 100644 index 0000000..b0eb319 --- /dev/null +++ b/nbproject/private/platform-private.properties @@ -0,0 +1 @@ +user.properties.file=C:\\Users\\Wave\\AppData\\Roaming\\NetBeans\\8.0\\build.properties diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 0000000..6807a2b --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..1d0b7a5 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,15 @@ +app.icon=branding/core/core.jar/org/netbeans/core/startup/frame48.gif +app.name=${branding.token} +app.title=Conversation Script Creator +auxiliary.org-netbeans-modules-apisupport-installer.license-type=no +auxiliary.org-netbeans-modules-apisupport-installer.os-linux=false +auxiliary.org-netbeans-modules-apisupport-installer.os-macosx=false +auxiliary.org-netbeans-modules-apisupport-installer.os-solaris=false +auxiliary.org-netbeans-modules-apisupport-installer.os-windows=true +auxiliary.org-netbeans-modules-apisupport-installer.pack200-enabled=false +auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml +modules=\ + ${project.com.projectswg.tools.csc.conversationeditor}:\ + ${project.com.projectswg.tools.csc.compiler} +project.com.projectswg.tools.csc.compiler=ConversationCompiler +project.com.projectswg.tools.csc.conversationeditor=ConversationEditor diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..6bee55b --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,9 @@ + + + org.netbeans.modules.apisupport.project.suite + + + ConversationScriptCreator + + +