eu.maxschuster.vaadin.buttonlink.demo.DemoUI.java Source code

Java tutorial

Introduction

Here is the source code for eu.maxschuster.vaadin.buttonlink.demo.DemoUI.java

Source

/*
 * Copyright 2014 Max Schuster
 *
 * 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.
 */

package eu.maxschuster.vaadin.buttonlink.demo;

import java.util.Arrays;
import java.util.List;

import eu.maxschuster.vaadin.buttonlink.ButtonLink;

import javax.servlet.annotation.WebServlet;

import com.vaadin.annotations.Theme;
import com.vaadin.annotations.Title;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.server.ExternalResource;
import com.vaadin.server.Page.UriFragmentChangedListener;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.server.Page.UriFragmentChangedEvent;
import com.vaadin.server.Resource;
import com.vaadin.server.ThemeResource;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.CheckBox;

/**
 * @author Max Schuster
 */
@Title("ButtonLink Add-on Demo")
@SuppressWarnings("serial")
@Theme("demo-valo")
public class DemoUI extends UI {

    @WebServlet(value = "/*", asyncSupported = true)
    @VaadinServletConfiguration(productionMode = true, ui = DemoUI.class, widgetset = "eu.maxschuster.vaadin.buttonlink.demo.DemoWidgetSet")
    public static class Servlet extends VaadinServlet {
    }

    private final List<String> themes = Arrays.asList("demo-valo", "demo-reindeer", "demo-runo", "demo-chameleon");

    private final String defaultTheme = themes.get(0);

    private final ComboBox themeSelect = new ComboBox("Themes:", themes);

    private final Resource vaadinIcon = new ThemeResource("icons/vaadin-logo-15x16.png");

    @Override
    protected void init(VaadinRequest request) {

        final VerticalLayout wrapper = new VerticalLayout();
        wrapper.setSizeFull();
        setContent(wrapper);

        // Show it in the middle of the screen
        final VerticalLayout layout = new VerticalLayout();
        layout.setSpacing(true);
        layout.setSizeUndefined();
        wrapper.addComponent(layout);
        wrapper.setComponentAlignment(layout, Alignment.MIDDLE_CENTER);

        final Label themeName = new Label();
        themeName.setCaption("Current Theme:");
        themeName.addStyleName("h1");
        layout.addComponent(themeName);

        Label waring = new Label("<strong>Attention:</strong><br />\nChanging the theme may take a few seconds!");
        waring.setContentMode(ContentMode.HTML);
        layout.addComponent(waring);

        getPage().addUriFragmentChangedListener(new UriFragmentChangedListener() {

            @Override
            public void uriFragmentChanged(UriFragmentChangedEvent event) {
                String fragment = event.getUriFragment().replace("!", "");
                if (fragment.isEmpty()) {
                    fragment = defaultTheme;
                }
                loadTheme(fragment);
            }
        });

        themeSelect.setSizeFull();
        themeSelect.setNullSelectionAllowed(false);
        themeSelect.addValueChangeListener(new ValueChangeListener() {

            @Override
            public void valueChange(ValueChangeEvent event) {
                String fragment = "!" + themeSelect.getValue();
                getPage().setUriFragment(fragment);
            }
        });
        layout.addComponent(themeSelect);
        layout.setComponentAlignment(themeSelect, Alignment.BOTTOM_CENTER);

        final CheckBox useIcon = new CheckBox("Use icons");
        useIcon.setValue(false);
        layout.addComponent(useIcon);

        final HorizontalLayout comparsionLayout = new HorizontalLayout();
        comparsionLayout.setSpacing(true);
        layout.addComponent(comparsionLayout);
        layout.setComponentAlignment(comparsionLayout, Alignment.TOP_CENTER);

        final Button button = new Button("This is a \"normal\" Button", new Button.ClickListener() {

            @Override
            public void buttonClick(ClickEvent event) {
                Notification.show("Hello World!");
            }
        });
        comparsionLayout.addComponent(button);
        comparsionLayout.setComponentAlignment(button, Alignment.MIDDLE_RIGHT);

        // Initialize our new UI component
        final ButtonLink buttonLink = new ButtonLink("This is a ButtonLink",
                new ExternalResource("https://vaadin.com"));
        buttonLink.setTargetName("_blank");
        buttonLink.setDescription("Visit vaadin.com in a new tab or window.");
        buttonLink.addStyleName("test-stylename");
        comparsionLayout.addComponent(buttonLink);
        comparsionLayout.setComponentAlignment(buttonLink, Alignment.MIDDLE_LEFT);

        themeName.setPropertyDataSource(themeSelect);

        useIcon.addValueChangeListener(new ValueChangeListener() {

            @Override
            public void valueChange(ValueChangeEvent event) {
                boolean b = (Boolean) event.getProperty().getValue();
                if (b) {
                    button.setIcon(vaadinIcon, "Vaadin Logo");
                    buttonLink.setIcon(vaadinIcon, "Vaadin Logo");
                } else {
                    button.setIcon(null);
                    buttonLink.setIcon(null);
                }
            }
        });

        String fragment = getPage().getUriFragment();

        loadTheme(
                fragment == null || fragment.replace("!", "").isEmpty() ? defaultTheme : fragment.replace("!", ""));
    }

    private void loadTheme(String theme) {
        setTheme(theme);
        themeSelect.setValue(theme);
    }

}