/*
* WizardPage.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.core.client.widget;
import java.util.ArrayList;
import org.rstudio.studio.client.common.HelpLink;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.Widget;
public abstract class WizardPage<I,T> extends Composite
implements WizardPageInfo, CanFocus
{
public WizardPage(String title,
String subTitle,
String pageCaption,
ImageResource image,
ImageResource largeImage)
{
this(title, subTitle, pageCaption, image, largeImage, null);
}
public WizardPage(String title,
String subTitle,
String pageCaption,
ImageResource image,
ImageResource largeImage,
Widget widget)
{
title_ = title;
subTitle_ = subTitle;
pageCaption_ = pageCaption;
image_ = image;
largeImage_ = largeImage;
if (widget != null)
{
initWidget(widget);
}
else
{
LayoutPanel layoutPanel = new LayoutPanel();
if (largeImage_ != null)
{
Image pageImage = new Image(largeImage_);
layoutPanel.add(pageImage);
layoutPanel.setWidgetLeftWidth(pageImage,
8, Unit.PX,
pageImage.getWidth(), Unit.PX);
layoutPanel.setWidgetTopHeight(pageImage,
10, Unit.PX,
pageImage.getHeight(), Unit.PX);
}
Widget pageWidget = createWidget();
layoutPanel.add(pageWidget);
layoutPanel.setWidgetLeftRight(pageWidget,
largeImage_ != null ? 133 : 15,
Unit.PX,
15, Unit.PX);
layoutPanel.setWidgetTopBottom(pageWidget,
10, Unit.PX,
0, Unit.PX);
initWidget(layoutPanel);
addStyleName(getWizardPageBackgroundStyle());
}
}
protected String getWizardPageBackgroundStyle()
{
WizardResources.Styles styles = WizardResources.INSTANCE.styles();
return styles.wizardPageBackground();
}
public String getTitle()
{
return title_;
}
public String getSubTitle()
{
return subTitle_;
}
public String getPageCaption()
{
return pageCaption_;
}
public ImageResource getImage()
{
return image_;
}
public ImageResource getLargeImage()
{
return largeImage_;
}
public ArrayList<WizardPage<I,T>> getSubPages()
{
return null;
}
public void setIntermediateResult(T result)
{
}
public void onActivate(ProgressIndicator indicator)
{
}
public void onBeforeActivate(Operation operation, ModalDialogBase wizard)
{
operation.execute();
}
public void onDeactivate(Operation operation)
{
operation.execute();
}
public void onWizardClosing()
{
}
public HelpLink getHelpLink()
{
return null;
}
abstract protected Widget createWidget();
abstract protected void initialize(I initData);
abstract protected T collectInput();
protected boolean validate(T input)
{
return true;
}
protected void validateAsync(T input,
OperationWithInput<Boolean> onValidated)
{
onValidated.execute(validate(input));
}
protected boolean acceptNavigation()
{
return true;
}
private final String title_;
private final String subTitle_;
private final String pageCaption_;
private final ImageResource image_;
private final ImageResource largeImage_;
}