| /* |
| * 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.google.gwt.sample.expenses.client; |
| |
| import com.google.gwt.core.client.GWT; |
| import com.google.gwt.dom.client.Style.Unit; |
| import com.google.gwt.event.dom.client.ClickEvent; |
| import com.google.gwt.event.dom.client.ClickHandler; |
| import com.google.gwt.layout.client.Layout; |
| import com.google.gwt.layout.client.Layout.Layer; |
| import com.google.gwt.requestfactory.ui.client.LoginWidget; |
| import com.google.gwt.uibinder.client.UiBinder; |
| import com.google.gwt.uibinder.client.UiField; |
| import com.google.gwt.user.client.ui.Composite; |
| import com.google.gwt.user.client.ui.DockLayoutPanel; |
| import com.google.gwt.user.client.ui.LayoutPanel; |
| import com.google.gwt.user.client.ui.Widget; |
| |
| /** |
| * UI shell for expenses sample app. |
| */ |
| public class ExpensesShell extends Composite { |
| |
| interface ShellUiBinder extends UiBinder<Widget, ExpensesShell> { |
| } |
| |
| private static ShellUiBinder uiBinder = GWT.create(ShellUiBinder.class); |
| |
| @UiField |
| ExpenseList expenseList; |
| @UiField |
| ExpenseTree expenseTree; |
| @UiField |
| LayoutPanel layoutPanel; |
| @UiField |
| LoginWidget loginWidget; |
| @UiField |
| DockLayoutPanel dockLayout; |
| |
| private final ExpenseDetails expenseDetails = new ExpenseDetails(); |
| |
| public ExpensesShell() { |
| initWidget(uiBinder.createAndBindUi(this)); |
| |
| // Handle breadcrumb events from Expense Details. |
| expenseDetails.getReportsLink().addClickHandler(new ClickHandler() { |
| public void onClick(ClickEvent event) { |
| showExpenseDetails(false); |
| } |
| }); |
| } |
| |
| public ExpenseDetails getExpenseDetails() { |
| return expenseDetails; |
| } |
| |
| public ExpenseList getExpenseList() { |
| return expenseList; |
| } |
| |
| public ExpenseTree getExpenseTree() { |
| return expenseTree; |
| } |
| |
| /** |
| * @return the login widget |
| */ |
| public LoginWidget getLoginWidget() { |
| return loginWidget; |
| } |
| |
| /** |
| * Show or hide the expense details. When showing, the expense list is hidden. |
| * |
| * @param isShowing true to show details, false to show reports list |
| */ |
| public void showExpenseDetails(boolean isShowing) { |
| if (isShowing) { |
| showWidget(expenseDetails, false); |
| } else { |
| showWidget(expenseList, true); |
| } |
| } |
| |
| /** |
| * Slide a widget into view. |
| * |
| * @param widget the widget to show |
| * @param fromLeft true to slide from left, false to slide from right |
| */ |
| private void showWidget(Widget widget, boolean fromLeft) { |
| // Early out if the widget is already in the layout panel. |
| final Widget current = layoutPanel.getWidget(0); |
| if (current == widget) { |
| return; |
| } |
| |
| // Initialize the layout. |
| layoutPanel.add(widget); |
| layoutPanel.setWidgetLeftWidth(current, 0, Unit.PCT, 100, Unit.PCT); |
| if (fromLeft) { |
| layoutPanel.setWidgetLeftWidth(widget, -100, Unit.PCT, 100, Unit.PCT); |
| } else { |
| layoutPanel.setWidgetLeftWidth(widget, 100, Unit.PCT, 100, Unit.PCT); |
| } |
| layoutPanel.forceLayout(); |
| |
| // Slide into view. |
| if (fromLeft) { |
| layoutPanel.setWidgetLeftWidth(current, 100, Unit.PCT, 100, Unit.PCT); |
| } else { |
| layoutPanel.setWidgetLeftWidth(current, -100, Unit.PCT, 100, Unit.PCT); |
| } |
| layoutPanel.setWidgetLeftWidth(widget, 0, Unit.PCT, 100, Unit.PCT); |
| layoutPanel.animate(500, new Layout.AnimationCallback() { |
| public void onAnimationComplete() { |
| // Remove the old widget when the animation completes. |
| layoutPanel.remove(current); |
| } |
| |
| public void onLayout(Layer layer, double progress) { |
| } |
| }); |
| } |
| } |