Files
libreoffice/toolkit/source/layout/container.cxx
Kurt Zenker f82df298b6 INTEGRATION: CWS layout_DEV300 (1.1.2); FILE ADDED
2008/02/08 18:44:43 jcn 1.1.2.1: Initial toolkit import from ee9a2fcc29d7e2f01cc80ef7c13bf7bc7d55ae7e.

    layout/source/awt -> toolkit/source/awt
    layout/source/core -> toolkit/source/layout
    layout/source/wrapper -> toolkit/source/vclcompat
    layout/inc/layout -> toolkit/inc/layout
    layout/source/inc -> toolkit/inc/layout
    layout/workben -> toolkit/workben/layout

That's ooo-build trunk r11539 @ ooh680-m5/src680-m245.
2008-03-06 10:44:34 +00:00

142 lines
3.8 KiB
C++

#include "container.hxx"
#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/awt/PosSize.hpp>
#include <tools/debug.hxx>
namespace layoutimpl {
using namespace css;
Container::Container()
: Container_Base()
, PropHelper()
, mnBorderWidth( 0 )
{
addProp( RTL_CONSTASCII_USTRINGPARAM( "Border" ),
::getCppuType( static_cast< const sal_Int32* >( NULL ) ),
&mnBorderWidth );
setChangeListener( this );
}
uno::Any
Container::queryInterface( const uno::Type & rType ) throw (uno::RuntimeException)
{
uno::Any aRet = Container_Base::queryInterface( rType );
return aRet.hasValue() ? aRet : PropHelper::queryInterface( rType );
}
void
Container::allocateChildAt( const uno::Reference< awt::XLayoutConstrains > &xChild,
const awt::Rectangle &rArea )
throw( uno::RuntimeException )
{
uno::Reference< awt::XLayoutContainer > xCont( xChild, uno::UNO_QUERY );
if ( xCont.is() )
xCont->allocateArea( rArea );
else
{
uno::Reference< awt::XWindow > xWindow( xChild, uno::UNO_QUERY );
if ( xWindow.is() )
xWindow->setPosSize( rArea.X, rArea.Y, rArea.Width, rArea.Height,
awt::PosSize::POSSIZE );
else
{
DBG_ERROR( "Error: non-sizeable child" );
}
}
}
uno::Sequence< uno::Reference< awt::XLayoutConstrains > >
Container::getSingleChild ( uno::Reference< awt::XLayoutConstrains >const &xChildOrNil )
{
uno::Sequence< uno::Reference< awt::XLayoutConstrains > > aSeq( ( xChildOrNil.is() ? 1 : 0 ) );
if ( xChildOrNil.is() )
aSeq[0] = xChildOrNil;
return aSeq;
}
void
Container::queueResize()
{
if ( mxLayoutUnit.is() )
mxLayoutUnit->queueResize( uno::Reference< awt::XLayoutContainer >( this ) );
}
void
Container::setChildParent( const uno::Reference< awt::XLayoutConstrains >& xChild )
{
uno::Reference< awt::XLayoutContainer > xContChild( xChild, uno::UNO_QUERY );
if ( xContChild.is() )
{
xContChild->setParent( uno::Reference< awt::XLayoutContainer >( this ) );
#if 0
assert( !mxLayoutUnit.is() );
xContChild->setLayoutUnit( mxLayoutUnit );
#endif
}
}
void
Container::unsetChildParent( const uno::Reference< awt::XLayoutConstrains >& xChild )
{
uno::Reference< awt::XLayoutContainer > xContChild( xChild, uno::UNO_QUERY );
if ( xContChild.is() )
{
xContChild->setParent( uno::Reference< awt::XLayoutContainer >() );
#if 0
xContChild->setLayoutUnit( uno::Reference< awt::XLayoutUnit >() );
#endif
}
}
#if 0
std::string
Container::getLabel() // debug label
{
std::string depth;
uno::Reference< awt::XLayoutContainer > xContainer( this );
while ( xContainer.is() )
{
int node = 0; // child nb
uno::Reference< awt::XLayoutContainer > xParent = xContainer->getContainerParent();
if ( xParent.is() )
{
uno::Sequence< uno::Reference< awt::XLayoutConstrains > > aChildren;
aChildren = xParent->getChildren();
for( node = 0; node < aChildren.getLength(); node++ )
if ( aChildren[ node ] == xContainer )
break;
}
char str[ 8 ];
snprintf( str, 8, "%d", node );
if ( depth.empty() )
depth = std::string( str );
else
depth = std::string( str ) + ":" + depth;
xContainer = xParent;
}
return std::string( getName() ) + " (" + depth + ")";
}
#endif
void Container::propertiesChanged()
{
if ( !mxParent.is() )
{
DBG_ERROR( "Properties listener: error container doesn't have parent" );
}
// ask parent to be re-calculated
// FIXME: thats wrongg actually. We just need to do a "queueResize();"
if ( mxLayoutUnit.is() && mxParent.is() )
mxLayoutUnit->queueResize( mxParent );
}
}