@qooxdoo/framework
Version:
The JS Framework for Coders
199 lines (170 loc) • 6.73 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 redirects all children handling methods to a child widget of the
* including class. This is e.g. used in {@link qx.ui.window.Window} to add
* child widgets directly to the window pane.
*
* The including class must implement the method <code>getChildrenContainer</code>,
* which has to return the widget, to which the child widgets should be added.
*/
qx.Mixin.define("qx.ui.core.MRemoteChildrenHandling",
{
/*
*****************************************************************************
MEMBERS
*****************************************************************************
*/
members :
{
/**
* Forward the call with the given function name to the children container
*
* @param functionName {String} name of the method to forward
* @param a1 {var?} first argument of the method to call
* @param a2 {var?} second argument of the method to call
* @param a3 {var?} third argument of the method to call
* @return {var} The return value of the forward method
*/
__forward : function(functionName, a1, a2, a3)
{
var container = this.getChildrenContainer();
if (container === this) {
functionName = "_" + functionName;
}
return (container[functionName])(a1, a2, a3);
},
/**
* 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.__forward("getChildren");
},
/**
* Whether the widget contains children.
*
* @return {Boolean} Returns <code>true</code> when the widget has children.
*/
hasChildren : function() {
return this.__forward("hasChildren");
},
/**
* 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 item to add.
* @param options {Map?null} Optional layout data for item.
* @return {qx.ui.core.Widget} This object (for chaining support)
*/
add : function(child, options) {
return this.__forward("add", child, options);
},
/**
* Remove the given child item.
*
* @param child {qx.ui.core.LayoutItem} the item to remove
* @return {qx.ui.core.Widget} This object (for chaining support)
*/
remove : function(child) {
return this.__forward("remove", child);
},
/**
* Remove all children.
* @return {Array} An array containing the removed children.
*/
removeAll : function() {
return this.__forward("removeAll");
},
/**
* Returns the index position of the given item if it is
* a child item. 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.LayoutItem} the item to query for
* @return {Integer} The index position or <code>-1</code> when
* the given item is no child of this layout.
*/
indexOf : function(child) {
return this.__forward("indexOf", child);
},
/**
* Add a child 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} item to add
* @param index {Integer} Index, at which the item will be inserted
* @param options {Map?null} Optional layout data for item.
*/
addAt : function(child, index, options) {
this.__forward("addAt", child, index, options);
},
/**
* Add an item before another already inserted item
*
* 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} item to add
* @param before {qx.ui.core.LayoutItem} item before the new item will be inserted.
* @param options {Map?null} Optional layout data for item.
*/
addBefore : function(child, before, options) {
this.__forward("addBefore", child, before, options);
},
/**
* Add an item after another already inserted item
*
* 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} item to add
* @param after {qx.ui.core.LayoutItem} item, after which the new item will be inserted
* @param options {Map?null} Optional layout data for item.
*/
addAfter : function(child, after, options) {
this.__forward("addAfter", child, after, options);
},
/**
* Remove the item 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 item to remove.
* @return {qx.ui.core.LayoutItem} The removed item
*/
removeAt : function(index) {
return this.__forward("removeAt", index);
}
}
});