From 53354f5ddafff2388af17fbf886af4ebebb33f2f Mon Sep 17 00:00:00 2001 From: "rem..om" Date: Fri, 22 Jul 2011 02:39:13 +0000 Subject: [PATCH] sdk : added spot light support to jmp git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7895 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../nodes/JmeSpatialChildren.java | 4 + .../sceneexplorer/nodes/JmeSpotLight.java | 91 +++++++++++++++++++ .../nodes/actions/NewLightPopup.java | 25 +++++ .../sceneviewer/SceneViewerTopComponent.java | 51 ++--------- .../actions/SwitchFrontViewAction.java | 32 +++++++ .../actions/ToggleOrthoPerspAction.java | 5 +- 6 files changed, 164 insertions(+), 44 deletions(-) create mode 100644 sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeSpotLight.java create mode 100644 sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/actions/SwitchFrontViewAction.java diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeSpatialChildren.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeSpatialChildren.java index f8fd307ed..e3c84a976 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeSpatialChildren.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeSpatialChildren.java @@ -39,6 +39,7 @@ import com.jme3.light.DirectionalLight; import com.jme3.light.Light; import com.jme3.light.LightList; import com.jme3.light.PointLight; +import com.jme3.light.SpotLight; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; import com.jme3.scene.Spatial; @@ -170,6 +171,9 @@ public class JmeSpatialChildren extends Children.Keys { if (pair.getLight() instanceof PointLight) { return new Node[]{new JmePointLight(pair.getSpatial(), (PointLight) pair.getLight()).setReadOnly(readOnly)}; } + if (pair.getLight() instanceof SpotLight) { + return new Node[]{new JmeSpotLight(pair.getSpatial(), (SpotLight) pair.getLight()).setReadOnly(readOnly)}; + } if (pair.getLight() instanceof DirectionalLight) { return new Node[]{new JmeDirectionalLight(pair.getSpatial(), (DirectionalLight) pair.getLight()).setReadOnly(readOnly)}; } diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeSpotLight.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeSpotLight.java new file mode 100644 index 000000000..8e7dc65b1 --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeSpotLight.java @@ -0,0 +1,91 @@ +/* + * 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; + + +import com.jme3.light.SpotLight; +import com.jme3.scene.Spatial; +import org.openide.cookies.SaveCookie; +import org.openide.loaders.DataObject; +import org.openide.nodes.Sheet; + +/** + * + * @author normenhansen + */ +@org.openide.util.lookup.ServiceProvider(service=SceneExplorerNode.class) +public class JmeSpotLight extends JmeLight{ + SpotLight spotLight; + + public JmeSpotLight() { + } + + public JmeSpotLight(Spatial spatial, SpotLight spotLight) { + super(spatial, spotLight); + this.spotLight = spotLight; + lookupContents.add(spotLight); + setName("SpotLight"); + } + + @Override + protected Sheet createSheet() { + //TODO: multithreading.. + Sheet sheet = super.createSheet(); + Sheet.Set set = Sheet.createPropertiesSet(); + set.setDisplayName("SpotLight"); + set.setName(SpotLight.class.getName()); + SpotLight obj = spotLight; + if (obj == null) { + return sheet; + } + + createFields(SpotLight.class, set, obj); + + sheet.put(set); + return sheet; + + } + + public Class getExplorerObjectClass() { + return SpotLight.class; + } + + public Class getExplorerNodeClass() { + return JmeSpotLight.class; + } + + public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, SaveCookie cookie) { + return null; + } + +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewLightPopup.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewLightPopup.java index 1bdc06842..a2204fe1a 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewLightPopup.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/NewLightPopup.java @@ -39,6 +39,7 @@ import com.jme3.light.AmbientLight; import com.jme3.light.DirectionalLight; import com.jme3.light.Light; import com.jme3.light.PointLight; +import com.jme3.light.SpotLight; import com.jme3.math.ColorRGBA; import com.jme3.math.Vector3f; import com.jme3.scene.Spatial; @@ -77,6 +78,8 @@ public class NewLightPopup extends AbstractAction implements Presenter.Popup { result.add(new JMenuItem(new AddAmbientAction())); result.add(new JMenuItem(new AddDirectionalAction())); result.add(new JMenuItem(new AddPointAction())); + result.add(new JMenuItem(new AddSpotAction())); + return result; } @@ -135,6 +138,28 @@ public class NewLightPopup extends AbstractAction implements Presenter.Popup { public Void call() throws Exception { PointLight light = new PointLight(); light.setColor(ColorRGBA.White); + node.addLight(light); + addLightUndo(node, light); + setModified(); + return null; + } + }); + } + } + + private class AddSpotAction extends AbstractAction { + + public AddSpotAction() { + putValue(NAME, "Spot Light"); + } + + public void actionPerformed(ActionEvent e) { + SceneApplication.getApplication().enqueue(new Callable() { + + public Void call() throws Exception { + SpotLight light = new SpotLight(); + light.setColor(ColorRGBA.White); + node.addLight(light); addLightUndo(node, light); setModified(); return null; diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.java index 0b4cf039f..355eecce1 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.java @@ -26,15 +26,14 @@ package com.jme3.gde.core.sceneviewer; import com.jme3.gde.core.filters.FilterExplorerTopComponent; import com.jme3.gde.core.scene.SceneApplication; +import com.jme3.gde.core.scene.controller.toolbars.CameraToolbar; import com.jme3.gde.core.sceneviewer.actions.ToggleOrthoPerspAction; import com.jme3.system.JmeCanvasContext; import java.awt.Canvas; -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.util.logging.Logger; +import javax.swing.JToolBar; import org.openide.util.NbBundle; import org.openide.windows.TopComponent; import org.openide.windows.WindowManager; @@ -47,7 +46,6 @@ import org.openide.awt.UndoRedo; import org.openide.util.Exceptions; import org.openide.util.HelpCtx; import org.openide.util.Lookup; -import org.openide.util.lookup.Lookups; /** * Top component which displays something. @@ -65,8 +63,7 @@ public final class SceneViewerTopComponent extends TopComponent { private SceneApplication app; private HelpCtx helpContext = new HelpCtx("com.jme3.gde.core.sceneviewer"); private Canvas oglCanvas; - //toolbar actions - private ToggleOrthoPerspAction toggleOrthoPerspAction; + public SceneViewerTopComponent() { initComponents(); @@ -74,12 +71,12 @@ public final class SceneViewerTopComponent extends TopComponent { setFocusable(true); setName(NbBundle.getMessage(SceneViewerTopComponent.class, "CTL_SceneViewerTopComponent")); setToolTipText(NbBundle.getMessage(SceneViewerTopComponent.class, "HINT_SceneViewerTopComponent")); - setIcon(ImageUtilities.loadImage(ICON_PATH, true)); + setIcon(ImageUtilities.loadImage(ICON_PATH, true)); try { app = SceneApplication.getApplication(); oglCanvas = ((JmeCanvasContext) app.getContext()).getCanvas(); oGLPanel.add(oglCanvas); - toggleOrthoPerspAction = new ToggleOrthoPerspAction(); + } catch (Exception e) { Exceptions.printStackTrace(e); showOpenGLError(e.toString()); @@ -117,8 +114,6 @@ public final class SceneViewerTopComponent extends TopComponent { jToggleButton1 = new javax.swing.JToggleButton(); jSeparator1 = new javax.swing.JToolBar.Separator(); enableWireframe = new javax.swing.JToggleButton(); - jSeparator2 = new javax.swing.JToolBar.Separator(); - enableOrtho = new javax.swing.JToggleButton(); jPanel1 = new javax.swing.JPanel(); enableStats = new javax.swing.JToggleButton(); oGLPanel = new javax.swing.JPanel(); @@ -168,27 +163,6 @@ public final class SceneViewerTopComponent extends TopComponent { } }); jToolBar1.add(enableWireframe); - jToolBar1.add(jSeparator2); - - enableOrtho.setFont(new java.awt.Font("Tahoma", 0, 8)); // NOI18N - enableOrtho.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/core/sceneviewer/icons/persp.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(enableOrtho, org.openide.util.NbBundle.getMessage(SceneViewerTopComponent.class, "SceneViewerTopComponent.enableOrtho.text")); // NOI18N - enableOrtho.setToolTipText(org.openide.util.NbBundle.getMessage(SceneViewerTopComponent.class, "SceneViewerTopComponent.enableOrtho.toolTipText")); // NOI18N - enableOrtho.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - enableOrtho.setFocusable(false); - enableOrtho.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - enableOrtho.setMaximumSize(new java.awt.Dimension(27, 23)); - enableOrtho.setMinimumSize(new java.awt.Dimension(27, 23)); - enableOrtho.setPreferredSize(new java.awt.Dimension(50, 23)); - enableOrtho.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/core/sceneviewer/icons/ortho.png"))); // NOI18N - enableOrtho.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - enableOrthoActionPerformed(evt); - } - }); - jToolBar1.add(enableOrtho); - enableOrtho.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SceneViewerTopComponent.class, "SceneViewerTopComponent.jToggleButton2.AccessibleContext.accessibleName")); // NOI18N - jToolBar1.add(jPanel1); enableStats.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/core/sceneviewer/icons/65.png"))); // NOI18N @@ -227,27 +201,18 @@ public final class SceneViewerTopComponent extends TopComponent { FilterExplorerTopComponent.findInstance().setFilterEnabled(jToggleButton1.isSelected()); }//GEN-LAST:event_jToggleButton1ActionPerformed -private void enableOrthoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableOrthoActionPerformed - toggleOrthoPerspAction.actionPerformed(evt); -}//GEN-LAST:event_enableOrthoActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JToggleButton enableCamLight; - private javax.swing.JToggleButton enableOrtho; private javax.swing.JToggleButton enableStats; private javax.swing.JToggleButton enableWireframe; private javax.swing.JPanel jPanel1; private javax.swing.JToolBar.Separator jSeparator1; - private javax.swing.JToolBar.Separator jSeparator2; private javax.swing.JToggleButton jToggleButton1; private javax.swing.JToolBar jToolBar1; private javax.swing.JPanel oGLPanel; // End of variables declaration//GEN-END:variables - public void toggleOrthoModeButton(boolean enabled) { - enableOrtho.setText(NbBundle.getMessage(SceneViewerTopComponent.class, "SceneViewerTopComponent.enableOrtho.text" + (enabled ? "O" : ""))); - enableOrtho.setSelected(enabled); - } - + /** * Gets default instance. Do not use directly: reserved for *.settings files only, * i.e. deserialization routines; otherwise you could get a non-deserialized instance. @@ -359,4 +324,8 @@ private void enableOrthoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-F public UndoRedo getUndoRedo() { return Lookup.getDefault().lookup(UndoRedo.class); } + + public void addAdditionnalToolbar(JToolBar tb){ + jToolBar1.add(tb,4); + } } diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/actions/SwitchFrontViewAction.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/actions/SwitchFrontViewAction.java new file mode 100644 index 000000000..4dd7f86fe --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/actions/SwitchFrontViewAction.java @@ -0,0 +1,32 @@ +package com.jme3.gde.core.sceneviewer.actions; + +import com.jme3.gde.core.sceneviewer.SceneViewerTopComponent; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import org.openide.awt.ActionRegistration; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionID; +import org.openide.util.NbBundle.Messages; + +@ActionID(category = "SceneComposer", +id = "com.jme3.gde.core.sceneviewer.actions.SwitchFrontViewAcction") +@ActionRegistration(displayName = "#CTL_SwitchFrontViewAcction") +@ActionReferences({ + @ActionReference(path = "Actions/jMonkeyPlatform"), + @ActionReference(path = "Shortcuts", name = "NUMPAD1") +}) +@Messages("CTL_SwitchFrontViewAcction=Switch to front view") +public final class SwitchFrontViewAction implements ActionListener { + + + public void actionPerformed(ActionEvent e) { + + SceneViewerTopComponent svtc = SceneViewerTopComponent.findInstance(); + if (svtc.hasFocus()) { + System.out.println("front view"); + } + } + + +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/actions/ToggleOrthoPerspAction.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/actions/ToggleOrthoPerspAction.java index 901be2dab..b9e76d92e 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/actions/ToggleOrthoPerspAction.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/actions/ToggleOrthoPerspAction.java @@ -20,15 +20,14 @@ id = "com.jme3.gde.core.sceneviewer.actions.ToggleOrthoPerspAction") @Messages("CTL_ToggleOrthoPerspAction=Toggle ortho / persp") public final class ToggleOrthoPerspAction implements ActionListener { - public ToggleOrthoPerspAction() { + public ToggleOrthoPerspAction() { } public void actionPerformed(ActionEvent e) { SceneViewerTopComponent svtc = SceneViewerTopComponent.findInstance(); if (svtc.hasFocus()) { - boolean toggle = SceneApplication.getApplication().toggleOrthoPerspMode(); - svtc.toggleOrthoModeButton(toggle); + SceneApplication.getApplication().getCamController().toggleOrthoPerspMode(); } }