Java tutorial
/* * 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()); } }