diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewGeometryAction.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewGeometryAction.java new file mode 100644 index 000000000..2ceffc9a7 --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewGeometryAction.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.core.sceneexplorer.nodes.actions; + +import com.jme3.gde.core.sceneexplorer.nodes.JmeNode; +import javax.swing.Action; +import org.openide.loaders.DataObject; + +/** + * + * @author david.bernard.31 + */ +public interface NewGeometryAction { + public Action getAction(JmeNode rootNode, DataObject dataObject); +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewSpatialPopup.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewSpatialPopup.java index 1dcb8bf3a..a531e51ce 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewSpatialPopup.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewSpatialPopup.java @@ -79,8 +79,15 @@ public class NewSpatialPopup extends AbstractAction implements Presenter.Popup { result.add(new JMenuItem(new AddEmitterAction())); result.add(new JMenuItem(new AddAudioNodeAction())); for (NewSpatialAction di : Lookup.getDefault().lookupAll(NewSpatialAction.class)) { - result.add(new JMenuItem(di.getAction(jmeNode, dataObject))); + if (!(di instanceof NewGeometryAction)) { + result.add(new JMenuItem(di.getAction(jmeNode, dataObject))); + } + } + JMenu geometries = new JMenu("Primitives"); + for (NewGeometryAction di : Lookup.getDefault().lookupAll(NewGeometryAction.class)) { + geometries.add(new JMenuItem(di.getAction(jmeNode, dataObject))); } + result.add(geometries); return result; } diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/Bundle.properties b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/Bundle.properties index e62d0cd7a..20b2fc0e9 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/Bundle.properties +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/Bundle.properties @@ -38,3 +38,23 @@ GenerateLODVisualPanel1.estLabel9.text= GenerateLODVisualPanel1.estLabel10.text= GenerateLODVisualPanel1.estLabel5.text= GenerateLODVisualPanel1.estLabel3.text= +NewGeometrySettingsTopComponent.boxXLabel.text=x +NewGeometrySettingsTopComponent.boxYLabel.text=y +NewGeometrySettingsTopComponent.boxZLabel.text=z +NewGeometrySettingsTopComponent.sphereRadialSamplesLabel.text=radialSamples +NewGeometrySettingsTopComponent.sphereUseEvenSlicesLabel.text=useEvenSlices +NewGeometrySettingsTopComponent.sphereUseEvenSlicesCheckBox.text= +NewGeometrySettingsTopComponent.sphereZSamplesLabel.text=zSamples +NewGeometrySettingsTopComponent.sphereInteriorLabel.text=interior +NewGeometrySettingsTopComponent.sphereRadiusLabel.text=radius +NewGeometrySettingsTopComponent.sphereInteriorCheckBox.text= +NewGeometrySettingsTopComponent.boxPanel.TabConstraints.tabTitle=Box +NewGeometrySettingsTopComponent.spherePanel.TabConstraints.tabTitle=Sphere +NewGeometrySettingsTopComponent.quadPanel.TabConstraints.tabTitle=Quad +NewGeometrySettingsTopComponent.quadWidthLabel.text=width +NewGeometrySettingsTopComponent.quadHeightLabel.text=height +NewGeometrySettingsTopComponent.quadFlipCoordLabel.text=flip Coords +NewGeometrySettingsTopComponent.quadFlipCoordCheckBox.text= +NewGeometrySettingsTopComponent.linePanel.TabConstraints.tabTitle=Line +NewGeometrySettingsTopComponent.lineStartLabel.text=start +NewGeometrySettingsTopComponent.lineEndLabel.text=end diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/ConverterVector3f_String.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/ConverterVector3f_String.java new file mode 100644 index 000000000..0e50afa04 --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/ConverterVector3f_String.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.core.sceneexplorer.nodes.actions.impl; + +import com.jme3.math.Vector3f; +import org.jdesktop.beansbinding.Converter; + +/** + * + * @author david.bernard.31 + */ + +public class ConverterVector3f_String extends Converter { + + public static void parseInto(String text, Vector3f res) throws IllegalArgumentException { + text = text.replace('[', ' '); + text = text.replace(']', ' ').trim(); + String[] a = text.split("\\s*(,|\\s)\\s*"); + + if (a.length == 1) { + if(text.trim().toLowerCase().equals("nan")) { + res.set(Vector3f.NAN); + return; + } + float f = Float.parseFloat(text); + res.set(f, f, f); + return; + } + + if (a.length == 3) { + res.set(Float.parseFloat(a[0]), Float.parseFloat(a[1]), Float.parseFloat(a[2])); + return; + } + throw new IllegalArgumentException("String not correct"); + } + + @Override + public String convertForward(Vector3f vector) { + return "[" + vector.x + ", " + vector.y + ", " + vector.z + "]"; + } + + @Override + public Vector3f convertReverse(String text) { + Vector3f vector = new Vector3f(); + parseInto(text, vector); + return vector; + } +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometry.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometry.java new file mode 100644 index 000000000..1160cda82 --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometry.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.core.sceneexplorer.nodes.actions.impl; + +import com.jme3.asset.AssetManager; +import com.jme3.material.Material; +import com.jme3.math.ColorRGBA; +import com.jme3.math.Quaternion; +import com.jme3.scene.Geometry; +import com.jme3.scene.shape.Box; +import com.jme3.scene.shape.Line; +import com.jme3.scene.shape.Quad; +import com.jme3.scene.shape.Sphere; + +/** + * + * @author david.bernard.31 + */ +public class NewGeometry { + + public static Material material(AssetManager assetManaget, NewGeometrySettings cfg) { + Material mat = new Material(assetManaget, "Common/MatDefs/Misc/Unshaded.j3md"); + ColorRGBA c = cfg.getMatRandom() ?ColorRGBA.randomColor() : cfg.getMatColor(); + mat.setColor("Color", c); + return mat; + } + + public static Geometry box(AssetManager assetManager) { + NewGeometrySettings cfg = new NewGeometrySettings(); + Box b = new Box(cfg.getBoxX(), cfg.getBoxY(), cfg.getBoxZ()); + b.setMode(cfg.getBoxMode()); + Geometry geom = new Geometry(cfg.getBoxName(), b); + geom.setMaterial(material(assetManager, cfg)); + return geom; + } + + public static Geometry sphere(AssetManager assetManager) { + NewGeometrySettings cfg = new NewGeometrySettings(); + Sphere b = new Sphere( + cfg.getSphereZSamples() + , cfg.getSpherRadialSamples() + , cfg.getSphereRadius() + , cfg.getSphereUseEvenSlices() + , cfg.getSphereInterior() + ); + b.setMode(cfg.getSphereMode()); + Geometry geom = new Geometry(cfg.getSphereName(), b); + geom.setMaterial(material(assetManager, cfg)); + return geom; + } + + public static Geometry line(AssetManager assetManager) { + NewGeometrySettings cfg = new NewGeometrySettings(); + Line b = new Line(cfg.getLineStart(), cfg.getLineEnd()); + b.setMode(cfg.getLineMode()); + Geometry geom = new Geometry(cfg.getLineName(), b); + geom.setMaterial(material(assetManager, cfg)); + return geom; + } + + public static Geometry quad(AssetManager assetManager) { + NewGeometrySettings cfg = new NewGeometrySettings(); + Quad b = new Quad(cfg.getQuadWidth(), cfg.getQuadHeight(), cfg.getQuadFlipCoords()); + b.setMode(cfg.getQuadMode()); + Geometry geom = new Geometry(cfg.getQuadName(), b); + switch(cfg.getQuadPlan()) { + case XZ: { + Quaternion q = new Quaternion(); + q.fromAngles((float)Math.PI/-2f, 0.0f, 0.0f); + geom.setLocalRotation(q); + break; + } + case YZ: { + Quaternion q = new Quaternion(); + q.fromAngles(0.0f, (float)Math.PI/-2f, 0.0f); + geom.setLocalRotation(q); + break; + } + } + geom.setMaterial(material(assetManager, cfg)); + return geom; + } +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometryBoxAction.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometryBoxAction.java new file mode 100644 index 000000000..680e0ca35 --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometryBoxAction.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.core.sceneexplorer.nodes.actions.impl; + +import com.jme3.gde.core.sceneexplorer.nodes.actions.AbstractNewSpatialAction; +import com.jme3.gde.core.sceneexplorer.nodes.actions.NewGeometryAction; +import com.jme3.scene.Geometry; +import com.jme3.scene.Node; +import com.jme3.scene.Spatial; + +/** + * + * @author david.bernard.31 + */ +@org.openide.util.lookup.ServiceProvider(service = NewGeometryAction.class) +public class NewGeometryBoxAction extends AbstractNewSpatialAction implements NewGeometryAction { + + public NewGeometryBoxAction() { + name = "Box"; + } + + @Override + protected Spatial doCreateSpatial(Node parent) { + Geometry geom = NewGeometry.box(pm); + parent.attachChild(geom); + return geom; + } +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometryLineAction.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometryLineAction.java new file mode 100644 index 000000000..5da424f86 --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometryLineAction.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.core.sceneexplorer.nodes.actions.impl; + +import com.jme3.gde.core.sceneexplorer.nodes.actions.AbstractNewSpatialAction; +import com.jme3.gde.core.sceneexplorer.nodes.actions.NewGeometryAction; +import com.jme3.scene.Geometry; +import com.jme3.scene.Node; +import com.jme3.scene.Spatial; + +/** + * + * @author david.bernard.31 + */ +@org.openide.util.lookup.ServiceProvider(service = NewGeometryAction.class) +public class NewGeometryLineAction extends AbstractNewSpatialAction implements NewGeometryAction { + + public NewGeometryLineAction() { + name = "Line"; + } + + @Override + protected Spatial doCreateSpatial(Node parent) { + Geometry geom = NewGeometry.line(pm); + parent.attachChild(geom); + return geom; + } +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometryQuadAction.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometryQuadAction.java new file mode 100644 index 000000000..581ea5a43 --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometryQuadAction.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.core.sceneexplorer.nodes.actions.impl; + +import com.jme3.gde.core.sceneexplorer.nodes.actions.AbstractNewSpatialAction; +import com.jme3.gde.core.sceneexplorer.nodes.actions.NewGeometryAction; +import com.jme3.scene.Geometry; +import com.jme3.scene.Node; +import com.jme3.scene.Spatial; + +/** + * + * @author david.bernard.31 + */ +@org.openide.util.lookup.ServiceProvider(service = NewGeometryAction.class) +public class NewGeometryQuadAction extends AbstractNewSpatialAction implements NewGeometryAction { + + public NewGeometryQuadAction() { + name = "Quad"; + } + + @Override + protected Spatial doCreateSpatial(Node parent) { + Geometry geom = NewGeometry.quad(pm); + parent.attachChild(geom); + return geom; + } +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySettings.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySettings.java new file mode 100644 index 000000000..e4220512d --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySettings.java @@ -0,0 +1,373 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.core.sceneexplorer.nodes.actions.impl; + +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector3f; +import com.jme3.scene.Mesh.Mode; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.io.Serializable; +import java.util.Arrays; +import java.util.List; +import java.util.prefs.PreferenceChangeEvent; +import java.util.prefs.PreferenceChangeListener; +import java.util.prefs.Preferences; +import org.openide.util.NbPreferences; + +/** + * + * @author david.bernard.31 + */ + + +public class NewGeometrySettings implements Serializable, PreferenceChangeListener { + public static enum Plan { + XY, XZ, YZ + } + + private transient final PropertyChangeSupport propertySupport; + private transient final Preferences pref; + + public NewGeometrySettings() { + propertySupport = new PropertyChangeSupport(this); + pref = NbPreferences.forModule(NewGeometrySettings.class); + } + + // -- Listeners management + + public void open() { + pref.addPreferenceChangeListener(this); + } + + public void close() { + pref.removePreferenceChangeListener(this); + } + + public void preferenceChange(PreferenceChangeEvent evt) { + propertySupport.firePropertyChange(evt.getKey(), null, evt.getNewValue()); + } + + public void addPropertyChangeListener(final PropertyChangeListener listener) { + propertySupport.addPropertyChangeListener(listener); + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + propertySupport.removePropertyChangeListener(listener); + } + + //-- Material info + + public static final String PROP_MatRandom = "MatRandom"; + + public boolean getMatRandom() { + return pref.getBoolean(PROP_MatRandom, true); + } + + public void setMatRandom(boolean value) { + pref.putBoolean(PROP_MatRandom, value); + } + + public static final String PROP_MatColor = "MatColor"; + + public ColorRGBA getMatColor() { + ColorRGBA b = new ColorRGBA(); + b.fromIntRGBA(pref.getInt(PROP_MatColor, ColorRGBA.Orange.asIntRGBA())); + return b; + } + + public void setMatColor(ColorRGBA value) { + pref.putInt(PROP_MatColor, value.asIntRGBA()); + } + + + + //-- Box + + public static final String PROP_BoxName = "BoxName"; + + public String getBoxName() { + return pref.get(PROP_BoxName, "Box"); + } + + public void setBoxName(String value) { + pref.put(PROP_BoxName, value); + } + + public static final String PROP_BoxMode = "BoxMode"; + + public Mode getBoxMode() { + return getMode(PROP_BoxMode); + } + + public void setBoxMode(Mode value) { + putMode(PROP_BoxMode, value); + } + + public static final String PROP_BoxX = "BoxX"; + + public float getBoxX() { + return pref.getFloat(PROP_BoxX, 1.0f); + } + + public void setBoxX(float value) { + pref.putFloat(PROP_BoxX, value); + } + + public static final String PROP_BoxY = "BoxY"; + + public float getBoxY() { + return pref.getFloat(PROP_BoxY, 1.0f); + } + + public void setBoxY(float value) { + pref.putFloat(PROP_BoxY, value); + } + + public static final String PROP_BoxZ = "BoxZ"; + + public float getBoxZ() { + return pref.getFloat(PROP_BoxZ, 1.0f); + } + + public void setBoxZ(float value) { + pref.putFloat(PROP_BoxZ, value); + } + + //-- Sphere + + public static final String PROP_SphereName = "SphereName"; + + public String getSphereName() { + return pref.get(PROP_SphereName, "Sphere"); + } + + public void setSphereName(String value) { + pref.put(PROP_SphereName, value); + } + + public static final String PROP_SphereMode = "SphereMode"; + + public Mode getSphereMode() { + return getMode(PROP_SphereMode); + } + + public void setSphereMode(Mode value) { + putMode(PROP_SphereMode, value); + } + + public static final String PROP_SphereZSamples = "SphereZSamples"; + + public int getSphereZSamples() { + return pref.getInt(PROP_SphereZSamples, 10); + } + + public void setSphereZSamples(int value) { + pref.putInt(PROP_SphereZSamples, value); + } + + public static final String PROP_SpherRadialSamples = "SpherRadialSamples"; + + public int getSpherRadialSamples() { + return pref.getInt(PROP_SpherRadialSamples, 10); + } + + public void setSpherRadialSamples(int value) { + pref.putInt(PROP_SpherRadialSamples, value); + } + + public static final String PROP_SphereRadius = "SphereRadius"; + + public float getSphereRadius() { + return pref.getFloat(PROP_SphereRadius, 1.0f); + } + + public void setSphereRadius(float value) { + pref.putFloat(PROP_SphereRadius, value); + } + + public static final String PROP_SphereUseEvenSlices = "SphereUseEvenSlices"; + + public boolean getSphereUseEvenSlices() { + return pref.getBoolean(PROP_SphereUseEvenSlices, false); + } + + public void setSphereUseEvenSlices(boolean value) { + pref.putBoolean(PROP_SphereUseEvenSlices, value); + } + + public static final String PROP_SphereInterior = "SphereInterior"; + + public boolean getSphereInterior() { + return pref.getBoolean(PROP_SphereInterior, false); + } + + public void setSphereInterior(boolean value) { + pref.putBoolean(PROP_SphereInterior, value); + } + + //-- Line + public static final String PROP_LineName = "LineName"; + + public String getLineName() { + return pref.get(PROP_LineName, "Line"); + } + + public void setLineName(String value) { + pref.put(PROP_LineName, value); + } + + public static final String PROP_LineMode = "LineMode"; + + public Mode getLineMode() { + return getMode(PROP_LineMode); + } + + public void setLineMode(Mode value) { + putMode(PROP_LineMode, value); + } + + public static final String PROP_LineStart = "LineStart"; + + public Vector3f getLineStart() { + return getVector3f(PROP_LineStart, new Vector3f(0,0,0)); + } + + public void setLineStart(Vector3f value) { + putVector3f(PROP_LineStart, value); + } + + public static final String PROP_LineEnd = "LineEnd"; + + public Vector3f getLineEnd() { + return getVector3f(PROP_LineEnd, new Vector3f(2f,0,2f)); + } + + public void setLineEnd(Vector3f value) { + putVector3f(PROP_LineEnd, value); + } + + //-- Quad + public static final String PROP_QuadName = "QuadName"; + + public String getQuadName() { + return pref.get(PROP_QuadName, "Quad"); + } + + public void setQuadName(String value) { + pref.put(PROP_QuadName, value); + } + + public static final String PROP_QuadMode = "QuadMode"; + + public Mode getQuadMode() { + return getMode(PROP_QuadMode); + } + + public void setQuadMode(Mode value) { + putMode(PROP_QuadMode, value); + } + + public static final String PROP_QuadWidth = "QuadWidth"; + + public float getQuadWidth() { + return pref.getFloat(PROP_QuadWidth, 1.0f); + } + + public void setQuadWidth(float value) { + pref.putFloat(PROP_QuadWidth, value); + } + + public static final String PROP_QuadHeight = "QuadHeight"; + + public float getQuadHeight() { + return pref.getFloat(PROP_QuadHeight, 1.0f); + } + + public void setQuadHeight(float value) { + pref.putFloat(PROP_QuadHeight, value); + } + + public static final String PROP_QuadFlipCoords = "QuadFlipCoords"; + + public boolean getQuadFlipCoords() { + return pref.getBoolean(PROP_QuadFlipCoords, false); + } + + public void setQuadFlipCoords(boolean value) { + pref.putBoolean(PROP_QuadFlipCoords, value); + } + + public static final String PROP_QuadPlan = "QuadPlan"; + + public Plan getQuadPlan() { + return Plan.values()[pref.getInt(PROP_QuadPlan, Plan.XZ.ordinal())]; + } + + public void setQuadPlan(Plan value) { + pref.putInt(PROP_QuadPlan, value.ordinal()); + } + + //-- Tools + + protected Vector3f getVector3f(String baseName, Vector3f def) { + return new Vector3f( + pref.getFloat(baseName + "X", def.x) + ,pref.getFloat(baseName + "Y", def.y) + ,pref.getFloat(baseName + "Z", def.z) + ); + + } + + protected void putVector3f(String baseName, Vector3f value) { + pref.putFloat(baseName + "X", value.x); + pref.putFloat(baseName + "Y", value.y); + pref.putFloat(baseName + "Z", value.z); + } + + protected Mode getMode(String baseName) { + return Mode.values()[pref.getInt(baseName, Mode.Lines.ordinal())]; + } + + public void putMode(String baseName, Mode value) { + pref.putInt(baseName, value.ordinal()); + } + + public List getModes() { + return Arrays.asList(Mode.values()); + } + + public List getPlans() { + return Arrays.asList(Plan.values()); + } + +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySettingsTopComponent.form b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySettingsTopComponent.form new file mode 100644 index 000000000..5f14c1f25 --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySettingsTopComponent.form @@ -0,0 +1,626 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySettingsTopComponent.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySettingsTopComponent.java new file mode 100644 index 000000000..ab35e434c --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySettingsTopComponent.java @@ -0,0 +1,565 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.core.sceneexplorer.nodes.actions.impl; + +import org.netbeans.api.settings.ConvertAsProperties; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.util.NbBundle.Messages; +import org.openide.windows.TopComponent; + +/** + * Top component which displays NewGeometryAction' Settings. + * + * @author david.bernard.31 + */ + + +@ConvertAsProperties( + dtd = "-//com.jme3.gde.core.sceneexplorer.nodes.actions.impl//NewGeometrySettings//EN", + autostore = true +) +@TopComponent.Description( + preferredID = "NewGeometrySettingsTopComponent", + //iconBase="SET/PATH/TO/ICON/HERE", + persistenceType = TopComponent.PERSISTENCE_ALWAYS +) +@TopComponent.Registration(mode = "output", openAtStartup = false) +@ActionID(category = "Window", id = "com.jme3.gde.core.sceneexplorer.nodes.actions.impl.NewGeometrySettingsTopComponent") +@ActionReference(path = "Menu/Window" /*, position = 333 */) +@TopComponent.OpenActionRegistration( + displayName = "#CTL_NewGeometrySettingsAction", + preferredID = "NewGeometrySettingsTopComponent" +) +@Messages({ + "CTL_NewGeometrySettingsAction=NewGeometrySettings", + "CTL_NewGeometrySettingsTopComponent=NewGeometrySettings Window", + "HINT_NewGeometrySettingsTopComponent=This is a NewGeometrySettings window" +}) +public final class NewGeometrySettingsTopComponent extends TopComponent { + + public NewGeometrySettingsTopComponent() { + initComponents(); + setName(Bundle.CTL_NewGeometrySettingsTopComponent()); + setToolTipText(Bundle.HINT_NewGeometrySettingsTopComponent()); + + } + + /** + * 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() { + bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); + + newGeometrySettings = new com.jme3.gde.core.sceneexplorer.nodes.actions.impl.NewGeometrySettings(); + converterVector3f_String = new com.jme3.gde.core.sceneexplorer.nodes.actions.impl.ConverterVector3f_String(); + jTabbedPane1 = new javax.swing.JTabbedPane(); + boxPanel = new javax.swing.JPanel(); + boxNameTextField = new javax.swing.JTextField(); + boxXLabel = new javax.swing.JLabel(); + boxXSpinner = new javax.swing.JSpinner(); + boxYLabel = new javax.swing.JLabel(); + boxYSpinner = new javax.swing.JSpinner(); + boxZLabel = new javax.swing.JLabel(); + boxZSpinner = new javax.swing.JSpinner(); + boxModeComboBox = new javax.swing.JComboBox(); + spherePanel = new javax.swing.JPanel(); + sphereZSamplesLabel = new javax.swing.JLabel(); + sphereZSamplesSpinner = new javax.swing.JSpinner(); + sphereRadialSamplesLabel = new javax.swing.JLabel(); + sphereRadialSamplesSpinner = new javax.swing.JSpinner(); + sphereUseEvenSlicesLabel = new javax.swing.JLabel(); + sphereUseEvenSlicesCheckBox = new javax.swing.JCheckBox(); + sphereInteriorCheckBox = new javax.swing.JCheckBox(); + sphereInteriorLabel = new javax.swing.JLabel(); + sphereRadiusSpinner = new javax.swing.JSpinner(); + sphereRadiusLabel = new javax.swing.JLabel(); + sphereNameTextField = new javax.swing.JTextField(); + sphereModeComboBox = new javax.swing.JComboBox(); + quadPanel = new javax.swing.JPanel(); + quadNameTextField = new javax.swing.JTextField(); + quadWidthLabel = new javax.swing.JLabel(); + quadHeightLabel = new javax.swing.JLabel(); + quadWidthSpinner = new javax.swing.JSpinner(); + quadHeightSpinner = new javax.swing.JSpinner(); + quadFlipCoordLabel = new javax.swing.JLabel(); + quadFlipCoordCheckBox = new javax.swing.JCheckBox(); + quadModeComboBox = new javax.swing.JComboBox(); + jComboBox2 = new javax.swing.JComboBox(); + linePanel = new javax.swing.JPanel(); + lineNameTextField = new javax.swing.JTextField(); + lineStartLabel = new javax.swing.JLabel(); + lineStartTextField = new javax.swing.JTextField(); + lineEndLabel = new javax.swing.JLabel(); + lineEndTextField = new javax.swing.JTextField(); + jComboBox1 = new javax.swing.JComboBox(); + + org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${boxName}"), boxNameTextField, org.jdesktop.beansbinding.BeanProperty.create("text")); + bindingGroup.addBinding(binding); + + boxNameTextField.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + boxNameTextFieldActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(boxXLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.boxXLabel.text")); // NOI18N + + boxXSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), null, null, Float.valueOf(0.5f))); + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${boxX}"), boxXSpinner, org.jdesktop.beansbinding.BeanProperty.create("value")); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(boxYLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.boxYLabel.text")); // NOI18N + + boxYSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.0f), null, Float.valueOf(0.5f))); + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${boxY}"), boxYSpinner, org.jdesktop.beansbinding.BeanProperty.create("value")); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(boxZLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.boxZLabel.text")); // NOI18N + + boxZSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.0f), null, Float.valueOf(0.5f))); + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${boxZ}"), boxZSpinner, org.jdesktop.beansbinding.BeanProperty.create("value")); + bindingGroup.addBinding(binding); + + org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${modes}"); + org.jdesktop.swingbinding.JComboBoxBinding jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, eLProperty, boxModeComboBox); + bindingGroup.addBinding(jComboBoxBinding); + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${boxMode}"), boxModeComboBox, org.jdesktop.beansbinding.BeanProperty.create("selectedItem")); + bindingGroup.addBinding(binding); + + boxModeComboBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + boxModeComboBoxActionPerformed(evt); + } + }); + + javax.swing.GroupLayout boxPanelLayout = new javax.swing.GroupLayout(boxPanel); + boxPanel.setLayout(boxPanelLayout); + boxPanelLayout.setHorizontalGroup( + boxPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(boxPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(boxPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(boxPanelLayout.createSequentialGroup() + .addComponent(boxXLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(boxXSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(26, 26, 26) + .addComponent(boxYLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(boxYSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(28, 28, 28) + .addComponent(boxZLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(boxZSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(boxPanelLayout.createSequentialGroup() + .addComponent(boxNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 426, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(boxModeComboBox, 0, 133, Short.MAX_VALUE))) + .addContainerGap()) + ); + boxPanelLayout.setVerticalGroup( + boxPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, boxPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(boxPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(boxNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(boxModeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(boxPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(boxXSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(boxXLabel) + .addComponent(boxYLabel) + .addComponent(boxYSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(boxZSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(boxZLabel)) + .addContainerGap(197, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab(org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.boxPanel.TabConstraints.tabTitle"), boxPanel); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(sphereZSamplesLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.sphereZSamplesLabel.text")); // NOI18N + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${spherRadialSamples}"), sphereZSamplesSpinner, org.jdesktop.beansbinding.BeanProperty.create("value")); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(sphereRadialSamplesLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.sphereRadialSamplesLabel.text")); // NOI18N + + sphereRadialSamplesSpinner.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(10), Integer.valueOf(1), null, Integer.valueOf(1))); + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${sphereZSamples}"), sphereRadialSamplesSpinner, org.jdesktop.beansbinding.BeanProperty.create("value")); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(sphereUseEvenSlicesLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.sphereUseEvenSlicesLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(sphereUseEvenSlicesCheckBox, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.sphereUseEvenSlicesCheckBox.text")); // NOI18N + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${sphereUseEvenSlices}"), sphereUseEvenSlicesCheckBox, org.jdesktop.beansbinding.BeanProperty.create("selected")); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(sphereInteriorCheckBox, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.sphereInteriorCheckBox.text")); // NOI18N + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${sphereInterior}"), sphereInteriorCheckBox, org.jdesktop.beansbinding.BeanProperty.create("selected")); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(sphereInteriorLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.sphereInteriorLabel.text")); // NOI18N + + sphereRadiusSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.0f), null, Float.valueOf(0.1f))); + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${sphereRadius}"), sphereRadiusSpinner, org.jdesktop.beansbinding.BeanProperty.create("value")); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(sphereRadiusLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.sphereRadiusLabel.text")); // NOI18N + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${sphereName}"), sphereNameTextField, org.jdesktop.beansbinding.BeanProperty.create("text")); + bindingGroup.addBinding(binding); + + eLProperty = org.jdesktop.beansbinding.ELProperty.create("${modes}"); + jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, eLProperty, sphereModeComboBox); + bindingGroup.addBinding(jComboBoxBinding); + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${sphereMode}"), sphereModeComboBox, org.jdesktop.beansbinding.BeanProperty.create("selectedItem")); + bindingGroup.addBinding(binding); + + javax.swing.GroupLayout spherePanelLayout = new javax.swing.GroupLayout(spherePanel); + spherePanel.setLayout(spherePanelLayout); + spherePanelLayout.setHorizontalGroup( + spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(spherePanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(spherePanelLayout.createSequentialGroup() + .addComponent(sphereNameTextField) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(sphereModeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(spherePanelLayout.createSequentialGroup() + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sphereZSamplesLabel) + .addGroup(spherePanelLayout.createSequentialGroup() + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sphereRadialSamplesLabel) + .addComponent(sphereRadiusLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sphereRadiusSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(spherePanelLayout.createSequentialGroup() + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addGroup(spherePanelLayout.createSequentialGroup() + .addComponent(sphereRadialSamplesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(sphereUseEvenSlicesLabel)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, spherePanelLayout.createSequentialGroup() + .addComponent(sphereZSamplesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(144, 144, 144) + .addComponent(sphereInteriorLabel))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sphereInteriorCheckBox) + .addComponent(sphereUseEvenSlicesCheckBox)))))) + .addGap(0, 164, Short.MAX_VALUE))) + .addContainerGap()) + ); + spherePanelLayout.setVerticalGroup( + spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(spherePanelLayout.createSequentialGroup() + .addGap(18, 18, 18) + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(spherePanelLayout.createSequentialGroup() + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(sphereNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(sphereModeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(4, 4, 4) + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(sphereRadialSamplesLabel) + .addComponent(sphereRadialSamplesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(sphereUseEvenSlicesLabel))) + .addComponent(sphereUseEvenSlicesCheckBox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sphereZSamplesLabel, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(sphereZSamplesSpinner, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(sphereInteriorLabel, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(sphereInteriorCheckBox, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(spherePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(sphereRadiusSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(sphereRadiusLabel)) + .addContainerGap(147, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab(org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.spherePanel.TabConstraints.tabTitle"), spherePanel); // NOI18N + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${quadName}"), quadNameTextField, org.jdesktop.beansbinding.BeanProperty.create("text")); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(quadWidthLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.quadWidthLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(quadHeightLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.quadHeightLabel.text")); // NOI18N + + quadWidthSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), Float.valueOf(0.0f), null, Float.valueOf(0.5f))); + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${quadWidth}"), quadWidthSpinner, org.jdesktop.beansbinding.BeanProperty.create("value")); + bindingGroup.addBinding(binding); + + quadHeightSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), Float.valueOf(0.0f), null, Float.valueOf(0.5f))); + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${quadHeight}"), quadHeightSpinner, org.jdesktop.beansbinding.BeanProperty.create("value")); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(quadFlipCoordLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.quadFlipCoordLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(quadFlipCoordCheckBox, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.quadFlipCoordCheckBox.text")); // NOI18N + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${quadFlipCoords}"), quadFlipCoordCheckBox, org.jdesktop.beansbinding.BeanProperty.create("selected")); + bindingGroup.addBinding(binding); + + eLProperty = org.jdesktop.beansbinding.ELProperty.create("${modes}"); + jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, eLProperty, quadModeComboBox); + bindingGroup.addBinding(jComboBoxBinding); + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${quadMode}"), quadModeComboBox, org.jdesktop.beansbinding.BeanProperty.create("selectedItem")); + bindingGroup.addBinding(binding); + + eLProperty = org.jdesktop.beansbinding.ELProperty.create("${plans}"); + jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, eLProperty, jComboBox2); + bindingGroup.addBinding(jComboBoxBinding); + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${quadPlan}"), jComboBox2, org.jdesktop.beansbinding.BeanProperty.create("selectedItem")); + bindingGroup.addBinding(binding); + + javax.swing.GroupLayout quadPanelLayout = new javax.swing.GroupLayout(quadPanel); + quadPanel.setLayout(quadPanelLayout); + quadPanelLayout.setHorizontalGroup( + quadPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(quadPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(quadPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(quadPanelLayout.createSequentialGroup() + .addComponent(quadNameTextField) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(quadModeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(quadPanelLayout.createSequentialGroup() + .addGroup(quadPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(quadFlipCoordLabel) + .addGroup(quadPanelLayout.createSequentialGroup() + .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(quadWidthLabel))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(quadPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(quadFlipCoordCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(quadPanelLayout.createSequentialGroup() + .addComponent(quadWidthSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(quadHeightLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(quadHeightSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(0, 176, Short.MAX_VALUE))) + .addContainerGap()) + ); + quadPanelLayout.setVerticalGroup( + quadPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(quadPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(quadPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(quadNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(quadModeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(quadPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(quadWidthLabel) + .addComponent(quadWidthSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(quadHeightLabel) + .addComponent(quadHeightSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(quadPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(quadFlipCoordLabel) + .addComponent(quadFlipCoordCheckBox)) + .addContainerGap(166, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab(org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.quadPanel.TabConstraints.tabTitle"), quadPanel); // NOI18N + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${lineName}"), lineNameTextField, org.jdesktop.beansbinding.BeanProperty.create("text")); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(lineStartLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.lineStartLabel.text")); // NOI18N + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${lineStart}"), lineStartTextField, org.jdesktop.beansbinding.BeanProperty.create("text_ON_ACTION_OR_FOCUS_LOST")); + binding.setConverter(converterVector3f_String); + bindingGroup.addBinding(binding); + + org.openide.awt.Mnemonics.setLocalizedText(lineEndLabel, org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.lineEndLabel.text")); // NOI18N + + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${lineEnd}"), lineEndTextField, org.jdesktop.beansbinding.BeanProperty.create("text_ON_ACTION_OR_FOCUS_LOST")); + binding.setConverter(converterVector3f_String); + bindingGroup.addBinding(binding); + + eLProperty = org.jdesktop.beansbinding.ELProperty.create("${modes}"); + jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, eLProperty, jComboBox1); + bindingGroup.addBinding(jComboBoxBinding); + binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, newGeometrySettings, org.jdesktop.beansbinding.ELProperty.create("${lineMode}"), jComboBox1, org.jdesktop.beansbinding.BeanProperty.create("selectedItem")); + bindingGroup.addBinding(binding); + + javax.swing.GroupLayout linePanelLayout = new javax.swing.GroupLayout(linePanel); + linePanel.setLayout(linePanelLayout); + linePanelLayout.setHorizontalGroup( + linePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(linePanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(linePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(linePanelLayout.createSequentialGroup() + .addComponent(lineNameTextField) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(linePanelLayout.createSequentialGroup() + .addComponent(lineStartLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(lineStartTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(78, 78, 78) + .addComponent(lineEndLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(lineEndTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 169, Short.MAX_VALUE))) + .addContainerGap()) + ); + linePanelLayout.setVerticalGroup( + linePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(linePanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(linePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lineNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(1, 1, 1) + .addGroup(linePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lineStartLabel) + .addComponent(lineStartTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lineEndLabel) + .addComponent(lineEndTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(203, Short.MAX_VALUE)) + ); + + jTabbedPane1.addTab(org.openide.util.NbBundle.getMessage(NewGeometrySettingsTopComponent.class, "NewGeometrySettingsTopComponent.linePanel.TabConstraints.tabTitle"), linePanel); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jTabbedPane1) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jTabbedPane1, javax.swing.GroupLayout.Alignment.TRAILING) + ); + + bindingGroup.bind(); + }// //GEN-END:initComponents + + private void boxNameTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_boxNameTextFieldActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_boxNameTextFieldActionPerformed + + private void boxModeComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_boxModeComboBoxActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_boxModeComboBoxActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JComboBox boxModeComboBox; + private javax.swing.JTextField boxNameTextField; + private javax.swing.JPanel boxPanel; + private javax.swing.JLabel boxXLabel; + private javax.swing.JSpinner boxXSpinner; + private javax.swing.JLabel boxYLabel; + private javax.swing.JSpinner boxYSpinner; + private javax.swing.JLabel boxZLabel; + private javax.swing.JSpinner boxZSpinner; + private com.jme3.gde.core.sceneexplorer.nodes.actions.impl.ConverterVector3f_String converterVector3f_String; + private javax.swing.JComboBox jComboBox1; + private javax.swing.JComboBox jComboBox2; + private javax.swing.JTabbedPane jTabbedPane1; + private javax.swing.JLabel lineEndLabel; + private javax.swing.JTextField lineEndTextField; + private javax.swing.JTextField lineNameTextField; + private javax.swing.JPanel linePanel; + private javax.swing.JLabel lineStartLabel; + private javax.swing.JTextField lineStartTextField; + private com.jme3.gde.core.sceneexplorer.nodes.actions.impl.NewGeometrySettings newGeometrySettings; + private javax.swing.JCheckBox quadFlipCoordCheckBox; + private javax.swing.JLabel quadFlipCoordLabel; + private javax.swing.JLabel quadHeightLabel; + private javax.swing.JSpinner quadHeightSpinner; + private javax.swing.JComboBox quadModeComboBox; + private javax.swing.JTextField quadNameTextField; + private javax.swing.JPanel quadPanel; + private javax.swing.JLabel quadWidthLabel; + private javax.swing.JSpinner quadWidthSpinner; + private javax.swing.JCheckBox sphereInteriorCheckBox; + private javax.swing.JLabel sphereInteriorLabel; + private javax.swing.JComboBox sphereModeComboBox; + private javax.swing.JTextField sphereNameTextField; + private javax.swing.JPanel spherePanel; + private javax.swing.JLabel sphereRadialSamplesLabel; + private javax.swing.JSpinner sphereRadialSamplesSpinner; + private javax.swing.JLabel sphereRadiusLabel; + private javax.swing.JSpinner sphereRadiusSpinner; + private javax.swing.JCheckBox sphereUseEvenSlicesCheckBox; + private javax.swing.JLabel sphereUseEvenSlicesLabel; + private javax.swing.JLabel sphereZSamplesLabel; + private javax.swing.JSpinner sphereZSamplesSpinner; + private org.jdesktop.beansbinding.BindingGroup bindingGroup; + // End of variables declaration//GEN-END:variables + @Override + public void componentOpened() { // TODO add custom code on component opening + newGeometrySettings.open(); + } + + @Override + public void componentClosed() { + newGeometrySettings.close(); + } + + 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 + } + +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySphereAction.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySphereAction.java new file mode 100644 index 000000000..0c67ce760 --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/NewGeometrySphereAction.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.core.sceneexplorer.nodes.actions.impl; + +import com.jme3.gde.core.sceneexplorer.nodes.actions.AbstractNewSpatialAction; +import com.jme3.gde.core.sceneexplorer.nodes.actions.NewGeometryAction; +import com.jme3.scene.Geometry; +import com.jme3.scene.Node; +import com.jme3.scene.Spatial; + +/** + * + * @author david.bernard.31 + */ +@org.openide.util.lookup.ServiceProvider(service = NewGeometryAction.class) +public class NewGeometrySphereAction extends AbstractNewSpatialAction implements NewGeometryAction { + + public NewGeometrySphereAction() { + name = "Sphere"; + } + + @Override + protected Spatial doCreateSpatial(Node parent) { + Geometry geom = NewGeometry.sphere(pm); + parent.attachChild(geom); + return geom; + } +}