]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix for #5104
authorJohn Alhroos <john.ahlroos@itmill.com>
Tue, 1 Jun 2010 12:36:58 +0000 (12:36 +0000)
committerJohn Alhroos <john.ahlroos@itmill.com>
Tue, 1 Jun 2010 12:36:58 +0000 (12:36 +0000)
svn changeset:13473/svn branch:6.4

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

index 69f0e0aae3d2d75366f22479fc16ec2113b2677e..338d6a3c98c12fc043904a2ecff152cf16d196bf 100644 (file)
@@ -134,6 +134,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
     protected String paintableId;
 
     private boolean immediate;
+    private boolean nullSelectionAllowed = true;
 
     private int selectMode = Table.SELECT_MODE_NONE;
 
@@ -669,6 +670,9 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
 
         showRowHeaders = uidl.getBooleanAttribute("rowheaders");
         showColHeaders = uidl.getBooleanAttribute("colheaders");
+        
+        nullSelectionAllowed = uidl.hasAttribute("nsa") ? uidl
+                .getBooleanAttribute("nsa") : true;
 
         if (uidl.hasVariable("sortascending")) {
             sortAscending = uidl.getBooleanVariable("sortascending");
@@ -3704,6 +3708,21 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
                                     toggleSelection(true);
                                     setRowFocus(this);
 
+                                    // Ctrl click (Single selection)
+                                } else if ((event.getCtrlKey() || event
+                                        .getMetaKey()
+                                        && selectMode == SELECT_MODE_SINGLE)) {
+                                    if (!isSelected()
+                                            || (isSelected() && nullSelectionAllowed)) {
+
+                                        if (!isSelected()) {
+                                            deselectAll();
+                                        }
+
+                                        toggleSelection(true);
+                                        setRowFocus(this);
+                                    }
+
                                     // Shift click
                                 } else if (event.getShiftKey()
                                         && selectMode == SELECT_MODE_MULTI
@@ -4769,9 +4788,9 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
         if (selectMode > SELECT_MODE_NONE
                 && keycode == getNavigationSelectKey()) {
             if (selectMode == SELECT_MODE_SINGLE) {
-                boolean wasSelected = focusedRow.isSelected();
-                deselectAll();
-                if (!wasSelected) {
+                boolean wasSelected = focusedRow.isSelected();                                
+                deselectAll();                
+                if (!wasSelected || !nullSelectionAllowed ) {
                     focusedRow.toggleSelection(true);
                 }
 
index e7323af06bcf7b4e8f0e9d4c2944290eca37511a..336436530c8df59451ebc2eda7cf396dcef4406c 100644 (file)
@@ -2304,6 +2304,10 @@ public class Table extends AbstractSelect implements Action.Container,
         target.addAttribute("cols", cols);
         target.addAttribute("rows", rows);
 
+        if (!isNullSelectionAllowed()) {
+            target.addAttribute("nsa", false);
+        }
+
         target.addAttribute("firstrow",
                 (reqFirstRowToPaint >= 0 ? reqFirstRowToPaint
                         : firstToBeRenderedInClient));