]> source.dussan.org Git - vaadin-framework.git/commitdiff
Cleaned up #6197 - moved keyboard handling from the table body to the table rows
authorJonatan Kronqvist <jonatan.kronqvist@itmill.com>
Wed, 6 Apr 2011 11:10:46 +0000 (11:10 +0000)
committerJonatan Kronqvist <jonatan.kronqvist@itmill.com>
Wed, 6 Apr 2011 11:10:46 +0000 (11:10 +0000)
svn changeset:18129/svn branch:6.5

WebContent/VAADIN/themes/base/styles.css
WebContent/VAADIN/themes/base/table/table.css
WebContent/VAADIN/themes/liferay/styles.css
WebContent/VAADIN/themes/reindeer/styles.css
WebContent/VAADIN/themes/runo/styles.css
src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java

index aba8b887458faa8431d3f65fef4117248ed3c2f2..de17effabd7a8d2711411a1aff8dac48c1839f35 100644 (file)
@@ -1674,7 +1674,8 @@ div.v-progressindicator-indeterminate-disabled {
        text-align: center;
 }
 .v-table-body:focus,
-.v-table-body-wrapper:focus {
+.v-table-body-wrapper:focus,
+tr.v-table-focus:focus {
        outline: none;
 }
 .v-table-body.focused {
@@ -1683,6 +1684,7 @@ div.v-progressindicator-indeterminate-disabled {
 .v-table-focus .v-table-cell-content {
        border-top: 1px dotted #0066bd;
        border-bottom: 1px dotted #0066bd;
+       outline: none;
 }
 /* row in column selector */
 .v-on {
index 7308cc4a46caff6b45ed9d1ffeb078074008fd9f..e0f2f0e1d4c8b2c4e72ad70a1df7f39e193edd6b 100644 (file)
        text-align: center;
 }
 .v-table-body:focus,
-.v-table-body-wrapper:focus {
+.v-table-body-wrapper:focus,
+tr.v-table-focus:focus {
        outline: none;
 }
 .v-table-body.focused {
 .v-table-focus .v-table-cell-content {
        border-top: 1px dotted #0066bd;
        border-bottom: 1px dotted #0066bd;
+       outline: none;
 }
 /* row in column selector */\r
 .v-on {
index 8b248ae320bc6e3e40ed88da41622c2ebaf34df8..85fd3020539f02b11f1c21923645c394aa56fd8a 100644 (file)
@@ -1674,7 +1674,8 @@ div.v-progressindicator-indeterminate-disabled {
        text-align: center;
 }
 .v-table-body:focus,
-.v-table-body-wrapper:focus {
+.v-table-body-wrapper:focus,
+tr.v-table-focus:focus {
        outline: none;
 }
 .v-table-body.focused {
@@ -1683,6 +1684,7 @@ div.v-progressindicator-indeterminate-disabled {
 .v-table-focus .v-table-cell-content {
        border-top: 1px dotted #0066bd;
        border-bottom: 1px dotted #0066bd;
+       outline: none;
 }
 /* row in column selector */
 .v-on {
index baabdf46ddd2bb35d0bfd1fb831cb74ee6ca6a82..ad31dd3d773a3f77422d98b05ba65fa2b73aab00 100644 (file)
@@ -1674,7 +1674,8 @@ div.v-progressindicator-indeterminate-disabled {
        text-align: center;
 }
 .v-table-body:focus,
-.v-table-body-wrapper:focus {
+.v-table-body-wrapper:focus,
+tr.v-table-focus:focus {
        outline: none;
 }
 .v-table-body.focused {
@@ -1683,6 +1684,7 @@ div.v-progressindicator-indeterminate-disabled {
 .v-table-focus .v-table-cell-content {
        border-top: 1px dotted #0066bd;
        border-bottom: 1px dotted #0066bd;
+       outline: none;
 }
 /* row in column selector */
 .v-on {
index c641a8c5f09c9352c448194ef538a6578b67f357..9a75cef4a6e2fedf2b2adf8a9e1014b367f52cae 100644 (file)
@@ -1674,7 +1674,8 @@ div.v-progressindicator-indeterminate-disabled {
        text-align: center;
 }
 .v-table-body:focus,
-.v-table-body-wrapper:focus {
+.v-table-body-wrapper:focus,
+tr.v-table-focus:focus {
        outline: none;
 }
 .v-table-body.focused {
@@ -1683,6 +1684,7 @@ div.v-progressindicator-indeterminate-disabled {
 .v-table-focus .v-table-cell-content {
        border-top: 1px dotted #0066bd;
        border-bottom: 1px dotted #0066bd;
+       outline: none;
 }
 /* row in column selector */
 .v-on {
index 7e6c6ecd82c6e5c2556f18fc0a7ddb856344e492..a627f5d2044b274ae93280a1fe239e8c13c83bde 100644 (file)
@@ -94,8 +94,7 @@ import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
  * TODO implement unregistering for child components in Cells
  */
 public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
-        VHasDropHandler, KeyPressHandler, KeyDownHandler, FocusHandler,
-        BlurHandler, Focusable, KeyUpHandler {
+        VHasDropHandler, FocusHandler, BlurHandler, Focusable {
 
     public static final String CLASSNAME = "v-table";
     public static final String CLASSNAME_SELECTION_FOCUS = CLASSNAME + "-focus";
@@ -322,18 +321,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
     public VScrollTable() {
         scrollBodyPanel.setStyleName(CLASSNAME + "-body-wrapper");
 
-        /*
-         * Firefox auto-repeat works correctly only if we use a key press
-         * handler, other browsers handle it correctly when using a key down
-         * handler
-         */
-        if (BrowserInfo.get().isGecko()) {
-            scrollBodyPanel.addKeyPressHandler(this);
-        } else {
-            scrollBodyPanel.addKeyDownHandler(this);
-        }
-        scrollBodyPanel.addKeyUpHandler(this);
-
         scrollBodyPanel.addFocusHandler(this);
         scrollBodyPanel.addBlurHandler(this);
 
@@ -3687,7 +3674,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
         }
 
         public class VScrollTableRow extends Panel implements ActionOwner,
-                Container {
+                Container, KeyPressHandler, KeyUpHandler, KeyDownHandler {
 
             private static final int DRAGMODE_MULTIROW = 2;
             protected ArrayList<Widget> childWidgets = new ArrayList<Widget>();
@@ -3709,7 +3696,20 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
                 setElement(rowElement);
                 DOM.sinkEvents(getElement(), Event.MOUSEEVENTS
                         | Event.ONDBLCLICK | Event.ONCONTEXTMENU
-                        | Event.KEYEVENTS);
+                /* | Event.KEYEVENTS */);
+                getElement().setTabIndex(-1);
+
+                /*
+                 * Firefox auto-repeat works correctly only if we use a key
+                 * press handler, other browsers handle it correctly when using
+                 * a key down handler
+                 */
+                if (BrowserInfo.get().isGecko()) {
+                    addDomHandler(this, KeyPressEvent.getType());
+                } else {
+                    addDomHandler(this, KeyDownEvent.getType());
+                }
+                addDomHandler(this, KeyUpEvent.getType());
             }
 
             /**
@@ -4179,59 +4179,91 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
                             mDown = false;
                             break;
 
-                        /*
-                         * The ONKEYDOWN and ONKEYUP are only run in IE, see
-                         * #6197
-                         */
-                        case Event.ONKEYDOWN:
-                            if (!enabled) {
-                                // Cancel default keyboard events on a disabled
-                                // Table (prevents scrolling)
-                                event.preventDefault();
-                            } else {
-                                if (handleNavigation(
-                                        event.getKeyCode(),
-                                        event.getCtrlKey()
-                                                || event.getMetaKey(),
-                                        event.getShiftKey())) {
-                                    navKeyDown = true;
-                                    event.preventDefault();
-                                }
-                                startScrollingVelocityTimer();
-                            }
+                        default:
                             break;
+                        }
+                    }
+                }
+                super.onBrowserEvent(event);
+            }
+
+            public void onKeyPress(KeyPressEvent keyPressEvent) {
+                // This is used for Firefox only, since Firefox auto-repeat
+                // works correctly only if we use a key press handler, other
+                // browsers handle it correctly when using a key down handler
+                if (!BrowserInfo.get().isGecko()) {
+                    return;
+                }
 
-                        case Event.ONKEYUP:
-                            int keyCode = event.getKeyCode();
+                NativeEvent event = keyPressEvent.getNativeEvent();
+                if (!enabled) {
+                    // Cancel default keyboard events on a disabled Table
+                    // (prevents scrolling)
+                    event.preventDefault();
+                } else {
+                    // Key code in Firefox/onKeyPress is present only for
+                    // special keys, otherwise 0 is returned
+                    int keyCode = event.getKeyCode();
+                    if (keyCode == 0 && event.getCharCode() == ' ') {
+                        // Provide a keyCode for space to be compatible with
+                        // FireFox keypress event
+                        keyCode = CHARCODE_SPACE;
+                    }
 
-                            if (!isFocusable()) {
-                                cancelScrollingVelocityTimer();
-                            } else if (isNavigationKey(keyCode)) {
-                                if (keyCode == getNavigationDownKey()
-                                        || keyCode == getNavigationUpKey()) {
-                                    /*
-                                     * in multiselect mode the server may still
-                                     * have value from previous page. Clear it
-                                     * unless doing multiselection or just
-                                     * moving focus.
-                                     */
-                                    if (!event.getShiftKey()
-                                            && !event.getCtrlKey()) {
-                                        instructServerToForgetPreviousSelections();
-                                    }
-                                    sendSelectedRows();
-                                }
-                                cancelScrollingVelocityTimer();
-                                navKeyDown = false;
-                            }
-                            break;
+                    if (handleNavigation(keyCode,
+                            event.getCtrlKey() || event.getMetaKey(),
+                            event.getShiftKey())) {
+                        event.preventDefault();
+                    }
 
-                        default:
-                            break;
+                    startScrollingVelocityTimer();
+                }
+            }
+
+            public void onKeyDown(KeyDownEvent keyDownEvent) {
+                NativeEvent event = keyDownEvent.getNativeEvent();
+                // This is not used for Firefox
+                if (BrowserInfo.get().isGecko()) {
+                    return;
+                }
+
+                if (!enabled) {
+                    // Cancel default keyboard events on a disabled Table
+                    // (prevents scrolling)
+                    event.preventDefault();
+                } else {
+                    if (handleNavigation(event.getKeyCode(), event.getCtrlKey()
+                            || event.getMetaKey(), event.getShiftKey())) {
+                        navKeyDown = true;
+                        event.preventDefault();
+                    }
+
+                    startScrollingVelocityTimer();
+                }
+            }
+
+            public void onKeyUp(KeyUpEvent keyUpEvent) {
+                NativeEvent event = keyUpEvent.getNativeEvent();
+                int keyCode = event.getKeyCode();
+
+                if (!isFocusable()) {
+                    cancelScrollingVelocityTimer();
+                } else if (isNavigationKey(keyCode)) {
+                    if (keyCode == getNavigationDownKey()
+                            || keyCode == getNavigationUpKey()) {
+                        /*
+                         * in multiselect mode the server may still have value
+                         * from previous page. Clear it unless doing
+                         * multiselection or just moving focus.
+                         */
+                        if (!event.getShiftKey() && !event.getCtrlKey()) {
+                            instructServerToForgetPreviousSelections();
                         }
+                        sendSelectedRows();
                     }
+                    cancelScrollingVelocityTimer();
+                    navKeyDown = false;
                 }
-                super.onBrowserEvent(event);
             }
 
             /**
@@ -5147,7 +5179,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
             // Set new focused row
             focusedRow = row;
 
-            ensureRowIsVisible(row);
+            // ensureRowIsVisible(row);
             row.getElement().focus();
 
             return true;
@@ -5187,6 +5219,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
           if (top < cur.scrollTop) {
             cur.scrollTop = top;
           }
+
           if (top + height > cur.scrollTop + cur.clientHeight) {
             cur.scrollTop = (top + height) - cur.clientHeight;
           }
@@ -5461,68 +5494,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
         scrollBodyPanel.setScrollPosition(newPixels);
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * com.google.gwt.event.dom.client.KeyPressHandler#onKeyPress(com.google
-     * .gwt.event.dom.client.KeyPressEvent)
-     */
-    public void onKeyPress(KeyPressEvent event) {
-        // This is used for Firefox only
-        if (!BrowserInfo.get().isGecko()) {
-            return;
-        }
-
-        if (!enabled) {
-            // Cancel default keyboard events on a disabled Table (prevents
-            // scrolling)
-            event.preventDefault();
-        } else if (hasFocus) {
-            // Key code in Firefox/onKeyPress is present only for special keys,
-            // otherwise 0 is returned
-            NativeEvent nativeEvent = event.getNativeEvent();
-            int keyCode = nativeEvent.getKeyCode();
-            if (keyCode == 0 && nativeEvent.getCharCode() == ' ') {
-                // Provide a keyCode for space to be compatible with FireFox
-                // keypress event
-                keyCode = CHARCODE_SPACE;
-            }
-
-            if (handleNavigation(keyCode,
-                    event.isControlKeyDown() || event.isMetaKeyDown(),
-                    event.isShiftKeyDown())) {
-                event.preventDefault();
-            }
-
-            startScrollingVelocityTimer();
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * com.google.gwt.event.dom.client.KeyDownHandler#onKeyDown(com.google.gwt
-     * .event.dom.client.KeyDownEvent)
-     */
-    public void onKeyDown(KeyDownEvent event) {
-        if (!enabled) {
-            // Cancel default keyboard events on a disabled Table (prevents
-            // scrolling)
-            event.preventDefault();
-        } else if (hasFocus) {
-            if (handleNavigation(event.getNativeEvent().getKeyCode(),
-                    event.isControlKeyDown() || event.isMetaKeyDown(),
-                    event.isShiftKeyDown())) {
-                navKeyDown = true;
-                event.preventDefault();
-            }
-
-            startScrollingVelocityTimer();
-        }
-    }
-
     /*
      * (non-Javadoc)
      * 
@@ -5650,30 +5621,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
         }
     }
 
-    public void onKeyUp(KeyUpEvent event) {
-        int keyCode = event.getNativeKeyCode();
-
-        if (!isFocusable()) {
-            cancelScrollingVelocityTimer();
-        } else if (isNavigationKey(keyCode)) {
-            if (keyCode == getNavigationDownKey()
-                    || keyCode == getNavigationUpKey()) {
-                /*
-                 * in multiselect mode the server may still have value from
-                 * previous page. Clear it unless doing multiselection or just
-                 * moving focus.
-                 */
-                if (!event.getNativeEvent().getShiftKey()
-                        && !event.getNativeEvent().getCtrlKey()) {
-                    instructServerToForgetPreviousSelections();
-                }
-                sendSelectedRows();
-            }
-            cancelScrollingVelocityTimer();
-            navKeyDown = false;
-        }
-    }
-
     public void startScrollingVelocityTimer() {
         if (scrollingVelocityTimer == null) {
             scrollingVelocityTimer = new Timer() {