blob: afea3e8bd7b841bdd425eaa823ea53783ffd17c9 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include "wrapper.hxx"
#include <com/sun/star/awt/XLayoutRoot.hpp>
#include <com/sun/star/awt/XLayoutContainer.hpp>
#include <comphelper/processfactory.hxx>
#include <layout/core/helper.hxx>
#include <tools/debug.hxx>
using namespace ::com::sun::star;
namespace layout
{
Container::Container( Context const* context, char const* pId )
: mxContainer( context->GetPeerHandle( pId ), uno::UNO_QUERY )
{
if ( !mxContainer.is() )
{
DBG_ERROR1( "Error: failed to associate container with '%s'", pId );
}
}
Container::Container( rtl::OUString const& rName, sal_Int32 nBorder )
{
mxContainer = layoutimpl::WidgetFactory::createContainer( rName );
uno::Reference< beans::XPropertySet > xProps( mxContainer, uno::UNO_QUERY_THROW );
xProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Border" ) ),
uno::Any( nBorder ) );
}
void Container::Add( Window *pChild )
{
if ( pChild )
{
uno::Reference< awt::XLayoutConstrains > xChild( pChild->GetPeer(), uno::UNO_QUERY );
mxContainer->addChild( xChild );
}
}
void Container::Add( Container *pChild )
{
if ( pChild )
{
uno::Reference< awt::XLayoutConstrains > xChild( pChild->getImpl(), uno::UNO_QUERY );
mxContainer->addChild( xChild );
}
}
void Container::Remove( Window *pChild )
{
if ( pChild )
{
uno::Reference< awt::XLayoutConstrains > xChild( pChild->GetPeer(), uno::UNO_QUERY );
mxContainer->removeChild( xChild );
}
}
void Container::Remove( Container *pChild )
{
if ( pChild )
{
uno::Reference< awt::XLayoutConstrains > xChild( pChild->getImpl(), uno::UNO_QUERY );
mxContainer->removeChild( xChild );
}
}
void Container::Clear()
{
css::uno::Sequence< css::uno::Reference < css::awt::XLayoutConstrains > > children;
children = mxContainer->getChildren();
for (int i = 0; i < children.getLength(); i++)
mxContainer->removeChild( children[i] );
}
void Container::ShowAll( bool bShow )
{
struct inner
{
static void setChildrenVisible( uno::Reference < awt::XLayoutContainer > xCont,
bool bVisible ) /* auxiliary */
{
if ( xCont.is() )
{
uno::Sequence< uno::Reference < awt::XLayoutConstrains > > aChildren;
aChildren = xCont->getChildren();
for (int i = 0; i < aChildren.getLength(); i++)
{
uno::Reference < awt::XLayoutConstrains > xChild( aChildren[ i ] );
uno::Reference< awt::XWindow > xWin( xChild, uno::UNO_QUERY);
if ( xWin.is() )
xWin->setVisible( bVisible );
uno::Reference < awt::XLayoutContainer > xChildCont(
xChild, uno::UNO_QUERY );
setChildrenVisible( xChildCont, bVisible );
}
}
}
};
inner::setChildrenVisible( mxContainer, bShow );
}
void Container::Show()
{
ShowAll( true );
}
void Container::Hide()
{
ShowAll( false );
}
Table::Table( sal_Int32 nBorder, sal_Int32 nColumns )
: Container( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "table" ) ), nBorder )
{
uno::Reference< beans::XPropertySet > xProps( mxContainer, uno::UNO_QUERY_THROW );
xProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Columns" ) ),
uno::Any( nColumns ) );
}
void Table::Add( Window *window, bool bXExpand, bool bYExpand,
sal_Int32 nXSpan, sal_Int32 nYSpan )
{
if ( !window )
return;
WindowImpl &rImpl = window->getImpl();
uno::Reference< awt::XLayoutConstrains > xChild( rImpl.mxWindow,
uno::UNO_QUERY );
mxContainer->addChild( xChild );
setProps( xChild, bXExpand, bYExpand, nXSpan, nYSpan );
}
void Table::Add( Container *pContainer, bool bXExpand, bool bYExpand,
sal_Int32 nXSpan, sal_Int32 nYSpan )
{
if ( !pContainer )
return;
uno::Reference< awt::XLayoutConstrains > xChild( pContainer->getImpl(),
uno::UNO_QUERY );
mxContainer->addChild( xChild );
setProps( xChild, bXExpand, bYExpand, nXSpan, nYSpan );
}
void Table::setProps( uno::Reference< awt::XLayoutConstrains > xChild,
bool bXExpand, bool bYExpand, sal_Int32 nXSpan, sal_Int32 nYSpan )
{
uno::Reference< beans::XPropertySet > xProps
( mxContainer->getChildProperties( xChild ), uno::UNO_QUERY_THROW );
xProps->setPropertyValue( rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM( "XExpand" ) ),
uno::Any( bXExpand ) );
xProps->setPropertyValue( rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM( "YExpand" ) ),
uno::Any( bYExpand ) );
xProps->setPropertyValue( rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM( "ColSpan" ) ),
uno::Any( nXSpan ) );
xProps->setPropertyValue( rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM( "RowSpan" ) ),
uno::Any( nYSpan ) );
}
Box::Box( rtl::OUString const& rName, sal_Int32 nBorder, bool bHomogeneous )
: Container( rName, nBorder )
{
uno::Reference< beans::XPropertySet > xProps( mxContainer, uno::UNO_QUERY_THROW );
xProps->setPropertyValue( rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM( "Homogeneous" ) ),
uno::Any( bHomogeneous ) );
}
void Box::Add( Window *window, bool bExpand, bool bFill, sal_Int32 nPadding)
{
if ( !window )
return;
WindowImpl &rImpl = window->getImpl();
uno::Reference< awt::XLayoutConstrains > xChild( rImpl.mxWindow,
uno::UNO_QUERY );
mxContainer->addChild( xChild );
setProps( xChild, bExpand, bFill, nPadding );
}
void Box::Add( Container *pContainer, bool bExpand, bool bFill, sal_Int32 nPadding)
{
if ( !pContainer )
return;
uno::Reference< awt::XLayoutConstrains > xChild( pContainer->getImpl(),
uno::UNO_QUERY );
mxContainer->addChild( xChild );
setProps( xChild, bExpand, bFill, nPadding );
}
void Box::setProps( uno::Reference< awt::XLayoutConstrains > xChild,
bool bExpand, bool bFill, sal_Int32 nPadding )
{
uno::Reference< beans::XPropertySet > xProps
( mxContainer->getChildProperties( xChild ), uno::UNO_QUERY_THROW );
xProps->setPropertyValue( rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM( "Expand" ) ),
uno::Any( bExpand ) );
xProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Fill" ) ),
uno::Any( bFill ) );
xProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Padding" ) ),
uno::Any( nPadding ) );
}
Table::Table( Context const* context, char const* pId )
: Container( context, pId )
{
}
Box::Box( Context const* context, char const* pId )
: Container( context, pId )
{
}
HBox::HBox( sal_Int32 nBorder, bool bHomogeneous )
: Box( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "hbox" ) ),
nBorder, bHomogeneous )
{
}
HBox::HBox( Context const* context, char const* pId )
: Box( context, pId )
{
}
VBox::VBox( sal_Int32 nBorder, bool bHomogeneous )
: Box( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "vbox" ) ),
nBorder, bHomogeneous )
{
}
VBox::VBox( Context const* context, char const* pId )
: Box( context, pId )
{
}
} // namespace layout