Java tutorial
/* ------------------------------------------------------------------------- OpenTripPlanner GWT Client Copyright (C) 2015 Mecatran - info@mecatran.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ------------------------------------------------------------------------- */ package com.mecatran.otp.gwt.client.view; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; 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.Panel; import com.google.gwt.user.client.ui.PushButton; import com.google.gwt.user.client.ui.ToggleButton; import com.google.gwt.user.client.ui.VerticalPanel; import com.mecatran.otp.gwt.client.PlannerResources; import com.mecatran.otp.gwt.client.i18n.I18nUtils; import com.mecatran.otp.gwt.client.model.ItineraryBean; import com.mecatran.otp.gwt.client.utils.FormatUtils; public class ItinerarySummaryWidget extends Composite { private ToggleButton pinButton; private Anchor showHideDetailsLink; private Anchor printLink; public ItinerarySummaryWidget(ItineraryBean itinerary, ClickHandler closeHandler, ClickHandler pinHandler) { VerticalPanel rootPanel = new VerticalPanel(); // Addresses and close button top line HorizontalPanel departureAndButtonsPanel = new HorizontalPanel(); departureAndButtonsPanel.addStyleName("itinerary-topbar-panel"); rootPanel.add(departureAndButtonsPanel); // Departure and arrival time and addresses Grid departureAndArrivalPanel = new Grid(2, 2); departureAndArrivalPanel.addStyleName("itinerary-addresses-panel"); departureAndButtonsPanel.add(departureAndArrivalPanel); departureAndButtonsPanel.setCellWidth(departureAndArrivalPanel, "100%"); Label departureTimeLabel = new Label(FormatUtils.formatTime(itinerary.getDepartureTime())); departureTimeLabel.addStyleName("itinerary-departure-time"); Label arrivalTimeLabel = new Label(FormatUtils.formatTime(itinerary.getArrivalTime())); arrivalTimeLabel.addStyleName("itinerary-arrival-time"); String[] formattedAddresses = FormatUtils.formatAddresses(itinerary.getStartAddress(), itinerary.getEndAddress()); // TODO Use HTML::setStyleName() ? HTML departureAddressLabel = new HTML( "<div class='itinerary-address-inner'>" + formattedAddresses[0] + "</div>"); departureAddressLabel.addStyleName("itinerary-address"); HTML arrivalAddressLabel = new HTML( "<div class='itinerary-address-inner'>" + formattedAddresses[1] + "</div>"); arrivalAddressLabel.addStyleName("itinerary-address"); departureAndArrivalPanel.setWidget(0, 0, departureTimeLabel); departureAndArrivalPanel.setWidget(0, 1, departureAddressLabel); departureAndArrivalPanel.setWidget(1, 0, arrivalTimeLabel); departureAndArrivalPanel.setWidget(1, 1, arrivalAddressLabel); departureAndArrivalPanel.getColumnFormatter().setWidth(1, "100%"); departureAndArrivalPanel.getCellFormatter().setVerticalAlignment(0, 1, HasVerticalAlignment.ALIGN_TOP); departureAndArrivalPanel.getCellFormatter().setVerticalAlignment(1, 1, HasVerticalAlignment.ALIGN_TOP); // Buttons panel VerticalPanel buttonsPanel = new VerticalPanel(); departureAndButtonsPanel.add(buttonsPanel); buttonsPanel.setCellHorizontalAlignment(buttonsPanel, HasHorizontalAlignment.ALIGN_RIGHT); // Close button PushButton closeButton = new PushButton(new Image(PlannerResources.INSTANCE.closeButtonPng())); closeButton.addStyleName("itinerary-close-button"); closeButton.addClickHandler(closeHandler); buttonsPanel.add(closeButton); // Pin button pinButton = new ToggleButton(new Image(PlannerResources.INSTANCE.noFavoritePng()), new Image(PlannerResources.INSTANCE.favoritePng())); pinButton.addStyleName("itinerary-pin-button"); pinButton.addClickHandler(pinHandler); buttonsPanel.add(pinButton); // Date, duration and travel mode summary HorizontalPanel timesAndSummaryPanel = new HorizontalPanel(); timesAndSummaryPanel.setWidth("100%"); timesAndSummaryPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); rootPanel.add(timesAndSummaryPanel); // Date and duration VerticalPanel dateAndDurationPanel = new VerticalPanel(); dateAndDurationPanel.addStyleName("itinerary-date-duration-panel"); timesAndSummaryPanel.add(dateAndDurationPanel); String departureDate = FormatUtils.formatDate(itinerary.getDepartureTime()); String duration = FormatUtils.formatDuration(itinerary.getDurationSeconds()); Label departureDateLabel = new Label(departureDate); departureDateLabel.addStyleName("itinerary-departure-date"); dateAndDurationPanel.add(departureDateLabel); HTML durationLabel = new HTML(duration); durationLabel.addStyleName("itinerary-duration"); dateAndDurationPanel.add(durationLabel); // Travel modes Panel modesAndLinksPanel = new VerticalPanel(); timesAndSummaryPanel.add(modesAndLinksPanel); timesAndSummaryPanel.setCellWidth(modesAndLinksPanel, "100%"); ItineraryModeLineWidget modeLine = new ItineraryModeLineWidget(itinerary); modeLine.addStyleName("itinerary-modeline-panel"); modesAndLinksPanel.add(modeLine); // Links (show details, print) HorizontalPanel linksPanel = new HorizontalPanel(); showHideDetailsLink = new Anchor(I18nUtils.tr("show.itinerary.details")); showHideDetailsLink.addStyleName("itinerary-details-show-hide"); linksPanel.add(showHideDetailsLink); printLink = new Anchor(I18nUtils.tr("print.itinerary")); printLink.addStyleName("itinerary-details-print-link"); linksPanel.add(printLink); modesAndLinksPanel.add(linksPanel); initWidget(rootPanel); } public boolean isPinned() { return pinButton.isDown(); } public void addPrintClickHandler(ClickHandler clickHandler) { printLink.addClickHandler(clickHandler); } public void setOpened(boolean opened) { showHideDetailsLink.setText(I18nUtils.tr(opened ? "hide.itinerary.details" : "show.itinerary.details")); } }