@qooxdoo/framework
Version:
The JS Framework for Coders
261 lines (202 loc) • 6.04 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:
* Martin Wittemann (martinwittemann)
* Jonathan Weiß (jonathan_rass)
************************************************************************ */
/**
* A page is the way to add content to a {@link TabView}. Each page gets a
* button to switch to the page. Only one page is visible at a time.
*
* @childControl button {qx.ui.tabview.TabButton} tab button connected to the page
*/
qx.Class.define("qx.ui.tabview.Page",
{
extend : qx.ui.container.Composite,
/*
*****************************************************************************
CONSTRUCTOR
*****************************************************************************
*/
/**
* @param label {String} Initial label of the tab
* @param icon {String} Initial icon of the tab
*/
construct : function(label, icon)
{
this.base(arguments);
this._createChildControl("button");
// init
if (label != null) {
this.setLabel(label);
}
if (icon != null) {
this.setIcon(icon);
}
},
/*
*****************************************************************************
EVENTS
*****************************************************************************
*/
events :
{
/**
* Fired by {@link qx.ui.tabview.TabButton} if the close button is tapped.
*/
"close" : "qx.event.type.Event"
},
/*
*****************************************************************************
PROPERTIES
*****************************************************************************
*/
properties :
{
// overridden
appearance :
{
refine : true,
init : "tabview-page"
},
/** The label/caption/text of the Page's button. */
label :
{
check : "String",
init : "",
apply : "_applyLabel"
},
/** Any URI String supported by qx.ui.basic.Image to display an icon in Page's button. */
icon :
{
check : "String",
init : "",
apply : "_applyIcon",
nullable: true
},
/** Indicates if the close button of a TabButton should be shown. */
showCloseButton :
{
check : "Boolean",
init : false,
apply : "_applyShowCloseButton"
}
},
/*
*****************************************************************************
MEMBERS
*****************************************************************************
*/
members :
{
/*
---------------------------------------------------------------------------
WIDGET API
---------------------------------------------------------------------------
*/
// overridden
/**
* @lint ignoreReferenceField(_forwardStates)
*/
_forwardStates :
{
barTop : 1,
barRight : 1,
barBottom : 1,
barLeft : 1,
firstTab : 1,
lastTab : 1
},
/*
---------------------------------------------------------------------------
APPLY ROUTINES
---------------------------------------------------------------------------
*/
// property apply
_applyIcon : function(value, old) {
var btn = this.getChildControl("button");
if (value) {
btn.setIcon(value);
btn._showChildControl("icon");
} else {
btn._excludeChildControl("icon");
}
},
// property apply
_applyLabel : function(value, old) {
this.getChildControl("button").setLabel(value);
},
// overridden
_applyEnabled: function(value, old)
{
this.base(arguments, value, old);
// delegate to non-child widget button
// since enabled is inheritable value may be null
var btn = this.getChildControl("button");
value == null ? btn.resetEnabled() : btn.setEnabled(value);
},
/*
---------------------------------------------------------------------------
WIDGET API
---------------------------------------------------------------------------
*/
// overridden
_createChildControlImpl : function(id, hash)
{
var control;
switch(id)
{
case "button":
control = new qx.ui.tabview.TabButton;
control.setAllowGrowX(true);
control.setAllowGrowY(true);
control.setUserData("page", this);
control.addListener("close", this._onButtonClose, this);
break;
}
return control || this.base(arguments, id);
},
/*
---------------------------------------------------------------------------
PROPERTY APPLY
---------------------------------------------------------------------------
*/
// property apply
_applyShowCloseButton : function(value, old) {
this.getChildControl("button").setShowCloseButton(value);
},
/*
---------------------------------------------------------------------------
EVENT LISTENERS
---------------------------------------------------------------------------
*/
/**
* Fires an "close" event when the close button of the TabButton of the page
* is tapped.
*/
_onButtonClose : function() {
this.fireEvent("close");
},
/*
---------------------------------------------------------------------------
PUBLIC API
---------------------------------------------------------------------------
*/
/**
* Returns the button used within this page. This method is used by
* the TabView to access the button.
*
* @internal
* @return {qx.ui.form.RadioButton} The button associated with this page.
*/
getButton: function() {
return this.getChildControl("button");
}
}
});