@qooxdoo/framework
Version:
The JS Framework for Coders
218 lines (177 loc) • 5.79 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2011 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:
* Tino Butz (tbtz)
************************************************************************ */
/**
* Provides a list item element for a certain row and its data.
* Uses the {@link qx.ui.mobile.list.renderer.Default} list item renderer as a
* default renderer when no other renderer is given by the {@link qx.ui.mobile.list.List#delegate}.
*/
qx.Class.define("qx.ui.mobile.list.provider.Provider",
{
extend : qx.core.Object,
properties:
{
/**
* Delegation object which can have one or more functions defined by the
* {@link qx.ui.mobile.list.IListDelegate} interface. Set by the list.
*
* @internal
*/
delegate :
{
event: "changeDelegate",
init: null,
nullable: true,
apply : "_applyDelegate"
}
},
members :
{
__itemRenderer : null,
__groupRenderer : null,
/**
* Sets the item renderer.
*
* @param renderer {qx.ui.mobile.list.renderer.Abstract} The used item renderer
*/
_setItemRenderer : function(renderer) {
this.__itemRenderer = renderer;
},
/**
* Returns the set item renderer.
*
* @return {qx.ui.mobile.list.renderer.Abstract} The used item renderer
*/
_getItemRenderer : function() {
return this.__itemRenderer;
},
/**
* Sets the group renderer.
* @param renderer {qx.ui.mobile.list.renderer.group.Abstract} the group renderer.
*/
_setGroupRenderer : function(renderer) {
this.__groupRenderer = renderer;
},
/**
* Gets the group renderer.
* @return {qx.ui.mobile.list.renderer.group.Abstract} the group renderer.
*/
_getGroupRenderer : function() {
return this.__groupRenderer;
},
/**
* Returns the list item element for a given row.
*
* @param data {var} The data of the row.
* @param row {Integer} The row index.
*
* @return {Element} the list item element.
*/
getItemElement : function(data, row)
{
this.__itemRenderer.reset();
this._configureItem(data, row);
// Clone the element and all it's events
var clone = qx.bom.Element.clone(this.__itemRenderer.getContainerElement(), true);
clone.setAttribute("data-row", row);
return clone;
},
/**
* Returns the group item element for a given row.
*
* @param data {var} The data of the group.
* @param group {Integer} The group index.
*
* @return {Element} the group item element.
*/
getGroupElement : function(data, group)
{
this.__groupRenderer.reset();
this._configureGroupItem(data, group);
// Clone the element and all it's events
var clone = qx.bom.Element.clone(this.__groupRenderer.getContainerElement(), true);
clone.removeAttribute("id");
clone.setAttribute("data-group", group);
return clone;
},
/**
* Configure the list item renderer with the passed data.
*
* @param data {var} The data of the row.
* @param row {Integer} The row index.
*/
_configureItem : function(data, row)
{
var delegate = this.getDelegate();
if (delegate != null && delegate.configureItem != null) {
delegate.configureItem(this.__itemRenderer, data, row);
}
},
/**
* Configures the group renderer with the passed group data.
* @param data {var} The data of the group.
* @param group {Integer} The group index.
*/
_configureGroupItem : function(data, group)
{
var configureGroupItem = qx.util.Delegate.getMethod(this.getDelegate(), "configureGroupItem");
if (configureGroupItem) {
configureGroupItem(this.__groupRenderer, data, group);
}
},
/**
* Creates an instance of the group renderer to use. When no delegate method
* is given the function will return an instance of {@link qx.ui.mobile.list.renderer.group.Default}.
*
* @return {qx.ui.mobile.list.renderer.group.Abstract} An instance of the group renderer.
*/
_createGroupRenderer : function()
{
var createGroupRenderer = qx.util.Delegate.getMethod(this.getDelegate(), "createGroupRenderer");
var groupRenderer = null;
if (createGroupRenderer == null) {
groupRenderer = new qx.ui.mobile.list.renderer.group.Default();
} else {
groupRenderer = createGroupRenderer();
}
return groupRenderer;
},
/**
* Creates an instance of the item renderer to use. When no delegate method
* is given the function will return an instance of {@link qx.ui.mobile.list.renderer.Default}.
*
* @return {qx.ui.mobile.list.renderer.Abstract} An instance of the item renderer.
*
*/
_createItemRenderer : function()
{
var createItemRenderer = qx.util.Delegate.getMethod(this.getDelegate(), "createItemRenderer");
var itemRenderer = null;
if (createItemRenderer == null)
{
itemRenderer = new qx.ui.mobile.list.renderer.Default();
} else {
itemRenderer = createItemRenderer();
}
return itemRenderer;
},
// property apply
_applyDelegate : function(value, old)
{
this._setItemRenderer(this._createItemRenderer());
this._setGroupRenderer(this._createGroupRenderer());
}
},
destruct : function()
{
this._disposeObjects("__itemRenderer","__groupRenderer");
}
});