From 560215fb0b55804b769c4edcea351b1db96dd2dc Mon Sep 17 00:00:00 2001 From: Jouni Koivuviita Date: Wed, 11 Jul 2007 06:36:43 +0000 Subject: [PATCH] Fixed selecting after changes aren't automatically updated from the server (client has to handle the redraw on its own). svn changeset:1836/svn branch:trunk --- .../gwt/client/ui/ITwinColSelect.java | 47 ++++++++++++++----- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITwinColSelect.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITwinColSelect.java index 2b9e2f3f44..b710b00b63 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITwinColSelect.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITwinColSelect.java @@ -78,20 +78,24 @@ public class ITwinColSelect extends IOptionGroupBase { return selectedItemKeys.toArray(); } - private String[] getItemsToAdd() { - String[] selectedIndexes = new String[options.getItemCount()]; + private boolean[] getItemsToAdd() { + boolean[] selectedIndexes = new boolean[options.getItemCount()]; for(int i = 0; i < options.getItemCount(); i++) { if(options.isItemSelected(i)) - selectedIndexes[i] = options.getValue(i); + selectedIndexes[i] = true; + else + selectedIndexes[i] = false; } return selectedIndexes; } - private String[] getItemsToRemove() { - String[] selectedIndexes = new String[selections.getItemCount()]; + private boolean[] getItemsToRemove() { + boolean[] selectedIndexes = new boolean[selections.getItemCount()]; for(int i = 0; i < selections.getItemCount(); i++) { if(selections.isItemSelected(i)) - selectedIndexes[i] = selections.getValue(i); + selectedIndexes[i] = true; + else + selectedIndexes[i] = false; } return selectedIndexes; } @@ -99,17 +103,36 @@ public class ITwinColSelect extends IOptionGroupBase { public void onClick(Widget sender) { super.onClick(sender); if(sender == add) { - String[] sel = getItemsToAdd(); + boolean[] sel = getItemsToAdd(); for(int i=0; i < sel.length; i++) { - if(sel[i]!=null) selectedKeys.add(sel[i]); + if(sel[i]) { + int optionIndex = i-(sel.length-options.getItemCount()); + selectedKeys.add(options.getValue(optionIndex)); + + // Move selection to another column + String text = options.getItemText(optionIndex); + String value = options.getValue(optionIndex); + selections.addItem(text, value); + options.removeItem(optionIndex); + } } - client.updateVariable(id, "selected", selectedKeys.toArray(), true); // Immediate + client.updateVariable(id, "selected", selectedKeys.toArray(), immediate); + } else if(sender == remove) { - String[] sel = getItemsToRemove(); + boolean[] sel = getItemsToRemove(); for(int i=0; i < sel.length; i++) { - if(sel[i]!=null) selectedKeys.remove(sel[i]); + if(sel[i]) { + int selectionIndex = i-(sel.length-selections.getItemCount()); + selectedKeys.remove(selections.getValue(selectionIndex)); + + // Move selection to another column + String text = selections.getItemText(selectionIndex); + String value = selections.getValue(selectionIndex); + options.addItem(text, value); + selections.removeItem(selectionIndex); + } } - client.updateVariable(id, "selected", selectedKeys.toArray(), true); // Immediate + client.updateVariable(id, "selected", selectedKeys.toArray(), immediate); } } -- 2.39.5