All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vaadin.v7.client.ui.VOptionGroupBase Maven / Gradle / Ivy

There is a newer version: 8.27.3
Show newest version
/*
 * Copyright (C) 2000-2023 Vaadin Ltd
 *
 * This program is available under Vaadin Commercial License and Service Terms.
 *
 * See  for the full
 * license.
 */

package com.vaadin.v7.client.ui;

import java.util.Set;

import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HasEnabled;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.Focusable;
import com.vaadin.client.UIDL;
import com.vaadin.client.ui.Field;
import com.vaadin.client.ui.VNativeButton;

public abstract class VOptionGroupBase extends Composite implements Field,
        ClickHandler, ChangeHandler, KeyPressHandler, Focusable, HasEnabled {

    public static final String CLASSNAME_OPTION = "v-select-option";

    /** For internal use only. May be removed or replaced in the future. */
    public ApplicationConnection client;

    /** For internal use only. May be removed or replaced in the future. */
    public String paintableId;

    /** For internal use only. May be removed or replaced in the future. */
    public Set selectedKeys;

    /** For internal use only. May be removed or replaced in the future. */
    public boolean immediate;

    /** For internal use only. May be removed or replaced in the future. */
    public boolean multiselect;

    private boolean enabled;

    private boolean readonly;

    /** For internal use only. May be removed or replaced in the future. */
    public int cols = 0;

    /** For internal use only. May be removed or replaced in the future. */
    public int rows = 0;

    /** For internal use only. May be removed or replaced in the future. */
    public boolean nullSelectionAllowed = true;

    /** For internal use only. May be removed or replaced in the future. */
    public boolean nullSelectionItemAvailable = false;

    /**
     * Widget holding the different options (e.g. ListBox or Panel for radio
     * buttons) (optional, fallbacks to container Panel)
     * 

* For internal use only. May be removed or replaced in the future. */ public Widget optionsContainer; /** * Panel containing the component. *

* For internal use only. May be removed or replaced in the future. */ public final Panel container; /** For internal use only. May be removed or replaced in the future. */ public VTextField newItemField; /** For internal use only. May be removed or replaced in the future. */ public VNativeButton newItemButton; public VOptionGroupBase(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 VOptionGroupBase(Widget w, String classname) { this(classname); optionsContainer = w; container.add(optionsContainer); } protected boolean isImmediate() { return immediate; } protected boolean isMultiselect() { return multiselect; } @Override public boolean isEnabled() { return enabled; } public boolean isReadonly() { return readonly; } protected boolean isNullSelectionAllowed() { return nullSelectionAllowed; } protected boolean isNullSelectionItemAvailable() { return nullSelectionItemAvailable; } /** * For internal use only. May be removed or replaced in the future. * * @return "cols" specified in uidl, 0 if not specified */ public int getColumns() { return cols; } /** * For internal use only. May be removed or replaced in the future. * * @return "rows" specified in uidl, 0 if not specified */ public int getRows() { return rows; } public abstract void setTabIndex(int tabIndex); @Override public void onClick(ClickEvent event) { if (event.getSource() == newItemButton && !newItemField.getText().equals("")) { client.updateVariable(paintableId, "newitem", newItemField.getText(), true); newItemField.setText(""); } } @Override public void onChange(ChangeEvent event) { if (multiselect) { client.updateVariable(paintableId, "selected", getSelectedItems(), immediate); } else { client.updateVariable(paintableId, "selected", new String[] { "" + getSelectedItem() }, immediate); } } @Override public void onKeyPress(KeyPressEvent event) { if (event.getSource() == newItemField && event.getCharCode() == KeyCodes.KEY_ENTER) { newItemButton.click(); } } public void setReadonly(boolean readonly) { if (this.readonly != readonly) { this.readonly = readonly; updateEnabledState(); } } @Override public void setEnabled(boolean enabled) { if (this.enabled != enabled) { this.enabled = enabled; updateEnabledState(); } } /** For internal use only. May be removed or replaced in the future. */ public abstract void buildOptions(UIDL uidl); protected abstract String[] getSelectedItems(); protected abstract void updateEnabledState(); protected String getSelectedItem() { final String[] sel = getSelectedItems(); if (sel.length > 0) { return sel[0]; } else { return null; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy