/**********************************************
* Copyright (C) 2009 Lukas Laag
* This file is part of lib-gwt-svg-samples.
*
* libgwtsvg-samples 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 3 of the License, or
* (at your option) any later version.
*
* libgwtsvg-samples 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 libgwtsvg-samples. If not, see http://www.gnu.org/licenses/
**********************************************/
package org.vectomatic.svg.samples.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
/**
* Base class for lib-gwt-svg samples. All samples are
* stored in a tab panel with three tabs.
* <ol>
* <li>The first tab contains the result of the sample code execution</li>
* <li>The second tab contains the source code for the sample</li>
* <li>The third tab contains the UiBinder code for the sample</li>
* <ol>
* @author laaglu
*/
public abstract class SampleBase {
/**
* Directory where HTML-ified source code is generated
*/
public static final String HTML_SRC_DIR = "src/";
/**
* Directory where HTML-ified UiBinder code is generated
*/
public static final String UIBINDER_SRC_DIR = "binder/";
/**
* The HTML-ified source code
*/
public HTML sourceHtml;
/**
* The HTML-ified UiBinder code
*/
public HTML uiBinderHtml;
/**
* The tab panel containing this sample
*/
@UiField
public TabLayoutPanel tabPanel;
/**
* Instantiates the tab panel which contains the sample
* @return
*/
public abstract TabLayoutPanel getPanel();
/**
* Dynamically create the source code tab and UiBinder code tab
* @param sampleName The name of the sample
*/
protected void createCodeTabs(String sampleName) {
sourceHtml = createCodeTab("HTML");
requestCodeContents(HTML_SRC_DIR + sampleName + ".html", sourceHtml);
uiBinderHtml = createCodeTab("UIBinder");
requestCodeContents(UIBINDER_SRC_DIR + sampleName + ".html", uiBinderHtml);
tabPanel.selectTab(0);
}
private HTML createCodeTab(String tabName) {
// Create the tab container structure
FlowPanel tabContainer = new FlowPanel();
SimplePanel simplePanel = new SimplePanel();
FlowPanel container = new FlowPanel();
container.setStyleName(Main.mainBundle.css().sample());
HTML html = new HTML();
tabContainer.add(simplePanel);
simplePanel.setWidget(container);
container.add(html);
// Create the tab item
Label label = new Label(tabName);
label.setStyleName(Main.mainBundle.css().tab());
// Add the tab
tabPanel.add(tabContainer, label);
return html;
}
/**
* Load the sample HTML source code
*/
protected void requestCodeContents(String partialPath, final HTML html) {
// Request the contents of the file
// Add a bogus query to bypass the browser cache as advised by:
// https://developer.mozilla.org/En/Using_XMLHttpRequest#Bypassing_the_cache
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, GWT.getModuleBaseURL() + partialPath + "?ts=" + System.currentTimeMillis());
builder.setCallback(new RequestCallback() {
public void onError(Request request, Throwable exception) {
html.setHTML("Cannot find resource");
}
public void onResponseReceived(Request request, Response response) {
html.setHTML(response.getText());
}
});
// Send the request
try {
builder.send();
} catch (RequestException e) {
GWT.log("Cannot fetch HTML source for " + partialPath, e);
}
}
/**
* Resizes the sample
*/
protected void resize(int width, int height) {
GWT.log("resize: " + width + " " + height);
}
}