[Libreoffice-commits] .: 2 commits - toolkit/inc toolkit/source toolkit/util

Noel Power noelp at kemper.freedesktop.org
Wed Mar 23 10:37:00 PDT 2011


 toolkit/inc/toolkit/controls/dialogcontrol.hxx        |  142 ++++
 toolkit/source/controls/controlmodelcontainerbase.cxx |   11 
 toolkit/source/controls/dialogcontrol.cxx             |  560 ++++++++++++++++++
 toolkit/source/helper/registerservices.cxx            |    7 
 toolkit/util/tk.component                             |   18 
 5 files changed, 730 insertions(+), 8 deletions(-)

New commits:
commit f073a68b52c3c66cce23e6c2ac7eef503903577e
Author: Noel Power <noel.power at novell.com>
Date:   Wed Mar 23 17:36:02 2011 +0000

    fix rebase conflict hicup
    
    removed extra include for XDialog.hpp

diff --git a/toolkit/inc/toolkit/controls/dialogcontrol.hxx b/toolkit/inc/toolkit/controls/dialogcontrol.hxx
index 1e60799..78fc078 100644
--- a/toolkit/inc/toolkit/controls/dialogcontrol.hxx
+++ b/toolkit/inc/toolkit/controls/dialogcontrol.hxx
@@ -31,7 +31,6 @@
 #include <toolkit/controls/controlmodelcontainerbase.hxx>
 #include <com/sun/star/awt/XTopWindow.hpp>
 #include <com/sun/star/awt/XDialog2.hpp>
-#include <com/sun/star/awt/XDialog.hpp>
 #include <com/sun/star/awt/XSimpleTabController.hpp>
 #include <com/sun/star/resource/XStringResourceResolver.hpp>
 #include "toolkit/helper/servicenames.hxx"
commit 6b5f8d6de35961ba436b9535a17eaa68e3cdcf8d
Author: Noel Power <noel.power at novell.com>
Date:   Wed Mar 23 17:24:48 2011 +0000

    adapt the vba container controls that got dropped as part of master merge

diff --git a/toolkit/inc/toolkit/controls/dialogcontrol.hxx b/toolkit/inc/toolkit/controls/dialogcontrol.hxx
index 4a0cb5c..1e60799 100644
--- a/toolkit/inc/toolkit/controls/dialogcontrol.hxx
+++ b/toolkit/inc/toolkit/controls/dialogcontrol.hxx
@@ -31,6 +31,8 @@
 #include <toolkit/controls/controlmodelcontainerbase.hxx>
 #include <com/sun/star/awt/XTopWindow.hpp>
 #include <com/sun/star/awt/XDialog2.hpp>
+#include <com/sun/star/awt/XDialog.hpp>
+#include <com/sun/star/awt/XSimpleTabController.hpp>
 #include <com/sun/star/resource/XStringResourceResolver.hpp>
 #include "toolkit/helper/servicenames.hxx"
 #include "toolkit/helper/macros.hxx"
@@ -126,4 +128,145 @@ protected:
 protected:
 };
 
+class UnoMultiPageModel : public ControlModelContainerBase
+{
+public:
+    UnoMultiPageModel( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_factory );
+    ~UnoMultiPageModel();
+    UnoMultiPageModel( const UnoMultiPageModel& rModel );
+
+    UnoControlModel*	Clone() const;
+
+    DECLIMPL_SERVICEINFO_DERIVED( UnoMultiPageModel, ControlModelContainerBase, szServiceName_UnoMultiPageModel )
+
+    virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw( ::com::sun::star::uno::RuntimeException);
+    // XNamedContainer
+    void SAL_CALL insertByName( const ::rtl::OUString& aName, const ::com::sun::star::uno::Any& aElement ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+
+    // Override the method of parent Class
+    virtual sal_Bool SAL_CALL getGroupControl(  ) throw (::com::sun::star::uno::RuntimeException);
+protected:
+    virtual ::com::sun::star::uno::Any			ImplGetDefaultValue( sal_uInt16 nPropId ) const;
+    ::cppu::IPropertyArrayHelper&		SAL_CALL getInfoHelper();
+
+};
+
+class UnoMultiPageControl :  public ControlContainerBase
+                            ,public ::com::sun::star::awt::XSimpleTabController
+                            ,public ::com::sun::star::awt::XTabListener
+{
+    TabListenerMultiplexer maTabListeners;
+    void bindPage( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxControl );
+public:
+    UnoMultiPageControl( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_factory );
+    ~UnoMultiPageControl();
+    ::rtl::OUString		GetComponentServiceName();
+
+    // ::com::sun::star::lang::XServiceInfo
+    DECLIMPL_SERVICEINFO_DERIVED( UnoMultiPageControl, ControlContainerBase, szServiceName_UnoMultiPageControl )
+    ::com::sun::star::uno::Any	SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) { return ControlContainerBase::queryInterface(rType); }
+    ::com::sun::star::uno::Any	SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
+    void						SAL_CALL acquire() throw()	{ OWeakAggObject::acquire(); }
+    void						SAL_CALL release() throw()	{ OWeakAggObject::release(); }
+    // ::com::sun::star::lang::XTypeProvider
+    ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >	SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException);
+    ::com::sun::star::uno::Sequence< sal_Int8 >						SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
+    void SAL_CALL createPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& Toolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& Parent ) throw(::com::sun::star::uno::RuntimeException);
+    // com::sun::star::awt::XSimpleTabController
+    virtual ::sal_Int32 SAL_CALL insertTab() throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeTab( ::sal_Int32 ID ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+
+    virtual void SAL_CALL setTabProps( ::sal_Int32 ID, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& Properties ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > SAL_CALL getTabProps( ::sal_Int32 ID ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+
+    virtual void SAL_CALL activateTab( ::sal_Int32 ID ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
+    virtual ::sal_Int32 SAL_CALL getActiveTabID() throw (::com::sun::star::uno::RuntimeException);
+
+    virtual void SAL_CALL addTabListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabListener >& Listener ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removeTabListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabListener >& Listener ) throw (::com::sun::star::uno::RuntimeException);
+    // XTabListener
+    virtual void SAL_CALL inserted( ::sal_Int32 ID ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL removed( ::sal_Int32 ID ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL changed( ::sal_Int32 ID, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& Properties ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL activated( ::sal_Int32 ID ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL deactivated( ::sal_Int32 ID ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& evt ) throw (::com::sun::star::uno::RuntimeException);
+    // XComponent
+    void SAL_CALL dispose(  ) throw(::com::sun::star::uno::RuntimeException);
+
+protected:
+    virtual void    impl_createControlPeerIfNecessary(
+        const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxControl
+    );
+
+};
+
+
+class UnoPageModel : public ControlModelContainerBase
+{
+public:
+    UnoPageModel( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_factory );
+    ~UnoPageModel();
+    UnoPageModel( const UnoPageModel& rModel );
+
+    UnoControlModel*	Clone() const;
+
+    DECLIMPL_SERVICEINFO_DERIVED( UnoPageModel, ControlModelContainerBase, szServiceName_UnoPageModel )
+
+    virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw( ::com::sun::star::uno::RuntimeException);
+
+    // Override the method of parent Class
+    virtual sal_Bool SAL_CALL getGroupControl(  ) throw (::com::sun::star::uno::RuntimeException);
+protected:
+    virtual ::com::sun::star::uno::Any			ImplGetDefaultValue( sal_uInt16 nPropId ) const;
+    ::cppu::IPropertyArrayHelper&		SAL_CALL getInfoHelper();
+
+};
+
+class UnoPageControl :  public ControlContainerBase
+{
+public:
+    UnoPageControl( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_factory );
+    ~UnoPageControl();
+    ::rtl::OUString		GetComponentServiceName();
+
+
+    // ::com::sun::star::lang::XServiceInfo
+    DECLIMPL_SERVICEINFO_DERIVED( UnoPageControl, ControlContainerBase, szServiceName_UnoPageControl )
+};
+
+class UnoFrameModel : public ControlModelContainerBase
+{
+public:
+    UnoFrameModel( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_factory );
+    ~UnoFrameModel();
+    UnoFrameModel( const UnoFrameModel& rModel );
+
+    UnoControlModel*	Clone() const;
+
+    DECLIMPL_SERVICEINFO_DERIVED( UnoFrameModel, ControlModelContainerBase, szServiceName_UnoFrameModel )
+
+    virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw( ::com::sun::star::uno::RuntimeException);
+
+protected:
+    virtual ::com::sun::star::uno::Any			ImplGetDefaultValue( sal_uInt16 nPropId ) const;
+    ::cppu::IPropertyArrayHelper&		SAL_CALL getInfoHelper();
+};
+
+class UnoFrameControl :  public ControlContainerBase
+{
+protected:
+    virtual void		ImplSetPosSize( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& rxCtrl );
+public:
+    UnoFrameControl( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_factory );
+    ~UnoFrameControl();
+    ::rtl::OUString		GetComponentServiceName();
+
+// ::com::sun::star::lang::XServiceInfo
+DECLIMPL_SERVICEINFO_DERIVED( UnoFrameControl, ControlContainerBase, szServiceName_UnoPageControl )
+};
+
 #endif // TOOLKIT_DIALOG_CONTROL_HXX
diff --git a/toolkit/source/controls/controlmodelcontainerbase.cxx b/toolkit/source/controls/controlmodelcontainerbase.cxx
index 02d7182..2be6fa2 100644
--- a/toolkit/source/controls/controlmodelcontainerbase.cxx
+++ b/toolkit/source/controls/controlmodelcontainerbase.cxx
@@ -74,6 +74,7 @@
 #include <functional>
 #include "tools/urlobj.hxx"
 #include "osl/file.hxx"
+#include "toolkit/controls/dialogcontrol.hxx"
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -391,6 +392,12 @@ Reference< XInterface > ControlModelContainerBase::createInstance( const ::rtl::
         pNewModel = new OGeometryControlModel< UnoGridModel >( xFactory );
     else if ( aServiceSpecifier.compareToAscii( szServiceName_UnoControlTabPageContainerModel ) == 0 )
         pNewModel = new OGeometryControlModel< UnoControlTabPageContainerModel >( xFactory );
+    else if ( aServiceSpecifier.compareToAscii( szServiceName_UnoMultiPageModel ) == 0 )
+        pNewModel = new OGeometryControlModel< UnoMultiPageModel >( xFactory );
+    else if ( aServiceSpecifier.compareToAscii( szServiceName_UnoPageModel ) == 0 )
+        pNewModel = new OGeometryControlModel< UnoPageModel >( xFactory );
+    else if ( aServiceSpecifier.compareToAscii( szServiceName_UnoFrameModel ) == 0 )
+        pNewModel = new OGeometryControlModel< UnoFrameModel >( xFactory );
 
     if ( !pNewModel )
     {
@@ -429,7 +436,7 @@ Sequence< ::rtl::OUString > ControlModelContainerBase::getAvailableServiceNames(
     static Sequence< ::rtl::OUString >* pNamesSeq = NULL;
     if ( !pNamesSeq )
     {
-        pNamesSeq = new Sequence< ::rtl::OUString >( 23 );
+        pNamesSeq = new Sequence< ::rtl::OUString >( 25 );
         ::rtl::OUString* pNames = pNamesSeq->getArray();
         pNames[0] = ::rtl::OUString::createFromAscii( szServiceName2_UnoControlEditModel );
         pNames[1] = ::rtl::OUString::createFromAscii( szServiceName2_UnoControlFormattedFieldModel );
@@ -455,6 +462,8 @@ Sequence< ::rtl::OUString > ControlModelContainerBase::getAvailableServiceNames(
         pNames[21] = ::rtl::OUString::createFromAscii( szServiceName_GridControlModel );
         pNames[22] = ::rtl::OUString::createFromAscii( szServiceName_UnoControlTabPageContainerModel );
 
+        pNames[23] = ::rtl::OUString::createFromAscii( szServiceName_UnoMultiPageModel );
+        pNames[24] = ::rtl::OUString::createFromAscii( szServiceName_UnoFrameModel );
     }
     return *pNamesSeq;
 }
diff --git a/toolkit/source/controls/dialogcontrol.cxx b/toolkit/source/controls/dialogcontrol.cxx
index b293a8e..4aece91 100644
--- a/toolkit/source/controls/dialogcontrol.cxx
+++ b/toolkit/source/controls/dialogcontrol.cxx
@@ -60,6 +60,9 @@
 #include "tools/urlobj.hxx"
 #include "osl/file.hxx"
 
+#include <vcl/tabctrl.hxx>
+#include <toolkit/awt/vclxwindows.hxx>
+
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::awt;
@@ -575,3 +578,560 @@ void UnoDialogControl::ImplModelPropertiesChanged( const Sequence< PropertyChang
     }
     ControlContainerBase::ImplModelPropertiesChanged(rEvents);
 }
+
+//	----------------------------------------------------
+//	class MultiPageControl
+//	----------------------------------------------------
+UnoMultiPageControl::UnoMultiPageControl( const uno::Reference< lang::XMultiServiceFactory >& i_factory) : ControlContainerBase( i_factory ), maTabListeners( *this )
+{
+    maComponentInfos.nWidth = 280;
+    maComponentInfos.nHeight = 400;
+}
+
+UnoMultiPageControl::~UnoMultiPageControl()
+{
+}
+// XTabListener
+
+void SAL_CALL UnoMultiPageControl::inserted( ::sal_Int32 /*ID*/ ) throw (RuntimeException)
+{
+}
+void SAL_CALL UnoMultiPageControl::removed( ::sal_Int32 /*ID*/ ) throw (RuntimeException)
+{
+}
+void SAL_CALL UnoMultiPageControl::changed( ::sal_Int32 /*ID*/, const Sequence< NamedValue >& /*Properties*/ ) throw (RuntimeException)
+{
+}
+void SAL_CALL UnoMultiPageControl::activated( ::sal_Int32 ID ) throw (RuntimeException)
+{
+    ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_MULTIPAGEVALUE ), uno::makeAny( ID ), sal_False );
+
+}
+void SAL_CALL UnoMultiPageControl::deactivated( ::sal_Int32 /*ID*/ ) throw (RuntimeException)
+{
+}
+void SAL_CALL UnoMultiPageControl::disposing(const EventObject&) throw (RuntimeException)
+{
+}
+
+void SAL_CALL UnoMultiPageControl::dispose() throw (RuntimeException)
+{
+    lang::EventObject aEvt;
+    aEvt.Source = (::cppu::OWeakObject*)this;
+    maTabListeners.disposeAndClear( aEvt );
+    ControlContainerBase::dispose();
+}
+
+// com::sun::star::awt::XSimpleTabController
+::sal_Int32 SAL_CALL UnoMultiPageControl::insertTab() throw (RuntimeException)
+{
+    Reference< XSimpleTabController > xMultiPage( getPeer(), UNO_QUERY );
+    if ( !xMultiPage.is() )
+        throw RuntimeException();
+    return xMultiPage->insertTab();
+}
+
+void SAL_CALL UnoMultiPageControl::removeTab( ::sal_Int32 ID ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+    Reference< XSimpleTabController > xMultiPage( getPeer(), UNO_QUERY );
+    if ( !xMultiPage.is() )
+        throw RuntimeException();
+    xMultiPage->removeTab( ID );
+}
+
+void SAL_CALL UnoMultiPageControl::setTabProps( ::sal_Int32 ID, const Sequence< NamedValue >& Properties ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+    Reference< XSimpleTabController > xMultiPage( getPeer(), UNO_QUERY );
+    if ( !xMultiPage.is() )
+        throw RuntimeException();
+    xMultiPage->setTabProps( ID, Properties );
+}
+
+Sequence< NamedValue > SAL_CALL UnoMultiPageControl::getTabProps( ::sal_Int32 ID ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+    Reference< XSimpleTabController > xMultiPage( getPeer(), UNO_QUERY );
+    if ( !xMultiPage.is() )
+        throw RuntimeException();
+    return xMultiPage->getTabProps( ID );
+}
+
+void SAL_CALL UnoMultiPageControl::activateTab( ::sal_Int32 ID ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+    Reference< XSimpleTabController > xMultiPage( getPeer(), UNO_QUERY );
+    if ( !xMultiPage.is() )
+        throw RuntimeException();
+    xMultiPage->activateTab( ID );
+    ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_MULTIPAGEVALUE ), uno::makeAny( ID ), sal_True );
+
+}
+
+::sal_Int32 SAL_CALL UnoMultiPageControl::getActiveTabID() throw (RuntimeException)
+{
+    Reference< XSimpleTabController > xMultiPage( getPeer(), UNO_QUERY );
+    if ( !xMultiPage.is() )
+        throw RuntimeException();
+    return xMultiPage->getActiveTabID();
+}
+
+void SAL_CALL UnoMultiPageControl::addTabListener( const Reference< XTabListener >& Listener ) throw (RuntimeException)
+{
+    maTabListeners.addInterface( Listener );
+    Reference< XSimpleTabController > xMultiPage( getPeer(), UNO_QUERY );
+    if ( xMultiPage.is()  && maTabListeners.getLength() == 1 )
+        xMultiPage->addTabListener( &maTabListeners );
+}
+
+void SAL_CALL UnoMultiPageControl::removeTabListener( const Reference< XTabListener >& Listener ) throw (RuntimeException)
+{
+    Reference< XSimpleTabController > xMultiPage( getPeer(), UNO_QUERY );
+    if ( xMultiPage.is()  && maTabListeners.getLength() == 1 )
+        xMultiPage->removeTabListener( &maTabListeners );
+    maTabListeners.removeInterface( Listener );
+}
+
+
+// lang::XTypeProvider
+IMPL_XTYPEPROVIDER_START( UnoMultiPageControl )
+    getCppuType( ( uno::Reference< awt::XSimpleTabController>* ) NULL ),
+    getCppuType( ( uno::Reference< awt::XTabListener>* ) NULL ),
+    ControlContainerBase::getTypes()
+IMPL_XTYPEPROVIDER_END
+
+// uno::XInterface
+uno::Any UnoMultiPageControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException)
+{
+    uno::Any aRet = ::cppu::queryInterface( rType,
+                                        SAL_STATIC_CAST( awt::XTabListener*, this ), SAL_STATIC_CAST( awt::XSimpleTabController*, this ) );
+    return (aRet.hasValue() ? aRet : ControlContainerBase::queryAggregation( rType ));
+}
+
+::rtl::OUString UnoMultiPageControl::GetComponentServiceName()
+{
+    sal_Bool bDecoration( sal_True );
+    ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_DECORATION )) >>= bDecoration;
+    if ( bDecoration )
+        return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("tabcontrol"));
+    // Hopefully we can tweak the tabcontrol to display without tabs
+    return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("tabcontrolnotabs"));
+}
+
+void UnoMultiPageControl::bindPage( const uno::Reference< awt::XControl >& _rxControl )
+{
+    uno::Reference< awt::XWindowPeer > xPage( _rxControl->getPeer() );
+    uno::Reference< awt::XSimpleTabController > xTabCntrl( getPeer(), uno::UNO_QUERY );
+    uno::Reference< beans::XPropertySet > xProps( _rxControl->getModel(), uno::UNO_QUERY );
+
+   VCLXTabPage* pXPage = dynamic_cast< VCLXTabPage* >( xPage.get() );
+   TabPage* pPage = pXPage ? pXPage->getTabPage() : NULL;
+    if ( xTabCntrl.is() && pPage )
+    {
+        VCLXMultiPage* pXTab = dynamic_cast< VCLXMultiPage* >( xTabCntrl.get() );
+        if ( pXTab )
+        {
+            rtl::OUString sTitle;
+            xProps->getPropertyValue( GetPropertyName( BASEPROPERTY_TITLE ) ) >>= sTitle;
+            pXTab->insertTab( pPage, sTitle);
+        }
+    }
+
+}
+
+void UnoMultiPageControl::createPeer( const Reference< XToolkit > & rxToolkit, const Reference< XWindowPeer >  & rParentPeer ) throw(RuntimeException)
+{
+    SolarMutexGuard aSolarGuard;
+
+    UnoControlContainer::createPeer( rxToolkit, rParentPeer );
+
+    uno::Sequence< uno::Reference< awt::XControl > > aCtrls = getControls();
+    sal_uInt32 nCtrls = aCtrls.getLength();
+    for( sal_uInt32 n = 0; n < nCtrls; n++ )
+       bindPage( aCtrls[ n ] );
+    sal_Int32 nActiveTab(0);
+    Reference< XPropertySet > xMultiProps( getModel(), UNO_QUERY );
+    xMultiProps->getPropertyValue( GetPropertyName( BASEPROPERTY_MULTIPAGEVALUE ) ) >>= nActiveTab;
+
+    uno::Reference< awt::XSimpleTabController > xTabCntrl( getPeer(), uno::UNO_QUERY );
+    if ( xTabCntrl.is() )
+    {
+        xTabCntrl->addTabListener( this );
+        if ( nActiveTab && nCtrls ) // Ensure peer is initialise with correct activated tab
+        {
+            xTabCntrl->activateTab( nActiveTab );
+            ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_MULTIPAGEVALUE ), uno::makeAny( nActiveTab ), sal_True );
+        }
+    }
+}
+
+void    UnoMultiPageControl::impl_createControlPeerIfNecessary( const uno::Reference< awt::XControl >& _rxControl)
+{
+    OSL_PRECOND( _rxControl.is(), "UnoMultiPageControl::impl_createControlPeerIfNecessary: invalid control, this will crash!" );
+
+    // if the container already has a peer, then also create a peer for the control
+    uno::Reference< awt::XWindowPeer > xMyPeer( getPeer() );
+
+    if( xMyPeer.is() )
+    {
+        _rxControl->createPeer( NULL, xMyPeer );
+        bindPage( _rxControl );
+        ImplActivateTabControllers();
+    }
+
+}
+
+// ------------- UnoMultiPageModel -----------------
+
+UnoMultiPageModel::UnoMultiPageModel( const Reference< XMultiServiceFactory >& i_factory ) : ControlModelContainerBase( i_factory )
+{
+    ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
+    ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR );
+    ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
+    ImplRegisterProperty( BASEPROPERTY_ENABLED );
+
+    ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
+    ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
+    ImplRegisterProperty( BASEPROPERTY_HELPURL );
+    ImplRegisterProperty( BASEPROPERTY_SIZEABLE );
+    //ImplRegisterProperty( BASEPROPERTY_DIALOGSOURCEURL );
+    ImplRegisterProperty( BASEPROPERTY_MULTIPAGEVALUE );
+    ImplRegisterProperty( BASEPROPERTY_PRINTABLE );
+    ImplRegisterProperty( BASEPROPERTY_USERFORMCONTAINEES );
+
+    Any aBool;
+    aBool <<= (sal_Bool) sal_True;
+    ImplRegisterProperty( BASEPROPERTY_MOVEABLE, aBool );
+    ImplRegisterProperty( BASEPROPERTY_CLOSEABLE, aBool );
+    ImplRegisterProperty( BASEPROPERTY_DECORATION, aBool );
+    // MultiPage Control has the tab stop property. And the default value is True.
+    ImplRegisterProperty( BASEPROPERTY_TABSTOP, aBool );
+
+    uno::Reference< XNameContainer > xNameCont = new SimpleNamedThingContainer< XControlModel >();
+    ImplRegisterProperty( BASEPROPERTY_USERFORMCONTAINEES, uno::makeAny( xNameCont ) );
+}
+
+UnoMultiPageModel::UnoMultiPageModel( const UnoMultiPageModel& rModel )
+    : ControlModelContainerBase( rModel )
+{
+}
+
+UnoMultiPageModel::~UnoMultiPageModel()
+{
+}
+
+UnoControlModel*
+UnoMultiPageModel::Clone() const
+{
+    // clone the container itself
+    UnoMultiPageModel* pClone = new UnoMultiPageModel( *this );
+    Clone_Impl( *pClone );
+    return pClone;
+}
+
+::rtl::OUString UnoMultiPageModel::getServiceName() throw(::com::sun::star::uno::RuntimeException)
+{
+    return ::rtl::OUString::createFromAscii( szServiceName_UnoMultiPageModel );
+}
+
+uno::Any UnoMultiPageModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
+{
+    if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
+    {
+        uno::Any aAny;
+        aAny <<= ::rtl::OUString::createFromAscii( szServiceName_UnoMultiPageControl );
+        return aAny;
+    }
+    return ControlModelContainerBase::ImplGetDefaultValue( nPropId );
+}
+
+::cppu::IPropertyArrayHelper& UnoMultiPageModel::getInfoHelper()
+{
+    static UnoPropertyArrayHelper* pHelper = NULL;
+    if ( !pHelper )
+    {
+        uno::Sequence<sal_Int32>	aIDs = ImplGetPropertyIds();
+        pHelper = new UnoPropertyArrayHelper( aIDs );
+    }
+    return *pHelper;
+}
+
+// beans::XMultiPropertySet
+uno::Reference< beans::XPropertySetInfo > UnoMultiPageModel::getPropertySetInfo(  ) throw(uno::RuntimeException)
+{
+    static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
+    return xInfo;
+}
+
+void UnoMultiPageModel::insertByName( const ::rtl::OUString& aName, const Any& aElement ) throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException)
+{
+    Reference< XServiceInfo > xInfo;
+    aElement >>= xInfo;
+
+    if ( !xInfo.is() )
+        throw IllegalArgumentException();
+
+    // Only a Page model can be inserted into the multipage
+    if ( !xInfo->supportsService( rtl::OUString::createFromAscii( szServiceName_UnoPageModel ) ) )
+        throw IllegalArgumentException();
+
+    return ControlModelContainerBase::insertByName( aName, aElement );
+}
+
+// ----------------------------------------------------------------------------
+sal_Bool SAL_CALL UnoMultiPageModel::getGroupControl(  ) throw (RuntimeException)
+{
+    return sal_True;
+}
+
+//	----------------------------------------------------
+//	class UnoPageControl
+//	----------------------------------------------------
+UnoPageControl::UnoPageControl( const uno::Reference< lang::XMultiServiceFactory >& i_factory ) : ControlContainerBase( i_factory )
+{
+    maComponentInfos.nWidth = 280;
+    maComponentInfos.nHeight = 400;
+}
+
+UnoPageControl::~UnoPageControl()
+{
+}
+
+::rtl::OUString UnoPageControl::GetComponentServiceName()
+{
+    return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("tabpage"));
+}
+
+
+// ------------- UnoPageModel -----------------
+
+UnoPageModel::UnoPageModel( const Reference< XMultiServiceFactory >& i_factory ) : ControlModelContainerBase( i_factory )
+{
+    ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
+    ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR );
+    ImplRegisterProperty( BASEPROPERTY_ENABLED );
+    ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
+
+    ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
+    ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
+    ImplRegisterProperty( BASEPROPERTY_HELPURL );
+    ImplRegisterProperty( BASEPROPERTY_TITLE );
+    ImplRegisterProperty( BASEPROPERTY_SIZEABLE );
+    ImplRegisterProperty( BASEPROPERTY_PRINTABLE );
+    ImplRegisterProperty( BASEPROPERTY_USERFORMCONTAINEES );
+//    ImplRegisterProperty( BASEPROPERTY_DIALOGSOURCEURL );
+
+    Any aBool;
+    aBool <<= (sal_Bool) sal_True;
+    ImplRegisterProperty( BASEPROPERTY_MOVEABLE, aBool );
+    ImplRegisterProperty( BASEPROPERTY_CLOSEABLE, aBool );
+    //ImplRegisterProperty( BASEPROPERTY_TABSTOP, aBool );
+
+    uno::Reference< XNameContainer > xNameCont = new SimpleNamedThingContainer< XControlModel >();
+    ImplRegisterProperty( BASEPROPERTY_USERFORMCONTAINEES, uno::makeAny( xNameCont ) );
+}
+
+UnoPageModel::UnoPageModel( const UnoPageModel& rModel )
+    : ControlModelContainerBase( rModel )
+{
+}
+
+UnoPageModel::~UnoPageModel()
+{
+}
+
+UnoControlModel*
+UnoPageModel::Clone() const
+{
+    // clone the container itself
+    UnoPageModel* pClone = new UnoPageModel( *this );
+    Clone_Impl( *pClone );
+    return pClone;
+}
+
+::rtl::OUString UnoPageModel::getServiceName() throw(::com::sun::star::uno::RuntimeException)
+{
+    return ::rtl::OUString::createFromAscii( szServiceName_UnoPageModel );
+}
+
+uno::Any UnoPageModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
+{
+    if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
+    {
+        uno::Any aAny;
+        aAny <<= ::rtl::OUString::createFromAscii( szServiceName_UnoPageControl );
+        return aAny;
+    }
+    return ControlModelContainerBase::ImplGetDefaultValue( nPropId );
+}
+
+::cppu::IPropertyArrayHelper& UnoPageModel::getInfoHelper()
+{
+    static UnoPropertyArrayHelper* pHelper = NULL;
+    if ( !pHelper )
+    {
+        uno::Sequence<sal_Int32>  aIDs = ImplGetPropertyIds();
+        pHelper = new UnoPropertyArrayHelper( aIDs );
+    }
+    return *pHelper;
+}
+
+// beans::XMultiPropertySet
+uno::Reference< beans::XPropertySetInfo > UnoPageModel::getPropertySetInfo(  ) throw(uno::RuntimeException)
+{
+    static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
+    return xInfo;
+}
+
+// ----------------------------------------------------------------------------
+sal_Bool SAL_CALL UnoPageModel::getGroupControl(  ) throw (RuntimeException)
+{
+    return sal_False;
+}
+
+// Frame control
+
+//	----------------------------------------------------
+//	class UnoFrameControl
+//	----------------------------------------------------
+UnoFrameControl::UnoFrameControl( const uno::Reference< lang::XMultiServiceFactory >& i_factory ) : ControlContainerBase( i_factory )
+{
+    maComponentInfos.nWidth = 280;
+    maComponentInfos.nHeight = 400;
+}
+
+UnoFrameControl::~UnoFrameControl()
+{
+}
+
+::rtl::OUString UnoFrameControl::GetComponentServiceName()
+{
+    return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("frame"));
+}
+
+void UnoFrameControl::ImplSetPosSize( Reference< XControl >& rxCtrl )
+{
+    bool bOwnCtrl = false;
+    rtl::OUString sTitle;
+    if ( rxCtrl.get() == Reference<XControl>( this ).get() )
+        bOwnCtrl = true;
+    Reference< XPropertySet > xProps( getModel(), UNO_QUERY );
+    //xProps->getPropertyValue( GetPropertyName( BASEPROPERTY_TITLE ) ) >>= sTitle;
+    xProps->getPropertyValue( GetPropertyName( BASEPROPERTY_LABEL ) ) >>= sTitle;
+
+    ControlContainerBase::ImplSetPosSize( rxCtrl );
+    Reference < XWindow > xW( rxCtrl, UNO_QUERY );
+    if ( !bOwnCtrl && xW.is() && sTitle.getLength() )
+    {
+        awt::Rectangle aSizePos = xW->getPosSize();
+
+        sal_Int32 nX = aSizePos.X, nY = aSizePos.Y, nWidth = aSizePos.Width, nHeight = aSizePos.Height;
+        // Retrieve the values set by the base class
+        OutputDevice*pOutDev = Application::GetDefaultDevice();
+        if ( pOutDev )
+        {
+            if ( !bOwnCtrl && sTitle.getLength() )
+            {
+                // Adjust Y based on height of Title
+                ::Rectangle aRect = pOutDev->GetTextRect( aRect, sTitle );
+                nY = nY + ( aRect.GetHeight() / 2 );
+            }
+        }
+        else
+        {
+            Reference< XWindowPeer > xPeer = ImplGetCompatiblePeer( sal_True );
+            Reference< XDevice > xD( xPeer, UNO_QUERY );
+
+            SimpleFontMetric aFM;
+            FontDescriptor aFD;
+            Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_FONTDESCRIPTOR ) );
+            aVal >>= aFD;
+            if ( aFD.StyleName.getLength() )
+            {
+                Reference< XFont > xFont = xD->getFont( aFD );
+                aFM = xFont->getFontMetric();
+            }
+            else
+            {
+                Reference< XGraphics > xG = xD->createGraphics();
+                aFM = xG->getFontMetric();
+            }
+
+            sal_Int16 nH = aFM.Ascent + aFM.Descent;
+            if ( !bOwnCtrl && sTitle.getLength() )
+                // offset y based on height of font ( not sure if my guess at the correct calculation is correct here )
+                nY = nY + ( nH / 8); // how do I test this
+        }
+        xW->setPosSize( nX, nY, nWidth, nHeight, PosSize::POSSIZE );
+    }
+}
+
+// ------------- UnoFrameModel -----------------
+
+UnoFrameModel::UnoFrameModel(  const Reference< XMultiServiceFactory >& i_factory ) : ControlModelContainerBase( i_factory )
+{
+    ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
+    ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR );
+    ImplRegisterProperty( BASEPROPERTY_ENABLED );
+    ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
+    ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
+    ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
+    ImplRegisterProperty( BASEPROPERTY_HELPURL );
+    ImplRegisterProperty( BASEPROPERTY_PRINTABLE );
+    ImplRegisterProperty( BASEPROPERTY_LABEL );
+    ImplRegisterProperty( BASEPROPERTY_WRITING_MODE );
+    ImplRegisterProperty( BASEPROPERTY_CONTEXT_WRITING_MODE );
+    ImplRegisterProperty( BASEPROPERTY_USERFORMCONTAINEES );
+
+    uno::Reference< XNameContainer > xNameCont = new SimpleNamedThingContainer< XControlModel >();
+    ImplRegisterProperty( BASEPROPERTY_USERFORMCONTAINEES, uno::makeAny( xNameCont ) );
+}
+
+UnoFrameModel::UnoFrameModel( const UnoFrameModel& rModel )
+    : ControlModelContainerBase( rModel )
+{
+}
+
+UnoFrameModel::~UnoFrameModel()
+{
+}
+
+UnoControlModel*
+UnoFrameModel::Clone() const
+{
+    // clone the container itself
+    UnoFrameModel* pClone = new UnoFrameModel( *this );
+    Clone_Impl( *pClone );
+    return pClone;
+}
+
+::rtl::OUString UnoFrameModel::getServiceName() throw(::com::sun::star::uno::RuntimeException)
+{
+    return ::rtl::OUString::createFromAscii( szServiceName_UnoFrameModel );
+}
+
+uno::Any UnoFrameModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
+{
+    if ( nPropId == BASEPROPERTY_DEFAULTCONTROL )
+    {
+        uno::Any aAny;
+        aAny <<= ::rtl::OUString::createFromAscii( szServiceName_UnoFrameControl );
+        return aAny;
+    }
+    return ControlModelContainerBase::ImplGetDefaultValue( nPropId );
+}
+
+::cppu::IPropertyArrayHelper& UnoFrameModel::getInfoHelper()
+{
+    static UnoPropertyArrayHelper* pHelper = NULL;
+    if ( !pHelper )
+    {
+        uno::Sequence<sal_Int32>	aIDs = ImplGetPropertyIds();
+        pHelper = new UnoPropertyArrayHelper( aIDs );
+    }
+    return *pHelper;
+}
+
+// beans::XMultiPropertySet
+uno::Reference< beans::XPropertySetInfo > UnoFrameModel::getPropertySetInfo(  ) throw(uno::RuntimeException)
+{
+    static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
+    return xInfo;
+}
diff --git a/toolkit/source/helper/registerservices.cxx b/toolkit/source/helper/registerservices.cxx
index e7974d4..75b6e8b 100644
--- a/toolkit/source/helper/registerservices.cxx
+++ b/toolkit/source/helper/registerservices.cxx
@@ -108,7 +108,6 @@ namespace toolkit
                 _rxServiceFactory, ::rtl::OUString::createFromAscii( _pComponentImplName ),
                 _pInstantiation, aServiceNames
             ) );
-
             if ( xFactory.is() )
             {
                 xFactory->acquire();
@@ -176,11 +175,9 @@ IMPL_CREATEINSTANCE2( UnoControlTimeFieldModel )
 IMPL_CREATEINSTANCE2( UnoControlProgressBarModel )
 IMPL_CREATEINSTANCE2( UnoControlScrollBarModel )
 IMPL_CREATEINSTANCE2( UnoSpinButtonModel )
-#ifdef NOEL_UNWINDS_THIS_ALL // FIXME
 IMPL_CREATEINSTANCE2( UnoMultiPageModel )
 IMPL_CREATEINSTANCE2( UnoPageModel )
 IMPL_CREATEINSTANCE2( UnoFrameModel )
-#endif
 IMPL_CREATEINSTANCE2( UnoControlFixedLineModel )
 IMPL_CREATEINSTANCE2( UnoCurrencyFieldControl )
 IMPL_CREATEINSTANCE2( UnoDateFieldControl )
@@ -201,11 +198,9 @@ IMPL_CREATEINSTANCE2( UnoProgressBarControl )
 IMPL_CREATEINSTANCE2( UnoScrollBarControl )
 IMPL_CREATEINSTANCE2( UnoSpinButtonControl )
 IMPL_CREATEINSTANCE2( UnoFixedLineControl )
-#ifdef NOEL_UNWINDS_THIS_ALL // FIXME
 IMPL_CREATEINSTANCE2( UnoMultiPageControl )
 IMPL_CREATEINSTANCE2( UnoPageControl )
 IMPL_CREATEINSTANCE2( UnoFrameControl )
-#endif
 IMPL_CREATEINSTANCE( VCLXMenuBar )
 IMPL_CREATEINSTANCE( VCLXPointer )
 IMPL_CREATEINSTANCE( VCLXPopupMenu )
@@ -307,14 +302,12 @@ TOOLKIT_DLLPUBLIC void* SAL_CALL component_getFactory( const sal_Char* sImplemen
         GET_FACTORY( VCLXPrinterServer, szServiceName_PrinterServer, szServiceName2_PrinterServer )
         GET_FACTORY( UnoRoadmapControl, szServiceName_UnoControlRoadmap, szServiceName2_UnoControlRoadmap )
         GET_FACTORY( UnoControlRoadmapModel, szServiceName_UnoControlRoadmapModel, szServiceName2_UnoControlRoadmapModel )
-#ifdef NOEL_UNWINDS_THIS_ALL // FIXME
         GET_FACTORY( UnoMultiPageModel, szServiceName_UnoMultiPageModel, NULL )
         GET_FACTORY( UnoMultiPageControl, szServiceName_UnoMultiPageControl, NULL )
         GET_FACTORY( UnoPageModel, szServiceName_UnoPageModel, NULL )
         GET_FACTORY( UnoPageControl, szServiceName_UnoPageControl, NULL )
         GET_FACTORY( UnoFrameModel, szServiceName_UnoFrameModel, NULL )
         GET_FACTORY( UnoFrameControl, szServiceName_UnoFrameControl, NULL )
-#endif
         GET_FACTORY( UnoSpinButtonModel, szServiceName_UnoSpinButtonModel, NULL )
         GET_FACTORY( UnoSpinButtonControl, szServiceName_UnoSpinButtonControl, NULL )
         GET_FACTORY( TreeControl, szServiceName_TreeControl, NULL )
diff --git a/toolkit/util/tk.component b/toolkit/util/tk.component
index 690b3f3..4d4713e 100644
--- a/toolkit/util/tk.component
+++ b/toolkit/util/tk.component
@@ -319,4 +319,22 @@
     <service name="com.sun.star.awt.Toolkit"/>
     <service name="stardiv.vcl.VclToolkit"/>
   </implementation>
+  <implementation name="stardiv.Toolkit.UnoMultiPageModel">
+    <service name="com.sun.star.awt.UnoMultiPageModel"/>
+  </implementation>
+  <implementation name="stardiv.Toolkit.UnoMultiPageControl">
+    <service name="com.sun.star.awt.UnoControlMultiPage"/>
+  </implementation>
+  <implementation name="stardiv.Toolkit.UnoPageModel">
+    <service name="com.sun.star.awt.UnoPageModel"/>
+  </implementation>
+  <implementation name="stardiv.Toolkit.UnoPageControl">
+    <service name="com.sun.star.awt.UnoControlPage"/>
+  </implementation>
+  <implementation name="stardiv.Toolkit.UnoFrameModel">
+    <service name="com.sun.star.awt.UnoFrameModel"/>
+  </implementation>
+  <implementation name="stardiv.Toolkit.UnoFrameControl">
+    <service name="com.sun.star.awt.UnoControlFrame"/>
+  </implementation>
 </component>


More information about the Libreoffice-commits mailing list