160 lines
4.2 KiB
C++
160 lines
4.2 KiB
C++
![]() |
#include "bin.hxx"
|
||
|
|
||
|
#include <sal/macros.h>
|
||
|
|
||
|
namespace layoutimpl
|
||
|
{
|
||
|
|
||
|
using namespace css;
|
||
|
|
||
|
/* Bin */
|
||
|
|
||
|
Bin::Bin() : Container()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void SAL_CALL
|
||
|
Bin::addChild( const uno::Reference< awt::XLayoutConstrains >& xChild )
|
||
|
throw (uno::RuntimeException, awt::MaxChildrenException)
|
||
|
{
|
||
|
if ( mxChild.is() )
|
||
|
throw awt::MaxChildrenException();
|
||
|
if ( xChild.is() )
|
||
|
{
|
||
|
mxChild = xChild;
|
||
|
setChildParent( xChild );
|
||
|
queueResize();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void SAL_CALL
|
||
|
Bin::removeChild( const uno::Reference< awt::XLayoutConstrains >& xChild )
|
||
|
throw (uno::RuntimeException)
|
||
|
{
|
||
|
if ( xChild == mxChild )
|
||
|
{
|
||
|
mxChild = uno::Reference< awt::XLayoutConstrains >();
|
||
|
unsetChildParent( xChild );
|
||
|
queueResize();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
uno::Sequence< uno::Reference< awt::XLayoutConstrains > > SAL_CALL
|
||
|
Bin::getChildren()
|
||
|
throw (uno::RuntimeException)
|
||
|
{
|
||
|
return getSingleChild (mxChild);
|
||
|
}
|
||
|
|
||
|
void SAL_CALL
|
||
|
Bin::allocateArea( const awt::Rectangle &rArea )
|
||
|
throw (uno::RuntimeException)
|
||
|
{
|
||
|
maAllocation = rArea;
|
||
|
if ( mxChild.is() )
|
||
|
allocateChildAt( mxChild, rArea );
|
||
|
}
|
||
|
|
||
|
awt::Size SAL_CALL
|
||
|
Bin::getMinimumSize()
|
||
|
throw(uno::RuntimeException)
|
||
|
{
|
||
|
if ( mxChild.is() )
|
||
|
return maRequisition = maChildRequisition = mxChild->getMinimumSize();
|
||
|
return maRequisition = awt::Size( 0, 0 );
|
||
|
}
|
||
|
|
||
|
uno::Reference< beans::XPropertySet > SAL_CALL
|
||
|
Bin::getChildProperties( const uno::Reference< awt::XLayoutConstrains >& )
|
||
|
throw (uno::RuntimeException)
|
||
|
{
|
||
|
return uno::Reference< beans::XPropertySet >();
|
||
|
}
|
||
|
|
||
|
sal_Bool SAL_CALL
|
||
|
Bin::hasHeightForWidth()
|
||
|
throw(uno::RuntimeException)
|
||
|
{
|
||
|
uno::Reference< awt::XLayoutContainer > xChildCont( mxChild, uno::UNO_QUERY );
|
||
|
if ( xChildCont.is() )
|
||
|
return xChildCont->hasHeightForWidth();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
sal_Int32 SAL_CALL
|
||
|
Bin::getHeightForWidth( sal_Int32 nWidth )
|
||
|
throw(uno::RuntimeException)
|
||
|
{
|
||
|
uno::Reference< awt::XLayoutContainer > xChildCont( mxChild, uno::UNO_QUERY );
|
||
|
if ( xChildCont.is() )
|
||
|
return xChildCont->getHeightForWidth( nWidth );
|
||
|
return maRequisition.Height;
|
||
|
}
|
||
|
|
||
|
/* Align */
|
||
|
|
||
|
Align::Align() : Bin()
|
||
|
{
|
||
|
addProp( RTL_CONSTASCII_USTRINGPARAM( "Halign" ),
|
||
|
::getCppuType( static_cast< const float* >( NULL ) ),
|
||
|
&fHorAlign );
|
||
|
addProp( RTL_CONSTASCII_USTRINGPARAM( "Valign" ),
|
||
|
::getCppuType( static_cast< const float* >( NULL ) ),
|
||
|
&fVerAlign );
|
||
|
addProp( RTL_CONSTASCII_USTRINGPARAM( "Hfill" ),
|
||
|
::getCppuType( static_cast< const float* >( NULL ) ),
|
||
|
&fHorFill );
|
||
|
addProp( RTL_CONSTASCII_USTRINGPARAM( "Vfill" ),
|
||
|
::getCppuType( static_cast< const float* >( NULL ) ),
|
||
|
&fVerFill );
|
||
|
|
||
|
fHorAlign = fVerAlign = 0.5;
|
||
|
fHorFill = fVerFill = 0;
|
||
|
}
|
||
|
|
||
|
void SAL_CALL
|
||
|
Align::allocateArea( const awt::Rectangle &rArea )
|
||
|
throw (uno::RuntimeException)
|
||
|
{
|
||
|
maAllocation = rArea;
|
||
|
if ( !mxChild.is() )
|
||
|
return;
|
||
|
|
||
|
awt::Rectangle aChildArea;
|
||
|
aChildArea.Width = SAL_MIN( rArea.Width, maChildRequisition.Width );
|
||
|
aChildArea.Width += (sal_Int32) SAL_MAX(
|
||
|
0, (rArea.Width - maChildRequisition.Width) * fHorFill );
|
||
|
aChildArea.Height = SAL_MIN( rArea.Height, maChildRequisition.Height );
|
||
|
aChildArea.Height += (sal_Int32) SAL_MAX(
|
||
|
0, (rArea.Height - maChildRequisition.Height) * fVerFill );
|
||
|
|
||
|
aChildArea.X = rArea.X + (sal_Int32)( (rArea.Width - aChildArea.Width) * fHorAlign );
|
||
|
aChildArea.Y = rArea.Y + (sal_Int32)( (rArea.Height - aChildArea.Height) * fVerAlign );
|
||
|
|
||
|
allocateChildAt( mxChild, aChildArea );
|
||
|
}
|
||
|
|
||
|
/* MinSize */
|
||
|
|
||
|
MinSize::MinSize() : Bin()
|
||
|
{
|
||
|
mnMinWidth = mnMinHeight = 0;
|
||
|
addProp( RTL_CONSTASCII_USTRINGPARAM( "MinWidth" ),
|
||
|
::getCppuType( static_cast< const long* >( NULL ) ),
|
||
|
&mnMinWidth );
|
||
|
addProp( RTL_CONSTASCII_USTRINGPARAM( "MinHeight" ),
|
||
|
::getCppuType( static_cast< const long* >( NULL ) ),
|
||
|
&mnMinHeight );
|
||
|
}
|
||
|
|
||
|
awt::Size SAL_CALL MinSize::getMinimumSize()
|
||
|
throw(uno::RuntimeException)
|
||
|
{
|
||
|
Bin::getMinimumSize();
|
||
|
maRequisition.Width = SAL_MAX( maRequisition.Width, mnMinWidth );
|
||
|
maRequisition.Height = SAL_MAX( maRequisition.Height, mnMinHeight );
|
||
|
return maRequisition;
|
||
|
}
|
||
|
|
||
|
} // namespace layoutimpl
|