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

gwt.material.design.client.ui.MaterialChipContainer Maven / Gradle / Ivy

The newest version!
/*
 * #%L
 * GwtMaterial
 * %%
 * Copyright (C) 2015 - 2020 GwtMaterialDesign
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */
package gwt.material.design.client.ui;

import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
import gwt.material.design.client.base.DefaultMoreChipHandler;
import gwt.material.design.client.base.HasResetField;
import gwt.material.design.client.base.MoreChipHandler;
import gwt.material.design.client.base.mixin.ResetFieldMixin;
import gwt.material.design.client.base.mixin.ToggleStyleMixin;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MaterialChipContainer extends MaterialPanel implements HasSelectionHandlers>,
        HasResetField {

    private MoreChipHandler chipHandler = new DefaultMoreChipHandler(this);
    private Map chipList = new HashMap<>();
    private boolean multiple = true;
    private boolean enableToggle = true;
    private ResetFieldMixin resetFieldMixin;

    public MaterialChipContainer() {
        super("chip-container");
    }

    protected void onLoad() {
        super.onLoad();

        chipHandler.load();
    }

    protected void add(Widget child, Element container) {
        super.add(child, container);

        if (child instanceof MaterialChip) {
            MaterialChip chip = (MaterialChip) child;
            chip.setId(DOM.createUniqueId());
            chip.setTabIndex(0);
            chip.registerHandler(chip.addClickHandler((event) -> {
                if (isEnableToggle()) {
                    toggle(chip);
                }
            }));
            MaterialIcon icon = chip.getPrefixIcon();
            icon.registerHandler(icon.addClickHandler(clickEvent -> {
                if (isEnableToggle()) {
                    setActive(chip, false);
                }
            }));
            chip.registerHandler(chip.addKeyUpHandler((event) -> {
                if (event.getNativeKeyCode() == 13) {
                    toggle(chip);
                }

            }));
            chipHandler.update(chip);
            chipList.put(chip.getId(), chip);
        }
    }

    public boolean remove(Widget w) {
        if (w instanceof MaterialChip) {
            chipList.remove(w);
            super.remove(w);
            chipHandler.update((MaterialChip) w);
        }
        return true;
    }

    public void clear() {
        for (MaterialChip value : chipList.values()) {
            value.removeFromParent();
        }
        chipList.clear();
    }

    public void reload() {
        chipHandler.reload();
    }

    public void setActive(MaterialChip chip, boolean active) {
        if (!multiple) {
            clearActive();
        }
        chip.setActive(active);
        SelectionEvent.fire(this, getSelected());
    }

    public void setVisibleChips(int visibleChips) {
        chipHandler.setVisibleChipsSize(visibleChips);
    }

    public void toggle(MaterialChip chip) {
        setActive(chip, !chip.isActive());
    }

    public void clearActive() {
        for (String s : chipList.keySet()) {
            MaterialChip chip = chipList.get(s);
            if (chip != null) chip.setActive(false);
        }
    }

    public void collapse() {
        chipHandler.collapse();
    }

    public void expand() {
        chipHandler.expand();
    }

    public void setCollapsible(boolean enableCollapsible) {
        chipHandler.setCollapsible(enableCollapsible);
    }

    public boolean isMultiple() {
        return multiple;
    }

    public void setMultiple(boolean multiple) {
        this.multiple = multiple;
    }

    public boolean isEnableToggle() {
        return enableToggle;
    }

    public void setEnableToggle(boolean enableToggle) {
        this.enableToggle = enableToggle;
    }

    public List getChipList() {
        return new ArrayList<>(chipList.values());
    }

    public List getSelected() {
        List selected = new ArrayList<>();
        List chips = getChipList();
        for (MaterialChip chip : chips) {
            if (chip.isActive()) {
                selected.add(chip);
            }
        }
        return selected;
    }

    @Override
    public void resetFields() {
        getResetFieldMixin().resetFields();
    }

    @Override
    public void setAllowResettingFields(boolean allowResettingFields) {
        getResetFieldMixin().setAllowResettingFields(allowResettingFields);
    }

    @Override
    public boolean isAllowResettingFields() {
        return getResetFieldMixin().isAllowResettingFields();
    }

    public HandlerRegistration addSelectionHandler(SelectionHandler> handler) {
        return addHandler(handler, SelectionEvent.getType());
    }

    public ResetFieldMixin getResetFieldMixin() {
        if (resetFieldMixin == null) {
            resetFieldMixin = new ResetFieldMixin<>(this);
        }
        return resetFieldMixin;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy