Selaa lähdekoodia

SDK :
- Fixed a NPE in the select tool when user was selectiong nothing

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7871 75d07b2b-3a1a-0410-a2c5-0572b91ccdca

rem..om 14 vuotta sitten
vanhempi
commit
9faaf551eb

+ 41 - 47
jme3-scenecomposer/src/com/jme3/gde/scenecomposer/ComposerCameraController.java

@@ -1,44 +1,35 @@
 /*
- *  Copyright (c) 2009-2010 jMonkeyEngine
- *  All rights reserved.
+ * Copyright (c) 2009-2010 jMonkeyEngine All rights reserved. <p/>
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
  * 
- *  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.
+ *  * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. <p/> * 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. <p/> * 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. <p/> 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.scenecomposer;
 
-import com.jme3.collision.CollisionResult;
-import com.jme3.collision.CollisionResults;
 import com.jme3.gde.core.scene.SceneApplication;
 import com.jme3.gde.core.scene.controller.AbstractCameraController;
 import com.jme3.gde.core.sceneexplorer.nodes.JmeNode;
+import com.jme3.gde.core.sceneviewer.SceneViewerTopComponent;
 import com.jme3.input.KeyInput;
 import com.jme3.input.event.KeyInputEvent;
-import com.jme3.math.Ray;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
 import com.jme3.renderer.Camera;
@@ -68,55 +59,60 @@ public class ComposerCameraController extends AbstractCameraController {
     public void setToolController(SceneComposerToolController toolController) {
         this.toolController = toolController;
     }
-    
+
     public boolean isToolUsesCameraControls() {
         return !toolController.isOverrideCameraControl();
     }
-    
+
     public Camera getCamera() {
         return cam;
     }
-    
+
     @Override
     public void onKeyEvent(KeyInputEvent kie) {
+        //don't forget the super call
+        super.onKeyEvent(kie);
         if (kie.isPressed()) {
-            if ( KeyInput.KEY_LSHIFT == kie.getKeyCode() ) {
+            if (KeyInput.KEY_LSHIFT == kie.getKeyCode()) {
                 forceCameraControls = true;
             }
-        } else if (kie.isReleased()){
-            if ( KeyInput.KEY_LSHIFT == kie.getKeyCode() ) {
+        } else if (kie.isReleased()) {
+            if (KeyInput.KEY_LSHIFT == kie.getKeyCode()) {
                 forceCameraControls = false;
             }
         }
     }
-    
+
     @Override
     public void checkClick(int button, boolean pressed) {
         if (button == 0) {
             if (isEditButtonEnabled() && !forceCameraControls) {
-                toolController.doEditToolActivatedPrimary(new Vector2f(mouseX,mouseY), pressed, cam);
+                toolController.doEditToolActivatedPrimary(new Vector2f(mouseX, mouseY), pressed, cam);
             }
         }
         if (button == 1) {
             if (isEditButtonEnabled() && !forceCameraControls) {
-                toolController.doEditToolActivatedSecondary(new Vector2f(mouseX,mouseY), pressed, cam);
+                toolController.doEditToolActivatedSecondary(new Vector2f(mouseX, mouseY), pressed, cam);
             }
         }
+
+
     }
-    
+
     @Override
     protected void checkDragged(int button, boolean pressed) {
-        if (button == 0)
+        if (button == 0) {
             toolController.doEditToolDraggedPrimary(new Vector2f(mouseX, mouseY), pressed, cam);
-        else if (button == 1)
+        } else if (button == 1) {
             toolController.doEditToolDraggedSecondary(new Vector2f(mouseX, mouseY), pressed, cam);
+        }
     }
-    
+
     @Override
     protected void checkMoved() {
         toolController.doEditToolMoved(new Vector2f(mouseX, mouseY), cam);
     }
-    
+
     @Override
     public void onAnalog(String string, float f1, float f) {
         if ("MouseAxisX".equals(string)) {
@@ -169,6 +165,4 @@ public class ComposerCameraController extends AbstractCameraController {
             zoomCamera(-.1f);
         }
     }
-    
-   
 }

+ 10 - 13
jme3-scenecomposer/src/com/jme3/gde/scenecomposer/tools/SelectTool.java

@@ -1,17 +1,15 @@
 /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
+ * To change this template, choose Tools | Templates and open the template in
+ * the editor.
  */
 package com.jme3.gde.scenecomposer.tools;
 
 import com.jme3.gde.core.scene.SceneApplication;
 import com.jme3.gde.core.sceneexplorer.nodes.JmeNode;
 import com.jme3.gde.scenecomposer.SceneEditTool;
-import com.jme3.math.Quaternion;
 import com.jme3.math.Vector2f;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.Spatial;
-import java.util.concurrent.Callable;
 import org.openide.loaders.DataObject;
 
 /**
@@ -22,15 +20,15 @@ public class SelectTool extends SceneEditTool {
 
     protected Spatial selected;
     private boolean wasDragging = false;
-    
-    
+
     @Override
     public void actionPrimary(Vector2f screenCoord, boolean pressed, final JmeNode rootNode, DataObject dataObject) {
-        if (!pressed && !wasDragging) { 
+        if (!pressed && !wasDragging) {
             // mouse released and wasn't dragging, select a new spatial
             final Spatial result = pickWorldSpatial(getCamera(), screenCoord, rootNode);
-            
+
             java.awt.EventQueue.invokeLater(new Runnable() {
+
                 public void run() {
                     if (result != null) {
                         SceneApplication.getApplication().setCurrentFileNode(rootNode.getChild(result));
@@ -44,9 +42,8 @@ public class SelectTool extends SceneEditTool {
                 replaceSelectionShape(result);
                 updateToolsTransformation(selectedSpatial);
             }
-            
         }
-        
+
         if (!pressed) {
             wasDragging = false;
         }
@@ -56,7 +53,9 @@ public class SelectTool extends SceneEditTool {
     public void actionSecondary(final Vector2f screenCoord, boolean pressed, final JmeNode rootNode, DataObject dataObject) {
         if (!pressed && !wasDragging) {
             final Vector3f result = pickWorldLocation(getCamera(), screenCoord, rootNode);
-            toolController.doSetCursorLocation(result);
+            if (result != null) {
+                toolController.doSetCursorLocation(result);
+            }
         }
         if (!pressed) {
             wasDragging = false;
@@ -65,7 +64,6 @@ public class SelectTool extends SceneEditTool {
 
     @Override
     public void mouseMoved(Vector2f screenCoord) {
-        
     }
 
     @Override
@@ -77,5 +75,4 @@ public class SelectTool extends SceneEditTool {
     public void draggedSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) {
         wasDragging = pressed;
     }
-    
 }