package com.smartgwt.sample.showcase.client;
import java.util.Arrays;
import java.util.List;
import com.smartgwt.client.types.ContentsType;
import com.smartgwt.client.types.Side;
import com.smartgwt.client.util.Browser;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.HTMLPane;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.HStack;
import com.smartgwt.client.widgets.layout.Layout;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.layout.VStack;
import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;
public abstract class ShowcasePanel extends VLayout {
protected Canvas viewPanel;
private Window introWindow;
private String betaMessage = "";
public ShowcasePanel() {
setWidth100();
setHeight100();
viewPanel = getViewPanel();
if (Browser.getIsDesktop()) {
final boolean topIntro = isTopIntro();
final Layout layout = topIntro ? new VLayout() : new HLayout();
layout.setWidth100();
layout.setMargin(10);
layout.setMembersMargin(10);
final HLayout wrapper = new HLayout();
wrapper.setWidth100();
wrapper.addMember(viewPanel);
layout.addMember(wrapper);
addMember(layout);
} else {
addMember(viewPanel);
}
}
protected boolean shouldWrapViewPanel() {
List<Class<?>> optimalPanelClasses = Arrays.<Class<?>>asList(
Canvas.class, HLayout.class, HStack.class, VLayout.class, VStack.class
);
return optimalPanelClasses.indexOf(viewPanel.getClass()) < 0;
}
protected boolean isTopIntro() {
return false;
}
public SourceEntity[] getSourceUrls() {
return null;
}
public final String getSourceGenUrl() {
String className = getClass().getName();
String htmlPath = className.replace("com.smartgwt.sample.showcase.client.", "").replace(".", "/") + ".java.html";
return "sourcegen/" + htmlPath;
}
public String getHtmlUrl() {
return null;
}
public String getXmlDataUrl() {
return null;
}
public String getJsonDataUrl() {
return null;
}
public String getCssUrl() {
return null;
}
public String getIntro() {
return null;
}
public abstract Canvas getViewPanel();
protected void showSource(SourceEntity[] sourceUrls, int width, int height, boolean useDesktopMode) {
final Window win = new Window();
win.setShouldPrint(false);
win.setTitle("Source");
win.setHeaderIcon("pieces/16/cube_green.png", 16, 16);
win.setKeepInParentRect(true);
if (!useDesktopMode) {
win.setMaximized(true);
win.setShowMaximizeButton(false);
win.setShowMinimizeButton(false);
}
int userWidth = com.google.gwt.user.client.Window.getClientWidth() - 20;
win.setWidth(userWidth < width ? userWidth : width);
int userHeight = com.google.gwt.user.client.Window.getClientHeight() - 96;
win.setHeight(userHeight < height ? userHeight : height);
int windowTop = 40;
int windowLeft = com.google.gwt.user.client.Window.getClientWidth() - (win.getWidth() + 20) - getPageLeft();
win.setLeft(windowLeft);
win.setTop(windowTop);
win.setCanDragReposition(true);
win.setCanDragResize(true);
win.setMembersMargin(5);
final TabSet tabs = new TabSet();
tabs.setTabBarPosition(Side.TOP);
tabs.setWidth100();
tabs.setHeight100();
for (int i = 0; i < sourceUrls.length; i++) {
SourceEntity sourceUrl = sourceUrls[i];
tabs.addTab(buildSourceTab(sourceUrl));
}
int lastPeriodIndex = getClass().getName().lastIndexOf('.');
String simpleClassName = getClass().getName().substring(lastPeriodIndex + 1);
String[] dataURLs = DataURLRecords.getDataURLs(simpleClassName);
if (dataURLs != null) {
for (String dataURL : dataURLs) {
String url = "sourcegen/" + dataURL + ".html";
int lastSlashIndex = dataURL.lastIndexOf('/');
String tabTitle = lastSlashIndex >= 0 ? dataURL.substring(lastSlashIndex + 1) : dataURL;
tabs.addTab(buildSourceTab(tabTitle, "silk/page_white_cup.png", url));
}
}
if (getCssUrl() != null) {
tabs.addTab(buildSourceTab("CSS", "silk/css.png", getCssUrl()));
}
if (getJsonDataUrl() != null) {
tabs.addTab(buildSourceTab("JSON", "silk/database_table.png", getJsonDataUrl()));
}
if (getXmlDataUrl() != null) {
tabs.addTab(buildSourceTab("XML", "silk/database_table.png", getXmlDataUrl()));
}
win.addItem(tabs);
if (useDesktopMode) addChild(win);
win.show();
}
protected void setBetaMessage(String message) {
this.betaMessage = message;
}
protected void showOverview(boolean useDesktopMode) {
final boolean topIntro = isTopIntro();
final String intro = getIntro();
if (intro == null || intro.isEmpty()) return;
if (introWindow == null) {
introWindow = new Window();
introWindow.setShouldPrint(false);
introWindow.setTitle("Overview");
introWindow.setHeaderIcon("pieces/16/cube_green.png", 16, 16);
introWindow.setKeepInParentRect(true);
if (!useDesktopMode) {
introWindow.setMaximized(true);
introWindow.setShowMaximizeButton(false);
introWindow.setShowMinimizeButton(false);
}
String introContents = "<p class='intro-para'>" + intro + this.betaMessage + "</p>";
Canvas contents = new Canvas();
contents.setCanSelectText(true);
contents.setPadding(10);
contents.setContents(introContents);
if (topIntro) {
contents.setWidth100();
} else {
contents.setDefaultWidth(200);
}
if (useDesktopMode) {
introWindow.setAutoSize(true);
introWindow.setAutoHeight();
}
introWindow.setCanDragReposition(false);
introWindow.setCanDragResize(false);
introWindow.addItem(contents);
}
if (useDesktopMode) {
final Layout layout = ((Layout)getMember(0));
if (topIntro) {
layout.addMember(introWindow, 0);
} else {
layout.addMember(introWindow);
}
} else {
introWindow.show();
}
}
public Tab buildSourceTab(SourceEntity sourceEntity) {
return buildSourceTab(sourceEntity.getTitle(), "silk/script_go.png", sourceEntity.getUrl());
}
public Tab buildSourceTab(String title, String icon, String url) {
final HTMLPane tabPane = new HTMLPane();
tabPane.setWidth100();
tabPane.setHeight100();
tabPane.setContentsURL(url);
tabPane.setContentsType(ContentsType.PAGE);
final Tab tab = new Tab(title, icon);
tab.setPane(tabPane);
return tab;
}
}