diff options
author | Noel Power <noel.power@novell.com> | 2011-03-23 17:24:48 +0000 |
---|---|---|
committer | Noel Power <noel.power@novell.com> | 2011-03-23 17:34:31 +0000 |
commit | 531faf8b6c10fb65ecb51e216cdbba22b6ae6795 (patch) | |
tree | 1938ba87561cb5b5a7ee6182df074103693d8365 /toolkit | |
parent | c9a0cb919cb2f1512431da0d8f45b04ef589189a (diff) |
adapt the vba container controls that got dropped as part of master merge
Diffstat (limited to 'toolkit')
-rw-r--r-- | toolkit/inc/toolkit/controls/dialogcontrol.hxx | 143 | ||||
-rw-r--r-- | toolkit/source/controls/controlmodelcontainerbase.cxx | 11 | ||||
-rw-r--r-- | toolkit/source/controls/dialogcontrol.cxx | 560 | ||||
-rw-r--r-- | toolkit/source/helper/registerservices.cxx | 7 | ||||
-rw-r--r-- | toolkit/util/tk.component | 18 |
5 files changed, 731 insertions, 8 deletions
diff --git a/toolkit/inc/toolkit/controls/dialogcontrol.hxx b/toolkit/inc/toolkit/controls/dialogcontrol.hxx index 9c0ffa3b78fb..789cc36385d8 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 3c7c51caeee2..81a2ed511ae0 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 ed5505db2578..461353e347fa 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 4689b7ffa009..cadd228d1c4b 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 690b3f324498..4d4713e87c45 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> |