123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package com.itmill.toolkit.terminal.gwt.client.ui;
-
- import java.util.Set;
-
- import com.google.gwt.user.client.ui.ChangeListener;
- import com.google.gwt.user.client.ui.ClickListener;
- import com.google.gwt.user.client.ui.Composite;
- import com.google.gwt.user.client.ui.FlowPanel;
- import com.google.gwt.user.client.ui.KeyboardListener;
- import com.google.gwt.user.client.ui.Panel;
- import com.google.gwt.user.client.ui.Widget;
- import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
- 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 {
-
- 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;
- }
-
- }
|