Java tutorial
/* * Copyright 2007 Manuel Carrasco Moino. (manuel_carrasco at users.sourceforge.net) * http://code.google.com/p/gwtchismes * * 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.google.code.p.gwtcsample.client; import java.util.HashMap; import com.google.code.p.gwtchismes.client.GWTCAlert; import com.google.code.p.gwtchismes.client.GWTCBox; import com.google.code.p.gwtchismes.client.GWTCButton; import com.google.code.p.gwtchismes.client.GWTCDatePicker; import com.google.code.p.gwtchismes.client.GWTCDatePickerAbstract; import com.google.code.p.gwtchismes.client.GWTCGlassPanel; import com.google.code.p.gwtchismes.client.GWTCIntervalSelector; import com.google.code.p.gwtchismes.client.GWTCModalBox; import com.google.code.p.gwtchismes.client.GWTCPrint; import com.google.code.p.gwtchismes.client.GWTCProgress; import com.google.code.p.gwtchismes.client.GWTCSimpleDatePicker; import com.google.code.p.gwtchismes.client.GWTCTabPanel; import com.google.code.p.gwtchismes.client.GWTCWait; import com.google.code.p.gwtchismes.client.GWTCWeekSelector; import com.google.code.p.gwtchismes.client.editor.GWTCEditor; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; 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.i18n.client.DateTimeFormat; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DockPanel; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; /** * @author Manuel Carrasco Moino * <h3>Class description</h3> * Examples for learning the usage of the GWTChismes library */ public class GWTCSample implements EntryPoint { private static final String STYLE_SAMPLE_CONTAINER = "sampleContainer"; private HashMap<String, String> intervalStrs = new HashMap<String, String>(); private HashMap<String, String> pickerStrs = new HashMap<String, String>(); private HashMap<String, String> pickerTitleStrs = new HashMap<String, String>(); private HashMap<String, String> pickerNavigationStrs = new HashMap<String, String>(); private final GWTCSampleI18n i18n = (GWTCSampleI18n) GWT.create(GWTCSampleI18n.class); private final GWTCAlert alert = new GWTCAlert(); private final GWTCAlert decorAlert = new GWTCAlert(GWTCAlert.OPTION_ROUNDED_BLUE); private final GWTCWait wait = new GWTCWait(); boolean testCode() { return false; } GWTCSample() { intervalStrs.put("key.checkin", i18n.key_checkin()); intervalStrs.put("key.checkout", i18n.key_checkout()); intervalStrs.put("key.nights", i18n.key_nights()); intervalStrs.put("key.interval", i18n.key_interval()); intervalStrs.put("key.change", i18n.key_change()); intervalStrs.put("key.checkin.button", i18n.key_checkin_button()); intervalStrs.put("key.checkout.button", i18n.key_checkout_button()); intervalStrs.put("key.calendar.checkin.title", i18n.key_calendar_checkin_title()); intervalStrs.put("key.calendar.checkout.title", i18n.key_calendar_checkout_title()); intervalStrs.put("key.calendar.help", i18n.key_calendar_help()); pickerTitleStrs.put("key.next.month.title", i18n.key_next_month_title()); pickerTitleStrs.put("key.prev.month.title", i18n.key_prev_month_title()); pickerTitleStrs.put("key.today.title", i18n.key_today_title()); pickerTitleStrs.put("key.next.year.title", i18n.key_next_year_title()); pickerTitleStrs.put("key.prev.year.title", i18n.key_prev_year_title()); pickerTitleStrs.put("key.help.title", i18n.key_help_title()); pickerTitleStrs.put("key.close.title", i18n.key_close_title()); pickerStrs.put("key.today", i18n.key_today()); pickerStrs.put("key.help", i18n.key_help()); pickerStrs.put("key.close", i18n.key_close()); pickerNavigationStrs.put("key.next.month", i18n.key_next_month()); pickerNavigationStrs.put("key.prev.month", i18n.key_prev_month()); pickerNavigationStrs.put("key.next.year", i18n.key_next_year()); pickerNavigationStrs.put("key.prev.year", i18n.key_prev_year()); pickerStrs.putAll(pickerTitleStrs); wait.setMessage(i18n.wait_message()); } void setupLanguageLinks() { final Label english = new Label("English"); final Label spanish = new Label("Spanish"); final Label japanese = new Label("Japanese"); final ClickHandler changeLocale = new ClickHandler() { public void onClick(ClickEvent event) { Widget sender = (Widget) event.getSource(); if (sender == english) { Window.Location.assign("?locale=en"); } else if (sender == spanish) { Window.Location.assign("?locale=es"); } else if (sender == japanese) { Window.Location.assign("?locale=ja"); } } }; HorizontalPanel langPanel = new HorizontalPanel() { { setStyleName("langPanel"); String loc = Window.Location.getParameter("locale"); if (loc != null && !"en".equals(loc)) add(english); if (!"es".equals(loc)) add(spanish); if (!"ja".equals(loc)) add(japanese); english.addClickHandler(changeLocale); spanish.addClickHandler(changeLocale); japanese.addClickHandler(changeLocale); if ("ja".equals(loc)) alert.alert("This application has not been translated into Japanese yet.\n" + "Nevertheless you can see how dates are displayed in japanese because DatePicker uses GWT DateTimeFormat"); } }; RootPanel.get().add(langPanel); } public void onModuleLoad() { if (testCode()) return; setupLanguageLinks(); GWTCBox p1; GWTCTabPanel tp = new GWTCTabPanel(); p1 = new GWTCBox(STYLE_SAMPLE_CONTAINER); testButtons(p1); tp.add(p1, i18n.tab_buttons()); p1 = new GWTCBox(STYLE_SAMPLE_CONTAINER); testRoundedBox(p1); tp.add(p1, i18n.tab_boxes()); p1 = new GWTCBox(STYLE_SAMPLE_CONTAINER); testChismes(p1); tp.add(p1, i18n.tab_modals()); p1 = new GWTCBox(STYLE_SAMPLE_CONTAINER); testDatePicker(p1); RootPanel.get().add(p1); tp.add(p1, i18n.tab_date()); p1 = new GWTCBox(STYLE_SAMPLE_CONTAINER); testIntervalSelector(p1); tp.add(p1, i18n.tab_interval()); p1 = new GWTCBox(STYLE_SAMPLE_CONTAINER); testProgressBar(p1); tp.add(p1, i18n.tab_progress()); p1 = new GWTCBox(STYLE_SAMPLE_CONTAINER); testEditor(p1); tp.add(p1, i18n.tab_editor()); RootPanel p = RootPanel.get("gwtchismes-sample"); if (p == null) p = RootPanel.get(); p.add(tp); tp.selectTab(0); } private Panel createPanelWithDescription(Widget widget, String description) { FlexTable panel = new FlexTable(); panel.addStyleName("descrPanel"); Label label = new Label(description); label.setStyleName("descrLabel"); panel.setWidget(0, 0, label); panel.setWidget(0, 1, widget); panel.getCellFormatter().setWidth(0, 1, "100%"); panel.getCellFormatter().setVerticalAlignment(0, 1, HasVerticalAlignment.ALIGN_TOP); widget.addStyleName("descrWidget"); return panel; } public void testButtons(Panel box) { box.setTitle("GWTCButton"); ClickHandler buttonClickHandler = new ClickHandler() { public void onClick(ClickEvent event) { alert.alert(i18n.alert_message()); } }; // Button type 0 GWTCButton button = new GWTCButton(GWTCButton.BUTTON_TYPE_0, i18n.click_button(), buttonClickHandler); box.add(createPanelWithDescription(button, i18n.descr_button_0())); // Button type 1 button = new GWTCButton(GWTCButton.BUTTON_TYPE_1, i18n.click_button(), buttonClickHandler); box.add(createPanelWithDescription(button, i18n.descr_button_1())); // Button with image button = new GWTCButton(i18n.click_button(), buttonClickHandler) { { setEnabled(false); setImage(this.getImagesBundle().dialogCancel()); } }; box.add(createPanelWithDescription(button, i18n.descr_button_d())); // Print button button = new GWTCPrint(i18n.click_button()); box.add(createPanelWithDescription(button, i18n.descr_button_p())); } public void testChismes(Panel box) { box.setTitle("GWTCGlassPanel, GWTCModalBox, GWTCWait & GWTCAlert"); // GWTCGlassPanel final GWTCGlassPanel back = new GWTCGlassPanel(); back.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { back.hide(); } }); GWTCButton button = new GWTCButton(GWTCButton.BUTTON_TYPE_1, i18n.click_button(), new ClickHandler() { public void onClick(ClickEvent envent) { back.show(); } }); box.add(createPanelWithDescription(button, i18n.descr_glass())); // GWTCModalBox final GWTCModalBox modal = new GWTCModalBox(GWTCModalBox.OPTION_ROUNDED_FLAT); modal.add(new Label(i18n.alert_message())); modal.setAnimationEnabled(true); button = new GWTCButton(GWTCButton.BUTTON_TYPE_1, i18n.click_button(), new ClickHandler() { public void onClick(ClickEvent event) { modal.center(); } }); box.add(createPanelWithDescription(button, i18n.descr_modal())); // GWTCWait button = new GWTCButton(GWTCButton.BUTTON_TYPE_1, i18n.click_button(), new ClickHandler() { public void onClick(ClickEvent event) { wait.show(5); } }); box.add(createPanelWithDescription(button, i18n.descr_wait())); // GWTCAlert button = new GWTCButton(GWTCButton.BUTTON_TYPE_1, i18n.click_button()); button.setImage(button.getImagesBundle().warning()); button.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { alert.alert(i18n.alert_message()); } }); box.add(createPanelWithDescription(button, i18n.descr_alert_1())); // GWTCAlert in a rounded box button = new GWTCButton(i18n.click_button()); button.setImage(button.getImagesBundle().warning()); button.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { decorAlert.alert(i18n.alert_message()); } }); box.add(createPanelWithDescription(button, i18n.descr_alert_2())); } private Widget createPickerWidget(final GWTCSimpleDatePicker picker, final boolean asDialog) { picker.addValueChangeHandler(new ValueChangeHandler<GWTCSimpleDatePicker>() { public void onValueChange(ValueChangeEvent<GWTCSimpleDatePicker> event) { alert.alert(event.getValue().getSelectedDateStr("MMMM dd, yyyy (dddd)")); if (asDialog) picker.hide(); } }); if (asDialog) { final GWTCButton button = new GWTCButton(i18n.click_button()); button.setImage(button.getImagesBundle().calendar()); button.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { picker.show(button); } }); return button; } else { return picker; } } public void testDatePicker(GWTCBox box) { box.setTitle("GWTCDatePicker"); int options = GWTCDatePicker.CONFIG_DIALOG | GWTCDatePicker.CONFIG_ROUNDED_BOX | GWTCDatePicker.CONFIG_BACKGROUND; GWTCDatePickerAbstract picker = new GWTCDatePicker(options); picker.setI18nMessages(pickerTitleStrs); Widget widget = createPickerWidget(picker, true); box.add(createPanelWithDescription(widget, i18n.descr_picker_1())); options = GWTCDatePicker.CONFIG_DIALOG | GWTCDatePicker.CONFIG_NO_CLOSE_BUTTON | GWTCDatePicker.CONFIG_NO_HELP_BUTTON | GWTCDatePicker.CONFIG_NO_YEAR_BUTTON | GWTCDatePicker.CONFIG_BACKGROUND | GWTCDatePicker.CONFIG_LAYOUT_2 | GWTCDatePicker.CONFIG_FLAT_BUTTONS; picker = new GWTCDatePicker(options); picker.setCaptionText("Please, select a date"); picker.setI18nMessages(pickerTitleStrs); widget = createPickerWidget(picker, true); box.add(createPanelWithDescription(widget, i18n.descr_picker_2())); options = GWTCDatePicker.CONFIG_NO_HELP_BUTTON | GWTCDatePicker.CONFIG_NO_YEAR_BUTTON | GWTCDatePicker.CONFIG_FLAT_BUTTONS | GWTCDatePicker.CONFIG_LAYOUT_3 | GWTCDatePicker.CONFIG_DIALOG | GWTCDatePicker.CONFIG_BACKGROUND; picker = new GWTCDatePicker(options); picker.setI18nMessages(pickerStrs); picker.addStyleName("GWTCDatePicker-custom"); widget = createPickerWidget(picker, true); box.add(createPanelWithDescription(widget, i18n.descr_picker_3())); picker = new GWTCDatePicker(options, 2, "? x;p<->n"); picker.setI18nMessages(pickerStrs); picker.addStyleName("GWTCDatePicker-custom"); widget = createPickerWidget(picker, true); box.add(createPanelWithDescription(widget, i18n.descr_picker_4())); picker = new GWTCDatePickerCustom(); widget = createPickerWidget(picker, true); picker.setI18nMessages(pickerStrs); box.add(createPanelWithDescription(widget, i18n.descr_picker_5())); options = GWTCDatePicker.CONFIG_DEFAULT; picker = new GWTCDatePicker(options); picker.setI18nMessages(pickerTitleStrs); widget = createPickerWidget(picker, false); box.add(createPanelWithDescription(widget, i18n.descr_picker_6())); options = GWTCDatePicker.CONFIG_NO_YEAR_BUTTON | GWTCDatePicker.CONFIG_NO_HELP_BUTTON | GWTCDatePicker.CONFIG_LAYOUT_2 | GWTCDatePicker.CONFIG_STANDARD_BUTTONS; picker = new GWTCDatePicker(options); picker.setI18nMessages(pickerTitleStrs); widget = createPickerWidget(picker, false); box.add(createPanelWithDescription(widget, i18n.descr_picker_7())); options = GWTCDatePicker.CONFIG_NO_HELP_BUTTON | GWTCDatePicker.CONFIG_NO_YEAR_BUTTON | GWTCDatePicker.CONFIG_FLAT_BUTTONS | GWTCDatePicker.CONFIG_LAYOUT_3; picker = new GWTCDatePicker(options); picker.setI18nMessages(pickerTitleStrs); picker.addStyleName("GWTCDatePicker-custom"); picker.addStyleName("ppp"); widget = createPickerWidget(picker, false); box.add(createPanelWithDescription(widget, i18n.descr_picker_8())); } public void testIntervalSelector(GWTCBox box) { box.setTitle("GWTCIntervalSelector"); HashMap<String, String> strs = new HashMap<String, String>(); strs.putAll(intervalStrs); strs.putAll(pickerTitleStrs); for (int i : new int[] { 6, 5, 4, 3, 2, 1 }) { GWTCIntervalSelector interval = new GWTCIntervalSelector(i); interval.setI18nMessages(strs); box.add(createPanelWithDescription(interval, i18n.descr_interval_layout() + " " + i), DockPanel.SOUTH); } final GWTCWeekSelector weekInterval = new GWTCWeekSelector(); weekInterval.setMinimalDate("-4y"); weekInterval.setMaximalDate("-4y"); strs.putAll(pickerStrs); strs.put("key.calendar.checkin.title", i18n.select_week_caption()); strs.put("key.from", i18n.week_from()); strs.put("key.to", i18n.week_to()); strs.put("key.select.week", i18n.select_week()); weekInterval.setI18nMessages(strs); box.add(createPanelWithDescription(weekInterval, i18n.descr_week_interval_custom()), DockPanel.NORTH); final GWTCIntervalSelector intervalCustomized = new CustomIntervalSelector(); intervalCustomized.setDateFormat(DateTimeFormat.getShortDateFormat().getPattern().replace("yy", "yyyy")); intervalCustomized.setMaxdays(31); strs.putAll(pickerNavigationStrs); final Button customizedButton = new GWTCButton(i18n.click_button(), new ClickHandler() { public void onClick(ClickEvent event) { String ci = GWTCSimpleDatePicker.formatDate(DateTimeFormat.getFullDateFormat().getPattern(), intervalCustomized.getInitDate()); String co = GWTCSimpleDatePicker.formatDate(DateTimeFormat.getFullDateFormat().getPattern(), intervalCustomized.getEndDate()); alert.alert(ci + "\n" + co + "\n" + intervalCustomized.getNights()); } }); intervalCustomized.getGrid().setWidget(1, 3, customizedButton); customizedButton.setVisible(false); intervalCustomized.addValueChangeHandler(new ValueChangeHandler<GWTCIntervalSelector>() { public void onValueChange(ValueChangeEvent<GWTCIntervalSelector> event) { customizedButton.setVisible(true); } }); intervalCustomized.setI18nMessages(strs); box.add(createPanelWithDescription(intervalCustomized, i18n.descr_interval_custom()), DockPanel.NORTH); } public void testProgressBar(GWTCBox box) { box.setTitle("GWTCProgress"); class pTimer extends Timer { int done = 0; int total = 400; GWTCProgress prgBar; boolean doLoop; public pTimer(GWTCProgress p, boolean l) { prgBar = p; doLoop = l; } public void run() { if (done == 0 && doLoop == false) { prgBar.show(); } if (done >= total) { done = 0; if (doLoop == false) { cancel(); prgBar.hide(); } } prgBar.setProgress(done, total); done += 15; } } final GWTCProgress prgBar1 = new GWTCProgress(20, GWTCProgress.SHOW_TIME_REMAINING | GWTCProgress.SHOW_LEFT_TEXT | GWTCProgress.SHOW_NUMBERS); prgBar1.setText("gwt-file.jar"); prgBar1.addStyleName("gwtcu-thinBar"); final Timer timer1 = new pTimer(prgBar1, true); timer1.scheduleRepeating(500); box.add(createPanelWithDescription(prgBar1, i18n.descr_progress_1())); final GWTCProgress prgBar2 = new GWTCProgress(40, GWTCProgress.SHOW_TIME_REMAINING | GWTCProgress.SHOW_TEXT | GWTCProgress.SHOW_NUMBERS | GWTCProgress.SHOW_AS_DIALOG); prgBar2.setText(i18n.progress_title()); prgBar2.setTotalMessage(i18n.progress_total()); prgBar2.setPercentMessage(i18n.progress_percent()); prgBar2.setHoursMessage(i18n.progress_hours()); prgBar2.setMinutesMessage(i18n.progress_minutes()); prgBar2.setSecondsMessage(i18n.progress_seconds()); final Timer timer2 = new pTimer(prgBar2, false); final GWTCButton button = new GWTCButton(i18n.click_button(), new ClickHandler() { public void onClick(ClickEvent event) { prgBar2.show(); timer2.scheduleRepeating(200); } }); box.add(createPanelWithDescription(button, i18n.descr_progress_2())); } String styles[] = { GWTCBox.DEFAULT_STYLE, GWTCBox.STYLE_BLUE, GWTCBox.STYLE_GREY }; public void testRoundedBox(GWTCBox box) { box.setTitle("GWTCBox"); final GWTCBox styleBox = new GWTCBox(); styleBox.setText(i18n.box_msg()); final GWTCButton button = new GWTCButton(i18n.click_button(), new ClickHandler() { int t = 0; public void onClick(ClickEvent event) { for (int i = 0; i < 3; i++) { styleBox.removeStyleName(styles[i]); } t = t >= 2 ? 0 : t + 1; styleBox.setStyleName(styles[0]); styleBox.addStyleName(styles[t]); } }); HorizontalPanel horPanel = new HorizontalPanel() { { add(button); add(styleBox); setSpacing(2); } }; box.add(createPanelWithDescription(horPanel, i18n.descr_box_1())); GWTCBox distributionBox = new GWTCBox(GWTCBox.STYLE_BLUE); distributionBox.addStyleName("sampleBox"); distributionBox.setTitle("Title"); distributionBox.setText("Text"); distributionBox.add(new Label("NORTH 1"), DockPanel.NORTH); distributionBox.add(new Label("SOUTH 1"), DockPanel.SOUTH); distributionBox.add(new Label("WEST 1"), DockPanel.WEST); distributionBox.add(new Label("EAST 1"), DockPanel.EAST); distributionBox.add(new Label("CENTER"), DockPanel.CENTER); distributionBox.add(new Label("NORTH 2"), DockPanel.NORTH); distributionBox.add(new Label("NORTH 3"), DockPanel.NORTH); distributionBox.add(new Label("SOUTH 2"), DockPanel.SOUTH); distributionBox.add(new Label("SOUTH 3"), DockPanel.SOUTH); distributionBox.add(new Label("WEST 2"), DockPanel.WEST); distributionBox.add(new Label("WEST 3"), DockPanel.WEST); distributionBox.add(new Label("EAST 2"), DockPanel.EAST); distributionBox.add(new Label("EAST 3"), DockPanel.EAST); box.add(createPanelWithDescription(distributionBox, i18n.descr_box_2())); } public void testEditor(GWTCBox box) { box.setTitle("GWTCEditor"); GWTCEditor editor = new GWTCEditor(); editor.setWidth("100%"); box.add(editor); } }