Java tutorial
/* * Copyright 2010 Google Inc. * * 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 com.dingziran.effective.client; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Display; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.TableCellElement; import com.google.gwt.dom.client.TableElement; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.http.client.UrlBuilder; import com.google.gwt.i18n.client.HasDirection.Direction; import com.google.gwt.i18n.client.LocaleInfo; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.cellview.client.CellTree; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.Window.Location; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.ResizeComposite; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.SimpleLayoutPanel; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.TreeViewModel; import java.util.Date; import java.util.List; /** * Application shell for Showcase sample. */ public class ShowcaseShell extends ResizeComposite { interface ShowcaseShellUiBinder extends UiBinder<Widget, ShowcaseShell> { } /** * The text color of the selected tab. */ private static final String SELECTED_TAB_COLOR = "#333333"; /** * The unique ID assigned to the next callback. */ private static int nextCallbackId = 0; private static ShowcaseShellUiBinder uiBinder = GWT.create(ShowcaseShellUiBinder.class); /** * The panel that holds the content. */ @UiField SimpleLayoutPanel contentPanel; /** * The container around the links at the top of the app. */ @UiField TableElement linkCell; /** * A drop box used to change the locale. */ @UiField ListBox localeBox; /** * The container around locale selection. */ @UiField TableCellElement localeSelectionCell; /** * The main menu used to navigate to examples. */ @UiField(provided = true) CellTree mainMenu; /** * The button used to show the example. */ @UiField Anchor tabExample; /** * The button used to show the source CSS style. */ @UiField Anchor tabStyle; /** * The button used to show the source code. */ @UiField Anchor tabSource; /** * The list of available source code. */ @UiField ListBox tabSourceList; /** * The current {@link ContentWidget} being displayed. */ private ContentWidget content; /** * The handler used to handle user requests to view raw source. */ private HandlerRegistration contentSourceHandler; /** * The widget that holds CSS or source code for an example. */ private HTML contentSource = new HTML(); /** * The html used to show a loading icon. */ private final String loadingHtml; /** * Construct the {@link ShowcaseShell}. * * @param treeModel the treeModel that backs the main menu */ public ShowcaseShell(TreeViewModel treeModel) { AbstractImagePrototype proto = AbstractImagePrototype.create(Showcase.images.loading()); loadingHtml = proto.getHTML(); // Create the cell tree. mainMenu = new CellTree(treeModel, null); mainMenu.setAnimationEnabled(true); mainMenu.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.DISABLED); mainMenu.ensureDebugId("mainMenu"); // Initialize the ui binder. initWidget(uiBinder.createAndBindUi(this)); initializeLocaleBox(); contentSource.getElement().getStyle().setBackgroundColor("#eee"); contentSource.getElement().getStyle().setMargin(10.0, Unit.PX); contentSource.getElement().getStyle().setProperty("border", "1px solid #c3c3c3"); contentSource.getElement().getStyle().setProperty("padding", "10px 2px"); // In RTL mode, we need to set some attributes. if (LocaleInfo.getCurrentLocale().isRTL()) { localeSelectionCell.setAlign("left"); linkCell.setPropertyString("align", "left"); } // Default to no content. contentPanel.ensureDebugId("contentPanel"); setContent(null); } /** * Returns the currently displayed content. (Used by tests.) */ public ContentWidget getContent() { return content; } /** * Get the main menu used to select examples. * * @return the main menu */ public CellTree getMainMenu() { return mainMenu; } /** * Set the content to display. * * @param content the content */ public void setContent(final ContentWidget content) { // Clear the old handler. if (contentSourceHandler != null) { contentSourceHandler.removeHandler(); contentSourceHandler = null; } this.content = content; if (content == null) { tabExample.setVisible(true); tabStyle.setVisible(false); tabSource.setVisible(false); tabSourceList.setVisible(false); contentPanel.setWidget(null); return; } // Setup the options bar. tabExample.setVisible(true); tabStyle.setVisible(false); tabSource.setVisible(false); /* * Show the list of raw source files if there are any. We need to add at * least one option to the list for crawlability. If we do not, HtmlUnit * innerHtml will close the select tag in the open tag (ie, use a forward * slash instead of a separate close tag) which most browsers parse * incorrectly. */ tabSourceList.clear(); tabSourceList.addItem("Example"); tabSourceList.setVisible(false); // Handle user requests for raw source. contentSourceHandler = content.addValueChangeHandler(new ValueChangeHandler<String>() { public void onValueChange(ValueChangeEvent<String> event) { // Select the file in the list box. String filename = event.getValue(); // Show the file. //showSourceFile(); } }); // Show the widget. showExample(); } /** * Initialize the {@link ListBox} used for locale selection. */ private void initializeLocaleBox() { final String cookieName = LocaleInfo.getLocaleCookieName(); final String queryParam = LocaleInfo.getLocaleQueryParam(); if (cookieName == null && queryParam == null) { // if there is no way for us to affect the locale, don't show the selector localeSelectionCell.getStyle().setDisplay(Display.NONE); return; } String currentLocale = LocaleInfo.getCurrentLocale().getLocaleName(); if (currentLocale.equals("default")) { currentLocale = "en"; } String[] localeNames = LocaleInfo.getAvailableLocaleNames(); for (String localeName : localeNames) { if (!localeName.equals("default")) { String nativeName = LocaleInfo.getLocaleNativeDisplayName(localeName); localeBox.addItem(nativeName, localeName); if (localeName.equals(currentLocale)) { localeBox.setSelectedIndex(localeBox.getItemCount() - 1); } } } localeBox.addChangeHandler(new ChangeHandler() { @SuppressWarnings("deprecation") public void onChange(ChangeEvent event) { String localeName = localeBox.getValue(localeBox.getSelectedIndex()); if (cookieName != null) { // expire in one year Date expires = new Date(); expires.setYear(expires.getYear() + 1); Cookies.setCookie(cookieName, localeName, expires); } if (queryParam != null) { UrlBuilder builder = Location.createUrlBuilder().setParameter(queryParam, localeName); Window.Location.replace(builder.buildString()); } else { // If we are using only cookies, just reload Window.Location.reload(); } } }); } /** * Show a example. */ private void showExample() { if (content == null) { return; } // Set the highlighted tab. tabExample.getElement().getStyle().setColor(SELECTED_TAB_COLOR); tabStyle.getElement().getStyle().clearColor(); tabSource.getElement().getStyle().clearColor(); contentPanel.setWidget(content); } }