/*
* JBoss, Home of Professional Open Source.
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.bpm.console.client.common;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.IFrameElement;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.WindowCloseListener;
import com.google.gwt.user.client.ui.Frame;
import org.gwt.mosaic.core.client.Dimension;
import org.gwt.mosaic.ui.client.Caption;
import org.gwt.mosaic.ui.client.ScrollLayoutPanel;
import org.gwt.mosaic.ui.client.WindowPanel;
import org.gwt.mosaic.ui.client.layout.BoxLayout;
import org.gwt.mosaic.ui.client.layout.BoxLayoutData;
import org.jboss.bpm.console.client.util.ConsoleLog;
import org.jboss.bpm.console.client.util.WindowUtil;
import java.util.Date;
/**
* A window panel that embeds an iframe.<br>
* It resizes autmatically, if the iframe.window.name property
* is set to the contents size.<p>
* I.e.
* <code>
* window.name="320,240";
* </code>
* <p/>
* In case the property is not set, is resizes according to the current
* window dimension.
*
* @see org.jboss.bpm.console.client.common.IFrameWindowCallback
*
* @author Heiko.Braun <heiko.braun@jboss.com>
*/
public class IFrameWindowPanel
{
private WindowPanel windowPanel = null;
private Frame frame = null;
private String url;
private String title;
private IFrameWindowCallback callback = null;
public IFrameWindowPanel(String url, String title)
{
this.url = url;
this.title = title;
}
private void createWindow()
{
windowPanel = new WindowPanel();
windowPanel.setAnimationEnabled(true);
ScrollLayoutPanel layout = new ScrollLayoutPanel(new BoxLayout(BoxLayout.Orientation.VERTICAL));
layout.setStyleName("bpm-window-layout");
layout.setPadding(5);
// info
HeaderLabel header = new HeaderLabel(title, true);
layout.add(header, new BoxLayoutData(BoxLayoutData.FillStyle.HORIZONTAL));
windowPanel.addWindowCloseListener(new WindowCloseListener() {
public void onWindowClosed() {
if(getCallback()!=null)
getCallback().onWindowClosed();
windowPanel = null;
frame = null;
}
public String onWindowClosing() {
return null;
}
});
// iframe
frame = new Frame()
{
/*public void onBrowserEvent(com.google.gwt.user.client.Event event)
{
ConsoleLog.debug("Browser Event: "+ DOM.eventGetTypeString(event));
final Element iframe = getFrame().getElement();
String size = getContents(IFrameElement.as(iframe));
if(size!=null && size.indexOf(",")!=-1)
{
ConsoleLog.debug("Frame content size: "+ size);
String[] wh = size.split(",");
getWindowPanel().setContentSize(
new Dimension(
Integer.valueOf(wh[0]),
Integer.valueOf(wh[1])+100
)
);
}
else
{
ConsoleLog.debug("Unable to retrieve frame content size: "+size);
final int width = Window.getClientWidth()-200;
final int height = Window.getClientHeight()-100;
getWindowPanel().setContentSize(
new Dimension(width,height)
);
}
windowPanel.layout();
windowPanel.center();
windowPanel.setVisible(true);
} */
};
//frame.sinkEvents(com.google.gwt.user.client.Event.ONLOAD);
DOM.setStyleAttribute(frame.getElement(), "border", "none");
// https://jira.jboss.org/jira/browse/JBPM-2244
frame.getElement().setId(
String.valueOf( new Date().getTime())
);
frame.setUrl(this.url);
layout.add(frame, new BoxLayoutData(BoxLayoutData.FillStyle.BOTH));
windowPanel.setWidget(layout);
WindowUtil.addMaximizeButton(windowPanel, Caption.CaptionRegion.RIGHT);
WindowUtil.addMinimizeButton(windowPanel, Caption.CaptionRegion.RIGHT);
// show window
final int width = Window.getClientWidth()-200;
final int height = Window.getClientHeight()-100;
windowPanel.setContentSize(new Dimension(width, height));
windowPanel.center();
}
private void destroyWindow()
{
this.windowPanel.hide();
}
public Frame getFrame()
{
return frame;
}
public WindowPanel getWindowPanel()
{
return windowPanel;
}
public void setCallback(IFrameWindowCallback callback)
{
this.callback = callback;
}
private IFrameWindowCallback getCallback()
{
return callback;
}
public native String getContents(Element iframe) /*-{
try {
// Make sure the iframe's window & document are loaded.
if (!iframe.contentWindow || !iframe.contentWindow.document)
return "no set";
// Get the contents from the window.name property.
return iframe.contentWindow.name;
} catch (e) {
return "Error: "+e;
}
}-*/;
public void show()
{
createWindow();
}
}