Browse Source

IListSelect got it's own implementation.

svn changeset:2809/svn branch:trunk
tags/6.7.0.beta1
Marc Englund 16 years ago
parent
commit
6fe0a6c8e2

+ 69
- 1
src/com/itmill/toolkit/terminal/gwt/client/ui/IListSelect.java View File

@@ -1,5 +1,73 @@
package com.itmill.toolkit.terminal.gwt.client.ui;

public class IListSelect extends ISelect {
import java.util.Iterator;
import java.util.Vector;

import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Widget;
import com.itmill.toolkit.terminal.gwt.client.UIDL;

public class IListSelect extends IOptionGroupBase {

public static final String CLASSNAME = "i-select";

private static final int VISIBLE_COUNT = 10;

protected ListBox select;

private int lastSelectedIndex = -1;

public IListSelect() {
super(new ListBox(), CLASSNAME);
select = (ListBox) optionsContainer;
select.addChangeListener(this);
select.addClickListener(this);
select.setStyleName(CLASSNAME + "-select");
select.setVisibleItemCount(VISIBLE_COUNT);
}

protected void buildOptions(UIDL uidl) {
select.setMultipleSelect(multiselect);
select.setEnabled(!disabled && !readonly);
select.clear();
if (!multiselect && isNullSelectionAllowed()) {
// can't unselect last item in singleselect mode
select.addItem("", null);
}
for (Iterator i = uidl.getChildIterator(); i.hasNext();) {
UIDL optionUidl = (UIDL) i.next();
select.addItem(optionUidl.getStringAttribute("caption"), optionUidl
.getStringAttribute("key"));
if (optionUidl.hasAttribute("selected")) {
select.setItemSelected(select.getItemCount() - 1, true);
}
}
}

protected Object[] getSelectedItems() {
Vector selectedItemKeys = new Vector();
for (int i = 0; i < select.getItemCount(); i++) {
if (select.isItemSelected(i)) {
selectedItemKeys.add(select.getValue(i));
}
}
return selectedItemKeys.toArray();
}

public void onChange(Widget sender) {
int si = select.getSelectedIndex();
if (si == -1 && !isNullSelectionAllowed()) {
select.setSelectedIndex(lastSelectedIndex);
} else {
lastSelectedIndex = si;
if (select.isMultipleSelect()) {
client.updateVariable(id, "selected", getSelectedItems(),
immediate);
} else {
client.updateVariable(id, "selected", new String[] { ""
+ getSelectedItem() }, immediate);
}
}
}

}

+ 149
- 134
src/com/itmill/toolkit/terminal/gwt/client/ui/IOptionGroupBase.java View File

@@ -14,140 +14,155 @@ import com.itmill.toolkit.terminal.gwt.client.Paintable;
import com.itmill.toolkit.terminal.gwt.client.UIDL;
abstract class IOptionGroupBase extends Composite implements Paintable,
ClickListener, ChangeListener, KeyboardListener {
ClickListener, ChangeListener, KeyboardListener {
public static final String CLASSNAME_OPTION = "i-select-option";
ApplicationConnection client;
String id;
protected boolean immediate;
protected Set selectedKeys;
protected boolean multiselect;
protected boolean disabled;
protected boolean readonly;
/**
* Widget holding the different options (e.g. ListBox or Panel for radio
* buttons) (optional, fallbacks to container Panel)
*/
protected Widget optionsContainer;
/**
* Panel containing the component
*/
private Panel container;
private ITextField newItemField;
private IButton newItemButton;
public IOptionGroupBase(String classname) {
container = new FlowPanel();
initWidget(container);
optionsContainer = container;
container.setStyleName(classname);
immediate = false;
multiselect = false;
}
/*
* Call this if you wish to specify your own container for the option
* elements (e.g. SELECT)
*/
public IOptionGroupBase(Widget w, String classname) {
this(classname);
optionsContainer = w;
container.add(optionsContainer);
}
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
this.client = client;
this.id = uidl.getId();
if (client.updateComponent(this, uidl, true))
return;
selectedKeys = uidl.getStringArrayVariableAsSet("selected");
readonly = uidl.getBooleanAttribute("readonly");
disabled = uidl.getBooleanAttribute("disabled");
multiselect = "multi".equals(uidl.getStringAttribute("selectmode"));
immediate = uidl.getBooleanAttribute("immediate");
UIDL ops = uidl.getChildUIDL(0);
buildOptions(ops);
if (uidl.getBooleanAttribute("allownewitem")) {
if (newItemField == null) {
newItemButton = new IButton();
newItemButton.setText("+");
newItemButton.addClickListener(this);
newItemField = new ITextField();
newItemField.addKeyboardListener(this);
newItemField.setColumns(16);
}
newItemField.setEnabled(!disabled && !readonly);
newItemButton.setEnabled(!disabled && !readonly);
if (newItemField != null && newItemField.getParent() == container)
return;
container.add(newItemField);
container.add(newItemButton);
} else if (newItemField != null) {
container.remove(newItemField);
container.remove(newItemButton);
}
}
public void onClick(Widget sender) {
if (sender == newItemButton && !newItemField.getText().equals("")) {
client.updateVariable(id, "newitem", newItemField.getText(), true);
newItemField.setText("");
}
}
public void onChange(Widget sender) {
if (multiselect) {
client
.updateVariable(id, "selected", getSelectedItems(),
immediate);
} else {
client.updateVariable(id, "selected", new String[] { ""
+ getSelectedItem() }, immediate);
}
}
public void onKeyPress(Widget sender, char keyCode, int modifiers) {
if (sender == newItemField && keyCode == KeyboardListener.KEY_ENTER)
newItemButton.click();
}
public void onKeyUp(Widget sender, char keyCode, int modifiers) {
// Ignore, subclasses may override
}
public void onKeyDown(Widget sender, char keyCode, int modifiers) {
// Ignore, subclasses may override
}
protected abstract void buildOptions(UIDL uidl);
protected abstract Object[] getSelectedItems();
protected Object getSelectedItem() {
Object[] sel = getSelectedItems();
if (sel.length > 0)
return sel[0];
else
return null;
}
public static final String CLASSNAME_OPTION = "i-select-option";
ApplicationConnection client;
String id;
protected boolean immediate;
protected Set selectedKeys;
protected boolean multiselect;
protected boolean disabled;
protected boolean readonly;
protected boolean nullSelectionAllowed = true;
/**
* Widget holding the different options (e.g. ListBox or Panel for radio
* buttons) (optional, fallbacks to container Panel)
*/
protected Widget optionsContainer;
/**
* Panel containing the component
*/
private Panel container;
private ITextField newItemField;
private IButton newItemButton;
public IOptionGroupBase(String classname) {
container = new FlowPanel();
initWidget(container);
optionsContainer = container;
container.setStyleName(classname);
immediate = false;
multiselect = false;
}
/*
* Call this if you wish to specify your own container for the option
* elements (e.g. SELECT)
*/
public IOptionGroupBase(Widget w, String classname) {
this(classname);
optionsContainer = w;
container.add(optionsContainer);
}
protected void setNullSelectionAllowed(boolean nullSelectionAllowed) {
this.nullSelectionAllowed = nullSelectionAllowed;
}
protected boolean isNullSelectionAllowed() {
return nullSelectionAllowed;
}
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
this.client = client;
id = uidl.getId();
if (client.updateComponent(this, uidl, true)) {
return;
}
selectedKeys = uidl.getStringArrayVariableAsSet("selected");
readonly = uidl.getBooleanAttribute("readonly");
disabled = uidl.getBooleanAttribute("disabled");
multiselect = "multi".equals(uidl.getStringAttribute("selectmode"));
immediate = uidl.getBooleanAttribute("immediate");
nullSelectionAllowed = uidl.getBooleanAttribute("nullselect");
UIDL ops = uidl.getChildUIDL(0);
buildOptions(ops);
if (uidl.getBooleanAttribute("allownewitem")) {
if (newItemField == null) {
newItemButton = new IButton();
newItemButton.setText("+");
newItemButton.addClickListener(this);
newItemField = new ITextField();
newItemField.addKeyboardListener(this);
newItemField.setColumns(16);
}
newItemField.setEnabled(!disabled && !readonly);
newItemButton.setEnabled(!disabled && !readonly);
if (newItemField != null && newItemField.getParent() == container) {
return;
}
container.add(newItemField);
container.add(newItemButton);
} else if (newItemField != null) {
container.remove(newItemField);
container.remove(newItemButton);
}
}
public void onClick(Widget sender) {
if (sender == newItemButton && !newItemField.getText().equals("")) {
client.updateVariable(id, "newitem", newItemField.getText(), true);
newItemField.setText("");
}
}
public void onChange(Widget sender) {
if (multiselect) {
client
.updateVariable(id, "selected", getSelectedItems(),
immediate);
} else {
client.updateVariable(id, "selected", new String[] { ""
+ getSelectedItem() }, immediate);
}
}
public void onKeyPress(Widget sender, char keyCode, int modifiers) {
if (sender == newItemField && keyCode == KeyboardListener.KEY_ENTER) {
newItemButton.click();
}
}
public void onKeyUp(Widget sender, char keyCode, int modifiers) {
// Ignore, subclasses may override
}
public void onKeyDown(Widget sender, char keyCode, int modifiers) {
// Ignore, subclasses may override
}
protected abstract void buildOptions(UIDL uidl);
protected abstract Object[] getSelectedItems();
protected Object getSelectedItem() {
Object[] sel = getSelectedItems();
if (sel.length > 0) {
return sel[0];
} else {
return null;
}
}
}

+ 52
- 48
src/com/itmill/toolkit/terminal/gwt/client/ui/ISelect.java View File

@@ -9,52 +9,56 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL;

public class ISelect extends IOptionGroupBase {

public static final String CLASSNAME = "i-select";

private static final int VISIBLE_COUNT = 10;

private ListBox select;

public ISelect() {
super(new ListBox(), CLASSNAME);
select = (ListBox) optionsContainer;
select.addChangeListener(this);
select.setStyleName(CLASSNAME + "-select");
}

protected void buildOptions(UIDL uidl) {
select.setMultipleSelect(multiselect);
if (multiselect)
select.setVisibleItemCount(VISIBLE_COUNT);
else
select.setVisibleItemCount(1);
select.setEnabled(!disabled && !readonly);
select.clear();
for (Iterator i = uidl.getChildIterator(); i.hasNext();) {
UIDL optionUidl = (UIDL) i.next();
select.addItem(optionUidl.getStringAttribute("caption"), optionUidl
.getStringAttribute("key"));
if (optionUidl.hasAttribute("selected"))
select.setItemSelected(select.getItemCount() - 1, true);
}
}

protected Object[] getSelectedItems() {
Vector selectedItemKeys = new Vector();
for (int i = 0; i < select.getItemCount(); i++) {
if (select.isItemSelected(i))
selectedItemKeys.add(select.getValue(i));
}
return selectedItemKeys.toArray();
}

public void onChange(Widget sender) {
if (select.isMultipleSelect())
client
.updateVariable(id, "selected", getSelectedItems(),
immediate);
else
client.updateVariable(id, "selected", new String[] { ""
+ getSelectedItem() }, immediate);
}
public static final String CLASSNAME = "i-select";

private static final int VISIBLE_COUNT = 10;

protected ListBox select;

public ISelect() {
super(new ListBox(), CLASSNAME);
select = (ListBox) optionsContainer;
select.addChangeListener(this);
select.setStyleName(CLASSNAME + "-select");
}

protected void buildOptions(UIDL uidl) {
select.setMultipleSelect(multiselect);
if (multiselect) {
select.setVisibleItemCount(VISIBLE_COUNT);
} else {
select.setVisibleItemCount(1);
}
select.setEnabled(!disabled && !readonly);
select.clear();
for (Iterator i = uidl.getChildIterator(); i.hasNext();) {
UIDL optionUidl = (UIDL) i.next();
select.addItem(optionUidl.getStringAttribute("caption"), optionUidl
.getStringAttribute("key"));
if (optionUidl.hasAttribute("selected")) {
select.setItemSelected(select.getItemCount() - 1, true);
}
}
}

protected Object[] getSelectedItems() {
Vector selectedItemKeys = new Vector();
for (int i = 0; i < select.getItemCount(); i++) {
if (select.isItemSelected(i)) {
selectedItemKeys.add(select.getValue(i));
}
}
return selectedItemKeys.toArray();
}

public void onChange(Widget sender) {
if (select.isMultipleSelect()) {
client
.updateVariable(id, "selected", getSelectedItems(),
immediate);
} else {
client.updateVariable(id, "selected", new String[] { ""
+ getSelectedItem() }, immediate);
}
}
}

Loading…
Cancel
Save