Revision: 4589
          http://sourceforge.net/p/jump-pilot/code/4589
Author:   edso
Date:     2015-12-08 16:43:40 +0000 (Tue, 08 Dec 2015)
Log Message:
-----------
try to bugfix 
 "renaming layers or editing attributes in attribtab executes  
plugin/cursortool erronously via shortcut" 
and 
 "shortcuts Strg+X/C/V etc.  not working when editing layer names in 
TreeLayerNamePanel"

Modified Paths:
--------------
    core/trunk/ChangeLog
    core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerViewPanel.java
    core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java
    
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/AbstractCursorTool.java
    
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/MultiClickTool.java

Modified: core/trunk/ChangeLog
===================================================================
--- core/trunk/ChangeLog        2015-12-08 16:26:31 UTC (rev 4588)
+++ core/trunk/ChangeLog        2015-12-08 16:43:40 UTC (rev 4589)
@@ -1,5 +1,10 @@
 # for display continuity sake please use 2 spaces instead of tabs
 
+2015-12-08 ede
+  * bugfix "renaming layers or editing attributes in attribtab executes 
+    plugin/cursortool erronously via shortcut" and "shortcuts Strg+X/C/V etc.
+    not working when editing layer names in TreeLayerNamePanel"
+
 2015-12-06 mmichaud <m.michael.mich...@orange.fr>
   * Improved CutFeatureTool
   * add MakeValidPlugIn in Tools>Analysis to repair invalid geometries

Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerViewPanel.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerViewPanel.java     
2015-12-08 16:26:31 UTC (rev 4588)
+++ core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerViewPanel.java     
2015-12-08 16:43:40 UTC (rev 4589)
@@ -190,26 +190,30 @@
       });
       this.setLayout(borderLayout1);
 
+      final LayerViewPanel lvp = this;
       addMouseListener(new MouseAdapter() {
         public void mouseEntered(MouseEvent e) {
-          // Re-activate WorkbenchFrame. Otherwise, user may try
-          // entering
-          // a quasi-mode by pressing a modifier key -- nothing will
-          // happen because the
-          // WorkbenchFrame does not have focus. [Jon Aquino]
-          // JavaDoc for #toFront says some platforms will not
-          // activate the window.
-          // So use #requestFocus instead. [Jon Aquino 12/9/2003]
-          WorkbenchFrame workbenchFrame = getWorkBenchFrame();
-          // [mmichaud 2012-02-24] get rid of the focus problem between
-          // OpenJUMP and BeanshellEditor (bug #3487686)
-          Window focusedWindow = KeyboardFocusManager
-              .getCurrentKeyboardFocusManager().getFocusedWindow();
-          if (focusedWindow != workbenchFrame)
-            return;
-          if (workbenchFrame != null && !workbenchFrame.isActive()) {
-            workbenchFrame.requestFocus();
-          }
+          // cursor tools and other shortcutables depend 
+          // on properly focussed ui components
+          lvp.requestFocusInWindow();
+//          // Re-activate WorkbenchFrame. Otherwise, user may try
+//          // entering
+//          // a quasi-mode by pressing a modifier key -- nothing will
+//          // happen because the
+//          // WorkbenchFrame does not have focus. [Jon Aquino]
+//          // JavaDoc for #toFront says some platforms will not
+//          // activate the window.
+//          // So use #requestFocus instead. [Jon Aquino 12/9/2003]
+//          WorkbenchFrame workbenchFrame = getWorkBenchFrame();
+//          // [mmichaud 2012-02-24] get rid of the focus problem between
+//          // OpenJUMP and BeanshellEditor (bug #3487686)
+//          Window focusedWindow = KeyboardFocusManager
+//              .getCurrentKeyboardFocusManager().getFocusedWindow();
+//          if (focusedWindow != workbenchFrame)
+//            return;
+//          if (workbenchFrame != null && !workbenchFrame.isActive()) {
+//            workbenchFrame.requestFocus();
+//          }
         }
       });
 

Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java     
2015-12-08 16:26:31 UTC (rev 4588)
+++ core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java     
2015-12-08 16:43:40 UTC (rev 4589)
@@ -485,40 +485,49 @@
                 Component c = KeyboardFocusManager
                         .getCurrentKeyboardFocusManager().getFocusOwner();
                 // traverse through parents, see if we are in a valid one
-                boolean filter = false;
+                boolean valid = false;
                 while (c != null) {
-                    // System.out.println(c);
+                    //System.out.println(c.getClass());
 
-                    // ignore statuspanel, copy/paste is available via 
textfield
-                    // there
+                    // ignore statuspanel, 
+                    // copy/paste is available via textfield's own keyboard 
actions
                     if (c.equals(statusPanel)) {
                         break;
                     }
 
+                    // ignore LayerTree, we have currently no plugin w/ 
shortcuts doing
+                    // anything w/ it, preserving layer name editing shortcuts 
this way
+                    if (c instanceof TreeLayerNamePanel) {
+                      break;
+                    }
+
                     if (c instanceof TaskFrame
                             || (c instanceof ToolboxDialog && c
                                     .equals(EditingPlugIn.getInstance()
                                             .getToolbox()))
                             || c instanceof WorkbenchFrame) {
-                        filter = true;
+                        valid = true;
                         break;
                     }
 
                     // we treat windows and jinternalframes as our ultimate
-                    // parent
-                    // else pretty much everything would end up with
-                    // WorkbenchFrame
+                    // parent, as pretty much everything would end up with
+                    // WorkbenchFrame as parent in the end
                     if (c instanceof Window || c instanceof JInternalFrame)
                         break;
 
                     c = c.getParent();
                 }
 
-                // if we are not in one of the containers above we do not use
-                // global shortcuts
-                if (!filter)
-                    return false; // nothing dispatched
+                // if we are not in one of the containers above 
+                // we do not use global shortcuts
+                if (!valid) {
+                  return false; // nothing dispatched
+                }
 
+                // TODO: eventually the whole filtering above should be 
+                // moved into ShortcutPluginExecuteKeyListener where plugins
+                // define focussed ui components they feel responsible for
                 switch (e.getID()) {
                 case KeyEvent.KEY_PRESSED:
                     shortcutListener.keyPressed(e);

Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/AbstractCursorTool.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/AbstractCursorTool.java
      2015-12-08 16:26:31 UTC (rev 4588)
+++ 
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/AbstractCursorTool.java
      2015-12-08 16:43:40 UTC (rev 4589)
@@ -33,10 +33,12 @@
 
 import java.awt.BasicStroke;
 import java.awt.Color;
+import java.awt.Component;
 import java.awt.Cursor;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.Image;
+import java.awt.KeyboardFocusManager;
 import java.awt.Point;
 import java.awt.RenderingHints;
 import java.awt.Shape;
@@ -71,12 +73,14 @@
 import com.vividsolutions.jump.workbench.ui.LayerViewPanelListener;
 import com.vividsolutions.jump.workbench.ui.TaskFrame;
 import com.vividsolutions.jump.workbench.ui.WorkbenchFrame;
+import com.vividsolutions.jump.workbench.ui.cursortool.editing.EditingPlugIn;
 import com.vividsolutions.jump.workbench.ui.plugin.PersistentBlackboardPlugIn;
 import com.vividsolutions.jump.workbench.ui.snap.SnapManager;
 import com.vividsolutions.jump.workbench.ui.snap.SnapPolicy;
 import com.vividsolutions.jump.workbench.ui.snap.SnapToFeaturesPolicy;
 import com.vividsolutions.jump.workbench.ui.snap.SnapToGridPolicy;
 import com.vividsolutions.jump.workbench.ui.snap.SnapToVerticesPolicy;
+import com.vividsolutions.jump.workbench.ui.toolbox.ToolboxDialog;
 
 /**
  * A tool that draws an XOR visual indicator. Subclasses need not keep track of
@@ -97,11 +101,9 @@
        private boolean snappingInitialized = false;
 
        private boolean snappingAllowed = false;
+       private boolean controlPressed = false;
+       private boolean shiftPressed = false;
 
-       private boolean controlPressed;
-
-       private boolean shiftPressed;
-
        private Color color = Color.red;
 
        private boolean filling = false;
@@ -181,15 +183,25 @@
     return snappingAllowed;
   }
 
+  protected void setShiftPressed(boolean onoff){
+    shiftPressed = onoff;
+  }
+  
   protected boolean wasShiftPressed() {
-    //System.out.println("act shift pressed");
-               return shiftPressed;
-       }
+    // System.out.println("act shift pressed");
+    return shiftPressed;
+  }
 
-       protected boolean wasControlPressed() {
-               return controlPressed;
-       }
+  protected void setControlPressed(boolean onoff) {
+    // System.out.println("set ctrl "+onoff+" -> "+this);
+    controlPressed = onoff;
+  }
 
+  protected boolean wasControlPressed() {
+    // System.out.println("get ctrl "+controlPressed+" -> "+this);
+    return controlPressed;
+  }
+
        /**
         * The cursor will look best if the image is a 32 x 32 transparent GIF.
         */
@@ -698,6 +710,9 @@
     }
 
     public void keyPressed(KeyEvent e) {
+      if(!componentWithFocusIsHandledByCursorTools())
+        return;
+      
       //System.out.println(e);
       if (snappingInitialized && isSpace(e) && !off) {
         off = true;
@@ -709,6 +724,9 @@
     }
 
     public void keyReleased(KeyEvent e) {
+      if(!componentWithFocusIsHandledByCursorTools())
+        return;
+      
       //System.out.println(e);
       if (snappingInitialized && isSpace(e) && off) {
         off = false;
@@ -718,11 +736,11 @@
       }
       saveModifiers(e);
     }
-    
+
     private void saveModifiers(KeyEvent e){
-      shiftPressed = e.isShiftDown();
-      controlPressed = e.isControlDown();
-      //System.out.println("act "+shiftPressed+"/"+controlPressed);
+      setShiftPressed( e.isShiftDown() );
+      setControlPressed( e.isControlDown() );
+//      System.out.println("act "+wasShiftPressed()+"/"+wasControlPressed());
     }
 
     private void showMsg(String msg) {
@@ -732,6 +750,32 @@
     private boolean isSpace(KeyEvent e) {
       return (e.getKeyCode() == KeyEvent.VK_SPACE);
     }
+  };
 
-  };
+  /**
+   * utility method to be used by cursor tools to determine if the
+   * ui component with focus falls into it's purview 
+   * 
+   * @return boolean
+   */
+  public static boolean componentWithFocusIsHandledByCursorTools(){
+    // only react if LayerView, one of it's subcomponents
+    // or the EditToolBox has got the focus
+    Component c = KeyboardFocusManager
+            .getCurrentKeyboardFocusManager().getFocusOwner();
+    // traverse through parents, see if we are in a valid one
+    boolean valid = false;
+    while (c != null) {
+      if (c instanceof LayerViewPanel
+          || (c instanceof ToolboxDialog && c.equals(EditingPlugIn
+              .getInstance().getToolbox()))) {
+        valid = true;
+        break;
+      }
+
+      c = c.getParent();
+    }
+
+    return valid;
+  }
 }
\ No newline at end of file

Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/MultiClickTool.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/MultiClickTool.java
  2015-12-08 16:26:31 UTC (rev 4588)
+++ 
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/MultiClickTool.java
  2015-12-08 16:43:40 UTC (rev 4589)
@@ -47,7 +47,6 @@
 import com.vividsolutions.jts.geom.Coordinate;
 import com.vividsolutions.jts.util.Assert;
 import com.vividsolutions.jump.workbench.ui.LayerViewPanel;
-import com.vividsolutions.jump.workbench.ui.WorkbenchFrame;
 
 /**
  * A VisualIndicatorTool that allows the user to draw shapes with multiple
@@ -277,6 +276,10 @@
     }
 
     public void keyReleased(KeyEvent e) {
+      // ignore events on invalid components
+      if(!componentWithFocusIsHandledByCursorTools())
+        return;
+      
       // erase segment by segment via BACKSPACE, eventually cancel drawing
       if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
         if (coordinates.size() > 1){


------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to