/*
* Ext GWT 2.2.4 - Ext for GWT
* Copyright(c) 2007-2010, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.ui.client.widget;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.widget.layout.LayoutData;
import com.google.gwt.user.client.ui.Widget;
/**
* Provides access to package protected methods of component and widget.
*/
public class ComponentHelper {
public static void doAttach(Widget widget) {
if (widget != null && !widget.isAttached()) {
doAttachNative(widget);
}
}
public static void doDetach(Widget widget) {
if (widget != null && widget.isAttached()) {
doDetachNative(widget);
}
}
public static LayoutData getLayoutData(Component c) {
return c.<LayoutData> getData("layoutData");
}
@SuppressWarnings("unchecked")
public static void removeFromParent(Widget widget) {
Widget parent = widget.getParent();
if (parent instanceof ContentPanel) {
ContentPanel cp = (ContentPanel) parent;
if (cp.getTopComponent() == widget) {
cp.setTopComponent(null);
return;
} else if (cp.getBottomComponent() == widget) {
cp.setBottomComponent(null);
return;
}
}
if (parent instanceof Container) {
((Container<Component>) parent).remove((Component) widget);
return;
}
if (parent instanceof WidgetComponent) {
setParent(null, widget);
return;
}
widget.removeFromParent();
}
public static void setLayoutData(Component c, LayoutData data) {
Widget parent = c.getParent();
c.setData("layoutData", data);
if (parent != null && parent instanceof Container<?>) {
((Container<?>) parent).setLayoutNeeded(true);
}
}
public static void setModel(Component c, ModelData model) {
c.setModel(model);
}
public static native void setParent(Widget parent, Widget child) /*-{
child.@com.google.gwt.user.client.ui.Widget::parent = parent;
}-*/;
static native void doAttachNative(Widget widget) /*-{
widget.@com.google.gwt.user.client.ui.Widget::onAttach()();
}-*/;
static native void doDetachNative(Widget widget) /*-{
widget.@com.google.gwt.user.client.ui.Widget::onDetach()();
}-*/;
}