com.objetdirect.gwt.umldrawer.client.StartPanel.java Source code

Java tutorial

Introduction

Here is the source code for com.objetdirect.gwt.umldrawer.client.StartPanel.java

Source

/*
 * This file is part of the GWTUML project and was written by Mounier Florian <mounier-dot-florian.at.gmail'dot'com> for Objet Direct
 * <http://wwww.objetdirect.com>
 * 
 * Copyright  2009 Objet Direct Contact: gwtuml@googlegroups.com
 * 
 * GWTUML is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later version.
 * 
 * GWTUML is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License along with GWTUML. If not, see <http://www.gnu.org/licenses/>.
 */
package com.objetdirect.gwt.umldrawer.client;

import static com.objetdirect.gwt.umlapi.client.umlcomponents.DiagramType.OBJECT;

import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.objetdirect.gwt.umlapi.client.helpers.OptionsManager;
import com.objetdirect.gwt.umlapi.client.helpers.QualityLevel;
import com.objetdirect.gwt.umlapi.client.helpers.ThemeManager;
import com.objetdirect.gwt.umlapi.client.helpers.ThemeManager.Theme;
import com.objetdirect.gwt.umlapi.client.umlcomponents.DiagramType;

/**
 * This class is the index panel displaying drawer options and logo
 * 
 * @author Florian Mounier (mounier-dot-florian.at.gmail'dot'com)
 */
public class StartPanel extends VerticalPanel {

    final Label crossLbl = new Label("x");
    final Label geometryStyleLbl = new Label("Geometry Style : ");
    final ListBox geometryStyleListBox = new ListBox();
    final HorizontalPanel geometryStylePanel = new HorizontalPanel();
    final Label gfxEngineLbl = new Label("Graphics Engine : ");
    final ListBox gfxEngineListBox = new ListBox();
    final HorizontalPanel gfxEnginePanel = new HorizontalPanel();
    final TextBox heightTxtBox = new TextBox();
    final CheckBox isResolutionAutoChkBox = new CheckBox(" Auto Resolution");
    final Image logoImg = new Image("gwtumllogo_rev-ed.png");
    final Label qualityLbl = new Label("Quality : ");
    final ListBox qualityListBox = new ListBox();
    final HorizontalPanel qualityPanel = new HorizontalPanel();
    final HorizontalPanel resolutionAutoPanel = new HorizontalPanel();
    final Label resolutionLbl = new Label("Resolution : ");
    final HorizontalPanel resolutionPanel = new HorizontalPanel();

    final Button startDemoBtn = new Button("... Or start the Demo ...");
    //   final Button            startAnimateDemoBtn      = new Button("... Or start the Animated Demo !");
    final Label themeLbl = new Label("Theme : ");
    final ListBox themeListBox = new ListBox();
    final HorizontalPanel themePanel = new HorizontalPanel();
    final TextBox widthTxtBox = new TextBox();
    private final LoadingScreen loadingScreen;

    /**
     * Constructor of the {@link StartPanel}
     */
    public StartPanel() {
        super();
        this.loadingScreen = new LoadingScreen();
        this.loadingScreen.show();
        Log.trace("Starting App");

        this.setWidth("100%");
        this.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
        this.setSpacing(20);

        this.gfxEnginePanel.setSpacing(5);
        this.geometryStylePanel.setSpacing(5);
        this.themePanel.setSpacing(5);
        this.resolutionPanel.setSpacing(5);
        this.gfxEngineListBox.addItem("Tatami GFX");
        this.gfxEngineListBox.addItem("Incubator Canvas GFX");
        this.gfxEngineListBox.addItem("GWT Canvas GFX");
        this.geometryStyleListBox.addItem("Linear");
        this.geometryStyleListBox.addItem("Shape Based");

        for (final Theme theme : Theme.values()) {
            this.themeListBox.addItem(ThemeManager.getThemeName(theme));
        }
        this.isResolutionAutoChkBox.setValue(true);
        this.widthTxtBox.setEnabled(false);
        this.heightTxtBox.setEnabled(false);
        this.isResolutionAutoChkBox.addClickHandler(new ClickHandler() {
            public void onClick(final ClickEvent event) {
                StartPanel.this.widthTxtBox.setEnabled(!StartPanel.this.isResolutionAutoChkBox.getValue());
                StartPanel.this.heightTxtBox.setEnabled(!StartPanel.this.isResolutionAutoChkBox.getValue());

            }
        });

        this.widthTxtBox.setText("" + (Window.getClientWidth() - 50));
        this.heightTxtBox.setText("" + (Window.getClientHeight() - 50));

        this.widthTxtBox.setWidth("50px");
        this.heightTxtBox.setWidth("50px");
        for (final QualityLevel qlvl : QualityLevel.values()) {
            this.qualityListBox.addItem(qlvl.toString());
        }
        this.qualityListBox.setSelectedIndex(1); // High quality

        this.add(this.logoImg);
        for (final DiagramType type : DiagramType.values()) {
            final Button startBtn = new Button("Start new UML " + type.getName() + " diagram...");
            this.add(startBtn);
            startBtn.addClickHandler(new ClickHandler() {
                @Override
                public void onClick(final ClickEvent event) {
                    StartPanel.this.setOptions("Drawer", type);
                }
            });
        }
        this.add(this.startDemoBtn);
        this.startDemoBtn.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                StartPanel.this.setOptions("Demo", OBJECT);
            }
        });
        //      this.add(this.startAnimateDemoBtn);
        //      this.startAnimateDemoBtn.addClickHandler(new ClickHandler() {
        //         @Override
        //         public void onClick(final ClickEvent event) {
        //            StartPanel.this.setOptions("AnimatedDemo", HYBRID);
        //         }
        //      });

        if (OptionsManager.get("Advanced") == 1) {
            this.gfxEnginePanel.add(this.gfxEngineLbl);
            this.gfxEnginePanel.add(this.gfxEngineListBox);
            this.add(this.gfxEnginePanel);
            this.geometryStylePanel.add(this.geometryStyleLbl);
            this.geometryStylePanel.add(this.geometryStyleListBox);
            this.add(this.geometryStylePanel);
        }

        this.themePanel.add(this.themeLbl);
        this.themePanel.add(this.themeListBox);
        this.add(this.themePanel);
        if (OptionsManager.get("Advanced") == 1) {
            this.resolutionAutoPanel.add(this.isResolutionAutoChkBox);
            this.add(this.resolutionAutoPanel);

            this.resolutionPanel.add(this.resolutionLbl);
            this.resolutionPanel.add(this.widthTxtBox);
            this.resolutionPanel.add(this.crossLbl);
            this.resolutionPanel.add(this.heightTxtBox);
            this.add(this.resolutionPanel);
        }
        this.qualityPanel.add(this.qualityLbl);
        this.qualityPanel.add(this.qualityListBox);
        this.add(this.qualityPanel);
        this.loadingScreen.hide();
        this.addStyleName("verticalTable");
    }

    private void setOptions(final String newHistoryToken, final DiagramType type) {
        OptionsManager.set("DiagramType", type.ordinal());
        OptionsManager.set("Theme", this.themeListBox.getSelectedIndex());
        OptionsManager.set("QualityLevel", this.qualityListBox.getSelectedIndex());
        if (OptionsManager.get("Advanced") == 1) {
            OptionsManager.set("GraphicEngine", this.gfxEngineListBox.getSelectedIndex());
            OptionsManager.set("GeometryStyle", this.geometryStyleListBox.getSelectedIndex());
            OptionsManager.set("AutoResolution", this.isResolutionAutoChkBox.getValue() ? 1 : 0);

            int w;
            int h;
            try {
                w = Integer.parseInt(this.widthTxtBox.getText());
                h = Integer.parseInt(this.heightTxtBox.getText());
            } catch (final Exception ex) {
                Log.warn("Unreadable resolution " + this.widthTxtBox.getText() + "x" + this.heightTxtBox.getText()
                        + "!");
                w = 800;
                h = 600;
            }
            OptionsManager.set("Width", w);
            OptionsManager.set("Height", h);
        }
        History.newItem(newHistoryToken + "?" + OptionsManager.toURL());

    }
}