summaryrefslogtreecommitdiff
path: root/toolkit/source/layout/core/bin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/source/layout/core/bin.cxx')
-rw-r--r--toolkit/source/layout/core/bin.cxx202
1 files changed, 202 insertions, 0 deletions
diff --git a/toolkit/source/layout/core/bin.cxx b/toolkit/source/layout/core/bin.cxx
new file mode 100644
index 000000000000..390c574c46c6
--- /dev/null
+++ b/toolkit/source/layout/core/bin.cxx
@@ -0,0 +1,202 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile$
+ *
+ * $Revision$
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#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 );
+}
+
+bool
+Align::emptyVisible ()
+{
+ return true;
+}
+
+/* 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 );
+}
+
+bool
+MinSize::emptyVisible ()
+{
+ return true;
+}
+
+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