]> source.dussan.org Git - vaadin-framework.git/commitdiff
Implemented windows like ctrl+shift-clicking in Table #3520
authorJohn Alhroos <john.ahlroos@itmill.com>
Thu, 15 Apr 2010 12:53:16 +0000 (12:53 +0000)
committerJohn Alhroos <john.ahlroos@itmill.com>
Thu, 15 Apr 2010 12:53:16 +0000 (12:53 +0000)
svn changeset:12569/svn branch:6.4

src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java

index a98b60fe6048f563dd809fd284ae83252d5d6fd6..64a6d18a91f91a3fc5cd646f590c16aab896f29d 100644 (file)
@@ -2538,14 +2538,27 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
                             if (event.getButton() == Event.BUTTON_LEFT
                                     && selectMode > Table.SELECT_MODE_NONE) {
 
+                                // Ctrl+Shift click
                                 if ((event.getCtrlKey() || event.getMetaKey())
+                                        && event.getShiftKey()
+                                        && selectMode == SELECT_MODE_MULTI
+                                        && multiselectmode == 0) {
+                                    toggleShiftSelection(false);
+
+                                    // Ctrl click
+                                } else if ((event.getCtrlKey() || event
+                                        .getMetaKey())
                                         && selectMode == SELECT_MODE_MULTI
                                         && multiselectmode == 0) {
                                     toggleSelection(true);
+
+                                    // Shift click
                                 } else if (event.getShiftKey()
                                         && selectMode == SELECT_MODE_MULTI
                                         && multiselectmode == 0) {
-                                    toggleShiftSelection();
+                                    toggleShiftSelection(true);
+
+                                    // click
                                 } else {
                                     if (multiselectmode == 0) {
                                         deselectAll();
@@ -2747,7 +2760,14 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
                 }
             }
 
-            private void toggleShiftSelection() {
+            /**
+             * Is called when a user clicks an item when holding SHIFT key down.
+             * This will select a new range from the last cell clicked
+             * 
+             * @param deselectPrevious
+             *            Should the previous selected range be deselected
+             */
+            private void toggleShiftSelection(boolean deselectPrevious) {
 
                 /*
                  * Ensures that we are in multiselect mode and that we have a
@@ -2769,8 +2789,12 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
                     startKey ^= endKey;
                 }
 
+                // Deselect previous items if so desired
+                if (deselectPrevious) {
+                    deselectAll();
+                }
+
                 // Select the range (not including this row)
-                deselectAll();
                 for (int r = startKey; r <= endKey; r++) {
                     if (r != rowKey) {
                         selectedRowKeys.add(String.valueOf(r));