/************************************************************** * * 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 #include #include #include #include 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