From f2cc174f1d8b6b37351dc96071d37bbd897b2d98 Mon Sep 17 00:00:00 2001
From: GabrielDS <gabriel.santosti01@gmail.com>
Date: Thu, 13 Jul 2017 19:46:00 -0300
Subject: [PATCH 1/9] Removed trailing whitespaces

---
 src/com/zebraimaging/ZebraInputHandler.java | 26 ++++++++++-----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/com/zebraimaging/ZebraInputHandler.java b/src/com/zebraimaging/ZebraInputHandler.java
index 1e855876b8..7fe937c110 100644
--- a/src/com/zebraimaging/ZebraInputHandler.java
+++ b/src/com/zebraimaging/ZebraInputHandler.java
@@ -19,28 +19,28 @@ public class ZebraInputHandler extends AWTInputHandler
     /** All instantiations of this class are stored for internal retrieval. */
     private static List<ZebraInputHandler> instances = new ArrayList<ZebraInputHandler>();
     private static Timer repaintContextsTimer = null;
-    
+
     final static TimerTask repaintContextsTask = new TimerTask()
 	{
-		public void run()        	
+		public void run()
 		{
 			Iterator<ZebraInputHandler> itr = instances.iterator();
 	        while (itr.hasNext())
 	        {
-	            ZebraInputHandler h = itr.next();	           
+	            ZebraInputHandler h = itr.next();
 	            if (h.NeedsRefresh() == true)
 	            {
 	            	h.SetRefresh(false);
 	            	h.getWorldWindow().redraw();
-	            }        		            	
+	            }
 	        }
 		}
 	};
-	
+
 	private long hwnd = 0;
-    private boolean arGL2Present = false;    
+    private boolean arGL2Present = false;
     private boolean refresh = false;
-    
+
     public ZebraInputHandler()
     {
         /**
@@ -49,7 +49,7 @@ public ZebraInputHandler()
          * (b) Not using the Zebra integration tools.
          */
         try
-        {        	
+        {
             System.loadLibrary("arGL2Integrator");
             arGL2Present = true;
             instances.add(this);
@@ -59,7 +59,7 @@ public ZebraInputHandler()
         {
             System.out.println("FAILED to load arGL2Integrator.dll");
         }
-        
+
         if (repaintContextsTimer == null)
         {
         	repaintContextsTimer = new Timer();
@@ -68,15 +68,15 @@ public ZebraInputHandler()
     }
 
     private synchronized void SetRefresh(boolean value)
-    { 
+    {
     	refresh = value;
     }
-    
+
     private synchronized boolean NeedsRefresh()
     {
     	return refresh;
 	}
-    
+
     public void keyPressed(KeyEvent e)
     {
         boolean consumed = false;
@@ -198,7 +198,7 @@ private static ZebraInputHandler getInstance(long hwnd)
     // Java static methods executed by arGL2Integrator.dll via JNI
 
     public static void forceRepaint(long hwnd)
-    {   
+    {
         /** Force the instance of the ZebraViewInputHandler class to redraw it's associated OpenGL window. */
         ZebraInputHandler h = getInstance(hwnd);
         if (h != null)

From 2572069dd313653c6d2bbf97a7d1c927515654f9 Mon Sep 17 00:00:00 2001
From: GabrielDS <gabriel.santosti01@gmail.com>
Date: Thu, 13 Jul 2017 20:04:34 -0300
Subject: [PATCH 2/9] =?UTF-8?q?Remove=20some=20trailing=20whitespaces?=
 =?UTF-8?q?=C2=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/gov/nasa/worldwind/Restorable.java                        | 2 +-
 src/gov/nasa/worldwind/animation/AngleAnimator.java           | 4 +---
 src/gov/nasa/worldwind/animation/AnimationController.java     | 2 +-
 src/gov/nasa/worldwind/animation/BasicAnimator.java           | 2 +-
 src/gov/nasa/worldwind/animation/DoubleAnimator.java          | 4 ++--
 src/gov/nasa/worldwind/animation/PositionAnimator.java        | 4 ++--
 src/gov/nasa/worldwind/animation/SmoothInterpolator.java      | 2 +-
 .../nasa/worldwind/view/firstperson/FlyViewInputHandler.java  | 4 ++--
 8 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/src/gov/nasa/worldwind/Restorable.java b/src/gov/nasa/worldwind/Restorable.java
index ea3d0c9eb5..669835be27 100644
--- a/src/gov/nasa/worldwind/Restorable.java
+++ b/src/gov/nasa/worldwind/Restorable.java
@@ -27,7 +27,7 @@ public interface Restorable
     /**
      * Returns an XML document string describing the object's state. This state can be restored later by calling
      * <code>restoreState</code> and passing the XML document.
-     * 
+     *
      * @return an XML document string describing the object's state.
      */
     String getRestorableState();
diff --git a/src/gov/nasa/worldwind/animation/AngleAnimator.java b/src/gov/nasa/worldwind/animation/AngleAnimator.java
index 3125354726..b62b12a384 100644
--- a/src/gov/nasa/worldwind/animation/AngleAnimator.java
+++ b/src/gov/nasa/worldwind/animation/AngleAnimator.java
@@ -112,7 +112,7 @@ public Angle getEnd()
 
     /**
      * Get the {@link gov.nasa.worldwind.util.PropertyAccessor} in use by this animation
-     * 
+     *
      * @return the {@link gov.nasa.worldwind.util.PropertyAccessor} in use by this animation
      */
     public PropertyAccessor.AngleAccessor getPropertyAccessor()
@@ -150,7 +150,5 @@ private Angle nextAngle(double interpolant)
            interpolant,
            this.begin,
            this.end);
-
-        
     }
 }
diff --git a/src/gov/nasa/worldwind/animation/AnimationController.java b/src/gov/nasa/worldwind/animation/AnimationController.java
index 5eef377394..8d0d1ce603 100644
--- a/src/gov/nasa/worldwind/animation/AnimationController.java
+++ b/src/gov/nasa/worldwind/animation/AnimationController.java
@@ -84,7 +84,7 @@ public boolean stepAnimators()
 
     /**
      * Returns <code>true</code> if the controller has any active <code>Animations</code>
-     * 
+     *
      * @return true if there are any active animations in this <code>CompountAnimation</code>
      */
     public boolean hasActiveAnimation()
diff --git a/src/gov/nasa/worldwind/animation/BasicAnimator.java b/src/gov/nasa/worldwind/animation/BasicAnimator.java
index cff870e8a1..4ed8970ccf 100644
--- a/src/gov/nasa/worldwind/animation/BasicAnimator.java
+++ b/src/gov/nasa/worldwind/animation/BasicAnimator.java
@@ -27,7 +27,7 @@ public class BasicAnimator implements Animator
 
     /**
      * Constructs a <code>BasicAnimator</code>.  Sets the <code>Animator</code>'s <code>Interpolator</code> to
-     * <code>null</code>. 
+     * <code>null</code>.
      */
     public BasicAnimator()
     {
diff --git a/src/gov/nasa/worldwind/animation/DoubleAnimator.java b/src/gov/nasa/worldwind/animation/DoubleAnimator.java
index bb33a91405..444d8ad742 100644
--- a/src/gov/nasa/worldwind/animation/DoubleAnimator.java
+++ b/src/gov/nasa/worldwind/animation/DoubleAnimator.java
@@ -28,7 +28,7 @@ public DoubleAnimator(Interpolator interpolator,
        {
            this.interpolator = new ScheduledInterpolator(10000);
        }
-       
+
        if (propertyAccessor == null)
        {
            String message = Logging.getMessage("nullValue.ViewPropertyAccessorIsNull");
@@ -90,5 +90,5 @@ public Double nextDouble(double interpolant)
            this.end);
     }
 
-    
+
 }
diff --git a/src/gov/nasa/worldwind/animation/PositionAnimator.java b/src/gov/nasa/worldwind/animation/PositionAnimator.java
index 14645e7518..acc5fdceb3 100644
--- a/src/gov/nasa/worldwind/animation/PositionAnimator.java
+++ b/src/gov/nasa/worldwind/animation/PositionAnimator.java
@@ -14,7 +14,7 @@
  */
 public class PositionAnimator extends BasicAnimator
 {
-    
+
     protected Position begin;
     protected Position end;
     protected final PropertyAccessor.PositionAccessor propertyAccessor;
@@ -47,7 +47,7 @@ public PositionAnimator(
         this.end = end;
         this.propertyAccessor = propertyAccessor;
     }
-    
+
     public void setBegin(Position begin)
     {
         this.begin = begin;
diff --git a/src/gov/nasa/worldwind/animation/SmoothInterpolator.java b/src/gov/nasa/worldwind/animation/SmoothInterpolator.java
index d6d9fbc499..456360d1cb 100644
--- a/src/gov/nasa/worldwind/animation/SmoothInterpolator.java
+++ b/src/gov/nasa/worldwind/animation/SmoothInterpolator.java
@@ -42,5 +42,5 @@ protected static double basicInterpolant(double interpolant, double startInterpo
     // ============== Helper Functions ======================= //
 
     // Map amount range [startAmount, stopAmount] to [0, 1] when amount is inside range.
-    
+
 }
diff --git a/src/gov/nasa/worldwind/view/firstperson/FlyViewInputHandler.java b/src/gov/nasa/worldwind/view/firstperson/FlyViewInputHandler.java
index 3637ad96a7..7755cb6916 100644
--- a/src/gov/nasa/worldwind/view/firstperson/FlyViewInputHandler.java
+++ b/src/gov/nasa/worldwind/view/firstperson/FlyViewInputHandler.java
@@ -76,7 +76,7 @@ public boolean inputActionPerformed(AbstractViewInputHandler inputHandler, KeyEv
             }
             return true;
         }
-    }    
+    }
 
     AnimationController uiAnimControl = new AnimationController();
     AnimationController gotoAnimControl = new AnimationController();
@@ -182,7 +182,7 @@ public FlyViewInputHandler()
         RollActionListener rollActionListener = new RollActionListener();
         this.getAttributes().setActionListener(
             ViewInputAttributes.DEVICE_KEYBOARD, ViewInputAttributes.VIEW_ROLL_KEYS, rollActionListener);
-        
+
         // Arrow Keys horizontal translate
         this.getAttributes().setValues(ViewInputAttributes.DEVICE_KEYBOARD,
             ViewInputAttributes.VIEW_HORIZONTAL_TRANS_KEYS,

From 52a9da8a65929e11855d378283fd5e609c56037e Mon Sep 17 00:00:00 2001
From: GabrielDS <gabriel.santosti01@gmail.com>
Date: Fri, 14 Jul 2017 17:09:47 -0300
Subject: [PATCH 3/9] Change the if-then-else Statement

---
 src/com/zebraimaging/ZebraInputHandler.java | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/com/zebraimaging/ZebraInputHandler.java b/src/com/zebraimaging/ZebraInputHandler.java
index 7fe937c110..a1a1e12d47 100644
--- a/src/com/zebraimaging/ZebraInputHandler.java
+++ b/src/com/zebraimaging/ZebraInputHandler.java
@@ -82,7 +82,7 @@ public void keyPressed(KeyEvent e)
         boolean consumed = false;
         if (arGL2Present)
             consumed = zebraKeyPressed(getGLCanvasHandle(), e.getKeyCode());
-        if (consumed == true)
+        if (consumed)
             e.consume();
         else
             super.keyPressed(e);
@@ -93,7 +93,7 @@ public void keyReleased(KeyEvent e)
         boolean consumed = false;
         if (arGL2Present)
             consumed = zebraKeyReleased(getGLCanvasHandle(), e.getKeyCode());
-        if (consumed == true)
+        if (consumed)
             e.consume();
         else
             super.keyReleased(e);
@@ -104,7 +104,7 @@ public void mouseClicked(MouseEvent e)
         boolean consumed = false;
         if (arGL2Present)
             consumed = zebraMouseReleased(getGLCanvasHandle(), e.getButton(), e.getX(), e.getY());
-        if (consumed == true)
+        if (consumed)
             e.consume();
         else
             super.mouseClicked(e);
@@ -115,7 +115,7 @@ public void mousePressed(MouseEvent e)
         boolean consumed = false;
         if (arGL2Present)
             consumed = zebraMousePressed(getGLCanvasHandle(), e.getButton(), e.getX(), e.getY());
-        if (consumed == true)
+        if (consumed)
             e.consume();
         else
             super.mousePressed(e);
@@ -126,7 +126,7 @@ public void mouseReleased(MouseEvent e)
         boolean consumed = false;
         if (arGL2Present)
             consumed = zebraMouseReleased(getGLCanvasHandle(), e.getButton(), e.getX(), e.getY());
-        if (consumed == true)
+        if (consumed)
             e.consume();
         else
             super.mouseReleased(e);
@@ -143,7 +143,7 @@ public void mouseDragged(MouseEvent e)
         boolean consumed = false;
         if (arGL2Present)
             consumed = zebraMouseMoved(getGLCanvasHandle(), button, e.getX(), e.getY());
-        if (consumed == true)
+        if (consumed)
             e.consume();
         else
             super.mouseDragged(e);
@@ -154,7 +154,7 @@ public void mouseWheelMoved(MouseWheelEvent e)
         boolean consumed = false;
         if (arGL2Present)
             consumed = zebraMouseWheel(getGLCanvasHandle(), e.getWheelRotation());
-        if (consumed == true)
+        if (consumed)
             e.consume();
         else
             super.mouseWheelMoved(e);

From 7ef2c8434b4e43beda0eeef533599700c4dad999 Mon Sep 17 00:00:00 2001
From: GabrielDS <gabriel.santosti01@gmail.com>
Date: Wed, 19 Jul 2017 19:53:07 -0300
Subject: [PATCH 4/9] Add the key method

---
 .../nasa/worldwind/awt/AWTInputHandler.java   | 20 +++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/gov/nasa/worldwind/awt/AWTInputHandler.java b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
index 8c4f78a581..f2d8eb438f 100644
--- a/src/gov/nasa/worldwind/awt/AWTInputHandler.java
+++ b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
@@ -244,6 +244,26 @@ public ViewInputHandler getViewInputHandler()
     }
     */
 
+    private void keyMethod(KeyEvent keyEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (keyEvent == null)
+        {
+            return;
+        }
+
+        this.callKeyTypedListeners(keyEvent);
+
+        if (!keyEvent.isConsumed())
+        {
+            this.wwd.getView().getViewInputHandler().keyTyped(keyEvent);
+        }
+    }
+
     public void keyTyped(KeyEvent keyEvent)
     {
         if (this.wwd == null)

From 95df27b3a3ff7fdc9789304695de5162dd68bed2 Mon Sep 17 00:00:00 2001
From: GabrielDS <gabriel.santosti01@gmail.com>
Date: Wed, 19 Jul 2017 19:55:51 -0300
Subject: [PATCH 5/9] Add the key method

---
 .../nasa/worldwind/awt/AWTInputHandler.java   | 896 ------------------
 1 file changed, 896 deletions(-)
 delete mode 100644 src/gov/nasa/worldwind/awt/AWTInputHandler.java

diff --git a/src/gov/nasa/worldwind/awt/AWTInputHandler.java b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
deleted file mode 100644
index f2d8eb438f..0000000000
--- a/src/gov/nasa/worldwind/awt/AWTInputHandler.java
+++ /dev/null
@@ -1,896 +0,0 @@
-/*
- * Copyright (C) 2012 United States Government as represented by the Administrator of the
- * National Aeronautics and Space Administration.
- * All Rights Reserved.
- */
-package gov.nasa.worldwind.awt;
-
-import gov.nasa.worldwind.*;
-import gov.nasa.worldwind.avlist.AVKey;
-import gov.nasa.worldwind.event.*;
-import gov.nasa.worldwind.pick.*;
-import gov.nasa.worldwind.util.Logging;
-
-import javax.media.opengl.awt.GLJPanel;
-import javax.swing.event.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.PropertyChangeEvent;
-
-/**
- * @author tag
- * @version $Id: AWTInputHandler.java 2258 2014-08-22 22:08:33Z dcollins $
- */
-public class AWTInputHandler extends WWObjectImpl
-    implements KeyListener, MouseListener, MouseMotionListener, MouseWheelListener, FocusListener, InputHandler,
-    Disposable
-{
-    protected WorldWindow wwd = null;
-    protected EventListenerList eventListeners = new EventListenerList();
-    protected java.awt.Point mousePoint = new java.awt.Point();
-    protected PickedObjectList hoverObjects;
-    protected PickedObjectList objectsAtButtonPress;
-    protected boolean isHovering = false;
-    protected boolean isDragging = false;
-    protected boolean forceRedrawOnMousePressed = Configuration.getBooleanValue(AVKey.REDRAW_ON_MOUSE_PRESSED, false);
-    protected javax.swing.Timer hoverTimer = new javax.swing.Timer(600, new ActionListener()
-    {
-        public void actionPerformed(ActionEvent actionEvent)
-        {
-            if (AWTInputHandler.this.pickMatches(AWTInputHandler.this.hoverObjects))
-            {
-                AWTInputHandler.this.isHovering = true;
-                AWTInputHandler.this.callSelectListeners(new SelectEvent(AWTInputHandler.this.wwd,
-                    SelectEvent.HOVER, mousePoint, AWTInputHandler.this.hoverObjects));
-                AWTInputHandler.this.hoverTimer.stop();
-            }
-        }
-    });
-    // Delegate handler for View.
-    protected SelectListener selectListener;
-
-    public AWTInputHandler()
-    {
-    }
-
-    public void dispose()
-    {
-        this.hoverTimer.stop();
-        this.hoverTimer = null;
-
-        this.setEventSource(null);
-
-        if (this.hoverObjects != null)
-            this.hoverObjects.clear();
-        this.hoverObjects = null;
-
-        if (this.objectsAtButtonPress != null)
-            this.objectsAtButtonPress.clear();
-        this.objectsAtButtonPress = null;
-    }
-
-    public void setEventSource(WorldWindow newWorldWindow)
-    {
-        if (newWorldWindow != null && !(newWorldWindow instanceof Component))
-        {
-            String message = Logging.getMessage("Awt.AWTInputHandler.EventSourceNotAComponent");
-            Logging.logger().finer(message);
-            throw new IllegalArgumentException(message);
-        }
-
-        if (newWorldWindow == this.wwd)
-        {
-            return;
-        }
-
-        this.eventListeners = new EventListenerList(); // make orphans of listener references
-
-        if (this.wwd != null)
-        {
-            Component c = (Component) this.wwd;
-            c.removeKeyListener(this);
-            c.removeMouseMotionListener(this);
-            c.removeMouseListener(this);
-            c.removeMouseWheelListener(this);
-            c.removeFocusListener(this);
-
-            if (this.selectListener != null)
-                this.wwd.removeSelectListener(this.selectListener);
-
-            if (this.wwd.getSceneController() != null)
-                this.wwd.getSceneController().removePropertyChangeListener(AVKey.VIEW, this);
-        }
-
-        this.wwd = newWorldWindow;
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        this.wwd.getView().getViewInputHandler().setWorldWindow(this.wwd);
-        Component c = (java.awt.Component) this.wwd;
-        c.addKeyListener(this);
-        c.addMouseMotionListener(this);
-        c.addMouseListener(this);
-        c.addMouseWheelListener(this);
-        c.addFocusListener(this);
-
-        this.selectListener = new SelectListener()
-        {
-            public void selected(SelectEvent event)
-            {
-                if (event.getEventAction().equals(SelectEvent.ROLLOVER))
-                {
-                    doHover(true);
-                }
-            }
-        };
-        this.wwd.addSelectListener(this.selectListener);
-
-        if (this.wwd.getSceneController() != null)
-            this.wwd.getSceneController().addPropertyChangeListener(AVKey.VIEW, this);
-    }
-
-    public void removeHoverSelectListener()
-    {
-        hoverTimer.stop();
-        hoverTimer = null;
-        this.wwd.removeSelectListener(selectListener);
-    }
-
-    public WorldWindow getEventSource()
-    {
-        return this.wwd;
-    }
-
-    public void setHoverDelay(int delay)
-    {
-        this.hoverTimer.setDelay(delay);
-    }
-
-    public int getHoverDelay()
-    {
-        return this.hoverTimer.getDelay();
-    }
-
-    public boolean isSmoothViewChanges()
-    {
-        return this.wwd.getView().getViewInputHandler().isEnableSmoothing();
-    }
-
-    public void setSmoothViewChanges(boolean smoothViewChanges)
-    {
-        this.wwd.getView().getViewInputHandler().setEnableSmoothing(smoothViewChanges);
-    }
-
-    public boolean isLockViewHeading()
-    {
-        return this.wwd.getView().getViewInputHandler().isLockHeading();
-    }
-
-    public void setLockViewHeading(boolean lockHeading)
-    {
-        this.wwd.getView().getViewInputHandler().setLockHeading(lockHeading);
-    }
-
-    public boolean isStopViewOnFocusLost()
-    {
-        return this.wwd.getView().getViewInputHandler().isStopOnFocusLost();
-    }
-
-    public void setStopViewOnFocusLost(boolean stopView)
-    {
-        this.wwd.getView().getViewInputHandler().setStopOnFocusLost(stopView);
-    }
-
-    protected WorldWindow getWorldWindow()
-    {
-        return wwd;
-    }
-
-    protected Point getMousePoint()
-    {
-        return mousePoint;
-    }
-
-    protected void setMousePoint(Point mousePoint)
-    {
-        this.mousePoint = mousePoint;
-    }
-
-    protected boolean isHovering()
-    {
-        return isHovering;
-    }
-
-    protected void setHovering(boolean hovering)
-    {
-        isHovering = hovering;
-    }
-
-    protected PickedObjectList getHoverObjects()
-    {
-        return hoverObjects;
-    }
-
-    protected void setHoverObjects(PickedObjectList hoverObjects)
-    {
-        this.hoverObjects = hoverObjects;
-    }
-
-    protected PickedObjectList getObjectsAtButtonPress()
-    {
-        return objectsAtButtonPress;
-    }
-
-    protected void setObjectsAtButtonPress(PickedObjectList objectsAtButtonPress)
-    {
-        this.objectsAtButtonPress = objectsAtButtonPress;
-    }
-
-    public boolean isForceRedrawOnMousePressed()
-    {
-        return forceRedrawOnMousePressed;
-    }
-
-    public void setForceRedrawOnMousePressed(boolean forceRedrawOnMousePressed)
-    {
-        this.forceRedrawOnMousePressed = forceRedrawOnMousePressed;
-    }
-/*
-    public ViewInputHandler getViewInputHandler()
-    {
-        return viewInputHandler;
-    }
-    */
-
-    private void keyMethod(KeyEvent keyEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (keyEvent == null)
-        {
-            return;
-        }
-
-        this.callKeyTypedListeners(keyEvent);
-
-        if (!keyEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().keyTyped(keyEvent);
-        }
-    }
-
-    public void keyTyped(KeyEvent keyEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (keyEvent == null)
-        {
-            return;
-        }
-
-        this.callKeyTypedListeners(keyEvent);
-
-        if (!keyEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().keyTyped(keyEvent);
-        }
-    }
-
-    public void keyPressed(KeyEvent keyEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (keyEvent == null)
-        {
-            return;
-        }
-
-        this.callKeyPressedListeners(keyEvent);
-
-        if (!keyEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().keyPressed(keyEvent);
-        }
-    }
-
-    public void keyReleased(KeyEvent keyEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (keyEvent == null)
-        {
-            return;
-        }
-
-        this.callKeyReleasedListeners(keyEvent);
-
-        if (!keyEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().keyReleased(keyEvent);
-        }
-    }
-
-    public void mouseClicked(final MouseEvent mouseEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (this.wwd.getView() == null)
-        {
-            return;
-        }
-
-        if (mouseEvent == null)
-        {
-            return;
-        }
-
-        PickedObjectList pickedObjects = this.wwd.getObjectsAtCurrentPosition();
-
-        this.callMouseClickedListeners(mouseEvent);
-
-        if (pickedObjects != null && pickedObjects.getTopPickedObject() != null
-            && !pickedObjects.getTopPickedObject().isTerrain())
-        {
-            // Something is under the cursor, so it's deemed "selected".
-            if (MouseEvent.BUTTON1 == mouseEvent.getButton())
-            {
-                if (mouseEvent.getClickCount() <= 1)
-                {
-                    this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.LEFT_CLICK,
-                        mouseEvent, pickedObjects));
-                }
-                else
-                {
-                    this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.LEFT_DOUBLE_CLICK,
-                        mouseEvent, pickedObjects));
-                }
-            }
-            else if (MouseEvent.BUTTON3 == mouseEvent.getButton())
-            {
-                this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.RIGHT_CLICK,
-                    mouseEvent, pickedObjects));
-            }
-
-            this.wwd.getView().firePropertyChange(AVKey.VIEW, null, this.wwd.getView());
-        }
-        else
-        {
-            if (!mouseEvent.isConsumed())
-            {
-                this.wwd.getView().getViewInputHandler().mouseClicked(mouseEvent);
-            }
-        }
-    }
-
-    public void mousePressed(MouseEvent mouseEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (mouseEvent == null)
-        {
-            return;
-        }
-
-        // Determine if the mouse point has changed since the last mouse move event. This can happen if user switches to
-        // another window, moves the mouse, and then switches back to the World Wind window.
-        boolean mousePointChanged = !mouseEvent.getPoint().equals(this.mousePoint);
-
-        this.mousePoint = mouseEvent.getPoint();
-        this.cancelHover();
-        this.cancelDrag();
-
-        // If the mouse point has changed then we need to set a new pick point, and redraw the scene because the current
-        // picked object list may not reflect the current mouse position.
-        if (mousePointChanged && this.wwd.getSceneController() != null)
-            this.wwd.getSceneController().setPickPoint(this.mousePoint);
-
-        if (this.isForceRedrawOnMousePressed() || mousePointChanged)
-            this.wwd.redrawNow();
-
-        this.objectsAtButtonPress = this.wwd.getObjectsAtCurrentPosition();
-
-        this.callMousePressedListeners(mouseEvent);
-
-        if (this.objectsAtButtonPress != null && objectsAtButtonPress.getTopPickedObject() != null
-            && !this.objectsAtButtonPress.getTopPickedObject().isTerrain())
-        {
-            // Something is under the cursor, so it's deemed "selected".
-            if (MouseEvent.BUTTON1 == mouseEvent.getButton())
-            {
-                this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.LEFT_PRESS,
-                    mouseEvent, this.objectsAtButtonPress));
-            }
-            else if (MouseEvent.BUTTON3 == mouseEvent.getButton())
-            {
-                this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.RIGHT_PRESS,
-                    mouseEvent, this.objectsAtButtonPress));
-            }
-
-            // Initiate a repaint.
-            this.wwd.getView().firePropertyChange(AVKey.VIEW, null, this.wwd.getView());
-        }
-
-        if (!mouseEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().mousePressed(mouseEvent);
-        }
-
-        // GLJPanel does not take keyboard focus when the user clicks on it, thereby suppressing key events normally
-        // sent to the InputHandler. This workaround calls requestFocus on the GLJPanel each time the user presses the
-        // mouse on the GLJPanel, causing GLJPanel to take the focus in the same manner as GLCanvas. Note that focus is
-        // passed only when the user clicks the primary mouse button. See
-        // http://issues.worldwind.arc.nasa.gov/jira/browse/WWJ-272.
-        if (MouseEvent.BUTTON1 == mouseEvent.getButton() && this.wwd instanceof GLJPanel)
-        {
-            ((GLJPanel) this.wwd).requestFocusInWindow();
-        }
-    }
-
-    public void mouseReleased(MouseEvent mouseEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (mouseEvent == null)
-        {
-            return;
-        }
-
-        this.mousePoint = mouseEvent.getPoint();
-        this.callMouseReleasedListeners(mouseEvent);
-        if (!mouseEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().mouseReleased(mouseEvent);
-        }
-        this.doHover(true);
-        this.cancelDrag();
-    }
-
-    public void mouseEntered(MouseEvent mouseEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (mouseEvent == null)
-        {
-            return;
-        }
-
-        this.callMouseEnteredListeners(mouseEvent);
-        this.wwd.getView().getViewInputHandler().mouseEntered(mouseEvent);
-        this.cancelHover();
-        this.cancelDrag();
-    }
-
-    public void mouseExited(MouseEvent mouseEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (mouseEvent == null)
-        {
-            return;
-        }
-
-        this.callMouseExitedListeners(mouseEvent);
-        this.wwd.getView().getViewInputHandler().mouseExited(mouseEvent);
-
-        // Enqueue a redraw to update the current position and selection.
-        if (this.wwd.getSceneController() != null)
-        {
-            this.wwd.getSceneController().setPickPoint(null);
-            this.wwd.redraw();
-        }
-
-        this.cancelHover();
-        this.cancelDrag();
-    }
-
-    public void mouseDragged(MouseEvent mouseEvent)
-    {
-        if (this.wwd == null)
-            return;
-
-        if (mouseEvent == null)
-        {
-            return;
-        }
-
-        Point prevMousePoint = this.mousePoint;
-        this.mousePoint = mouseEvent.getPoint();
-        this.callMouseDraggedListeners(mouseEvent);
-
-        if ((MouseEvent.BUTTON1_DOWN_MASK & mouseEvent.getModifiersEx()) != 0)
-        {
-            PickedObjectList pickedObjects = this.objectsAtButtonPress;
-            if (this.isDragging
-                || (pickedObjects != null && pickedObjects.getTopPickedObject() != null
-                && !pickedObjects.getTopPickedObject().isTerrain()))
-            {
-                this.isDragging = true;
-                DragSelectEvent selectEvent = new DragSelectEvent(this.wwd, SelectEvent.DRAG, mouseEvent, pickedObjects,
-                    prevMousePoint);
-                this.callSelectListeners(selectEvent);
-
-                // If no listener consumed the event, then cancel the drag.
-                if (!selectEvent.isConsumed())
-                    this.cancelDrag();
-            }
-        }
-
-        if (!this.isDragging)
-        {
-            if (!mouseEvent.isConsumed())
-            {
-                this.wwd.getView().getViewInputHandler().mouseDragged(mouseEvent);
-            }
-        }
-
-        // Redraw to update the current position and selection.
-        if (this.wwd.getSceneController() != null)
-        {
-            this.wwd.getSceneController().setPickPoint(mouseEvent.getPoint());
-            this.wwd.redraw();
-        }
-    }
-
-    public void mouseMoved(MouseEvent mouseEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (mouseEvent == null)
-        {
-            return;
-        }
-
-        this.mousePoint = mouseEvent.getPoint();
-        this.callMouseMovedListeners(mouseEvent);
-
-        if (!mouseEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().mouseMoved(mouseEvent);
-        }
-
-        // Redraw to update the current position and selection.
-        if (this.wwd.getSceneController() != null)
-        {
-            this.wwd.getSceneController().setPickPoint(mouseEvent.getPoint());
-            this.wwd.redraw();
-        }
-    }
-
-    public void mouseWheelMoved(MouseWheelEvent mouseWheelEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (mouseWheelEvent == null)
-        {
-            return;
-        }
-
-        this.callMouseWheelMovedListeners(mouseWheelEvent);
-
-        if (!mouseWheelEvent.isConsumed())
-            this.wwd.getView().getViewInputHandler().mouseWheelMoved(mouseWheelEvent);
-    }
-
-    public void focusGained(FocusEvent focusEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (focusEvent == null)
-        {
-            return;
-        }
-
-        this.wwd.getView().getViewInputHandler().focusGained(focusEvent);
-    }
-
-    public void focusLost(FocusEvent focusEvent)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (focusEvent == null)
-        {
-            return;
-        }
-
-        this.wwd.getView().getViewInputHandler().focusLost(focusEvent);
-    }
-
-    protected boolean isPickListEmpty(PickedObjectList pickList)
-    {
-        return pickList == null || pickList.size() < 1;
-    }
-
-    protected void doHover(boolean reset)
-    {
-        PickedObjectList pickedObjects = this.wwd.getObjectsAtCurrentPosition();
-        if (!(this.isPickListEmpty(this.hoverObjects) || this.isPickListEmpty(pickedObjects)))
-        {
-            PickedObject hover = this.hoverObjects.getTopPickedObject();
-            PickedObject last = pickedObjects.getTopPickedObject();
-
-            Object oh = hover == null ? null : hover.getObject() != null ? hover.getObject() :
-                hover.getParentLayer() != null ? hover.getParentLayer() : null;
-            Object ol = last == null ? null : last.getObject() != null ? last.getObject() :
-                last.getParentLayer() != null ? last.getParentLayer() : null;
-            if (oh != null && ol != null && oh.equals(ol))
-            {
-                return; // object picked is the hover object. don't do anything but wait for the timer to expire.
-            }
-        }
-
-        this.cancelHover();
-
-        if (!reset)
-        {
-            return;
-        }
-
-        if ((pickedObjects != null)
-            && (pickedObjects.getTopObject() != null)
-            && pickedObjects.getTopPickedObject().isTerrain())
-        {
-            return;
-        }
-
-        this.hoverObjects = pickedObjects;
-        this.hoverTimer.restart();
-    }
-
-    protected void cancelHover()
-    {
-        if (this.isHovering)
-        {
-            this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.HOVER, this.mousePoint, null));
-        }
-
-        this.isHovering = false;
-        this.hoverObjects = null;
-        this.hoverTimer.stop();
-    }
-
-    protected boolean pickMatches(PickedObjectList pickedObjects)
-    {
-        if (this.isPickListEmpty(this.wwd.getObjectsAtCurrentPosition()) || this.isPickListEmpty(pickedObjects))
-        {
-            return false;
-        }
-
-        PickedObject lastTop = this.wwd.getObjectsAtCurrentPosition().getTopPickedObject();
-
-        if (null != lastTop && lastTop.isTerrain())
-        {
-            return false;
-        }
-
-        PickedObject newTop = pickedObjects.getTopPickedObject();
-        //noinspection SimplifiableIfStatement
-        if (lastTop == null || newTop == null || lastTop.getObject() == null || newTop.getObject() == null)
-        {
-            return false;
-        }
-
-        return lastTop.getObject().equals(newTop.getObject());
-    }
-
-    protected void cancelDrag()
-    {
-        if (this.isDragging)
-        {
-            this.callSelectListeners(new DragSelectEvent(this.wwd, SelectEvent.DRAG_END, null,
-                this.objectsAtButtonPress, this.mousePoint));
-        }
-
-        this.isDragging = false;
-    }
-
-    public void addSelectListener(SelectListener listener)
-    {
-        this.eventListeners.add(SelectListener.class, listener);
-    }
-
-    public void removeSelectListener(SelectListener listener)
-    {
-        this.eventListeners.remove(SelectListener.class, listener);
-    }
-
-    protected void callSelectListeners(SelectEvent event)
-    {
-        for (SelectListener listener : this.eventListeners.getListeners(SelectListener.class))
-        {
-            listener.selected(event);
-        }
-    }
-
-    public void addKeyListener(KeyListener listener)
-    {
-        this.eventListeners.add(KeyListener.class, listener);
-    }
-
-    public void removeKeyListener(KeyListener listener)
-    {
-        this.eventListeners.remove(KeyListener.class, listener);
-    }
-
-    public void addMouseListener(MouseListener listener)
-    {
-        this.eventListeners.add(MouseListener.class, listener);
-    }
-
-    public void removeMouseListener(MouseListener listener)
-    {
-        this.eventListeners.remove(MouseListener.class, listener);
-    }
-
-    public void addMouseMotionListener(MouseMotionListener listener)
-    {
-        this.eventListeners.add(MouseMotionListener.class, listener);
-    }
-
-    public void removeMouseMotionListener(MouseMotionListener listener)
-    {
-        this.eventListeners.remove(MouseMotionListener.class, listener);
-    }
-
-    public void addMouseWheelListener(MouseWheelListener listener)
-    {
-        this.eventListeners.add(MouseWheelListener.class, listener);
-    }
-
-    public void removeMouseWheelListener(MouseWheelListener listener)
-    {
-        this.eventListeners.remove(MouseWheelListener.class, listener);
-    }
-
-    protected void callKeyPressedListeners(KeyEvent event)
-    {
-        for (KeyListener listener : this.eventListeners.getListeners(KeyListener.class))
-        {
-            listener.keyPressed(event);
-        }
-    }
-
-    protected void callKeyReleasedListeners(KeyEvent event)
-    {
-        for (KeyListener listener : this.eventListeners.getListeners(KeyListener.class))
-        {
-            listener.keyReleased(event);
-        }
-    }
-
-    protected void callKeyTypedListeners(KeyEvent event)
-    {
-        for (KeyListener listener : this.eventListeners.getListeners(KeyListener.class))
-        {
-            listener.keyTyped(event);
-        }
-    }
-
-    protected void callMousePressedListeners(MouseEvent event)
-    {
-        for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))
-        {
-            listener.mousePressed(event);
-        }
-    }
-
-    protected void callMouseReleasedListeners(MouseEvent event)
-    {
-        for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))
-        {
-            listener.mouseReleased(event);
-        }
-    }
-
-    protected void callMouseClickedListeners(MouseEvent event)
-    {
-        for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))
-        {
-            listener.mouseClicked(event);
-        }
-    }
-
-    protected void callMouseDraggedListeners(MouseEvent event)
-    {
-        for (MouseMotionListener listener : this.eventListeners.getListeners(MouseMotionListener.class))
-        {
-            listener.mouseDragged(event);
-        }
-    }
-
-    protected void callMouseMovedListeners(MouseEvent event)
-    {
-        for (MouseMotionListener listener : this.eventListeners.getListeners(MouseMotionListener.class))
-        {
-            listener.mouseMoved(event);
-        }
-    }
-
-    protected void callMouseWheelMovedListeners(MouseWheelEvent event)
-    {
-        for (MouseWheelListener listener : this.eventListeners.getListeners(MouseWheelListener.class))
-        {
-            listener.mouseWheelMoved(event);
-        }
-    }
-
-    protected void callMouseEnteredListeners(MouseEvent event)
-    {
-        for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))
-        {
-            listener.mouseEntered(event);
-        }
-    }
-
-    protected void callMouseExitedListeners(MouseEvent event)
-    {
-        for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))
-        {
-            listener.mouseExited(event);
-        }
-    }
-
-    public void propertyChange(PropertyChangeEvent event)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (this.wwd.getView() == null)
-        {
-            return;
-        }
-
-        if (event == null)
-        {
-            return;
-        }
-
-        if (event.getPropertyName().equals(AVKey.VIEW) &&
-            (event.getSource() == this.getWorldWindow().getSceneController()))
-        {
-            this.wwd.getView().getViewInputHandler().setWorldWindow(this.wwd);
-        }
-    }
-}

From 95d29ea5d85137420840ae0d5734060e0f4d1d53 Mon Sep 17 00:00:00 2001
From: GabrielDS <gabriel.santosti01@gmail.com>
Date: Wed, 19 Jul 2017 20:05:52 -0300
Subject: [PATCH 6/9] Add switch case to the key method

---
 .../nasa/worldwind/awt/AWTInputHandler.java   | 908 ++++++++++++++++++
 1 file changed, 908 insertions(+)
 create mode 100644 src/gov/nasa/worldwind/awt/AWTInputHandler.java

diff --git a/src/gov/nasa/worldwind/awt/AWTInputHandler.java b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
new file mode 100644
index 0000000000..cb1f813377
--- /dev/null
+++ b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
@@ -0,0 +1,908 @@
+/*
+ * Copyright (C) 2012 United States Government as represented by the Administrator of the
+ * National Aeronautics and Space Administration.
+ * All Rights Reserved.
+ */
+package gov.nasa.worldwind.awt;
+
+import gov.nasa.worldwind.*;
+import gov.nasa.worldwind.avlist.AVKey;
+import gov.nasa.worldwind.event.*;
+import gov.nasa.worldwind.pick.*;
+import gov.nasa.worldwind.util.Logging;
+
+import javax.media.opengl.awt.GLJPanel;
+import javax.swing.event.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.beans.PropertyChangeEvent;
+
+/**
+ * @author tag
+ * @version $Id: AWTInputHandler.java 2258 2014-08-22 22:08:33Z dcollins $
+ */
+public class AWTInputHandler extends WWObjectImpl
+    implements KeyListener, MouseListener, MouseMotionListener, MouseWheelListener, FocusListener, InputHandler,
+    Disposable
+{
+    protected WorldWindow wwd = null;
+    protected EventListenerList eventListeners = new EventListenerList();
+    protected java.awt.Point mousePoint = new java.awt.Point();
+    protected PickedObjectList hoverObjects;
+    protected PickedObjectList objectsAtButtonPress;
+    protected boolean isHovering = false;
+    protected boolean isDragging = false;
+    protected boolean forceRedrawOnMousePressed = Configuration.getBooleanValue(AVKey.REDRAW_ON_MOUSE_PRESSED, false);
+    protected javax.swing.Timer hoverTimer = new javax.swing.Timer(600, new ActionListener()
+    {
+        public void actionPerformed(ActionEvent actionEvent)
+        {
+            if (AWTInputHandler.this.pickMatches(AWTInputHandler.this.hoverObjects))
+            {
+                AWTInputHandler.this.isHovering = true;
+                AWTInputHandler.this.callSelectListeners(new SelectEvent(AWTInputHandler.this.wwd,
+                    SelectEvent.HOVER, mousePoint, AWTInputHandler.this.hoverObjects));
+                AWTInputHandler.this.hoverTimer.stop();
+            }
+        }
+    });
+    // Delegate handler for View.
+    protected SelectListener selectListener;
+
+    public AWTInputHandler()
+    {
+    }
+
+    public void dispose()
+    {
+        this.hoverTimer.stop();
+        this.hoverTimer = null;
+
+        this.setEventSource(null);
+
+        if (this.hoverObjects != null)
+            this.hoverObjects.clear();
+        this.hoverObjects = null;
+
+        if (this.objectsAtButtonPress != null)
+            this.objectsAtButtonPress.clear();
+        this.objectsAtButtonPress = null;
+    }
+
+    public void setEventSource(WorldWindow newWorldWindow)
+    {
+        if (newWorldWindow != null && !(newWorldWindow instanceof Component))
+        {
+            String message = Logging.getMessage("Awt.AWTInputHandler.EventSourceNotAComponent");
+            Logging.logger().finer(message);
+            throw new IllegalArgumentException(message);
+        }
+
+        if (newWorldWindow == this.wwd)
+        {
+            return;
+        }
+
+        this.eventListeners = new EventListenerList(); // make orphans of listener references
+
+        if (this.wwd != null)
+        {
+            Component c = (Component) this.wwd;
+            c.removeKeyListener(this);
+            c.removeMouseMotionListener(this);
+            c.removeMouseListener(this);
+            c.removeMouseWheelListener(this);
+            c.removeFocusListener(this);
+
+            if (this.selectListener != null)
+                this.wwd.removeSelectListener(this.selectListener);
+
+            if (this.wwd.getSceneController() != null)
+                this.wwd.getSceneController().removePropertyChangeListener(AVKey.VIEW, this);
+        }
+
+        this.wwd = newWorldWindow;
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        this.wwd.getView().getViewInputHandler().setWorldWindow(this.wwd);
+        Component c = (java.awt.Component) this.wwd;
+        c.addKeyListener(this);
+        c.addMouseMotionListener(this);
+        c.addMouseListener(this);
+        c.addMouseWheelListener(this);
+        c.addFocusListener(this);
+
+        this.selectListener = new SelectListener()
+        {
+            public void selected(SelectEvent event)
+            {
+                if (event.getEventAction().equals(SelectEvent.ROLLOVER))
+                {
+                    doHover(true);
+                }
+            }
+        };
+        this.wwd.addSelectListener(this.selectListener);
+
+        if (this.wwd.getSceneController() != null)
+            this.wwd.getSceneController().addPropertyChangeListener(AVKey.VIEW, this);
+    }
+
+    public void removeHoverSelectListener()
+    {
+        hoverTimer.stop();
+        hoverTimer = null;
+        this.wwd.removeSelectListener(selectListener);
+    }
+
+    public WorldWindow getEventSource()
+    {
+        return this.wwd;
+    }
+
+    public void setHoverDelay(int delay)
+    {
+        this.hoverTimer.setDelay(delay);
+    }
+
+    public int getHoverDelay()
+    {
+        return this.hoverTimer.getDelay();
+    }
+
+    public boolean isSmoothViewChanges()
+    {
+        return this.wwd.getView().getViewInputHandler().isEnableSmoothing();
+    }
+
+    public void setSmoothViewChanges(boolean smoothViewChanges)
+    {
+        this.wwd.getView().getViewInputHandler().setEnableSmoothing(smoothViewChanges);
+    }
+
+    public boolean isLockViewHeading()
+    {
+        return this.wwd.getView().getViewInputHandler().isLockHeading();
+    }
+
+    public void setLockViewHeading(boolean lockHeading)
+    {
+        this.wwd.getView().getViewInputHandler().setLockHeading(lockHeading);
+    }
+
+    public boolean isStopViewOnFocusLost()
+    {
+        return this.wwd.getView().getViewInputHandler().isStopOnFocusLost();
+    }
+
+    public void setStopViewOnFocusLost(boolean stopView)
+    {
+        this.wwd.getView().getViewInputHandler().setStopOnFocusLost(stopView);
+    }
+
+    protected WorldWindow getWorldWindow()
+    {
+        return wwd;
+    }
+
+    protected Point getMousePoint()
+    {
+        return mousePoint;
+    }
+
+    protected void setMousePoint(Point mousePoint)
+    {
+        this.mousePoint = mousePoint;
+    }
+
+    protected boolean isHovering()
+    {
+        return isHovering;
+    }
+
+    protected void setHovering(boolean hovering)
+    {
+        isHovering = hovering;
+    }
+
+    protected PickedObjectList getHoverObjects()
+    {
+        return hoverObjects;
+    }
+
+    protected void setHoverObjects(PickedObjectList hoverObjects)
+    {
+        this.hoverObjects = hoverObjects;
+    }
+
+    protected PickedObjectList getObjectsAtButtonPress()
+    {
+        return objectsAtButtonPress;
+    }
+
+    protected void setObjectsAtButtonPress(PickedObjectList objectsAtButtonPress)
+    {
+        this.objectsAtButtonPress = objectsAtButtonPress;
+    }
+
+    public boolean isForceRedrawOnMousePressed()
+    {
+        return forceRedrawOnMousePressed;
+    }
+
+    public void setForceRedrawOnMousePressed(boolean forceRedrawOnMousePressed)
+    {
+        this.forceRedrawOnMousePressed = forceRedrawOnMousePressed;
+    }
+/*
+    public ViewInputHandler getViewInputHandler()
+    {
+        return viewInputHandler;
+    }
+    */
+
+    private void keyMethod(KeyEvent keyEvent, int caseNumber)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (keyEvent == null)
+        {
+            return;
+        }
+
+        switch (caseNumber)
+        {
+            case 1:
+                this.callKeyTypedListeners(keyEvent);
+                break;
+            case 2:
+                this.callKeyPressedListeners(keyEvent);
+                break;
+            case 3:
+                this.callKeyReleasedListeners(keyEvent);
+                break;
+        }
+
+
+        if (!keyEvent.isConsumed())
+        {
+            this.wwd.getView().getViewInputHandler().keyTyped(keyEvent);
+        }
+    }
+
+    public void keyTyped(KeyEvent keyEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (keyEvent == null)
+        {
+            return;
+        }
+
+        this.callKeyTypedListeners(keyEvent);
+
+        if (!keyEvent.isConsumed())
+        {
+            this.wwd.getView().getViewInputHandler().keyTyped(keyEvent);
+        }
+    }
+
+    public void keyPressed(KeyEvent keyEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (keyEvent == null)
+        {
+            return;
+        }
+
+
+
+        if (!keyEvent.isConsumed())
+        {
+            this.wwd.getView().getViewInputHandler().keyPressed(keyEvent);
+        }
+    }
+
+    public void keyReleased(KeyEvent keyEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (keyEvent == null)
+        {
+            return;
+        }
+
+
+
+        if (!keyEvent.isConsumed())
+        {
+            this.wwd.getView().getViewInputHandler().keyReleased(keyEvent);
+        }
+    }
+
+    public void mouseClicked(final MouseEvent mouseEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (this.wwd.getView() == null)
+        {
+            return;
+        }
+
+        if (mouseEvent == null)
+        {
+            return;
+        }
+
+        PickedObjectList pickedObjects = this.wwd.getObjectsAtCurrentPosition();
+
+        this.callMouseClickedListeners(mouseEvent);
+
+        if (pickedObjects != null && pickedObjects.getTopPickedObject() != null
+            && !pickedObjects.getTopPickedObject().isTerrain())
+        {
+            // Something is under the cursor, so it's deemed "selected".
+            if (MouseEvent.BUTTON1 == mouseEvent.getButton())
+            {
+                if (mouseEvent.getClickCount() <= 1)
+                {
+                    this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.LEFT_CLICK,
+                        mouseEvent, pickedObjects));
+                }
+                else
+                {
+                    this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.LEFT_DOUBLE_CLICK,
+                        mouseEvent, pickedObjects));
+                }
+            }
+            else if (MouseEvent.BUTTON3 == mouseEvent.getButton())
+            {
+                this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.RIGHT_CLICK,
+                    mouseEvent, pickedObjects));
+            }
+
+            this.wwd.getView().firePropertyChange(AVKey.VIEW, null, this.wwd.getView());
+        }
+        else
+        {
+            if (!mouseEvent.isConsumed())
+            {
+                this.wwd.getView().getViewInputHandler().mouseClicked(mouseEvent);
+            }
+        }
+    }
+
+    public void mousePressed(MouseEvent mouseEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (mouseEvent == null)
+        {
+            return;
+        }
+
+        // Determine if the mouse point has changed since the last mouse move event. This can happen if user switches to
+        // another window, moves the mouse, and then switches back to the World Wind window.
+        boolean mousePointChanged = !mouseEvent.getPoint().equals(this.mousePoint);
+
+        this.mousePoint = mouseEvent.getPoint();
+        this.cancelHover();
+        this.cancelDrag();
+
+        // If the mouse point has changed then we need to set a new pick point, and redraw the scene because the current
+        // picked object list may not reflect the current mouse position.
+        if (mousePointChanged && this.wwd.getSceneController() != null)
+            this.wwd.getSceneController().setPickPoint(this.mousePoint);
+
+        if (this.isForceRedrawOnMousePressed() || mousePointChanged)
+            this.wwd.redrawNow();
+
+        this.objectsAtButtonPress = this.wwd.getObjectsAtCurrentPosition();
+
+        this.callMousePressedListeners(mouseEvent);
+
+        if (this.objectsAtButtonPress != null && objectsAtButtonPress.getTopPickedObject() != null
+            && !this.objectsAtButtonPress.getTopPickedObject().isTerrain())
+        {
+            // Something is under the cursor, so it's deemed "selected".
+            if (MouseEvent.BUTTON1 == mouseEvent.getButton())
+            {
+                this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.LEFT_PRESS,
+                    mouseEvent, this.objectsAtButtonPress));
+            }
+            else if (MouseEvent.BUTTON3 == mouseEvent.getButton())
+            {
+                this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.RIGHT_PRESS,
+                    mouseEvent, this.objectsAtButtonPress));
+            }
+
+            // Initiate a repaint.
+            this.wwd.getView().firePropertyChange(AVKey.VIEW, null, this.wwd.getView());
+        }
+
+        if (!mouseEvent.isConsumed())
+        {
+            this.wwd.getView().getViewInputHandler().mousePressed(mouseEvent);
+        }
+
+        // GLJPanel does not take keyboard focus when the user clicks on it, thereby suppressing key events normally
+        // sent to the InputHandler. This workaround calls requestFocus on the GLJPanel each time the user presses the
+        // mouse on the GLJPanel, causing GLJPanel to take the focus in the same manner as GLCanvas. Note that focus is
+        // passed only when the user clicks the primary mouse button. See
+        // http://issues.worldwind.arc.nasa.gov/jira/browse/WWJ-272.
+        if (MouseEvent.BUTTON1 == mouseEvent.getButton() && this.wwd instanceof GLJPanel)
+        {
+            ((GLJPanel) this.wwd).requestFocusInWindow();
+        }
+    }
+
+    public void mouseReleased(MouseEvent mouseEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (mouseEvent == null)
+        {
+            return;
+        }
+
+        this.mousePoint = mouseEvent.getPoint();
+        this.callMouseReleasedListeners(mouseEvent);
+        if (!mouseEvent.isConsumed())
+        {
+            this.wwd.getView().getViewInputHandler().mouseReleased(mouseEvent);
+        }
+        this.doHover(true);
+        this.cancelDrag();
+    }
+
+    public void mouseEntered(MouseEvent mouseEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (mouseEvent == null)
+        {
+            return;
+        }
+
+        this.callMouseEnteredListeners(mouseEvent);
+        this.wwd.getView().getViewInputHandler().mouseEntered(mouseEvent);
+        this.cancelHover();
+        this.cancelDrag();
+    }
+
+    public void mouseExited(MouseEvent mouseEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (mouseEvent == null)
+        {
+            return;
+        }
+
+        this.callMouseExitedListeners(mouseEvent);
+        this.wwd.getView().getViewInputHandler().mouseExited(mouseEvent);
+
+        // Enqueue a redraw to update the current position and selection.
+        if (this.wwd.getSceneController() != null)
+        {
+            this.wwd.getSceneController().setPickPoint(null);
+            this.wwd.redraw();
+        }
+
+        this.cancelHover();
+        this.cancelDrag();
+    }
+
+    public void mouseDragged(MouseEvent mouseEvent)
+    {
+        if (this.wwd == null)
+            return;
+
+        if (mouseEvent == null)
+        {
+            return;
+        }
+
+        Point prevMousePoint = this.mousePoint;
+        this.mousePoint = mouseEvent.getPoint();
+        this.callMouseDraggedListeners(mouseEvent);
+
+        if ((MouseEvent.BUTTON1_DOWN_MASK & mouseEvent.getModifiersEx()) != 0)
+        {
+            PickedObjectList pickedObjects = this.objectsAtButtonPress;
+            if (this.isDragging
+                || (pickedObjects != null && pickedObjects.getTopPickedObject() != null
+                && !pickedObjects.getTopPickedObject().isTerrain()))
+            {
+                this.isDragging = true;
+                DragSelectEvent selectEvent = new DragSelectEvent(this.wwd, SelectEvent.DRAG, mouseEvent, pickedObjects,
+                    prevMousePoint);
+                this.callSelectListeners(selectEvent);
+
+                // If no listener consumed the event, then cancel the drag.
+                if (!selectEvent.isConsumed())
+                    this.cancelDrag();
+            }
+        }
+
+        if (!this.isDragging)
+        {
+            if (!mouseEvent.isConsumed())
+            {
+                this.wwd.getView().getViewInputHandler().mouseDragged(mouseEvent);
+            }
+        }
+
+        // Redraw to update the current position and selection.
+        if (this.wwd.getSceneController() != null)
+        {
+            this.wwd.getSceneController().setPickPoint(mouseEvent.getPoint());
+            this.wwd.redraw();
+        }
+    }
+
+    public void mouseMoved(MouseEvent mouseEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (mouseEvent == null)
+        {
+            return;
+        }
+
+        this.mousePoint = mouseEvent.getPoint();
+        this.callMouseMovedListeners(mouseEvent);
+
+        if (!mouseEvent.isConsumed())
+        {
+            this.wwd.getView().getViewInputHandler().mouseMoved(mouseEvent);
+        }
+
+        // Redraw to update the current position and selection.
+        if (this.wwd.getSceneController() != null)
+        {
+            this.wwd.getSceneController().setPickPoint(mouseEvent.getPoint());
+            this.wwd.redraw();
+        }
+    }
+
+    public void mouseWheelMoved(MouseWheelEvent mouseWheelEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (mouseWheelEvent == null)
+        {
+            return;
+        }
+
+        this.callMouseWheelMovedListeners(mouseWheelEvent);
+
+        if (!mouseWheelEvent.isConsumed())
+            this.wwd.getView().getViewInputHandler().mouseWheelMoved(mouseWheelEvent);
+    }
+
+    public void focusGained(FocusEvent focusEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (focusEvent == null)
+        {
+            return;
+        }
+
+        this.wwd.getView().getViewInputHandler().focusGained(focusEvent);
+    }
+
+    public void focusLost(FocusEvent focusEvent)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (focusEvent == null)
+        {
+            return;
+        }
+
+        this.wwd.getView().getViewInputHandler().focusLost(focusEvent);
+    }
+
+    protected boolean isPickListEmpty(PickedObjectList pickList)
+    {
+        return pickList == null || pickList.size() < 1;
+    }
+
+    protected void doHover(boolean reset)
+    {
+        PickedObjectList pickedObjects = this.wwd.getObjectsAtCurrentPosition();
+        if (!(this.isPickListEmpty(this.hoverObjects) || this.isPickListEmpty(pickedObjects)))
+        {
+            PickedObject hover = this.hoverObjects.getTopPickedObject();
+            PickedObject last = pickedObjects.getTopPickedObject();
+
+            Object oh = hover == null ? null : hover.getObject() != null ? hover.getObject() :
+                hover.getParentLayer() != null ? hover.getParentLayer() : null;
+            Object ol = last == null ? null : last.getObject() != null ? last.getObject() :
+                last.getParentLayer() != null ? last.getParentLayer() : null;
+            if (oh != null && ol != null && oh.equals(ol))
+            {
+                return; // object picked is the hover object. don't do anything but wait for the timer to expire.
+            }
+        }
+
+        this.cancelHover();
+
+        if (!reset)
+        {
+            return;
+        }
+
+        if ((pickedObjects != null)
+            && (pickedObjects.getTopObject() != null)
+            && pickedObjects.getTopPickedObject().isTerrain())
+        {
+            return;
+        }
+
+        this.hoverObjects = pickedObjects;
+        this.hoverTimer.restart();
+    }
+
+    protected void cancelHover()
+    {
+        if (this.isHovering)
+        {
+            this.callSelectListeners(new SelectEvent(this.wwd, SelectEvent.HOVER, this.mousePoint, null));
+        }
+
+        this.isHovering = false;
+        this.hoverObjects = null;
+        this.hoverTimer.stop();
+    }
+
+    protected boolean pickMatches(PickedObjectList pickedObjects)
+    {
+        if (this.isPickListEmpty(this.wwd.getObjectsAtCurrentPosition()) || this.isPickListEmpty(pickedObjects))
+        {
+            return false;
+        }
+
+        PickedObject lastTop = this.wwd.getObjectsAtCurrentPosition().getTopPickedObject();
+
+        if (null != lastTop && lastTop.isTerrain())
+        {
+            return false;
+        }
+
+        PickedObject newTop = pickedObjects.getTopPickedObject();
+        //noinspection SimplifiableIfStatement
+        if (lastTop == null || newTop == null || lastTop.getObject() == null || newTop.getObject() == null)
+        {
+            return false;
+        }
+
+        return lastTop.getObject().equals(newTop.getObject());
+    }
+
+    protected void cancelDrag()
+    {
+        if (this.isDragging)
+        {
+            this.callSelectListeners(new DragSelectEvent(this.wwd, SelectEvent.DRAG_END, null,
+                this.objectsAtButtonPress, this.mousePoint));
+        }
+
+        this.isDragging = false;
+    }
+
+    public void addSelectListener(SelectListener listener)
+    {
+        this.eventListeners.add(SelectListener.class, listener);
+    }
+
+    public void removeSelectListener(SelectListener listener)
+    {
+        this.eventListeners.remove(SelectListener.class, listener);
+    }
+
+    protected void callSelectListeners(SelectEvent event)
+    {
+        for (SelectListener listener : this.eventListeners.getListeners(SelectListener.class))
+        {
+            listener.selected(event);
+        }
+    }
+
+    public void addKeyListener(KeyListener listener)
+    {
+        this.eventListeners.add(KeyListener.class, listener);
+    }
+
+    public void removeKeyListener(KeyListener listener)
+    {
+        this.eventListeners.remove(KeyListener.class, listener);
+    }
+
+    public void addMouseListener(MouseListener listener)
+    {
+        this.eventListeners.add(MouseListener.class, listener);
+    }
+
+    public void removeMouseListener(MouseListener listener)
+    {
+        this.eventListeners.remove(MouseListener.class, listener);
+    }
+
+    public void addMouseMotionListener(MouseMotionListener listener)
+    {
+        this.eventListeners.add(MouseMotionListener.class, listener);
+    }
+
+    public void removeMouseMotionListener(MouseMotionListener listener)
+    {
+        this.eventListeners.remove(MouseMotionListener.class, listener);
+    }
+
+    public void addMouseWheelListener(MouseWheelListener listener)
+    {
+        this.eventListeners.add(MouseWheelListener.class, listener);
+    }
+
+    public void removeMouseWheelListener(MouseWheelListener listener)
+    {
+        this.eventListeners.remove(MouseWheelListener.class, listener);
+    }
+
+    protected void callKeyPressedListeners(KeyEvent event)
+    {
+        for (KeyListener listener : this.eventListeners.getListeners(KeyListener.class))
+        {
+            listener.keyPressed(event);
+        }
+    }
+
+    protected void callKeyReleasedListeners(KeyEvent event)
+    {
+        for (KeyListener listener : this.eventListeners.getListeners(KeyListener.class))
+        {
+            listener.keyReleased(event);
+        }
+    }
+
+    protected void callKeyTypedListeners(KeyEvent event)
+    {
+        for (KeyListener listener : this.eventListeners.getListeners(KeyListener.class))
+        {
+            listener.keyTyped(event);
+        }
+    }
+
+    protected void callMousePressedListeners(MouseEvent event)
+    {
+        for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))
+        {
+            listener.mousePressed(event);
+        }
+    }
+
+    protected void callMouseReleasedListeners(MouseEvent event)
+    {
+        for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))
+        {
+            listener.mouseReleased(event);
+        }
+    }
+
+    protected void callMouseClickedListeners(MouseEvent event)
+    {
+        for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))
+        {
+            listener.mouseClicked(event);
+        }
+    }
+
+    protected void callMouseDraggedListeners(MouseEvent event)
+    {
+        for (MouseMotionListener listener : this.eventListeners.getListeners(MouseMotionListener.class))
+        {
+            listener.mouseDragged(event);
+        }
+    }
+
+    protected void callMouseMovedListeners(MouseEvent event)
+    {
+        for (MouseMotionListener listener : this.eventListeners.getListeners(MouseMotionListener.class))
+        {
+            listener.mouseMoved(event);
+        }
+    }
+
+    protected void callMouseWheelMovedListeners(MouseWheelEvent event)
+    {
+        for (MouseWheelListener listener : this.eventListeners.getListeners(MouseWheelListener.class))
+        {
+            listener.mouseWheelMoved(event);
+        }
+    }
+
+    protected void callMouseEnteredListeners(MouseEvent event)
+    {
+        for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))
+        {
+            listener.mouseEntered(event);
+        }
+    }
+
+    protected void callMouseExitedListeners(MouseEvent event)
+    {
+        for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))
+        {
+            listener.mouseExited(event);
+        }
+    }
+
+    public void propertyChange(PropertyChangeEvent event)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (this.wwd.getView() == null)
+        {
+            return;
+        }
+
+        if (event == null)
+        {
+            return;
+        }
+
+        if (event.getPropertyName().equals(AVKey.VIEW) &&
+            (event.getSource() == this.getWorldWindow().getSceneController()))
+        {
+            this.wwd.getView().getViewInputHandler().setWorldWindow(this.wwd);
+        }
+    }
+}

From 2ce2cf54a5bd5bb5a3b33ba9879cd84901b5a008 Mon Sep 17 00:00:00 2001
From: GabrielDS <gabriel.santosti01@gmail.com>
Date: Wed, 19 Jul 2017 20:22:30 -0300
Subject: [PATCH 7/9] Finalize keyMethod

---
 .../nasa/worldwind/awt/AWTInputHandler.java    | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/gov/nasa/worldwind/awt/AWTInputHandler.java b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
index cb1f813377..fc671057c5 100644
--- a/src/gov/nasa/worldwind/awt/AWTInputHandler.java
+++ b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
@@ -260,20 +260,26 @@ private void keyMethod(KeyEvent keyEvent, int caseNumber)
         {
             case 1:
                 this.callKeyTypedListeners(keyEvent);
+                if (!keyEvent.isConsumed())
+                {
+                    this.wwd.getView().getViewInputHandler().keyTyped(keyEvent);
+                }
                 break;
             case 2:
                 this.callKeyPressedListeners(keyEvent);
+                if (!keyEvent.isConsumed())
+                {
+                    this.wwd.getView().getViewInputHandler().keyPressed(keyEvent);
+                }
                 break;
             case 3:
                 this.callKeyReleasedListeners(keyEvent);
+                if (!keyEvent.isConsumed())
+                {
+                    this.wwd.getView().getViewInputHandler().keyReleased(keyEvent);
+                }
                 break;
         }
-
-
-        if (!keyEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().keyTyped(keyEvent);
-        }
     }
 
     public void keyTyped(KeyEvent keyEvent)

From 809d3cb52c6af73e3762318d8c5ca07aed8b7732 Mon Sep 17 00:00:00 2001
From: GabrielDS <gabriel.santosti01@gmail.com>
Date: Wed, 19 Jul 2017 20:26:37 -0300
Subject: [PATCH 8/9] Change the unnecessary repetition of code to a method

---
 .../nasa/worldwind/awt/AWTInputHandler.java   | 51 ++-----------------
 1 file changed, 3 insertions(+), 48 deletions(-)

diff --git a/src/gov/nasa/worldwind/awt/AWTInputHandler.java b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
index fc671057c5..71f54a5f50 100644
--- a/src/gov/nasa/worldwind/awt/AWTInputHandler.java
+++ b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
@@ -284,62 +284,17 @@ private void keyMethod(KeyEvent keyEvent, int caseNumber)
 
     public void keyTyped(KeyEvent keyEvent)
     {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (keyEvent == null)
-        {
-            return;
-        }
-
-        this.callKeyTypedListeners(keyEvent);
-
-        if (!keyEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().keyTyped(keyEvent);
-        }
+        keyMethod(keyEvent, 1);
     }
 
     public void keyPressed(KeyEvent keyEvent)
     {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (keyEvent == null)
-        {
-            return;
-        }
-
-
-
-        if (!keyEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().keyPressed(keyEvent);
-        }
+        keyMethod(keyEvent, 2);
     }
 
     public void keyReleased(KeyEvent keyEvent)
     {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (keyEvent == null)
-        {
-            return;
-        }
-
-
-
-        if (!keyEvent.isConsumed())
-        {
-            this.wwd.getView().getViewInputHandler().keyReleased(keyEvent);
-        }
+         keyMethod(keyEvent, 3);
     }
 
     public void mouseClicked(final MouseEvent mouseEvent)

From d60ffc00ce1536f0c7f91b08a1e917510940acc7 Mon Sep 17 00:00:00 2001
From: GabrielDS <gabriel.santosti01@gmail.com>
Date: Wed, 19 Jul 2017 20:28:15 -0300
Subject: [PATCH 9/9] Change the local of the code

---
 .../nasa/worldwind/awt/AWTInputHandler.java   | 76 +++++++++----------
 1 file changed, 38 insertions(+), 38 deletions(-)

diff --git a/src/gov/nasa/worldwind/awt/AWTInputHandler.java b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
index 71f54a5f50..032a5e8d49 100644
--- a/src/gov/nasa/worldwind/awt/AWTInputHandler.java
+++ b/src/gov/nasa/worldwind/awt/AWTInputHandler.java
@@ -244,44 +244,6 @@ public ViewInputHandler getViewInputHandler()
     }
     */
 
-    private void keyMethod(KeyEvent keyEvent, int caseNumber)
-    {
-        if (this.wwd == null)
-        {
-            return;
-        }
-
-        if (keyEvent == null)
-        {
-            return;
-        }
-
-        switch (caseNumber)
-        {
-            case 1:
-                this.callKeyTypedListeners(keyEvent);
-                if (!keyEvent.isConsumed())
-                {
-                    this.wwd.getView().getViewInputHandler().keyTyped(keyEvent);
-                }
-                break;
-            case 2:
-                this.callKeyPressedListeners(keyEvent);
-                if (!keyEvent.isConsumed())
-                {
-                    this.wwd.getView().getViewInputHandler().keyPressed(keyEvent);
-                }
-                break;
-            case 3:
-                this.callKeyReleasedListeners(keyEvent);
-                if (!keyEvent.isConsumed())
-                {
-                    this.wwd.getView().getViewInputHandler().keyReleased(keyEvent);
-                }
-                break;
-        }
-    }
-
     public void keyTyped(KeyEvent keyEvent)
     {
         keyMethod(keyEvent, 1);
@@ -779,6 +741,44 @@ protected void callKeyTypedListeners(KeyEvent event)
         }
     }
 
+    private void keyMethod(KeyEvent keyEvent, int caseNumber)
+    {
+        if (this.wwd == null)
+        {
+            return;
+        }
+
+        if (keyEvent == null)
+        {
+            return;
+        }
+
+        switch (caseNumber)
+        {
+            case 1:
+                this.callKeyTypedListeners(keyEvent);
+                if (!keyEvent.isConsumed())
+                {
+                    this.wwd.getView().getViewInputHandler().keyTyped(keyEvent);
+                }
+                break;
+            case 2:
+                this.callKeyPressedListeners(keyEvent);
+                if (!keyEvent.isConsumed())
+                {
+                    this.wwd.getView().getViewInputHandler().keyPressed(keyEvent);
+                }
+                break;
+            case 3:
+                this.callKeyReleasedListeners(keyEvent);
+                if (!keyEvent.isConsumed())
+                {
+                    this.wwd.getView().getViewInputHandler().keyReleased(keyEvent);
+                }
+                break;
+        }
+    }
+
     protected void callMousePressedListeners(MouseEvent event)
     {
         for (MouseListener listener : this.eventListeners.getListeners(MouseListener.class))