User: kz Date: 2008-04-04 14:32:20+0000 Modified: dba/dbaccess/source/core/dataaccess/databasedocument.cxx
Log: INTEGRATION: CWS titles02 (1.36.8); FILE MERGED 2008/02/12 13:24:20 as 1.36.8.3: RESYNC: (1.36-1.37); FILE MERGED 2007/12/17 15:29:53 oj 1.36.8.2: #i45617# title feature 2007/12/10 11:38:15 oj 1.36.8.1: #i45909# #i45617# #i71469# change title handling File Changes: Directory: /dba/dbaccess/source/core/dataaccess/ ================================================ File [changed]: databasedocument.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/databasedocument.cxx?r1=1.40&r2=1.41 Delta lines: +196 -6 --------------------- --- databasedocument.cxx 2008-03-11 09:43:41+0000 1.40 +++ databasedocument.cxx 2008-04-04 14:32:17+0000 1.41 @@ -45,6 +45,8 @@ #include <comphelper/interaction.hxx> #include <comphelper/namedvaluecollection.hxx> #include <comphelper/enumhelper.hxx> +#include <comphelper/numberedcollection.hxx> +#include <framework/titlehelper.hxx> #ifndef _COM_SUN_STAR_EMBED_XTRANSACTEDOBJECT_HPP_ #include <com/sun/star/embed/XTransactedObject.hpp> #endif @@ -191,6 +193,48 @@ dispose(); } } +//------------------------------------------------------------------------------ +Any SAL_CALL ODatabaseDocument::queryInterface(const Type& _rType) throw (RuntimeException) +{ + Any aReturn = ODatabaseDocument_OfficeDocument::queryInterface(_rType); + if (!aReturn.hasValue()) + aReturn = ODatabaseDocument_Title::queryInterface(_rType); + return aReturn; +} +//------------------------------------------------------------------------------ +void SAL_CALL ODatabaseDocument::acquire( ) throw () +{ + ODatabaseDocument_OfficeDocument::acquire(); +} + +//------------------------------------------------------------------------------ +void SAL_CALL ODatabaseDocument::release( ) throw () +{ + ODatabaseDocument_OfficeDocument::release(); +} +//------------------------------------------------------------------------------ +Sequence< Type > SAL_CALL ODatabaseDocument::getTypes( ) throw (RuntimeException) +{ + return ::comphelper::concatSequences( + ODatabaseDocument_OfficeDocument::getTypes(), + ODatabaseDocument_Title::getTypes() + ); +} +//------------------------------------------------------------------------------ +Sequence< sal_Int8 > SAL_CALL ODatabaseDocument::getImplementationId( ) throw (RuntimeException) +{ + static ::cppu::OImplementationId * pId = 0; + if (! pId) + { + ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); + if (! pId) + { + static ::cppu::OImplementationId aId; + pId = &aId; + } + } + return pId->getImplementationId(); +} // ----------------------------------------------------------------------------- bool ODatabaseDocument::impl_shouldDisallowScripting_nolck_nothrow() const @@ -799,14 +843,15 @@ } // ----------------------------------------------------------------------------- -void SAL_CALL ODatabaseDocument::addEventListener(const Reference< XEventListener >& _xListener ) throw (RuntimeException) +// ::com::sun::star::document::XEventBroadcaster +void SAL_CALL ODatabaseDocument::addEventListener(const uno::Reference< document::XEventListener >& _xListener ) throw (uno::RuntimeException) { ::connectivity::checkDisposed(ODatabaseDocument_OfficeDocument::rBHelper.bDisposed); m_aDocEventListeners.addInterface(_xListener); } // ----------------------------------------------------------------------------- -void SAL_CALL ODatabaseDocument::removeEventListener( const Reference< XEventListener >& _xListener ) throw (RuntimeException) +void SAL_CALL ODatabaseDocument::removeEventListener( const uno::Reference< document::XEventListener >& _xListener ) throw (uno::RuntimeException) { ::connectivity::checkDisposed(ODatabaseDocument_OfficeDocument::rBHelper.bDisposed); m_aDocEventListeners.removeInterface(_xListener); @@ -1171,6 +1216,11 @@ Reference< XModel > xHoldAlive( this ); { + { + ::osl::ClearableMutexGuard aGuard( getMutex() ); + impl_notifyEvent( "OnUnload", aGuard ); + } + lang::EventObject aDisposeEvent(static_cast<XWeak*>(this)); m_aModifyListeners.disposeAndClear( aDisposeEvent ); m_aCloseListener.disposeAndClear( aDisposeEvent ); @@ -1188,6 +1238,8 @@ // expected to listen for our disposal, and disconnect then DBG_ASSERT( m_aControllers.empty(), "ODatabaseDocument::disposing: there still are controllers!" ); impl_disposeControllerFrames_nothrow(); + m_xModuleManager.clear(); + m_xTitleHelper.clear(); } m_pImpl.clear(); @@ -1413,6 +1465,144 @@ return Reference< XController >(); } // ----------------------------------------------------------------------------- +//============================================================================= +uno::Reference< frame::XTitle > ODatabaseDocument::impl_getTitleHelper_throw() +{ + ModelMethodGuard aGuard( *this ); + + if ( ! m_xTitleHelper.is ()) + { + uno::Reference< frame::XUntitledNumbers > xDesktop(m_pImpl->m_xServiceFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop"))), css::uno::UNO_QUERY_THROW); + uno::Reference< frame::XModel > xThis (getThis(), uno::UNO_QUERY_THROW); + + ::framework::TitleHelper* pHelper = new ::framework::TitleHelper(m_pImpl->m_xServiceFactory); + m_xTitleHelper.set(static_cast< ::cppu::OWeakObject* >(pHelper), uno::UNO_QUERY_THROW); + pHelper->setOwner (xThis ); + pHelper->connectWithUntitledNumbers (xDesktop); + } + + return m_xTitleHelper; +} + +//============================================================================= +uno::Reference< frame::XUntitledNumbers > ODatabaseDocument::impl_getUntitledHelper_throw(const uno::Reference< uno::XInterface >& _xComponent) +{ + ModelMethodGuard aGuard( *this ); + + if ( !m_xModuleManager.is() ) + m_xModuleManager.set( m_pImpl->m_xServiceFactory->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.ModuleManager")) ), UNO_QUERY_THROW ); + + ::rtl::OUString sModuleId = m_xModuleManager->identify( _xComponent ); + + uno::Reference< frame::XUntitledNumbers > xNumberedControllers; + + TNumberedController::iterator aFind = m_aNumberedControllers.find(sModuleId); + if ( aFind == m_aNumberedControllers.end() ) + { + uno::Reference< frame::XModel > xThis(static_cast< frame::XModel* >(this), uno::UNO_QUERY_THROW); + ::comphelper::NumberedCollection* pHelper = new ::comphelper::NumberedCollection(); + xNumberedControllers.set(static_cast< ::cppu::OWeakObject* >(pHelper), uno::UNO_QUERY_THROW); + + pHelper->setOwner (xThis); + //pHelper->setUntitledPrefix (::rtl::OUString::createFromAscii(" : ")); + + m_aNumberedControllers.insert(TNumberedController::value_type(sModuleId,xNumberedControllers)); + } + else + xNumberedControllers = aFind->second; + + return xNumberedControllers; +} + +//============================================================================= +// css.frame.XTitle +::rtl::OUString SAL_CALL ODatabaseDocument::getTitle() + throw (uno::RuntimeException) +{ + // SYNCHRONIZED -> + ModelMethodGuard aGuard( *this ); + + return impl_getTitleHelper_throw()->getTitle (); +} + +//============================================================================= +// css.frame.XTitle +void SAL_CALL ODatabaseDocument::setTitle( const ::rtl::OUString& sTitle ) + throw (uno::RuntimeException) +{ + // SYNCHRONIZED -> + ModelMethodGuard aGuard( *this ); + + impl_getTitleHelper_throw()->setTitle (sTitle); +} + +//============================================================================= +// css.frame.XTitleChangeBroadcaster +void SAL_CALL ODatabaseDocument::addTitleChangeListener( const uno::Reference< frame::XTitleChangeListener >& xListener ) + throw (uno::RuntimeException) +{ + // SYNCHRONIZED -> + ModelMethodGuard aGuard( *this ); + + uno::Reference< frame::XTitleChangeBroadcaster > xBroadcaster(impl_getTitleHelper_throw(), uno::UNO_QUERY); + if (xBroadcaster.is ()) + xBroadcaster->addTitleChangeListener (xListener); +} + +//============================================================================= +// css.frame.XTitleChangeBroadcaster +void SAL_CALL ODatabaseDocument::removeTitleChangeListener( const uno::Reference< frame::XTitleChangeListener >& xListener ) + throw (uno::RuntimeException) +{ + // SYNCHRONIZED -> + ModelMethodGuard aGuard( *this ); + + uno::Reference< frame::XTitleChangeBroadcaster > xBroadcaster(impl_getTitleHelper_throw(), uno::UNO_QUERY); + if (xBroadcaster.is ()) + xBroadcaster->removeTitleChangeListener (xListener); +} + +//============================================================================= +// css.frame.XUntitledNumbers +::sal_Int32 SAL_CALL ODatabaseDocument::leaseNumber( const uno::Reference< uno::XInterface >& xComponent ) + throw (lang::IllegalArgumentException, + uno::RuntimeException ) +{ + // object already disposed? + ModelMethodGuard aGuard( *this ); + + return impl_getUntitledHelper_throw(xComponent)->leaseNumber (xComponent); +} + +//============================================================================= +// css.frame.XUntitledNumbers +void SAL_CALL ODatabaseDocument::releaseNumber( ::sal_Int32 nNumber ) + throw (lang::IllegalArgumentException, + uno::RuntimeException ) +{ + // object already disposed? + ModelMethodGuard aGuard( *this ); + + impl_getUntitledHelper_throw()->releaseNumber (nNumber); +} + +//============================================================================= +// css.frame.XUntitledNumbers +void SAL_CALL ODatabaseDocument::releaseNumberForComponent( const uno::Reference< uno::XInterface >& xComponent ) + throw (lang::IllegalArgumentException, + uno::RuntimeException ) +{ + // object already disposed? + ModelMethodGuard aGuard( *this ); + impl_getUntitledHelper_throw(xComponent)->releaseNumberForComponent (xComponent); +} + +//============================================================================= +// css.frame.XUntitledNumbers +::rtl::OUString SAL_CALL ODatabaseDocument::getUntitledPrefix() throw (uno::RuntimeException) +{ + return ::rtl::OUString();/*RTL_CONSTASCII_USTRINGPARAM(" : "));*/ +} //------------------------------------------------------------------ //........................................................................ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
