@qooxdoo/framework
Version:
The JS Framework for Coders
213 lines (180 loc) • 6.8 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2008 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:
* Sebastian Werner (wpbasti)
* Fabian Jakobs (fjakobs)
************************************************************************ */
/**
* This mixin exposes all basic methods to manage widget children as public methods.
* It can only be included into instances of {@link Widget}.
*
* To optimize the method calls the including widget should call the method
* {@link #remap} in its defer function. This will map the protected
* methods to the public ones and save one method call for each function.
*/
qx.Mixin.define("qx.ui.core.MChildrenHandling",
{
/*
*****************************************************************************
MEMBERS
*****************************************************************************
*/
members :
{
/**
* Returns the children list
*
* @return {qx.ui.core.LayoutItem[]} The children array (Arrays are
* reference types, please do not modify them in-place)
*/
getChildren : function() {
return this._getChildren();
},
/**
* Whether the widget contains children.
*
* @return {Boolean} Returns <code>true</code> when the widget has children.
*/
hasChildren : function() {
return this._hasChildren();
},
/**
* Returns the index position of the given widget if it is
* a child widget. Otherwise it returns <code>-1</code>.
*
* This method works on the widget's children list. Some layout managers
* (e.g. {@link qx.ui.layout.HBox}) use the children order as additional
* layout information. Other layout manager (e.g. {@link qx.ui.layout.Grid})
* ignore the children order for the layout process.
*
* @param child {qx.ui.core.Widget} the widget to query for
* @return {Integer} The index position or <code>-1</code> when
* the given widget is no child of this layout.
*/
indexOf : function(child) {
return this._indexOf(child);
},
/**
* Adds a new child widget.
*
* The supported keys of the layout options map depend on the layout manager
* used to position the widget. The options are documented in the class
* documentation of each layout manager {@link qx.ui.layout}.
*
* @param child {qx.ui.core.LayoutItem} the widget to add.
* @param options {Map?null} Optional layout data for widget.
*/
add : function(child, options) {
this._add(child, options);
},
/**
* Add a child widget at the specified index
*
* This method works on the widget's children list. Some layout managers
* (e.g. {@link qx.ui.layout.HBox}) use the children order as additional
* layout information. Other layout manager (e.g. {@link qx.ui.layout.Grid})
* ignore the children order for the layout process.
*
* @param child {qx.ui.core.LayoutItem} Widget to add
* @param index {Integer} Index, at which the widget will be inserted
* @param options {Map?null} Optional layout data for widget.
*/
addAt : function(child, index, options) {
this._addAt(child, index, options);
},
/**
* Add a widget before another already inserted widget
*
* This method works on the widget's children list. Some layout managers
* (e.g. {@link qx.ui.layout.HBox}) use the children order as additional
* layout information. Other layout manager (e.g. {@link qx.ui.layout.Grid})
* ignore the children order for the layout process.
*
* @param child {qx.ui.core.LayoutItem} Widget to add
* @param before {qx.ui.core.LayoutItem} Widget before the new widget will be inserted.
* @param options {Map?null} Optional layout data for widget.
*/
addBefore : function(child, before, options) {
this._addBefore(child, before, options);
},
/**
* Add a widget after another already inserted widget
*
* This method works on the widget's children list. Some layout managers
* (e.g. {@link qx.ui.layout.HBox}) use the children order as additional
* layout information. Other layout manager (e.g. {@link qx.ui.layout.Grid})
* ignore the children order for the layout process.
*
* @param child {qx.ui.core.LayoutItem} Widget to add
* @param after {qx.ui.core.LayoutItem} Widget, after which the new widget will be inserted
* @param options {Map?null} Optional layout data for widget.
*/
addAfter : function(child, after, options) {
this._addAfter(child, after, options);
},
/**
* Remove the given child widget.
*
* @param child {qx.ui.core.LayoutItem} the widget to remove
*/
remove : function(child) {
this._remove(child);
},
/**
* Remove the widget at the specified index.
*
* This method works on the widget's children list. Some layout managers
* (e.g. {@link qx.ui.layout.HBox}) use the children order as additional
* layout information. Other layout manager (e.g. {@link qx.ui.layout.Grid})
* ignore the children order for the layout process.
*
* @param index {Integer} Index of the widget to remove.
* @return {qx.ui.core.LayoutItem} The child removed.
*/
removeAt : function(index) {
return this._removeAt(index);
},
/**
* Remove all children.
*
* @return {Array} An array of the removed children.
*/
removeAll : function() {
return this._removeAll();
}
},
/*
*****************************************************************************
STATICS
*****************************************************************************
*/
statics :
{
/**
* Mapping of protected methods to public.
* This omits an additional function call when using these methods. Call
* this methods in the defer block of the including class.
*
* @param members {Map} The including classes members map
*/
remap : function(members)
{
members.getChildren = members._getChildren;
members.hasChildren = members._hasChildren;
members.indexOf = members._indexOf;
members.add = members._add;
members.addAt = members._addAt;
members.addBefore = members._addBefore;
members.addAfter = members._addAfter;
members.remove = members._remove;
members.removeAt = members._removeAt;
members.removeAll = members._removeAll;
}
}
});