@qooxdoo/framework
Version:
The JS Framework for Coders
97 lines (85 loc) • 2.4 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2010 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Christian Hagendorn (chris_schmidt)
************************************************************************ */
/**
* EXPERIMENTAL!
*
* Cell renderer can be used for Widget rendering. The Widget creation can be configured with the
* {@link #delegate} property:
*
* <pre class="javascript">
* widgetCell.setDelegate(
* {
* createWidget : function() {
* return new qx.ui.form.ListItem();
* }
* });
* </pre>
*
* When the {@link #delegate} property is not used {@link qx.ui.core.Widget} instances are created as
* fallback.
*
* The {@link #updateData} method can be used to update any Widget property. Just use a <code>Map</code>
* with property name as key:
*
* <pre class="javascript">
* // widget is a qx.ui.form.ListItem instance
* widgetCell.updateData(widget,
* {
* label: "my label value",
* icon: "qx/icon/22/emotes/face-angel.png"
* });
* </pre>
*/
qx.Class.define("qx.ui.virtual.cell.WidgetCell",
{
extend : qx.ui.virtual.cell.AbstractWidget,
properties :
{
/**
* Delegation object, which can have one or more functions defined by the
* {@link qx.ui.virtual.cell.IWidgetCellDelegate} interface.
*/
delegate :
{
apply: "_applyDelegate",
init: null,
nullable: true
}
},
members :
{
// apply method
_applyDelegate : function(value, old) {
this._cleanupPool();
},
// overridden
_createWidget : function() {
var delegate = this.getDelegate();
if (delegate != null && delegate.createWidget != null) {
return delegate.createWidget();
} else {
return new qx.ui.core.Widget();
}
},
// overridden
updateData : function(widget, data) {
for (var key in data)
{
if (qx.Class.hasProperty(widget.constructor, key)) {
qx.util.PropertyUtil.setUserValue(widget, key, data[key]);
} else {
throw new Error("Can't update data! The key '" + key + "' is not a Property!");
}
}
}
}
});