StartPanel.java :  » GWT » gwtuml » com » objetdirect » gwt » umldrawer » client » Java Open Source

Java Open Source » GWT » gwtuml 
gwtuml » com » objetdirect » gwt » umldrawer » client » StartPanel.java
/*
 * 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());

  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.