com.extjs.gxt.ui.client.widget.FramePanel Maven / Gradle / Ivy
/*
* Sencha GXT 2.3.1a - Sencha for GWT
* Copyright(c) 2007-2013, Sencha, Inc.
* [email protected]
*
* http://www.sencha.com/products/gxt/license/
*/
package com.extjs.gxt.ui.client.widget;
import java.util.Stack;
import com.extjs.gxt.ui.client.GXT;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
/**
* Displays an iframe under a element to stop IE bleed through and applet
* related issues.
*
*
* - Inherited Events:
* - Component Enable
* - Component Disable
* - Component BeforeHide
* - Component Hide
* - Component BeforeShow
* - Component Show
* - Component Attach
* - Component Detach
* - Component BeforeRender
* - Component Render
* - Component BrowserEvent
* - Component BeforeStateRestore
* - Component StateRestore
* - Component BeforeStateSave
* - Component SaveState
*
*/
public class FramePanel extends Component {
private static Stack frameStack = new Stack();
/**
* Returns a frame panel from the stack.
*
* @return the frame panel
*/
public static FramePanel pop() {
FramePanel panel = frameStack.size() > 0 ? frameStack.pop() : null;
if (panel == null) {
panel = new FramePanel();
}
return panel;
}
/**
* Pushes a panel back onto the stack.
*
* @param panel the panel
*/
public static void push(FramePanel panel) {
frameStack.push(panel);
}
/**
* Creates a new frame panel.
*/
private FramePanel() {
}
/**
* Removes the panel.
*
* @param element the parent element
*/
public native void onHide(Element element) /*-{
var frame = [email protected]::element;
frame.parentNode.removeChild(frame);
}-*/;
/**
* Displays the panel behind the given element.
*
* @param element the element
*/
public void onShow(Element element) {
if (GXT.isIE) {
bindIE(element, getElement());
} else {
bindOther(element, getElement());
}
}
/**
* Displays the panel behind the given element.
*
* @param element the element
* @param zIndex the z index
*/
public void onShow(Element element, int zIndex) {
onShow(element);
setZIndex(zIndex);
}
/**
* Sets the z-index of the panel.
*
* @param index the z index
*/
public void setZIndex(int index) {
index = Math.max(1, index);
if (GXT.isIE) {
setZIndexIE(index);
} else {
DOM.setIntStyleAttribute(getElement(), "zIndex", index);
}
}
public void sync(Element element) {
if (GXT.isIE) {
syncIE(element, getElement());
} else {
syncOther(element, getElement());
}
}
@Override
protected void onRender(Element target, int index) {
setElement(DOM.createIFrame(), target, index);
if (GXT.isIE && GXT.isSecure) {
getElement().setPropertyString("src", GXT.SSL_SECURE_URL);
}
el().insertInto(target, index);
}
private native void bindIE(Element parent, Element frame) /*-{
frame.scrolling = 'no';
frame.frameBorder = 0;
frame.style.position = 'absolute';
frame.className = 'my-frame-panel';
parent.__frame = frame;
frame.__parent = parent;
frame.style.setExpression('left', parent.offsetLeft);
frame.style.setExpression('top', parent.offsetTop);
frame.style.setExpression('width', parent.offsetWidth);
frame.style.setExpression('height', parent.offsetHeight);
parent.parentElement.insertBefore(frame, parent);
}-*/;
private native void bindOther(Element parent, Element frame) /*-{
frame.scrolling = 'no';
frame.frameBorder = 0;
frame.style.position = 'absolute';
frame.className = 'my-frame-panel';
parent.__frame = frame;
frame.__parent = parent;
frame.style.left = parent.offsetLeft + 'px';
frame.style.top = parent.offsetTop + 'px';
frame.style.width = parent.offsetWidth + 'px';
frame.style.height = parent.offsetHeight + 'px';
parent.parentNode.insertBefore(frame, parent);
}-*/;
private native void setZIndexIE(int index) /*-{
var frame = [email protected]::element;
frame.style.setExpression('zIndex', index);
}-*/;
private native void syncIE(Element parent, Element frame) /*-{
frame.style.setExpression('left', parent.offsetLeft);
frame.style.setExpression('top', parent.offsetTop);
frame.style.setExpression('width', parent.offsetWidth);
frame.style.setExpression('height', parent.offsetHeight);
}-*/;
private native void syncOther(Element parent, Element frame) /*-{
frame.style.left = parent.offsetLeft + 'px';
frame.style.top = parent.offsetTop + 'px';
frame.style.width = parent.offsetWidth + 'px';
frame.style.height = parent.offsetHeight + 'px';
}-*/;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy