gwt.material.design.addins.client.subheader.MaterialSubHeaderContainer.java Source code

Java tutorial

Introduction

Here is the source code for gwt.material.design.addins.client.subheader.MaterialSubHeaderContainer.java

Source

/*
 * #%L
 * GwtMaterial
 * %%
 * Copyright (C) 2015 - 2017 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.addins.client.subheader;

import com.google.gwt.dom.client.Document;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.Widget;
import gwt.material.design.addins.client.base.constants.AddinsCssName;
import gwt.material.design.addins.client.subheader.constants.SubHeaderType;
import gwt.material.design.addins.client.subheader.js.JsSubHeader;
import gwt.material.design.client.base.HasType;
import gwt.material.design.client.base.JsLoader;
import gwt.material.design.client.base.MaterialWidget;
import gwt.material.design.client.base.mixin.CssTypeMixin;

import java.util.ArrayList;
import java.util.List;

import static gwt.material.design.client.js.JsMaterialElement.$;

//@formatter:off

/**
 * SubHeader Container will wrap your subheader items.
 * There are two types of SubHeader Container <br/>
 * 1. PINNED<br/>
 * 2. STATIC
 * <p>
 * <h3>XML Namespace Declaration</h3>
 * <pre>
 * {@code
 * xmlns:ma='urn:import:gwt.material.design.addins.client'
 * }
 * </pre>
 * <p>
 * <h3>UiBinder Usage:</h3>
 * <pre>
 * {@code
 * <ma:subheader.MaterialSubHeaderContainer height="400px" type="PINNED">
 *     <ma:subheader.MaterialSubHeader text="Subheader" textColor="pink" />
 * </ma:subheader.MaterialSubHeaderContainer>
 * }
 * </pre>
 *
 * @author kevzlou7979
 * @see <a href="http://gwtmaterialdesign.github.io/gwt-material-demo/#subheaders">Material Subheader</a>
 */
//@formatter:on
public class MaterialSubHeaderContainer extends MaterialWidget implements JsLoader, HasType<SubHeaderType> {

    static {
        MaterialSubHeader.loadResources();
    }

    private CssTypeMixin<SubHeaderType, MaterialSubHeaderContainer> typeMixin;
    private List<MaterialSubHeader> subHeaders = new ArrayList<>();

    public MaterialSubHeaderContainer() {
        super(Document.get().createDivElement(), AddinsCssName.CONTAINER1);
    }

    public MaterialSubHeaderContainer(SubHeaderType type) {
        this();
        setType(type);
    }

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

        load();
    }

    @Override
    public void load() {
        if (getType() == SubHeaderType.PINNED) {
            String subHeaderClass = DOM.createUniqueId();
            for (Widget w : getChildren()) {
                if (w instanceof MaterialSubHeader) {
                    w.addStyleName(subHeaderClass);
                    subHeaders.add((MaterialSubHeader) w);
                }
            }

            JsSubHeader.initSubheader("." + subHeaderClass, getElement());

            if (subHeaders.size() == 0) {
                $(getElement()).find(".top_holder").css("display", "none");
            }
        }
    }

    @Override
    protected void onUnload() {
        super.onUnload();

        unload();
    }

    @Override
    public void unload() {
        subHeaders.clear();
    }

    @Override
    public void reload() {
        unload();
        load();
    }

    @Override
    public void setType(SubHeaderType type) {
        getTypeMixin().setType(type);
    }

    @Override
    public SubHeaderType getType() {
        return getTypeMixin().getType();
    }

    protected CssTypeMixin<SubHeaderType, MaterialSubHeaderContainer> getTypeMixin() {
        if (typeMixin == null) {
            typeMixin = new CssTypeMixin<>(this);
        }
        return typeMixin;
    }
}