blob: 5a7964a07ec86acf4a43fac4bedac2f873b08703 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
qx.Class.define( "rwt.widgets.Group", {
extend : rwt.widgets.base.Parent,
construct : function() {
this.base( arguments );
// Sub widgets
this._createFrameObject();
this._createLegendObject();
// Processing parameters
this.setLegend( "" );
// Enable method remapping
this.remapChildrenHandlingTo(this._frameObject);
this.setOverflow( qx.constant.Style.OVERFLOW_HIDDEN );
var themeValues = new rwt.theme.ThemeValues( {} );
this._themeBackgroundColor = themeValues.getCssColor( "Group-Label", "background-color" );
themeValues.dispose();
// Make sure that the 'labelObject' is created
var labelObject = this.getLegendObject().getLabelObject();
if( labelObject == null ) {
this.setLegend( "(empty)" );
this.setLegend( "" );
}
labelObject = this.getLegendObject().getLabelObject();
labelObject.setMode( qx.constant.Style.LABEL_MODE_HTML );
this.addEventListener( "changeBackgroundColor",
this._onChangeBackgroundColor,
this );
this.addEventListener( "changeFont",
this._onChangeFont,
this );
this.getLegendObject().addEventListener( "mouseover",
this._onMouseOver,
this );
this.getLegendObject().addEventListener( "mouseout",
this._onMouseOut,
this );
// Disable scrolling (see bug 345903)
rwt.widgets.base.Widget.disableScrolling( this );
},
destruct : function() {
this.removeEventListener( "changeBackgroundColor",
this._onChangeBackgroundColor,
this );
this.removeEventListener( "changeFont",
this._onChangeFont,
this );
this.getLegendObject().removeEventListener( "mouseover",
this._onMouseOver,
this );
this.getLegendObject().removeEventListener( "mouseout",
this._onMouseOut,
this );
this._disposeObjects("_legendObject", "_frameObject");
},
properties :
{
appearance :
{
refine : true,
init : "group-box"
}
},
members : {
addState : function( state ) {
this.base( arguments, state );
if( state.substr( 0, 8 ) == "variant_" ) {
this._legendObject.addState( state );
this._frameObject.addState( state );
}
},
removeState : function( state ) {
this.base( arguments, state );
if( state.substr( 0, 8 ) == "variant_" ) {
this._legendObject.removeState( state );
this._frameObject.removeState( state );
}
},
_onChangeBackgroundColor : function( evt ) {
var newColor = evt.getValue();
if( this._themeBackgroundColor === "undefined" ) {
this.getLegendObject().setBackgroundColor( newColor );
}
},
_onChangeFont : function( evt ) {
var newFont = evt.getValue();
this.getLegendObject().setFont( newFont );
},
_onMouseOver : function( event ) {
this.getLegendObject().addState( "over" );
this.getFrameObject().addState( "over" );
},
_onMouseOut : function( event ) {
this.getLegendObject().removeState( "over" );
this.getFrameObject().removeState( "over" );
},
_layoutPost : function( changes ) {
this.base( arguments, changes );
this._frameObject._layoutPost( changes );
},
//////////////////
// apply subelement IDs
applyObjectId : function( id ) {
this.base( arguments, id );
if( rwt.widgets.base.Widget._renderHtmlIds ) {
var labelObject = this.getLegendObject().getLabelObject();
labelObject.setHtmlAttribute( "id", id + "-label" );
}
},
/**
* Creates the legend sub widget
*
* @type member
* @return {void}
*/
_createLegendObject : function() {
this._legendObject = new rwt.widgets.base.Atom();
this._legendObject.setAppearance( "group-box-legend" );
this.add( this._legendObject );
},
/**
* Creates the frame sub widget
*
* @type member
* @return {void}
*/
_createFrameObject : function() {
this._frameObject = new rwt.widgets.base.Parent();
this._frameObject.setAppearance( "group-box-frame" );
this.add( this._frameObject );
},
/*
---------------------------------------------------------------------------
GETTER FOR SUB WIDGETS
---------------------------------------------------------------------------
*/
/**
* Accessor method for the frame sub widget
*
* @type member
* @return {rwt.widgets.base.Parent} frame sub widget
*/
getFrameObject : function() {
return this._frameObject;
},
/**
* Accessor method for the legend sub widget
*
* @type member
* @return {rwt.widgets.base.Atom} legend sub widget
*/
getLegendObject : function() {
return this._legendObject;
},
/*
---------------------------------------------------------------------------
SETTER/GETTER
---------------------------------------------------------------------------
*/
/**
* Sets the label of the legend sub widget if the given string is
* valid. Otherwise the legend sub widget get not displayed.
*
* @type member
* @param vLegend {String} new label of the legend sub widget
* @return {void}
*/
setLegend : function(vLegend) {
if (vLegend !== "" && vLegend !== null) {
this._legendObject.setLabel(vLegend);
this._legendObject.setDisplay(true);
} else {
this._legendObject.setDisplay(false);
}
},
/**
* Accessor method for the label of the legend sub widget
*
* @type member
* @return {String} Label of the legend sub widget
*/
getLegend : function() {
return this._legendObject.getLabel();
},
/**
* Sets the icon of the legend sub widget.
*
* @type member
* @param vIcon {String} source of the new icon of the legend sub widget
* @return {void}
*/
setIcon : function(vIcon) {
this._legendObject.setIcon(vIcon);
},
/**
* Accessor method for the icon of the legend sub widget
*
* @type member
* @return {String} source of the new icon of the legend sub widget
*/
getIcon : function() {
this._legendObject.getIcon();
}
}
});