diff options
Diffstat (limited to 'forms/source')
218 files changed, 0 insertions, 65036 deletions
diff --git a/forms/source/component/BaseListBox.hxx b/forms/source/component/BaseListBox.hxx deleted file mode 100644 index 184acbad2..000000000 --- a/forms/source/component/BaseListBox.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_BASELISTBOX_HXX_ -#define _FORMS_BASELISTBOX_HXX_ - -//......................................................................... -namespace frm -{ - -const sal_uInt16 ENTRY_NOT_FOUND = 0xFFFF; -const sal_uInt16 BOUNDCOLUMN = 0x0001; - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_BASELISTBOX_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Button.cxx b/forms/source/component/Button.cxx deleted file mode 100644 index 44cc3474c..000000000 --- a/forms/source/component/Button.cxx +++ /dev/null @@ -1,781 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "Button.hxx" - -#include <com/sun/star/awt/XVclWindowPeer.hpp> - -#include <comphelper/streamsection.hxx> -#include <comphelper/basicio.hxx> -#include <tools/diagnose_ex.h> -#include <tools/debug.hxx> -#include <tools/urlobj.hxx> -#include <vcl/svapp.hxx> -#include <osl/mutex.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... - -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using ::com::sun::star::frame::XDispatchProviderInterceptor; - -//================================================================== -//= OButtonModel -//================================================================== -DBG_NAME(OButtonModel) -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OButtonModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OButtonModel(_rxFactory)); -} - -//------------------------------------------------------------------ -OButtonModel::OButtonModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OClickableImageBaseModel( _rxFactory, VCL_CONTROLMODEL_COMMANDBUTTON, FRM_SUN_CONTROL_COMMANDBUTTON ) - // use the old control name for compatibility reasons - ,m_aResetHelper( *this, m_aMutex ) - ,m_eDefaultState( STATE_NOCHECK ) -{ - DBG_CTOR( OButtonModel, NULL ); - m_nClassId = FormComponentType::COMMANDBUTTON; -} - -//------------------------------------------------------------------ -Any SAL_CALL OButtonModel::queryAggregation( const Type& _type ) throw(RuntimeException) -{ - Any aReturn = OClickableImageBaseModel::queryAggregation( _type ); - if ( !aReturn.hasValue() ) - aReturn = OButtonModel_Base::queryInterface( _type ); - return aReturn; -} - -//------------------------------------------------------------------ -Sequence< Type > OButtonModel::_getTypes() -{ - return ::comphelper::concatSequences( - OClickableImageBaseModel::_getTypes(), - OButtonModel_Base::getTypes() - ); -} - -//------------------------------------------------------------------ -OButtonModel::OButtonModel( const OButtonModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OClickableImageBaseModel( _pOriginal, _rxFactory ) - ,m_aResetHelper( *this, m_aMutex ) - ,m_eDefaultState( _pOriginal->m_eDefaultState ) -{ - DBG_CTOR( OButtonModel, NULL ); - m_nClassId = FormComponentType::COMMANDBUTTON; - - implInitializeImageURL(); -} - -//------------------------------------------------------------------------------ -OButtonModel::~OButtonModel() -{ - DBG_DTOR(OButtonModel, NULL); -} - -//------------------------------------------------------------------------------ -void OButtonModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 6, OClickableImageBaseModel ) - DECL_PROP1( BUTTONTYPE, FormButtonType, BOUND ); - DECL_PROP1( DEFAULT_STATE, sal_Int16, BOUND ); - DECL_PROP1( DISPATCHURLINTERNAL, sal_Bool, BOUND ); - DECL_PROP1( TARGET_URL, ::rtl::OUString, BOUND ); - DECL_PROP1( TARGET_FRAME, ::rtl::OUString, BOUND ); - DECL_PROP1( TABINDEX, sal_Int16, BOUND ); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OButtonModel ) - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence OButtonModel::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OClickableImageBaseModel::getSupportedServiceNames(); - aSupported.realloc( aSupported.getLength() + 1 ); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[ aSupported.getLength() - 1 ] = FRM_SUN_COMPONENT_COMMANDBUTTON; - - return aSupported; -} - -//------------------------------------------------------------------------------ -::rtl::OUString OButtonModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_COMMANDBUTTON; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void OButtonModel::write(const Reference<XObjectOutputStream>& _rxOutStream) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OClickableImageBaseModel::write(_rxOutStream); - - _rxOutStream->writeShort(0x0003); // Version - - { - OStreamSection aSection( _rxOutStream.get() ); - // this will allow readers to skip unknown bytes in their dtor - - _rxOutStream->writeShort( (sal_uInt16)m_eButtonType ); - - ::rtl::OUString sTmp = INetURLObject::decode( m_sTargetURL, '%', INetURLObject::DECODE_UNAMBIGUOUS); - _rxOutStream << sTmp; - _rxOutStream << m_sTargetFrame; - writeHelpTextCompatibly(_rxOutStream); - _rxOutStream << isDispatchUrlInternal(); - } -} - -//------------------------------------------------------------------------------ -void OButtonModel::read(const Reference<XObjectInputStream>& _rxInStream) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OClickableImageBaseModel::read(_rxInStream); - - sal_uInt16 nVersion = _rxInStream->readShort(); // Version - switch (nVersion) - { - case 0x0001: - { - m_eButtonType = (FormButtonType)_rxInStream->readShort(); - - _rxInStream >> m_sTargetURL; - _rxInStream >> m_sTargetFrame; - } - break; - - case 0x0002: - { - m_eButtonType = (FormButtonType)_rxInStream->readShort(); - - _rxInStream >> m_sTargetURL; - _rxInStream >> m_sTargetFrame; - readHelpTextCompatibly(_rxInStream); - } - break; - - case 0x0003: - { - OStreamSection aSection( _rxInStream.get() ); - // this will skip any unknown bytes in it's dtor - - // button type - m_eButtonType = (FormButtonType)_rxInStream->readShort(); - - // URL - _rxInStream >> m_sTargetURL; - - // target frame - _rxInStream >> m_sTargetFrame; - - // help text - readHelpTextCompatibly(_rxInStream); - - // DispatchInternal - sal_Bool bDispath; - _rxInStream >> bDispath; - setDispatchUrlInternal(bDispath); - } - break; - - default: - OSL_FAIL("OButtonModel::read : unknown version !"); - m_eButtonType = FormButtonType_PUSH; - m_sTargetURL = ::rtl::OUString(); - m_sTargetFrame = ::rtl::OUString(); - break; - } -} - -//-------------------------------------------------------------------- -void SAL_CALL OButtonModel::disposing() -{ - m_aResetHelper.disposing(); - OClickableImageBaseModel::disposing(); -} - -//-------------------------------------------------------------------- -void SAL_CALL OButtonModel::reset() throw (RuntimeException) -{ - if ( !m_aResetHelper.approveReset() ) - return; - - impl_resetNoBroadcast_nothrow(); - - m_aResetHelper.notifyResetted(); -} - -//-------------------------------------------------------------------- -void SAL_CALL OButtonModel::addResetListener( const Reference< XResetListener >& _listener ) throw (RuntimeException) -{ - m_aResetHelper.addResetListener( _listener ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OButtonModel::removeResetListener( const Reference< XResetListener >& _listener ) throw (RuntimeException) -{ - m_aResetHelper.removeResetListener( _listener ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OButtonModel::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const -{ - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_STATE: - _rValue <<= (sal_Int16)m_eDefaultState; - break; - - default: - OClickableImageBaseModel::getFastPropertyValue( _rValue, _nHandle ); - break; - } -} - -//-------------------------------------------------------------------- -void SAL_CALL OButtonModel::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const Any& _rValue ) throw (Exception) -{ - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_STATE: - { - sal_Int16 nDefaultState( (sal_Int16)STATE_NOCHECK ); - OSL_VERIFY( _rValue >>= nDefaultState ); - m_eDefaultState = (ToggleState)nDefaultState; - impl_resetNoBroadcast_nothrow(); - } - break; - - default: - OClickableImageBaseModel::setFastPropertyValue_NoBroadcast( _nHandle, _rValue ); - break; - } -} - -//-------------------------------------------------------------------- -sal_Bool SAL_CALL OButtonModel::convertFastPropertyValue( Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue ) throw (IllegalArgumentException) -{ - sal_Bool bModified = sal_False; - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_STATE: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Int16)m_eDefaultState ); - break; - - default: - bModified = OClickableImageBaseModel::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ); - break; - } - return bModified; -} - -//-------------------------------------------------------------------- -Any OButtonModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const -{ - Any aDefault; - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_STATE: - aDefault <<= (sal_Int16)STATE_NOCHECK; - break; - - default: - aDefault = OClickableImageBaseModel::getPropertyDefaultByHandle( _nHandle ); - break; - } - return aDefault; -} - -//-------------------------------------------------------------------- -void OButtonModel::impl_resetNoBroadcast_nothrow() -{ - try - { - setPropertyValue( PROPERTY_STATE, getPropertyValue( PROPERTY_DEFAULT_STATE ) ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } -} - -//================================================================== -// OButtonControl -//================================================================== -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OButtonControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OButtonControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OButtonControl::_getTypes() -{ - return ::comphelper::concatSequences( - OButtonControl_BASE::getTypes(), - OClickableImageBaseControl::_getTypes(), - OFormNavigationHelper::getTypes() - ); -} - -//------------------------------------------------------------------------------ -StringSequence OButtonControl::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OClickableImageBaseControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_COMMANDBUTTON; - return aSupported; -} - -//------------------------------------------------------------------------------ -OButtonControl::OButtonControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OClickableImageBaseControl(_rxFactory, VCL_CONTROL_COMMANDBUTTON) - ,OFormNavigationHelper( _rxFactory ) - ,m_nClickEvent( 0 ) - ,m_nTargetUrlFeatureId( -1 ) - ,m_bEnabledByPropertyValue( sal_False ) -{ - increment(m_refCount); - { - // als ActionListener anmelden - Reference<XButton> xButton; - query_aggregation( m_xAggregate, xButton); - if (xButton.is()) - xButton->addActionListener(this); - } - // Refcount bei 1 fuer Listener - decrement(m_refCount); -} - -//------------------------------------------------------------------------------ -OButtonControl::~OButtonControl() -{ - if (m_nClickEvent) - Application::RemoveUserEvent(m_nClickEvent); -} - -// UNO Anbindung -//------------------------------------------------------------------------------ -Any SAL_CALL OButtonControl::queryAggregation(const Type& _rType) throw (RuntimeException) -{ - // if asked for the XTypeProvider, don't let OButtonControl_BASE do this - Any aReturn; - if ( !_rType.equals( ::getCppuType( static_cast< Reference< XTypeProvider >* >( NULL ) ) ) ) - aReturn = OButtonControl_BASE::queryInterface( _rType ); - - if ( !aReturn.hasValue() ) - aReturn = OClickableImageBaseControl::queryAggregation( _rType ); - - if ( !aReturn.hasValue() ) - aReturn = OFormNavigationHelper::queryInterface( _rType ); - - return aReturn; -} - -//------------------------------------------------------------------------------ -void SAL_CALL OButtonControl::disposing() -{ - startOrStopModelPropertyListening( false ); - - OClickableImageBaseControl::disposing(); - OFormNavigationHelper::dispose(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OButtonControl::disposing( const EventObject& _rSource ) throw( RuntimeException ) -{ - OControl::disposing( _rSource ); - OFormNavigationHelper::disposing( _rSource ); -} - -// ActionListener -//------------------------------------------------------------------------------ -void OButtonControl::actionPerformed(const ActionEvent& /*rEvent*/) throw ( ::com::sun::star::uno::RuntimeException) -{ - // Asynchron fuer starutil::URL-Button - sal_uLong n = Application::PostUserEvent( LINK(this, OButtonControl,OnClick) ); - { - ::osl::MutexGuard aGuard( m_aMutex ); - m_nClickEvent = n; - } -} - -//------------------------------------------------------------------------------ -IMPL_LINK( OButtonControl, OnClick, void*, EMPTYARG ) -{ - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - m_nClickEvent = 0; - - if (m_aApproveActionListeners.getLength()) - { - // if there are listeners, start the action in an own thread, to not allow - // them to block us here (we're in the application's main thread) - getImageProducerThread()->addEvent(); - } - else - { - // Sonst nicht. Dann darf man aber auf keinen Fal die Listener - // benachrichtigen, auch dann nicht, wenn er spaeter hinzukommt. - aGuard.clear(); - - // recognize the button type - Reference<XPropertySet> xSet(getModel(), UNO_QUERY); - if (!xSet.is()) - return 0L; - - if (FormButtonType_PUSH == *(FormButtonType*)xSet->getPropertyValue(PROPERTY_BUTTONTYPE).getValue()) - { - // notify the action listeners for a push button - ::cppu::OInterfaceIteratorHelper aIter(m_aActionListeners); - ActionEvent aEvt(static_cast<XWeak*>(this), m_aActionCommand); - while(aIter.hasMoreElements() ) - { - // catch exceptions - // and catch them on a per-listener basis - if one listener fails, the others still need - // to get notified - try - { - static_cast< XActionListener* >( aIter.next() )->actionPerformed(aEvt); - } -#ifdef DBG_UTIL - catch( const RuntimeException& ) - { - // silent this - } -#endif - catch( const Exception& ) - { - OSL_FAIL( "OButtonControl::OnClick: caught a exception other than RuntimeException!" ); - } - } - } - else - actionPerformed_Impl( sal_False, ::com::sun::star::awt::MouseEvent() ); - } - return 0L; -} - -//------------------------------------------------------------------------------ -void OButtonControl::actionPerformed_Impl( sal_Bool _bNotifyListener, const ::com::sun::star::awt::MouseEvent& _rEvt ) -{ - { - sal_Int16 nFeatureId = -1; - { - ::osl::MutexGuard aGuard( m_aMutex ); - nFeatureId = m_nTargetUrlFeatureId; - } - - if ( nFeatureId != -1 ) - { - if ( !approveAction() ) - return; - - SolarMutexGuard aGuard; - dispatch( nFeatureId ); - return; - } - } - - OClickableImageBaseControl::actionPerformed_Impl( _bNotifyListener, _rEvt ); -} - -// XButton -//------------------------------------------------------------------------------ -void OButtonControl::setLabel(const ::rtl::OUString& Label) throw( RuntimeException ) -{ - Reference<XButton> xButton; - query_aggregation( m_xAggregate, xButton ); - if (xButton.is()) - xButton->setLabel(Label); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OButtonControl::setActionCommand(const ::rtl::OUString& _rCommand) throw( RuntimeException ) -{ - { - ::osl::MutexGuard aGuard( m_aMutex ); - m_aActionCommand = _rCommand; - } - - Reference<XButton> xButton; - query_aggregation( m_xAggregate, xButton); - if (xButton.is()) - xButton->setActionCommand(_rCommand); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OButtonControl::addActionListener(const Reference<XActionListener>& _rxListener) throw( RuntimeException ) -{ - m_aActionListeners.addInterface(_rxListener); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OButtonControl::removeActionListener(const Reference<XActionListener>& _rxListener) throw( RuntimeException ) -{ - m_aActionListeners.removeInterface(_rxListener); -} - -//------------------------------------------------------------------------------ -class DoPropertyListening -{ -private: - Reference< XPropertySet > m_xProps; - Reference< XPropertyChangeListener > m_xListener; - bool m_bStartListening; - -public: - DoPropertyListening( - const Reference< XInterface >& _rxComponent, - const Reference< XPropertyChangeListener >& _rxListener, - bool _bStart - ); - - void handleListening( const ::rtl::OUString& _rPropertyName ); -}; - -//.............................................................................. -DoPropertyListening::DoPropertyListening( - const Reference< XInterface >& _rxComponent, const Reference< XPropertyChangeListener >& _rxListener, - bool _bStart ) - :m_xProps( _rxComponent, UNO_QUERY ) - ,m_xListener( _rxListener ) - ,m_bStartListening( _bStart ) -{ - DBG_ASSERT( m_xProps.is() || !_rxComponent.is(), "DoPropertyListening::DoPropertyListening: valid component, but no property set!" ); - DBG_ASSERT( m_xListener.is(), "DoPropertyListening::DoPropertyListening: invalid listener!" ); -} - -//.............................................................................. -void DoPropertyListening::handleListening( const ::rtl::OUString& _rPropertyName ) -{ - if ( m_xProps.is() ) - { - if ( m_bStartListening ) - m_xProps->addPropertyChangeListener( _rPropertyName, m_xListener ); - else - m_xProps->removePropertyChangeListener( _rPropertyName, m_xListener ); - } -} - -//------------------------------------------------------------------------------ -void OButtonControl::startOrStopModelPropertyListening( bool _bStart ) -{ - DoPropertyListening aListeningHandler( getModel(), this, _bStart ); - aListeningHandler.handleListening( PROPERTY_TARGET_URL ); - aListeningHandler.handleListening( PROPERTY_BUTTONTYPE ); - aListeningHandler.handleListening( PROPERTY_ENABLED ); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OButtonControl::setModel( const Reference< XControlModel >& _rxModel ) throw ( RuntimeException ) -{ - startOrStopModelPropertyListening( false ); - sal_Bool bResult = OClickableImageBaseControl::setModel( _rxModel ); - startOrStopModelPropertyListening( true ); - - m_bEnabledByPropertyValue = sal_True; - Reference< XPropertySet > xModelProps( _rxModel, UNO_QUERY ); - if ( xModelProps.is() ) - xModelProps->getPropertyValue( PROPERTY_ENABLED ) >>= m_bEnabledByPropertyValue; - - modelFeatureUrlPotentiallyChanged( ); - - return bResult; -} - -//------------------------------------------------------------------------------ -void OButtonControl::modelFeatureUrlPotentiallyChanged( ) -{ - sal_Int16 nOldUrlFeatureId = m_nTargetUrlFeatureId; - - // doe we have another TargetURL now? If so, we need to update our dispatches - m_nTargetUrlFeatureId = getModelUrlFeatureId( ); - if ( nOldUrlFeatureId != m_nTargetUrlFeatureId ) - { - invalidateSupportedFeaturesSet(); - if ( !isDesignMode() ) - updateDispatches( ); - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL OButtonControl::propertyChange( const PropertyChangeEvent& _rEvent ) throw ( RuntimeException ) -{ - if ( _rEvent.PropertyName.equals( PROPERTY_TARGET_URL ) - || _rEvent.PropertyName.equals( PROPERTY_BUTTONTYPE ) - ) - { - modelFeatureUrlPotentiallyChanged( ); - } - else if ( _rEvent.PropertyName.equals( PROPERTY_ENABLED ) ) - { - _rEvent.NewValue >>= m_bEnabledByPropertyValue; - } -} - -//------------------------------------------------------------------------------ -namespace -{ - bool isFormControllerURL( const ::rtl::OUString& _rURL ) - { - const sal_Int32 nPrefixLen = URL_CONTROLLER_PREFIX.length; - return ( _rURL.getLength() > nPrefixLen ) - && ( _rURL.compareToAscii( URL_CONTROLLER_PREFIX, nPrefixLen ) == 0 ); - } -} - -//------------------------------------------------------------------------------ -sal_Int16 OButtonControl::getModelUrlFeatureId( ) const -{ - sal_Int16 nFeatureId = -1; - - // some URL related properties of the model - ::rtl::OUString sUrl; - FormButtonType eButtonType = FormButtonType_PUSH; - - Reference< XPropertySet > xModelProps( const_cast< OButtonControl* >( this )->getModel(), UNO_QUERY ); - if ( xModelProps.is() ) - { - xModelProps->getPropertyValue( PROPERTY_TARGET_URL ) >>= sUrl; - xModelProps->getPropertyValue( PROPERTY_BUTTONTYPE ) >>= eButtonType; - } - - // are we an URL button? - if ( eButtonType == FormButtonType_URL ) - { - // is it a feature URL? - if ( isFormControllerURL( sUrl ) ) - { - OFormNavigationMapper aMapper( m_aContext.getLegacyServiceFactory() ); - nFeatureId = aMapper.getFeatureId( sUrl ); - } - } - - return nFeatureId; -} - -//------------------------------------------------------------------ -void SAL_CALL OButtonControl::setDesignMode( sal_Bool _bOn ) throw( RuntimeException ) -{ - OClickableImageBaseControl::setDesignMode( _bOn ); - - if ( _bOn ) - disconnectDispatchers(); - else - connectDispatchers(); - // this will connect if not already connected and just update else -} - -//------------------------------------------------------------------------------ -void OButtonControl::getSupportedFeatures( ::std::vector< sal_Int16 >& /* [out] */ _rFeatureIds ) -{ - if ( -1 != m_nTargetUrlFeatureId ) - _rFeatureIds.push_back( m_nTargetUrlFeatureId ); -} - -//------------------------------------------------------------------ -void OButtonControl::featureStateChanged( sal_Int16 _nFeatureId, sal_Bool _bEnabled ) -{ - if ( _nFeatureId == m_nTargetUrlFeatureId ) - { - // enable or disable our peer, according to the new state - Reference< XVclWindowPeer > xPeer( getPeer(), UNO_QUERY ); - if ( xPeer.is() ) - xPeer->setProperty( PROPERTY_ENABLED, makeAny( m_bEnabledByPropertyValue ? _bEnabled : sal_False ) ); - // if we're disabled according to our model's property, then - // we don't care for the feature state, but *are* disabled. - // If the model's property states that we're enabled, then we *do* - // care for the feature state - } - - // base class - OFormNavigationHelper::featureStateChanged( _nFeatureId, _bEnabled ); -} - -//------------------------------------------------------------------ -void OButtonControl::allFeatureStatesChanged( ) -{ - if ( -1 != m_nTargetUrlFeatureId ) - // we have only one supported feature, so simulate it has changed ... - featureStateChanged( m_nTargetUrlFeatureId, isEnabled( m_nTargetUrlFeatureId ) ); - - // base class - OFormNavigationHelper::allFeatureStatesChanged( ); -} - -//------------------------------------------------------------------ -bool OButtonControl::isEnabled( sal_Int16 _nFeatureId ) const -{ - if ( const_cast< OButtonControl* >( this )->isDesignMode() ) - // TODO: the model property? - return true; - - return OFormNavigationHelper::isEnabled( _nFeatureId ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OButtonControl::registerDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException) -{ - OClickableImageBaseControl::registerDispatchProviderInterceptor( _rxInterceptor ); - OFormNavigationHelper::registerDispatchProviderInterceptor( _rxInterceptor ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OButtonControl::releaseDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException) -{ - OClickableImageBaseControl::releaseDispatchProviderInterceptor( _rxInterceptor ); - OFormNavigationHelper::releaseDispatchProviderInterceptor( _rxInterceptor ); -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Button.hxx b/forms/source/component/Button.hxx deleted file mode 100644 index b7a547637..000000000 --- a/forms/source/component/Button.hxx +++ /dev/null @@ -1,212 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_BUTTON_HXX_ -#define _FRM_BUTTON_HXX_ - -#include "clickableimage.hxx" -#include "togglestate.hxx" -#include "formnavigation.hxx" -#include "resettable.hxx" - -#include <com/sun/star/awt/MouseEvent.hpp> -#include <com/sun/star/lang/EventObject.hpp> -#include <com/sun/star/awt/ActionEvent.hpp> -#include <com/sun/star/awt/XActionListener.hpp> -#include <com/sun/star/awt/XButton.hpp> -#include <com/sun/star/form/XReset.hpp> -#include <com/sun/star/beans/PropertyChangeEvent.hpp> - -#include <cppuhelper/implbase1.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -// OButtonModel -//================================================================== -typedef ::cppu::ImplHelper1 < ::com::sun::star::form::XReset - > OButtonModel_Base; -class OButtonModel :public OClickableImageBaseModel - ,public OButtonModel_Base -{ -public: - DECLARE_DEFAULT_LEAF_XTOR( OButtonModel ); - - // UNO - DECLARE_UNO3_AGG_DEFAULTS( OButtonModel, OClickableImageBaseModel ); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException); - - ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -// ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(OButtonModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - -// ::com::sun::star::io::XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // XReset - virtual void SAL_CALL reset( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addResetListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeResetListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - - // XPropertySet and friends - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const; - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw (::com::sun::star::uno::Exception); - virtual sal_Bool SAL_CALL convertFastPropertyValue( - ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw (::com::sun::star::lang::IllegalArgumentException); - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const; - - // OComponentHelper - virtual void SAL_CALL disposing(); - -protected: - DECLARE_XCLONEABLE(); - -private: - void impl_resetNoBroadcast_nothrow(); - - using ::cppu::OPropertySetHelper::getFastPropertyValue; - -private: - ResetHelper m_aResetHelper; - - // <properties> - ToggleState m_eDefaultState; // the default check state - // </properties> -protected: - using OClickableImageBaseModel::disposing; -}; - -//================================================================== -// OButtonControl -//================================================================== -typedef ::cppu::ImplHelper3 < ::com::sun::star::awt::XButton - , ::com::sun::star::awt::XActionListener - , ::com::sun::star::beans::XPropertyChangeListener - > OButtonControl_BASE; - -class OButtonControl :public OButtonControl_BASE - ,public OClickableImageBaseControl - ,public OFormNavigationHelper -{ -private: - sal_uLong m_nClickEvent; - sal_Int16 m_nTargetUrlFeatureId; - /// caches the value of the "Enabled" property of our model - sal_Bool m_bEnabledByPropertyValue; - -protected: - - // UNO Anbindung - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - OButtonControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - virtual ~OButtonControl(); - - // XServiceInfo - IMPLEMENTATION_NAME(OButtonControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // UNO Anbindung - DECLARE_UNO3_AGG_DEFAULTS(OButtonControl, OClickableImageBaseControl); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - // XActionListener - virtual void SAL_CALL actionPerformed(const ::com::sun::star::awt::ActionEvent& rEvent) throw ( ::com::sun::star::uno::RuntimeException); - - // XButton - virtual void SAL_CALL addActionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeActionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setLabel(const ::rtl::OUString& Label) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setActionCommand(const ::rtl::OUString& _rCommand) throw(::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // XPropertyChangeListener - virtual void SAL_CALL propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw(::com::sun::star::uno::RuntimeException); - - // XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException); - - // XControl - virtual sal_Bool SAL_CALL setModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel ) throw ( ::com::sun::star::uno::RuntimeException ); - void SAL_CALL setDesignMode(sal_Bool bOn) throw (::com::sun::star::uno::RuntimeException); - -protected: - // OFormNavigationHelper overriables - virtual void getSupportedFeatures( ::std::vector< sal_Int16 >& /* [out] */ _rFeatureIds ); - virtual void featureStateChanged( sal_Int16 _nFeatureId, sal_Bool _bEnabled ); - virtual void allFeatureStatesChanged( ); - virtual bool isEnabled( sal_Int16 _nFeatureId ) const; - - // XDispatchProviderInterception disambiguaiton - virtual void SAL_CALL registerDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL releaseDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException); - - // OImageControl overridables - virtual void actionPerformed_Impl( sal_Bool bNotifyListener, const ::com::sun::star::awt::MouseEvent& _rEvt ); - -private: - DECL_LINK( OnClick, void* ); - - /** to be called whenever the feature URL represented by our model has potentially changed - */ - void modelFeatureUrlPotentiallyChanged( ); - - /** retrieves the feature id (see OFormNavigationHelper) of the TargetURL of - the model. - */ - sal_Int16 getModelUrlFeatureId( ) const; - - /** starts or stops listening for changes in model properties we're interested in - */ - void startOrStopModelPropertyListening( bool _bStart ); -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FRM_BUTTON_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/CheckBox.cxx b/forms/source/component/CheckBox.cxx deleted file mode 100644 index 45964f2b2..000000000 --- a/forms/source/component/CheckBox.cxx +++ /dev/null @@ -1,275 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "CheckBox.hxx" -#include "property.hxx" -#include "property.hrc" -#include "services.hxx" -#include <tools/debug.hxx> -#include <comphelper/basicio.hxx> - -//......................................................................... -namespace frm -{ -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::form::binding; - -//================================================================== -//= OCheckBoxControl -//================================================================== - -//------------------------------------------------------------------ -OCheckBoxControl::OCheckBoxControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl(_rxFactory, VCL_CONTROL_CHECKBOX) -{ -} - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OCheckBoxControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException) -{ - return *(new OCheckBoxControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OCheckBoxControl::getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException) -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_CHECKBOX; - return aSupported; -} - -//================================================================== -//= OCheckBoxModel -//================================================================== - -//================================================================== -InterfaceRef SAL_CALL OCheckBoxModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException) -{ - return *(new OCheckBoxModel(_rxFactory)); -} - -//------------------------------------------------------------------ -DBG_NAME( OCheckBoxModel ) -//------------------------------------------------------------------ -OCheckBoxModel::OCheckBoxModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OReferenceValueComponent( _rxFactory, VCL_CONTROLMODEL_CHECKBOX, FRM_SUN_CONTROL_CHECKBOX, sal_True ) - // use the old control name for compytibility reasons -{ - DBG_CTOR( OCheckBoxModel, NULL ); - - m_nClassId = FormComponentType::CHECKBOX; - initValueProperty( PROPERTY_STATE, PROPERTY_ID_STATE ); -} - -//------------------------------------------------------------------ -OCheckBoxModel::OCheckBoxModel( const OCheckBoxModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OReferenceValueComponent( _pOriginal, _rxFactory ) -{ - DBG_CTOR( OCheckBoxModel, NULL ); -} - -//------------------------------------------------------------------------------ -OCheckBoxModel::~OCheckBoxModel() -{ - DBG_DTOR( OCheckBoxModel, NULL ); -} - -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OCheckBoxModel ) - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OCheckBoxModel::getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException) -{ - StringSequence aSupported = OReferenceValueComponent::getSupportedServiceNames(); - - sal_Int32 nOldLen = aSupported.getLength(); - aSupported.realloc( nOldLen + 8 ); - ::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen; - - *pStoreTo++ = BINDABLE_CONTROL_MODEL; - *pStoreTo++ = DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_CONTROL_MODEL; - - *pStoreTo++ = BINDABLE_DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_BINDABLE_CONTROL_MODEL; - - *pStoreTo++ = FRM_SUN_COMPONENT_CHECKBOX; - *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_CHECKBOX; - *pStoreTo++ = BINDABLE_DATABASE_CHECK_BOX; - - return aSupported; -} - -//------------------------------------------------------------------------------ -void OCheckBoxModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 1, OReferenceValueComponent ) - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OCheckBoxModel::getServiceName() throw(RuntimeException) -{ - return FRM_COMPONENT_CHECKBOX; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void SAL_CALL OCheckBoxModel::write(const Reference<stario::XObjectOutputStream>& _rxOutStream) - throw(stario::IOException, RuntimeException) -{ - OReferenceValueComponent::write(_rxOutStream); - - // Version - _rxOutStream->writeShort(0x0003); - // Properties - _rxOutStream << getReferenceValue(); - _rxOutStream << (sal_Int16)getDefaultChecked(); - writeHelpTextCompatibly(_rxOutStream); - // from version 0x0003 : common properties - writeCommonProperties(_rxOutStream); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OCheckBoxModel::read(const Reference<stario::XObjectInputStream>& _rxInStream) throw(stario::IOException, RuntimeException) -{ - OReferenceValueComponent::read(_rxInStream); - osl::MutexGuard aGuard(m_aMutex); - - // Version - sal_uInt16 nVersion = _rxInStream->readShort(); - - ::rtl::OUString sReferenceValue; - sal_Int16 nDefaultChecked( 0 ); - switch ( nVersion ) - { - case 0x0001: - _rxInStream >> sReferenceValue; - nDefaultChecked = _rxInStream->readShort(); - break; - case 0x0002: - _rxInStream >> sReferenceValue; - _rxInStream >> nDefaultChecked; - readHelpTextCompatibly( _rxInStream ); - break; - case 0x0003: - _rxInStream >> sReferenceValue; - _rxInStream >> nDefaultChecked; - readHelpTextCompatibly(_rxInStream); - readCommonProperties(_rxInStream); - break; - default: - OSL_FAIL("OCheckBoxModel::read : unknown version !"); - defaultCommonProperties(); - break; - } - setReferenceValue( sReferenceValue ); - setDefaultChecked( static_cast< ToggleState >( nDefaultChecked ) ); - - // Nach dem Lesen die Defaultwerte anzeigen - if ( getControlSource().getLength() ) - // (not if we don't have a control source - the "State" property acts like it is persistent, then - resetNoBroadcast(); -} - -//------------------------------------------------------------------------------ -Any OCheckBoxModel::translateDbColumnToControlValue() -{ - Any aValue; - - ////////////////////////////////////////////////////////////////// - // Wert an ControlModel setzen - sal_Bool bValue = m_xColumn->getBoolean(); - if ( m_xColumn->wasNull() ) - { - sal_Bool bTriState = sal_True; - if ( m_xAggregateSet.is() ) - m_xAggregateSet->getPropertyValue( PROPERTY_TRISTATE ) >>= bTriState; - aValue <<= (sal_Int16)( bTriState ? STATE_DONTKNOW : getDefaultChecked() ); - } - else - aValue <<= (sal_Int16)( bValue ? STATE_CHECK : STATE_NOCHECK ); - - return aValue; -} - -//----------------------------------------------------------------------------- -sal_Bool OCheckBoxModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) -{ - OSL_PRECOND( m_xColumnUpdate.is(), "OCheckBoxModel::commitControlValueToDbColumn: not bound!" ); - if ( m_xColumnUpdate.is() ) - { - Any aControlValue( m_xAggregateSet->getPropertyValue( PROPERTY_STATE ) ); - try - { - sal_Int16 nValue = STATE_DONTKNOW; - aControlValue >>= nValue; - switch (nValue) - { - case STATE_DONTKNOW: - m_xColumnUpdate->updateNull(); - break; - case STATE_CHECK: - m_xColumnUpdate->updateBoolean( sal_True ); - break; - case STATE_NOCHECK: - m_xColumnUpdate->updateBoolean( sal_False ); - break; - default: - OSL_FAIL("OCheckBoxModel::commitControlValueToDbColumn: invalid value !"); - } - } - catch(Exception&) - { - OSL_FAIL("OCheckBoxModel::commitControlValueToDbColumn: could not commit !"); - } - } - return sal_True; -} - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/CheckBox.hxx b/forms/source/component/CheckBox.hxx deleted file mode 100644 index 6ae342c40..000000000 --- a/forms/source/component/CheckBox.hxx +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_CHECKBOX_HXX_ -#define _FORMS_CHECKBOX_HXX_ - -#include "refvaluecomponent.hxx" - -//......................................................................... -namespace frm -{ - -//================================================================== -//= OCheckBoxModel -//================================================================== -class OCheckBoxModel :public OReferenceValueComponent -{ -protected: - sal_Int16 getState(const ::com::sun::star::uno::Any& rValue); - -public: - DECLARE_DEFAULT_LEAF_XTOR( OCheckBoxModel ); - - // XServiceInfo - IMPLEMENTATION_NAME(OCheckBoxModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - -protected: - DECLARE_XCLONEABLE(); - - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); -}; - -//================================================================== -//= OCheckBoxControl -//================================================================== -class OCheckBoxControl : public OBoundControl -{ -public: - OCheckBoxControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - - // XServiceInfo - IMPLEMENTATION_NAME(OCheckBoxControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); -}; - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_CHECKBOX_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Columns.cxx b/forms/source/component/Columns.cxx deleted file mode 100644 index c30c0a06e..000000000 --- a/forms/source/component/Columns.cxx +++ /dev/null @@ -1,602 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "Columns.hxx" -#include "property.hrc" -#include "property.hxx" -#include "componenttools.hxx" -#include "ids.hxx" -#include "findpos.hxx" -#include <com/sun/star/io/XPersistObject.hpp> -#include <com/sun/star/io/XObjectOutputStream.hpp> -#include <com/sun/star/io/XObjectInputStream.hpp> -#include <com/sun/star/io/XMarkableStream.hpp> -#include <com/sun/star/form/XFormComponent.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/form/binding/XBindableValue.hpp> -#include <com/sun/star/beans/XPropertyContainer.hpp> -#include <com/sun/star/text/XText.hpp> -#include <comphelper/sequence.hxx> -#include <comphelper/property.hxx> -#include <comphelper/basicio.hxx> -#include <comphelper/types.hxx> -#include <comphelper/servicehelper.hxx> -#include "services.hxx" -#include "frm_resource.hrc" -#include <tools/debug.hxx> -#include <rtl/memory.h> - -//......................................................................... -namespace frm -{ -//......................................................................... -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::text; -using namespace ::com::sun::star::form::binding; - -const sal_uInt16 WIDTH = 0x0001; -const sal_uInt16 ALIGN = 0x0002; -const sal_uInt16 OLD_HIDDEN = 0x0004; -const sal_uInt16 COMPATIBLE_HIDDEN = 0x0008; - -//------------------------------------------------------------------------------ -const StringSequence& getColumnTypes() -{ - static StringSequence aColumnTypes(10); - if (!aColumnTypes.getConstArray()[0].getLength()) - { - ::rtl::OUString* pNames = aColumnTypes.getArray(); - pNames[TYPE_CHECKBOX] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CheckBox" ) ); - pNames[TYPE_COMBOBOX] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ComboBox" ) ); - pNames[TYPE_CURRENCYFIELD] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CurrencyField" ) ); - pNames[TYPE_DATEFIELD] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DateField" ) ); - pNames[TYPE_FORMATTEDFIELD] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FormattedField" ) ); - pNames[TYPE_LISTBOX] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ListBox" ) ); - pNames[TYPE_NUMERICFIELD] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NumericField" ) ); - pNames[TYPE_PATTERNFIELD] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PatternField" ) ); - pNames[TYPE_TEXTFIELD] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "TextField" ) ); - pNames[TYPE_TIMEFIELD] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "TimeField" ) ); - } - return aColumnTypes; -} - -//------------------------------------------------------------------------------ -sal_Int32 getColumnTypeByModelName(const ::rtl::OUString& aModelName) -{ - const ::rtl::OUString aModelPrefix (RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.component.") ); - const ::rtl::OUString aCompatibleModelPrefix (RTL_CONSTASCII_USTRINGPARAM("stardiv.one.form.component.") ); - - sal_Int32 nTypeId = -1; - if (aModelName == FRM_COMPONENT_EDIT) - nTypeId = TYPE_TEXTFIELD; - else - { - sal_Int32 nPrefixPos = aModelName.indexOf(aModelPrefix); -#ifdef DBG_UTIL - sal_Int32 nCompatiblePrefixPos = aModelName.indexOf(aCompatibleModelPrefix); -#endif - DBG_ASSERT( (nPrefixPos != -1) || (nCompatiblePrefixPos != -1), - "::getColumnTypeByModelName() : wrong servivce !"); - - ::rtl::OUString aColumnType = (nPrefixPos != -1) - ? aModelName.copy(aModelPrefix.getLength()) - : aModelName.copy(aCompatibleModelPrefix.getLength()); - - const StringSequence& rColumnTypes = getColumnTypes(); - nTypeId = ::detail::findPos(aColumnType, rColumnTypes); - } - return nTypeId; -} - -/*************************************************************************/ - -namespace -{ - class theOGridColumnImplementationId : public rtl::Static< UnoTunnelIdInit, theOGridColumnImplementationId > {}; -} - -const Sequence<sal_Int8>& OGridColumn::getUnoTunnelImplementationId() -{ - return theOGridColumnImplementationId::get().getSeq(); -} - -//------------------------------------------------------------------ -sal_Int64 SAL_CALL OGridColumn::getSomething( const Sequence<sal_Int8>& _rIdentifier) throw(RuntimeException) -{ - sal_Int64 nReturn(0); - - if ( (_rIdentifier.getLength() == 16) - && (0 == rtl_compareMemory( getUnoTunnelImplementationId().getConstArray(), _rIdentifier.getConstArray(), 16 )) - ) - { - nReturn = reinterpret_cast<sal_Int64>(this); - } - else - { - Reference< XUnoTunnel > xAggTunnel; - if ( query_aggregation( m_xAggregate, xAggTunnel ) ) - return xAggTunnel->getSomething( _rIdentifier ); - } - return nReturn; -} - -//------------------------------------------------------------------ -Sequence<sal_Int8> SAL_CALL OGridColumn::getImplementationId() throw(RuntimeException) -{ - return OImplementationIds::getImplementationId(getTypes()); -} - -//------------------------------------------------------------------ -Sequence<Type> SAL_CALL OGridColumn::getTypes() throw(RuntimeException) -{ - TypeBag aTypes( OGridColumn_BASE::getTypes() ); - // erase the types which we do not support - aTypes.removeType( XFormComponent::static_type() ); - aTypes.removeType( XServiceInfo::static_type() ); - aTypes.removeType( XBindableValue::static_type() ); - aTypes.removeType( XPropertyContainer::static_type() ); - - // but re-add their base class(es) - aTypes.addType( XChild::static_type() ); - - Reference< XTypeProvider > xProv; - if ( query_aggregation( m_xAggregate, xProv )) - aTypes.addTypes( xProv->getTypes() ); - - aTypes.removeType( XTextRange::static_type() ); - aTypes.removeType( XSimpleText::static_type() ); - aTypes.removeType( XText::static_type() ); - - return aTypes.getTypes(); -} - -//------------------------------------------------------------------ -Any SAL_CALL OGridColumn::queryAggregation( const Type& _rType ) throw (RuntimeException) -{ - Any aReturn; - // some functionality at our aggregate cannot be reasonably fullfilled here. - if ( _rType.equals(::getCppuType(static_cast< Reference< XFormComponent >* >(NULL))) - || _rType.equals(::getCppuType(static_cast< Reference< XServiceInfo >* >(NULL))) - || _rType.equals(::getCppuType(static_cast< Reference< XBindableValue >* >(NULL))) - || _rType.equals(::getCppuType(static_cast< Reference< XPropertyContainer >* >(NULL))) - || comphelper::isAssignableFrom(::getCppuType(static_cast< Reference< XTextRange >* >(NULL)),_rType) - ) - return aReturn; - - aReturn = OGridColumn_BASE::queryAggregation(_rType); - if (!aReturn.hasValue()) - { - aReturn = OPropertySetAggregationHelper::queryInterface(_rType); - if (!aReturn.hasValue() && m_xAggregate.is()) - aReturn = m_xAggregate->queryAggregation(_rType); - } - - return aReturn; -} - -DBG_NAME(OGridColumn); -//------------------------------------------------------------------------------ -OGridColumn::OGridColumn( const comphelper::ComponentContext& _rContext, const ::rtl::OUString& _sModelName ) - :OGridColumn_BASE(m_aMutex) - ,OPropertySetAggregationHelper(OGridColumn_BASE::rBHelper) - ,m_aHidden( makeAny( sal_False ) ) - ,m_aContext( _rContext ) - ,m_aModelName(_sModelName) -{ - DBG_CTOR(OGridColumn,NULL); - - // Anlegen des UnoControlModels - if ( m_aModelName.getLength() ) // is there a to-be-aggregated model? - { - increment( m_refCount ); - - { - m_xAggregate.set( m_aContext.createComponent( m_aModelName ), UNO_QUERY ); - setAggregation( m_xAggregate ); - } - - if ( m_xAggregate.is() ) - { // don't omit those brackets - they ensure that the following temporary is properly deleted - m_xAggregate->setDelegator( static_cast< ::cppu::OWeakObject* >( this ) ); - } - - // Refcount wieder bei NULL - decrement( m_refCount ); - } -} - -//------------------------------------------------------------------------------ -OGridColumn::OGridColumn( const OGridColumn* _pOriginal ) - :OGridColumn_BASE( m_aMutex ) - ,OPropertySetAggregationHelper( OGridColumn_BASE::rBHelper ) - ,m_aContext( _pOriginal->m_aContext ) -{ - DBG_CTOR(OGridColumn,NULL); - - m_aWidth = _pOriginal->m_aWidth; - m_aAlign = _pOriginal->m_aAlign; - m_aHidden = _pOriginal->m_aHidden; - m_aModelName = _pOriginal->m_aModelName; - m_aLabel = _pOriginal->m_aLabel; - - increment( m_refCount ); - { - { - m_xAggregate = createAggregateClone( _pOriginal ); - setAggregation( m_xAggregate ); - } - - if ( m_xAggregate.is() ) - { // don't omit this brackets - they ensure that the following temporary is properly deleted - m_xAggregate->setDelegator( static_cast< ::cppu::OWeakObject* >( this ) ); - } - } - decrement( m_refCount ); -} - -//------------------------------------------------------------------------------ -OGridColumn::~OGridColumn() -{ - if (!OGridColumn_BASE::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - - // freigeben der Agg - if (m_xAggregate.is()) - { - InterfaceRef xIface; - m_xAggregate->setDelegator(xIface); - } - - DBG_DTOR(OGridColumn,NULL); -} - -// XEventListener -//------------------------------------------------------------------------------ -void SAL_CALL OGridColumn::disposing(const EventObject& _rSource) throw(RuntimeException) -{ - OPropertySetAggregationHelper::disposing(_rSource); - - Reference<XEventListener> xEvtLstner; - if (query_aggregation(m_xAggregate, xEvtLstner)) - xEvtLstner->disposing(_rSource); -} - -// OGridColumn_BASE -//----------------------------------------------------------------------------- -void OGridColumn::disposing() -{ - OGridColumn_BASE::disposing(); - OPropertySetAggregationHelper::disposing(); - - Reference<XComponent> xComp; - if (query_aggregation(m_xAggregate, xComp)) - xComp->dispose(); -} - -//------------------------------------------------------------------------------ -void OGridColumn::clearAggregateProperties( Sequence< Property >& _rProps, sal_Bool bAllowDropDown ) -{ - // some properties are not to be exposed to the outer world - ::std::set< ::rtl::OUString > aForbiddenProperties; - aForbiddenProperties.insert( PROPERTY_ALIGN ); - aForbiddenProperties.insert( PROPERTY_AUTOCOMPLETE ); - aForbiddenProperties.insert( PROPERTY_BACKGROUNDCOLOR ); - aForbiddenProperties.insert( PROPERTY_BORDER ); - aForbiddenProperties.insert( PROPERTY_BORDERCOLOR ); - aForbiddenProperties.insert( PROPERTY_ECHO_CHAR ); - aForbiddenProperties.insert( PROPERTY_FILLCOLOR ); - aForbiddenProperties.insert( PROPERTY_FONT ); - aForbiddenProperties.insert( PROPERTY_FONT_NAME ); - aForbiddenProperties.insert( PROPERTY_FONT_STYLENAME ); - aForbiddenProperties.insert( PROPERTY_FONT_FAMILY ); - aForbiddenProperties.insert( PROPERTY_FONT_CHARSET ); - aForbiddenProperties.insert( PROPERTY_FONT_HEIGHT ); - aForbiddenProperties.insert( PROPERTY_FONT_WEIGHT ); - aForbiddenProperties.insert( PROPERTY_FONT_SLANT ); - aForbiddenProperties.insert( PROPERTY_FONT_UNDERLINE ); - aForbiddenProperties.insert( PROPERTY_FONT_STRIKEOUT ); - aForbiddenProperties.insert( PROPERTY_FONT_WORDLINEMODE ); - aForbiddenProperties.insert( PROPERTY_TEXTLINECOLOR ); - aForbiddenProperties.insert( PROPERTY_FONTEMPHASISMARK ); - aForbiddenProperties.insert( PROPERTY_FONTRELIEF ); - aForbiddenProperties.insert( PROPERTY_HARDLINEBREAKS ); - aForbiddenProperties.insert( PROPERTY_HSCROLL ); - aForbiddenProperties.insert( PROPERTY_LABEL ); - aForbiddenProperties.insert( PROPERTY_LINECOLOR ); - aForbiddenProperties.insert( PROPERTY_MULTISELECTION ); - aForbiddenProperties.insert( PROPERTY_PRINTABLE ); - aForbiddenProperties.insert( PROPERTY_TABINDEX ); - aForbiddenProperties.insert( PROPERTY_TABSTOP ); - aForbiddenProperties.insert( PROPERTY_TEXTCOLOR ); - aForbiddenProperties.insert( PROPERTY_VSCROLL ); - aForbiddenProperties.insert( PROPERTY_CONTROLLABEL ); - aForbiddenProperties.insert( PROPERTY_RICH_TEXT ); - aForbiddenProperties.insert( PROPERTY_VERTICAL_ALIGN ); - aForbiddenProperties.insert( PROPERTY_IMAGE_URL ); - aForbiddenProperties.insert( PROPERTY_IMAGE_POSITION ); - aForbiddenProperties.insert( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "EnableVisible" ) ) ); - if ( !bAllowDropDown ) - aForbiddenProperties.insert( PROPERTY_DROPDOWN ); - - Sequence< Property > aNewProps( _rProps.getLength() ); - Property* pNewProps = aNewProps.getArray(); - - const Property* pProps = _rProps.getConstArray(); - const Property* pPropsEnd = pProps + _rProps.getLength(); - for ( ; pProps != pPropsEnd; ++pProps ) - { - if ( aForbiddenProperties.find( pProps->Name ) == aForbiddenProperties.end() ) - *pNewProps++ = *pProps; - } - - aNewProps.realloc( pNewProps - aNewProps.getArray() ); - _rProps = aNewProps; -} - -//------------------------------------------------------------------------------ -void OGridColumn::setOwnProperties(Sequence<Property>& aDescriptor) -{ - aDescriptor.realloc(5); - Property* pProperties = aDescriptor.getArray(); - DECL_PROP1(LABEL, ::rtl::OUString, BOUND); - DECL_PROP3(WIDTH, sal_Int32, BOUND, MAYBEVOID, MAYBEDEFAULT); - DECL_PROP3(ALIGN, sal_Int16, BOUND, MAYBEVOID, MAYBEDEFAULT); - DECL_BOOL_PROP2(HIDDEN, BOUND, MAYBEDEFAULT); - DECL_PROP1(COLUMNSERVICENAME, ::rtl::OUString, READONLY); -} - -// Reference<XPropertySet> -//------------------------------------------------------------------------------ -void OGridColumn::getFastPropertyValue(Any& rValue, sal_Int32 nHandle ) const -{ - switch (nHandle) - { - case PROPERTY_ID_COLUMNSERVICENAME: - rValue <<= m_aModelName; - break; - case PROPERTY_ID_LABEL: - rValue <<= m_aLabel; - break; - case PROPERTY_ID_WIDTH: - rValue = m_aWidth; - break; - case PROPERTY_ID_ALIGN: - rValue = m_aAlign; - break; - case PROPERTY_ID_HIDDEN: - rValue = m_aHidden; - break; - default: - OPropertySetAggregationHelper::getFastPropertyValue(rValue, nHandle); - } -} - -//------------------------------------------------------------------------------ -sal_Bool OGridColumn::convertFastPropertyValue( Any& rConvertedValue, Any& rOldValue, - sal_Int32 nHandle, const Any& rValue )throw( IllegalArgumentException ) -{ - sal_Bool bModified(sal_False); - switch (nHandle) - { - case PROPERTY_ID_LABEL: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aLabel); - break; - case PROPERTY_ID_WIDTH: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aWidth, ::getCppuType((const sal_Int32*)NULL)); - break; - case PROPERTY_ID_ALIGN: - bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_aAlign, ::getCppuType( (const sal_Int32*)NULL ) ); - // strange enough, css.awt.TextAlign is a 32-bit integer, while the Align property (both here for grid controls - // and for ordinary toolkit controls) is a 16-bit integer. So, allow for 32 bit, but normalize it to 16 bit - if ( bModified ) - { - sal_Int32 nAlign( 0 ); - if ( rConvertedValue >>= nAlign ) - rConvertedValue <<= (sal_Int16)nAlign; - } - break; - case PROPERTY_ID_HIDDEN: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, getBOOL(m_aHidden)); - break; - } - return bModified; -} - -//------------------------------------------------------------------------------ -void OGridColumn::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw (::com::sun::star::uno::Exception) -{ - switch (nHandle) - { - case PROPERTY_ID_LABEL: - DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_STRING, "invalid type" ); - rValue >>= m_aLabel; - break; - case PROPERTY_ID_WIDTH: - m_aWidth = rValue; - break; - case PROPERTY_ID_ALIGN: - m_aAlign = rValue; - break; - case PROPERTY_ID_HIDDEN: - m_aHidden = rValue; - break; - } -} - - -// XPropertyState -//------------------------------------------------------------------------------ -Any OGridColumn::getPropertyDefaultByHandle( sal_Int32 nHandle ) const -{ - switch (nHandle) - { - case PROPERTY_ID_WIDTH: - case PROPERTY_ID_ALIGN: - return Any(); - case PROPERTY_ID_HIDDEN: - return makeAny((sal_Bool)sal_False); - default: - return OPropertySetAggregationHelper::getPropertyDefaultByHandle(nHandle); - } -} - -// XCloneable -//------------------------------------------------------------------------------ -Reference< XCloneable > SAL_CALL OGridColumn::createClone( ) throw (RuntimeException) -{ - OGridColumn* pNewColumn = createCloneColumn(); - return pNewColumn; -} - -//XPersistObject -//------------------------------------------------------------------------------ -void SAL_CALL OGridColumn::write(const Reference<XObjectOutputStream>& _rxOutStream) -{ - // 1. Schreiben des UnoControls - Reference<XMarkableStream> xMark(_rxOutStream, UNO_QUERY); - sal_Int32 nMark = xMark->createMark(); - - sal_Int32 nLen = 0; - _rxOutStream->writeLong(nLen); - - Reference<XPersistObject> xPersist; - if (query_aggregation(m_xAggregate, xPersist)) - xPersist->write(_rxOutStream); - - // feststellen der Laenge - nLen = xMark->offsetToMark(nMark) - 4; - xMark->jumpToMark(nMark); - _rxOutStream->writeLong(nLen); - xMark->jumpToFurthest(); - xMark->deleteMark(nMark); - - // 2. Schreiben einer VersionsNummer - _rxOutStream->writeShort(0x0002); - - sal_uInt16 nAnyMask = 0; - if (m_aWidth.getValueType().getTypeClass() == TypeClass_LONG) - nAnyMask |= WIDTH; - - if (m_aAlign.getValueTypeClass() == TypeClass_SHORT) - nAnyMask |= ALIGN; - - nAnyMask |= COMPATIBLE_HIDDEN; - - _rxOutStream->writeShort(nAnyMask); - - if (nAnyMask & WIDTH) - _rxOutStream->writeLong(getINT32(m_aWidth)); - if (nAnyMask & ALIGN) - _rxOutStream->writeShort(getINT16(m_aAlign)); - - // Name - _rxOutStream << m_aLabel; - - // the new place for the hidden flag : after m_aLabel, so older office version read the correct label, too - if (nAnyMask & COMPATIBLE_HIDDEN) - _rxOutStream->writeBoolean(getBOOL(m_aHidden)); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OGridColumn::read(const Reference<XObjectInputStream>& _rxInStream) -{ - // 1. Lesen des UnoControls - sal_Int32 nLen = _rxInStream->readLong(); - if (nLen) - { - Reference<XMarkableStream> xMark(_rxInStream, UNO_QUERY); - sal_Int32 nMark = xMark->createMark(); - Reference<XPersistObject> xPersist; - if (query_aggregation(m_xAggregate, xPersist)) - xPersist->read(_rxInStream); - - xMark->jumpToMark(nMark); - _rxInStream->skipBytes(nLen); - xMark->deleteMark(nMark); - } - - // 2. Lesen des Versionsnummer - sal_uInt16 nVersion = _rxInStream->readShort(); (void)nVersion; - sal_uInt16 nAnyMask = _rxInStream->readShort(); - - if (nAnyMask & WIDTH) - { - sal_Int32 nValue = _rxInStream->readLong(); - m_aWidth <<= (sal_Int32)nValue; - } - - if (nAnyMask & ALIGN) - { - sal_Int16 nValue = _rxInStream->readShort(); - m_aAlign <<= nValue; - } - if (nAnyMask & OLD_HIDDEN) - { - sal_Bool bValue = _rxInStream->readBoolean(); - m_aHidden <<= (sal_Bool)bValue; - } - - // Name - _rxInStream >> m_aLabel; - - if (nAnyMask & COMPATIBLE_HIDDEN) - { - sal_Bool bValue = _rxInStream->readBoolean(); - m_aHidden <<= (sal_Bool)bValue; - } -} - -//------------------------------------------------------------------------------ -IMPL_COLUMN(TextFieldColumn, FRM_SUN_COMPONENT_TEXTFIELD, sal_False); -IMPL_COLUMN(PatternFieldColumn, FRM_SUN_COMPONENT_PATTERNFIELD, sal_False); -IMPL_COLUMN(DateFieldColumn, FRM_SUN_COMPONENT_DATEFIELD, sal_True); -IMPL_COLUMN(TimeFieldColumn, FRM_SUN_COMPONENT_TIMEFIELD, sal_False); -IMPL_COLUMN(NumericFieldColumn, FRM_SUN_COMPONENT_NUMERICFIELD, sal_False); -IMPL_COLUMN(CurrencyFieldColumn, FRM_SUN_COMPONENT_CURRENCYFIELD, sal_False); -IMPL_COLUMN(CheckBoxColumn, FRM_SUN_COMPONENT_CHECKBOX, sal_False); -IMPL_COLUMN(ComboBoxColumn, FRM_SUN_COMPONENT_COMBOBOX, sal_False); -IMPL_COLUMN(ListBoxColumn, FRM_SUN_COMPONENT_LISTBOX, sal_False); -IMPL_COLUMN(FormattedFieldColumn, FRM_SUN_COMPONENT_FORMATTEDFIELD, sal_False); - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Columns.hxx b/forms/source/component/Columns.hxx deleted file mode 100644 index 76c526cdc..000000000 --- a/forms/source/component/Columns.hxx +++ /dev/null @@ -1,223 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_COLUMNS_HXX -#define _FRM_COLUMNS_HXX - -#include "cloneable.hxx" -#include "frm_strings.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/io/XObjectInputStream.hpp> -#include <com/sun/star/io/XObjectOutputStream.hpp> -#include <com/sun/star/lang/XUnoTunnel.hpp> -#include <com/sun/star/util/XCloneable.hpp> -/** === end UNO includes === **/ - -#include <comphelper/broadcasthelper.hxx> -#include <comphelper/componentcontext.hxx> -#include <comphelper/propagg.hxx> -#include <comphelper/proparrhlp.hxx> -#include <comphelper/uno3.hxx> -#include <cppuhelper/compbase2.hxx> -#include <cppuhelper/component.hxx> - -using namespace comphelper; - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -// OGridColumn -//================================================================== -typedef ::cppu::WeakAggComponentImplHelper2 < ::com::sun::star::lang::XUnoTunnel - , ::com::sun::star::util::XCloneable > OGridColumn_BASE; -class OGridColumn :public ::comphelper::OBaseMutex - ,public OGridColumn_BASE - ,public OPropertySetAggregationHelper - ,public OCloneableAggregation -{ -protected: -// [properties] - ::com::sun::star::uno::Any m_aWidth; // column width - ::com::sun::star::uno::Any m_aAlign; // column alignment - ::com::sun::star::uno::Any m_aHidden; // column hidden? -// [properties] - - ::comphelper::ComponentContext m_aContext; - ::rtl::OUString m_aModelName; - -// [properties] - ::rtl::OUString m_aLabel; // Name der Spalte -// [properties] - -public: - OGridColumn(const ::comphelper::ComponentContext& _rContext, const ::rtl::OUString& _sModelName = ::rtl::OUString()); - OGridColumn(const OGridColumn* _pOriginal ); - virtual ~OGridColumn(); - - // UNO Anbindung - DECLARE_UNO3_AGG_DEFAULTS(OGridControlModel, OGridColumn_BASE); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException); - - static const ::com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelImplementationId(); - // XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence<sal_Int8>& _rIdentifier) throw(::com::sun::star::uno::RuntimeException); - - // XTypeProvider - virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException); - - // XPersistObject - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream); - - // XPropertySet - virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() = 0; - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, - sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::uno::Exception); - - using OPropertySetAggregationHelper::getFastPropertyValue; - - // ::com::sun::star::beans::XPropertyState - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const; - - // XCloneable - virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException); - - const ::rtl::OUString& getModelName() const { return m_aModelName; } - -protected: - static void clearAggregateProperties(::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property>& seqProps, sal_Bool bAllowDropDown); - static void setOwnProperties(::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property>& seqProps); - - virtual OGridColumn* createCloneColumn() const = 0; -}; - -#define DECL_COLUMN(ClassName) \ -class ClassName \ - :public OGridColumn \ - ,public OAggregationArrayUsageHelper< ClassName > \ -{ \ -public: \ - ClassName(const ::comphelper::ComponentContext& _rContext ); \ - ClassName(const ClassName* _pCloneFrom); \ - \ - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw(::com::sun::star::uno::RuntimeException); \ - virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper(); \ - \ - virtual void fillProperties( \ - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps, \ - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps \ - ) const; \ - \ - virtual OGridColumn* createCloneColumn() const; \ -}; - - -#define IMPL_COLUMN(ClassName, Model, bAllowDropDown) \ - ClassName::ClassName( const ::comphelper::ComponentContext& _rContext ) \ - :OGridColumn(_rContext, Model) \ -{ \ -} \ -ClassName::ClassName( const ClassName* _pCloneFrom ) \ - :OGridColumn( _pCloneFrom ) \ -{ \ -} \ -::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo> ClassName::getPropertySetInfo() throw(::com::sun::star::uno::RuntimeException) \ -{ \ - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo> xInfo( createPropertySetInfo( getInfoHelper() ) ); \ - return xInfo; \ -} \ -::cppu::IPropertyArrayHelper& ClassName::getInfoHelper() \ -{ \ - return *const_cast<ClassName*>(this)->getArrayHelper(); \ -} \ -void ClassName::fillProperties( \ - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps, \ - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps \ - ) const \ -{ \ - if (m_xAggregateSet.is()) \ - { \ - _rAggregateProps = m_xAggregateSet->getPropertySetInfo()->getProperties(); \ - clearAggregateProperties(_rAggregateProps, bAllowDropDown); \ - setOwnProperties(_rProps); \ - } \ -} \ -OGridColumn* ClassName::createCloneColumn() const \ -{ \ - return new ClassName( this ); \ -} \ - \ -// column type ids -#define TYPE_CHECKBOX 0 -#define TYPE_COMBOBOX 1 -#define TYPE_CURRENCYFIELD 2 -#define TYPE_DATEFIELD 3 -#define TYPE_FORMATTEDFIELD 4 -#define TYPE_LISTBOX 5 -#define TYPE_NUMERICFIELD 6 -#define TYPE_PATTERNFIELD 7 -#define TYPE_TEXTFIELD 8 -#define TYPE_TIMEFIELD 9 - -// liste aller bekannten columns -const StringSequence& getColumnTypes(); -sal_Int32 getColumnTypeByModelName(const ::rtl::OUString& aModelName); - -// Columns -DECL_COLUMN(TextFieldColumn) -DECL_COLUMN(PatternFieldColumn) -DECL_COLUMN(DateFieldColumn) -DECL_COLUMN(TimeFieldColumn) -DECL_COLUMN(NumericFieldColumn) -DECL_COLUMN(CurrencyFieldColumn) -DECL_COLUMN(CheckBoxColumn) -DECL_COLUMN(ComboBoxColumn) -DECL_COLUMN(ListBoxColumn) -DECL_COLUMN(FormattedFieldColumn) - -#endif // _FRM_COLUMNS_HXX - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/ComboBox.cxx b/forms/source/component/ComboBox.cxx deleted file mode 100644 index a944de753..000000000 --- a/forms/source/component/ComboBox.cxx +++ /dev/null @@ -1,916 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "ComboBox.hxx" -#include "property.hxx" -#include "property.hrc" -#include "services.hxx" - -#include "frm_resource.hxx" -#include "frm_resource.hrc" -#include "BaseListBox.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/sdb/SQLErrorEvent.hpp> -#include <com/sun/star/sdbc/XRowSet.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/container/XIndexAccess.hpp> -#include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp> -#include <com/sun/star/sdb/XQueriesSupplier.hpp> -#include <com/sun/star/util/NumberFormat.hpp> -#include <com/sun/star/sdbc/XConnection.hpp> -#include <com/sun/star/sdb/SQLContext.hpp> -#include <com/sun/star/sdb/CommandType.hpp> -/** === end UNO includes === **/ - -#include <comphelper/numbers.hxx> -#include <comphelper/basicio.hxx> -#include <connectivity/dbtools.hxx> -#include <connectivity/dbconversion.hxx> -#include <cppuhelper/queryinterface.hxx> -#include <rtl/ustrbuf.hxx> -#include <tools/debug.hxx> -#include <tools/diagnose_ex.h> -#include <unotools/sharedunocomponent.hxx> - -#include <limits.h> - -using namespace dbtools; - -//......................................................................... -namespace frm -{ -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::form::binding; - -//======================================================================== -// class OComboBoxModel -//======================================================================== -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OComboBoxModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException) -{ - return (*new OComboBoxModel(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OComboBoxModel::_getTypes() -{ - return ::comphelper::concatSequences( - OBoundControlModel::_getTypes(), - OEntryListHelper::getTypes(), - OErrorBroadcaster::getTypes() - ); -} - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OComboBoxModel::getSupportedServiceNames() throw(RuntimeException) -{ - StringSequence aSupported = OBoundControlModel::getSupportedServiceNames(); - - sal_Int32 nOldLen = aSupported.getLength(); - aSupported.realloc( nOldLen + 8 ); - ::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen; - - *pStoreTo++ = BINDABLE_CONTROL_MODEL; - *pStoreTo++ = DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_CONTROL_MODEL; - - *pStoreTo++ = BINDABLE_DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_BINDABLE_CONTROL_MODEL; - - *pStoreTo++ = FRM_SUN_COMPONENT_COMBOBOX; - *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_COMBOBOX; - *pStoreTo++ = BINDABLE_DATABASE_COMBO_BOX; - - return aSupported; -} - -//------------------------------------------------------------------------------ -Any SAL_CALL OComboBoxModel::queryAggregation(const Type& _rType) throw (RuntimeException) -{ - Any aReturn = OBoundControlModel::queryAggregation( _rType ); - if ( !aReturn.hasValue() ) - aReturn = OEntryListHelper::queryInterface( _rType ); - if ( !aReturn.hasValue() ) - aReturn = OErrorBroadcaster::queryInterface( _rType ); - return aReturn; -} - -//------------------------------------------------------------------ -DBG_NAME( OComboBoxModel ) -//------------------------------------------------------------------ -OComboBoxModel::OComboBoxModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControlModel( _rxFactory, VCL_CONTROLMODEL_COMBOBOX, FRM_SUN_CONTROL_COMBOBOX, sal_True, sal_True, sal_True ) - // use the old control name for compytibility reasons - ,OEntryListHelper( (OControlModel&)*this ) - ,OErrorBroadcaster( OComponentHelper::rBHelper ) - ,m_aListRowSet( getContext() ) - ,m_eListSourceType(ListSourceType_TABLE) - ,m_bEmptyIsNull(sal_True) -{ - DBG_CTOR( OComboBoxModel, NULL ); - - m_nClassId = FormComponentType::COMBOBOX; - initValueProperty( PROPERTY_TEXT, PROPERTY_ID_TEXT ); -} - -//------------------------------------------------------------------ -OComboBoxModel::OComboBoxModel( const OComboBoxModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OBoundControlModel( _pOriginal, _rxFactory ) - ,OEntryListHelper( *_pOriginal, (OControlModel&)*this ) - ,OErrorBroadcaster( OComponentHelper::rBHelper ) - ,m_aListRowSet( getContext() ) - ,m_aListSource( _pOriginal->m_aListSource ) - ,m_aDefaultText( _pOriginal->m_aDefaultText ) - ,m_eListSourceType( _pOriginal->m_eListSourceType ) - ,m_bEmptyIsNull( _pOriginal->m_bEmptyIsNull ) -{ - DBG_CTOR( OComboBoxModel, NULL ); -} - -//------------------------------------------------------------------ -OComboBoxModel::~OComboBoxModel() -{ - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - - DBG_DTOR( OComboBoxModel, NULL ); -} - -// XCloneable -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OComboBoxModel ) - -//------------------------------------------------------------------------------ -void OComboBoxModel::disposing() -{ - OBoundControlModel::disposing(); - OEntryListHelper::disposing(); - OErrorBroadcaster::disposing(); - m_xFormatter = NULL; -} - -//------------------------------------------------------------------------------ -void OComboBoxModel::getFastPropertyValue(Any& _rValue, sal_Int32 _nHandle) const -{ - switch (_nHandle) - { - case PROPERTY_ID_LISTSOURCETYPE: - _rValue <<= m_eListSourceType; - break; - - case PROPERTY_ID_LISTSOURCE: - _rValue <<= m_aListSource; - break; - - case PROPERTY_ID_EMPTY_IS_NULL: - _rValue <<= m_bEmptyIsNull; - break; - - case PROPERTY_ID_DEFAULT_TEXT: - _rValue <<= m_aDefaultText; - break; - - case PROPERTY_ID_STRINGITEMLIST: - _rValue <<= getStringItemList(); - break; - - default: - OBoundControlModel::getFastPropertyValue(_rValue, _nHandle); - } -} - -//------------------------------------------------------------------------------ -void OComboBoxModel::setFastPropertyValue_NoBroadcast(sal_Int32 _nHandle, const Any& _rValue) - throw (Exception) -{ - switch (_nHandle) - { - case PROPERTY_ID_LISTSOURCETYPE : - DBG_ASSERT(_rValue.getValueType().equals(::getCppuType(reinterpret_cast<ListSourceType*>(NULL))), - "OComboBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - _rValue >>= m_eListSourceType; - break; - - case PROPERTY_ID_LISTSOURCE : - DBG_ASSERT(_rValue.getValueType().getTypeClass() == TypeClass_STRING, - "OComboBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - _rValue >>= m_aListSource; - // die ListSource hat sich geaendert -> neu laden - if (ListSourceType_VALUELIST != m_eListSourceType) - { - if ( m_xCursor.is() && !hasField() && !hasExternalListSource() ) - // combo box is already connected to a database, and no external list source - // data source changed -> refresh - loadData( false ); - } - break; - - case PROPERTY_ID_EMPTY_IS_NULL : - DBG_ASSERT(_rValue.getValueType().getTypeClass() == TypeClass_BOOLEAN, - "OComboBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - _rValue >>= m_bEmptyIsNull; - break; - - case PROPERTY_ID_DEFAULT_TEXT : - DBG_ASSERT(_rValue.getValueType().getTypeClass() == TypeClass_STRING, - "OComboBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - _rValue >>= m_aDefaultText; - resetNoBroadcast(); - break; - - case PROPERTY_ID_STRINGITEMLIST: - { - ControlModelLock aLock( *this ); - setNewStringItemList( _rValue, aLock ); - // TODO: this is bogus. setNewStringItemList expects a guard which has the *only* - // lock to the mutex, but setFastPropertyValue_NoBroadcast is already called with - // a lock - so we effectively has two locks here, of which setNewStringItemList can - // only control one. - } - break; - - default: - OBoundControlModel::setFastPropertyValue_NoBroadcast(_nHandle, _rValue); - } -} - -//------------------------------------------------------------------------------ -sal_Bool OComboBoxModel::convertFastPropertyValue( - Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue) - throw (IllegalArgumentException) -{ - sal_Bool bModified(sal_False); - switch (_nHandle) - { - case PROPERTY_ID_LISTSOURCETYPE : - bModified = tryPropertyValueEnum(_rConvertedValue, _rOldValue, _rValue, m_eListSourceType); - break; - - case PROPERTY_ID_LISTSOURCE : - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_aListSource); - break; - - case PROPERTY_ID_EMPTY_IS_NULL : - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_bEmptyIsNull); - break; - - case PROPERTY_ID_DEFAULT_TEXT : - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_aDefaultText); - break; - - case PROPERTY_ID_STRINGITEMLIST: - bModified = convertNewListSourceProperty( _rConvertedValue, _rOldValue, _rValue ); - break; - - default: - bModified = OBoundControlModel::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue); - break; - } - return bModified; -} - -//------------------------------------------------------------------------------ -void OComboBoxModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 6, OBoundControlModel ) - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - DECL_PROP1(LISTSOURCETYPE, ListSourceType, BOUND); - DECL_PROP1(LISTSOURCE, ::rtl::OUString, BOUND); - DECL_BOOL_PROP1(EMPTY_IS_NULL, BOUND); - DECL_PROP1(DEFAULT_TEXT, ::rtl::OUString, BOUND); - DECL_PROP1(STRINGITEMLIST, Sequence< ::rtl::OUString >,BOUND); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -void OComboBoxModel::describeAggregateProperties( Sequence< Property >& _rAggregateProps ) const -{ - OBoundControlModel::describeAggregateProperties( _rAggregateProps ); - - // superseded properties: - RemoveProperty( _rAggregateProps, PROPERTY_STRINGITEMLIST ); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OComboBoxModel::getServiceName() throw(RuntimeException) -{ - return FRM_COMPONENT_COMBOBOX; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void SAL_CALL OComboBoxModel::write(const Reference<stario::XObjectOutputStream>& _rxOutStream) - throw(stario::IOException, RuntimeException) -{ - OBoundControlModel::write(_rxOutStream); - - // Version - // Version 0x0002: EmptyIsNull - // Version 0x0003: ListSource->Seq - // Version 0x0004: DefaultText - // Version 0x0005: HelpText - _rxOutStream->writeShort(0x0006); - - // Maskierung fuer any - sal_uInt16 nAnyMask = 0; - if (m_aBoundColumn.getValueType().getTypeClass() == TypeClass_SHORT) - nAnyMask |= BOUNDCOLUMN; - _rxOutStream << nAnyMask; - - StringSequence aListSourceSeq(&m_aListSource, 1); - _rxOutStream << aListSourceSeq; - _rxOutStream << (sal_Int16)m_eListSourceType; - - if ((nAnyMask & BOUNDCOLUMN) == BOUNDCOLUMN) - { - sal_Int16 nBoundColumn = 0; - m_aBoundColumn >>= nBoundColumn; - _rxOutStream << nBoundColumn; - } - - _rxOutStream << (sal_Bool)m_bEmptyIsNull; - _rxOutStream << m_aDefaultText; - writeHelpTextCompatibly(_rxOutStream); - - // from version 0x0006 : common properties - writeCommonProperties(_rxOutStream); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OComboBoxModel::read(const Reference<stario::XObjectInputStream>& _rxInStream) throw(stario::IOException, RuntimeException) -{ - OBoundControlModel::read(_rxInStream); - ControlModelLock aLock( *this ); - - // since we are "overwriting" the StringItemList of our aggregate (means we have - // an own place to store the value, instead of relying on our aggregate storing it), - // we need to respect what the aggregate just read for the StringItemList property. - try - { - if ( m_xAggregateSet.is() ) - setNewStringItemList( m_xAggregateSet->getPropertyValue( PROPERTY_STRINGITEMLIST ), aLock ); - } - catch( const Exception& ) - { - OSL_FAIL( "OComboBoxModel::read: caught an exception while examining the aggregate's string item list!" ); - } - - // Version - sal_uInt16 nVersion = _rxInStream->readShort(); - DBG_ASSERT(nVersion > 0, "OComboBoxModel::read : version 0 ? this should never have been written !"); - - if (nVersion > 0x0006) - { - OSL_FAIL("OComboBoxModel::read : invalid (means unknown) version !"); - m_aListSource = ::rtl::OUString(); - m_aBoundColumn <<= (sal_Int16)0; - m_aDefaultText = ::rtl::OUString(); - m_eListSourceType = ListSourceType_TABLE; - m_bEmptyIsNull = sal_True; - defaultCommonProperties(); - return; - } - - // Maskierung fuer any - sal_uInt16 nAnyMask; - _rxInStream >> nAnyMask; - - // ListSource - if (nVersion < 0x0003) - { - ::rtl::OUString sListSource; - _rxInStream >> m_aListSource; - } - else // nVersion == 4 - { - m_aListSource = ::rtl::OUString(); - StringSequence aListSource; - _rxInStream >> aListSource; - const ::rtl::OUString* pToken = aListSource.getConstArray(); - sal_Int32 nLen = aListSource.getLength(); - for (sal_Int32 i = 0; i < nLen; ++i, ++pToken) - m_aListSource += *pToken; - } - - sal_Int16 nListSourceType; - _rxInStream >> nListSourceType; - m_eListSourceType = (ListSourceType)nListSourceType; - - if ((nAnyMask & BOUNDCOLUMN) == BOUNDCOLUMN) - { - sal_Int16 nValue; - _rxInStream >> nValue; - m_aBoundColumn <<= nValue; - } - - if (nVersion > 0x0001) - { - sal_Bool bNull; - _rxInStream >> bNull; - m_bEmptyIsNull = bNull; - } - - if (nVersion > 0x0003) // nVersion == 4 - _rxInStream >> m_aDefaultText; - - // Stringliste muss geleert werden, wenn eine Listenquelle gesetzt ist - // dieses kann der Fall sein wenn im alive modus gespeichert wird - if ( m_aListSource.getLength() - && !hasExternalListSource() - ) - { - setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( StringSequence() ) ); - } - - if (nVersion > 0x0004) - readHelpTextCompatibly(_rxInStream); - - if (nVersion > 0x0005) - readCommonProperties(_rxInStream); - - // Nach dem Lesen die Defaultwerte anzeigen - if ( getControlSource().getLength() ) - { - // (not if we don't have a control source - the "State" property acts like it is persistent, then - resetNoBroadcast(); - } -} - -//------------------------------------------------------------------------------ -void OComboBoxModel::loadData( bool _bForce ) -{ - DBG_ASSERT(m_eListSourceType != ListSourceType_VALUELIST, "OComboBoxModel::loadData : do not call for a value list !"); - DBG_ASSERT( !hasExternalListSource(), "OComboBoxModel::loadData: cannot load from DB when I have an external list source!" ); - - if ( hasExternalListSource() ) - return; - - // Connection holen - Reference<XRowSet> xForm(m_xCursor, UNO_QUERY); - if (!xForm.is()) - return; - Reference<XConnection> xConnection = getConnection(xForm); - if (!xConnection.is()) - return; - - Reference<XServiceInfo> xServiceInfo(xConnection, UNO_QUERY); - if (!xServiceInfo.is() || !xServiceInfo->supportsService(SRV_SDB_CONNECTION)) - { - OSL_FAIL("OComboBoxModel::loadData : invalid connection !"); - return; - } - - if (!m_aListSource.getLength() || m_eListSourceType == ListSourceType_VALUELIST) - return; - - ::utl::SharedUNOComponent< XResultSet > xListCursor; - try - { - m_aListRowSet.setConnection( xConnection ); - - bool bExecuteRowSet( false ); - switch (m_eListSourceType) - { - case ListSourceType_TABLEFIELDS: - // don't work with a statement here, the fields will be collected below - break; - case ListSourceType_TABLE: - { - // does the bound field belong to the table ? - // if we use an alias for the bound field, we won't find it - // in that case we use the first field of the table - - Reference<XNameAccess> xFieldsByName = getTableFields(xConnection, m_aListSource); - Reference<XIndexAccess> xFieldsByIndex(xFieldsByName, UNO_QUERY); - - ::rtl::OUString aFieldName; - if ( xFieldsByName.is() && xFieldsByName->hasByName( getControlSource() ) ) - { - aFieldName = getControlSource(); - } - else - { - // otherwise look for the alias - Reference<XPropertySet> xFormProp(xForm,UNO_QUERY); - Reference< XColumnsSupplier > xSupplyFields; - xFormProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SingleSelectQueryComposer"))) >>= xSupplyFields; - - // search the field - DBG_ASSERT(xSupplyFields.is(), "OComboBoxModel::loadData : invalid query composer !"); - - Reference< XNameAccess > xFieldNames = xSupplyFields->getColumns(); - if ( xFieldNames->hasByName( getControlSource() ) ) - { - Reference< XPropertySet > xComposerFieldAsSet; - xFieldNames->getByName( getControlSource() ) >>= xComposerFieldAsSet; - if (hasProperty(PROPERTY_FIELDSOURCE, xComposerFieldAsSet)) - xComposerFieldAsSet->getPropertyValue(PROPERTY_FIELDSOURCE) >>= aFieldName; - } - } - - if (!aFieldName.getLength()) - break; - - Reference<XDatabaseMetaData> xMeta = xConnection->getMetaData(); - OSL_ENSURE(xMeta.is(),"No database meta data!"); - if ( xMeta.is() ) - { - ::rtl::OUString aQuote = xMeta->getIdentifierQuoteString(); - - ::rtl::OUString sCatalog, sSchema, sTable; - qualifiedNameComponents( xMeta, m_aListSource, sCatalog, sSchema, sTable, eInDataManipulation ); - - ::rtl::OUStringBuffer aStatement; - aStatement.appendAscii( "SELECT DISTINCT " ); - aStatement.append ( quoteName( aQuote, aFieldName ) ); - aStatement.appendAscii( " FROM " ); - aStatement.append ( composeTableNameForSelect( xConnection, sCatalog, sSchema, sTable ) ); - - m_aListRowSet.setEscapeProcessing( sal_False ); - m_aListRowSet.setCommand( aStatement.makeStringAndClear() ); - bExecuteRowSet = true; - } - } break; - case ListSourceType_QUERY: - { - m_aListRowSet.setCommandFromQuery( m_aListSource ); - bExecuteRowSet = true; - } - break; - - default: - { - m_aListRowSet.setEscapeProcessing( ListSourceType_SQLPASSTHROUGH != m_eListSourceType ); - m_aListRowSet.setCommand( m_aListSource ); - bExecuteRowSet = true; - } - } - - if ( bExecuteRowSet ) - { - if ( !_bForce && !m_aListRowSet.isDirty() ) - { - // if none of the settings of the row set changed, compared to the last - // invocation of loadData, then don't re-fill the list. Instead, assume - // the list entries are the same. - return; - } - xListCursor.reset( m_aListRowSet.execute() ); - } - } - catch(SQLException& eSQL) - { - onError(eSQL, FRM_RES_STRING(RID_BASELISTBOX_ERROR_FILLLIST)); - return; - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - return; - } - - ::std::vector< ::rtl::OUString > aStringList; - aStringList.reserve(16); - try - { - OSL_ENSURE( xListCursor.is() || ( ListSourceType_TABLEFIELDS == m_eListSourceType ), - "OComboBoxModel::loadData: logic error!" ); - if ( !xListCursor.is() && ( ListSourceType_TABLEFIELDS != m_eListSourceType ) ) - return; - - switch (m_eListSourceType) - { - case ListSourceType_SQL: - case ListSourceType_SQLPASSTHROUGH: - case ListSourceType_TABLE: - case ListSourceType_QUERY: - { - // die XDatabaseVAriant der ersten Spalte - Reference<XColumnsSupplier> xSupplyCols(xListCursor, UNO_QUERY); - DBG_ASSERT(xSupplyCols.is(), "OComboBoxModel::loadData : cursor supports the row set service but is no column supplier?!"); - Reference<XIndexAccess> xColumns; - if (xSupplyCols.is()) - { - xColumns = Reference<XIndexAccess>(xSupplyCols->getColumns(), UNO_QUERY); - DBG_ASSERT(xColumns.is(), "OComboBoxModel::loadData : no columns supplied by the row set !"); - } - Reference< XPropertySet > xDataField; - if ( xColumns.is() ) - xColumns->getByIndex(0) >>= xDataField; - if ( !xDataField.is() ) - return; - - ::dbtools::FormattedColumnValue aValueFormatter( getContext(), xForm, xDataField ); - - // Listen fuellen - sal_Int16 i = 0; - // per definitionem the list cursor is positioned _before_ the first row at the moment - while (xListCursor->next() && (i++<SHRT_MAX)) // max anzahl eintraege - { - aStringList.push_back( aValueFormatter.getFormattedValue() ); - } - } - break; - case ListSourceType_TABLEFIELDS: - { - Reference<XNameAccess> xFieldNames = getTableFields(xConnection, m_aListSource); - if (xFieldNames.is()) - { - StringSequence seqNames = xFieldNames->getElementNames(); - sal_Int32 nFieldsCount = seqNames.getLength(); - const ::rtl::OUString* pustrNames = seqNames.getConstArray(); - - for (sal_Int32 k=0; k<nFieldsCount; ++k) - aStringList.push_back(pustrNames[k]); - } - } - break; - default: - OSL_FAIL( "OComboBoxModel::loadData: unreachable!" ); - break; - } - } - catch(SQLException& eSQL) - { - onError(eSQL, FRM_RES_STRING(RID_BASELISTBOX_ERROR_FILLLIST)); - return; - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - return; - } - - // String-Sequence fuer ListBox erzeugen - StringSequence aStringSeq(aStringList.size()); - ::rtl::OUString* pStringAry = aStringSeq.getArray(); - for (sal_Int32 i = 0; i<aStringSeq.getLength(); ++i) - pStringAry[i] = aStringList[i]; - - // String-Sequence an ListBox setzen - setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( aStringSeq ) ); -} - -//------------------------------------------------------------------------------ -void OComboBoxModel::onConnectedDbColumn( const Reference< XInterface >& _rxForm ) -{ - Reference<XPropertySet> xField = getField(); - if ( xField.is() ) - m_pValueFormatter.reset( new ::dbtools::FormattedColumnValue( getContext(), Reference< XRowSet >( _rxForm, UNO_QUERY ), xField ) ); - getPropertyValue( PROPERTY_STRINGITEMLIST ) >>= m_aDesignModeStringItems; - - // Daten nur laden, wenn eine Listenquelle angegeben wurde - if ( m_aListSource.getLength() && m_xCursor.is() && !hasExternalListSource() ) - loadData( false ); -} - -//------------------------------------------------------------------------------ -void OComboBoxModel::onDisconnectedDbColumn() -{ - m_pValueFormatter.reset(); - - // reset the string item list - if ( !hasExternalListSource() ) - setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( m_aDesignModeStringItems ) ); - - m_aListRowSet.dispose(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OComboBoxModel::reloaded( const EventObject& aEvent ) throw(RuntimeException) -{ - OBoundControlModel::reloaded(aEvent); - - // reload data if we have a list source - if ( m_aListSource.getLength() && m_xCursor.is() && !hasExternalListSource() ) - loadData( false ); -} - -//------------------------------------------------------------------------------ -void OComboBoxModel::resetNoBroadcast() -{ - OBoundControlModel::resetNoBroadcast(); - m_aLastKnownValue.clear(); -} - -//----------------------------------------------------------------------------- -sal_Bool OComboBoxModel::commitControlValueToDbColumn( bool _bPostReset ) -{ - Any aNewValue( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) ); - - ::rtl::OUString sNewValue; - aNewValue >>= sNewValue; - - bool bModified = ( aNewValue != m_aLastKnownValue ); - if ( bModified ) - { - if ( !aNewValue.hasValue() - || ( !sNewValue.getLength() // an empty string - && m_bEmptyIsNull // which should be interpreted as NULL - ) - ) - { - m_xColumnUpdate->updateNull(); - } - else - { - try - { - OSL_PRECOND( m_pValueFormatter.get(), "OComboBoxModel::commitControlValueToDbColumn: no value formatter!" ); - if ( m_pValueFormatter.get() ) - { - if ( !m_pValueFormatter->setFormattedValue( sNewValue ) ) - return sal_False; - } - else - m_xColumnUpdate->updateString( sNewValue ); - } - catch ( const Exception& ) - { - return sal_False; - } - } - - m_aLastKnownValue = aNewValue; - } - - // add the new value to the list - sal_Bool bAddToList = bModified && !_bPostReset; - // (only if this is not the "commit" triggered by a "reset") - - if ( bAddToList ) - { - StringSequence aStringItemList; - if ( getPropertyValue( PROPERTY_STRINGITEMLIST ) >>= aStringItemList ) - { - const ::rtl::OUString* pStringItems = aStringItemList.getConstArray(); - sal_Int32 i; - for (i=0; i<aStringItemList.getLength(); ++i, ++pStringItems) - { - if ( pStringItems->equals( sNewValue ) ) - break; - } - - // not found -> add - if (i >= aStringItemList.getLength()) - { - sal_Int32 nOldLen = aStringItemList.getLength(); - aStringItemList.realloc( nOldLen + 1 ); - aStringItemList.getArray()[ nOldLen ] = sNewValue; - - setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( aStringItemList ) ); - } - } - } - - return sal_True; -} - -// XPropertiesChangeListener -//------------------------------------------------------------------------------ -Any OComboBoxModel::translateDbColumnToControlValue() -{ - OSL_PRECOND( m_pValueFormatter.get(), "OComboBoxModel::translateDbColumnToControlValue: no value formatter!" ); - if ( m_pValueFormatter.get() ) - { - ::rtl::OUString sValue( m_pValueFormatter->getFormattedValue() ); - if ( !sValue.getLength() - && m_pValueFormatter->getColumn().is() - && m_pValueFormatter->getColumn()->wasNull() - ) - { - m_aLastKnownValue.clear(); - } - else - { - - m_aLastKnownValue <<= sValue; - } - } - else - m_aLastKnownValue.clear(); - - return m_aLastKnownValue.hasValue() ? m_aLastKnownValue : makeAny( ::rtl::OUString() ); - // (m_aLastKnownValue is alllowed to be VOID, the control value isn't) -} - -//------------------------------------------------------------------------------ -Any OComboBoxModel::getDefaultForReset() const -{ - return makeAny( m_aDefaultText ); -} - -//-------------------------------------------------------------------- -void OComboBoxModel::stringItemListChanged( ControlModelLock& /*_rInstanceLock*/ ) -{ - if ( m_xAggregateSet.is() ) - m_xAggregateSet->setPropertyValue( PROPERTY_STRINGITEMLIST, makeAny( getStringItemList() ) ); -} - -//-------------------------------------------------------------------- -void OComboBoxModel::connectedExternalListSource( ) -{ - // TODO? -} - -//-------------------------------------------------------------------- -void OComboBoxModel::disconnectedExternalListSource( ) -{ - // TODO? -} - -//-------------------------------------------------------------------- -void OComboBoxModel::refreshInternalEntryList() -{ - DBG_ASSERT( !hasExternalListSource(), "OComboBoxModel::refreshInternalEntryList: invalid call!" ); - - if ( !hasExternalListSource( ) - && ( m_eListSourceType != ListSourceType_VALUELIST ) - && ( m_xCursor.is() ) - ) - { - loadData( true ); - } -} - -//-------------------------------------------------------------------- -void SAL_CALL OComboBoxModel::disposing( const EventObject& _rSource ) throw ( RuntimeException ) -{ - if ( !OEntryListHelper::handleDisposing( _rSource ) ) - OBoundControlModel::disposing( _rSource ); -} - -//======================================================================== -//= OComboBoxControl -//======================================================================== - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OComboBoxControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException) -{ - return *(new OComboBoxControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -OComboBoxControl::OComboBoxControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl(_rxFactory, VCL_CONTROL_COMBOBOX) -{ -} - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OComboBoxControl::getSupportedServiceNames() throw(RuntimeException) -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_COMBOBOX; - return aSupported; -} - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/ComboBox.hxx b/forms/source/component/ComboBox.hxx deleted file mode 100644 index 3f88658ce..000000000 --- a/forms/source/component/ComboBox.hxx +++ /dev/null @@ -1,180 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_COMBOBOX_HXX_ -#define _FORMS_COMBOBOX_HXX_ - -#include "FormComponent.hxx" -#include "errorbroadcaster.hxx" -#include "entrylisthelper.hxx" -#include "cachedrowset.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/util/XNumberFormatter.hpp> -#include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp> -#include <com/sun/star/form/ListSourceType.hpp> -#include <com/sun/star/awt/XItemListener.hpp> -#include <com/sun/star/awt/XFocusListener.hpp> -/** === end UNO includes === **/ - -#include <connectivity/formattedcolumnvalue.hxx> - -#include <cppuhelper/interfacecontainer.hxx> - -#include <vcl/timer.hxx> - -#include <tools/date.hxx> - -//......................................................................... -namespace frm -{ - -//================================================================== -// OComboBoxModel -//================================================================== -class OComboBoxModel - :public OBoundControlModel - ,public OEntryListHelper - ,public OErrorBroadcaster -{ - CachedRowSet m_aListRowSet; // the row set to fill the list - ::com::sun::star::uno::Any m_aBoundColumn; // obsolet - ::rtl::OUString m_aListSource; // - ::rtl::OUString m_aDefaultText; // DefaultText - ::com::sun::star::uno::Any m_aLastKnownValue; - - StringSequence m_aDesignModeStringItems; - // upon loading, in some cases we reset fill our string item list ourself. We don't want - // to lose the user's items then, so we remember them here. - - - ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter> m_xFormatter; - - ::com::sun::star::form::ListSourceType m_eListSourceType; // type der list source - sal_Bool m_bEmptyIsNull; // LeerString wird als NULL interpretiert - - ::std::auto_ptr< ::dbtools::FormattedColumnValue > - m_pValueFormatter; - - - -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - DECLARE_DEFAULT_LEAF_XTOR( OComboBoxModel ); - - virtual void SAL_CALL disposing(); - - // OPropertySetHelper - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const; - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw (::com::sun::star::uno::Exception); - virtual sal_Bool SAL_CALL convertFastPropertyValue( - ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw (::com::sun::star::lang::IllegalArgumentException); - - // XLoadListener - virtual void SAL_CALL reloaded( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException); - - // XServiceInfo - IMPLEMENTATION_NAME(OComboBoxModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // UNO - DECLARE_UNO3_AGG_DEFAULTS(OComboBoxModel, OBoundControlModel); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - virtual void describeAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps - ) const; - - // XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException); - - // prevent method hiding - using OBoundControlModel::getFastPropertyValue; - -protected: - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - - virtual void onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm ); - virtual void onDisconnectedDbColumn(); - - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - - virtual void resetNoBroadcast(); - - // OEntryListHelper overriables - virtual void stringItemListChanged( ControlModelLock& _rInstanceLock ); - virtual void connectedExternalListSource( ); - virtual void disconnectedExternalListSource( ); - virtual void refreshInternalEntryList(); - -protected: - void loadData( bool _bForce ); - - DECLARE_XCLONEABLE(); -}; - -//================================================================== -// OComboBoxControl -//================================================================== - -class OComboBoxControl : public OBoundControl -{ -public: - OComboBoxControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - - // XServiceInfo - IMPLEMENTATION_NAME(OComboBoxControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); -}; - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_COMBOBOX_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Currency.cxx b/forms/source/component/Currency.cxx deleted file mode 100644 index 5f7d1db97..000000000 --- a/forms/source/component/Currency.cxx +++ /dev/null @@ -1,270 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "Currency.hxx" -#include <tools/debug.hxx> -#include <unotools/localedatawrapper.hxx> -#include <vcl/svapp.hxx> -#include <unotools/syslocale.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; - -//================================================================== -// OCurrencyControl -//================================================================== -//------------------------------------------------------------------ -OCurrencyControl::OCurrencyControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl(_rxFactory, VCL_CONTROL_CURRENCYFIELD) -{ -} - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OCurrencyControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OCurrencyControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OCurrencyControl::_getTypes() -{ - return OBoundControl::_getTypes(); -} - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OCurrencyControl::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_CURRENCYFIELD; - return aSupported; -} - -//================================================================== -// OCurrencyModel -//================================================================== -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OCurrencyModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OCurrencyModel(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OCurrencyModel::_getTypes() -{ - return OEditBaseModel::_getTypes(); -} - -//------------------------------------------------------------------ -void OCurrencyModel::implConstruct() -{ - if (m_xAggregateSet.is()) - { - try - { - // get the system international informations - const SvtSysLocale aSysLocale; - const LocaleDataWrapper& aLocaleInfo = aSysLocale.GetLocaleData(); - - ::rtl::OUString sCurrencySymbol; - sal_Bool bPrependCurrencySymbol; - switch ( aLocaleInfo.getCurrPositiveFormat() ) - { - case 0: // $1 - sCurrencySymbol = String(aLocaleInfo.getCurrSymbol()); - bPrependCurrencySymbol = sal_True; - break; - case 1: // 1$ - sCurrencySymbol = String(aLocaleInfo.getCurrSymbol()); - bPrependCurrencySymbol = sal_False; - break; - case 2: // $ 1 - sCurrencySymbol = ::rtl::OUString(String(aLocaleInfo.getCurrSymbol())) + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" ") ); - bPrependCurrencySymbol = sal_True; - break; - case 3: // 1 $ - sCurrencySymbol = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" ") ) + ::rtl::OUString(String(aLocaleInfo.getCurrSymbol())); - bPrependCurrencySymbol = sal_False; - break; - } - if (sCurrencySymbol.getLength()) - { - m_xAggregateSet->setPropertyValue(PROPERTY_CURRENCYSYMBOL, makeAny(sCurrencySymbol)); - m_xAggregateSet->setPropertyValue(PROPERTY_CURRSYM_POSITION, makeAny(bPrependCurrencySymbol)); - } - } - catch(Exception&) - { - OSL_FAIL( "OCurrencyModel::implConstruct: caught an exception while initializing the aggregate!" ); - } - } -} - -//------------------------------------------------------------------ -DBG_NAME( OCurrencyModel ) -//------------------------------------------------------------------ -OCurrencyModel::OCurrencyModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OEditBaseModel( _rxFactory, VCL_CONTROLMODEL_CURRENCYFIELD, FRM_SUN_CONTROL_CURRENCYFIELD, sal_False, sal_True ) - // use the old control name for compytibility reasons -{ - DBG_CTOR( OCurrencyModel, NULL ); - - m_nClassId = FormComponentType::CURRENCYFIELD; - initValueProperty( PROPERTY_VALUE, PROPERTY_ID_VALUE ); - - implConstruct(); -} - -//------------------------------------------------------------------ -OCurrencyModel::OCurrencyModel( const OCurrencyModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OEditBaseModel( _pOriginal, _rxFactory ) -{ - DBG_CTOR( OCurrencyModel, NULL ); - implConstruct(); -} - -//------------------------------------------------------------------ -OCurrencyModel::~OCurrencyModel() -{ - DBG_DTOR( OCurrencyModel, NULL ); -} - -// XCloneable -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OCurrencyModel ) - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OCurrencyModel::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControlModel::getSupportedServiceNames(); - - sal_Int32 nOldLen = aSupported.getLength(); - aSupported.realloc( nOldLen + 4 ); - ::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen; - - *pStoreTo++ = DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_CONTROL_MODEL; - - *pStoreTo++ = FRM_SUN_COMPONENT_CURRENCYFIELD; - *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_CURRENCYFIELD; - - return aSupported; -} - -//------------------------------------------------------------------------------ -void OCurrencyModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 2, OEditBaseModel ) - // Value auf transient setzen -// ModifyPropertyAttributes(_rAggregateProps, PROPERTY_VALUE, PropertyAttribute::TRANSIENT, 0); - - DECL_PROP3(DEFAULT_VALUE, double, BOUND, MAYBEDEFAULT, MAYBEVOID); - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OCurrencyModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_CURRENCYFIELD; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -sal_Bool OCurrencyModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) -{ - Any aControlValue( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) ); - if ( !compare( aControlValue, m_aSaveValue ) ) - { - if ( aControlValue.getValueType().getTypeClass() == TypeClass_VOID ) - m_xColumnUpdate->updateNull(); - else - { - try - { - m_xColumnUpdate->updateDouble( getDouble( aControlValue ) ); - } - catch(Exception&) - { - return sal_False; - } - } - m_aSaveValue = aControlValue; - } - return sal_True; -} - -//------------------------------------------------------------------------------ -Any OCurrencyModel::translateDbColumnToControlValue() -{ - m_aSaveValue <<= m_xColumn->getDouble(); - if ( m_xColumn->wasNull() ) - m_aSaveValue.clear(); - return m_aSaveValue; -} - -// XReset -//------------------------------------------------------------------------------ -Any OCurrencyModel::getDefaultForReset() const -{ - Any aValue; - if ( m_aDefault.getValueType().getTypeClass() == TypeClass_DOUBLE ) - aValue = m_aDefault; - - return aValue; -} - -//------------------------------------------------------------------------------ -void OCurrencyModel::resetNoBroadcast() -{ - OEditBaseModel::resetNoBroadcast(); - m_aSaveValue.clear(); -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Currency.hxx b/forms/source/component/Currency.hxx deleted file mode 100644 index 49f19d98d..000000000 --- a/forms/source/component/Currency.hxx +++ /dev/null @@ -1,103 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_CURRENCY_HXX_ -#define _FORMS_CURRENCY_HXX_ - -#include "EditBase.hxx" - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -//= OCurrencyModel -//================================================================== -class OCurrencyModel - :public OEditBaseModel -{ - ::com::sun::star::uno::Any m_aSaveValue; - -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - DECLARE_DEFAULT_LEAF_XTOR( OCurrencyModel ); - - // ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(OCurrencyModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // ::com::sun::star::io::XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun ::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - -protected: - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - - virtual void resetNoBroadcast(); - -protected: - DECLARE_XCLONEABLE(); - - void implConstruct(); -}; - -//================================================================== -//= OCurrencyControl -//================================================================== -class OCurrencyControl: public OBoundControl -{ -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - OCurrencyControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - // ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(OCurrencyControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FORMS_CURRENCY_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/DatabaseForm.cxx b/forms/source/component/DatabaseForm.cxx deleted file mode 100644 index 7ad4bf53d..000000000 --- a/forms/source/component/DatabaseForm.cxx +++ /dev/null @@ -1,4162 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "componenttools.hxx" -#include "DatabaseForm.hxx" -#include "EventThread.hxx" -#include "frm_module.hxx" -#include "frm_resource.hrc" -#include "frm_resource.hxx" -#include "GroupManager.hxx" -#include "property.hrc" -#include "property.hxx" -#include "services.hxx" - -#include <com/sun/star/awt/XControlContainer.hpp> -#include <com/sun/star/awt/XTextComponent.hpp> -#include <com/sun/star/form/DataSelectionType.hpp> -#include <com/sun/star/form/FormComponentType.hpp> -#include <com/sun/star/form/TabulatorCycle.hpp> -#include <com/sun/star/frame/FrameSearchFlag.hpp> -#include <com/sun/star/frame/XDispatch.hpp> -#include <com/sun/star/frame/XDispatchProvider.hpp> -#include <com/sun/star/frame/XModel.hpp> -#include <com/sun/star/io/XObjectInputStream.hpp> -#include <com/sun/star/io/XObjectOutputStream.hpp> -#include <com/sun/star/sdb/CommandType.hpp> -#include <com/sun/star/sdb/RowSetVetoException.hpp> -#include <com/sun/star/sdb/SQLContext.hpp> -#include <com/sun/star/sdb/XColumnUpdate.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/sdbc/ResultSetConcurrency.hpp> -#include <com/sun/star/sdbc/ResultSetType.hpp> -#include <com/sun/star/sdbc/XRowSet.hpp> -#include <com/sun/star/sdbcx/Privilege.hpp> -#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> -#include <com/sun/star/util/XCancellable.hpp> -#include <com/sun/star/util/XURLTransformer.hpp> -#include <com/sun/star/util/XModifiable2.hpp> - -#include <comphelper/basicio.hxx> -#include <comphelper/container.hxx> -#include <comphelper/enumhelper.hxx> -#include <comphelper/extract.hxx> -#include <comphelper/seqstream.hxx> -#include <comphelper/sequence.hxx> -#include <comphelper/stl_types.hxx> -#include <comphelper/uno3.hxx> -#include <connectivity/dbtools.hxx> -#include <cppuhelper/exc_hlp.hxx> -#include <cppuhelper/implbase2.hxx> -#include <rtl/math.hxx> -#include <rtl/tencinfo.h> -#include <svl/inetstrm.hxx> -#include <svl/inettype.hxx> -#include <tools/debug.hxx> -#include <tools/diagnose_ex.h> -#include <tools/fsys.hxx> -#include <tools/inetmsg.hxx> -#include <tools/urlobj.hxx> -#include <unotools/ucblockbytes.hxx> -#include <unotools/ucbstreamhelper.hxx> -#include <vcl/svapp.hxx> -#include <vcl/timer.hxx> -#include <osl/mutex.hxx> - -#include <ctype.h> -#include <boost/unordered_map.hpp> - -// compatiblity: DatabaseCursorType is dead, but for compatiblity reasons we still have to write it ... -namespace com { -namespace sun { -namespace star { -namespace data { - -enum DatabaseCursorType -{ - DatabaseCursorType_FORWARD = 0, - DatabaseCursorType_SNAPSHOT = 1, - DatabaseCursorType_KEYSET = 2, - DatabaseCursorType_DYNAMIC = 3, - DatabaseCursorType_MAKE_FIXED_SIZE = SAL_MAX_ENUM -}; - -} } } } - -using namespace ::dbtools; -using namespace ::comphelper; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::task; -using namespace ::com::sun::star::frame; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::data; -using namespace ::com::sun::star::util; - -//-------------------------------------------------------------------------- -extern "C" void SAL_CALL createRegistryInfo_ODatabaseForm() -{ - static ::frm::OMultiInstanceAutoRegistration< ::frm::ODatabaseForm > aAutoRegistration; -} - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -//= DocumentModifyGuard -//================================================================== -class DocumentModifyGuard -{ -public: - DocumentModifyGuard( const Reference< XInterface >& _rxFormComponent ) - :m_xDocumentModify( getXModel( _rxFormComponent ), UNO_QUERY ) - { - impl_changeModifiableFlag_nothrow( false ); - } - ~DocumentModifyGuard() - { - impl_changeModifiableFlag_nothrow( true ); - } - -private: - void impl_changeModifiableFlag_nothrow( const bool _enable ) - { - try - { - if ( m_xDocumentModify.is() ) - _enable ? m_xDocumentModify->enableSetModified() : m_xDocumentModify->disableSetModified(); - } - catch(const Exception&) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - -private: - Reference< XModifiable2 > m_xDocumentModify; -}; - -//================================================================== -//= OFormSubmitResetThread -//=----------------------------------------------------------------- -//= submitting and resetting html-forms asynchronously -//================================================================== - -//------------------------------------------------------------------ -class OFormSubmitResetThread: public OComponentEventThread -{ -protected: - - // duplicate an event with respect to it's type - virtual EventObject *cloneEvent( const EventObject *pEvt ) const; - - // process an event. while processing the mutex isn't locked, and pCompImpl - // is made sure to remain valid - virtual void processEvent( ::cppu::OComponentHelper* _pCompImpl, - const EventObject* _pEvt, - const Reference<XControl>& _rControl, - sal_Bool _bSubmit); - -public: - - OFormSubmitResetThread(ODatabaseForm* pControl) : OComponentEventThread(pControl) { } -}; - -//------------------------------------------------------------------ -EventObject* OFormSubmitResetThread::cloneEvent( - const EventObject *pEvt ) const -{ - return new ::com::sun::star::awt::MouseEvent( *(::com::sun::star::awt::MouseEvent *)pEvt ); -} - -//------------------------------------------------------------------ -void OFormSubmitResetThread::processEvent( - ::cppu::OComponentHelper* pCompImpl, - const EventObject *_pEvt, - const Reference<XControl>& _rControl, - sal_Bool _bSubmit) -{ - if (_bSubmit) - ((ODatabaseForm *)pCompImpl)->submit_impl(_rControl, *static_cast<const ::com::sun::star::awt::MouseEvent*>(_pEvt), true); - else - ((ODatabaseForm *)pCompImpl)->reset_impl(true); -} - -//================================================================== -//= ODatabaseForm -//================================================================== - -//------------------------------------------------------------------ -Reference< XInterface > SAL_CALL ODatabaseForm::Create( const Reference< XMultiServiceFactory >& _rxFactory ) -{ - return *( new ODatabaseForm( _rxFactory ) ); -} - -//------------------------------------------------------------------------------ -Sequence<sal_Int8> SAL_CALL ODatabaseForm::getImplementationId() throw(RuntimeException) -{ - return OImplementationIds::getImplementationId(getTypes()); -} - -//------------------------------------------------------------------ -Sequence<Type> SAL_CALL ODatabaseForm::getTypes() throw(RuntimeException) -{ - // ask the aggregate - Sequence<Type> aAggregateTypes; - Reference<XTypeProvider> xAggregateTypes; - if (query_aggregation(m_xAggregate, xAggregateTypes)) - aAggregateTypes = xAggregateTypes->getTypes(); - - Sequence< Type > aRet = concatSequences( - aAggregateTypes, ODatabaseForm_BASE1::getTypes(), OFormComponents::getTypes() - ); - aRet = concatSequences( aRet, ODatabaseForm_BASE2::getTypes(), ODatabaseForm_BASE3::getTypes() ); - return concatSequences( aRet, OPropertySetAggregationHelper::getTypes() ); -} - -//------------------------------------------------------------------ -Any SAL_CALL ODatabaseForm::queryAggregation(const Type& _rType) throw(RuntimeException) -{ - Any aReturn = ODatabaseForm_BASE1::queryInterface(_rType); - // our own interfaces - if (!aReturn.hasValue()) - { - aReturn = ODatabaseForm_BASE2::queryInterface(_rType); - // property set related interfaces - if (!aReturn.hasValue()) - { - aReturn = OPropertySetAggregationHelper::queryInterface(_rType); - - // form component collection related interfaces - if (!aReturn.hasValue()) - { - aReturn = OFormComponents::queryAggregation(_rType); - - // interfaces already present in the aggregate which we want to reroute - // only available if we could create the aggregate - if (!aReturn.hasValue() && m_xAggregateAsRowSet.is()) - aReturn = ODatabaseForm_BASE3::queryInterface(_rType); - - // aggregate interfaces - // (ask the aggregated object _after_ the OComponentHelper (base of OFormComponents), - // so calls to the XComponent interface reach us and not the aggreagtion) - if (!aReturn.hasValue() && m_xAggregate.is()) - aReturn = m_xAggregate->queryAggregation(_rType); - } - } - } - - return aReturn; -} - -DBG_NAME(ODatabaseForm); -//------------------------------------------------------------------ -ODatabaseForm::ODatabaseForm(const Reference<XMultiServiceFactory>& _rxFactory) - :OFormComponents(_rxFactory) - ,OPropertySetAggregationHelper(OComponentHelper::rBHelper) - ,OPropertyChangeListener(m_aMutex) - ,m_aLoadListeners(m_aMutex) - ,m_aRowSetApproveListeners(m_aMutex) - ,m_aRowSetListeners(m_aMutex) - ,m_aSubmitListeners(m_aMutex) - ,m_aErrorListeners(m_aMutex) - ,m_aResetListeners( *this, m_aMutex ) - ,m_aPropertyBagHelper( *this ) - ,m_pAggregatePropertyMultiplexer(NULL) - ,m_pGroupManager( NULL ) - ,m_aParameterManager( m_aMutex, _rxFactory ) - ,m_aFilterManager( _rxFactory ) - ,m_pLoadTimer(NULL) - ,m_pThread(NULL) - ,m_nResetsPending(0) - ,m_nPrivileges(0) - ,m_bInsertOnly( sal_False ) - ,m_eSubmitMethod(FormSubmitMethod_GET) - ,m_eSubmitEncoding(FormSubmitEncoding_URL) - ,m_eNavigation(NavigationBarMode_CURRENT) - ,m_bAllowInsert(sal_True) - ,m_bAllowUpdate(sal_True) - ,m_bAllowDelete(sal_True) - ,m_bLoaded(sal_False) - ,m_bSubForm(sal_False) - ,m_bForwardingConnection(sal_False) - ,m_bSharingConnection( sal_False ) -{ - DBG_CTOR( ODatabaseForm, NULL ); - impl_construct(); -} - -//------------------------------------------------------------------ -ODatabaseForm::ODatabaseForm( const ODatabaseForm& _cloneSource ) - :OFormComponents( _cloneSource ) - ,OPropertySetAggregationHelper( OComponentHelper::rBHelper ) - ,OPropertyChangeListener( m_aMutex ) - ,ODatabaseForm_BASE1() - ,ODatabaseForm_BASE2() - ,ODatabaseForm_BASE3() - ,IPropertyBagHelperContext() - ,m_aLoadListeners( m_aMutex ) - ,m_aRowSetApproveListeners( m_aMutex ) - ,m_aRowSetListeners( m_aMutex ) - ,m_aSubmitListeners( m_aMutex ) - ,m_aErrorListeners( m_aMutex ) - ,m_aResetListeners( *this, m_aMutex ) - ,m_aPropertyBagHelper( *this ) - ,m_pAggregatePropertyMultiplexer( NULL ) - ,m_pGroupManager( NULL ) - ,m_aParameterManager( m_aMutex, _cloneSource.m_xServiceFactory ) - ,m_aFilterManager( _cloneSource.m_xServiceFactory ) - ,m_pLoadTimer( NULL ) - ,m_pThread( NULL ) - ,m_nResetsPending( 0 ) - ,m_nPrivileges( 0 ) - ,m_bInsertOnly( _cloneSource.m_bInsertOnly ) - ,m_aControlBorderColorFocus( _cloneSource.m_aControlBorderColorFocus ) - ,m_aControlBorderColorMouse( _cloneSource.m_aControlBorderColorMouse ) - ,m_aControlBorderColorInvalid( _cloneSource.m_aControlBorderColorInvalid ) - ,m_aDynamicControlBorder( _cloneSource.m_aDynamicControlBorder ) - ,m_sName( _cloneSource.m_sName ) - ,m_aTargetURL( _cloneSource.m_aTargetURL ) - ,m_aTargetFrame( _cloneSource.m_aTargetFrame ) - ,m_eSubmitMethod( _cloneSource.m_eSubmitMethod ) - ,m_eSubmitEncoding( _cloneSource.m_eSubmitEncoding ) - ,m_eNavigation( _cloneSource.m_eNavigation ) - ,m_bAllowInsert( _cloneSource.m_bAllowInsert ) - ,m_bAllowUpdate( _cloneSource.m_bAllowUpdate ) - ,m_bAllowDelete( _cloneSource.m_bAllowDelete ) - ,m_bLoaded( sal_False ) - ,m_bSubForm( sal_False ) - ,m_bForwardingConnection( sal_False ) - ,m_bSharingConnection( sal_False ) -{ - DBG_CTOR( ODatabaseForm, NULL ); - - impl_construct(); - - osl_incrementInterlockedCount( &m_refCount ); - { - // our aggregated rowset itself is not cloneable, so simply copy the properties - ::comphelper::copyProperties( _cloneSource.m_xAggregateSet, m_xAggregateSet ); - - // also care for the dynamic properties: If the clone source has properties which we do not have, - // then add them - try - { - Reference< XPropertySet > xSourceProps( const_cast< ODatabaseForm& >( _cloneSource ).queryAggregation( - XPropertySet::static_type() ), UNO_QUERY_THROW ); - Reference< XPropertySetInfo > xSourcePSI( xSourceProps->getPropertySetInfo(), UNO_SET_THROW ); - Reference< XPropertyState > xSourcePropState( xSourceProps, UNO_QUERY ); - - Reference< XPropertySetInfo > xDestPSI( getPropertySetInfo(), UNO_QUERY_THROW ); - - Sequence< Property > aSourceProperties( xSourcePSI->getProperties() ); - for ( const Property* pSourceProperty = aSourceProperties.getConstArray(); - pSourceProperty != aSourceProperties.getConstArray() + aSourceProperties.getLength(); - ++pSourceProperty - ) - { - if ( xDestPSI->hasPropertyByName( pSourceProperty->Name ) ) - continue; - - // the initial value passed to XPropertyContainer is also used as default, usually. So, try - // to retrieve the default of the source property - Any aInitialValue; - if ( xSourcePropState.is() ) - { - aInitialValue = xSourcePropState->getPropertyDefault( pSourceProperty->Name ); - } - else - { - aInitialValue = xSourceProps->getPropertyValue( pSourceProperty->Name ); - } - addProperty( pSourceProperty->Name, pSourceProperty->Attributes, aInitialValue ); - setPropertyValue( pSourceProperty->Name, xSourceProps->getPropertyValue( pSourceProperty->Name ) ); - } - } - catch(const Exception&) - { - throw WrappedTargetException( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Could not clone the given database form." ) ), - *const_cast< ODatabaseForm* >( &_cloneSource ), - ::cppu::getCaughtException() - ); - } - } - osl_decrementInterlockedCount( &m_refCount ); -} - -//------------------------------------------------------------------ -void ODatabaseForm::impl_construct() -{ - // aggregate a row set - increment(m_refCount); - { - m_xAggregate = Reference< XAggregation >( m_xServiceFactory->createInstance( SRV_SDB_ROWSET ), UNO_QUERY_THROW ); - m_xAggregateAsRowSet.set( m_xAggregate, UNO_QUERY_THROW ); - setAggregation( m_xAggregate ); - } - - // listen for the properties, important for Parameters - if ( m_xAggregateSet.is() ) - { - m_pAggregatePropertyMultiplexer = new OPropertyChangeMultiplexer(this, m_xAggregateSet, sal_False); - m_pAggregatePropertyMultiplexer->acquire(); - m_pAggregatePropertyMultiplexer->addProperty(PROPERTY_COMMAND); - m_pAggregatePropertyMultiplexer->addProperty(PROPERTY_ACTIVE_CONNECTION); - } - - { - Reference< XWarningsSupplier > xRowSetWarnings( m_xAggregate, UNO_QUERY ); - m_aWarnings.setExternalWarnings( xRowSetWarnings ); - } - - if ( m_xAggregate.is() ) - { - m_xAggregate->setDelegator( static_cast< XWeak* >( this ) ); - } - - { - m_aFilterManager.initialize( m_xAggregateSet ); - m_aParameterManager.initialize( this, m_xAggregate ); - - declareForwardedProperty( PROPERTY_ID_ACTIVE_CONNECTION ); - } - decrement( m_refCount ); - - m_pGroupManager = new OGroupManager( this ); - m_pGroupManager->acquire(); -} - -//------------------------------------------------------------------ -ODatabaseForm::~ODatabaseForm() -{ - DBG_DTOR(ODatabaseForm,NULL); - - m_pGroupManager->release(); - m_pGroupManager = NULL; - - if (m_xAggregate.is()) - m_xAggregate->setDelegator( NULL ); - - m_aWarnings.setExternalWarnings( NULL ); - - if (m_pAggregatePropertyMultiplexer) - { - m_pAggregatePropertyMultiplexer->dispose(); - m_pAggregatePropertyMultiplexer->release(); - m_pAggregatePropertyMultiplexer = NULL; - } -} - -//============================================================================== -// html tools -//------------------------------------------------------------------------ -::rtl::OUString ODatabaseForm::GetDataURLEncoded(const Reference<XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt) -{ - return GetDataEncoded(true,SubmitButton,MouseEvt); -} -// ----------------------------------------------------------------------------- -::rtl::OUString ODatabaseForm::GetDataEncoded(bool _bURLEncoded,const Reference<XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt) -{ - // Liste von successful Controls fuellen - HtmlSuccessfulObjList aSuccObjList; - FillSuccessfulList( aSuccObjList, SubmitButton, MouseEvt ); - - - // Liste zu ::rtl::OUString zusammensetzen - ::rtl::OUStringBuffer aResult; - ::rtl::OUString aName; - ::rtl::OUString aValue; - - for ( HtmlSuccessfulObjListIterator pSuccObj = aSuccObjList.begin(); - pSuccObj < aSuccObjList.end(); - ++pSuccObj - ) - { - aName = pSuccObj->aName; - aValue = pSuccObj->aValue; - if( pSuccObj->nRepresentation == SUCCESSFUL_REPRESENT_FILE && aValue.getLength() ) - { - // Bei File-URLs wird der Dateiname und keine URL uebertragen, - // weil Netscape dies so macht. - INetURLObject aURL; - aURL.SetSmartProtocol(INET_PROT_FILE); - aURL.SetSmartURL(aValue); - if( INET_PROT_FILE == aURL.GetProtocol() ) - aValue = INetURLObject::decode(aURL.PathToFileName(), '%', INetURLObject::DECODE_UNAMBIGUOUS); - } - Encode( aName ); - Encode( aValue ); - - aResult.append(aName); - aResult.append(sal_Unicode('=')); - aResult.append(aValue); - - if (pSuccObj < aSuccObjList.end() - 1) - { - if ( _bURLEncoded ) - aResult.append(sal_Unicode('&')); - else - aResult.appendAscii("\r\n"); - } - } - - - aSuccObjList.clear(); - - return aResult.makeStringAndClear(); -} - -//============================================================================== -// html tools -//------------------------------------------------------------------------ -::rtl::OUString ODatabaseForm::GetDataTextEncoded(const Reference<XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt) -{ - return GetDataEncoded(false,SubmitButton,MouseEvt); -} - -//------------------------------------------------------------------------ -Sequence<sal_Int8> ODatabaseForm::GetDataMultiPartEncoded(const Reference<XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt, ::rtl::OUString& rContentType) -{ - - // Parent erzeugen - INetMIMEMessage aParent; - aParent.EnableAttachChild( INETMSG_MULTIPART_FORM_DATA ); - - - // Liste von successful Controls fuellen - HtmlSuccessfulObjList aSuccObjList; - FillSuccessfulList( aSuccObjList, SubmitButton, MouseEvt ); - - - // Liste zu ::rtl::OUString zusammensetzen - ::rtl::OUString aResult; - for ( HtmlSuccessfulObjListIterator pSuccObj = aSuccObjList.begin(); - pSuccObj < aSuccObjList.end(); - ++pSuccObj - ) - { - if( pSuccObj->nRepresentation == SUCCESSFUL_REPRESENT_TEXT ) - InsertTextPart( aParent, pSuccObj->aName, pSuccObj->aValue ); - else if( pSuccObj->nRepresentation == SUCCESSFUL_REPRESENT_FILE ) - InsertFilePart( aParent, pSuccObj->aName, pSuccObj->aValue ); - } - - - // Liste loeschen - aSuccObjList.clear(); - - // Fuer Parent MessageStream erzeugen - INetMIMEMessageStream aMessStream; - aMessStream.SetSourceMessage( &aParent ); - aMessStream.GenerateHeader( sal_False ); - - // MessageStream in SvStream kopieren - SvMemoryStream aMemStream; - char* pBuf = new char[1025]; - int nRead; - while( (nRead = aMessStream.Read(pBuf, 1024)) > 0 ) - aMemStream.Write( pBuf, nRead ); - delete[] pBuf; - - aMemStream.Flush(); - aMemStream.Seek( 0 ); - void* pData = (void*)aMemStream.GetData(); - sal_Int32 nLen = aMemStream.Seek(STREAM_SEEK_TO_END); - - rContentType = UniString(aParent.GetContentType()); - return Sequence<sal_Int8>((sal_Int8*)pData, nLen); -} - -//------------------------------------------------------------------------ -namespace -{ - static void appendDigits( sal_Int32 _nNumber, sal_Int8 nDigits, ::rtl::OUStringBuffer& _rOut ) - { - sal_Int32 nCurLen = _rOut.getLength(); - _rOut.append( _nNumber ); - while ( _rOut.getLength() - nCurLen < nDigits ) - _rOut.insert( nCurLen, (sal_Unicode)'0' ); - } -} - -//------------------------------------------------------------------------ -void ODatabaseForm::AppendComponent(HtmlSuccessfulObjList& rList, const Reference<XPropertySet>& xComponentSet, const ::rtl::OUString& rNamePrefix, - const Reference<XControl>& rxSubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt) -{ - if (!xComponentSet.is()) - return; - - // MIB 25.6.98: Geschachtelte Formulare abfangen ... oder muesste - // man sie submitten? - if (!hasProperty(PROPERTY_CLASSID, xComponentSet)) - return; - - // Namen ermitteln - if (!hasProperty(PROPERTY_NAME, xComponentSet)) - return; - - sal_Int16 nClassId = 0; - xComponentSet->getPropertyValue(PROPERTY_CLASSID) >>= nClassId; - ::rtl::OUString aName; - xComponentSet->getPropertyValue( PROPERTY_NAME ) >>= aName; - if( !aName.getLength() && nClassId != FormComponentType::IMAGEBUTTON) - return; - else // Name um den Prefix erweitern - aName = rNamePrefix + aName; - - switch( nClassId ) - { - // Buttons - case FormComponentType::COMMANDBUTTON: - { - // Es wird nur der gedrueckte Submit-Button ausgewertet - // MIB: Sofern ueberhaupt einer uebergeben wurde - if( rxSubmitButton.is() ) - { - Reference<XPropertySet> xSubmitButtonComponent(rxSubmitButton->getModel(), UNO_QUERY); - if (xSubmitButtonComponent == xComponentSet && hasProperty(PROPERTY_LABEL, xComponentSet)) - { - // <name>=<label> - ::rtl::OUString aLabel; - xComponentSet->getPropertyValue( PROPERTY_LABEL ) >>= aLabel; - rList.push_back( HtmlSuccessfulObj(aName, aLabel) ); - } - } - } break; - - // ImageButtons - case FormComponentType::IMAGEBUTTON: - { - // Es wird nur der gedrueckte Submit-Button ausgewertet - // MIB: Sofern ueberhaupt einer uebergeben wurde - if( rxSubmitButton.is() ) - { - Reference<XPropertySet> xSubmitButtonComponent(rxSubmitButton->getModel(), UNO_QUERY); - if (xSubmitButtonComponent == xComponentSet) - { - // <name>.x=<pos.X>&<name>.y=<pos.Y> - ::rtl::OUString aLhs = aName; - ::rtl::OUString aRhs = ::rtl::OUString::valueOf( MouseEvt.X ); - - // nur wenn ein Name vorhanden ist, kann ein name.x - aLhs += aName.getLength() ? UniString::CreateFromAscii(".x") : UniString::CreateFromAscii("x"); - rList.push_back( HtmlSuccessfulObj(aLhs, aRhs) ); - - aLhs = aName; - aRhs = ::rtl::OUString::valueOf( MouseEvt.Y ); - aLhs += aName.getLength() ? UniString::CreateFromAscii(".y") : UniString::CreateFromAscii("y"); - rList.push_back( HtmlSuccessfulObj(aLhs, aRhs) ); - - } - } - } break; - - // CheckBoxen / RadioButtons - case FormComponentType::CHECKBOX: - case FormComponentType::RADIOBUTTON: - { - // <name>=<refValue> - if( !hasProperty(PROPERTY_STATE, xComponentSet) ) - break; - sal_Int16 nChecked = 0; - xComponentSet->getPropertyValue( PROPERTY_STATE ) >>= nChecked; - if( nChecked != 1 ) - break; - - ::rtl::OUString aStrValue; - if( hasProperty(PROPERTY_REFVALUE, xComponentSet) ) - xComponentSet->getPropertyValue( PROPERTY_REFVALUE ) >>= aStrValue; - - rList.push_back( HtmlSuccessfulObj(aName, aStrValue) ); - } break; - - // Edit - case FormComponentType::TEXTFIELD: - { - // <name>=<text> - if( !hasProperty(PROPERTY_TEXT, xComponentSet) ) - break; - - // MIB: Spezial-Behandlung fuer Multiline-Edit nur dann, wenn - // es auch ein Control dazu gibt. - Any aTmp = xComponentSet->getPropertyValue( PROPERTY_MULTILINE ); - sal_Bool bMulti = rxSubmitButton.is() - && (aTmp.getValueType().getTypeClass() == TypeClass_BOOLEAN) - && getBOOL(aTmp); - ::rtl::OUString sText; - if ( bMulti ) // Bei MultiLineEdit Text am Control abholen - { - - Reference<XControlContainer> xControlContainer(rxSubmitButton->getContext(), UNO_QUERY); - if( !xControlContainer.is() ) break; - - Sequence<Reference<XControl> > aControlSeq = xControlContainer->getControls(); - Reference<XControl> xControl; - Reference<XFormComponent> xControlComponent; - - // Richtiges Control suchen - sal_Int32 i; - for( i=0; i<aControlSeq.getLength(); i++ ) - { - xControl = aControlSeq.getConstArray()[i]; - Reference<XPropertySet> xModel(xControl->getModel(), UNO_QUERY); - if (xModel == xComponentSet) - { - Reference<XTextComponent> xTextComponent(xControl, UNO_QUERY); - if( xTextComponent.is() ) - sText = xTextComponent->getText(); - break; - } - } - // Control nicht gefunden oder nicht existent, (Edit im Grid) - if (i == aControlSeq.getLength()) - xComponentSet->getPropertyValue( PROPERTY_TEXT ) >>= sText; - } - else - xComponentSet->getPropertyValue( PROPERTY_TEXT ) >>= sText; - - rList.push_back( HtmlSuccessfulObj(aName, sText) ); - } break; - - // ComboBox, Patternfield - case FormComponentType::COMBOBOX: - case FormComponentType::PATTERNFIELD: - { - // <name>=<text> - if( hasProperty(PROPERTY_TEXT, xComponentSet) ) - { - ::rtl::OUString aText; - xComponentSet->getPropertyValue( PROPERTY_TEXT ) >>= aText; - rList.push_back( HtmlSuccessfulObj(aName, aText) ); - } - } break; - case FormComponentType::CURRENCYFIELD: - case FormComponentType::NUMERICFIELD: - { - // <name>=<wert> // wert wird als double mit Punkt als Decimaltrenner - // kein Wert angegeben (NULL) -> wert leer - if( hasProperty(PROPERTY_VALUE, xComponentSet) ) - { - ::rtl::OUString aText; - Any aVal = xComponentSet->getPropertyValue( PROPERTY_VALUE ); - - double aDoubleVal = 0; - if (aVal >>= aDoubleVal) - { - sal_Int16 nScale = 0; - xComponentSet->getPropertyValue( PROPERTY_DECIMAL_ACCURACY ) >>= nScale; - aText = ::rtl::math::doubleToUString(aDoubleVal, rtl_math_StringFormat_F, nScale, '.', sal_True); - } - rList.push_back( HtmlSuccessfulObj(aName, aText) ); - } - } break; - case FormComponentType::DATEFIELD: - { - // <name>=<wert> // Wert wird als Datum im Format (MM-DD-YYYY) - // kein Wert angegeben (NULL) -> wert leer - if( hasProperty(PROPERTY_DATE, xComponentSet) ) - { - ::rtl::OUString aText; - Any aVal = xComponentSet->getPropertyValue( PROPERTY_DATE ); - sal_Int32 nInt32Val = 0; - if (aVal >>= nInt32Val) - { - ::Date aDate( nInt32Val ); - ::rtl::OUStringBuffer aBuffer; - appendDigits( aDate.GetMonth(), 2, aBuffer ); - aBuffer.append( (sal_Unicode)'-' ); - appendDigits( aDate.GetDay(), 2, aBuffer ); - aBuffer.append( (sal_Unicode)'-' ); - appendDigits( aDate.GetYear(), 4, aBuffer ); - aText = aBuffer.makeStringAndClear(); - } - rList.push_back( HtmlSuccessfulObj(aName, aText) ); - } - } break; - case FormComponentType::TIMEFIELD: - { - // <name>=<wert> // Wert wird als Zeit im Format (HH:MM:SS) angegeben - // kein Wert angegeben (NULL) -> wert leer - if( hasProperty(PROPERTY_TIME, xComponentSet) ) - { - ::rtl::OUString aText; - Any aVal = xComponentSet->getPropertyValue( PROPERTY_TIME ); - sal_Int32 nInt32Val = 0; - if (aVal >>= nInt32Val) - { - ::Time aTime(nInt32Val); - ::rtl::OUStringBuffer aBuffer; - appendDigits( aTime.GetHour(), 2, aBuffer ); - aBuffer.append( (sal_Unicode)'-' ); - appendDigits( aTime.GetMin(), 2, aBuffer ); - aBuffer.append( (sal_Unicode)'-' ); - appendDigits( aTime.GetSec(), 2, aBuffer ); - aText = aBuffer.makeStringAndClear(); - } - rList.push_back( HtmlSuccessfulObj(aName, aText) ); - } - } break; - - // starform - case FormComponentType::HIDDENCONTROL: - { - - // <name>=<value> - if( hasProperty(PROPERTY_HIDDEN_VALUE, xComponentSet) ) - { - ::rtl::OUString aText; - xComponentSet->getPropertyValue( PROPERTY_HIDDEN_VALUE ) >>= aText; - rList.push_back( HtmlSuccessfulObj(aName, aText) ); - } - } break; - - // starform - case FormComponentType::FILECONTROL: - { - // <name>=<text> - if( hasProperty(PROPERTY_TEXT, xComponentSet) ) - { - - ::rtl::OUString aText; - xComponentSet->getPropertyValue( PROPERTY_TEXT ) >>= aText; - rList.push_back( HtmlSuccessfulObj(aName, aText, SUCCESSFUL_REPRESENT_FILE) ); - } - } break; - - // starform - case FormComponentType::LISTBOX: - { - - // <name>=<Token0>&<name>=<Token1>&...&<name>=<TokenN> (Mehrfachselektion) - if (!hasProperty(PROPERTY_SELECT_SEQ, xComponentSet) || - !hasProperty(PROPERTY_STRINGITEMLIST, xComponentSet)) - break; - - // angezeigte Werte - Sequence< ::rtl::OUString > aVisibleList; - xComponentSet->getPropertyValue( PROPERTY_STRINGITEMLIST ) >>= aVisibleList; - sal_Int32 nStringCnt = aVisibleList.getLength(); - const ::rtl::OUString* pStrings = aVisibleList.getConstArray(); - - // Werte-Liste - Sequence< ::rtl::OUString > aValueList; - xComponentSet->getPropertyValue( PROPERTY_VALUE_SEQ ) >>= aValueList; - sal_Int32 nValCnt = aValueList.getLength(); - const ::rtl::OUString* pVals = aValueList.getConstArray(); - - // Selektion - Sequence<sal_Int16> aSelectList; - xComponentSet->getPropertyValue( PROPERTY_SELECT_SEQ ) >>= aSelectList; - sal_Int32 nSelCount = aSelectList.getLength(); - const sal_Int16* pSels = aSelectList.getConstArray(); - - // Einfach- oder Mehrfach-Selektion - // Bei Einfach-Selektionen beruecksichtigt MT nur den ersten Eintrag - // in der Liste. - if (nSelCount > 1 && !getBOOL(xComponentSet->getPropertyValue(PROPERTY_MULTISELECTION))) - nSelCount = 1; - - // Die Indizes in der Selektions-Liste koennen auch ungueltig sein, - // also muss man die gueltigen erstmal raussuchen um die Laenge - // der neuen Liste zu bestimmen. - sal_Int32 nCurCnt = 0; - sal_Int32 i; - for( i=0; i<nSelCount; ++i ) - { - if( pSels[i] < nStringCnt ) - ++nCurCnt; - } - - ::rtl::OUString aSubValue; - for(i=0; i<nCurCnt; ++i ) - { - sal_Int16 nSelPos = pSels[i]; - if (nSelPos < nValCnt && pVals[nSelPos].getLength()) - { - aSubValue = pVals[nSelPos]; - } - else - { - aSubValue = pStrings[nSelPos]; - } - rList.push_back( HtmlSuccessfulObj(aName, aSubValue) ); - } - } break; - case FormComponentType::GRIDCONTROL: - { - // Die einzelnen Spaltenwerte werden verschickt, - // der Name wird mit dem Prefix des Names des Grids erweitert - Reference<XIndexAccess> xContainer(xComponentSet, UNO_QUERY); - if (!xContainer.is()) - break; - - aName += UniString('.'); - - Reference<XPropertySet> xSet; - sal_Int32 nCount = xContainer->getCount(); - // we know already how many objects should be appended, - // so why not allocate the space for them - rList.reserve( nCount + rList.capacity() ); // not size() - for (sal_Int32 i = 0; i < nCount; ++i) - { - xContainer->getByIndex(i) >>= xSet; - if (xSet.is()) - AppendComponent(rList, xSet, aName, rxSubmitButton, MouseEvt); - } - } - } -} - -//------------------------------------------------------------------------ -void ODatabaseForm::FillSuccessfulList( HtmlSuccessfulObjList& rList, - const Reference<XControl>& rxSubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt ) -{ - // Liste loeschen - rList.clear(); - // Ueber Components iterieren - Reference<XPropertySet> xComponentSet; - ::rtl::OUString aPrefix; - - // we know already how many objects should be appended, - // so why not allocate the space for them - rList.reserve( getCount() ); - for( sal_Int32 nIndex=0; nIndex < getCount(); nIndex++ ) - { - getByIndex( nIndex ) >>= xComponentSet; - AppendComponent(rList, xComponentSet, aPrefix, rxSubmitButton, MouseEvt); - } -} - -//------------------------------------------------------------------------ -void ODatabaseForm::Encode( ::rtl::OUString& rString ) const -{ - ::rtl::OUString aResult; - - // Immer ANSI #58641 -// rString.Convert(CHARSET_SYSTEM, CHARSET_ANSI); - - - // Zeilenendezeichen werden als CR dargestellt - UniString sConverter = rString; - sConverter.ConvertLineEnd( LINEEND_CR ); - rString = sConverter; - - - // Jeden einzelnen Character ueberpruefen - sal_Int32 nStrLen = rString.getLength(); - sal_Unicode nCharCode; - for( sal_Int32 nCurPos=0; nCurPos < nStrLen; ++nCurPos ) - { - nCharCode = rString[nCurPos]; - - // Behandlung fuer chars, die kein alphanumerisches Zeichen sind - // und CharacterCodes > 127 - if( (!isalnum(nCharCode) && nCharCode != (sal_Unicode)' ') || nCharCode > 127 ) - { - switch( nCharCode ) - { - case 13: // CR - aResult += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%0D%0A") ); // Hex-Darstellung CR LF - break; - - - // Netscape Sonderbehandlung - case 42: // '*' - case 45: // '-' - case 46: // '.' - case 64: // '@' - case 95: // '_' - aResult += UniString(nCharCode); - break; - - default: - { - // In Hex umrechnen - short nHi = ((sal_Int16)nCharCode) / 16; - short nLo = ((sal_Int16)nCharCode) - (nHi*16); - if( nHi > 9 ) nHi += (int)'A'-10; else nHi += (int)'0'; - if( nLo > 9 ) nLo += (int)'A'-10; else nLo += (int)'0'; - aResult += UniString('%'); - aResult += UniString((sal_Unicode)nHi); - aResult += UniString((sal_Unicode)nLo); - } - } - } - else - aResult += UniString(nCharCode); - } - - - // Spaces durch '+' ersetzen - aResult = aResult.replace(' ', '+'); - - rString = aResult; -} - -//------------------------------------------------------------------------ -void ODatabaseForm::InsertTextPart( INetMIMEMessage& rParent, const ::rtl::OUString& rName, - const ::rtl::OUString& rData ) -{ - - // Part als Message-Child erzeugen - INetMIMEMessage* pChild = new INetMIMEMessage(); - - - // Header - ::rtl::OUString aContentDisp (RTL_CONSTASCII_USTRINGPARAM("form-data; name=\"") ); - aContentDisp += rName; - aContentDisp += UniString('\"'); - pChild->SetContentDisposition( aContentDisp ); - pChild->SetContentType( UniString::CreateFromAscii("text/plain") ); - - rtl_TextEncoding eSystemEncoding = gsl_getSystemTextEncoding(); - const sal_Char* pBestMatchingEncoding = rtl_getBestMimeCharsetFromTextEncoding( eSystemEncoding ); - UniString aBestMatchingEncoding = UniString::CreateFromAscii( pBestMatchingEncoding ); - pChild->SetContentTransferEncoding(aBestMatchingEncoding); - - // Body - SvMemoryStream* pStream = new SvMemoryStream; - pStream->WriteLine( ByteString( UniString(rData), rtl_getTextEncodingFromMimeCharset(pBestMatchingEncoding) ) ); - pStream->Flush(); - pStream->Seek( 0 ); - pChild->SetDocumentLB( new SvLockBytes(pStream, sal_True) ); - rParent.AttachChild( *pChild ); -} - -//------------------------------------------------------------------------ -sal_Bool ODatabaseForm::InsertFilePart( INetMIMEMessage& rParent, const ::rtl::OUString& rName, - const ::rtl::OUString& rFileName ) -{ - UniString aFileName( rFileName ); - UniString aContentType(UniString::CreateFromAscii(CONTENT_TYPE_STR_TEXT_PLAIN)); - SvStream *pStream = 0; - - if( aFileName.Len() ) - { - // Bisher koennen wir nur File-URLs verarbeiten - INetURLObject aURL; - aURL.SetSmartProtocol(INET_PROT_FILE); - aURL.SetSmartURL(rFileName); - if( INET_PROT_FILE == aURL.GetProtocol() ) - { - aFileName = INetURLObject::decode(aURL.PathToFileName(), '%', INetURLObject::DECODE_UNAMBIGUOUS); - DirEntry aDirEntry( aFileName ); - if( aDirEntry.Exists() ) - { - pStream = ::utl::UcbStreamHelper::CreateStream(aFileName, STREAM_READ); - if (!pStream || (pStream->GetError() != ERRCODE_NONE)) - { - delete pStream; - pStream = 0; - } - } - INetContentType eContentType = INetContentTypes::GetContentType4Extension( - aDirEntry.GetExtension() ); - if (eContentType != CONTENT_TYPE_UNKNOWN) - aContentType = INetContentTypes::GetContentType(eContentType); - } - } - - // Wenn irgendetwas nicht geklappt hat, legen wir einen leeren - // MemoryStream an - if( !pStream ) - pStream = new SvMemoryStream; - - - // Part als Message-Child erzeugen - INetMIMEMessage* pChild = new INetMIMEMessage; - - - // Header - ::rtl::OUString aContentDisp (RTL_CONSTASCII_USTRINGPARAM( "form-data; name=\"") ); - aContentDisp += rName; - aContentDisp += UniString('\"'); - aContentDisp += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("; filename=\"") ); - aContentDisp += aFileName; - aContentDisp += UniString('\"'); - pChild->SetContentDisposition( aContentDisp ); - pChild->SetContentType( aContentType ); - pChild->SetContentTransferEncoding( UniString(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("8bit") ) ) ); - - - // Body - pChild->SetDocumentLB( new SvLockBytes(pStream, sal_True) ); - rParent.AttachChild( *pChild ); - - return sal_True; -} - -//============================================================================== -// internals -//------------------------------------------------------------------------------ -void ODatabaseForm::onError( const SQLErrorEvent& _rEvent ) -{ - m_aErrorListeners.notifyEach( &XSQLErrorListener::errorOccured, _rEvent ); -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::onError( const SQLException& _rException, const ::rtl::OUString& _rContextDescription ) -{ - if ( !m_aErrorListeners.getLength() ) - return; - - SQLErrorEvent aEvent( *this, makeAny( prependErrorInfo( _rException, *this, _rContextDescription ) ) ); - onError( aEvent ); -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::updateParameterInfo() -{ - m_aParameterManager.updateParameterInfo( m_aFilterManager ); -} - -//------------------------------------------------------------------------------ -bool ODatabaseForm::hasValidParent() const -{ - // do we have to fill the parameters again? - if (m_bSubForm) - { - Reference<XResultSet> xResultSet(m_xParent, UNO_QUERY); - if (!xResultSet.is()) - { - OSL_FAIL("ODatabaseForm::hasValidParent() : no parent resultset !"); - return false; - } - try - { - Reference< XPropertySet > xSet( m_xParent, UNO_QUERY ); - Reference< XLoadable > xLoad( m_xParent, UNO_QUERY ); - if ( xLoad->isLoaded() - && ( xResultSet->isBeforeFirst() - || xResultSet->isAfterLast() - || getBOOL( xSet->getPropertyValue( PROPERTY_ISNEW ) ) - ) - ) - // the parent form is loaded and on a "virtual" row -> not valid - return false; - } - catch(const Exception&) - { - // parent could be forwardonly? - return false; - } - } - return true; -} - -//------------------------------------------------------------------------------ -bool ODatabaseForm::fillParameters( ::osl::ResettableMutexGuard& _rClearForNotifies, const Reference< XInteractionHandler >& _rxCompletionHandler ) -{ - // do we have to fill the parameters again? - if ( !m_aParameterManager.isUpToDate() ) - updateParameterInfo(); - - // is there a valid parent? - if ( m_bSubForm && !hasValidParent() ) - return true; - - // ensure we're connected - if ( !implEnsureConnection() ) - return false; - - if ( m_aParameterManager.isUpToDate() ) - return m_aParameterManager.fillParameterValues( _rxCompletionHandler, _rClearForNotifies ); - - return true; -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::saveInsertOnlyState( ) -{ - OSL_ENSURE( !m_aIgnoreResult.hasValue(), "ODatabaseForm::saveInsertOnlyState: overriding old value!" ); - m_aIgnoreResult = m_xAggregateSet->getPropertyValue( PROPERTY_INSERTONLY ); -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::restoreInsertOnlyState( ) -{ - if ( m_aIgnoreResult.hasValue() ) - { - m_xAggregateSet->setPropertyValue( PROPERTY_INSERTONLY, m_aIgnoreResult ); - m_aIgnoreResult = Any(); - } -} - -//------------------------------------------------------------------------------ -sal_Bool ODatabaseForm::executeRowSet(::osl::ResettableMutexGuard& _rClearForNotifies, sal_Bool bMoveToFirst, const Reference< XInteractionHandler >& _rxCompletionHandler) -{ - if (!m_xAggregateAsRowSet.is()) - return sal_False; - - if (!fillParameters(_rClearForNotifies, _rxCompletionHandler)) - return sal_False; - - restoreInsertOnlyState( ); - - // ensure the aggregated row set has the correct properties - sal_Int32 nConcurrency = ResultSetConcurrency::READ_ONLY; - - // if we have a parent, who is not positioned on a valid row - // we can't be updatable! - if (m_bSubForm && !hasValidParent()) - { - nConcurrency = ResultSetConcurrency::READ_ONLY; - - // don't use any parameters if we don't have a valid parent - m_aParameterManager.setAllParametersNull(); - - // switch to "insert only" mode - saveInsertOnlyState( ); - m_xAggregateSet->setPropertyValue( PROPERTY_INSERTONLY, makeAny( sal_True ) ); - } - else if (m_bAllowInsert || m_bAllowUpdate || m_bAllowDelete) - nConcurrency = ResultSetConcurrency::UPDATABLE; - else - nConcurrency = ResultSetConcurrency::READ_ONLY; - - m_xAggregateSet->setPropertyValue( PROPERTY_RESULTSET_CONCURRENCY, makeAny( (sal_Int32)nConcurrency ) ); - m_xAggregateSet->setPropertyValue( PROPERTY_RESULTSET_TYPE, makeAny( (sal_Int32)ResultSetType::SCROLL_SENSITIVE ) ); - - sal_Bool bSuccess = sal_False; - try - { - m_xAggregateAsRowSet->execute(); - bSuccess = sal_True; - } - catch(const RowSetVetoException&) - { - } - catch(const SQLException& eDb) - { - _rClearForNotifies.clear(); - if (m_sCurrentErrorContext.getLength()) - onError(eDb, m_sCurrentErrorContext); - else - onError(eDb, FRM_RES_STRING(RID_STR_READERROR)); - _rClearForNotifies.reset(); - - restoreInsertOnlyState( ); - } - - if (bSuccess) - { - // adjust the privilege property - // m_nPrivileges; - m_xAggregateSet->getPropertyValue(PROPERTY_PRIVILEGES) >>= m_nPrivileges; - if (!m_bAllowInsert) - m_nPrivileges &= ~Privilege::INSERT; - if (!m_bAllowUpdate) - m_nPrivileges &= ~Privilege::UPDATE; - if (!m_bAllowDelete) - m_nPrivileges &= ~Privilege::DELETE; - - if (bMoveToFirst) - { - // the row set is positioned _before_ the first row (per definitionem), so move the set ... - try - { - // if we have an insert only rowset we move to the insert row - next(); - if (((m_nPrivileges & Privilege::INSERT) == Privilege::INSERT) - && isAfterLast()) - { - // move on the insert row of set - // resetting must be done later, after the load events have been posted - // see :moveToInsertRow and load , reload - Reference<XResultSetUpdate> xUpdate; - if (query_aggregation( m_xAggregate, xUpdate)) - xUpdate->moveToInsertRow(); - } - } - catch(const SQLException& eDB) - { - _rClearForNotifies.clear(); - if (m_sCurrentErrorContext.getLength()) - onError(eDB, m_sCurrentErrorContext); - else - onError(eDB, FRM_RES_STRING(RID_STR_READERROR)); - _rClearForNotifies.reset(); - bSuccess = sal_False; - } - } - } - return bSuccess; -} - -//------------------------------------------------------------------ -void ODatabaseForm::disposing() -{ - if (m_pAggregatePropertyMultiplexer) - m_pAggregatePropertyMultiplexer->dispose(); - - if (m_bLoaded) - unload(); - - // cancel the submit/reset-thread - { - ::osl::MutexGuard aGuard( m_aMutex ); - if (m_pThread) - { - m_pThread->release(); - m_pThread = NULL; - } - } - - EventObject aEvt(static_cast<XWeak*>(this)); - m_aLoadListeners.disposeAndClear(aEvt); - m_aRowSetApproveListeners.disposeAndClear(aEvt); - m_aParameterManager.disposing( aEvt ); - m_aResetListeners.disposing(); - m_aSubmitListeners.disposeAndClear(aEvt); - m_aErrorListeners.disposeAndClear(aEvt); - - m_aParameterManager.dispose(); // (to free any references it may have to me) - m_aFilterManager.dispose(); // (dito) - - OFormComponents::disposing(); - OPropertySetAggregationHelper::disposing(); - - // stop listening on the aggregate - if (m_xAggregateAsRowSet.is()) - m_xAggregateAsRowSet->removeRowSetListener(this); - - // dispose the active connection - Reference<XComponent> xAggregationComponent; - if (query_aggregation(m_xAggregate, xAggregationComponent)) - xAggregationComponent->dispose(); - - m_aPropertyBagHelper.dispose(); -} - -//------------------------------------------------------------------------------ -Reference< XConnection > ODatabaseForm::getConnection() -{ - Reference< XConnection > xConn; - m_xAggregateSet->getPropertyValue( PROPERTY_ACTIVE_CONNECTION ) >>= xConn; - return xConn; -} - -//------------------------------------------------------------------------------ -::osl::Mutex& ODatabaseForm::getMutex() -{ - return m_aMutex; -} - -//============================================================================== -// property handling -//------------------------------------------------------------------------------ -void ODatabaseForm::describeFixedAndAggregateProperties( - Sequence< Property >& _rProps, - Sequence< Property >& _rAggregateProps ) const -{ - BEGIN_DESCRIBE_AGGREGATION_PROPERTIES(22, m_xAggregateSet) - // we want to "override" the privileges, since we have additional "AllowInsert" etc. properties - RemoveProperty( _rAggregateProps, PROPERTY_PRIVILEGES ); - - // InsertOnly is also to be overridden, since we sometimes change it ourself - RemoveProperty( _rAggregateProps, PROPERTY_INSERTONLY ); - - // we remove and re-declare the DataSourceName property, 'cause we want it to be constrained, and the - // original property of our aggregate isn't - RemoveProperty( _rAggregateProps, PROPERTY_DATASOURCE ); - - // for connection sharing, we need to override the ActiveConnection property, too - RemoveProperty( _rAggregateProps, PROPERTY_ACTIVE_CONNECTION ); - - // the Filter property is also overwritten, since we have some implicit filters - // (e.g. the ones which result from linking master fields to detail fields - // via column names instead of parameters) - RemoveProperty( _rAggregateProps, PROPERTY_FILTER ); - RemoveProperty( _rAggregateProps, PROPERTY_APPLYFILTER ); - - DECL_IFACE_PROP4(ACTIVE_CONNECTION, XConnection, BOUND, TRANSIENT, MAYBEVOID, CONSTRAINED); - DECL_BOOL_PROP2 ( APPLYFILTER, BOUND, MAYBEDEFAULT ); - DECL_PROP1 ( NAME, ::rtl::OUString, BOUND ); - DECL_PROP1 ( MASTERFIELDS, Sequence< ::rtl::OUString >, BOUND ); - DECL_PROP1 ( DETAILFIELDS, Sequence< ::rtl::OUString >, BOUND ); - DECL_PROP2 ( DATASOURCE, ::rtl::OUString, BOUND, CONSTRAINED ); - DECL_PROP3 ( CYCLE, TabulatorCycle, BOUND, MAYBEVOID, MAYBEDEFAULT ); - DECL_PROP2 ( FILTER, ::rtl::OUString, BOUND, MAYBEDEFAULT ); - DECL_BOOL_PROP2 ( INSERTONLY, BOUND, MAYBEDEFAULT ); - DECL_PROP1 ( NAVIGATION, NavigationBarMode, BOUND ); - DECL_BOOL_PROP1 ( ALLOWADDITIONS, BOUND ); - DECL_BOOL_PROP1 ( ALLOWEDITS, BOUND ); - DECL_BOOL_PROP1 ( ALLOWDELETIONS, BOUND ); - DECL_PROP2 ( PRIVILEGES, sal_Int32, TRANSIENT, READONLY ); - DECL_PROP1 ( TARGET_URL, ::rtl::OUString, BOUND ); - DECL_PROP1 ( TARGET_FRAME, ::rtl::OUString, BOUND ); - DECL_PROP1 ( SUBMIT_METHOD, FormSubmitMethod, BOUND ); - DECL_PROP1 ( SUBMIT_ENCODING, FormSubmitEncoding, BOUND ); - DECL_BOOL_PROP3 ( DYNAMIC_CONTROL_BORDER, BOUND, MAYBEVOID, MAYBEDEFAULT ); - DECL_PROP3 ( CONTROL_BORDER_COLOR_FOCUS, sal_Int32, BOUND, MAYBEVOID, MAYBEDEFAULT ); - DECL_PROP3 ( CONTROL_BORDER_COLOR_MOUSE, sal_Int32, BOUND, MAYBEVOID, MAYBEDEFAULT ); - DECL_PROP3 ( CONTROL_BORDER_COLOR_INVALID, sal_Int32, BOUND, MAYBEVOID, MAYBEDEFAULT ); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -Reference< XMultiPropertySet > ODatabaseForm::getPropertiesInterface() -{ - return Reference< XMultiPropertySet >( *this, UNO_QUERY ); -} - -//------------------------------------------------------------------------------ -::cppu::IPropertyArrayHelper& ODatabaseForm::getInfoHelper() -{ - return m_aPropertyBagHelper.getInfoHelper(); -} - -//------------------------------------------------------------------------------ -Reference< XPropertySetInfo > ODatabaseForm::getPropertySetInfo() throw( RuntimeException ) -{ - return createPropertySetInfo( getInfoHelper() ); -} - -//-------------------------------------------------------------------- -void SAL_CALL ODatabaseForm::addProperty( const ::rtl::OUString& _rName, ::sal_Int16 _nAttributes, const Any& _rInitialValue ) throw (PropertyExistException, IllegalTypeException, IllegalArgumentException, RuntimeException) -{ - m_aPropertyBagHelper.addProperty( _rName, _nAttributes, _rInitialValue ); -} - -//-------------------------------------------------------------------- -void SAL_CALL ODatabaseForm::removeProperty( const ::rtl::OUString& _rName ) throw (UnknownPropertyException, NotRemoveableException, RuntimeException) -{ - m_aPropertyBagHelper.removeProperty( _rName ); -} - -//-------------------------------------------------------------------- -Sequence< PropertyValue > SAL_CALL ODatabaseForm::getPropertyValues() throw (RuntimeException) -{ - return m_aPropertyBagHelper.getPropertyValues(); -} - -//-------------------------------------------------------------------- -void SAL_CALL ODatabaseForm::setPropertyValues( const Sequence< PropertyValue >& _rProps ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) -{ - m_aPropertyBagHelper.setPropertyValues( _rProps ); -} - -//------------------------------------------------------------------------------ -Any SAL_CALL ODatabaseForm::getWarnings( ) throw (SQLException, RuntimeException) -{ - return m_aWarnings.getWarnings(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::clearWarnings( ) throw (SQLException, RuntimeException) -{ - m_aWarnings.clearWarnings(); -} - -//------------------------------------------------------------------------------ -Reference< XCloneable > SAL_CALL ODatabaseForm::createClone( ) throw (RuntimeException) -{ - ODatabaseForm* pClone = new ODatabaseForm( *this ); - osl_incrementInterlockedCount( &pClone->m_refCount ); - pClone->clonedFrom( *this ); - osl_decrementInterlockedCount( &pClone->m_refCount ); - return pClone; -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::fire( sal_Int32* pnHandles, const Any* pNewValues, const Any* pOldValues, sal_Int32 nCount, sal_Bool bVetoable ) -{ - // same as in getFastPropertyValue(sal_Int32) : if we're resetting currently don't fire any changes of the - // IsModified property from sal_False to sal_True, as this is only temporary 'til the reset is done - if (m_nResetsPending > 0) - { - // look for the PROPERTY_ID_ISMODIFIED - sal_Int32 nPos = 0; - for (nPos=0; nPos<nCount; ++nPos) - if (pnHandles[nPos] == PROPERTY_ID_ISMODIFIED) - break; - - if ((nPos < nCount) && (pNewValues[nPos].getValueType().getTypeClass() == TypeClass_BOOLEAN) && getBOOL(pNewValues[nPos])) - { // yeah, we found it, and it changed to TRUE - if (nPos == 0) - { // just cut the first element - ++pnHandles; - ++pNewValues; - ++pOldValues; - --nCount; - } - else if (nPos == nCount - 1) - // just cut the last element - --nCount; - else - { // split into two base class calls - OPropertySetAggregationHelper::fire(pnHandles, pNewValues, pOldValues, nPos, bVetoable); - ++nPos; - OPropertySetAggregationHelper::fire(pnHandles + nPos, pNewValues + nPos, pOldValues + nPos, nCount - nPos, bVetoable); - return; - } - } - } - - OPropertySetAggregationHelper::fire(pnHandles, pNewValues, pOldValues, nCount, bVetoable); -} - -//------------------------------------------------------------------------------ -Any SAL_CALL ODatabaseForm::getFastPropertyValue( sal_Int32 nHandle ) - throw(UnknownPropertyException, WrappedTargetException, RuntimeException) -{ - if ((nHandle == PROPERTY_ID_ISMODIFIED) && (m_nResetsPending > 0)) - return ::cppu::bool2any((sal_False)); - // don't allow the aggregate which is currently being reset to return a (temporary) "yes" - else - return OPropertySetAggregationHelper::getFastPropertyValue(nHandle); -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) const -{ - switch (nHandle) - { - case PROPERTY_ID_INSERTONLY: - rValue <<= m_bInsertOnly; - break; - - case PROPERTY_ID_FILTER: - rValue <<= m_aFilterManager.getFilterComponent( FilterManager::fcPublicFilter ); - break; - - case PROPERTY_ID_APPLYFILTER: - rValue <<= m_aFilterManager.isApplyPublicFilter(); - break; - - case PROPERTY_ID_DATASOURCE: - rValue = m_xAggregateSet->getPropertyValue( PROPERTY_DATASOURCE ); - break; - - case PROPERTY_ID_TARGET_URL: - rValue <<= m_aTargetURL; - break; - case PROPERTY_ID_TARGET_FRAME: - rValue <<= m_aTargetFrame; - break; - case PROPERTY_ID_SUBMIT_METHOD: - rValue <<= m_eSubmitMethod; - break; - case PROPERTY_ID_SUBMIT_ENCODING: - rValue <<= m_eSubmitEncoding; - break; - case PROPERTY_ID_NAME: - rValue <<= m_sName; - break; - case PROPERTY_ID_MASTERFIELDS: - rValue <<= m_aMasterFields; - break; - case PROPERTY_ID_DETAILFIELDS: - rValue <<= m_aDetailFields; - break; - case PROPERTY_ID_CYCLE: - rValue = m_aCycle; - break; - case PROPERTY_ID_NAVIGATION: - rValue <<= m_eNavigation; - break; - case PROPERTY_ID_ALLOWADDITIONS: - rValue <<= (sal_Bool)m_bAllowInsert; - break; - case PROPERTY_ID_ALLOWEDITS: - rValue <<= (sal_Bool)m_bAllowUpdate; - break; - case PROPERTY_ID_ALLOWDELETIONS: - rValue <<= (sal_Bool)m_bAllowDelete; - break; - case PROPERTY_ID_PRIVILEGES: - rValue <<= (sal_Int32)m_nPrivileges; - break; - case PROPERTY_ID_DYNAMIC_CONTROL_BORDER: - rValue = m_aDynamicControlBorder; - break; - case PROPERTY_ID_CONTROL_BORDER_COLOR_FOCUS: - rValue = m_aControlBorderColorFocus; - break; - case PROPERTY_ID_CONTROL_BORDER_COLOR_MOUSE: - rValue = m_aControlBorderColorMouse; - break; - case PROPERTY_ID_CONTROL_BORDER_COLOR_INVALID: - rValue = m_aControlBorderColorInvalid; - break; - default: - if ( m_aPropertyBagHelper.hasDynamicPropertyByHandle( nHandle ) ) - m_aPropertyBagHelper.getDynamicFastPropertyValue( nHandle, rValue ); - else - OPropertySetAggregationHelper::getFastPropertyValue( rValue, nHandle ); - break; - } -} - -//------------------------------------------------------------------------------ -sal_Bool ODatabaseForm::convertFastPropertyValue( Any& rConvertedValue, Any& rOldValue, - sal_Int32 nHandle, const Any& rValue ) throw( IllegalArgumentException ) -{ - sal_Bool bModified(sal_False); - switch (nHandle) - { - case PROPERTY_ID_INSERTONLY: - bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_bInsertOnly ); - break; - - case PROPERTY_ID_FILTER: - bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_aFilterManager.getFilterComponent( FilterManager::fcPublicFilter ) ); - break; - - case PROPERTY_ID_APPLYFILTER: - bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_aFilterManager.isApplyPublicFilter() ); - break; - - case PROPERTY_ID_DATASOURCE: - { - Any aAggregateProperty; - getFastPropertyValue(aAggregateProperty, PROPERTY_ID_DATASOURCE); - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, aAggregateProperty, ::getCppuType(static_cast<const ::rtl::OUString*>(NULL))); - } - break; - case PROPERTY_ID_TARGET_URL: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aTargetURL); - break; - case PROPERTY_ID_TARGET_FRAME: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aTargetFrame); - break; - case PROPERTY_ID_SUBMIT_METHOD: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_eSubmitMethod); - break; - case PROPERTY_ID_SUBMIT_ENCODING: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_eSubmitEncoding); - break; - case PROPERTY_ID_NAME: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_sName); - break; - case PROPERTY_ID_MASTERFIELDS: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aMasterFields); - break; - case PROPERTY_ID_DETAILFIELDS: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aDetailFields); - break; - case PROPERTY_ID_CYCLE: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aCycle, ::getCppuType(static_cast<const TabulatorCycle*>(NULL))); - break; - case PROPERTY_ID_NAVIGATION: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_eNavigation); - break; - case PROPERTY_ID_ALLOWADDITIONS: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bAllowInsert); - break; - case PROPERTY_ID_ALLOWEDITS: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bAllowUpdate); - break; - case PROPERTY_ID_ALLOWDELETIONS: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bAllowDelete); - break; - case PROPERTY_ID_DYNAMIC_CONTROL_BORDER: - bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_aDynamicControlBorder, ::getBooleanCppuType() ); - break; - case PROPERTY_ID_CONTROL_BORDER_COLOR_FOCUS: - bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_aControlBorderColorFocus, getCppuType( static_cast< sal_Int32* >( NULL ) ) ); - break; - case PROPERTY_ID_CONTROL_BORDER_COLOR_MOUSE: - bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_aControlBorderColorMouse, getCppuType( static_cast< sal_Int32* >( NULL ) ) ); - break; - case PROPERTY_ID_CONTROL_BORDER_COLOR_INVALID: - bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_aControlBorderColorInvalid, getCppuType( static_cast< sal_Int32* >( NULL ) ) ); - break; - default: - if ( m_aPropertyBagHelper.hasDynamicPropertyByHandle ( nHandle ) ) - bModified = m_aPropertyBagHelper.convertDynamicFastPropertyValue( nHandle, rValue, rConvertedValue, rOldValue ); - else - bModified = OPropertySetAggregationHelper::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue ); - break; - } - return bModified; -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw( Exception ) -{ - switch (nHandle) - { - case PROPERTY_ID_INSERTONLY: - rValue >>= m_bInsertOnly; - if ( m_aIgnoreResult.hasValue() ) - m_aIgnoreResult <<= m_bInsertOnly; - else - m_xAggregateSet->setPropertyValue( PROPERTY_INSERTONLY, makeAny( m_bInsertOnly ) ); - break; - - case PROPERTY_ID_FILTER: - { - ::rtl::OUString sNewFilter; - rValue >>= sNewFilter; - m_aFilterManager.setFilterComponent( FilterManager::fcPublicFilter, sNewFilter ); - } - break; - - case PROPERTY_ID_APPLYFILTER: - { - sal_Bool bApply = sal_True; - rValue >>= bApply; - m_aFilterManager.setApplyPublicFilter( bApply ); - } - break; - - case PROPERTY_ID_DATASOURCE: - { - Reference< XConnection > xSomeConnection; - if ( ::dbtools::isEmbeddedInDatabase( getParent(), xSomeConnection ) ) - throw PropertyVetoException(); - - try - { - m_xAggregateSet->setPropertyValue(PROPERTY_DATASOURCE, rValue); - } - catch(const Exception&) - { - } - } - break; - case PROPERTY_ID_TARGET_URL: - rValue >>= m_aTargetURL; - break; - case PROPERTY_ID_TARGET_FRAME: - rValue >>= m_aTargetFrame; - break; - case PROPERTY_ID_SUBMIT_METHOD: - rValue >>= m_eSubmitMethod; - break; - case PROPERTY_ID_SUBMIT_ENCODING: - rValue >>= m_eSubmitEncoding; - break; - case PROPERTY_ID_NAME: - rValue >>= m_sName; - break; - case PROPERTY_ID_MASTERFIELDS: - rValue >>= m_aMasterFields; - invlidateParameters(); - break; - case PROPERTY_ID_DETAILFIELDS: - rValue >>= m_aDetailFields; - invlidateParameters(); - break; - case PROPERTY_ID_CYCLE: - m_aCycle = rValue; - break; - case PROPERTY_ID_NAVIGATION: - rValue >>= m_eNavigation; - break; - case PROPERTY_ID_ALLOWADDITIONS: - m_bAllowInsert = getBOOL(rValue); - break; - case PROPERTY_ID_ALLOWEDITS: - m_bAllowUpdate = getBOOL(rValue); - break; - case PROPERTY_ID_ALLOWDELETIONS: - m_bAllowDelete = getBOOL(rValue); - break; - case PROPERTY_ID_DYNAMIC_CONTROL_BORDER: - m_aDynamicControlBorder = rValue; - break; - case PROPERTY_ID_CONTROL_BORDER_COLOR_FOCUS: - m_aControlBorderColorFocus = rValue; - break; - case PROPERTY_ID_CONTROL_BORDER_COLOR_MOUSE: - m_aControlBorderColorMouse = rValue; - break; - case PROPERTY_ID_CONTROL_BORDER_COLOR_INVALID: - m_aControlBorderColorInvalid = rValue; - break; - - case PROPERTY_ID_ACTIVE_CONNECTION: - { - Reference< XConnection > xOuterConnection; - if ( ::dbtools::isEmbeddedInDatabase( getParent(), xOuterConnection ) ) - { - if ( xOuterConnection != Reference< XConnection >( rValue, UNO_QUERY ) ) - // somebody's trying to set a connection which is not equal the connection - // implied by the database we're embedded in - throw PropertyVetoException(); - } - OPropertySetAggregationHelper::setFastPropertyValue_NoBroadcast( nHandle, rValue ); - break; - } - - default: - if ( m_aPropertyBagHelper.hasDynamicPropertyByHandle( nHandle ) ) - m_aPropertyBagHelper.setDynamicFastPropertyValue( nHandle, rValue ); - else - OPropertySetAggregationHelper::setFastPropertyValue_NoBroadcast( nHandle, rValue ); - break; - } -} - -//------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::forwardingPropertyValue( sal_Int32 _nHandle ) -{ - OSL_ENSURE( _nHandle == PROPERTY_ID_ACTIVE_CONNECTION, "ODatabaseForm::forwardingPropertyValue: unexpected property!" ); - if ( _nHandle == PROPERTY_ID_ACTIVE_CONNECTION ) - { - if ( m_bSharingConnection ) - stopSharingConnection( ); - m_bForwardingConnection = sal_True; - } -} - -//------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::forwardedPropertyValue( sal_Int32 _nHandle, bool /*_bSuccess*/ ) -{ - OSL_ENSURE( _nHandle == PROPERTY_ID_ACTIVE_CONNECTION, "ODatabaseForm::forwardedPropertyValue: unexpected property!" ); - if ( _nHandle == PROPERTY_ID_ACTIVE_CONNECTION ) - { - m_bForwardingConnection = sal_False; - } -} - -//============================================================================== -// com::sun::star::beans::XPropertyState -//------------------------------------------------------------------ -PropertyState ODatabaseForm::getPropertyStateByHandle(sal_Int32 nHandle) -{ - PropertyState eState; - switch (nHandle) - { - case PROPERTY_ID_NAVIGATION: - return (NavigationBarMode_CURRENT == m_eNavigation) ? PropertyState_DEFAULT_VALUE : PropertyState_DIRECT_VALUE; - - case PROPERTY_ID_CYCLE: - eState = m_aCycle.hasValue() ? PropertyState_DIRECT_VALUE : PropertyState_DEFAULT_VALUE; - break; - - case PROPERTY_ID_INSERTONLY: - eState = m_bInsertOnly ? PropertyState_DIRECT_VALUE : PropertyState_DEFAULT_VALUE; - break; - - case PROPERTY_ID_FILTER: - if ( !m_aFilterManager.getFilterComponent( FilterManager::fcPublicFilter ).getLength() ) - eState = PropertyState_DEFAULT_VALUE; - else - eState = PropertyState_DIRECT_VALUE; - break; - - case PROPERTY_ID_APPLYFILTER: - eState = m_aFilterManager.isApplyPublicFilter() ? PropertyState_DEFAULT_VALUE : PropertyState_DIRECT_VALUE; - break; - - case PROPERTY_ID_DYNAMIC_CONTROL_BORDER: - eState = m_aDynamicControlBorder.hasValue() ? PropertyState_DIRECT_VALUE : PropertyState_DEFAULT_VALUE; - break; - - case PROPERTY_ID_CONTROL_BORDER_COLOR_FOCUS: - eState = m_aControlBorderColorFocus.hasValue() ? PropertyState_DIRECT_VALUE : PropertyState_DEFAULT_VALUE; - break; - - case PROPERTY_ID_CONTROL_BORDER_COLOR_MOUSE: - eState = m_aControlBorderColorMouse.hasValue() ? PropertyState_DIRECT_VALUE : PropertyState_DEFAULT_VALUE; - break; - - case PROPERTY_ID_CONTROL_BORDER_COLOR_INVALID: - eState = m_aControlBorderColorInvalid.hasValue() ? PropertyState_DIRECT_VALUE : PropertyState_DEFAULT_VALUE; - break; - - default: - eState = OPropertySetAggregationHelper::getPropertyStateByHandle(nHandle); - } - return eState; -} - -//------------------------------------------------------------------ -void ODatabaseForm::setPropertyToDefaultByHandle(sal_Int32 nHandle) -{ - switch (nHandle) - { - case PROPERTY_ID_INSERTONLY: - case PROPERTY_ID_FILTER: - case PROPERTY_ID_APPLYFILTER: - case PROPERTY_ID_NAVIGATION: - case PROPERTY_ID_CYCLE: - case PROPERTY_ID_DYNAMIC_CONTROL_BORDER: - case PROPERTY_ID_CONTROL_BORDER_COLOR_FOCUS: - case PROPERTY_ID_CONTROL_BORDER_COLOR_MOUSE: - case PROPERTY_ID_CONTROL_BORDER_COLOR_INVALID: - setFastPropertyValue( nHandle, getPropertyDefaultByHandle( nHandle ) ); - break; - - default: - OPropertySetAggregationHelper::setPropertyToDefaultByHandle(nHandle); - } -} - -//------------------------------------------------------------------ -Any ODatabaseForm::getPropertyDefaultByHandle( sal_Int32 nHandle ) const -{ - Any aReturn; - switch (nHandle) - { - case PROPERTY_ID_INSERTONLY: - case PROPERTY_ID_DYNAMIC_CONTROL_BORDER: - aReturn <<= sal_False; - break; - - case PROPERTY_ID_FILTER: - aReturn <<= ::rtl::OUString(); - break; - - case PROPERTY_ID_APPLYFILTER: - aReturn <<= sal_True; - break; - - case PROPERTY_ID_NAVIGATION: - aReturn = makeAny(NavigationBarMode_CURRENT); - break; - - case PROPERTY_ID_CYCLE: - case PROPERTY_ID_CONTROL_BORDER_COLOR_FOCUS: - case PROPERTY_ID_CONTROL_BORDER_COLOR_MOUSE: - case PROPERTY_ID_CONTROL_BORDER_COLOR_INVALID: - break; - - default: - if ( m_aPropertyBagHelper.hasDynamicPropertyByHandle( nHandle ) ) - m_aPropertyBagHelper.getDynamicPropertyDefaultByHandle( nHandle, aReturn ); - else - aReturn = OPropertySetAggregationHelper::getPropertyDefaultByHandle( nHandle ); - break; - } - return aReturn; -} - -//============================================================================== -// com::sun::star::form::XReset -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::reset() throw( RuntimeException ) -{ - ::osl::ResettableMutexGuard aGuard(m_aMutex); - - if (isLoaded()) - { - ::osl::MutexGuard aResetGuard(m_aResetSafety); - ++m_nResetsPending; - reset_impl(true); - return; - } - - if ( !m_aResetListeners.empty() ) - { - ::osl::MutexGuard aResetGuard(m_aResetSafety); - ++m_nResetsPending; - // create an own thread if we have (approve-)reset-listeners (so the listeners can't do that much damage - // to this thread which is probably the main one) - if (!m_pThread) - { - m_pThread = new OFormSubmitResetThread(this); - m_pThread->acquire(); - m_pThread->create(); - } - EventObject aEvt; - m_pThread->addEvent(&aEvt, sal_False); - } - else - { - // direct call without any approving by the listeners - aGuard.clear(); - - ::osl::MutexGuard aResetGuard(m_aResetSafety); - ++m_nResetsPending; - reset_impl(false); - } -} - -//----------------------------------------------------------------------------- -void ODatabaseForm::reset_impl(bool _bAproveByListeners) -{ - if ( _bAproveByListeners ) - if ( !m_aResetListeners.approveReset() ) - return; - - ::osl::ResettableMutexGuard aResetGuard(m_aResetSafety); - // do we have a database connected form and stay on the insert row - sal_Bool bInsertRow = sal_False; - if (m_xAggregateSet.is()) - bInsertRow = getBOOL(m_xAggregateSet->getPropertyValue(PROPERTY_ISNEW)); - if (bInsertRow) - { - try - { - // Iterate through all columns and set the default value - Reference< XColumnsSupplier > xColsSuppl( m_xAggregateSet, UNO_QUERY ); - Reference< XIndexAccess > xIndexCols( xColsSuppl->getColumns(), UNO_QUERY ); - for (sal_Int32 i = 0; i < xIndexCols->getCount(); ++i) - { - Reference< XPropertySet > xColProps; - xIndexCols->getByIndex(i) >>= xColProps; - - Reference< XColumnUpdate > xColUpdate( xColProps, UNO_QUERY ); - if ( !xColUpdate.is() ) - continue; - - Reference< XPropertySetInfo > xPSI; - if ( xColProps.is() ) - xPSI = xColProps->getPropertySetInfo( ); - - static const ::rtl::OUString PROPERTY_CONTROLDEFAULT( RTL_CONSTASCII_USTRINGPARAM( "ControlDefault" ) ); - if ( xPSI.is() && xPSI->hasPropertyByName( PROPERTY_CONTROLDEFAULT ) ) - { - Any aDefault = xColProps->getPropertyValue( PROPERTY_CONTROLDEFAULT ); - - sal_Bool bReadOnly = sal_False; - if ( xPSI->hasPropertyByName( PROPERTY_ISREADONLY ) ) - xColProps->getPropertyValue( PROPERTY_ISREADONLY ) >>= bReadOnly; - - if ( !bReadOnly ) - { - try - { - if ( aDefault.hasValue() ) - xColUpdate->updateObject( aDefault ); - } - catch(const Exception&) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - } - } - } - catch(const Exception&) - { - } - - if (m_bSubForm) - { - Reference< XColumnsSupplier > xParentColSupp( m_xParent, UNO_QUERY ); - Reference< XNameAccess > xParentCols; - if ( xParentColSupp.is() ) - xParentCols = xParentColSupp->getColumns(); - - if ( xParentCols.is() && xParentCols->hasElements() && m_aMasterFields.getLength() ) - { - try - { - // analyze our parameters - if ( !m_aParameterManager.isUpToDate() ) - updateParameterInfo(); - - m_aParameterManager.resetParameterValues( ); - } - catch(const Exception&) - { - OSL_FAIL("ODatabaseForm::reset_impl: could not initialize the master-detail-driven parameters!"); - } - } - } - } - - aResetGuard.clear(); - // iterate through all components. don't use an XIndexAccess as this will cause massive - // problems with the count. - Reference<XEnumeration> xIter = createEnumeration(); - while (xIter->hasMoreElements()) - { - Reference<XReset> xReset; - xIter->nextElement() >>= xReset; - if (xReset.is()) - { - // TODO : all reset-methods have to be thread-safe - xReset->reset(); - } - } - - aResetGuard.reset(); - // ensure that the row isn't modified - // (do this _before_ the listeners are notified ! their reaction (maybe asynchronous) may depend - // on the modified state of the row) - if (bInsertRow) - m_xAggregateSet->setPropertyValue(PROPERTY_ISMODIFIED, ::cppu::bool2any(sal_Bool(sal_False))); - - aResetGuard.clear(); - { - m_aResetListeners.resetted(); - } - - aResetGuard.reset(); - // and again : ensure the row isn't modified - // we already did this after we (and maybe our dependents) resetted the values, but the listeners may have changed the row, too - if (bInsertRow) - m_xAggregateSet->setPropertyValue(PROPERTY_ISMODIFIED, ::cppu::bool2any((sal_False))); - - --m_nResetsPending; -} - -//----------------------------------------------------------------------------- -void SAL_CALL ODatabaseForm::addResetListener(const Reference<XResetListener>& _rListener) throw( RuntimeException ) -{ - m_aResetListeners.addTypedListener( _rListener ); -} - -//----------------------------------------------------------------------------- -void SAL_CALL ODatabaseForm::removeResetListener(const Reference<XResetListener>& _rListener) throw( RuntimeException ) -{ - m_aResetListeners.removeTypedListener( _rListener ); -} - -//============================================================================== -// com::sun::star::form::XSubmit -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::submit( const Reference<XControl>& Control, - const ::com::sun::star::awt::MouseEvent& MouseEvt ) throw( RuntimeException ) -{ - { - ::osl::MutexGuard aGuard(m_aMutex); - // Sind Controls und eine Submit-URL vorhanden? - if( !getCount() || !m_aTargetURL.getLength() ) - return; - } - - ::osl::ClearableMutexGuard aGuard(m_aMutex); - if (m_aSubmitListeners.getLength()) - { - // create an own thread if we have (approve-)submit-listeners (so the listeners can't do that much damage - // to this thread which is probably the main one) - if (!m_pThread) - { - m_pThread = new OFormSubmitResetThread(this); - m_pThread->acquire(); - m_pThread->create(); - } - m_pThread->addEvent(&MouseEvt, Control, sal_True); - } - else - { - // direct call without any approving by the listeners - aGuard.clear(); - submit_impl( Control, MouseEvt, true ); - } -} -// ----------------------------------------------------------------------------- -void lcl_dispatch(const Reference< XFrame >& xFrame,const Reference<XURLTransformer>& xTransformer,const ::rtl::OUString& aURLStr,const ::rtl::OUString& aReferer,const ::rtl::OUString& aTargetName - ,const ::rtl::OUString& aData,rtl_TextEncoding _eEncoding) -{ - URL aURL; - aURL.Complete = aURLStr; - xTransformer->parseStrict(aURL); - - Reference< XDispatch > xDisp = Reference< XDispatchProvider > (xFrame,UNO_QUERY)->queryDispatch(aURL, aTargetName, - FrameSearchFlag::SELF | FrameSearchFlag::PARENT | FrameSearchFlag::CHILDREN | - FrameSearchFlag::SIBLINGS | FrameSearchFlag::CREATE | FrameSearchFlag::TASKS); - - if (xDisp.is()) - { - Sequence<PropertyValue> aArgs(2); - aArgs.getArray()[0].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Referer") ); - aArgs.getArray()[0].Value <<= aReferer; - - // build a sequence from the to-be-submitted string - ByteString a8BitData(aData.getStr(), (sal_uInt16)aData.getLength(), _eEncoding); - // always ANSI #58641 - Sequence< sal_Int8 > aPostData((sal_Int8*)a8BitData.GetBuffer(), a8BitData.Len()); - Reference< XInputStream > xPostData = new SequenceInputStream(aPostData); - - aArgs.getArray()[1].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PostData") ); - aArgs.getArray()[1].Value <<= xPostData; - - xDisp->dispatch(aURL, aArgs); - } // if (xDisp.is()) -} -//------------------------------------------------------------------------------ -void ODatabaseForm::submit_impl(const Reference<XControl>& Control, const ::com::sun::star::awt::MouseEvent& MouseEvt, bool _bAproveByListeners) -{ - - if (_bAproveByListeners) - { - ::cppu::OInterfaceIteratorHelper aIter(m_aSubmitListeners); - EventObject aEvt(static_cast<XWeak*>(this)); - sal_Bool bCanceled = sal_False; - while (aIter.hasMoreElements() && !bCanceled) - { - if (!((XSubmitListener*)aIter.next())->approveSubmit(aEvt)) - bCanceled = sal_True; - } - - if (bCanceled) - return; - } - - FormSubmitEncoding eSubmitEncoding; - FormSubmitMethod eSubmitMethod; - ::rtl::OUString aURLStr; - ::rtl::OUString aReferer; - ::rtl::OUString aTargetName; - Reference< XModel > xModel; - { - SolarMutexGuard aGuard; - // starform->Forms - - Reference<XChild> xParent(m_xParent, UNO_QUERY); - - if (xParent.is()) - xModel = getXModel(xParent->getParent()); - - if (xModel.is()) - aReferer = xModel->getURL(); - - // TargetItem - aTargetName = m_aTargetFrame; - - eSubmitEncoding = m_eSubmitEncoding; - eSubmitMethod = m_eSubmitMethod; - aURLStr = m_aTargetURL; - } - - if (!xModel.is()) - return; - Reference< XFrame > xFrame = xModel->getCurrentController()->getFrame(); - if (!xFrame.is()) - return; - - Reference<XURLTransformer> - xTransformer(m_xServiceFactory->createInstance( - ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.util.URLTransformer") ) ), UNO_QUERY); - DBG_ASSERT(xTransformer.is(), "ODatabaseForm::submit_impl : could not create an URL transformer !"); - - // URL-Encoding - if( eSubmitEncoding == FormSubmitEncoding_URL ) - { - ::rtl::OUString aData; - { - SolarMutexGuard aGuard; - aData = GetDataURLEncoded( Control, MouseEvt ); - } - - URL aURL; - // FormMethod GET - if( eSubmitMethod == FormSubmitMethod_GET ) - { - INetURLObject aUrlObj( aURLStr, INetURLObject::WAS_ENCODED ); - aUrlObj.SetParam( aData, INetURLObject::ENCODE_ALL ); - aURL.Complete = aUrlObj.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ); - if (xTransformer.is()) - xTransformer->parseStrict(aURL); - - Reference< XDispatch > xDisp = Reference< XDispatchProvider > (xFrame,UNO_QUERY)->queryDispatch(aURL, aTargetName, - FrameSearchFlag::SELF | FrameSearchFlag::PARENT | FrameSearchFlag::CHILDREN | - FrameSearchFlag::SIBLINGS | FrameSearchFlag::CREATE | FrameSearchFlag::TASKS); - - if (xDisp.is()) - { - Sequence<PropertyValue> aArgs(1); - aArgs.getArray()->Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Referer") ); - aArgs.getArray()->Value <<= aReferer; - xDisp->dispatch(aURL, aArgs); - } - } - // FormMethod POST - else if( eSubmitMethod == FormSubmitMethod_POST ) - { - lcl_dispatch(xFrame,xTransformer,aURLStr,aReferer,aTargetName,aData,RTL_TEXTENCODING_MS_1252); - } - } - else if( eSubmitEncoding == FormSubmitEncoding_MULTIPART ) - { - URL aURL; - aURL.Complete = aURLStr; - xTransformer->parseStrict(aURL); - - Reference< XDispatch > xDisp = Reference< XDispatchProvider > (xFrame,UNO_QUERY)->queryDispatch(aURL, aTargetName, - FrameSearchFlag::SELF | FrameSearchFlag::PARENT | FrameSearchFlag::CHILDREN | - FrameSearchFlag::SIBLINGS | FrameSearchFlag::CREATE | FrameSearchFlag::TASKS); - - if (xDisp.is()) - { - ::rtl::OUString aContentType; - Sequence<sal_Int8> aData; - { - SolarMutexGuard aGuard; - aData = GetDataMultiPartEncoded(Control, MouseEvt, aContentType); - } - if (!aData.getLength()) - return; - - Sequence<PropertyValue> aArgs(3); - aArgs.getArray()[0].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Referer") ); - aArgs.getArray()[0].Value <<= aReferer; - aArgs.getArray()[1].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ContentType") ); - aArgs.getArray()[1].Value <<= aContentType; - - // build a sequence from the to-be-submitted string - Reference< XInputStream > xPostData = new SequenceInputStream(aData); - - aArgs.getArray()[2].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PostData") ); - aArgs.getArray()[2].Value <<= xPostData; - - xDisp->dispatch(aURL, aArgs); - } - } - else if( eSubmitEncoding == FormSubmitEncoding_TEXT ) - { - ::rtl::OUString aData; - { - SolarMutexGuard aGuard; - aData = GetDataTextEncoded( Reference<XControl> (), MouseEvt ); - } - - lcl_dispatch(xFrame,xTransformer,aURLStr,aReferer,aTargetName,aData,osl_getThreadTextEncoding()); - } - else { - OSL_FAIL("ODatabaseForm::submit_Impl : wrong encoding !"); - } - -} - -// XSubmit -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::addSubmitListener(const Reference<XSubmitListener>& _rListener) throw( RuntimeException ) -{ - m_aSubmitListeners.addInterface(_rListener); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::removeSubmitListener(const Reference<XSubmitListener>& _rListener) throw( RuntimeException ) -{ - m_aSubmitListeners.removeInterface(_rListener); -} - -//============================================================================== -// com::sun::star::sdbc::XSQLErrorBroadcaster -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::addSQLErrorListener(const Reference<XSQLErrorListener>& _rListener) throw( RuntimeException ) -{ - m_aErrorListeners.addInterface(_rListener); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::removeSQLErrorListener(const Reference<XSQLErrorListener>& _rListener) throw( RuntimeException ) -{ - m_aErrorListeners.removeInterface(_rListener); -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::invlidateParameters() -{ - ::osl::MutexGuard aGuard(m_aMutex); - m_aParameterManager.clearAllParameterInformation(); -} - -//============================================================================== -// OChangeListener -//------------------------------------------------------------------------------ -void ODatabaseForm::_propertyChanged(const PropertyChangeEvent& evt) throw( RuntimeException ) -{ - if ((0 == evt.PropertyName.compareToAscii(PROPERTY_ACTIVE_CONNECTION)) && !m_bForwardingConnection) - { - // the rowset changed its active connection itself (without interaction from our side), so - // we need to fire this event, too - sal_Int32 nHandle = PROPERTY_ID_ACTIVE_CONNECTION; - fire(&nHandle, &evt.NewValue, &evt.OldValue, 1, sal_False); - } - else // it was one of the statement relevant props - { - // if the statement has changed we have to delete the parameter info - invlidateParameters(); - } -} - -//============================================================================== -// smartXChild -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setParent(const InterfaceRef& Parent) throw ( ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException) -{ - // SYNCHRONIZED -----> - ::osl::ResettableMutexGuard aGuard(m_aMutex); - - Reference<XForm> xParentForm(getParent(), UNO_QUERY); - if (xParentForm.is()) - { - try - { - Reference< XRowSetApproveBroadcaster > xParentApprBroadcast( xParentForm, UNO_QUERY_THROW ); - xParentApprBroadcast->removeRowSetApproveListener( this ); - - Reference< XLoadable > xParentLoadable( xParentForm, UNO_QUERY_THROW ); - xParentLoadable->removeLoadListener( this ); - - Reference< XPropertySet > xParentProperties( xParentForm, UNO_QUERY_THROW ); - xParentProperties->removePropertyChangeListener( PROPERTY_ISNEW, this ); - } - catch(const Exception&) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - OFormComponents::setParent(Parent); - - xParentForm.set(getParent(), UNO_QUERY); - if ( xParentForm.is() ) - { - try - { - Reference< XRowSetApproveBroadcaster > xParentApprBroadcast( xParentForm, UNO_QUERY_THROW ); - xParentApprBroadcast->addRowSetApproveListener( this ); - - Reference< XLoadable > xParentLoadable( xParentForm, UNO_QUERY_THROW ); - xParentLoadable->addLoadListener( this ); - - Reference< XPropertySet > xParentProperties( xParentForm, UNO_QUERY_THROW ); - xParentProperties->addPropertyChangeListener( PROPERTY_ISNEW, this ); - } - catch(const Exception&) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - Reference< XPropertySet > xAggregateProperties( m_xAggregateSet ); - aGuard.clear(); - // <----- SYNCHRONIZED - - Reference< XConnection > xOuterConnection; - sal_Bool bIsEmbedded = ::dbtools::isEmbeddedInDatabase( Parent, xOuterConnection ); - - if ( bIsEmbedded ) - xAggregateProperties->setPropertyValue( PROPERTY_DATASOURCE, makeAny( ::rtl::OUString() ) ); -} - -//============================================================================== -// smartXTabControllerModel -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::getGroupControl() throw(com::sun::star::uno::RuntimeException) -{ - ::osl::ResettableMutexGuard aGuard(m_aMutex); - - // Sollen Controls in einer TabOrder gruppe zusammengefasst werden? - if (m_aCycle.hasValue()) - { - sal_Int32 nCycle = 0; - ::cppu::enum2int(nCycle, m_aCycle); - return nCycle != TabulatorCycle_PAGE; - } - - if (isLoaded() && getConnection().is()) - return sal_True; - - return sal_False; -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setControlModels(const Sequence<Reference<XControlModel> >& rControls) throw( RuntimeException ) -{ - ::osl::ResettableMutexGuard aGuard(m_aMutex); - - // TabIndex in der Reihenfolge der Sequence setzen - const Reference<XControlModel>* pControls = rControls.getConstArray(); - sal_Int16 nTabIndex = 1; - sal_Int32 nCount = getCount(); - sal_Int32 nNewCount = rControls.getLength(); - - // HiddenControls und Formulare werden nicht aufgefuehrt - if (nNewCount <= nCount) - { - Any aElement; - for (sal_Int32 i=0; i < nNewCount; ++i, ++pControls) - { - Reference<XFormComponent> xComp(*pControls, UNO_QUERY); - if (xComp.is()) - { - // suchen der Componente in der Liste - for (sal_Int32 j = 0; j < nCount; ++j) - { - Reference<XFormComponent> xElement; - ::cppu::extractInterface(xElement, getByIndex(j)); - if (xComp == xElement) - { - Reference<XPropertySet> xSet(xComp, UNO_QUERY); - if (xSet.is() && hasProperty(PROPERTY_TABINDEX, xSet)) - xSet->setPropertyValue( PROPERTY_TABINDEX, makeAny(nTabIndex++) ); - break; - } - } - } - } - } -} - -//------------------------------------------------------------------------------ -Sequence<Reference<XControlModel> > SAL_CALL ODatabaseForm::getControlModels() throw( RuntimeException ) -{ - ::osl::MutexGuard aGuard(m_aMutex); - return m_pGroupManager->getControlModels(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setGroup( const Sequence<Reference<XControlModel> >& _rGroup, const ::rtl::OUString& Name ) throw( RuntimeException ) -{ - ::osl::MutexGuard aGuard(m_aMutex); - - // Die Controls werden gruppiert, indem ihr Name dem Namen des ersten - // Controls der Sequenz angepasst wird - const Reference<XControlModel>* pControls = _rGroup.getConstArray(); - Reference< XPropertySet > xSet; - ::rtl::OUString sGroupName( Name ); - - for( sal_Int32 i=0; i<_rGroup.getLength(); ++i, ++pControls ) - { - xSet = xSet.query( *pControls ); - if ( !xSet.is() ) - { - // can't throw an exception other than a RuntimeException (which would not be appropriate), - // so we ignore (and only assert) this - OSL_FAIL( "ODatabaseForm::setGroup: invalid arguments!" ); - continue; - } - - if (!sGroupName.getLength()) - xSet->getPropertyValue(PROPERTY_NAME) >>= sGroupName; - else - xSet->setPropertyValue(PROPERTY_NAME, makeAny(sGroupName)); - } -} - -//------------------------------------------------------------------------------ -sal_Int32 SAL_CALL ODatabaseForm::getGroupCount() throw( RuntimeException ) -{ - ::osl::MutexGuard aGuard(m_aMutex); - return m_pGroupManager->getGroupCount(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::getGroup( sal_Int32 nGroup, Sequence<Reference<XControlModel> >& _rGroup, ::rtl::OUString& _rName ) throw( RuntimeException ) -{ - ::osl::MutexGuard aGuard(m_aMutex); - _rGroup.realloc(0); - _rName = ::rtl::OUString(); - - if ((nGroup < 0) || (nGroup >= m_pGroupManager->getGroupCount())) - return; - m_pGroupManager->getGroup( nGroup, _rGroup, _rName ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::getGroupByName(const ::rtl::OUString& Name, Sequence< Reference<XControlModel> >& _rGroup) throw( RuntimeException ) -{ - ::osl::MutexGuard aGuard(m_aMutex); - _rGroup.realloc(0); - m_pGroupManager->getGroupByName( Name, _rGroup ); -} - -//============================================================================== -// com::sun::star::lang::XEventListener -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::disposing(const EventObject& Source) throw( RuntimeException ) -{ - // does the call come from the connection which we are sharing with our parent? - if ( isSharingConnection() ) - { - Reference< XConnection > xConnSource( Source.Source, UNO_QUERY ); - if ( xConnSource.is() ) - { -#if OSL_DEBUG_LEVEL > 0 - Reference< XConnection > xActiveConn; - m_xAggregateSet->getPropertyValue( PROPERTY_ACTIVE_CONNECTION ) >>= xActiveConn; - OSL_ENSURE( xActiveConn.get() == xConnSource.get(), "ODatabaseForm::disposing: where did this come from?" ); - // there should be exactly one XConnection object we're listening at - our aggregate connection -#endif - disposingSharedConnection( xConnSource ); - } - } - - OInterfaceContainer::disposing(Source); - - // does the disposing come from the aggregate ? - if (m_xAggregate.is()) - { // no -> forward it - com::sun::star::uno::Reference<com::sun::star::lang::XEventListener> xListener; - if (query_aggregation(m_xAggregate, xListener)) - xListener->disposing(Source); - } -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::impl_createLoadTimer() -{ - OSL_PRECOND( m_pLoadTimer == NULL, "ODatabaseForm::impl_createLoadTimer: timer already exists!" ); - m_pLoadTimer = new Timer(); - m_pLoadTimer->SetTimeout(100); - m_pLoadTimer->SetTimeoutHdl(LINK(this,ODatabaseForm,OnTimeout)); -} - -//============================================================================== -// com::sun::star::form::XLoadListener -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::loaded(const EventObject& /*aEvent*/) throw( RuntimeException ) -{ - { - ::osl::MutexGuard aGuard( m_aMutex ); - Reference< XRowSet > xParentRowSet( m_xParent, UNO_QUERY_THROW ); - xParentRowSet->addRowSetListener( this ); - - impl_createLoadTimer(); - } - - load_impl( sal_True ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::unloading(const EventObject& /*aEvent*/) throw( RuntimeException ) -{ - { - // now stop the rowset listening if we are a subform - ::osl::MutexGuard aGuard( m_aMutex ); - - if ( m_pLoadTimer && m_pLoadTimer->IsActive() ) - m_pLoadTimer->Stop(); - DELETEZ( m_pLoadTimer ); - - Reference< XRowSet > xParentRowSet( m_xParent, UNO_QUERY_THROW ); - xParentRowSet->removeRowSetListener( this ); - } - - unload(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::unloaded(const EventObject& /*aEvent*/) throw( RuntimeException ) -{ - // nothing to do -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::reloading(const EventObject& /*aEvent*/) throw( RuntimeException ) -{ - // now stop the rowset listening if we are a subform - ::osl::MutexGuard aGuard(m_aMutex); - Reference<XRowSet> xParentRowSet(m_xParent, UNO_QUERY); - if (xParentRowSet.is()) - xParentRowSet->removeRowSetListener(this); - - if (m_pLoadTimer && m_pLoadTimer->IsActive()) - m_pLoadTimer->Stop(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::reloaded(const EventObject& /*aEvent*/) throw( RuntimeException ) -{ - reload_impl(sal_True); - { - ::osl::MutexGuard aGuard(m_aMutex); - Reference<XRowSet> xParentRowSet(m_xParent, UNO_QUERY); - if (xParentRowSet.is()) - xParentRowSet->addRowSetListener(this); - } -} - -//------------------------------------------------------------------------------ -IMPL_LINK( ODatabaseForm, OnTimeout, void*, EMPTYARG ) -{ - reload_impl(sal_True); - return 1; -} - -//============================================================================== -// com::sun::star::form::XLoadable -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::load() throw( RuntimeException ) -{ - load_impl(sal_False); -} - -//------------------------------------------------------------------------------ -sal_Bool ODatabaseForm::canShareConnection( const Reference< XPropertySet >& _rxParentProps ) -{ - // our own data source - ::rtl::OUString sOwnDatasource; - m_xAggregateSet->getPropertyValue( PROPERTY_DATASOURCE ) >>= sOwnDatasource; - - // our parents data source - ::rtl::OUString sParentDataSource; - OSL_ENSURE( _rxParentProps.is() && _rxParentProps->getPropertySetInfo().is() && _rxParentProps->getPropertySetInfo()->hasPropertyByName( PROPERTY_DATASOURCE ), - "ODatabaseForm::doShareConnection: invalid parent form!" ); - if ( _rxParentProps.is() ) - _rxParentProps->getPropertyValue( PROPERTY_DATASOURCE ) >>= sParentDataSource; - - sal_Bool bCanShareConnection = sal_False; - - // both rowsets share are connected to the same data source - if ( sParentDataSource == sOwnDatasource ) - { - if ( 0 != sParentDataSource.getLength() ) - // and it's really a data source name (not empty) - bCanShareConnection = sal_True; - else - { // the data source name is empty - // -> ook for the URL - ::rtl::OUString sParentURL; - ::rtl::OUString sMyURL; - _rxParentProps->getPropertyValue( PROPERTY_URL ) >>= sParentURL; - m_xAggregateSet->getPropertyValue( PROPERTY_URL ) >>= sMyURL; - - bCanShareConnection = (sParentURL == sMyURL); - } - } - - if ( bCanShareConnection ) - { - // check for the user/password - - // take the user property on the rowset (if any) into account - ::rtl::OUString sParentUser, sParentPwd; - _rxParentProps->getPropertyValue( PROPERTY_USER ) >>= sParentUser; - _rxParentProps->getPropertyValue( PROPERTY_PASSWORD ) >>= sParentPwd; - - ::rtl::OUString sMyUser, sMyPwd; - m_xAggregateSet->getPropertyValue( PROPERTY_USER ) >>= sMyUser; - m_xAggregateSet->getPropertyValue( PROPERTY_PASSWORD ) >>= sMyPwd; - - bCanShareConnection = - ( sParentUser == sMyUser ) - && ( sParentPwd == sMyPwd ); - } - - return bCanShareConnection; -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::doShareConnection( const Reference< XPropertySet >& _rxParentProps ) -{ - // get the conneciton of the parent - Reference< XConnection > xParentConn; - _rxParentProps->getPropertyValue( PROPERTY_ACTIVE_CONNECTION ) >>= xParentConn; - OSL_ENSURE( xParentConn.is(), "ODatabaseForm::doShareConnection: we're a valid sub-form, but the parent has no connection?!" ); - - if ( xParentConn.is() ) - { - // add as dispose listener to the connection - Reference< XComponent > xParentConnComp( xParentConn, UNO_QUERY ); - OSL_ENSURE( xParentConnComp.is(), "ODatabaseForm::doShareConnection: invalid connection!" ); - xParentConnComp->addEventListener( static_cast< XLoadListener* >( this ) ); - - // forward the connection to our own aggreagte - m_bForwardingConnection = sal_True; - m_xAggregateSet->setPropertyValue( PROPERTY_ACTIVE_CONNECTION, makeAny( xParentConn ) ); - m_bForwardingConnection = sal_False; - - m_bSharingConnection = sal_True; - } - else - m_bSharingConnection = sal_False; -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::disposingSharedConnection( const Reference< XConnection >& /*_rxConn*/ ) -{ - stopSharingConnection(); - - // TODO: we could think about whether or not to re-connect. - unload( ); -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::stopSharingConnection( ) -{ - OSL_ENSURE( m_bSharingConnection, "ODatabaseForm::stopSharingConnection: invalid call!" ); - - if ( m_bSharingConnection ) - { - // get the connection - Reference< XConnection > xSharedConn; - m_xAggregateSet->getPropertyValue( PROPERTY_ACTIVE_CONNECTION ) >>= xSharedConn; - OSL_ENSURE( xSharedConn.is(), "ODatabaseForm::stopSharingConnection: there's no conn!" ); - - // remove ourself as event listener - Reference< XComponent > xSharedConnComp( xSharedConn, UNO_QUERY ); - if ( xSharedConnComp.is() ) - xSharedConnComp->removeEventListener( static_cast< XLoadListener* >( this ) ); - - // no need to dispose the conn: we're not the owner, this is our parent - // (in addition, this method may be called if the connection is beeing disposed while we use it) - - // reset the property - xSharedConn.clear(); - m_bForwardingConnection = sal_True; - m_xAggregateSet->setPropertyValue( PROPERTY_ACTIVE_CONNECTION, makeAny( xSharedConn ) ); - m_bForwardingConnection = sal_False; - - // reset the flag - m_bSharingConnection = sal_False; - } -} - -//------------------------------------------------------------------------------ -sal_Bool ODatabaseForm::implEnsureConnection() -{ - try - { - if ( getConnection( ).is() ) - // if our aggregate already has a connection, nothing needs to be done about it - return sal_True; - - // see whether we're an embedded form - Reference< XConnection > xOuterConnection; - if ( ::dbtools::isEmbeddedInDatabase( getParent(), xOuterConnection ) ) - { - m_xAggregateSet->setPropertyValue( PROPERTY_ACTIVE_CONNECTION, makeAny( xOuterConnection ) ); - return xOuterConnection.is(); - } - - m_bSharingConnection = sal_False; - - // if we're a sub form, we try to re-use the connection of our parent - if (m_bSubForm) - { - OSL_ENSURE( Reference< XForm >( getParent(), UNO_QUERY ).is(), - "ODatabaseForm::implEnsureConnection: m_bSubForm is TRUE, but the parent is no form?" ); - - Reference< XPropertySet > xParentProps( getParent(), UNO_QUERY ); - - // can we re-use (aka share) the connection of the parent? - if ( canShareConnection( xParentProps ) ) - { - // yep -> do it - doShareConnection( xParentProps ); - // success? - if ( m_bSharingConnection ) - // yes -> outta here - return sal_True; - } - } - - if (m_xAggregateSet.is()) - { - Reference< XConnection > xConnection = connectRowset( - Reference<XRowSet> (m_xAggregate, UNO_QUERY), - m_xServiceFactory, - sal_True // set a calculated connection as ActiveConnection - ); - return xConnection.is(); - } - } - catch(const SQLException& eDB) - { - onError(eDB, FRM_RES_STRING(RID_STR_CONNECTERROR)); - } - catch(const Exception&) - { - DBG_UNHANDLED_EXCEPTION(); - } - - return sal_False; -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::load_impl(sal_Bool bCausedByParentForm, sal_Bool bMoveToFirst, const Reference< XInteractionHandler >& _rxCompletionHandler ) throw( RuntimeException ) -{ - ::osl::ResettableMutexGuard aGuard(m_aMutex); - - // are we already loaded? - if (isLoaded()) - return; - - m_bSubForm = bCausedByParentForm; - - // if we don't have a connection, we are not intended to be a database form or the aggregate was not able - // to establish a connection - sal_Bool bConnected = implEnsureConnection(); - - // we don't have to execute if we do not have a command to execute - sal_Bool bExecute = bConnected && m_xAggregateSet.is() && getString(m_xAggregateSet->getPropertyValue(PROPERTY_COMMAND)).getLength(); - - // a database form always uses caching - // we use starting fetchsize with at least 10 rows - if (bConnected) - m_xAggregateSet->setPropertyValue(PROPERTY_FETCHSIZE, makeAny((sal_Int32)40)); - - // if we're loaded as sub form we got a "rowSetChanged" from the parent rowset _before_ we got the "loaded" - // so we don't need to execute the statement again, this was already done - // (and there were no relevant changes between these two listener calls, the "load" of a form is quite an - // atomar operation.) - - sal_Bool bSuccess = sal_False; - if (bExecute) - { - m_sCurrentErrorContext = FRM_RES_STRING(RID_ERR_LOADING_FORM); - bSuccess = executeRowSet(aGuard, bMoveToFirst, _rxCompletionHandler); - } - - if (bSuccess) - { - m_bLoaded = sal_True; - aGuard.clear(); - EventObject aEvt(static_cast<XWeak*>(this)); - m_aLoadListeners.notifyEach( &XLoadListener::loaded, aEvt ); - - // if we are on the insert row, we have to reset all controls - // to set the default values - if (bExecute && getBOOL(m_xAggregateSet->getPropertyValue(PROPERTY_ISNEW))) - reset(); - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::unload() throw( RuntimeException ) -{ - ::osl::ResettableMutexGuard aGuard(m_aMutex); - if (!isLoaded()) - return; - - DELETEZ(m_pLoadTimer); - - aGuard.clear(); - EventObject aEvt(static_cast<XWeak*>(this)); - m_aLoadListeners.notifyEach( &XLoadListener::unloading, aEvt ); - - if (m_xAggregateAsRowSet.is()) - { - // we may have reset the InsertOnly property on the aggregate - restore it - restoreInsertOnlyState( ); - - // clear the parameters if there are any - invlidateParameters(); - - try - { - // close the aggregate - Reference<XCloseable> xCloseable; - query_aggregation( m_xAggregate, xCloseable); - aGuard.clear(); - if (xCloseable.is()) - xCloseable->close(); - } - catch(const SQLException&) - { - } - aGuard.reset(); - } - - m_bLoaded = sal_False; - - // if the connection we used while we were loaded is only shared with our parent, we - // reset it - if ( isSharingConnection() ) - stopSharingConnection(); - - aGuard.clear(); - m_aLoadListeners.notifyEach( &XLoadListener::unloaded, aEvt ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::reload() throw( RuntimeException ) -{ - reload_impl(sal_True); -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::reload_impl(sal_Bool bMoveToFirst, const Reference< XInteractionHandler >& _rxCompletionHandler ) throw( RuntimeException ) -{ - ::osl::ResettableMutexGuard aGuard(m_aMutex); - if (!isLoaded()) - return; - - DocumentModifyGuard aModifyGuard( *this ); - // ensures the document is not marked as "modified" just because we change some control's content during - // reloading ... - - EventObject aEvent(static_cast<XWeak*>(this)); - { - // only if there is no approve listener we can post the event at this time - // otherwise see approveRowsetChange - // the aprrovement is done by the aggregate - if (!m_aRowSetApproveListeners.getLength()) - { - ::cppu::OInterfaceIteratorHelper aIter(m_aLoadListeners); - aGuard.clear(); - - while (aIter.hasMoreElements()) - ((XLoadListener*)aIter.next())->reloading(aEvent); - - aGuard.reset(); - } - } - - sal_Bool bSuccess = sal_True; - try - { - m_sCurrentErrorContext = FRM_RES_STRING(RID_ERR_REFRESHING_FORM); - bSuccess = executeRowSet(aGuard, bMoveToFirst, _rxCompletionHandler); - } - catch(const SQLException&) - { - OSL_FAIL("ODatabaseForm::reload_impl : shouldn't executeRowSet catch this exception?"); - } - - if (bSuccess) - { - ::cppu::OInterfaceIteratorHelper aIter(m_aLoadListeners); - aGuard.clear(); - while (aIter.hasMoreElements()) - ((XLoadListener*)aIter.next())->reloaded(aEvent); - - // if we are on the insert row, we have to reset all controls - // to set the default values - if (getBOOL(m_xAggregateSet->getPropertyValue(PROPERTY_ISNEW))) - reset(); - } - else - m_bLoaded = sal_False; -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::isLoaded() throw( RuntimeException ) -{ - return m_bLoaded; -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::addLoadListener(const Reference<XLoadListener>& aListener) throw( RuntimeException ) -{ - m_aLoadListeners.addInterface(aListener); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::removeLoadListener(const Reference<XLoadListener>& aListener) throw( RuntimeException ) -{ - m_aLoadListeners.removeInterface(aListener); -} - -//============================================================================== -// com::sun::star::sdbc::XCloseable -//============================================================================== -void SAL_CALL ODatabaseForm::close() throw( SQLException, RuntimeException ) -{ - // unload will close the aggregate - unload(); -} - -//============================================================================== -// com::sun::star::sdbc::XRowSetListener -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::cursorMoved(const EventObject& /*event*/) throw( RuntimeException ) -{ - // reload the subform with the new parameters of the parent - // do this handling delayed to provide of execute too many SQL Statements - ::osl::ResettableMutexGuard aGuard(m_aMutex); - - DBG_ASSERT( m_pLoadTimer, "ODatabaseForm::cursorMoved: how can this happen?!" ); - if ( !m_pLoadTimer ) - impl_createLoadTimer(); - - if ( m_pLoadTimer->IsActive() ) - m_pLoadTimer->Stop(); - - // and start the timer again - m_pLoadTimer->Start(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::rowChanged(const EventObject& /*event*/) throw( RuntimeException ) -{ - // ignore it -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::rowSetChanged(const EventObject& /*event*/) throw( RuntimeException ) -{ - // not interested in : - // if our parent is an ODatabaseForm, too, then after this rowSetChanged we'll get a "reloaded" - // or a "loaded" event. - // If somebody gave us another parent which is an XRowSet but doesn't handle an execute as - // "load" respectivly "reload" ... can't do anything .... -} - -//------------------------------------------------------------------------------ -bool ODatabaseForm::impl_approveRowChange_throw( const EventObject& _rEvent, const bool _bAllowSQLException, - ::osl::ClearableMutexGuard& _rGuard ) -{ - ::cppu::OInterfaceIteratorHelper aIter( m_aRowSetApproveListeners ); - _rGuard.clear(); - while ( aIter.hasMoreElements() ) - { - Reference< XRowSetApproveListener > xListener( static_cast< XRowSetApproveListener* >( aIter.next() ) ); - if ( !xListener.is() ) - continue; - - try - { - if ( !xListener->approveRowSetChange( _rEvent ) ) - return false; - } - catch (const DisposedException& e) - { - if ( e.Context == xListener ) - aIter.remove(); - } - catch (const RuntimeException&) - { - throw; - } - catch (const SQLException&) - { - if ( _bAllowSQLException ) - throw; - DBG_UNHANDLED_EXCEPTION(); - } - catch (const Exception&) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - return true; -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::approveCursorMove(const EventObject& event) throw( RuntimeException ) -{ - // is our aggregate calling? - if (event.Source == InterfaceRef(static_cast<XWeak*>(this))) - { - // Our aggregate doesn't have any ApproveRowSetListeners (expect ourself), as we re-routed the queryInterface - // for XRowSetApproveBroadcaster-interface. - // So we have to multiplex this approve request. - ::cppu::OInterfaceIteratorHelper aIter( m_aRowSetApproveListeners ); - while ( aIter.hasMoreElements() ) - { - Reference< XRowSetApproveListener > xListener( static_cast< XRowSetApproveListener* >( aIter.next() ) ); - if ( !xListener.is() ) - continue; - - try - { - if ( !xListener->approveCursorMove( event ) ) - return sal_False; - } - catch (const DisposedException& e) - { - if ( e.Context == xListener ) - aIter.remove(); - } - catch (const RuntimeException&) - { - throw; - } - catch (const Exception&) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - return true; - } - else - { - // this is a call from our parent ... - // a parent's cursor move will result in a re-execute of our own row-set, so we have to - // ask our own RowSetChangesListeners, too - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - if ( !impl_approveRowChange_throw( event, false, aGuard ) ) - return sal_False; - } - return sal_True; -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::approveRowChange(const RowChangeEvent& event) throw( RuntimeException ) -{ - // is our aggregate calling? - if (event.Source == InterfaceRef(static_cast<XWeak*>(this))) - { - // Our aggregate doesn't have any ApproveRowSetListeners (expect ourself), as we re-routed the queryInterface - // for XRowSetApproveBroadcaster-interface. - // So we have to multiplex this approve request. - ::cppu::OInterfaceIteratorHelper aIter( m_aRowSetApproveListeners ); - while ( aIter.hasMoreElements() ) - { - Reference< XRowSetApproveListener > xListener( static_cast< XRowSetApproveListener* >( aIter.next() ) ); - if ( !xListener.is() ) - continue; - - try - { - if ( !xListener->approveRowChange( event ) ) - return false; - } - catch (const DisposedException& e) - { - if ( e.Context == xListener ) - aIter.remove(); - } - catch (const RuntimeException&) - { - throw; - } - catch (const Exception&) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - return true; - } - return sal_True; -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::approveRowSetChange(const EventObject& event) throw( RuntimeException ) -{ - if (event.Source == InterfaceRef(static_cast<XWeak*>(this))) // ignore our aggregate as we handle this approve ourself - { - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - bool bWasLoaded = isLoaded(); - if ( !impl_approveRowChange_throw( event, false, aGuard ) ) - return sal_False; - - if ( bWasLoaded ) - { - m_aLoadListeners.notifyEach( &XLoadListener::reloading, event ); - } - } - else - { - // this is a call from our parent ... - // a parent's cursor move will result in a re-execute of our own row-set, so we have to - // ask our own RowSetChangesListeners, too - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - if ( !impl_approveRowChange_throw( event, false, aGuard ) ) - return sal_False; - } - return sal_True; -} - -//============================================================================== -// com::sun::star::sdb::XRowSetApproveBroadcaster -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::addRowSetApproveListener(const Reference<XRowSetApproveListener>& _rListener) throw( RuntimeException ) -{ - ::osl::ResettableMutexGuard aGuard(m_aMutex); - m_aRowSetApproveListeners.addInterface(_rListener); - - // do we have to multiplex ? - if (m_aRowSetApproveListeners.getLength() == 1) - { - Reference<XRowSetApproveBroadcaster> xBroadcaster; - if (query_aggregation( m_xAggregate, xBroadcaster)) - { - Reference<XRowSetApproveListener> xListener((XRowSetApproveListener*)this); - xBroadcaster->addRowSetApproveListener(xListener); - } - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::removeRowSetApproveListener(const Reference<XRowSetApproveListener>& _rListener) throw( RuntimeException ) -{ - ::osl::ResettableMutexGuard aGuard(m_aMutex); - // do we have to remove the multiplex ? - m_aRowSetApproveListeners.removeInterface(_rListener); - if ( m_aRowSetApproveListeners.getLength() == 0 ) - { - Reference<XRowSetApproveBroadcaster> xBroadcaster; - if (query_aggregation( m_xAggregate, xBroadcaster)) - { - Reference<XRowSetApproveListener> xListener((XRowSetApproveListener*)this); - xBroadcaster->removeRowSetApproveListener(xListener); - } - } -} - -//============================================================================== -// com::sun:star::form::XDatabaseParameterBroadcaster -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::addDatabaseParameterListener(const Reference<XDatabaseParameterListener>& _rListener) throw( RuntimeException ) -{ - m_aParameterManager.addParameterListener( _rListener ); -} -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::removeDatabaseParameterListener(const Reference<XDatabaseParameterListener>& _rListener) throw( RuntimeException ) -{ - m_aParameterManager.removeParameterListener( _rListener ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::addParameterListener(const Reference<XDatabaseParameterListener>& _rListener) throw( RuntimeException ) -{ - ODatabaseForm::addDatabaseParameterListener( _rListener ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::removeParameterListener(const Reference<XDatabaseParameterListener>& _rListener) throw( RuntimeException ) -{ - ODatabaseForm::removeDatabaseParameterListener( _rListener ); -} - -//============================================================================== -// com::sun::star::sdb::XCompletedExecution -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::executeWithCompletion( const Reference< XInteractionHandler >& _rxHandler ) throw(SQLException, RuntimeException) -{ - ::osl::ClearableMutexGuard aGuard(m_aMutex); - // the difference between execute and load is, that we position on the first row in case of load - // after execute we remain before the first row - if (!isLoaded()) - { - aGuard.clear(); - load_impl(sal_False, sal_False, _rxHandler); - } - else - { - EventObject event(static_cast< XWeak* >(this)); - if ( !impl_approveRowChange_throw( event, true, aGuard ) ) - return; - - // we're loaded and somebody want's to execute ourself -> this means a reload - reload_impl(sal_False, _rxHandler); - } -} - -//============================================================================== -// com::sun::star::sdbc::XRowSet -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::execute() throw( SQLException, RuntimeException ) -{ - ::osl::ResettableMutexGuard aGuard(m_aMutex); - // if somebody calls an execute and we're not loaded we reroute this call to our load method. - - // the difference between execute and load is, that we position on the first row in case of load - // after execute we remain before the first row - if (!isLoaded()) - { - aGuard.clear(); - load_impl(sal_False, sal_False); - } - else - { - EventObject event(static_cast< XWeak* >(this)); - if ( !impl_approveRowChange_throw( event, true, aGuard ) ) - return; - - // we're loaded and somebody want's to execute ourself -> this means a reload - reload_impl(sal_False); - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::addRowSetListener(const Reference<XRowSetListener>& _rListener) throw( RuntimeException ) -{ - if (m_xAggregateAsRowSet.is()) - m_xAggregateAsRowSet->addRowSetListener(_rListener); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::removeRowSetListener(const Reference<XRowSetListener>& _rListener) throw( RuntimeException ) -{ - if (m_xAggregateAsRowSet.is()) - m_xAggregateAsRowSet->removeRowSetListener(_rListener); -} - -//============================================================================== -// com::sun::star::sdbc::XResultSet -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::next() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->next(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::isBeforeFirst() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->isBeforeFirst(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::isAfterLast() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->isAfterLast(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::isFirst() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->isFirst(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::isLast() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->isLast(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::beforeFirst() throw( SQLException, RuntimeException ) -{ - m_xAggregateAsRowSet->beforeFirst(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::afterLast() throw( SQLException, RuntimeException ) -{ - m_xAggregateAsRowSet->afterLast(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::first() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->first(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::last() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->last(); -} - -//------------------------------------------------------------------------------ -sal_Int32 SAL_CALL ODatabaseForm::getRow() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->getRow(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::absolute(sal_Int32 row) throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->absolute(row); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::relative(sal_Int32 rows) throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->relative(rows); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::previous() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->previous(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::refreshRow() throw( SQLException, RuntimeException ) -{ - m_xAggregateAsRowSet->refreshRow(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::rowUpdated() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->rowUpdated(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::rowInserted() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->rowInserted(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::rowDeleted() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->rowDeleted(); -} - -//------------------------------------------------------------------------------ -InterfaceRef SAL_CALL ODatabaseForm::getStatement() throw( SQLException, RuntimeException ) -{ - return m_xAggregateAsRowSet->getStatement(); -} - -// com::sun::star::sdbc::XResultSetUpdate -// exceptions during insert update and delete will be forwarded to the errorlistener -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::insertRow() throw( SQLException, RuntimeException ) -{ - try - { - Reference<XResultSetUpdate> xUpdate; - if (query_aggregation( m_xAggregate, xUpdate)) - xUpdate->insertRow(); - } - catch(const RowSetVetoException&) - { - throw; - } - catch(const SQLException& eDb) - { - onError(eDb, FRM_RES_STRING(RID_STR_ERR_INSERTRECORD)); - throw; - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::updateRow() throw( SQLException, RuntimeException ) -{ - try - { - Reference<XResultSetUpdate> xUpdate; - if (query_aggregation( m_xAggregate, xUpdate)) - xUpdate->updateRow(); - } - catch(const RowSetVetoException&) - { - throw; - } - catch(const SQLException& eDb) - { - onError(eDb, FRM_RES_STRING(RID_STR_ERR_UPDATERECORD)); - throw; - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::deleteRow() throw( SQLException, RuntimeException ) -{ - try - { - Reference<XResultSetUpdate> xUpdate; - if (query_aggregation( m_xAggregate, xUpdate)) - xUpdate->deleteRow(); - } - catch(const RowSetVetoException&) - { - throw; - } - catch(const SQLException& eDb) - { - onError(eDb, FRM_RES_STRING(RID_STR_ERR_DELETERECORD)); - throw; - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::cancelRowUpdates() throw( SQLException, RuntimeException ) -{ - try - { - Reference<XResultSetUpdate> xUpdate; - if (query_aggregation( m_xAggregate, xUpdate)) - xUpdate->cancelRowUpdates(); - } - catch(const RowSetVetoException&) - { - throw; - } - catch(const SQLException& eDb) - { - onError(eDb, FRM_RES_STRING(RID_STR_ERR_INSERTRECORD)); - throw; - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::moveToInsertRow() throw( SQLException, RuntimeException ) -{ - Reference<XResultSetUpdate> xUpdate; - if (query_aggregation( m_xAggregate, xUpdate)) - { - // _always_ move to the insert row - // - // Formerly, the following line was conditioned with a "not is new", means we did not move the aggregate - // to the insert row if it was already positioned there. - // - // This prevented the RowSet implementation from resetting it's column values. We, ourself, formerly - // did this reset of columns in reset_impl, where we set every column to the ControlDefault, or, if this - // was not present, to NULL. However, the problem with setting to NULL was #88888#, the problem with - // _not_ setting to NULL (which was the original fix for #88888#) was #97955#. - // - // So now we - // * move our aggregate to the insert row - // * in reset_impl - // - set the control defaults into the columns if not void - // - do _not_ set the columns to NULL if no control default is set - // - // Still, there is #72756#. During fixing this bug, DG introduced not calling the aggregate here. So - // in theory, we re-introduced #72756#. But the bug described therein does not happen anymore, as the - // preliminaries for it changed (no display of guessed values for new records with autoinc fields) - // - // BTW: the public Issuezilla bug is #i2815# - // - xUpdate->moveToInsertRow(); - - // then set the default values and the parameters given from the parent - reset(); - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::moveToCurrentRow() throw( SQLException, RuntimeException ) -{ - Reference<XResultSetUpdate> xUpdate; - if (query_aggregation( m_xAggregate, xUpdate)) - xUpdate->moveToCurrentRow(); -} - -// com::sun::star::sdbcx::XDeleteRows -//------------------------------------------------------------------------------ -Sequence<sal_Int32> SAL_CALL ODatabaseForm::deleteRows(const Sequence<Any>& rows) throw( SQLException, RuntimeException ) -{ - try - { - Reference<XDeleteRows> xDelete; - if (query_aggregation( m_xAggregate, xDelete)) - return xDelete->deleteRows(rows); - } - catch(const RowSetVetoException&) - { - throw; - } - catch(const SQLException& eDb) - { - onError(eDb, FRM_RES_STRING(RID_STR_ERR_DELETERECORDS)); - throw; - } - - return Sequence< sal_Int32 >(); -} - -// com::sun::star::sdbc::XParameters -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setNull(sal_Int32 parameterIndex, sal_Int32 sqlType) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setNull(parameterIndex, sqlType); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setObjectNull(sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& typeName) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setObjectNull(parameterIndex, sqlType, typeName); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setBoolean(sal_Int32 parameterIndex, sal_Bool x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setBoolean(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setByte(sal_Int32 parameterIndex, sal_Int8 x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setByte(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setShort(sal_Int32 parameterIndex, sal_Int16 x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setShort(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setInt(sal_Int32 parameterIndex, sal_Int32 x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setInt(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setLong(sal_Int32 parameterIndex, sal_Int64 x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setLong(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setFloat(sal_Int32 parameterIndex, float x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setFloat(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setDouble(sal_Int32 parameterIndex, double x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setDouble(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setString(sal_Int32 parameterIndex, const ::rtl::OUString& x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setString(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setBytes(sal_Int32 parameterIndex, const Sequence< sal_Int8 >& x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setBytes(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setDate(sal_Int32 parameterIndex, const ::com::sun::star::util::Date& x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setDate(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setTime(sal_Int32 parameterIndex, const ::com::sun::star::util::Time& x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setTime(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setTimestamp(sal_Int32 parameterIndex, const ::com::sun::star::util::DateTime& x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setTimestamp(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setBinaryStream(sal_Int32 parameterIndex, const Reference<XInputStream>& x, sal_Int32 length) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setBinaryStream(parameterIndex, x, length); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setCharacterStream(sal_Int32 parameterIndex, const Reference<XInputStream>& x, sal_Int32 length) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setCharacterStream(parameterIndex, x, length); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setObjectWithInfo(sal_Int32 parameterIndex, const Any& x, sal_Int32 targetSqlType, sal_Int32 scale) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setObjectWithInfo(parameterIndex, x, targetSqlType, scale); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setObject(sal_Int32 parameterIndex, const Any& x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setObject(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setRef(sal_Int32 parameterIndex, const Reference<XRef>& x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setRef(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setBlob(sal_Int32 parameterIndex, const Reference<XBlob>& x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setBlob(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setClob(sal_Int32 parameterIndex, const Reference<XClob>& x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setClob(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setArray(sal_Int32 parameterIndex, const Reference<XArray>& x) throw( SQLException, RuntimeException ) -{ - m_aParameterManager.setArray(parameterIndex, x); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::clearParameters() throw( SQLException, RuntimeException ) -{ - m_aParameterManager.clearParameters(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::propertyChange( const PropertyChangeEvent& evt ) throw (RuntimeException) -{ - if ( evt.Source == m_xParent ) - { - if ( evt.PropertyName == PROPERTY_ISNEW ) - { - sal_Bool bCurrentIsNew( sal_False ); - OSL_VERIFY( evt.NewValue >>= bCurrentIsNew ); - if ( !bCurrentIsNew ) - reload_impl( sal_True ); - } - return; - } - OFormComponents::propertyChange( evt ); -} - -// com::sun::star::lang::XServiceInfo -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL ODatabaseForm::getImplementationName_Static() -{ - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.forms.ODatabaseForm" ) ); -} - -//------------------------------------------------------------------------------ -Sequence< ::rtl::OUString > SAL_CALL ODatabaseForm::getCompatibleServiceNames_Static() -{ - Sequence< ::rtl::OUString > aServices( 1 ); - ::rtl::OUString* pServices = aServices.getArray(); - - *pServices++ = FRM_COMPONENT_FORM; - - return aServices; -} - -//------------------------------------------------------------------------------ -Sequence< ::rtl::OUString > SAL_CALL ODatabaseForm::getCurrentServiceNames_Static() -{ - Sequence< ::rtl::OUString > aServices( 5 ); - ::rtl::OUString* pServices = aServices.getArray(); - - *pServices++ = FRM_SUN_FORMCOMPONENT; - *pServices++ = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.FormComponents") ); - *pServices++ = FRM_SUN_COMPONENT_FORM; - *pServices++ = FRM_SUN_COMPONENT_HTMLFORM; - *pServices++ = FRM_SUN_COMPONENT_DATAFORM; - - return aServices; -} - -//------------------------------------------------------------------------------ -Sequence< ::rtl::OUString > SAL_CALL ODatabaseForm::getSupportedServiceNames_Static() -{ - return ::comphelper::concatSequences( - getCurrentServiceNames_Static(), - getCompatibleServiceNames_Static() - ); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL ODatabaseForm::getImplementationName() throw( RuntimeException ) -{ - return getImplementationName_Static(); -} - -//------------------------------------------------------------------------------ -Sequence< ::rtl::OUString > SAL_CALL ODatabaseForm::getSupportedServiceNames() throw( RuntimeException ) -{ - // the services of our aggregate - Sequence< ::rtl::OUString > aServices; - Reference< XServiceInfo > xInfo; - if (query_aggregation(m_xAggregate, xInfo)) - aServices = xInfo->getSupportedServiceNames(); - - // concat with out own services - return ::comphelper::concatSequences( - getCurrentServiceNames_Static(), - aServices - ); - // use getCurrentXXX instead of getSupportedXXX, because at runtime, we do not want to have - // the compatible names - // This is maily to be consistent with the implementation before fixing #97083#, though the - // better solution _may_ be to return the compatible names at runtime, too -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODatabaseForm::supportsService(const ::rtl::OUString& ServiceName) throw( RuntimeException ) -{ - Sequence< ::rtl::OUString > aSupported( getSupportedServiceNames() ); - const ::rtl::OUString* pArray = aSupported.getConstArray(); - for( sal_Int32 i = 0; i < aSupported.getLength(); ++i, ++pArray ) - if( pArray->equals( ServiceName ) ) - return sal_True; - return sal_False; -} - -//============================================================================== -// com::sun::star::io::XPersistObject -//------------------------------------------------------------------------------ - -const sal_uInt16 CYCLE = 0x0001; -const sal_uInt16 DONTAPPLYFILTER = 0x0002; - -//------------------------------------------------------------------------------ -::rtl::OUString ODatabaseForm::getServiceName() throw( RuntimeException ) -{ - return FRM_COMPONENT_FORM; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::write(const Reference<XObjectOutputStream>& _rxOutStream) throw( IOException, RuntimeException ) -{ - DBG_ASSERT(m_xAggregateSet.is(), "ODatabaseForm::write : only to be called if the aggregate exists !"); - - // all children - OFormComponents::write(_rxOutStream); - - // version - _rxOutStream->writeShort(0x0003); - - // Name - _rxOutStream << m_sName; - - ::rtl::OUString sDataSource; - if (m_xAggregateSet.is()) - m_xAggregateSet->getPropertyValue(PROPERTY_DATASOURCE) >>= sDataSource; - _rxOutStream << sDataSource; - - // former CursorSource - ::rtl::OUString sCommand; - if (m_xAggregateSet.is()) - m_xAggregateSet->getPropertyValue(PROPERTY_COMMAND) >>= sCommand; - _rxOutStream << sCommand; - - // former MasterFields - _rxOutStream << m_aMasterFields; - // former DetailFields - _rxOutStream << m_aDetailFields; - - // former DataSelectionType - DataSelectionType eTranslated = DataSelectionType_TABLE; - if (m_xAggregateSet.is()) - { - sal_Int32 nCommandType = 0; - m_xAggregateSet->getPropertyValue(PROPERTY_COMMANDTYPE) >>= nCommandType; - switch (nCommandType) - { - case CommandType::TABLE : eTranslated = DataSelectionType_TABLE; break; - case CommandType::QUERY : eTranslated = DataSelectionType_QUERY; break; - case CommandType::COMMAND: - { - sal_Bool bEscapeProcessing = getBOOL(m_xAggregateSet->getPropertyValue(PROPERTY_ESCAPE_PROCESSING)); - eTranslated = bEscapeProcessing ? DataSelectionType_SQL : DataSelectionType_SQLPASSTHROUGH; - } - break; - default : OSL_FAIL("ODatabaseForm::write : wrong CommandType !"); - } - } - _rxOutStream->writeShort((sal_Int16)eTranslated); // former DataSelectionType - - // very old versions expect a CursorType here - _rxOutStream->writeShort(DatabaseCursorType_KEYSET); - - _rxOutStream->writeBoolean(m_eNavigation != NavigationBarMode_NONE); - - // former DataEntry - if (m_xAggregateSet.is()) - _rxOutStream->writeBoolean(getBOOL(m_xAggregateSet->getPropertyValue(PROPERTY_INSERTONLY))); - else - _rxOutStream->writeBoolean(sal_False); - - _rxOutStream->writeBoolean(m_bAllowInsert); - _rxOutStream->writeBoolean(m_bAllowUpdate); - _rxOutStream->writeBoolean(m_bAllowDelete); - - // html form stuff - ::rtl::OUString sTmp = INetURLObject::decode( m_aTargetURL, '%', INetURLObject::DECODE_UNAMBIGUOUS); - _rxOutStream << sTmp; - _rxOutStream->writeShort( (sal_Int16)m_eSubmitMethod ); - _rxOutStream->writeShort( (sal_Int16)m_eSubmitEncoding ); - _rxOutStream << m_aTargetFrame; - - // version 2 didn't know some options and the "default" state - sal_Int32 nCycle = TabulatorCycle_RECORDS; - if (m_aCycle.hasValue()) - { - ::cppu::enum2int(nCycle, m_aCycle); - if (m_aCycle == TabulatorCycle_PAGE) - // unknown in earlier versions - nCycle = TabulatorCycle_RECORDS; - } - _rxOutStream->writeShort((sal_Int16) nCycle); - - _rxOutStream->writeShort((sal_Int16)m_eNavigation); - - ::rtl::OUString sFilter; - ::rtl::OUString sOrder; - if (m_xAggregateSet.is()) - { - m_xAggregateSet->getPropertyValue(PROPERTY_FILTER) >>= sFilter; - m_xAggregateSet->getPropertyValue(PROPERTY_SORT) >>= sOrder; - } - _rxOutStream << sFilter; - _rxOutStream << sOrder; - - - // version 3 - sal_uInt16 nAnyMask = 0; - if (m_aCycle.hasValue()) - nAnyMask |= CYCLE; - - if (m_xAggregateSet.is() && !getBOOL(m_xAggregateSet->getPropertyValue(PROPERTY_APPLYFILTER))) - nAnyMask |= DONTAPPLYFILTER; - - _rxOutStream->writeShort(nAnyMask); - - if (nAnyMask & CYCLE) - { - sal_Int32 nRealCycle = 0; - ::cppu::enum2int(nRealCycle, m_aCycle); - _rxOutStream->writeShort((sal_Int16)nRealCycle); - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::read(const Reference<XObjectInputStream>& _rxInStream) throw( IOException, RuntimeException ) -{ - DBG_ASSERT(m_xAggregateSet.is(), "ODatabaseForm::read : only to be called if the aggregate exists !"); - - OFormComponents::read(_rxInStream); - - // version - sal_uInt16 nVersion = _rxInStream->readShort(); - - _rxInStream >> m_sName; - - ::rtl::OUString sAggregateProp; - _rxInStream >> sAggregateProp; - if (m_xAggregateSet.is()) - m_xAggregateSet->setPropertyValue(PROPERTY_DATASOURCE, makeAny(sAggregateProp)); - _rxInStream >> sAggregateProp; - if (m_xAggregateSet.is()) - m_xAggregateSet->setPropertyValue(PROPERTY_COMMAND, makeAny(sAggregateProp)); - - _rxInStream >> m_aMasterFields; - _rxInStream >> m_aDetailFields; - - sal_Int16 nCursorSourceType = _rxInStream->readShort(); - sal_Int32 nCommandType = 0; - switch ((DataSelectionType)nCursorSourceType) - { - case DataSelectionType_TABLE : nCommandType = CommandType::TABLE; break; - case DataSelectionType_QUERY : nCommandType = CommandType::QUERY; break; - case DataSelectionType_SQL: - case DataSelectionType_SQLPASSTHROUGH: - { - nCommandType = CommandType::COMMAND; - sal_Bool bEscapeProcessing = ((DataSelectionType)nCursorSourceType) != DataSelectionType_SQLPASSTHROUGH; - m_xAggregateSet->setPropertyValue(PROPERTY_ESCAPE_PROCESSING, makeAny((sal_Bool)bEscapeProcessing)); - } - break; - default : OSL_FAIL("ODatabaseForm::read : wrong CommandType !"); - } - if (m_xAggregateSet.is()) - m_xAggregateSet->setPropertyValue(PROPERTY_COMMANDTYPE, makeAny(nCommandType)); - - // obsolete - _rxInStream->readShort(); - - // navigation mode was a boolean in version 1 - // war in der version 1 ein sal_Bool - sal_Bool bNavigation = _rxInStream->readBoolean(); - if (nVersion == 1) - m_eNavigation = bNavigation ? NavigationBarMode_CURRENT : NavigationBarMode_NONE; - - sal_Bool bInsertOnly = _rxInStream->readBoolean(); - if (m_xAggregateSet.is()) - m_xAggregateSet->setPropertyValue(PROPERTY_INSERTONLY, makeAny(bInsertOnly)); - - m_bAllowInsert = _rxInStream->readBoolean(); - m_bAllowUpdate = _rxInStream->readBoolean(); - m_bAllowDelete = _rxInStream->readBoolean(); - - // html stuff - ::rtl::OUString sTmp; - _rxInStream >> sTmp; - m_aTargetURL = INetURLObject::decode( sTmp, '%', INetURLObject::DECODE_UNAMBIGUOUS); - m_eSubmitMethod = (FormSubmitMethod)_rxInStream->readShort(); - m_eSubmitEncoding = (FormSubmitEncoding)_rxInStream->readShort(); - _rxInStream >> m_aTargetFrame; - - if (nVersion > 1) - { - sal_Int32 nCycle = _rxInStream->readShort(); - m_aCycle = ::cppu::int2enum(nCycle, ::getCppuType(static_cast<const TabulatorCycle*>(NULL))); - m_eNavigation = (NavigationBarMode)_rxInStream->readShort(); - - _rxInStream >> sAggregateProp; - setPropertyValue(PROPERTY_FILTER, makeAny(sAggregateProp)); - - _rxInStream >> sAggregateProp; - if (m_xAggregateSet.is()) - m_xAggregateSet->setPropertyValue(PROPERTY_SORT, makeAny(sAggregateProp)); - } - - sal_uInt16 nAnyMask = 0; - if (nVersion > 2) - { - nAnyMask = _rxInStream->readShort(); - if (nAnyMask & CYCLE) - { - sal_Int32 nCycle = _rxInStream->readShort(); - m_aCycle = ::cppu::int2enum(nCycle, ::getCppuType(static_cast<const TabulatorCycle*>(NULL))); - } - else - m_aCycle.clear(); - } - if (m_xAggregateSet.is()) - m_xAggregateSet->setPropertyValue(PROPERTY_APPLYFILTER, makeAny((sal_Bool)((nAnyMask & DONTAPPLYFILTER) == 0))); -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::implInserted( const ElementDescription* _pElement ) -{ - OFormComponents::implInserted( _pElement ); - - Reference< XSQLErrorBroadcaster > xBroadcaster( _pElement->xInterface, UNO_QUERY ); - Reference< XForm > xForm ( _pElement->xInterface, UNO_QUERY ); - - if ( xBroadcaster.is() && !xForm.is() ) - { // the object is an error broadcaster, but no form itself -> add ourself as listener - xBroadcaster->addSQLErrorListener( this ); - } -} - -//------------------------------------------------------------------------------ -void ODatabaseForm::implRemoved(const InterfaceRef& _rxObject) -{ - OFormComponents::implRemoved( _rxObject ); - - Reference<XSQLErrorBroadcaster> xBroadcaster(_rxObject, UNO_QUERY); - Reference<XForm> xForm(_rxObject, UNO_QUERY); - if (xBroadcaster.is() && !xForm.is()) - { // the object is an error broadcaster, but no form itself -> remove ourself as listener - xBroadcaster->removeSQLErrorListener(this); - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::errorOccured(const SQLErrorEvent& _rEvent) throw( RuntimeException ) -{ - // give it to my own error listener - onError(_rEvent); - // TODO : think about extending the chain with an SQLContext object saying - // "this was an error of one of my children" -} - -// com::sun::star::container::XNamed -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL ODatabaseForm::getName() throw( RuntimeException ) -{ - ::rtl::OUString sReturn; - OPropertySetHelper::getFastPropertyValue(PROPERTY_ID_NAME) >>= sReturn; - return sReturn; -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODatabaseForm::setName(const ::rtl::OUString& aName) throw( RuntimeException ) -{ - setFastPropertyValue(PROPERTY_ID_NAME, makeAny(aName)); -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/DatabaseForm.hxx b/forms/source/component/DatabaseForm.hxx deleted file mode 100644 index fb8984b45..000000000 --- a/forms/source/component/DatabaseForm.hxx +++ /dev/null @@ -1,569 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_DATABASEFORM_HXX_ -#define _FRM_DATABASEFORM_HXX_ - -#include "propertybaghelper.hxx" -#include <com/sun/star/sdbc/XDataSource.hpp> -#include <com/sun/star/sdb/XSQLErrorListener.hpp> -#include <com/sun/star/io/XPersistObject.hpp> -#include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp> -#include <com/sun/star/form/FormSubmitMethod.hpp> -#include <com/sun/star/form/FormSubmitEncoding.hpp> -#include <com/sun/star/form/XSubmit.hpp> -#include <com/sun/star/form/XReset.hpp> -#include <com/sun/star/form/XDatabaseParameterBroadcaster2.hpp> -#include <com/sun/star/sdb/XCompletedExecution.hpp> -#include <com/sun/star/sdbc/XRowSet.hpp> -#include <com/sun/star/sdbcx/XDeleteRows.hpp> -#include <com/sun/star/sdbc/XResultSetUpdate.hpp> -#include <com/sun/star/sdb/XRowSetApproveListener.hpp> -#include <com/sun/star/sdb/XRowSetApproveBroadcaster.hpp> -#include <com/sun/star/form/NavigationBarMode.hpp> -#include <com/sun/star/form/XLoadable.hpp> -#include <com/sun/star/form/XLoadListener.hpp> -#include <com/sun/star/form/XForm.hpp> -#include <com/sun/star/awt/XTabControllerModel.hpp> -#include <com/sun/star/script/XEventAttacherManager.hpp> -#include <com/sun/star/sdbc/XRowSetListener.hpp> -#include <com/sun/star/sdb/XResultSetAccess.hpp> -#include <com/sun/star/sdbc/XCloseable.hpp> -#include <com/sun/star/container/XNamed.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/sdbc/XParameters.hpp> -#include <com/sun/star/sdbc/XConnection.hpp> -#include <com/sun/star/task/XInteractionHandler.hpp> -#include <com/sun/star/beans/XPropertyContainer.hpp> -#include <com/sun/star/beans/XPropertyAccess.hpp> -#include <com/sun/star/sdbc/XWarningsSupplier.hpp> - - -#include <tools/link.hxx> -#include "InterfaceContainer.hxx" - -#include <connectivity/parameters.hxx> -#include <connectivity/filtermanager.hxx> -#include <connectivity/warningscontainer.hxx> - -#include "listenercontainers.hxx" -#include "ids.hxx" -#include <comphelper/propmultiplex.hxx> -#include <comphelper/uno3.hxx> -#include <comphelper/proparrhlp.hxx> -#include <cppuhelper/implbase12.hxx> -#include <cppuhelper/implbase4.hxx> -#include <cppuhelper/implbase7.hxx> - -namespace com { namespace sun { namespace star { namespace sdbc { - class SQLException; -} } } } - -class Timer; -class INetMIMEMessage; - -//......................................................................... -namespace frm -{ -//......................................................................... - -//======================================================================== -//= html tools -//======================================================================== - -const sal_uInt16 SUCCESSFUL_REPRESENT_TEXT = 0x0001; -const sal_uInt16 SUCCESSFUL_REPRESENT_FILE = 0x0002; - -//------------------------------------------------------------------------------ -class HtmlSuccessfulObj -{ -public: - ::rtl::OUString aName; - ::rtl::OUString aValue; - sal_uInt16 nRepresentation; - - HtmlSuccessfulObj( const ::rtl::OUString& _rName, const ::rtl::OUString& _rValue, - sal_uInt16 _nRepresent = SUCCESSFUL_REPRESENT_TEXT ) - :aName( _rName ) - ,aValue( _rValue ) - ,nRepresentation( _nRepresent ) - { - } - - HtmlSuccessfulObj() - { - } -}; - - -DECLARE_STL_VECTOR(HtmlSuccessfulObj, HtmlSuccessfulObjList); - -//======================================================================== -class OGroupManager; -class OFormSubmitResetThread; -typedef ::cppu::ImplHelper12 < ::com::sun::star::form::XForm - , ::com::sun::star::awt::XTabControllerModel - , ::com::sun::star::form::XLoadListener - , ::com::sun::star::sdbc::XRowSetListener - , ::com::sun::star::sdb::XRowSetApproveListener - , ::com::sun::star::form::XDatabaseParameterBroadcaster2 - , ::com::sun::star::sdb::XSQLErrorListener - , ::com::sun::star::sdb::XSQLErrorBroadcaster - , ::com::sun::star::form::XReset - , ::com::sun::star::form::XSubmit - , ::com::sun::star::form::XLoadable - , ::com::sun::star::container::XNamed - > ODatabaseForm_BASE1; - - -typedef ::cppu::ImplHelper4 < ::com::sun::star::lang::XServiceInfo - , ::com::sun::star::beans::XPropertyContainer - , ::com::sun::star::beans::XPropertyAccess - , ::com::sun::star::sdbc::XWarningsSupplier - > ODatabaseForm_BASE2; - -typedef ::cppu::ImplHelper7< ::com::sun::star::sdbc::XCloseable, - ::com::sun::star::sdbc::XRowSet, - ::com::sun::star::sdb::XCompletedExecution, - ::com::sun::star::sdb::XRowSetApproveBroadcaster, - ::com::sun::star::sdbc::XResultSetUpdate, - ::com::sun::star::sdbcx::XDeleteRows, - ::com::sun::star::sdbc::XParameters > ODatabaseForm_BASE3; - - -class ODatabaseForm :public OFormComponents - ,public OPropertySetAggregationHelper - ,public OPropertyChangeListener - ,public ODatabaseForm_BASE1 - ,public ODatabaseForm_BASE2 - ,public ODatabaseForm_BASE3 - ,public IPropertyBagHelperContext -{ - friend class OFormSubmitResetThread; - - OImplementationIdsRef m_aHoldIdHelper; - - // listener administration - ::cppu::OInterfaceContainerHelper m_aLoadListeners; - ::cppu::OInterfaceContainerHelper m_aRowSetApproveListeners; - ::cppu::OInterfaceContainerHelper m_aRowSetListeners; - ::cppu::OInterfaceContainerHelper m_aSubmitListeners; - ::cppu::OInterfaceContainerHelper m_aErrorListeners; - ResetListeners m_aResetListeners; - ::osl::Mutex m_aResetSafety; - ::com::sun::star::uno::Any m_aCycle; - ::com::sun::star::uno::Any m_aIgnoreResult; // set when we are a subform and our master form positioned on a new row - ::com::sun::star::uno::Sequence< ::rtl::OUString > m_aMasterFields; - ::com::sun::star::uno::Sequence< ::rtl::OUString > m_aDetailFields; - - // the object doin' most of the work - an SDB-rowset - ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation> m_xAggregate; - // same object, interface as member because of performance reasons - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet> m_xAggregateAsRowSet; - - PropertyBagHelper m_aPropertyBagHelper; - ::dbtools::WarningsContainer m_aWarnings; - OPropertyChangeMultiplexer* m_pAggregatePropertyMultiplexer; - // Verwaltung der ControlGruppen - OGroupManager* m_pGroupManager; - ::dbtools::ParameterManager m_aParameterManager; - ::dbtools::FilterManager m_aFilterManager; - Timer* m_pLoadTimer; - - OFormSubmitResetThread* m_pThread; - ::rtl::OUString m_sCurrentErrorContext; - // will be used as additional context information - // when an exception is catched and forwarded to the listeners - - sal_Int32 m_nResetsPending; -// <overwritten_properties> - sal_Int32 m_nPrivileges; - sal_Bool m_bInsertOnly; -// </overwritten_properties> - -// <properties> - ::com::sun::star::uno::Any m_aControlBorderColorFocus; - ::com::sun::star::uno::Any m_aControlBorderColorMouse; - ::com::sun::star::uno::Any m_aControlBorderColorInvalid; - ::com::sun::star::uno::Any m_aDynamicControlBorder; - ::rtl::OUString m_sName; - ::rtl::OUString m_aTargetURL; - ::rtl::OUString m_aTargetFrame; - ::com::sun::star::form::FormSubmitMethod m_eSubmitMethod; - ::com::sun::star::form::FormSubmitEncoding m_eSubmitEncoding; - ::com::sun::star::form::NavigationBarMode m_eNavigation; - sal_Bool m_bAllowInsert : 1; - sal_Bool m_bAllowUpdate : 1; - sal_Bool m_bAllowDelete : 1; -// </properties> - sal_Bool m_bLoaded : 1; - sal_Bool m_bSubForm : 1; - sal_Bool m_bForwardingConnection : 1; // sal_True if we're setting the ActiveConnection on the aggregate - sal_Bool m_bSharingConnection : 1; // sal_True if the connection we're using is shared with out parent - -public: - ODatabaseForm(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - ODatabaseForm( const ODatabaseForm& _cloneSource ); - ~ODatabaseForm(); - - // UNO binding - DECLARE_UNO3_AGG_DEFAULTS(ODatabaseForm, OFormComponents); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - // XTypeProvider - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); - - // ::com::sun::star::lang::XComponent - virtual void SAL_CALL disposing(); - - // property handling - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); - virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper(); - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception ); - - ::com::sun::star::uno::Any SAL_CALL getFastPropertyValue( sal_Int32 nHandle ) - throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - void fire( sal_Int32 * pnHandles, const ::com::sun::star::uno::Any * pNewValues, const ::com::sun::star::uno::Any * pOldValues, sal_Int32 nCount, sal_Bool bVetoable ); - - // IPropertyBagHelperContext - virtual ::osl::Mutex& getMutex(); - virtual void describeFixedAndAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rFixedProperties, - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rAggregateProperties - ) const; - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XMultiPropertySet > - getPropertiesInterface(); - - // com::sun::star::beans::XPropertyState - virtual ::com::sun::star::beans::PropertyState getPropertyStateByHandle(sal_Int32 nHandle); - virtual void setPropertyToDefaultByHandle(sal_Int32 nHandle); - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle(sal_Int32 nHandle) const; - - // com::sun::star::sdbc::XSQLErrorBroadcaster - virtual void SAL_CALL addSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::form::XForm - // nothing to implement - - // com::sun::star::form::XReset - virtual void SAL_CALL reset() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addResetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeResetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::form::XSubmit - virtual void SAL_CALL submit(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& aControl, const ::com::sun::star::awt::MouseEvent& aMouseEvt) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addSubmitListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XSubmitListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeSubmitListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XSubmitListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::container::XChild - virtual InterfaceRef SAL_CALL getParent() throw ( ::com::sun::star::uno::RuntimeException) { return OFormComponents::getParent(); } - virtual void SAL_CALL setParent(const InterfaceRef& Parent) throw ( :: com::sun::star::lang::NoSupportException , ::com::sun::star::uno::RuntimeException); - - // com::sun::star::container::XNamed - virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setName(const ::rtl::OUString& aName) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::awt::XTabControllerModel - virtual sal_Bool SAL_CALL getGroupControl() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setGroupControl(sal_Bool /*_bGroupControl*/) throw(::com::sun::star::uno::RuntimeException) { } - virtual void SAL_CALL setControlModels(const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > >& _rControls) throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > > SAL_CALL getControlModels() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setGroup(const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > >& _rGroup, const ::rtl::OUString& _rGroupName) throw(::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getGroupCount() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL getGroup(sal_Int32 _nGroup, ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > >& _rxGroup, ::rtl::OUString& _rName) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL getGroupByName(const ::rtl::OUString& _rName, ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > >& _rxGroup) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::lang::XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::form::XLoadListener - virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL unloading(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL unloaded(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL reloading(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL reloaded(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::form::XLoadable - virtual void SAL_CALL load() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL unload() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL reload() throw(::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isLoaded() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addLoadListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeLoadListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdbc::XCloseable - virtual void SAL_CALL close() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdbc::XRowSetListener - virtual void SAL_CALL cursorMoved(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL rowChanged(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL rowSetChanged(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdb::XRowSetApproveListener - virtual sal_Bool SAL_CALL approveCursorMove(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL approveRowChange(const ::com::sun::star::sdb::RowChangeEvent& event) throw(::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL approveRowSetChange(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdb::XRowSetApproveBroadcaster - virtual void SAL_CALL addRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - - // com::sun:star::form::XDatabaseParameterBroadcaster2 - virtual void SAL_CALL addDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - - // com::sun:star::form::XDatabaseParameterBroadcaster - virtual void SAL_CALL addParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdbc::XRowSet - virtual void SAL_CALL execute() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addRowSetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSetListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeRowSetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSetListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdb::XCompletedExecution - virtual void SAL_CALL executeWithCompletion( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& handler ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdbc::XResultSet - virtual sal_Bool SAL_CALL next() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isBeforeFirst() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isAfterLast() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isFirst() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isLast() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL beforeFirst() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL afterLast() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL first() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL last() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getRow() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL absolute(sal_Int32 row) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL relative(sal_Int32 rows) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL previous() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL refreshRow() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL rowUpdated() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL rowInserted() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL rowDeleted() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual InterfaceRef SAL_CALL getStatement() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdbc::XResultSetUpdate - virtual void SAL_CALL insertRow() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL updateRow() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL deleteRow() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL cancelRowUpdates() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL moveToInsertRow() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL moveToCurrentRow() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdbcx::XDeleteRows - virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL deleteRows(const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any>& rows) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - - // com::sun::star::lang::XServiceInfo - virtual sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw(::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::lang::XServiceInfo - static version - static ::rtl::OUString SAL_CALL getImplementationName_Static(); - static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static(); - static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getCurrentServiceNames_Static(); - static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getCompatibleServiceNames_Static(); - static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory ); - - // com::sun::star::io::XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdbc::XSQLErrorListener - virtual void SAL_CALL errorOccured(const ::com::sun::star::sdb::SQLErrorEvent& aEvent) throw(::com::sun::star::uno::RuntimeException); - - // com::sun::star::sdbc::XParameters - virtual void SAL_CALL setNull(sal_Int32 parameterIndex, sal_Int32 sqlType) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setObjectNull(sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& typeName) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setBoolean(sal_Int32 parameterIndex, sal_Bool x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setByte(sal_Int32 parameterIndex, sal_Int8 x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setShort(sal_Int32 parameterIndex, sal_Int16 x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setInt(sal_Int32 parameterIndex, sal_Int32 x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setLong(sal_Int32 parameterIndex, sal_Int64 x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setFloat(sal_Int32 parameterIndex, float x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setDouble(sal_Int32 parameterIndex, double x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setString(sal_Int32 parameterIndex, const ::rtl::OUString& x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setBytes(sal_Int32 parameterIndex, const ::com::sun::star::uno::Sequence< sal_Int8 >& x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setDate(sal_Int32 parameterIndex, const ::com::sun::star::util::Date& x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setTime(sal_Int32 parameterIndex, const ::com::sun::star::util::Time& x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setTimestamp(sal_Int32 parameterIndex, const ::com::sun::star::util::DateTime& x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setBinaryStream(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream>& x, sal_Int32 length) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setCharacterStream(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream>& x, sal_Int32 length) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setObject(sal_Int32 parameterIndex, const ::com::sun::star::uno::Any& x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setObjectWithInfo(sal_Int32 parameterIndex, const ::com::sun::star::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setRef(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef>& x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setBlob(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob>& x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setClob(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob>& x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setArray(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray>& x) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL clearParameters() throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - - // XPropertyChangeListener - virtual void SAL_CALL propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw (::com::sun::star::uno::RuntimeException); - - // XPropertyContainer - virtual void SAL_CALL addProperty( const ::rtl::OUString& Name, ::sal_Int16 Attributes, const ::com::sun::star::uno::Any& DefaultValue ) throw (::com::sun::star::beans::PropertyExistException, ::com::sun::star::beans::IllegalTypeException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeProperty( const ::rtl::OUString& Name ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::NotRemoveableException, ::com::sun::star::uno::RuntimeException); - - // XPropertyAccess - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getPropertyValues( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aProps ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - using OPropertySetAggregationHelper::setPropertyValues; - - // XWarningsSupplier - virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ) throw (::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL clearWarnings( ) throw (::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - - // XCloneable - virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException); - - inline void submitNBC( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& Control, const ::com::sun::star::awt::MouseEvent& MouseEvt ); - -protected: - // OPropertySetAggregationHelper overridables - virtual void SAL_CALL forwardingPropertyValue( sal_Int32 _nHandle ); - virtual void SAL_CALL forwardedPropertyValue( sal_Int32 _nHandle, bool _bSuccess ); - - // OInterfaceContainer overridables - virtual void implInserted( const ElementDescription* _pElement ); - virtual void implRemoved(const InterfaceRef& _rxObject); - - // OPropertyChangeListener - virtual void _propertyChanged( const ::com::sun::star::beans::PropertyChangeEvent& ) throw(::com::sun::star::uno::RuntimeException); - -private: - sal_Bool executeRowSet(::osl::ResettableMutexGuard& _rClearForNotifies, sal_Bool bMoveToFirst = sal_True, - const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxCompletionHandler = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >()); - bool fillParameters(::osl::ResettableMutexGuard& _rClearForNotifies, - const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxCompletionHandler = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >()); - void updateParameterInfo(); - bool hasValidParent() const; - - // impl methods - void load_impl(sal_Bool bCausedByParentForm, sal_Bool bMoveToFirst = sal_True, - const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxCompletionHandler = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >()) - throw(::com::sun::star::uno::RuntimeException); - void reload_impl(sal_Bool bMoveToFirst, - const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxCompletionHandler = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >()) - throw(::com::sun::star::uno::RuntimeException); - void submit_impl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& Control, const ::com::sun::star::awt::MouseEvent& MouseEvt, bool _bAproveByListeners); - void reset_impl(bool _bAproveByListeners); - - sal_Bool implEnsureConnection(); - - // connection sharing - - /// checks if we can re-use (aka share) the connection of the given parent - sal_Bool canShareConnection( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxParentProps ); - - /// starts sharing the connection with the parent - void doShareConnection( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxParentProps ); - - /// stops sharing the connection with the parent - void stopSharingConnection( ); - - /// called when the connection which we share with our parent is beeing disposed - void disposingSharedConnection( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConn ); - - /// checks if we currently share our connection with our parent - sal_Bool isSharingConnection( ) const { return m_bSharingConnection; } - - /** calls our row set approval listeners - - @param _rEvent - the event to notify - @param _bAllowSQLException - <TRUE/> if SQLExceptions are allowed to leave the method - @param _rGuard - the guard to be cleared before actually calling into the listeners, but after making - a copy of the listeners array to operate on. - @return - <TRUE/> if and only if the execution has been approved - */ - bool impl_approveRowChange_throw( - const ::com::sun::star::lang::EventObject& _rEvent, - const bool _bAllowSQLException, - ::osl::ClearableMutexGuard& _rGuard - ); - - /// invalidate all our parameter-related stuff - void invlidateParameters(); - - void saveInsertOnlyState( ); - void restoreInsertOnlyState( ); - - // error handling - void onError(const ::com::sun::star::sdb::SQLErrorEvent& _rEvent); - void onError(const ::com::sun::star::sdbc::SQLException&, const ::rtl::OUString& _rContextDescription); - - // html tools - ::rtl::OUString GetDataEncoded(bool _bURLEncoded,const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt); - ::rtl::OUString GetDataURLEncoded(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt); - ::rtl::OUString GetDataTextEncoded(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt); - ::com::sun::star::uno::Sequence<sal_Int8> GetDataMultiPartEncoded(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt, - ::rtl::OUString& rContentType); - - void AppendComponent(HtmlSuccessfulObjList& rList, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& xComponentSet, const ::rtl::OUString& rNamePrefix, - const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& rxSubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt); - - void FillSuccessfulList(HtmlSuccessfulObjList& rList, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& rxSubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt); - - void InsertTextPart(INetMIMEMessage& rParent, const ::rtl::OUString& rName, const ::rtl::OUString& rData); - sal_Bool InsertFilePart(INetMIMEMessage& rParent, const ::rtl::OUString& rName, const ::rtl::OUString& rFileName); - void Encode(::rtl::OUString& rString) const; - - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > getConnection(); - - void impl_createLoadTimer(); - - void impl_construct(); - - DECL_LINK( OnTimeout, void* ); -protected: - using OPropertySetHelper::getPropertyValues; -}; - -inline void ODatabaseForm::submitNBC(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& Control, const ::com::sun::star::awt::MouseEvent& MouseEvt) -{ - submit_impl(Control, MouseEvt, sal_False); -} - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FRM_DATABASEFORM_HXX_ - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Date.cxx b/forms/source/component/Date.cxx deleted file mode 100644 index decd3a23c..000000000 --- a/forms/source/component/Date.cxx +++ /dev/null @@ -1,365 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "Date.hxx" -#include <tools/debug.hxx> -#include <tools/date.hxx> -#include <connectivity/dbconversion.hxx> -#include <com/sun/star/sdbc/DataType.hpp> - -using namespace dbtools; - -//......................................................................... -namespace frm -{ -//......................................................................... - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; - -//------------------------------------------------------------------ -ODateControl::ODateControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl(_rxFactory, VCL_CONTROL_DATEFIELD) -{ -} - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL ODateControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new ODateControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> ODateControl::_getTypes() -{ - return OBoundControl::_getTypes(); -} - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL ODateControl::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_DATEFIELD; - return aSupported; -} - -/*************************************************************************/ -//------------------------------------------------------------------ -InterfaceRef SAL_CALL ODateModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new ODateModel(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> ODateModel::_getTypes() -{ - return OEditBaseModel::_getTypes(); -} - -//------------------------------------------------------------------ -DBG_NAME( ODateModel ) -//------------------------------------------------------------------ -ODateModel::ODateModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OEditBaseModel( _rxFactory, VCL_CONTROLMODEL_DATEFIELD, FRM_SUN_CONTROL_DATEFIELD, sal_True, sal_True ) - // use the old control name for compytibility reasons - ,OLimitedFormats( _rxFactory, FormComponentType::DATEFIELD ) -{ - DBG_CTOR( ODateModel, NULL ); - - m_nClassId = FormComponentType::DATEFIELD; - initValueProperty( PROPERTY_DATE, PROPERTY_ID_DATE ); - - setAggregateSet(m_xAggregateFastSet, getOriginalHandle(PROPERTY_ID_DATEFORMAT)); - - osl_incrementInterlockedCount( &m_refCount ); - try - { - if ( m_xAggregateSet.is() ) - m_xAggregateSet->setPropertyValue( PROPERTY_DATEMIN, makeAny( (sal_Int32)( ::Date( 1, 1, 1800 ).GetDate() ) ) ); - } - catch( const Exception& ) - { - OSL_FAIL( "ODateModel::ODateModel: caught an exception!" ); - } - osl_decrementInterlockedCount( &m_refCount ); -} - -//------------------------------------------------------------------------------ -ODateModel::ODateModel( const ODateModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OEditBaseModel( _pOriginal, _rxFactory ) - ,OLimitedFormats( _rxFactory, FormComponentType::DATEFIELD ) -{ - DBG_CTOR( ODateModel, NULL ); - - setAggregateSet( m_xAggregateFastSet, getOriginalHandle( PROPERTY_ID_DATEFORMAT ) ); -} - -//------------------------------------------------------------------------------ -ODateModel::~ODateModel( ) -{ - setAggregateSet(Reference< XFastPropertySet >(), -1); - DBG_DTOR( ODateModel, NULL ); -} - -// XCloneable -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( ODateModel ) - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL ODateModel::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControlModel::getSupportedServiceNames(); - - sal_Int32 nOldLen = aSupported.getLength(); - aSupported.realloc( nOldLen + 8 ); - ::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen; - - *pStoreTo++ = BINDABLE_CONTROL_MODEL; - *pStoreTo++ = DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_CONTROL_MODEL; - - *pStoreTo++ = BINDABLE_DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_BINDABLE_CONTROL_MODEL; - - *pStoreTo++ = FRM_SUN_COMPONENT_DATEFIELD; - *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_DATEFIELD; - *pStoreTo++ = BINDABLE_DATABASE_DATE_FIELD; - - return aSupported; -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL ODateModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_DATEFIELD; // old (non-sun) name for compatibility ! -} - -// XPropertySet -//------------------------------------------------------------------------------ -void ODateModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 4, OEditBaseModel ) - DECL_PROP3(DEFAULT_DATE, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID); - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - DECL_PROP1(FORMATKEY, sal_Int32, TRANSIENT); - DECL_IFACE_PROP2(FORMATSSUPPLIER, XNumberFormatsSupplier, READONLY, TRANSIENT); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODateModel::getFastPropertyValue(Any& _rValue, sal_Int32 _nHandle ) const -{ - switch (_nHandle) - { - case PROPERTY_ID_FORMATKEY: - getFormatKeyPropertyValue(_rValue); - break; - case PROPERTY_ID_FORMATSSUPPLIER: - _rValue <<= getFormatsSupplier(); - break; - default: - OEditBaseModel::getFastPropertyValue(_rValue, _nHandle); - break; - } -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL ODateModel::convertFastPropertyValue(Any& _rConvertedValue, Any& _rOldValue, - sal_Int32 _nHandle, const Any& _rValue ) throw(IllegalArgumentException) -{ - if (PROPERTY_ID_FORMATKEY == _nHandle) - return convertFormatKeyPropertyValue(_rConvertedValue, _rOldValue, _rValue); - else - return OEditBaseModel::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ODateModel::setFastPropertyValue_NoBroadcast(sal_Int32 _nHandle, const Any& _rValue) throw ( ::com::sun::star::uno::Exception) -{ - if (PROPERTY_ID_FORMATKEY == _nHandle) - setFormatKeyPropertyValue(_rValue); - else - OEditBaseModel::setFastPropertyValue_NoBroadcast(_nHandle, _rValue); -} - -// XLoadListener -//------------------------------------------------------------------------------ -void ODateModel::onConnectedDbColumn( const Reference< XInterface >& _rxForm ) -{ - OBoundControlModel::onConnectedDbColumn( _rxForm ); - Reference<XPropertySet> xField = getField(); - if (xField.is()) - { - m_bDateTimeField = sal_False; - try - { - sal_Int32 nFieldType = 0; - xField->getPropertyValue(PROPERTY_FIELDTYPE) >>= nFieldType; - m_bDateTimeField = (nFieldType == DataType::TIMESTAMP); - } - catch(Exception&) - { - } - } -} - -//------------------------------------------------------------------------------ -sal_Bool ODateModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) -{ - Any aControlValue( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) ); - if ( !compare( aControlValue, m_aSaveValue ) ) - { - if ( !aControlValue.hasValue() ) - m_xColumnUpdate->updateNull(); - else - { - try - { - util::Date aDate; - if ( !( aControlValue >>= aDate ) ) - { - sal_Int32 nAsInt(0); - aControlValue >>= nAsInt; - aDate = DBTypeConversion::toDate(nAsInt); - } - - if ( !m_bDateTimeField ) - m_xColumnUpdate->updateDate( aDate ); - else - { - util::DateTime aDateTime = m_xColumn->getTimestamp(); - aDateTime.Day = aDate.Day; - aDateTime.Month = aDate.Month; - aDateTime.Year = aDate.Year; - m_xColumnUpdate->updateTimestamp( aDateTime ); - } - } - catch(Exception&) - { - return sal_False; - } - } - m_aSaveValue = aControlValue; - } - return sal_True; -} - -//------------------------------------------------------------------------------ -void ODateModel::impl_translateControlValueToUNODate( Any& _rUNOValue ) const -{ - _rUNOValue = getControlValue(); - if ( _rUNOValue.hasValue() ) - { - sal_Int32 nDate = 0; - OSL_VERIFY( _rUNOValue >>= nDate ); - _rUNOValue <<= DBTypeConversion::toDate( nDate ); - } -} - -//------------------------------------------------------------------------------ -Any ODateModel::translateControlValueToExternalValue( ) const -{ - Any aExternalValue; - impl_translateControlValueToUNODate( aExternalValue ); - return aExternalValue; -} - -//------------------------------------------------------------------------------ -Any ODateModel::translateExternalValueToControlValue( const Any& _rExternalValue ) const -{ - Any aControlValue; - if ( _rExternalValue.hasValue() ) - { - util::Date aDate; - OSL_VERIFY( _rExternalValue >>= aDate ); - aControlValue <<= DBTypeConversion::toINT32( aDate ); - } - return aControlValue; -} - -//------------------------------------------------------------------------------ -Any ODateModel::translateControlValueToValidatableValue( ) const -{ - Any aValidatableValue; - impl_translateControlValueToUNODate( aValidatableValue ); - return aValidatableValue; -} - -//------------------------------------------------------------------------------ -Any ODateModel::translateDbColumnToControlValue() -{ - util::Date aDate = m_xColumn->getDate(); - if (m_xColumn->wasNull()) - m_aSaveValue.clear(); - else - // the aggregated set expects an Int32 as value ... - m_aSaveValue <<= DBTypeConversion::toINT32(aDate); - - return m_aSaveValue; -} - -//------------------------------------------------------------------------------ -Any ODateModel::getDefaultForReset() const -{ - return m_aDefault; -} - -//------------------------------------------------------------------------------ -void ODateModel::resetNoBroadcast() -{ - OEditBaseModel::resetNoBroadcast(); - m_aSaveValue.clear(); -} - -//------------------------------------------------------------------------------ -Sequence< Type > ODateModel::getSupportedBindingTypes() -{ - return Sequence< Type >( &::getCppuType( static_cast< util::Date* >( NULL ) ), 1 ); -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Date.hxx b/forms/source/component/Date.hxx deleted file mode 100644 index 3b7c56cf2..000000000 --- a/forms/source/component/Date.hxx +++ /dev/null @@ -1,135 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_DATE_HXX_ -#define _FORMS_DATE_HXX_ - -#include "EditBase.hxx" -#include "limitedformats.hxx" - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -//= ODateModel -//================================================================== -class ODateModel - :public OEditBaseModel - ,public OLimitedFormats -{ - ::com::sun::star::uno::Any m_aSaveValue; - sal_Bool m_bDateTimeField; - -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - DECLARE_DEFAULT_LEAF_XTOR( ODateModel ); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException ); - - // ::com::sun::star::beans::XPropertySet - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, - sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception); - - // XServiceInfo - IMPLEMENTATION_NAME(ODateModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // XPropertySet - using OEditBaseModel::getFastPropertyValue; - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - -protected: - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - - virtual ::com::sun::star::uno::Any - translateControlValueToExternalValue( ) const; - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > - getSupportedBindingTypes(); - virtual ::com::sun::star::uno::Any - translateExternalValueToControlValue( const ::com::sun::star::uno::Any& _rExternalValue ) const; - - virtual ::com::sun::star::uno::Any - translateControlValueToValidatableValue( ) const; - - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - - virtual void resetNoBroadcast(); - - virtual void onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm ); - -protected: - DECLARE_XCLONEABLE(); - -private: - /** translates the control value (the VCL-internal integer representation of a date) into - a UNO-Date. - */ - void impl_translateControlValueToUNODate( - ::com::sun::star::uno::Any& _rUNOValue ) const; -}; - -//================================================================== -//= ODateControl -//================================================================== -class ODateControl: public OBoundControl -{ -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - ODateControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - DECLARE_UNO3_AGG_DEFAULTS(ODateControl, OBoundControl); - -// ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(ODateControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FORMS_DATE_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Edit.cxx b/forms/source/component/Edit.cxx deleted file mode 100644 index 5a2097a71..000000000 --- a/forms/source/component/Edit.cxx +++ /dev/null @@ -1,761 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "Edit.hxx" - -#include <com/sun/star/uno/Type.hxx> -#include <com/sun/star/awt/XWindow.hpp> -#include <com/sun/star/container/XIndexAccess.hpp> -#include <com/sun/star/form/XSubmit.hpp> -#include <com/sun/star/util/NumberFormat.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/awt/XVclWindowPeer.hpp> - -#include <vcl/svapp.hxx> -#include <tools/wintypes.hxx> - -#include <connectivity/dbtools.hxx> -#include <connectivity/formattedcolumnvalue.hxx> -#include <connectivity/dbconversion.hxx> - -#include <tools/diagnose_ex.h> -#include <tools/debug.hxx> - -#include <comphelper/container.hxx> -#include <comphelper/numbers.hxx> - -using namespace dbtools; - -//......................................................................... -namespace frm -{ -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::form::binding; - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OEditControl_CreateInstance(const Reference< XMultiServiceFactory > & _rxFactory) -{ - return *(new OEditControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OEditControl::_getTypes() -{ - static Sequence<Type> aTypes; - if (!aTypes.getLength()) - { - // my two base classes - aTypes = concatSequences(OBoundControl::_getTypes(), OEditControl_BASE::getTypes()); - } - return aTypes; -} - -//------------------------------------------------------------------------------ -Any SAL_CALL OEditControl::queryAggregation(const Type& _rType) throw (RuntimeException) -{ - Any aReturn = OBoundControl::queryAggregation(_rType); - if (!aReturn.hasValue()) - aReturn = OEditControl_BASE::queryInterface(_rType); - - return aReturn; -} - -DBG_NAME(OEditControl); -//------------------------------------------------------------------------------ -OEditControl::OEditControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl( _rxFactory, FRM_SUN_CONTROL_RICHTEXTCONTROL ) - ,m_aChangeListeners(m_aMutex) - ,m_nKeyEvent( 0 ) -{ - DBG_CTOR(OEditControl,NULL); - - increment(m_refCount); - { - Reference<XWindow> xComp; - if (query_aggregation(m_xAggregate, xComp)) - { - xComp->addFocusListener(this); - xComp->addKeyListener(this); - } - } - decrement(m_refCount); -} - -//------------------------------------------------------------------------------ -OEditControl::~OEditControl() -{ - if( m_nKeyEvent ) - Application::RemoveUserEvent( m_nKeyEvent ); - - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - - DBG_DTOR(OEditControl,NULL); -} - -// XChangeBroadcaster -//------------------------------------------------------------------------------ -void OEditControl::addChangeListener(const Reference<XChangeListener>& l) throw ( ::com::sun::star::uno::RuntimeException) -{ - m_aChangeListeners.addInterface( l ); -} - -//------------------------------------------------------------------------------ -void OEditControl::removeChangeListener(const Reference<XChangeListener>& l) throw ( ::com::sun::star::uno::RuntimeException) -{ - m_aChangeListeners.removeInterface( l ); -} - -// OComponentHelper -//------------------------------------------------------------------------------ -void OEditControl::disposing() -{ - OBoundControl::disposing(); - - EventObject aEvt(static_cast<XWeak*>(this)); - m_aChangeListeners.disposeAndClear(aEvt); -} - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence OEditControl::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_TEXTFIELD; - return aSupported; -} - -// XEventListener -//------------------------------------------------------------------------------ -void OEditControl::disposing(const EventObject& Source) throw( RuntimeException ) -{ - OBoundControl::disposing(Source); -} - -// XFocusListener -//------------------------------------------------------------------------------ -void OEditControl::focusGained( const FocusEvent& /*e*/ ) throw ( ::com::sun::star::uno::RuntimeException) -{ - Reference<XPropertySet> xSet(getModel(), UNO_QUERY); - if (xSet.is()) - xSet->getPropertyValue( PROPERTY_TEXT ) >>= m_aHtmlChangeValue; -} - -//------------------------------------------------------------------------------ -void OEditControl::focusLost( const FocusEvent& /*e*/ ) throw ( ::com::sun::star::uno::RuntimeException) -{ - Reference<XPropertySet> xSet(getModel(), UNO_QUERY); - if (xSet.is()) - { - ::rtl::OUString sNewHtmlChangeValue; - xSet->getPropertyValue( PROPERTY_TEXT ) >>= sNewHtmlChangeValue; - if( sNewHtmlChangeValue != m_aHtmlChangeValue ) - { - EventObject aEvt( *this ); - m_aChangeListeners.notifyEach( &XChangeListener::changed, aEvt ); - } - } -} - -// XKeyListener -//------------------------------------------------------------------------------ -void OEditControl::keyPressed(const ::com::sun::star::awt::KeyEvent& e) throw ( ::com::sun::star::uno::RuntimeException) -{ - if( e.KeyCode != KEY_RETURN || e.Modifiers != 0 ) - return; - - // Steht das Control in einem Formular mit einer Submit-URL? - Reference<XPropertySet> xSet(getModel(), UNO_QUERY); - if( !xSet.is() ) - return; - - // nicht fuer multiline edits - Any aTmp( xSet->getPropertyValue(PROPERTY_MULTILINE)); - if ((aTmp.getValueType().equals(::getBooleanCppuType())) && getBOOL(aTmp)) - return; - - Reference<XFormComponent> xFComp(xSet, UNO_QUERY); - InterfaceRef xParent = xFComp->getParent(); - if( !xParent.is() ) - return; - - Reference<XPropertySet> xFormSet(xParent, UNO_QUERY); - if( !xFormSet.is() ) - return; - - aTmp = xFormSet->getPropertyValue( PROPERTY_TARGET_URL ); - if (!aTmp.getValueType().equals(::getCppuType((const ::rtl::OUString*)NULL)) || - !getString(aTmp).getLength() ) - return; - - Reference<XIndexAccess> xElements(xParent, UNO_QUERY); - sal_Int32 nCount = xElements->getCount(); - if( nCount > 1 ) - { - Reference<XPropertySet> xFCSet; - for( sal_Int32 nIndex=0; nIndex < nCount; nIndex++ ) - { - // Any aElement(xElements->getByIndex(nIndex)); - xElements->getByIndex(nIndex) >>= xFCSet; - OSL_ENSURE(xFCSet.is(),"OEditControl::keyPressed: No XPropertySet!"); - - if (hasProperty(PROPERTY_CLASSID, xFCSet) && - getINT16(xFCSet->getPropertyValue(PROPERTY_CLASSID)) == FormComponentType::TEXTFIELD) - { - // Noch ein weiteres Edit gefunden ==> dann nicht submitten - if (xFCSet != xSet) - return; - } - } - } - - // Da wir noch im Haender stehen, submit asynchron ausloesen - if( m_nKeyEvent ) - Application::RemoveUserEvent( m_nKeyEvent ); - m_nKeyEvent = Application::PostUserEvent( LINK(this, OEditControl,OnKeyPressed) ); -} - -//------------------------------------------------------------------------------ -void OEditControl::keyReleased(const ::com::sun::star::awt::KeyEvent& /*e*/) throw ( ::com::sun::star::uno::RuntimeException) -{ -} - -//------------------------------------------------------------------------------ -IMPL_LINK(OEditControl, OnKeyPressed, void*, /*EMPTYARG*/) -{ - m_nKeyEvent = 0; - - Reference<XFormComponent> xFComp(getModel(), UNO_QUERY); - InterfaceRef xParent = xFComp->getParent(); - Reference<XSubmit> xSubmit(xParent, UNO_QUERY); - if (xSubmit.is()) - xSubmit->submit( Reference<XControl>(), ::com::sun::star::awt::MouseEvent() ); - return 0L; -} - -//------------------------------------------------------------------ -void SAL_CALL OEditControl::createPeer( const Reference< XToolkit>& _rxToolkit, const Reference< XWindowPeer>& _rxParent ) throw ( RuntimeException ) -{ - OBoundControl::createPeer(_rxToolkit, _rxParent); -} - -/*************************************************************************/ -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OEditModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OEditModel(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OEditModel::_getTypes() -{ - return OEditBaseModel::_getTypes(); -} - - -DBG_NAME(OEditModel); -//------------------------------------------------------------------ -OEditModel::OEditModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OEditBaseModel( _rxFactory, FRM_SUN_COMPONENT_RICHTEXTCONTROL, FRM_SUN_CONTROL_TEXTFIELD, sal_True, sal_True ) - ,m_bMaxTextLenModified(sal_False) - ,m_bWritingFormattedFake(sal_False) -{ - DBG_CTOR(OEditModel,NULL); - - m_nClassId = FormComponentType::TEXTFIELD; - initValueProperty( PROPERTY_TEXT, PROPERTY_ID_TEXT ); -} - -//------------------------------------------------------------------ -OEditModel::OEditModel( const OEditModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OEditBaseModel( _pOriginal, _rxFactory ) - ,m_bMaxTextLenModified(sal_False) - ,m_bWritingFormattedFake(sal_False) -{ - DBG_CTOR( OEditModel, NULL ); - - // Note that most of the properties are not clone from the original object: - // Things as the format key, it's type, and such, depend on the field being part of a loaded form - // (they're initialized in onConnectedDbColumn). Even if the original object _is_ part of such a form, we ourself - // certainly aren't, so these members are defaulted. If we're inserted into a form which is already loaded, - // they will be set to new values, anyway .... -} - -//------------------------------------------------------------------ -OEditModel::~OEditModel() -{ - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - - DBG_DTOR(OEditModel,NULL); -} - -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OEditModel ) - -//------------------------------------------------------------------------------ -void OEditModel::disposing() -{ - OEditBaseModel::disposing(); - m_pValueFormatter.reset(); -} - -// XPersistObject -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OEditModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_EDIT; // old (non-sun) name for compatibility ! -} - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OEditModel::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControlModel::getSupportedServiceNames(); - - sal_Int32 nOldLen = aSupported.getLength(); - aSupported.realloc( nOldLen + 8 ); - ::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen; - - *pStoreTo++ = BINDABLE_CONTROL_MODEL; - *pStoreTo++ = DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_CONTROL_MODEL; - - *pStoreTo++ = BINDABLE_DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_BINDABLE_CONTROL_MODEL; - - *pStoreTo++ = FRM_SUN_COMPONENT_TEXTFIELD; - *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_TEXTFIELD; - *pStoreTo++ = BINDABLE_DATABASE_TEXT_FIELD; - - return aSupported; -} - -// XPropertySet -void SAL_CALL OEditModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle ) const -{ - if ( PROPERTY_ID_PERSISTENCE_MAXTEXTLENGTH == nHandle ) - { - if ( m_bMaxTextLenModified ) - rValue <<= sal_Int16(0); - else if ( m_xAggregateSet.is() ) - rValue = m_xAggregateSet->getPropertyValue(PROPERTY_MAXTEXTLEN); - } - else - { - OEditBaseModel::getFastPropertyValue(rValue, nHandle ); - } -} - -//------------------------------------------------------------------------------ -void OEditModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 5, OEditBaseModel ) - DECL_PROP2(PERSISTENCE_MAXTEXTLENGTH,sal_Int16, READONLY, TRANSIENT); - DECL_PROP2(DEFAULT_TEXT, ::rtl::OUString, BOUND, MAYBEDEFAULT); - DECL_BOOL_PROP1(EMPTY_IS_NULL, BOUND); - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - DECL_BOOL_PROP2(FILTERPROPOSAL, BOUND, MAYBEDEFAULT); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -void OEditModel::describeAggregateProperties( Sequence< Property >& _rAggregateProps ) const -{ - OEditBaseModel::describeAggregateProperties( _rAggregateProps ); - - // our aggregate is a rich text model, which also derives from OControlModel, as - // do we, so we need to remove some duplicate properties - RemoveProperty( _rAggregateProps, PROPERTY_TABINDEX ); - RemoveProperty( _rAggregateProps, PROPERTY_CLASSID ); - RemoveProperty( _rAggregateProps, PROPERTY_NAME ); - RemoveProperty( _rAggregateProps, PROPERTY_TAG ); - RemoveProperty( _rAggregateProps, PROPERTY_NATIVE_LOOK ); - -} - -//------------------------------------------------------------------------------ -bool OEditModel::implActsAsRichText( ) const -{ - sal_Bool bActAsRichText = sal_False; - if ( m_xAggregateSet.is() ) - { - OSL_VERIFY( m_xAggregateSet->getPropertyValue( PROPERTY_RICH_TEXT ) >>= bActAsRichText ); - } - return bActAsRichText; -} - -//------------------------------------------------------------------------------ -void SAL_CALL OEditModel::reset( ) throw(RuntimeException) -{ - // no reset if we currently act as rich text control - if ( implActsAsRichText() ) - return; - - OEditBaseModel::reset(); -} - -//------------------------------------------------------------------------------ -namespace -{ - void lcl_transferProperties( const Reference< XPropertySet >& _rxSource, const Reference< XPropertySet >& _rxDest ) - { - try - { - Reference< XPropertySetInfo > xSourceInfo; - if ( _rxSource.is() ) - xSourceInfo = _rxSource->getPropertySetInfo(); - - Reference< XPropertySetInfo > xDestInfo; - if ( _rxDest.is() ) - xDestInfo = _rxDest->getPropertySetInfo(); - - if ( !xSourceInfo.is() || !xDestInfo.is() ) - { - OSL_FAIL( "lcl_transferProperties: invalid property set(s)!" ); - return; - } - - Sequence< Property > aSourceProps( xSourceInfo->getProperties() ); - const Property* pSourceProps = aSourceProps.getConstArray(); - const Property* pSourcePropsEnd = aSourceProps.getConstArray() + aSourceProps.getLength(); - while ( pSourceProps != pSourcePropsEnd ) - { - if ( !xDestInfo->hasPropertyByName( pSourceProps->Name ) ) - { - ++pSourceProps; - continue; - } - - Property aDestProp( xDestInfo->getPropertyByName( pSourceProps->Name ) ); - if ( 0 != ( aDestProp.Attributes & PropertyAttribute::READONLY ) ) - { - ++pSourceProps; - continue; - } - - try - { - _rxDest->setPropertyValue( pSourceProps->Name, _rxSource->getPropertyValue( pSourceProps->Name ) ); - } - catch(const IllegalArgumentException& e) - { -#if OSL_DEBUG_LEVEL > 0 - ::rtl::OString sMessage( "could not transfer the property named '" ); - sMessage += ::rtl::OString( pSourceProps->Name.getStr(), pSourceProps->Name.getLength(), RTL_TEXTENCODING_ASCII_US ); - sMessage += ::rtl::OString( "'." ); - if ( e.Message.getLength() ) - { - sMessage += ::rtl::OString( "\n\nMessage:\n" ); - sMessage += ::rtl::OString( e.Message.getStr(), e.Message.getLength(), RTL_TEXTENCODING_ASCII_US ); - } - OSL_FAIL( sMessage.getStr() ); -#else - (void)e; -#endif - } - - ++pSourceProps; - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } -} - -//------------------------------------------------------------------------------ -void OEditModel::writeAggregate( const Reference< XObjectOutputStream >& _rxOutStream ) const -{ - // we need to fake the writing of our aggregate. Since #i24387#, we have another aggregate, - // but for compatibility, we need to use an "old" aggregate for writing and reading - - Reference< XPropertySet > xFakedAggregate( - getContext().createComponent( (rtl::OUString)VCL_CONTROLMODEL_EDIT ), - UNO_QUERY - ); - OSL_ENSURE( xFakedAggregate.is(), "OEditModel::writeAggregate: could not create an old EditControlModel!" ); - if ( !xFakedAggregate.is() ) - return; - - lcl_transferProperties( m_xAggregateSet, xFakedAggregate ); - - Reference< XPersistObject > xFakedPersist( xFakedAggregate, UNO_QUERY ); - OSL_ENSURE( xFakedPersist.is(), "OEditModel::writeAggregate: no XPersistObject!" ); - if ( xFakedPersist.is() ) - xFakedPersist->write( _rxOutStream ); -} - -//------------------------------------------------------------------------------ -void OEditModel::readAggregate( const Reference< XObjectInputStream >& _rxInStream ) -{ - // we need to fake the reading of our aggregate. Since #i24387#, we have another aggregate, - // but for compatibility, we need to use an "old" aggregate for writing and reading - - Reference< XPropertySet > xFakedAggregate( - getContext().createComponent( (rtl::OUString)VCL_CONTROLMODEL_EDIT ), - UNO_QUERY - ); - Reference< XPersistObject > xFakedPersist( xFakedAggregate, UNO_QUERY ); - OSL_ENSURE( xFakedPersist.is(), "OEditModel::readAggregate: no XPersistObject, or no faked aggregate at all!" ); - if ( xFakedPersist.is() ) - { - xFakedPersist->read( _rxInStream ); - lcl_transferProperties( xFakedAggregate, m_xAggregateSet ); - } -} - -//------------------------------------------------------------------------------ -void OEditModel::write(const Reference<XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - Any aCurrentText; - sal_Int16 nOldTextLen = 0; - // bin ich gerade loaded und habe dazu zeitweilig die MaxTextLen umgesetzt ? - if ( m_bMaxTextLenModified ) - { // -> fuer die Dauer des Speicherns meinem aggregierten Model die alte TextLen einreden - - // before doing this we have to save the current text value of the aggregate, as this may be affected by resetting the text len - aCurrentText = m_xAggregateSet->getPropertyValue(PROPERTY_TEXT); - - m_xAggregateSet->getPropertyValue(PROPERTY_MAXTEXTLEN) >>= nOldTextLen; - m_xAggregateSet->setPropertyValue(PROPERTY_MAXTEXTLEN, makeAny((sal_Int16)0)); - } - - OEditBaseModel::write(_rxOutStream); - - if ( m_bMaxTextLenModified ) - { // wieder zuruecksetzen - m_xAggregateSet->setPropertyValue(PROPERTY_MAXTEXTLEN, makeAny(nOldTextLen)); - // and reset the text - // First we set it to an empty string : Without this the second setPropertyValue would not do anything as it thinks - // we aren't changing the prop (it didn't notify the - implicite - change of the text prop while setting the max text len) - // This seems to be a bug with in toolkit's EditControl-implementation. - m_xAggregateSet->setPropertyValue(PROPERTY_TEXT, makeAny(::rtl::OUString())); - m_xAggregateSet->setPropertyValue(PROPERTY_TEXT, aCurrentText); - } -} - -//------------------------------------------------------------------------------ -void OEditModel::read(const Reference<XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OEditBaseModel::read(_rxInStream); - - // Some versions (5.1 'til about 552) wrote a wrong DefaultControl-property value which is unknown - // to older versions (5.0). - // correct this ... - if (m_xAggregateSet.is()) - { - Any aDefaultControl = m_xAggregateSet->getPropertyValue(PROPERTY_DEFAULTCONTROL); - if ( (aDefaultControl.getValueType().getTypeClass() == TypeClass_STRING) - && (getString(aDefaultControl).compareTo(STARDIV_ONE_FORM_CONTROL_TEXTFIELD) == COMPARE_EQUAL) - ) - { - m_xAggregateSet->setPropertyValue( PROPERTY_DEFAULTCONTROL, makeAny( (::rtl::OUString)STARDIV_ONE_FORM_CONTROL_EDIT ) ); - // Older as well as current versions should understand this : the former knew only the STARDIV_ONE_FORM_CONTROL_EDIT, - // the latter are registered for both STARDIV_ONE_FORM_CONTROL_EDIT and STARDIV_ONE_FORM_CONTROL_TEXTFIELD. - } - } -} - -//------------------------------------------------------------------------------ -sal_uInt16 OEditModel::getPersistenceFlags() const -{ - sal_uInt16 nFlags = OEditBaseModel::getPersistenceFlags(); - - if (m_bWritingFormattedFake) - nFlags |= PF_FAKE_FORMATTED_FIELD; - - return nFlags; -} - -//------------------------------------------------------------------------------ -void OEditModel::onConnectedDbColumn( const Reference< XInterface >& _rxForm ) -{ - Reference< XPropertySet > xField = getField(); - if ( xField.is() ) - { - m_pValueFormatter.reset( new ::dbtools::FormattedColumnValue( getContext(), Reference< XRowSet >( _rxForm, UNO_QUERY ), xField ) ); - - if ( m_pValueFormatter->getKeyType() != NumberFormat::SCIENTIFIC ) - { - m_bMaxTextLenModified = getINT16(m_xAggregateSet->getPropertyValue(PROPERTY_MAXTEXTLEN)) != 0; - if ( !m_bMaxTextLenModified ) - { - sal_Int32 nFieldLen = 0; - xField->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Precision") ) ) >>= nFieldLen; - - if (nFieldLen && nFieldLen <= USHRT_MAX) - { - Any aVal; - aVal <<= (sal_Int16)nFieldLen; - m_xAggregateSet->setPropertyValue(PROPERTY_MAXTEXTLEN, aVal); - - m_bMaxTextLenModified = sal_True; - } - } - else - m_bMaxTextLenModified = sal_False; // to get sure that the text len won't be set in unloaded - } - } -} - -//------------------------------------------------------------------------------ -void OEditModel::onDisconnectedDbColumn() -{ - OEditBaseModel::onDisconnectedDbColumn(); - - m_pValueFormatter.reset(); - - if ( hasField() && m_bMaxTextLenModified ) - { - Any aVal; - aVal <<= (sal_Int16)0; // nur wenn es 0 war, habe ich es in onConnectedDbColumn umgesetzt - m_xAggregateSet->setPropertyValue(PROPERTY_MAXTEXTLEN, aVal); - m_bMaxTextLenModified = sal_False; - } -} - -//------------------------------------------------------------------------------ -sal_Bool OEditModel::approveDbColumnType( sal_Int32 _nColumnType ) -{ - // if we act as rich text curently, we do not allow binding to a database column - if ( implActsAsRichText() ) - return sal_False; - - return OEditBaseModel::approveDbColumnType( _nColumnType ); -} - -//------------------------------------------------------------------------------ -void OEditModel::resetNoBroadcast() -{ - OEditBaseModel::resetNoBroadcast(); -} - -//------------------------------------------------------------------------------ -sal_Bool OEditModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) -{ - Any aNewValue( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) ); - - ::rtl::OUString sNewValue; - aNewValue >>= sNewValue; - - if ( !aNewValue.hasValue() - || ( !sNewValue.getLength() // an empty string - && m_bEmptyIsNull // which should be interpreted as NULL - ) - ) - { - m_xColumnUpdate->updateNull(); - } - else - { - OSL_PRECOND( m_pValueFormatter.get(), "OEditModel::commitControlValueToDbColumn: no value formatter!" ); - try - { - if ( m_pValueFormatter.get() ) - { - if ( !m_pValueFormatter->setFormattedValue( sNewValue ) ) - return sal_False; - } - else - m_xColumnUpdate->updateString( sNewValue ); - } - catch ( const Exception& ) - { - return sal_False; - } - } - - return sal_True; -} - -//------------------------------------------------------------------------------ -Any OEditModel::translateDbColumnToControlValue() -{ - OSL_PRECOND( m_pValueFormatter.get(), "OEditModel::translateDbColumnToControlValue: no value formatter!" ); - Any aRet; - if ( m_pValueFormatter.get() ) - { - ::rtl::OUString sValue( m_pValueFormatter->getFormattedValue() ); - if ( !sValue.getLength() - && m_pValueFormatter->getColumn().is() - && m_pValueFormatter->getColumn()->wasNull() - ) - { - } - else - { - // #i2817# OJ - sal_uInt16 nMaxTextLen = getINT16( m_xAggregateSet->getPropertyValue( PROPERTY_MAXTEXTLEN ) ); - if ( nMaxTextLen && sValue.getLength() > nMaxTextLen ) - { - sal_Int32 nDiff = sValue.getLength() - nMaxTextLen; - sValue = sValue.replaceAt( nMaxTextLen, nDiff, ::rtl::OUString() ); - } - - aRet <<= sValue; - } - } - - return aRet.hasValue() ? aRet : makeAny( ::rtl::OUString() ); -} - -//------------------------------------------------------------------------------ -Any OEditModel::getDefaultForReset() const -{ - return makeAny( m_aDefaultText ); -} - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Edit.hxx b/forms/source/component/Edit.hxx deleted file mode 100644 index a8ce04747..000000000 --- a/forms/source/component/Edit.hxx +++ /dev/null @@ -1,189 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_EDIT_HXX_ -#define _FORMS_EDIT_HXX_ - -#include "EditBase.hxx" - -#include <cppuhelper/implbase3.hxx> - -namespace dbtools { class FormattedColumnValue; } - -//......................................................................... -namespace frm -{ - -//================================================================== -//= OEditModel -//================================================================== -class OEditModel - :public OEditBaseModel -{ - ::std::auto_ptr< ::dbtools::FormattedColumnValue > - m_pValueFormatter; - sal_Bool m_bMaxTextLenModified : 1; // set to <TRUE/> when we change the MaxTextLen of the aggregate - - sal_Bool m_bWritingFormattedFake : 1; - // are we writing something which should be interpreted as formatted upon reading? - -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - - DECLARE_DEFAULT_LEAF_XTOR( OEditModel ); - - void enableFormattedWriteFake() { m_bWritingFormattedFake = sal_True; } - void disableFormattedWriteFake() { m_bWritingFormattedFake = sal_False; } - sal_Bool lastReadWasFormattedFake() const { return (getLastReadVersion() & PF_FAKE_FORMATTED_FIELD) != 0; } - - friend InterfaceRef SAL_CALL OEditModel_CreateInstance(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - friend class OFormattedFieldWrapper; - friend class OFormattedModel; // temporary - -public: - virtual void SAL_CALL disposing(); - - // XPropertySet - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - - // XPersistObject - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - - // XPropertySet - using OBoundControlModel::getFastPropertyValue; - - // XReset - virtual void SAL_CALL reset( ) throw(::com::sun::star::uno::RuntimeException); - - // XServiceInfo - IMPLEMENTATION_NAME(OEditModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - virtual void describeAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps - ) const; - - // XEventListener - using OBoundControlModel::disposing; - -protected: - // OControlModel overridables - virtual void writeAggregate( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream >& _rxOutStream ) const; - virtual void readAggregate( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream >& _rxInStream ); - - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - - virtual void onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm ); - virtual void onDisconnectedDbColumn(); - - virtual sal_Bool approveDbColumnType( sal_Int32 _nColumnType ); - - virtual void resetNoBroadcast(); - -protected: - virtual sal_uInt16 getPersistenceFlags() const; - - DECLARE_XCLONEABLE(); - -private: - bool implActsAsRichText( ) const; -}; - -//================================================================== -//= OEditControl -//================================================================== -typedef ::cppu::ImplHelper3< ::com::sun::star::awt::XFocusListener, - ::com::sun::star::awt::XKeyListener, - ::com::sun::star::form::XChangeBroadcaster > OEditControl_BASE; - -class OEditControl : public OBoundControl - ,public OEditControl_BASE -{ - ::cppu::OInterfaceContainerHelper - m_aChangeListeners; - - ::rtl::OUString m_aHtmlChangeValue; - sal_uInt32 m_nKeyEvent; - -public: - OEditControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - virtual ~OEditControl(); - - DECLARE_UNO3_AGG_DEFAULTS(OEditControl, OBoundControl); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -// OComponentHelper - virtual void SAL_CALL disposing(); - -// ::com::sun::star::lang::XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(OEditControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - -// ::com::sun::star::form::XChangeBroadcaster - virtual void SAL_CALL addChangeListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XChangeListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeChangeListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XChangeListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::awt::XFocusListener - virtual void SAL_CALL focusGained( const ::com::sun::star::awt::FocusEvent& e ) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL focusLost( const ::com::sun::star::awt::FocusEvent& e ) throw ( ::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::awt::XKeyListener - virtual void SAL_CALL keyPressed(const ::com::sun::star::awt::KeyEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL keyReleased(const ::com::sun::star::awt::KeyEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - - // XControl - virtual void SAL_CALL createPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& _rxToolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& _rxParent ) throw ( ::com::sun::star::uno::RuntimeException ); - -private: - DECL_LINK( OnKeyPressed, void* ); -}; - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_EDIT_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/EditBase.cxx b/forms/source/component/EditBase.cxx deleted file mode 100644 index 6afff3637..000000000 --- a/forms/source/component/EditBase.cxx +++ /dev/null @@ -1,361 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "EditBase.hxx" -#include "property.hxx" -#include "property.hrc" -#include "services.hxx" -#include <tools/debug.hxx> -#include <comphelper/basicio.hxx> -#include <cppuhelper/queryinterface.hxx> -#include "frm_resource.hxx" -#include "frm_resource.hrc" - -//......................................................................... -namespace frm -{ -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; - -const sal_uInt16 DEFAULT_LONG = 0x0001; -const sal_uInt16 DEFAULT_DOUBLE = 0x0002; -const sal_uInt16 FILTERPROPOSAL = 0x0004; - -DBG_NAME( OEditBaseModel ) -//------------------------------------------------------------------ -OEditBaseModel::OEditBaseModel( const Reference< XMultiServiceFactory >& _rxFactory, const ::rtl::OUString& rUnoControlModelName, - const ::rtl::OUString& rDefault, const sal_Bool _bSupportExternalBinding, const sal_Bool _bSupportsValidation ) - :OBoundControlModel( _rxFactory, rUnoControlModelName, rDefault, sal_True, _bSupportExternalBinding, _bSupportsValidation ) - ,m_nLastReadVersion(0) - ,m_bEmptyIsNull(sal_True) - ,m_bFilterProposal(sal_False) -{ - DBG_CTOR( OEditBaseModel, NULL ); -} - -//------------------------------------------------------------------ -OEditBaseModel::OEditBaseModel( const OEditBaseModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory ) - :OBoundControlModel( _pOriginal, _rxFactory ) - ,m_nLastReadVersion(0) -{ - DBG_CTOR( OEditBaseModel, NULL ); - - m_bFilterProposal = _pOriginal->m_bFilterProposal; - m_bEmptyIsNull = _pOriginal->m_bEmptyIsNull; - m_aDefault = _pOriginal->m_aDefault; - m_aDefaultText = _pOriginal->m_aDefaultText; -} - -//------------------------------------------------------------------ -OEditBaseModel::~OEditBaseModel( ) -{ - DBG_DTOR( OEditBaseModel, NULL ); -} - -// XPersist -//------------------------------------------------------------------------------ -void OEditBaseModel::write(const Reference<XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OBoundControlModel::write(_rxOutStream); - - // Version - sal_uInt16 nVersionId = 0x0005; - DBG_ASSERT((getPersistenceFlags() & ~PF_SPECIAL_FLAGS) == 0, - "OEditBaseModel::write : invalid special version flags !"); - // please don't use other flags, older versions can't interpret them ! - - nVersionId |= getPersistenceFlags(); - _rxOutStream->writeShort(nVersionId); - - // Name - _rxOutStream->writeShort(0); // obsolete - _rxOutStream << m_aDefaultText; - - // Maskierung fuer any - sal_uInt16 nAnyMask = 0; - if (m_aDefault.getValueType().getTypeClass() == TypeClass_LONG) - nAnyMask |= DEFAULT_LONG; - else if (m_aDefault.getValueType().getTypeClass() == TypeClass_DOUBLE) - nAnyMask |= DEFAULT_DOUBLE; - - if (m_bFilterProposal) // da boolean, kein Wert speichern - nAnyMask |= FILTERPROPOSAL; - - _rxOutStream->writeBoolean(m_bEmptyIsNull); - _rxOutStream->writeShort(nAnyMask); - - if ((nAnyMask & DEFAULT_LONG) == DEFAULT_LONG) - _rxOutStream->writeLong(getINT32(m_aDefault)); - else if ((nAnyMask & DEFAULT_DOUBLE) == DEFAULT_DOUBLE) - _rxOutStream->writeDouble(getDouble(m_aDefault)); - - // since version 5 we write the help text - writeHelpTextCompatibly(_rxOutStream); - // (that's potentially bad : at the time I added the above line we had two derived classes : OEditModel and - // OFormattedModel. The first one does not have an own version handling, so it can't write the help text itself, - // the second one does it's own writing (reading) after calling our method, so normally we shouldn't write any - // additional members as this is not compatible to older office versions. - // We decided to place the writing of the help text here as it seems the less worse alternative. There is no delivered - // office version including formatted controls (and thus the OFormattedModel), and the OFormattedModel::read seems - // robust against this change (as it will read a wrong and unknown file version and thus set it's members to defaults). - - if ((nVersionId & PF_HANDLE_COMMON_PROPS) != 0) - writeCommonEditProperties(_rxOutStream); - - // !!! properties common to all OEditBaseModel derived classes should be written in writeCommonEditProperties !!! -} - -//------------------------------------------------------------------------------ -sal_uInt16 OEditBaseModel::getPersistenceFlags() const -{ - return PF_HANDLE_COMMON_PROPS; -} - -//------------------------------------------------------------------------------ -void OEditBaseModel::read(const Reference<XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OBoundControlModel::read(_rxInStream); - ::osl::MutexGuard aGuard(m_aMutex); - - // Version eigene Versionsnummer - sal_uInt16 nVersion = _rxInStream->readShort(); - m_nLastReadVersion = nVersion; - - sal_Bool bHandleCommonProps = (nVersion & PF_HANDLE_COMMON_PROPS) != 0; - nVersion = nVersion & ~PF_SPECIAL_FLAGS; - - // obsolete - _rxInStream->readShort(); - - _rxInStream >> m_aDefaultText; - - if (nVersion >= 0x0003) - { - m_bEmptyIsNull = _rxInStream->readBoolean(); - - sal_uInt16 nAnyMask = _rxInStream->readShort(); - if ((nAnyMask & DEFAULT_LONG) == DEFAULT_LONG) - { - sal_Int32 nValue = _rxInStream->readLong(); - m_aDefault <<= (sal_Int32)nValue; - } - else if ((nAnyMask & DEFAULT_DOUBLE) == DEFAULT_DOUBLE) - { - double fValue = _rxInStream->readDouble(); - m_aDefault <<= (double)fValue; - } - - if ((nAnyMask & FILTERPROPOSAL) == FILTERPROPOSAL) - m_bFilterProposal = sal_True; - } - - if (nVersion > 4) - readHelpTextCompatibly(_rxInStream); - - if (bHandleCommonProps) - readCommonEditProperties(_rxInStream); - - // Nach dem Lesen die Defaultwerte anzeigen - if ( getControlSource().getLength() ) - // (not if we don't have a control source - the "State" property acts like it is persistent, then) - resetNoBroadcast(); -}; - -//------------------------------------------------------------------------------ -void OEditBaseModel::defaultCommonEditProperties() -{ - OBoundControlModel::defaultCommonProperties(); - // no own common properties at the moment -} - -//------------------------------------------------------------------------------ -void OEditBaseModel::readCommonEditProperties(const Reference<XObjectInputStream>& _rxInStream) -{ - sal_Int32 nLen = _rxInStream->readLong(); - - Reference<XMarkableStream> xMark(_rxInStream, UNO_QUERY); - DBG_ASSERT(xMark.is(), "OBoundControlModel::readCommonProperties : can only work with markable streams !"); - sal_Int32 nMark = xMark->createMark(); - - // read properties common to all OBoundControlModels - OBoundControlModel::readCommonProperties(_rxInStream); - - // read properties common to all OEditBaseModels - - // skip the remaining bytes - xMark->jumpToMark(nMark); - _rxInStream->skipBytes(nLen); - xMark->deleteMark(nMark); -} - -//------------------------------------------------------------------------------ -void OEditBaseModel::writeCommonEditProperties(const Reference<XObjectOutputStream>& _rxOutStream) -{ - Reference<XMarkableStream> xMark(_rxOutStream, UNO_QUERY); - DBG_ASSERT(xMark.is(), "OEditBaseModel::writeCommonProperties : can only work with markable streams !"); - sal_Int32 nMark = xMark->createMark(); - - // a placeholder where we will write the overall length (later in this method) - sal_Int32 nLen = 0; - _rxOutStream->writeLong(nLen); - - // write properties common to all OBoundControlModels - OBoundControlModel::writeCommonProperties(_rxOutStream); - - // write properties common to all OEditBaseModels - - // close the block - write the correct length at the beginning - nLen = xMark->offsetToMark(nMark) - sizeof(nLen); - xMark->jumpToMark(nMark); - _rxOutStream->writeLong(nLen); - xMark->jumpToFurthest(); - xMark->deleteMark(nMark); -} - -//------------------------------------------------------------------------------ -void OEditBaseModel::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) const -{ - switch (nHandle) - { - case PROPERTY_ID_EMPTY_IS_NULL: - rValue <<= (sal_Bool)m_bEmptyIsNull; - break; - case PROPERTY_ID_FILTERPROPOSAL: - rValue <<= (sal_Bool)m_bFilterProposal; - break; - case PROPERTY_ID_DEFAULT_TEXT: - rValue <<= m_aDefaultText; - break; - case PROPERTY_ID_DEFAULT_VALUE: - case PROPERTY_ID_DEFAULT_DATE: - case PROPERTY_ID_DEFAULT_TIME: - rValue = m_aDefault; - break; - default: - OBoundControlModel::getFastPropertyValue(rValue, nHandle); - } -} - -//------------------------------------------------------------------------------ -sal_Bool OEditBaseModel::convertFastPropertyValue( Any& rConvertedValue, Any& rOldValue, - sal_Int32 nHandle, const Any& rValue ) throw( IllegalArgumentException ) -{ - sal_Bool bModified(sal_False); - switch (nHandle) - { - case PROPERTY_ID_EMPTY_IS_NULL: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bEmptyIsNull); - break; - case PROPERTY_ID_FILTERPROPOSAL: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bFilterProposal); - break; - case PROPERTY_ID_DEFAULT_TEXT: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aDefaultText); - break; - case PROPERTY_ID_DEFAULT_VALUE: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aDefault, ::getCppuType((const double*)0)); - break; - case PROPERTY_ID_DEFAULT_DATE: - case PROPERTY_ID_DEFAULT_TIME: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aDefault, ::getCppuType((const sal_Int32*)0)); - break; - default: - bModified = OBoundControlModel::convertFastPropertyValue( - rConvertedValue, - rOldValue, - nHandle, - rValue); - } - return bModified; -} - -//------------------------------------------------------------------------------ -void OEditBaseModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw ( ::com::sun::star::uno::Exception) -{ - switch (nHandle) - { - case PROPERTY_ID_EMPTY_IS_NULL: - DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_BOOLEAN, "invalid type" ); - m_bEmptyIsNull = getBOOL(rValue); - break; - case PROPERTY_ID_FILTERPROPOSAL: - DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_BOOLEAN, "invalid type" ); - m_bFilterProposal = getBOOL(rValue); - break; - // Aenderung der defaultwerte fuehrt zu reset - case PROPERTY_ID_DEFAULT_TEXT: - DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_STRING, "invalid type" ); - rValue >>= m_aDefaultText; - resetNoBroadcast(); - break; - case PROPERTY_ID_DEFAULT_VALUE: - case PROPERTY_ID_DEFAULT_DATE: - case PROPERTY_ID_DEFAULT_TIME: - m_aDefault = rValue; - resetNoBroadcast(); - break; - default: - OBoundControlModel::setFastPropertyValue_NoBroadcast(nHandle, rValue ); - } -} - -//XPropertyState -//------------------------------------------------------------------------------ -Any OEditBaseModel::getPropertyDefaultByHandle( sal_Int32 nHandle ) const -{ - switch (nHandle) - { - case PROPERTY_ID_DEFAULT_TEXT: - return makeAny(::rtl::OUString()); - case PROPERTY_ID_FILTERPROPOSAL: - return Any(makeAny((sal_Bool)sal_False)); - case PROPERTY_ID_DEFAULT_VALUE: - case PROPERTY_ID_DEFAULT_DATE: - case PROPERTY_ID_DEFAULT_TIME: - return Any(); - default: - return OBoundControlModel::getPropertyDefaultByHandle(nHandle); - } -} - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/EditBase.hxx b/forms/source/component/EditBase.hxx deleted file mode 100644 index 0a070c06e..000000000 --- a/forms/source/component/EditBase.hxx +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_EDITBASE_HXX_ -#define _FORMS_EDITBASE_HXX_ - -#include "FormComponent.hxx" -#include <tools/date.hxx> -#include <tools/link.hxx> -#include <com/sun/star/util/XNumberFormatter.hpp> -#include <com/sun/star/awt/XFocusListener.hpp> -#include <com/sun/star/awt/XKeyListener.hpp> -#include <com/sun/star/form/XChangeBroadcaster.hpp> -#include <com/sun/star/lang/XEventListener.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/lang/XComponent.hpp> - -// persistence flags for use with the version id -#define PF_HANDLE_COMMON_PROPS 0x8000 - // Derived classes which use their own persistence methods (read/write) and have an own - // version handling therein may want to clear this flag in getPersistenceFlags. - // If done so, this class will write an version without a call to writeCommonEditProperties. -#define PF_FAKE_FORMATTED_FIELD 0x4000 - // .... hmmm .... a fake, as the name suggests. see OFormattedFieldWrapper -#define PF_RESERVED_2 0x2000 -#define PF_RESERVED_3 0x1000 -#define PF_RESERVED_4 0x0800 -#define PF_RESERVED_5 0x0400 -#define PF_RESERVED_6 0x0200 -#define PF_RESERVED_7 0x0100 - -#define PF_SPECIAL_FLAGS 0xFF00 - -//......................................................................... -namespace frm -{ - -//================================================================== -//= OEditBaseModel -//================================================================== -class OEditBaseModel : public OBoundControlModel -{ - sal_Int16 m_nLastReadVersion; - -protected: -// [properties] fuer all Editierfelder - ::com::sun::star::uno::Any m_aDefault; - ::rtl::OUString m_aDefaultText; // default value - sal_Bool m_bEmptyIsNull : 1; // empty string will be interepreted as NULL when committing - sal_Bool m_bFilterProposal : 1; // use a list of possible value in filtermode -// [properties] - - sal_Int16 getLastReadVersion() const { return m_nLastReadVersion; } - -public: - DECLARE_DEFAULT_BOUND_XTOR( OEditBaseModel ); - - // XPersistObject - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // XPropertySet - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, - sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception); - using ::cppu::OPropertySetHelper::getFastPropertyValue; - - // XPropertyState - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const; - -protected: - // new properties common to all edit models should be handled with the following two methods - void SAL_CALL readCommonEditProperties(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream); - void SAL_CALL writeCommonEditProperties(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream); - void defaultCommonEditProperties(); - - virtual sal_uInt16 getPersistenceFlags() const; - // derived classes may use this if they want this base class to write additinal version flags - // (one of the PF_.... constants). After ::read they may ask for that flags with getLastReadVersion -}; - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_EDITBASE_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/EventThread.cxx b/forms/source/component/EventThread.cxx deleted file mode 100644 index 5670635e0..000000000 --- a/forms/source/component/EventThread.cxx +++ /dev/null @@ -1,242 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "EventThread.hxx" -#include <comphelper/guarding.hxx> -#include <tools/debug.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::lang; - -DBG_NAME( OComponentEventThread ) -OComponentEventThread::OComponentEventThread( ::cppu::OComponentHelper* pCompImpl ) : - m_pCompImpl( pCompImpl ) -{ - DBG_CTOR( OComponentEventThread, NULL ); - - increment(m_refCount); - - // Eine Referenz des Controls halten - { - InterfaceRef xIFace(static_cast<XWeak*>(pCompImpl)); - query_interface(xIFace, m_xComp); - } - - // und uns an dem Control anmelden - { - Reference<XEventListener> xEvtLstnr = static_cast<XEventListener*>(this); - m_xComp->addEventListener( xEvtLstnr ); - } - - decrement(m_refCount); -} - -OComponentEventThread::~OComponentEventThread() -{ - DBG_DTOR( OComponentEventThread, NULL ); - - DBG_ASSERT( m_aEvents.size() == 0, - "OComponentEventThread::~OComponentEventThread: Kein dispose gerufen?" ); - - impl_clearEventQueue(); -} - -Any SAL_CALL OComponentEventThread::queryInterface(const Type& _rType) throw (RuntimeException) -{ - Any aReturn; - - aReturn = OWeakObject::queryInterface(_rType); - - if (!aReturn.hasValue()) - aReturn = ::cppu::queryInterface(_rType, - static_cast<XEventListener*>(this) - ); - - return aReturn; -} - -void OComponentEventThread::impl_clearEventQueue() -{ - while ( m_aEvents.size() ) - { - delete *m_aEvents.begin(); - m_aEvents.erase( m_aEvents.begin() ); - } - m_aControls.erase( m_aControls.begin(), m_aControls.end() ); - m_aFlags.erase( m_aFlags.begin(), m_aFlags.end() ); -} - -void OComponentEventThread::disposing( const EventObject& evt ) throw ( ::com::sun::star::uno::RuntimeException) -{ - if( evt.Source == m_xComp ) - { - ::osl::MutexGuard aGuard( m_aMutex ); - - // Event-Listener abmelden - Reference<XEventListener> xEvtLstnr = static_cast<XEventListener*>(this); - m_xComp->removeEventListener( xEvtLstnr ); - - // Event-Queue loeschen - impl_clearEventQueue(); - - // Das Control loslassen und pCompImpl auf 0 setzen, damit der - // Thread weiss, dass er sich beenden soll. - m_xComp = 0; - m_pCompImpl = 0; - - // Den Thread aufwecken und beenden. - m_aCond.set(); - terminate(); - } -} - -void OComponentEventThread::addEvent( const EventObject* _pEvt, sal_Bool bFlag ) -{ - Reference<XControl> xTmp; - addEvent( _pEvt, xTmp, bFlag ); -} - -void OComponentEventThread::addEvent( const EventObject* _pEvt, - const Reference<XControl>& rControl, - sal_Bool bFlag ) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - - // Daten in die Queue stellen - m_aEvents.push_back( cloneEvent( _pEvt ) ); - - Reference<XWeak> xWeakControl(rControl, UNO_QUERY); - Reference<XAdapter> xControlAdapter = xWeakControl.is() ? xWeakControl->queryAdapter() : Reference<XAdapter>(); - m_aControls.push_back( xControlAdapter ); - - m_aFlags.push_back( bFlag ); - - // Thread aufwecken - m_aCond.set(); -} - -void OComponentEventThread::implStarted( ) -{ - acquire( ); -} - -void OComponentEventThread::implTerminated( ) -{ - release( ); -} - -void SAL_CALL OComponentEventThread::kill() -{ - OComponentEventThread_TBASE::terminate(); - OComponentEventThread_TBASE::join(); - - implTerminated( ); -} - -void SAL_CALL OComponentEventThread::onTerminated() -{ - OComponentEventThread_TBASE::onTerminated(); - - implTerminated( ); -} - -void OComponentEventThread::run() -{ - implStarted( ); - - // uns selbst festhalten, damit wir nicht geloescht werden, - // wenn zwischendrinne mal ein dispose gerufen wird. - InterfaceRef xThis(static_cast<XWeak*>(this)); - - do - { - ::osl::MutexGuard aGuard(m_aMutex); - - while( m_aEvents.size() > 0 ) - { - // Das Control holen und festhalten, damit es waehrend des - // actionPerformed nicht geloescht werden kann. - Reference<XComponent> xComp = m_xComp; - ::cppu::OComponentHelper *pCompImpl = m_pCompImpl; - - ThreadEvents::iterator firstEvent( m_aEvents.begin() ); - EventObject* pEvt = *firstEvent; - m_aEvents.erase( firstEvent ); - - ThreadObjects::iterator firstControl( m_aControls.begin() ); - Reference<XAdapter> xControlAdapter = *firstControl; - m_aControls.erase( firstControl ); - - ThreadBools::iterator firstFlag( m_aFlags.begin() ); - sal_Bool bFlag = *firstFlag; - m_aFlags.erase( firstFlag ); - - { - MutexRelease aReleaseOnce(m_aMutex); - // Weil ein queryHardRef eine Exception schmeissen kann sollte - // es nicht bei gelocktem Mutex aufgerufen werden. - Reference<XControl> xControl; - if ( xControlAdapter.is() ) - query_interface(xControlAdapter->queryAdapted(), xControl); - - if( xComp.is() ) - processEvent( pCompImpl, pEvt, xControl, bFlag ); - } - - delete pEvt; - }; - - // Nach einem dispose kennen wir das Control nicht mehr. Dann darf - // auch nicht gewartet werden. - if( !m_xComp.is() ) - return; - - // Warte-Bedingung zuruecksetzen - m_aCond.reset(); - { - MutexRelease aReleaseOnce(m_aMutex); - // und warten ... falls nicht zwischenzeitlich doch noch ein - // Event eingetroffen ist. - m_aCond.wait(); - } - } - while( sal_True ); -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/EventThread.hxx b/forms/source/component/EventThread.hxx deleted file mode 100644 index f0568ef4f..000000000 --- a/forms/source/component/EventThread.hxx +++ /dev/null @@ -1,128 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_EVENT_THREAD_HXX_ -#define _FRM_EVENT_THREAD_HXX_ - -#include <com/sun/star/lang/XEventListener.hpp> -#include <com/sun/star/lang/EventObject.hpp> -#include <com/sun/star/lang/XComponent.hpp> -#include <com/sun/star/awt/XControl.hpp> -#include <osl/thread.hxx> - - -#include <osl/conditn.hxx> -#include <cppuhelper/component.hxx> -#include <comphelper/stl_types.hxx> -#include <comphelper/uno3.hxx> -using namespace comphelper; - -//......................................................................... -namespace frm -{ -//......................................................................... - -// *************************************************************************************************** -// *************************************************************************************************** - -typedef ::osl::Thread OComponentEventThread_TBASE; -class OComponentEventThread - :public OComponentEventThread_TBASE - ,public ::com::sun::star::lang::XEventListener - ,public ::cppu::OWeakObject -{ - DECLARE_STL_VECTOR(::com::sun::star::lang::EventObject*, ThreadEvents); - DECLARE_STL_VECTOR(::com::sun::star::uno::Reference< ::com::sun::star::uno::XAdapter> , ThreadObjects); - DECLARE_STL_VECTOR(sal_Bool, ThreadBools); - - ::osl::Mutex m_aMutex; - ::osl::Condition m_aCond; // Queue gefuellt? - ThreadEvents m_aEvents; // Event-Queue - ThreadObjects m_aControls; // Control fuer Submit - ThreadBools m_aFlags; // Flags fuer Submit/Reset - - ::cppu::OComponentHelper* m_pCompImpl; // Implementierung des Controls - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent> m_xComp; // ::com::sun::star::lang::XComponent des Controls - -protected: - - // XThread - virtual void SAL_CALL run(); - - virtual void SAL_CALL kill(); - virtual void SAL_CALL onTerminated(); - - // Die folgende Methode wird gerufen um das Event unter Beruecksichtigung - // seines Typs zu duplizieren. - virtual ::com::sun::star::lang::EventObject* cloneEvent(const ::com::sun::star::lang::EventObject* _pEvt) const = 0; - - // Ein Event bearbeiten. Der Mutex ist dabei nicht gelockt, pCompImpl - // bleibt aber in jedem Fall gueltig. Bei pEvt kann es sich auch um - // einen abgeleiteten Typ handeln, naemlich den, den cloneEvent - // zurueckgibt. rControl ist nur gesetzt, wenn beim addEvent ein - // Control uebergeben wurde. Da das Control nur als WeakRef gehalten - // wird kann es auch zwischenzeitlich verschwinden. - virtual void processEvent( ::cppu::OComponentHelper* _pCompImpl, - const ::com::sun::star::lang::EventObject* _pEvt, - const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rControl, - sal_Bool _bFlag) = 0; - -public: - - // UNO Anbindung - DECLARE_UNO3_DEFAULTS(OComponentEventThread, OWeakObject); - virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); - - OComponentEventThread(::cppu::OComponentHelper* pCompImpl); - virtual ~OComponentEventThread(); - - void addEvent( const ::com::sun::star::lang::EventObject* _pEvt, sal_Bool bFlag = sal_False ); - void addEvent( const ::com::sun::star::lang::EventObject* _pEvt, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& rControl, - sal_Bool bFlag = sal_False ); - - // ::com::sun::star::lang::XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource ) throw (::com::sun::star::uno::RuntimeException); - -/* resolve ambiguity : both OWeakObject and OObject have these memory operators */ - void * SAL_CALL operator new( size_t size ) throw() { return osl::Thread::operator new(size); } - void SAL_CALL operator delete( void * p ) throw() { osl::Thread::operator delete(p); } - -private: - void implStarted( ); - void implTerminated( ); - - void impl_clearEventQueue(); -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FRM_EVENT_THREAD_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/File.cxx b/forms/source/component/File.cxx deleted file mode 100644 index 61b3bcfe5..000000000 --- a/forms/source/component/File.cxx +++ /dev/null @@ -1,306 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - - -#include "File.hxx" - -#include <com/sun/star/form/FormComponentType.hpp> - -#include "property.hrc" -#include "services.hxx" -#include <tools/debug.hxx> -#include <comphelper/container.hxx> -#include <comphelper/basicio.hxx> -#include <comphelper/guarding.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OFileControlModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OFileControlModel(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OFileControlModel::_getTypes() -{ - static Sequence<Type> aTypes; - if (!aTypes.getLength()) - { - // my base class - Sequence<Type> aBaseClassTypes = OControlModel::_getTypes(); - - Sequence<Type> aOwnTypes(1); - Type* pOwnTypes = aOwnTypes.getArray(); - pOwnTypes[0] = getCppuType((Reference<XReset>*)NULL); - - aTypes = concatSequences(aBaseClassTypes, aOwnTypes); - } - return aTypes; -} - - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence OFileControlModel::getSupportedServiceNames() throw(RuntimeException) -{ - StringSequence aSupported = OControlModel::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_COMPONENT_FILECONTROL; - return aSupported; -} - -//------------------------------------------------------------------ -DBG_NAME( OFileControlModel ) -//------------------------------------------------------------------ -OFileControlModel::OFileControlModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OControlModel(_rxFactory, VCL_CONTROLMODEL_FILECONTROL) - ,m_aResetListeners(m_aMutex) -{ - DBG_CTOR( OFileControlModel, NULL ); - m_nClassId = FormComponentType::FILECONTROL; -} - -//------------------------------------------------------------------ -OFileControlModel::OFileControlModel( const OFileControlModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OControlModel( _pOriginal, _rxFactory ) - ,m_aResetListeners( m_aMutex ) -{ - DBG_CTOR( OFileControlModel, NULL ); - - m_sDefaultValue = _pOriginal->m_sDefaultValue; -} - -//------------------------------------------------------------------ -OFileControlModel::~OFileControlModel() -{ - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - DBG_DTOR( OFileControlModel, NULL ); -} - -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OFileControlModel ) - -//------------------------------------------------------------------------------ -Any SAL_CALL OFileControlModel::queryAggregation(const Type& _rType) throw (RuntimeException) -{ - Any aReturn = OControlModel::queryAggregation(_rType); - if (!aReturn.hasValue()) - aReturn = ::cppu::queryInterface(_rType - ,static_cast<XReset*>(this) - ); - - return aReturn; -} - -// OComponentHelper -//----------------------------------------------------------------------------- -void OFileControlModel::disposing() -{ - OControlModel::disposing(); - - EventObject aEvt(static_cast<XWeak*>(this)); - m_aResetListeners.disposeAndClear(aEvt); -} - -//------------------------------------------------------------------------------ -Any OFileControlModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const -{ - Any aReturn; - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_TEXT: - return makeAny( ::rtl::OUString() ); - } - return OControlModel::getPropertyDefaultByHandle( _nHandle ); -} - -//------------------------------------------------------------------------------ -void OFileControlModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const -{ - switch (nHandle) - { - case PROPERTY_ID_DEFAULT_TEXT : rValue <<= m_sDefaultValue; break; - default: - OControlModel::getFastPropertyValue(rValue, nHandle); - } -} - -//------------------------------------------------------------------------------ -void OFileControlModel::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) throw ( ::com::sun::star::uno::Exception) -{ - switch (nHandle) - { - case PROPERTY_ID_DEFAULT_TEXT : - DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_STRING, "OFileControlModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - rValue >>= m_sDefaultValue; - break; - default: - OControlModel::setFastPropertyValue_NoBroadcast(nHandle, rValue); - } -} - -//------------------------------------------------------------------------------ -sal_Bool OFileControlModel::convertFastPropertyValue(Any& rConvertedValue, Any& rOldValue, sal_Int32 nHandle, const Any& rValue) - throw( IllegalArgumentException ) -{ - switch (nHandle) - { - case PROPERTY_ID_DEFAULT_TEXT : - return tryPropertyValue(rConvertedValue, rOldValue, rValue, m_sDefaultValue); - default: - return OControlModel::convertFastPropertyValue(rConvertedValue, rOldValue, nHandle, rValue); - } -} - -//------------------------------------------------------------------------------ -void OFileControlModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 2, OControlModel ) - DECL_PROP1(DEFAULT_TEXT, ::rtl::OUString, BOUND); - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OFileControlModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_FILECONTROL; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void OFileControlModel::write(const Reference<stario::XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OControlModel::write(_rxOutStream); - - ::osl::MutexGuard aGuard(m_aMutex); - - // Version - _rxOutStream->writeShort(0x0002); - // Default-Wert - _rxOutStream << m_sDefaultValue; - writeHelpTextCompatibly(_rxOutStream); -} - -//------------------------------------------------------------------------------ -void OFileControlModel::read(const Reference<stario::XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OControlModel::read(_rxInStream); - ::osl::MutexGuard aGuard(m_aMutex); - - // Version - sal_uInt16 nVersion = _rxInStream->readShort(); - // Default-Wert - switch (nVersion) - { - case 1: - _rxInStream >> m_sDefaultValue; break; - case 2: - _rxInStream >> m_sDefaultValue; - readHelpTextCompatibly(_rxInStream); - break; - default: - OSL_FAIL("OFileControlModel::read : unknown version !"); - m_sDefaultValue = ::rtl::OUString(); - } - - // Nach dem Lesen die Defaultwerte anzeigen -// _reset(); -} - -//----------------------------------------------------------------------------- -void SAL_CALL OFileControlModel::reset() throw ( ::com::sun::star::uno::RuntimeException) -{ - ::cppu::OInterfaceIteratorHelper aIter(m_aResetListeners); - EventObject aEvt(static_cast<XWeak*>(this)); - sal_Bool bContinue = sal_True; - while (aIter.hasMoreElements() && bContinue) - bContinue =((XResetListener*)aIter.next())->approveReset(aEvt); - - if (bContinue) - { - { - // Wenn Models threadSave - ::osl::MutexGuard aGuard(m_aMutex); - _reset(); - } - m_aResetListeners.notifyEach( &XResetListener::resetted, aEvt ); - } -} - -//----------------------------------------------------------------------------- -void OFileControlModel::addResetListener(const Reference<XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException) -{ - m_aResetListeners.addInterface(_rxListener); -} - -//----------------------------------------------------------------------------- -void OFileControlModel::removeResetListener(const Reference<XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException) -{ - m_aResetListeners.removeInterface(_rxListener); -} - -//------------------------------------------------------------------------------ -void OFileControlModel::_reset() -{ - { // release our mutex once (it's acquired in the calling method !), as setting aggregate properties - // may cause any uno controls belonging to us to lock the solar mutex, which is potentially dangerous with - // our own mutex locked - MutexRelease aRelease(m_aMutex); - m_xAggregateSet->setPropertyValue(PROPERTY_TEXT, makeAny(m_sDefaultValue)); - } -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/File.hxx b/forms/source/component/File.hxx deleted file mode 100644 index 4f0c56f13..000000000 --- a/forms/source/component/File.hxx +++ /dev/null @@ -1,105 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_FILE_HXX_ -#define _FORMS_FILE_HXX_ - -#include "FormComponent.hxx" - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -// OFileControlModel -//================================================================== -class OFileControlModel - :public OControlModel - ,public ::com::sun::star::form::XReset -{ - ::cppu::OInterfaceContainerHelper m_aResetListeners; - ::rtl::OUString m_sDefaultValue; - -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - DECLARE_DEFAULT_LEAF_XTOR( OFileControlModel ); - - DECLARE_UNO3_AGG_DEFAULTS(OFileControlModel, OControlModel); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - // XServiceInfo - IMPLEMENTATION_NAME(OFileControlModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // XPropertySet and friends - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const; - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception); - - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 _nHandle ) const; - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw ( ::com ::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw ( ::com ::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // XReset - virtual void SAL_CALL reset() throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addResetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeResetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - - // prevent method hiding - using OControlModel::disposing; - using OControlModel::getFastPropertyValue; - -protected: - virtual void _reset(); - - DECLARE_XCLONEABLE(); -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FORMS_FILE_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Filter.cxx b/forms/source/component/Filter.cxx deleted file mode 100644 index a4c6243b5..000000000 --- a/forms/source/component/Filter.cxx +++ /dev/null @@ -1,933 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - - -#include "Filter.hxx" -#include "FormComponent.hxx" -#include "frm_module.hxx" -#include "frm_resource.hrc" -#include "frm_resource.hxx" -#include "property.hrc" -#include "property.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/awt/VclWindowPeerAttribute.hpp> -#include <com/sun/star/awt/XCheckBox.hpp> -#include <com/sun/star/awt/XComboBox.hpp> -#include <com/sun/star/awt/XListBox.hpp> -#include <com/sun/star/awt/XRadioButton.hpp> -#include <com/sun/star/awt/XVclWindowPeer.hpp> -#include <com/sun/star/beans/NamedValue.hpp> -#include <com/sun/star/container/XChild.hpp> -#include <com/sun/star/container/XIndexAccess.hpp> -#include <com/sun/star/container/XNamed.hpp> -#include <com/sun/star/form/FormComponentType.hpp> -#include <com/sun/star/sdb/BooleanComparisonMode.hpp> -#include <com/sun/star/sdb/XColumn.hpp> -#include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/sdbc/XRowSet.hpp> -#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> -#include <com/sun/star/sdbcx/XTablesSupplier.hpp> -#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> -#include <com/sun/star/awt/XItemList.hpp> -/** === end UNO includes === **/ - -#include <comphelper/numbers.hxx> -#include <comphelper/property.hxx> -#include <connectivity/dbconversion.hxx> -#include <connectivity/dbtools.hxx> -#include <connectivity/formattedcolumnvalue.hxx> -#include <connectivity/predicateinput.hxx> -#include <rtl/ustrbuf.hxx> -#include <toolkit/helper/vclunohelper.hxx> -#include <tools/diagnose_ex.h> -#include <unotools/localedatawrapper.hxx> -#include <vcl/stdtext.hxx> -#include <vcl/svapp.hxx> -#include <tools/wintypes.hxx> - -//-------------------------------------------------------------------------- -extern "C" void SAL_CALL createRegistryInfo_OFilterControl() -{ - static ::frm::OMultiInstanceAutoRegistration< ::frm::OFilterControl > aAutoRegistration; -} - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::sdb; - using namespace ::com::sun::star::sdbc; - using namespace ::com::sun::star::sdbcx; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::form; - using namespace ::com::sun::star::container; - using namespace ::com::sun::star::ui::dialogs; - - using namespace ::connectivity; - - //===================================================================== - // OFilterControl - //===================================================================== - //--------------------------------------------------------------------- - OFilterControl::OFilterControl( const Reference< XMultiServiceFactory >& _rxORB ) - :UnoControl( _rxORB ) - ,m_aTextListeners( *this ) - ,m_aParser( _rxORB ) - ,m_nControlClass( FormComponentType::TEXTFIELD ) - ,m_bFilterList( sal_False ) - ,m_bMultiLine( sal_False ) - ,m_bFilterListFilled( sal_False ) - { - } - - //--------------------------------------------------------------------- - sal_Bool OFilterControl::ensureInitialized( ) - { - if ( !m_xField.is() ) - { - OSL_FAIL( "OFilterControl::ensureInitialized: improperly initialized: no field!" ); - return sal_False; - } - - if ( !m_xConnection.is() ) - { - OSL_FAIL( "OFilterControl::ensureInitialized: improperly initialized: no connection!" ); - return sal_False; - } - - if ( !m_xFormatter.is() ) - { - // we can create one from the connection, if it's an SDB connection - Reference< XNumberFormatsSupplier > xFormatSupplier = ::dbtools::getNumberFormats( m_xConnection, sal_True, maContext.getLegacyServiceFactory() ); - - if ( xFormatSupplier.is() ) - { - maContext.createComponent( "com.sun.star.util.NumberFormatter", m_xFormatter ); - if ( m_xFormatter.is() ) - m_xFormatter->attachNumberFormatsSupplier( xFormatSupplier ); - } - } - if ( !m_xFormatter.is() ) - { - OSL_FAIL( "OFilterControl::ensureInitialized: no number formatter!" ); - // no fallback anymore - return sal_False; - } - - return sal_True; - } - - //--------------------------------------------------------------------- - Any SAL_CALL OFilterControl::queryAggregation( const Type & rType ) throw(RuntimeException) - { - Any aRet = UnoControl::queryAggregation( rType); - if(!aRet.hasValue()) - aRet = OFilterControl_BASE::queryInterface(rType); - - return aRet; - } - - //------------------------------------------------------------------ - ::rtl::OUString OFilterControl::GetComponentServiceName() - { - ::rtl::OUString aServiceName; - switch (m_nControlClass) - { - case FormComponentType::RADIOBUTTON: - aServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("radiobutton") ); - break; - case FormComponentType::CHECKBOX: - aServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("checkbox") ); - break; - case FormComponentType::COMBOBOX: - aServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("combobox") ); - break; - case FormComponentType::LISTBOX: - aServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("listbox") ); - break; - default: - if (m_bMultiLine) - aServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MultiLineEdit") ); - else - aServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Edit") ); - } - return aServiceName; - } - - // XComponent - //--------------------------------------------------------------------- - void OFilterControl::dispose() throw( RuntimeException ) - { - EventObject aEvt(*this); - m_aTextListeners.disposeAndClear( aEvt ); - UnoControl::dispose(); - } - - //--------------------------------------------------------------------- - void OFilterControl::createPeer( const Reference< XToolkit > & rxToolkit, const Reference< XWindowPeer > & rParentPeer ) throw(RuntimeException) - { - UnoControl::createPeer( rxToolkit, rParentPeer ); - - try - { - Reference< XVclWindowPeer > xVclWindow( getPeer(), UNO_QUERY_THROW ); - switch ( m_nControlClass ) - { - case FormComponentType::CHECKBOX: - { - // checkboxes always have a tristate-mode - xVclWindow->setProperty( PROPERTY_TRISTATE, makeAny( sal_Bool( sal_True ) ) ); - xVclWindow->setProperty( PROPERTY_STATE, makeAny( sal_Int32( STATE_DONTKNOW ) ) ); - - Reference< XCheckBox > xBox( getPeer(), UNO_QUERY_THROW ); - xBox->addItemListener( this ); - - } - break; - - case FormComponentType::RADIOBUTTON: - { - xVclWindow->setProperty( PROPERTY_STATE, makeAny( sal_Int32( STATE_NOCHECK ) ) ); - - Reference< XRadioButton > xRadio( getPeer(), UNO_QUERY_THROW ); - xRadio->addItemListener( this ); - } - break; - - case FormComponentType::LISTBOX: - { - Reference< XListBox > xListBox( getPeer(), UNO_QUERY_THROW ); - xListBox->addItemListener( this ); - } - // no break - - case FormComponentType::COMBOBOX: - { - xVclWindow->setProperty(PROPERTY_AUTOCOMPLETE, makeAny( sal_Bool( sal_True ) ) ); - } - // no break - - default: - { - Reference< XWindow > xWindow( getPeer(), UNO_QUERY ); - xWindow->addFocusListener( this ); - - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - if (xText.is()) - xText->setMaxTextLen(0); - } - break; - } - - OControl::initFormControlPeer( getPeer() ); - - // filter controls are _never_ readonly - Reference< XPropertySet > xModel( getModel(), UNO_QUERY_THROW ); - Reference< XPropertySetInfo > xModelPSI( xModel->getPropertySetInfo(), UNO_SET_THROW ); - if ( xModelPSI->hasPropertyByName( PROPERTY_READONLY ) ) - xVclWindow->setProperty( PROPERTY_READONLY, makeAny( sal_Bool( sal_False ) ) ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - - if (m_bFilterList) - m_bFilterListFilled = sal_False; - } - - //--------------------------------------------------------------------- - void OFilterControl::PrepareWindowDescriptor( WindowDescriptor& rDescr ) - { - if (m_bFilterList) - rDescr.WindowAttributes |= VclWindowPeerAttribute::DROPDOWN; - } - - //--------------------------------------------------------------------- - void OFilterControl::ImplSetPeerProperty( const ::rtl::OUString& rPropName, const Any& rVal ) - { - // these properties are ignored - if (rPropName == PROPERTY_TEXT || - rPropName == PROPERTY_STATE) - return; - - UnoControl::ImplSetPeerProperty( rPropName, rVal ); - } - - // XEventListener - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::disposing(const EventObject& Source) throw( RuntimeException ) - { - UnoControl::disposing(Source); - } - - // XItemListener - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::itemStateChanged( const ItemEvent& rEvent ) throw(RuntimeException) - { - ::rtl::OUStringBuffer aText; - switch (m_nControlClass) - { - case FormComponentType::CHECKBOX: - { - if ( ( rEvent.Selected == STATE_CHECK ) || ( rEvent.Selected == STATE_NOCHECK ) ) - { - sal_Int32 nBooleanComparisonMode = ::dbtools::DatabaseMetaData( m_xConnection ).getBooleanComparisonMode(); - - bool bSelected = ( rEvent.Selected == STATE_CHECK ); - - ::rtl::OUString sExpressionMarker( RTL_CONSTASCII_USTRINGPARAM( "$expression$" ) ); - ::dbtools::getBoleanComparisonPredicate( - sExpressionMarker, - bSelected, - nBooleanComparisonMode, - aText - ); - - ::rtl::OUString sText( aText.makeStringAndClear() ); - sal_Int32 nMarkerPos( sText.indexOf( sExpressionMarker ) ); - OSL_ENSURE( nMarkerPos == 0, "OFilterControl::itemStateChanged: unsupported boolean comparison mode!" ); - // If this assertion fails, then getBoleanComparisonPredicate created a predicate which - // does not start with the expression we gave it. The only known case is when - // the comparison mode is ACCESS_COMPAT, and the value is TRUE. In this case, - // the expression is rather complex. - // Well, so this is a known issue - the filter controls (and thus the form based filter) - // do not work with boolean MS Access fields. - // To fix this, we would probably have to revert here to always return "1" or "0" as normalized - // filter, and change our client code to properly translate this (which could be some effort). - if ( nMarkerPos == 0 ) - aText.append( sText.copy( sExpressionMarker.getLength() ) ); - else - { - // fallback - aText.appendAscii( bSelected ? "1" : "0" ); - } - } - } - break; - - case FormComponentType::LISTBOX: - { - try - { - const Reference< XItemList > xItemList( getModel(), UNO_QUERY_THROW ); - ::rtl::OUString sItemText( xItemList->getItemText( rEvent.Selected ) ); - - const MapString2String::const_iterator itemPos = m_aDisplayItemToValueItem.find( sItemText ); - if ( itemPos != m_aDisplayItemToValueItem.end() ) - { - sItemText = itemPos->second; - if ( sItemText.getLength() ) - { - ::dbtools::OPredicateInputController aPredicateInput( maContext.getLegacyServiceFactory(), m_xConnection, getParseContext() ); - ::rtl::OUString sErrorMessage; - OSL_VERIFY( aPredicateInput.normalizePredicateString( sItemText, m_xField, &sErrorMessage ) ); - } - } - aText.append( sItemText ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - break; - - case FormComponentType::RADIOBUTTON: - { - if ( rEvent.Selected == STATE_CHECK ) - aText.append( ::comphelper::getString( Reference< XPropertySet >( getModel(), UNO_QUERY )->getPropertyValue( PROPERTY_REFVALUE ) ) ); - } - break; - } - - ::rtl::OUString sText( aText.makeStringAndClear() ); - if ( m_aText.compareTo( sText ) ) - { - m_aText = sText; - TextEvent aEvt; - aEvt.Source = *this; - ::cppu::OInterfaceIteratorHelper aIt( m_aTextListeners ); - while( aIt.hasMoreElements() ) - ((XTextListener *)aIt.next())->textChanged( aEvt ); - } - } - - //--------------------------------------------------------------------- - void OFilterControl::implInitFilterList() - { - if ( !ensureInitialized( ) ) - // already asserted in ensureInitialized - return; - - // ensure the cursor and the statement are disposed as soon as we leave - ::utl::SharedUNOComponent< XResultSet > xListCursor; - ::utl::SharedUNOComponent< XStatement > xStatement; - - try - { - m_bFilterListFilled = sal_True; - - if ( !m_xField.is() ) - return; - - ::rtl::OUString sFieldName; - m_xField->getPropertyValue( PROPERTY_NAME ) >>= sFieldName; - - // here we need a table to which the field belongs to - const Reference< XChild > xModelAsChild( getModel(), UNO_QUERY_THROW ); - const Reference< XRowSet > xForm( xModelAsChild->getParent(), UNO_QUERY_THROW ); - const Reference< XPropertySet > xFormProps( xForm, UNO_QUERY_THROW ); - - // create a query composer - Reference< XColumnsSupplier > xSuppColumns; - xFormProps->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SingleSelectQueryComposer"))) >>= xSuppColumns; - - const Reference< XConnection > xConnection( ::dbtools::getConnection( xForm ), UNO_SET_THROW ); - const Reference< XNameAccess > xFieldNames( xSuppColumns->getColumns(), UNO_SET_THROW ); - if ( !xFieldNames->hasByName( sFieldName ) ) - return; - ::rtl::OUString sRealFieldName, sTableName; - const Reference< XPropertySet > xComposerFieldProps( xFieldNames->getByName( sFieldName ), UNO_QUERY_THROW ); - xComposerFieldProps->getPropertyValue( PROPERTY_REALNAME ) >>= sRealFieldName; - xComposerFieldProps->getPropertyValue( PROPERTY_TABLENAME ) >>= sTableName; - - // obtain the table of the field - const Reference< XTablesSupplier > xSuppTables( xSuppColumns, UNO_QUERY_THROW ); - const Reference< XNameAccess > xTablesNames( xSuppTables->getTables(), UNO_SET_THROW ); - const Reference< XNamed > xNamedTable( xTablesNames->getByName( sTableName ), UNO_QUERY_THROW ); - sTableName = xNamedTable->getName(); - - // create a statement selecting all values for the given field - ::rtl::OUStringBuffer aStatement; - - const Reference< XDatabaseMetaData > xMeta( xConnection->getMetaData(), UNO_SET_THROW ); - const ::rtl::OUString sQuoteChar = xMeta->getIdentifierQuoteString(); - - aStatement.appendAscii( "SELECT DISTINCT " ); - aStatement.append( sQuoteChar ); - aStatement.append( sRealFieldName ); - aStatement.append( sQuoteChar ); - - // if the field had an alias in our form's statement, give it this alias in the new statement, too - if ( sFieldName.getLength() && ( sFieldName != sRealFieldName ) ) - { - aStatement.appendAscii(" AS "); - aStatement.append( sQuoteChar ); - aStatement.append( sFieldName ); - aStatement.append( sQuoteChar ); - } - - aStatement.appendAscii( " FROM " ); - - ::rtl::OUString sCatalog, sSchema, sTable; - ::dbtools::qualifiedNameComponents( xMeta, sTableName, sCatalog, sSchema, sTable, ::dbtools::eInDataManipulation ); - aStatement.append( ::dbtools::composeTableNameForSelect( xConnection, sCatalog, sSchema, sTable ) ); - - // execute the statement - xStatement.reset( xConnection->createStatement() ); - const ::rtl::OUString sSelectStatement( aStatement.makeStringAndClear( ) ); - xListCursor.reset( xStatement->executeQuery( sSelectStatement ) ); - - // retrieve the one column which we take the values from - const Reference< XColumnsSupplier > xSupplyCols( xListCursor, UNO_QUERY_THROW ); - const Reference< XIndexAccess > xFields( xSupplyCols->getColumns(), UNO_QUERY_THROW ); - const Reference< XPropertySet > xDataField( xFields->getByIndex(0), UNO_QUERY_THROW ); - - // ensure the values will be formatted according to the field format - const ::dbtools::FormattedColumnValue aFormatter( m_xFormatter, xDataField ); - - ::std::vector< ::rtl::OUString > aProposals; - aProposals.reserve(16); - - while ( xListCursor->next() && ( aProposals.size() < size_t( SHRT_MAX ) ) ) - { - const ::rtl::OUString sCurrentValue = aFormatter.getFormattedValue(); - aProposals.push_back( sCurrentValue ); - } - - // fill the list items into our peer - Sequence< ::rtl::OUString> aStringSeq( aProposals.size() ); - ::std::copy( aProposals.begin(), aProposals.end(), aStringSeq.getArray() ); - - const Reference< XComboBox > xComboBox( getPeer(), UNO_QUERY_THROW ); - xComboBox->addItems( aStringSeq, 0 ); - - // set the drop down line count to something reasonable - const sal_Int16 nLineCount = ::std::min( sal_Int16( 16 ), sal_Int16( aStringSeq.getLength() ) ); - xComboBox->setDropDownLineCount( nLineCount ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - // XFocusListener - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::focusGained(const FocusEvent& /*e*/) throw( RuntimeException ) - { - // should we fill the combobox? - if (m_bFilterList && !m_bFilterListFilled) - implInitFilterList(); - } - - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::focusLost(const FocusEvent& /*e*/) throw( RuntimeException ) - { - } - - //--------------------------------------------------------------------- - sal_Bool SAL_CALL OFilterControl::commit() throw(RuntimeException) - { - if ( !ensureInitialized( ) ) - // already asserted in ensureInitialized - return sal_True; - - ::rtl::OUString aText; - switch (m_nControlClass) - { - case FormComponentType::TEXTFIELD: - case FormComponentType::COMBOBOX: - { - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - if (xText.is()) - aText = xText->getText(); - } break; - default: - return sal_True; - } - if (m_aText.compareTo(aText)) - { - // check the text with the SQL-Parser - ::rtl::OUString aNewText(aText); - aNewText.trim(); - if ( aNewText.getLength() ) - { - ::dbtools::OPredicateInputController aPredicateInput( maContext.getLegacyServiceFactory(), m_xConnection, getParseContext() ); - ::rtl::OUString sErrorMessage; - if ( !aPredicateInput.normalizePredicateString( aNewText, m_xField, &sErrorMessage ) ) - { - // display the error and outta here - SQLContext aError; - aError.Message = String( FRM_RES_STRING( RID_STR_SYNTAXERROR ) ); - aError.Details = sErrorMessage; - displayException( aError ); - return sal_False; - } - } - - setText(aNewText); - TextEvent aEvt; - aEvt.Source = *this; - ::cppu::OInterfaceIteratorHelper aIt( m_aTextListeners ); - while( aIt.hasMoreElements() ) - static_cast< XTextListener* >( aIt.next() )->textChanged( aEvt ); - } - return sal_True; - } - - // XTextComponent - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::addTextListener(const Reference< XTextListener > & l) throw(RuntimeException) - { - m_aTextListeners.addInterface( l ); - } - - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::removeTextListener(const Reference< XTextListener > & l) throw(RuntimeException) - { - m_aTextListeners.removeInterface( l ); - } - - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::setText( const ::rtl::OUString& aText ) throw(RuntimeException) - { - if ( !ensureInitialized( ) ) - // already asserted in ensureInitialized - return; - - switch (m_nControlClass) - { - case FormComponentType::CHECKBOX: - { - Reference< XVclWindowPeer > xVclWindow( getPeer(), UNO_QUERY ); - if (xVclWindow.is()) - { - Any aValue; - if ( aText.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "1" ) ) - || aText.equalsIgnoreAsciiCaseAscii( "TRUE" ) - || aText.equalsIgnoreAsciiCaseAscii( "IS TRUE" ) - ) - { - aValue <<= (sal_Int32)STATE_CHECK; - } - else if ( aText.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "0" ) ) - || aText.equalsIgnoreAsciiCaseAscii( "FALSE" ) - ) - { - aValue <<= (sal_Int32)STATE_NOCHECK; - } - else - aValue <<= (sal_Int32)STATE_DONTKNOW; - - m_aText = aText; - xVclWindow->setProperty( PROPERTY_STATE, aValue ); - } - } break; - case FormComponentType::RADIOBUTTON: - { - Reference< XVclWindowPeer > xVclWindow( getPeer(), UNO_QUERY ); - if (xVclWindow.is()) - { - ::rtl::OUString aRefText = ::comphelper::getString(com::sun::star::uno::Reference< XPropertySet > (getModel(), UNO_QUERY)->getPropertyValue(PROPERTY_REFVALUE)); - Any aValue; - if (aText == aRefText) - aValue <<= (sal_Int32)STATE_CHECK; - else - aValue <<= (sal_Int32)STATE_NOCHECK; - m_aText = aText; - xVclWindow->setProperty(PROPERTY_STATE, aValue); - } - } break; - case FormComponentType::LISTBOX: - { - Reference< XListBox > xListBox( getPeer(), UNO_QUERY ); - if (xListBox.is()) - { - m_aText = aText; - MapString2String::const_iterator itemPos = m_aDisplayItemToValueItem.find( m_aText ); - if ( itemPos == m_aDisplayItemToValueItem.end() ) - { - const bool isQuoted = ( m_aText.getLength() > 1 ) - && ( m_aText[0] == '\'' ) - && ( m_aText[ m_aText.getLength() - 1 ] == '\'' ); - if ( isQuoted ) - { - m_aText = m_aText.copy( 1, m_aText.getLength() - 2 ); - itemPos = m_aDisplayItemToValueItem.find( m_aText ); - } - } - - OSL_ENSURE( ( itemPos != m_aDisplayItemToValueItem.end() ) || ( m_aText.getLength() == 0 ), - "OFilterControl::setText: this text is not in my display list!" ); - if ( itemPos == m_aDisplayItemToValueItem.end() ) - m_aText = ::rtl::OUString(); - - if ( m_aText.getLength() == 0) - { - while ( xListBox->getSelectedItemPos() >= 0 ) - { - xListBox->selectItemPos( xListBox->getSelectedItemPos(), sal_False ); - } - } - else - { - xListBox->selectItem( m_aText, sal_True ); - } - } - } - break; - - default: - { - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - if (xText.is()) - { - m_aText = aText; - xText->setText(aText); - } - } - } - } - - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::insertText( const ::com::sun::star::awt::Selection& rSel, const ::rtl::OUString& aText ) throw(::com::sun::star::uno::RuntimeException) - { - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - if (xText.is()) - { - xText->insertText(rSel, aText); - m_aText = xText->getText(); - } - } - - //--------------------------------------------------------------------- - ::rtl::OUString SAL_CALL OFilterControl::getText() throw(RuntimeException) - { - return m_aText; - } - - //--------------------------------------------------------------------- - ::rtl::OUString SAL_CALL OFilterControl::getSelectedText( void ) throw(RuntimeException) - { - ::rtl::OUString aSelected; - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - if (xText.is()) - aSelected = xText->getSelectedText(); - - return aSelected; - } - - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::setSelection( const ::com::sun::star::awt::Selection& aSelection ) throw(::com::sun::star::uno::RuntimeException) - { - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - if (xText.is()) - xText->setSelection( aSelection ); - } - - //--------------------------------------------------------------------- - ::com::sun::star::awt::Selection SAL_CALL OFilterControl::getSelection( void ) throw(::com::sun::star::uno::RuntimeException) - { - ::com::sun::star::awt::Selection aSel; - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - if (xText.is()) - aSel = xText->getSelection(); - return aSel; - } - - //--------------------------------------------------------------------- - sal_Bool SAL_CALL OFilterControl::isEditable( void ) throw(RuntimeException) - { - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - return xText.is() && xText->isEditable(); - } - - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::setEditable( sal_Bool bEditable ) throw(RuntimeException) - { - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - if (xText.is()) - xText->setEditable(bEditable); - } - - //--------------------------------------------------------------------- - sal_Int16 SAL_CALL OFilterControl::getMaxTextLen() throw(RuntimeException) - { - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - return xText.is() ? xText->getMaxTextLen() : 0; - } - - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::setMaxTextLen( sal_Int16 nLength ) throw(RuntimeException) - { - Reference< XTextComponent > xText( getPeer(), UNO_QUERY ); - if (xText.is()) - xText->setMaxTextLen(nLength); - } - - //--------------------------------------------------------------------- - void OFilterControl::displayException( const ::com::sun::star::sdb::SQLContext& _rExcept ) - { - try - { - Sequence< Any > aArgs(2); - aArgs[0] <<= PropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SQLException") ), 0, makeAny( _rExcept ), PropertyState_DIRECT_VALUE); - aArgs[1] <<= PropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParentWindow") ), 0, makeAny( m_xMessageParent ), PropertyState_DIRECT_VALUE); - - static ::rtl::OUString s_sDialogServiceName (RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdb.ErrorMessageDialog") ); - - Reference< XExecutableDialog > xErrorDialog( maContext.createComponentWithArguments( s_sDialogServiceName, aArgs ), UNO_QUERY ); - if ( xErrorDialog.is() ) - xErrorDialog->execute(); - else - { - Window* pMessageParent = VCLUnoHelper::GetWindow( m_xMessageParent ); - ShowServiceNotAvailableError( pMessageParent, s_sDialogServiceName, sal_True ); - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - //--------------------------------------------------------------------- - void SAL_CALL OFilterControl::initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException) - { - const Any* pArguments = aArguments.getConstArray(); - const Any* pArgumentsEnd = pArguments + aArguments.getLength(); - - PropertyValue aProp; - NamedValue aValue; - const ::rtl::OUString* pName = NULL; - const Any* pValue = NULL; - - for ( ; pArguments != pArgumentsEnd; ++pArguments ) - { - // we recognize PropertyValues and NamedValues - if ( *pArguments >>= aProp ) - { - pName = &aProp.Name; - pValue = &aProp.Value; - } - else if ( *pArguments >>= aValue ) - { - pName = &aValue.Name; - pValue = &aValue.Value; - } - else - { - OSL_FAIL( "OFilterControl::initialize: unrecognized argument!" ); - continue; - } - - if ( 0 == pName->compareToAscii( "MessageParent" ) ) - { - // the message parent - *pValue >>= m_xMessageParent; - OSL_ENSURE( m_xMessageParent.is(), "OFilterControl::initialize: invalid MessageParent!" ); - } - else if ( 0 == pName->compareToAscii( "NumberFormatter" ) ) - { - // the number format. This argument is optional. - *pValue >>= m_xFormatter; - OSL_ENSURE( m_xFormatter.is(), "OFilterControl::initialize: invalid NumberFormatter!" ); - } - else if ( 0 == pName->compareToAscii( "ControlModel" ) ) - { - // the control model for which we act as filter control - Reference< XPropertySet > xControlModel; - if ( !(*pValue >>= xControlModel ) || !xControlModel.is() ) - { - OSL_FAIL( "OFilterControl::initialize: invalid control model argument!" ); - continue; - } - - // some properties which are "derived" from the control model we're working for - // ................................................... - // the field - m_xField.clear(); - OSL_ENSURE( ::comphelper::hasProperty( PROPERTY_BOUNDFIELD, xControlModel ), "OFilterControl::initialize: control model needs a bound field property!" ); - xControlModel->getPropertyValue( PROPERTY_BOUNDFIELD ) >>= m_xField; - - // ................................................... - // filter list and control class - m_bFilterList = ::comphelper::hasProperty( PROPERTY_FILTERPROPOSAL, xControlModel ) && ::comphelper::getBOOL( xControlModel->getPropertyValue( PROPERTY_FILTERPROPOSAL ) ); - if ( m_bFilterList ) - m_nControlClass = FormComponentType::COMBOBOX; - else - { - sal_Int16 nClassId = ::comphelper::getINT16( xControlModel->getPropertyValue( PROPERTY_CLASSID ) ); - switch (nClassId) - { - case FormComponentType::CHECKBOX: - case FormComponentType::RADIOBUTTON: - case FormComponentType::LISTBOX: - case FormComponentType::COMBOBOX: - m_nControlClass = nClassId; - if ( FormComponentType::LISTBOX == nClassId ) - { - Sequence< ::rtl::OUString > aDisplayItems; - OSL_VERIFY( xControlModel->getPropertyValue( PROPERTY_STRINGITEMLIST ) >>= aDisplayItems ); - Sequence< ::rtl::OUString > aValueItems; - OSL_VERIFY( xControlModel->getPropertyValue( PROPERTY_VALUE_SEQ ) >>= aValueItems ); - OSL_ENSURE( aDisplayItems.getLength() == aValueItems.getLength(), "OFilterControl::initialize: inconsistent item lists!" ); - for ( sal_Int32 i=0; i < ::std::min( aDisplayItems.getLength(), aValueItems.getLength() ); ++i ) - m_aDisplayItemToValueItem[ aDisplayItems[i] ] = aValueItems[i]; - } - break; - default: - m_bMultiLine = ::comphelper::hasProperty( PROPERTY_MULTILINE, xControlModel ) && ::comphelper::getBOOL( xControlModel->getPropertyValue( PROPERTY_MULTILINE ) ); - m_nControlClass = FormComponentType::TEXTFIELD; - break; - } - } - - // ................................................... - // the connection meta data for the form which we're working for - Reference< XChild > xModel( xControlModel, UNO_QUERY ); - Reference< XRowSet > xForm; - if ( xModel.is() ) - xForm = xForm.query( xModel->getParent() ); - m_xConnection = ::dbtools::getConnection( xForm ); - OSL_ENSURE( m_xConnection.is(), "OFilterControl::initialize: unable to determine the form's connection!" ); - } - } - } - - //--------------------------------------------------------------------- - ::rtl::OUString SAL_CALL OFilterControl::getImplementationName( ) throw (RuntimeException) - { - return getImplementationName_Static(); - } - - //--------------------------------------------------------------------- - sal_Bool SAL_CALL OFilterControl::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException) - { - Sequence< ::rtl::OUString > aSupported( getSupportedServiceNames() ); - const ::rtl::OUString* pArray = aSupported.getConstArray(); - for( sal_Int32 i = 0; i < aSupported.getLength(); ++i, ++pArray ) - if( pArray->equals( ServiceName ) ) - return sal_True; - return sal_False; - } - - //--------------------------------------------------------------------- - Sequence< ::rtl::OUString > SAL_CALL OFilterControl::getSupportedServiceNames( ) throw (RuntimeException) - { - return getSupportedServiceNames_Static(); - } - - //--------------------------------------------------------------------- - ::rtl::OUString SAL_CALL OFilterControl::getImplementationName_Static() - { - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.forms.OFilterControl" ) ); - } - - //--------------------------------------------------------------------- - Sequence< ::rtl::OUString > SAL_CALL OFilterControl::getSupportedServiceNames_Static() - { - Sequence< ::rtl::OUString > aNames( 2 ); - aNames[ 0 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.control.FilterControl" ) ); - aNames[ 1 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControl" ) ); - return aNames; - } - - //--------------------------------------------------------------------- - Reference< XInterface > SAL_CALL OFilterControl::Create( const Reference< XMultiServiceFactory >& _rxFactory ) - { - return static_cast< XServiceInfo* >( new OFilterControl( _rxFactory ) ); - } - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Filter.hxx b/forms/source/component/Filter.hxx deleted file mode 100644 index 316a214e8..000000000 --- a/forms/source/component/Filter.hxx +++ /dev/null @@ -1,161 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_COMPONENT_FILTER_HXX -#define FORMS_COMPONENT_FILTER_HXX - -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/lang/XInitialization.hpp> -#include <com/sun/star/form/XBoundComponent.hpp> -#include <com/sun/star/util/XNumberFormatter.hpp> -#include <com/sun/star/awt/XTextComponent.hpp> -#include <com/sun/star/sdb/SQLContext.hpp> -#include <toolkit/controls/unocontrol.hxx> - -#include <toolkit/helper/listenermultiplexer.hxx> -#include <cppuhelper/implbase5.hxx> -#include <comphelper/uno3.hxx> -#include <comphelper/componentcontext.hxx> -#include <cppuhelper/implbase4.hxx> -#include <connectivity/sqlparse.hxx> -#include <svx/ParseContext.hxx> - -#include <boost/unordered_map.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - - //===================================================================== - // OFilterControl - //===================================================================== - typedef ::cppu::ImplHelper5 < ::com::sun::star::awt::XTextComponent - , ::com::sun::star::awt::XFocusListener - , ::com::sun::star::awt::XItemListener - , ::com::sun::star::form::XBoundComponent - , ::com::sun::star::lang::XInitialization - > OFilterControl_BASE; - - class OFilterControl :public UnoControl - ,public OFilterControl_BASE - ,public ::svxform::OParseContextClient - { - TextListenerMultiplexer m_aTextListeners; - - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xField; - ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter > m_xFormatter; - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > m_xConnection; - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; - ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > m_xMessageParent; - - typedef ::boost::unordered_map< ::rtl::OUString, ::rtl::OUString, ::rtl::OUStringHash > MapString2String; - MapString2String m_aDisplayItemToValueItem; - - ::rtl::OUString m_aText; - ::connectivity::OSQLParser m_aParser; - sal_Int16 m_nControlClass; // which kind of control do we use? - sal_Bool m_bFilterList : 1; - sal_Bool m_bMultiLine : 1; - sal_Bool m_bFilterListFilled : 1; - - private: -// OFilterControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB); - - void implInitFilterList(); - - public: - OFilterControl( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB ); - - DECLARE_UNO3_AGG_DEFAULTS(OFilterControl,OWeakAggObject); - ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); - - virtual ::rtl::OUString GetComponentServiceName(); - virtual void SAL_CALL createPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit > & rxToolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > & rParentPeer ) throw( ::com::sun::star::uno::RuntimeException ); - - // ::com::sun::star::lang::XComponent - virtual void SAL_CALL dispose(void) throw( ::com::sun::star::uno::RuntimeException ); - - // ::com::sun::star::awt::XTextComponent - virtual void SAL_CALL addTextListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener > & l ) throw( ::com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL removeTextListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextListener > & l ) throw( ::com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL setText( const ::rtl::OUString& aText ) throw( ::com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL insertText( const ::com::sun::star::awt::Selection& rSel, const ::rtl::OUString& aText ) throw( ::com::sun::star::uno::RuntimeException ); - virtual ::rtl::OUString SAL_CALL getText() throw( ::com::sun::star::uno::RuntimeException ); - virtual ::rtl::OUString SAL_CALL getSelectedText() throw( ::com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL setSelection( const ::com::sun::star::awt::Selection& aSelection ) throw( ::com::sun::star::uno::RuntimeException ); - virtual ::com::sun::star::awt::Selection SAL_CALL getSelection() throw( ::com::sun::star::uno::RuntimeException ); - virtual sal_Bool SAL_CALL isEditable() throw( ::com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL setEditable( sal_Bool bEditable ) throw( ::com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL setMaxTextLen( sal_Int16 nLength ) throw( ::com::sun::star::uno::RuntimeException ); - virtual sal_Int16 SAL_CALL getMaxTextLen() throw( ::com::sun::star::uno::RuntimeException ); - - // ::com::sun::star::form::XBoundComponent - virtual void SAL_CALL addUpdateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener > & /*l*/) throw( ::com::sun::star::uno::RuntimeException ) {} - virtual void SAL_CALL removeUpdateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener > & /*l*/) throw( ::com::sun::star::uno::RuntimeException ) {} - virtual sal_Bool SAL_CALL commit() throw( ::com::sun::star::uno::RuntimeException ); - - // ::com::sun::star::lang::XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( ::com::sun::star::uno::RuntimeException ); - - // ::com::sun::star::awt::XFocusListener - virtual void SAL_CALL focusGained(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL focusLost(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException ); - - // ::com::sun::star::awt::XItemListener - virtual void SAL_CALL itemStateChanged(const ::com::sun::star::awt::ItemEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException ); - - // ::com::sun::star::util::XInitialization - virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); - - // XServiceInfo - virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); - - // com::sun::star::lang::XServiceInfo - static version - static ::rtl::OUString SAL_CALL getImplementationName_Static(); - static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static(); - static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory ); - - protected: - virtual void PrepareWindowDescriptor( ::com::sun::star::awt::WindowDescriptor& rDesc ); - virtual void ImplSetPeerProperty( const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Any& rVal ); - - sal_Bool ensureInitialized( ); - - void displayException( const ::com::sun::star::sdb::SQLContext& _rExcept ); - }; -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_COMPONENT_FILTER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/FixedText.cxx b/forms/source/component/FixedText.cxx deleted file mode 100644 index 31ac62216..000000000 --- a/forms/source/component/FixedText.cxx +++ /dev/null @@ -1,138 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - - -#include "FixedText.hxx" -#include "services.hxx" -#include "property.hrc" -#include "property.hxx" -#include <tools/debug.hxx> - -//......................................................................... -namespace frm -{ -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; - -//------------------------------------------------------------------------------ -InterfaceRef SAL_CALL OFixedTextModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException) -{ - return *(new OFixedTextModel(_rxFactory)); -} - -//------------------------------------------------------------------ -DBG_NAME( OFixedTextModel ) -//------------------------------------------------------------------ -OFixedTextModel::OFixedTextModel( const Reference<XMultiServiceFactory>& _rxFactory ) - :OControlModel(_rxFactory, VCL_CONTROLMODEL_FIXEDTEXT) - -{ - DBG_CTOR( OFixedTextModel, NULL ); - m_nClassId = FormComponentType::FIXEDTEXT; -} - -//------------------------------------------------------------------ -OFixedTextModel::OFixedTextModel( const OFixedTextModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OControlModel( _pOriginal, _rxFactory ) - -{ - DBG_CTOR( OFixedTextModel, NULL ); -} - -//------------------------------------------------------------------ -OFixedTextModel::~OFixedTextModel( ) -{ - DBG_DTOR( OFixedTextModel, NULL ); -} - -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OFixedTextModel ) - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OFixedTextModel::getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException) -{ - StringSequence aSupported = OControlModel::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_COMPONENT_FIXEDTEXT; - return aSupported; -} - -//------------------------------------------------------------------------------ -void OFixedTextModel::describeAggregateProperties( Sequence< Property >& _rAggregateProps ) const -{ - OControlModel::describeAggregateProperties( _rAggregateProps ); - RemoveProperty( _rAggregateProps, PROPERTY_TABSTOP ); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OFixedTextModel::getServiceName() throw(RuntimeException) -{ - return FRM_COMPONENT_FIXEDTEXT; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void SAL_CALL OFixedTextModel::write(const Reference<XObjectOutputStream>& _rxOutStream) - throw(IOException, RuntimeException) -{ - OControlModel::write(_rxOutStream); - - // Version - _rxOutStream->writeShort(0x0002); - writeHelpTextCompatibly(_rxOutStream); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OFixedTextModel::read(const Reference<XObjectInputStream>& _rxInStream) throw(IOException, RuntimeException) -{ - OControlModel::read(_rxInStream); - - // Version - sal_Int16 nVersion = _rxInStream->readShort(); - if (nVersion > 1) - readHelpTextCompatibly(_rxInStream); -} - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/FixedText.hxx b/forms/source/component/FixedText.hxx deleted file mode 100644 index d9db90885..000000000 --- a/forms/source/component/FixedText.hxx +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_FIXEDTEXT_HXX_ -#define _FORMS_FIXEDTEXT_HXX_ - -#include "FormComponent.hxx" - -//......................................................................... -namespace frm -{ - -//================================================================== -// OFixedTextModel -//================================================================== -class OFixedTextModel - :public OControlModel -{ -public: - DECLARE_DEFAULT_LEAF_XTOR( OFixedTextModel ); - -// XServiceInfo - IMPLEMENTATION_NAME(OFixedTextModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - -// XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - -protected: - DECLARE_XCLONEABLE(); -}; - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_FIXEDTEXT_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/FormComponent.cxx b/forms/source/component/FormComponent.cxx deleted file mode 100644 index d57723920..000000000 --- a/forms/source/component/FormComponent.cxx +++ /dev/null @@ -1,3070 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "componenttools.hxx" -#include "FormComponent.hxx" -#include "frm_resource.hrc" -#include "frm_resource.hxx" -#include "property.hrc" -#include "services.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/awt/XTextComponent.hpp> -#include <com/sun/star/awt/XVclWindowPeer.hpp> -#include <com/sun/star/awt/XWindow.hpp> -#include <com/sun/star/form/XForm.hpp> -#include <com/sun/star/form/XLoadable.hpp> -#include <com/sun/star/io/XMarkableStream.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/sdb/XRowSetChangeBroadcaster.hpp> -#include <com/sun/star/sdb/XRowSetSupplier.hpp> -#include <com/sun/star/sdbc/ColumnValue.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> -/** === end UNO includes === **/ - -#include <comphelper/basicio.hxx> -#include <comphelper/guarding.hxx> -#include <comphelper/listenernotification.hxx> -#include <comphelper/property.hxx> -#include <connectivity/dbtools.hxx> -#include <cppuhelper/queryinterface.hxx> -#include <rtl/logfile.hxx> -#include <toolkit/helper/emptyfontdescriptor.hxx> -#include <tools/debug.hxx> -#include <tools/diagnose_ex.h> - -#include <functional> -#include <algorithm> - - -//... namespace frm ....................................................... -namespace frm -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::sdb; - using namespace ::com::sun::star::sdbc; - using namespace ::com::sun::star::sdbcx; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::container; - using namespace ::com::sun::star::form; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::io; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::form::binding; - using namespace ::com::sun::star::form::validation; - using namespace ::dbtools; - using namespace ::comphelper; - - //========================================================================= - //= FieldChangeNotifier - //========================================================================= - //------------------------------------------------------------------------- - void ControlModelLock::impl_notifyAll_nothrow() - { - m_rModel.firePropertyChanges( m_aHandles, m_aOldValues, m_aNewValues, OControlModel::LockAccess() ); - } - - //------------------------------------------------------------------------- - void ControlModelLock::addPropertyNotification( const sal_Int32 _nHandle, const Any& _rOldValue, const Any& _rNewValue ) - { - sal_Int32 nOldLength = m_aHandles.getLength(); - if ( ( nOldLength != m_aOldValues.getLength() ) - || ( nOldLength != m_aNewValues.getLength() ) - ) - throw RuntimeException( ::rtl::OUString(), m_rModel ); - - m_aHandles.realloc( nOldLength + 1 ); - m_aHandles[ nOldLength ] = _nHandle; - m_aOldValues.realloc( nOldLength + 1 ); - m_aOldValues[ nOldLength ] = _rOldValue; - m_aNewValues.realloc( nOldLength + 1 ); - m_aNewValues[ nOldLength ] = _rNewValue; - } - - //========================================================================= - //= FieldChangeNotifier - //========================================================================= - //------------------------------------------------------------------------- - class FieldChangeNotifier - { - public: - FieldChangeNotifier( ControlModelLock& _rLock ) - :m_rLock( _rLock ) - ,m_rModel( dynamic_cast< OBoundControlModel& >( _rLock.getModel() ) ) - { - m_xOldField = m_rModel.getField(); - } - - ~FieldChangeNotifier() - { - Reference< XPropertySet > xNewField( m_rModel.getField() ); - if ( m_xOldField != xNewField ) - m_rLock.addPropertyNotification( PROPERTY_ID_BOUNDFIELD, makeAny( m_xOldField ), makeAny( xNewField ) ); - } - - private: - ControlModelLock& m_rLock; - OBoundControlModel& m_rModel; - Reference< XPropertySet > m_xOldField; - }; - -//============================================================================= -//= base class for form layer controls -//============================================================================= -DBG_NAME(frm_OControl) -//------------------------------------------------------------------------------ -OControl::OControl( const Reference< XMultiServiceFactory >& _rxFactory, const rtl::OUString& _rAggregateService, const sal_Bool _bSetDelegator ) - :OComponentHelper(m_aMutex) - ,m_aContext( _rxFactory ) -{ - DBG_CTOR(frm_OControl, NULL); - // VCL-Control aggregieren - // bei Aggregation den Refcount um eins erhoehen da im setDelegator - // das Aggregat selbst den Refcount erhoeht - increment( m_refCount ); - { - m_xAggregate = m_xAggregate.query( _rxFactory->createInstance( _rAggregateService ) ); - m_xControl = m_xControl.query( m_xAggregate ); - } - decrement( m_refCount ); - - if ( _bSetDelegator ) - doSetDelegator(); -} - -//------------------------------------------------------------------------------ -OControl::~OControl() -{ - DBG_DTOR(frm_OControl, NULL); - doResetDelegator(); -} - -//------------------------------------------------------------------------------ -void OControl::doResetDelegator() -{ - if ( m_xAggregate.is() ) - m_xAggregate->setDelegator( NULL ); -} - -//------------------------------------------------------------------------------ -void OControl::doSetDelegator() -{ - increment( m_refCount ); - if ( m_xAggregate.is() ) - { // those brackets are important for some compilers, don't remove! - // (they ensure that the temporary object created in the line below - // is destroyed *before* the refcount-decrement) - m_xAggregate->setDelegator( static_cast< XWeak* >( this ) ); - } - decrement( m_refCount ); -} - -// UNO Anbindung -//------------------------------------------------------------------------------ -Any SAL_CALL OControl::queryAggregation( const Type& _rType ) throw(RuntimeException) -{ - // ask the base class - Any aReturn( OComponentHelper::queryAggregation(_rType) ); - // ask our own interfaces - if (!aReturn.hasValue()) - { - aReturn = OControl_BASE::queryInterface(_rType); - // ask our aggregate - if (!aReturn.hasValue() && m_xAggregate.is()) - aReturn = m_xAggregate->queryAggregation(_rType); - } - - return aReturn; -} - -//------------------------------------------------------------------------------ -Sequence<sal_Int8> SAL_CALL OControl::getImplementationId() throw(RuntimeException) -{ - return OImplementationIds::getImplementationId(getTypes()); -} - -//------------------------------------------------------------------------------ -Sequence<Type> SAL_CALL OControl::getTypes() throw(RuntimeException) -{ - TypeBag aTypes( _getTypes() ); - - Reference< XTypeProvider > xProv; - if ( query_aggregation( m_xAggregate, xProv ) ) - aTypes.addTypes( xProv->getTypes() ); - - return aTypes.getTypes(); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OControl::_getTypes() -{ - return TypeBag( OComponentHelper::getTypes(), OControl_BASE::getTypes() ).getTypes(); -} - -//------------------------------------------------------------------------------ -void OControl::initFormControlPeer( const Reference< XWindowPeer >& /*_rxPeer*/ ) -{ - // nothing to do here -} - -// OComponentHelper -//------------------------------------------------------------------------------ -void OControl::disposing() -{ - OComponentHelper::disposing(); - - m_aWindowStateGuard.attach( NULL, NULL ); - - Reference< XComponent > xComp; - if (query_aggregation(m_xAggregate, xComp)) - xComp->dispose(); -} - -// XServiceInfo -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OControl::supportsService(const rtl::OUString& _rsServiceName) throw ( RuntimeException) -{ - Sequence<rtl::OUString> aSupported = getSupportedServiceNames(); - const rtl::OUString* pSupported = aSupported.getConstArray(); - for (sal_Int32 i=0; i<aSupported.getLength(); ++i, ++pSupported) - if (pSupported->equals(_rsServiceName)) - return sal_True; - return sal_False; -} - -//------------------------------------------------------------------------------ -Sequence< ::rtl::OUString > OControl::getAggregateServiceNames() -{ - Sequence< ::rtl::OUString > aAggServices; - Reference< XServiceInfo > xInfo; - if ( query_aggregation( m_xAggregate, xInfo ) ) - aAggServices = xInfo->getSupportedServiceNames(); - return aAggServices; -} - -//------------------------------------------------------------------------------ -Sequence<rtl::OUString> SAL_CALL OControl::getSupportedServiceNames() throw(RuntimeException) -{ - return ::comphelper::concatSequences( - getAggregateServiceNames(), - getSupportedServiceNames_Static() - ); -} - -//------------------------------------------------------------------------------ -Sequence< ::rtl::OUString > SAL_CALL OControl::getSupportedServiceNames_Static() throw( RuntimeException ) -{ - // no own supported service names - return Sequence< ::rtl::OUString >(); -} - -// XEventListener -//------------------------------------------------------------------------------ -void SAL_CALL OControl::disposing(const com::sun::star::lang::EventObject& _rEvent) throw (RuntimeException) -{ - Reference< XInterface > xAggAsIface; - query_aggregation(m_xAggregate, xAggAsIface); - - // does the disposing come from the aggregate ? - if (xAggAsIface != Reference< XInterface >(_rEvent.Source, UNO_QUERY)) - { // no -> forward it - Reference<com::sun::star::lang::XEventListener> xListener; - if (query_aggregation(m_xAggregate, xListener)) - xListener->disposing(_rEvent); - } -} - -// XControl -//------------------------------------------------------------------------------ -void SAL_CALL OControl::setContext(const Reference< XInterface >& Context) throw (RuntimeException) -{ - if (m_xControl.is()) - m_xControl->setContext(Context); -} - -//------------------------------------------------------------------------------ -Reference< XInterface > SAL_CALL OControl::getContext() throw (RuntimeException) -{ - return m_xControl.is() ? m_xControl->getContext() : Reference< XInterface >(); -} - -//------------------------------------------------------------------------------ -void OControl::impl_resetStateGuard_nothrow() -{ - Reference< XWindow2 > xWindow; - Reference< XControlModel > xModel; - try - { - xWindow.set( getPeer(), UNO_QUERY ); - xModel.set( getModel(), UNO_QUERY ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - m_aWindowStateGuard.attach( xWindow, xModel ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OControl::createPeer(const Reference<XToolkit>& _rxToolkit, const Reference<XWindowPeer>& _rxParent) throw (RuntimeException) -{ - if ( m_xControl.is() ) - { - m_xControl->createPeer( _rxToolkit, _rxParent ); - - initFormControlPeer( getPeer() ); - - impl_resetStateGuard_nothrow(); - } -} - -//------------------------------------------------------------------------------ -Reference<XWindowPeer> SAL_CALL OControl::getPeer() throw ( RuntimeException) -{ - return m_xControl.is() ? m_xControl->getPeer() : Reference<XWindowPeer>(); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OControl::setModel(const Reference<XControlModel>& Model) throw ( RuntimeException) -{ - if ( !m_xControl.is() ) - return sal_False; - - sal_Bool bSuccess = m_xControl->setModel( Model ); - impl_resetStateGuard_nothrow(); - return bSuccess; -} - -//------------------------------------------------------------------------------ -Reference<XControlModel> SAL_CALL OControl::getModel() throw ( RuntimeException) -{ - return m_xControl.is() ? m_xControl->getModel() : Reference<XControlModel>(); -} - -//------------------------------------------------------------------------------ -Reference<XView> SAL_CALL OControl::getView() throw ( RuntimeException) -{ - return m_xControl.is() ? m_xControl->getView() : Reference<XView>(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OControl::setDesignMode(sal_Bool bOn) throw ( RuntimeException) -{ - if (m_xControl.is()) - m_xControl->setDesignMode(bOn); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OControl::isDesignMode() throw ( RuntimeException) -{ - return m_xControl.is() ? m_xControl->isDesignMode() : sal_True; -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OControl::isTransparent() throw ( RuntimeException) -{ - return m_xControl.is() ? m_xControl->isTransparent() : sal_True; -} - -//================================================================== -//= OBoundControl -//================================================================== -DBG_NAME(frm_OBoundControl); -//------------------------------------------------------------------ -OBoundControl::OBoundControl( const Reference< XMultiServiceFactory >& _rxFactory, - const ::rtl::OUString& _rAggregateService, const sal_Bool _bSetDelegator ) - :OControl( _rxFactory, _rAggregateService, _bSetDelegator ) - ,m_bLocked(sal_False) - ,m_aOriginalFont( EmptyFontDescriptor() ) - ,m_nOriginalTextLineColor( 0 ) -{ - DBG_CTOR(frm_OBoundControl, NULL); -} - -//------------------------------------------------------------------ -OBoundControl::~OBoundControl() -{ - DBG_DTOR(frm_OBoundControl, NULL); -} -// ----------------------------------------------------------------------------- -Sequence< Type> OBoundControl::_getTypes() -{ - return TypeBag( OControl::_getTypes(), OBoundControl_BASE::getTypes() ).getTypes(); -} -//------------------------------------------------------------------ -Any SAL_CALL OBoundControl::queryAggregation(const Type& _rType) throw(RuntimeException) -{ - Any aReturn; - - // XTypeProvider first - don't ask the OBoundControl_BASE, it would deliver incomplete types - if ( _rType.equals( ::getCppuType( static_cast< Reference< XTypeProvider >* >( NULL ) ) ) ) - aReturn = OControl::queryAggregation( _rType ); - - // ask our own interfaces - // (do this first (except XTypeProvider ) - we want to "overwrite" XPropertiesChangeListener) - if ( !aReturn.hasValue() ) - aReturn = OBoundControl_BASE::queryInterface( _rType ); - - // ask the base class - if ( !aReturn.hasValue() ) - aReturn = OControl::queryAggregation( _rType ); - - return aReturn; -} - -//------------------------------------------------------------------ -sal_Bool SAL_CALL OBoundControl::getLock() throw(RuntimeException) -{ - return m_bLocked; -} - -//------------------------------------------------------------------ -void SAL_CALL OBoundControl::setLock(sal_Bool _bLock) throw(RuntimeException) -{ - if (m_bLocked == _bLock) - return; - - osl::MutexGuard aGuard(m_aMutex); - _setLock(_bLock); - m_bLocked = _bLock; -} - -//------------------------------------------------------------------ -void OBoundControl::_setLock(sal_Bool _bLock) -{ - // try to set the text component to readonly - Reference< XWindowPeer > xPeer = getPeer(); - Reference< XTextComponent > xText( xPeer, UNO_QUERY ); - - if ( xText.is() ) - xText->setEditable( !_bLock ); - else - { - // disable the window - Reference< XWindow > xComp( xPeer, UNO_QUERY ); - if ( xComp.is() ) - xComp->setEnable( !_bLock ); - } -} - -//-------------------------------------------------------------------- -sal_Bool SAL_CALL OBoundControl::setModel( const Reference< XControlModel >& _rxModel ) throw (RuntimeException) -{ - return OControl::setModel( _rxModel ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OBoundControl::disposing(const EventObject& Source) throw (RuntimeException) -{ - // just disambiguate - OControl::disposing(Source); -} - -//-------------------------------------------------------------------- -void OBoundControl::disposing() -{ - OControl::disposing(); -} - -//================================================================== -//= OControlModel -//================================================================== -DBG_NAME(OControlModel) -//------------------------------------------------------------------ -Sequence<sal_Int8> SAL_CALL OControlModel::getImplementationId() throw(RuntimeException) -{ - return OImplementationIds::getImplementationId(getTypes()); -} - -//------------------------------------------------------------------ -Sequence<Type> SAL_CALL OControlModel::getTypes() throw(RuntimeException) -{ - TypeBag aTypes( _getTypes() ); - - Reference< XTypeProvider > xProv; - if ( query_aggregation( m_xAggregate, xProv ) ) - aTypes.addTypes( xProv->getTypes() ); - - return aTypes.getTypes(); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OControlModel::_getTypes() -{ - return TypeBag( OComponentHelper::getTypes(), - OPropertySetAggregationHelper::getTypes(), - OControlModel_BASE::getTypes() - ).getTypes(); -} - -//------------------------------------------------------------------ -Any SAL_CALL OControlModel::queryAggregation(const Type& _rType) throw (RuntimeException) -{ - // base class 1 - Any aReturn(OComponentHelper::queryAggregation(_rType)); - - // base class 2 - if (!aReturn.hasValue()) - { - aReturn = OControlModel_BASE::queryInterface(_rType); - - // our own interfaces - if (!aReturn.hasValue()) - { - aReturn = OPropertySetAggregationHelper::queryInterface(_rType); - // our aggregate - if (!aReturn.hasValue() && m_xAggregate.is() && !_rType.equals(::getCppuType(static_cast< Reference< XCloneable>* >(NULL)))) - aReturn = m_xAggregate->queryAggregation(_rType); - } - } - return aReturn; -} - -//------------------------------------------------------------------------------ -void OControlModel::readHelpTextCompatibly(const staruno::Reference< stario::XObjectInputStream >& _rxInStream) -{ - ::rtl::OUString sHelpText; - ::comphelper::operator>>( _rxInStream, sHelpText); - try - { - if (m_xAggregateSet.is()) - m_xAggregateSet->setPropertyValue(PROPERTY_HELPTEXT, makeAny(sHelpText)); - } - catch(const Exception&) - { - OSL_FAIL("OControlModel::readHelpTextCompatibly: could not forward the property value to the aggregate!"); - } -} - -//------------------------------------------------------------------------------ -void OControlModel::writeHelpTextCompatibly(const staruno::Reference< stario::XObjectOutputStream >& _rxOutStream) -{ - ::rtl::OUString sHelpText; - try - { - if (m_xAggregateSet.is()) - m_xAggregateSet->getPropertyValue(PROPERTY_HELPTEXT) >>= sHelpText; - } - catch(const Exception&) - { - OSL_FAIL("OControlModel::writeHelpTextCompatibly: could not retrieve the property value from the aggregate!"); - } - ::comphelper::operator<<( _rxOutStream, sHelpText); -} - -//------------------------------------------------------------------ -OControlModel::OControlModel( - const Reference<com::sun::star::lang::XMultiServiceFactory>& _rxFactory, - const ::rtl::OUString& _rUnoControlModelTypeName, - const ::rtl::OUString& rDefault, const sal_Bool _bSetDelegator) - :OComponentHelper(m_aMutex) - ,OPropertySetAggregationHelper(OComponentHelper::rBHelper) - ,m_aContext( _rxFactory ) - ,m_lockCount( 0 ) - ,m_aPropertyBagHelper( *this ) - ,m_nTabIndex(FRM_DEFAULT_TABINDEX) - ,m_nClassId(FormComponentType::CONTROL) - ,m_bNativeLook( sal_False ) - // form controls are usually embedded into documents, not dialogs, and in documents - // the native look is ugly .... - // #i37342# -{ - DBG_CTOR(OControlModel, NULL); - if (_rUnoControlModelTypeName.getLength()) // the is a model we have to aggregate - { - increment(m_refCount); - - { - m_xAggregate = Reference<XAggregation>(_rxFactory->createInstance(_rUnoControlModelTypeName), UNO_QUERY); - setAggregation(m_xAggregate); - - if ( m_xAggregateSet.is() ) - { - try - { - if ( rDefault.getLength() ) - m_xAggregateSet->setPropertyValue( PROPERTY_DEFAULTCONTROL, makeAny( rDefault ) ); - } - catch( const Exception& ) - { - OSL_FAIL( "OControlModel::OControlModel: caught an exception!" ); - } - } - } - - if (_bSetDelegator) - doSetDelegator(); - - // Refcount wieder bei NULL - decrement(m_refCount); - } -} - -//------------------------------------------------------------------ -OControlModel::OControlModel( const OControlModel* _pOriginal, const Reference< XMultiServiceFactory>& _rxFactory, const sal_Bool _bCloneAggregate, const sal_Bool _bSetDelegator ) - :OComponentHelper( m_aMutex ) - ,OPropertySetAggregationHelper( OComponentHelper::rBHelper ) - ,m_aContext( _rxFactory ) - ,m_lockCount( 0 ) - ,m_aPropertyBagHelper( *this ) - ,m_nTabIndex( FRM_DEFAULT_TABINDEX ) - ,m_nClassId( FormComponentType::CONTROL ) -{ - DBG_CTOR( OControlModel, NULL ); - DBG_ASSERT( _pOriginal, "OControlModel::OControlModel: invalid original!" ); - - // copy members - m_aName = _pOriginal->m_aName; - m_aTag = _pOriginal->m_aTag; - m_nTabIndex = _pOriginal->m_nTabIndex; - m_nClassId = _pOriginal->m_nClassId; - m_bNativeLook = _pOriginal->m_bNativeLook; - - if ( _bCloneAggregate ) - { - // temporarily increment refcount because of temporary references to ourself in the following - increment( m_refCount ); - - { - // transfer the (only, at the very moment!) ref count - m_xAggregate = createAggregateClone( _pOriginal ); - - // set aggregation (retrieve other direct interfaces of the aggregate) - setAggregation( m_xAggregate ); - } - - // set the delegator, if allowed by our derived class - if ( _bSetDelegator ) - doSetDelegator(); - - // decrement ref count - decrement( m_refCount ); - } -} - -//------------------------------------------------------------------ -OControlModel::~OControlModel() -{ - // release the aggregate - doResetDelegator( ); - - DBG_DTOR(OControlModel, NULL); -} - -//------------------------------------------------------------------ -void OControlModel::clonedFrom( const OControlModel* /*_pOriginal*/ ) -{ - // nothing to do in this base class -} - -//------------------------------------------------------------------------------ -void OControlModel::doResetDelegator() -{ - if (m_xAggregate.is()) - m_xAggregate->setDelegator(NULL); -} - -//------------------------------------------------------------------------------ -void OControlModel::doSetDelegator() -{ - increment(m_refCount); - if (m_xAggregate.is()) - { - m_xAggregate->setDelegator(static_cast<XWeak*>(this)); - } - decrement(m_refCount); -} - -// XChild -//------------------------------------------------------------------------------ -Reference< XInterface > SAL_CALL OControlModel::getParent() throw(RuntimeException) -{ - return m_xParent; -} - -//------------------------------------------------------------------------------ -void SAL_CALL OControlModel::setParent(const Reference< XInterface >& _rxParent) throw(com::sun::star::lang::NoSupportException, RuntimeException) -{ - osl::MutexGuard aGuard(m_aMutex); - - Reference<XComponent> xComp(m_xParent, UNO_QUERY); - if (xComp.is()) - xComp->removeEventListener(static_cast<XPropertiesChangeListener*>(this)); - - m_xParent = _rxParent; - xComp = xComp.query( m_xParent ); - - if ( xComp.is() ) - xComp->addEventListener(static_cast<XPropertiesChangeListener*>(this)); -} - -// XNamed -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OControlModel::getName() throw(RuntimeException) -{ - ::rtl::OUString aReturn; - OPropertySetHelper::getFastPropertyValue(PROPERTY_ID_NAME) >>= aReturn; - return aReturn; -} - -//------------------------------------------------------------------------------ -void SAL_CALL OControlModel::setName(const ::rtl::OUString& _rName) throw(RuntimeException) -{ - setFastPropertyValue(PROPERTY_ID_NAME, makeAny(_rName)); -} - -// XServiceInfo -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OControlModel::supportsService(const rtl::OUString& _rServiceName) throw ( RuntimeException) -{ - Sequence<rtl::OUString> aSupported = getSupportedServiceNames(); - const rtl::OUString* pSupported = aSupported.getConstArray(); - for (sal_Int32 i=0; i<aSupported.getLength(); ++i, ++pSupported) - if (pSupported->equals(_rServiceName)) - return sal_True; - return sal_False; -} - -//------------------------------------------------------------------------------ -Sequence< ::rtl::OUString > OControlModel::getAggregateServiceNames() -{ - Sequence< ::rtl::OUString > aAggServices; - Reference< XServiceInfo > xInfo; - if ( query_aggregation( m_xAggregate, xInfo ) ) - aAggServices = xInfo->getSupportedServiceNames(); - return aAggServices; -} - -//------------------------------------------------------------------------------ -Sequence<rtl::OUString> SAL_CALL OControlModel::getSupportedServiceNames() throw(RuntimeException) -{ - return ::comphelper::concatSequences( - getAggregateServiceNames(), - getSupportedServiceNames_Static() - ); -} - -//------------------------------------------------------------------------------ -Sequence< ::rtl::OUString > SAL_CALL OControlModel::getSupportedServiceNames_Static() throw( RuntimeException ) -{ - Sequence< ::rtl::OUString > aServiceNames( 2 ); - aServiceNames[ 0 ] = FRM_SUN_FORMCOMPONENT; - aServiceNames[ 1 ] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.FormControlModel") ); - return aServiceNames; -} - -// XEventListener -//------------------------------------------------------------------------------ -void SAL_CALL OControlModel::disposing(const com::sun::star::lang::EventObject& _rSource) throw (RuntimeException) -{ - // release the parent - if (_rSource.Source == m_xParent) - { - osl::MutexGuard aGuard(m_aMutex); - m_xParent = NULL; - } - else - { - Reference<com::sun::star::lang::XEventListener> xEvtLst; - if (query_aggregation(m_xAggregate, xEvtLst)) - { - osl::MutexGuard aGuard(m_aMutex); - xEvtLst->disposing(_rSource); - } - } -} - -// OComponentHelper -//----------------------------------------------------------------------------- -void OControlModel::disposing() -{ - OPropertySetAggregationHelper::disposing(); - - Reference<com::sun::star::lang::XComponent> xComp; - if (query_aggregation(m_xAggregate, xComp)) - xComp->dispose(); - - setParent(Reference<XFormComponent>()); - - m_aPropertyBagHelper.dispose(); -} - -//------------------------------------------------------------------------------ -void OControlModel::writeAggregate( const Reference< XObjectOutputStream >& _rxOutStream ) const -{ - Reference< XPersistObject > xPersist; - if ( query_aggregation( m_xAggregate, xPersist ) ) - xPersist->write( _rxOutStream ); -} - -//------------------------------------------------------------------------------ -void OControlModel::readAggregate( const Reference< XObjectInputStream >& _rxInStream ) -{ - Reference< XPersistObject > xPersist; - if ( query_aggregation( m_xAggregate, xPersist ) ) - xPersist->read( _rxInStream ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OControlModel::write(const Reference<stario::XObjectOutputStream>& _rxOutStream) - throw(stario::IOException, RuntimeException) -{ - osl::MutexGuard aGuard(m_aMutex); - - // 1. Schreiben des UnoControls - Reference<stario::XMarkableStream> xMark(_rxOutStream, UNO_QUERY); - if ( !xMark.is() ) - { - throw IOException( - FRM_RES_STRING( RID_STR_INVALIDSTREAM ), - static_cast< ::cppu::OWeakObject* >( this ) - ); - } - - sal_Int32 nMark = xMark->createMark(); - sal_Int32 nLen = 0; - - _rxOutStream->writeLong(nLen); - - writeAggregate( _rxOutStream ); - - // feststellen der Laenge - nLen = xMark->offsetToMark(nMark) - 4; - xMark->jumpToMark(nMark); - _rxOutStream->writeLong(nLen); - xMark->jumpToFurthest(); - xMark->deleteMark(nMark); - - // 2. Schreiben einer VersionsNummer - _rxOutStream->writeShort(0x0003); - - // 3. Schreiben der allgemeinen Properties - ::comphelper::operator<<( _rxOutStream, m_aName); - _rxOutStream->writeShort(m_nTabIndex); - ::comphelper::operator<<( _rxOutStream, m_aTag); // 3. version - - // !!! IMPORTANT NOTE !!! - // don't write any new members here : this wouldn't be compatible with older versions, as OControlModel - // is a base class which is called in derived classes "read" method. So if you increment the version - // and write new stuff, older office versions will read this in the _derived_ classes, which may result - // in anything from data loss to crash. - // !!! EOIN !!! -} - -//------------------------------------------------------------------------------ -void OControlModel::read(const Reference<stario::XObjectInputStream>& InStream) throw (::com::sun::star::io::IOException, RuntimeException) -{ - osl::MutexGuard aGuard(m_aMutex); - - Reference<stario::XMarkableStream> xMark(InStream, UNO_QUERY); - if ( !xMark.is() ) - { - throw IOException( - FRM_RES_STRING( RID_STR_INVALIDSTREAM ), - static_cast< ::cppu::OWeakObject* >( this ) - ); - } - - // 1. Lesen des UnoControls - sal_Int32 nLen = InStream->readLong(); - if (nLen) - { - sal_Int32 nMark = xMark->createMark(); - - try - { - readAggregate( InStream ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - - xMark->jumpToMark(nMark); - InStream->skipBytes(nLen); - xMark->deleteMark(nMark); - } - - // 2. Lesen des Versionsnummer - sal_uInt16 nVersion = InStream->readShort(); - - // 3. Lesen der allgemeinen Properties - ::comphelper::operator>>( InStream, m_aName); - m_nTabIndex = InStream->readShort(); - - if (nVersion > 0x0002) - ::comphelper::operator>>( InStream, m_aTag); - - // we had a version where we wrote the help text - if (nVersion == 0x0004) - readHelpTextCompatibly(InStream); - - DBG_ASSERT(nVersion < 5, "OControlModel::read : suspicious version number !"); - // 4 was the version where we wrote the help text - // later versions shouldn't exist (see write for a detailed comment) -} - -//------------------------------------------------------------------------------ -PropertyState OControlModel::getPropertyStateByHandle( sal_Int32 _nHandle ) -{ - // simply compare the current and the default value - Any aCurrentValue = getPropertyDefaultByHandle( _nHandle ); - Any aDefaultValue; getFastPropertyValue( aDefaultValue, _nHandle ); - - sal_Bool bEqual = uno_type_equalData( - const_cast< void* >( aCurrentValue.getValue() ), aCurrentValue.getValueType().getTypeLibType(), - const_cast< void* >( aDefaultValue.getValue() ), aDefaultValue.getValueType().getTypeLibType(), - reinterpret_cast< uno_QueryInterfaceFunc >(cpp_queryInterface), - reinterpret_cast< uno_ReleaseFunc >(cpp_release) - ); - return bEqual ? PropertyState_DEFAULT_VALUE : PropertyState_DIRECT_VALUE; -} - -//------------------------------------------------------------------------------ -void OControlModel::setPropertyToDefaultByHandle( sal_Int32 _nHandle) -{ - Any aDefault = getPropertyDefaultByHandle( _nHandle ); - - Any aConvertedValue, aOldValue; - if ( convertFastPropertyValue( aConvertedValue, aOldValue, _nHandle, aDefault ) ) - { - setFastPropertyValue_NoBroadcast( _nHandle, aConvertedValue ); - // TODO: fire the property change - } -} - -//------------------------------------------------------------------------------ -Any OControlModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const -{ - Any aReturn; - switch ( _nHandle ) - { - case PROPERTY_ID_NAME: - case PROPERTY_ID_TAG: - aReturn <<= ::rtl::OUString(); - break; - - case PROPERTY_ID_CLASSID: - aReturn <<= (sal_Int16)FormComponentType::CONTROL; - break; - - case PROPERTY_ID_TABINDEX: - aReturn <<= (sal_Int16)FRM_DEFAULT_TABINDEX; - break; - - case PROPERTY_ID_NATIVE_LOOK: - aReturn <<= (sal_Bool)sal_True; - break; - - default: - if ( m_aPropertyBagHelper.hasDynamicPropertyByHandle( _nHandle ) ) - m_aPropertyBagHelper.getDynamicPropertyDefaultByHandle( _nHandle, aReturn ); - else - OSL_FAIL( "OControlModel::convertFastPropertyValue: unknown handle!" ); - } - return aReturn; -} - -//------------------------------------------------------------------------------ -void OControlModel::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const -{ - switch ( _nHandle ) - { - case PROPERTY_ID_NAME: - _rValue <<= m_aName; - break; - case PROPERTY_ID_TAG: - _rValue <<= m_aTag; - break; - case PROPERTY_ID_CLASSID: - _rValue <<= m_nClassId; - break; - case PROPERTY_ID_TABINDEX: - _rValue <<= m_nTabIndex; - break; - case PROPERTY_ID_NATIVE_LOOK: - _rValue <<= (sal_Bool)m_bNativeLook; - break; - default: - if ( m_aPropertyBagHelper.hasDynamicPropertyByHandle( _nHandle ) ) - m_aPropertyBagHelper.getDynamicFastPropertyValue( _nHandle, _rValue ); - else - OPropertySetAggregationHelper::getFastPropertyValue( _rValue, _nHandle ); - break; - } -} - -//------------------------------------------------------------------------------ -sal_Bool OControlModel::convertFastPropertyValue( - Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue) - throw (com::sun::star::lang::IllegalArgumentException) -{ - sal_Bool bModified(sal_False); - switch (_nHandle) - { - case PROPERTY_ID_NAME: - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_aName); - break; - case PROPERTY_ID_TAG: - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_aTag); - break; - case PROPERTY_ID_TABINDEX: - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_nTabIndex); - break; - case PROPERTY_ID_NATIVE_LOOK: - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_bNativeLook); - break; - default: - if ( m_aPropertyBagHelper.hasDynamicPropertyByHandle( _nHandle ) ) - bModified = m_aPropertyBagHelper.convertDynamicFastPropertyValue( _nHandle, _rValue, _rConvertedValue, _rOldValue ); - else - OSL_FAIL( "OControlModel::convertFastPropertyValue: unknown handle!" ); - break; - } - return bModified; -} - -//------------------------------------------------------------------------------ -void OControlModel::setFastPropertyValue_NoBroadcast(sal_Int32 _nHandle, const Any& _rValue) - throw (Exception) -{ - switch (_nHandle) - { - case PROPERTY_ID_NAME: - DBG_ASSERT(_rValue.getValueType() == getCppuType((const ::rtl::OUString*)NULL), - "OControlModel::setFastPropertyValue_NoBroadcast : invalid type" ); - _rValue >>= m_aName; - break; - case PROPERTY_ID_TAG: - DBG_ASSERT(_rValue.getValueType() == getCppuType((const ::rtl::OUString*)NULL), - "OControlModel::setFastPropertyValue_NoBroadcast : invalid type" ); - _rValue >>= m_aTag; - break; - case PROPERTY_ID_TABINDEX: - DBG_ASSERT(_rValue.getValueType() == getCppuType((const sal_Int16*)NULL), - "OControlModel::setFastPropertyValue_NoBroadcast : invalid type" ); - _rValue >>= m_nTabIndex; - break; - case PROPERTY_ID_NATIVE_LOOK: - OSL_VERIFY( _rValue >>= m_bNativeLook ); - break; - default: - if ( m_aPropertyBagHelper.hasDynamicPropertyByHandle( _nHandle ) ) - m_aPropertyBagHelper.setDynamicFastPropertyValue( _nHandle, _rValue ); - else - OSL_FAIL( "OControlModel::setFastPropertyValue_NoBroadcast: unknown handle!" ); - break; - } -} - -//------------------------------------------------------------------------------ -void OControlModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_BASE_PROPERTIES( 4 ) - DECL_PROP2 (CLASSID, sal_Int16, READONLY, TRANSIENT); - DECL_PROP1 (NAME, ::rtl::OUString, BOUND); - DECL_BOOL_PROP2 (NATIVE_LOOK, BOUND, TRANSIENT); - DECL_PROP1 (TAG, ::rtl::OUString, BOUND); - END_DESCRIBE_PROPERTIES() -} - -//------------------------------------------------------------------------------ -void OControlModel::describeAggregateProperties( Sequence< Property >& /* [out] */ _rAggregateProps ) const -{ - if ( m_xAggregateSet.is() ) - { - Reference< XPropertySetInfo > xPSI( m_xAggregateSet->getPropertySetInfo() ); - if ( xPSI.is() ) - _rAggregateProps = xPSI->getProperties(); - } -} - -//------------------------------------------------------------------------------ -::osl::Mutex& OControlModel::getMutex() -{ - return m_aMutex; -} - -//------------------------------------------------------------------------------ -void OControlModel::describeFixedAndAggregateProperties( Sequence< Property >& _out_rFixedProperties, Sequence< Property >& _out_rAggregateProperties ) const -{ - describeFixedProperties( _out_rFixedProperties ); - describeAggregateProperties( _out_rAggregateProperties ); -} - -//------------------------------------------------------------------------------ -Reference< XMultiPropertySet > OControlModel::getPropertiesInterface() -{ - return Reference< XMultiPropertySet >( *this, UNO_QUERY ); -} - -//------------------------------------------------------------------------------ -Reference< XPropertySetInfo> SAL_CALL OControlModel::getPropertySetInfo() throw( RuntimeException) -{ - return createPropertySetInfo( getInfoHelper() ); -} - -//------------------------------------------------------------------------------ -::cppu::IPropertyArrayHelper& OControlModel::getInfoHelper() -{ - return m_aPropertyBagHelper.getInfoHelper(); -} - -//-------------------------------------------------------------------- -void SAL_CALL OControlModel::addProperty( const ::rtl::OUString& _rName, ::sal_Int16 _nAttributes, const Any& _rInitialValue ) throw (PropertyExistException, IllegalTypeException, IllegalArgumentException, RuntimeException) -{ - m_aPropertyBagHelper.addProperty( _rName, _nAttributes, _rInitialValue ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OControlModel::removeProperty( const ::rtl::OUString& _rName ) throw (UnknownPropertyException, NotRemoveableException, RuntimeException) -{ - m_aPropertyBagHelper.removeProperty( _rName ); -} - -//-------------------------------------------------------------------- -Sequence< PropertyValue > SAL_CALL OControlModel::getPropertyValues() throw (RuntimeException) -{ - return m_aPropertyBagHelper.getPropertyValues(); -} - -//-------------------------------------------------------------------- -void SAL_CALL OControlModel::setPropertyValues( const Sequence< PropertyValue >& _rProps ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) -{ - m_aPropertyBagHelper.setPropertyValues( _rProps ); -} - -//-------------------------------------------------------------------- -void OControlModel::lockInstance( LockAccess ) -{ - m_aMutex.acquire(); - osl_incrementInterlockedCount( &m_lockCount ); -} - -//-------------------------------------------------------------------- -oslInterlockedCount OControlModel::unlockInstance( LockAccess ) -{ - OSL_ENSURE( m_lockCount > 0, "OControlModel::unlockInstance: not locked!" ); - oslInterlockedCount lockCount = osl_decrementInterlockedCount( &m_lockCount ); - m_aMutex.release(); - return lockCount; -} - -//-------------------------------------------------------------------- -void OControlModel::firePropertyChanges( const Sequence< sal_Int32 >& _rHandles, const Sequence< Any >& _rOldValues, - const Sequence< Any >& _rNewValues, LockAccess ) -{ - OPropertySetHelper::fire( - const_cast< Sequence< sal_Int32 >& >( _rHandles ).getArray(), - _rNewValues.getConstArray(), - _rOldValues.getConstArray(), - _rHandles.getLength(), - sal_False - ); -} - -//================================================================== -//= OBoundControlModel -//================================================================== -DBG_NAME(frm_OBoundControlModel); -//------------------------------------------------------------------ -Any SAL_CALL OBoundControlModel::queryAggregation( const Type& _rType ) throw (RuntimeException) -{ - Any aReturn( OControlModel::queryAggregation(_rType) ); - if (!aReturn.hasValue()) - { - aReturn = OBoundControlModel_BASE1::queryInterface(_rType); - - if ( !aReturn.hasValue() && m_bCommitable ) - aReturn = OBoundControlModel_COMMITTING::queryInterface( _rType ); - - if ( !aReturn.hasValue() && m_bSupportsExternalBinding ) - aReturn = OBoundControlModel_BINDING::queryInterface( _rType ); - - if ( !aReturn.hasValue() && m_bSupportsValidation ) - aReturn = OBoundControlModel_VALIDATION::queryInterface( _rType ); - } - - return aReturn; -} - -//------------------------------------------------------------------ -OBoundControlModel::OBoundControlModel( - const Reference< XMultiServiceFactory>& _rxFactory, - const ::rtl::OUString& _rUnoControlModelTypeName, const ::rtl::OUString& _rDefault, - const sal_Bool _bCommitable, const sal_Bool _bSupportExternalBinding, const sal_Bool _bSupportsValidation ) - :OControlModel( _rxFactory, _rUnoControlModelTypeName, _rDefault, sal_False ) - ,OPropertyChangeListener( m_aMutex ) - ,m_xField() - ,m_xAmbientForm() - ,m_nValuePropertyAggregateHandle( -1 ) - ,m_nFieldType( DataType::OTHER ) - ,m_bValuePropertyMayBeVoid( false ) - ,m_aResetHelper( *this, m_aMutex ) - ,m_aUpdateListeners(m_aMutex) - ,m_aFormComponentListeners( m_aMutex ) - ,m_bInputRequired( sal_True ) - ,m_pAggPropMultiplexer( NULL ) - ,m_bFormListening( false ) - ,m_bLoaded(sal_False) - ,m_bRequired(sal_False) - ,m_bCommitable(_bCommitable) - ,m_bSupportsExternalBinding( _bSupportExternalBinding ) - ,m_bSupportsValidation( _bSupportsValidation ) - ,m_bForwardValueChanges(sal_True) - ,m_bTransferingValue( sal_False ) - ,m_bIsCurrentValueValid( sal_True ) - ,m_bBindingControlsRO( sal_False ) - ,m_bBindingControlsEnable( sal_False ) - ,m_eControlValueChangeInstigator( eOther ) - ,m_aLabelServiceName(FRM_SUN_COMPONENT_FIXEDTEXT) -{ - DBG_CTOR(frm_OBoundControlModel, NULL); - - // start property listening at the aggregate - implInitAggMultiplexer( ); -} - -//------------------------------------------------------------------ -OBoundControlModel::OBoundControlModel( - const OBoundControlModel* _pOriginal, const Reference< XMultiServiceFactory>& _rxFactory ) - :OControlModel( _pOriginal, _rxFactory, sal_True, sal_False ) - ,OPropertyChangeListener( m_aMutex ) - ,m_xField() - ,m_xAmbientForm() - ,m_nValuePropertyAggregateHandle( _pOriginal->m_nValuePropertyAggregateHandle ) - ,m_nFieldType( DataType::OTHER ) - ,m_bValuePropertyMayBeVoid( _pOriginal->m_bValuePropertyMayBeVoid ) - ,m_aResetHelper( *this, m_aMutex ) - ,m_aUpdateListeners( m_aMutex ) - ,m_aFormComponentListeners( m_aMutex ) - ,m_xValidator( _pOriginal->m_xValidator ) - ,m_bInputRequired( sal_True ) - ,m_pAggPropMultiplexer( NULL ) - ,m_bFormListening( false ) - ,m_bLoaded( sal_False ) - ,m_bRequired( sal_False ) - ,m_bCommitable( _pOriginal->m_bCommitable ) - ,m_bSupportsExternalBinding( _pOriginal->m_bSupportsExternalBinding ) - ,m_bSupportsValidation( _pOriginal->m_bSupportsValidation ) - ,m_bForwardValueChanges( sal_True ) - ,m_bTransferingValue( sal_False ) - ,m_bIsCurrentValueValid( _pOriginal->m_bIsCurrentValueValid ) - ,m_bBindingControlsRO( sal_False ) - ,m_bBindingControlsEnable( sal_False ) - ,m_eControlValueChangeInstigator( eOther ) -{ - DBG_CTOR(frm_OBoundControlModel, NULL); - - // start property listening at the aggregate - implInitAggMultiplexer( ); - - m_aLabelServiceName = _pOriginal->m_aLabelServiceName; - m_sValuePropertyName = _pOriginal->m_sValuePropertyName; - m_nValuePropertyAggregateHandle = _pOriginal->m_nValuePropertyAggregateHandle; - m_bValuePropertyMayBeVoid = _pOriginal->m_bValuePropertyMayBeVoid; - m_aValuePropertyType = _pOriginal->m_aValuePropertyType; - m_aControlSource = _pOriginal->m_aControlSource; - m_bInputRequired = _pOriginal->m_bInputRequired; - // m_xLabelControl, though being a property, is not to be cloned, not even the reference will be transfered. - // (the former should be clear - a clone of the object we're only referencing does not make sense) - // (the second would violate the restriction for label controls that they're part of the - // same form component hierarchy - we ourself are no part, yet, so we can't have a label control) - - // start listening for changes at the value property - implInitValuePropertyListening( ); -} - -//------------------------------------------------------------------ -OBoundControlModel::~OBoundControlModel() -{ - if ( !OComponentHelper::rBHelper.bDisposed ) - { - acquire(); - dispose(); - } - - doResetDelegator( ); - - OSL_ENSURE( m_pAggPropMultiplexer, "OBoundControlModel::~OBoundControlModel: what about my property multiplexer?" ); - if ( m_pAggPropMultiplexer ) - { - m_pAggPropMultiplexer->dispose(); - m_pAggPropMultiplexer->release(); - m_pAggPropMultiplexer = NULL; - } - - DBG_DTOR(frm_OBoundControlModel, NULL); -} - -//------------------------------------------------------------------ -void OBoundControlModel::clonedFrom( const OControlModel* _pOriginal ) -{ - const OBoundControlModel* pBoundOriginal = static_cast< const OBoundControlModel* >( _pOriginal ); - // the value binding can be handled as if somebody called setValueBinding here - // By definition, bindings can be share between bindables - if ( pBoundOriginal && pBoundOriginal->m_xExternalBinding.is() ) - { - try - { - setValueBinding( pBoundOriginal->m_xExternalBinding ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::implInitAggMultiplexer( ) -{ - increment( m_refCount ); - if ( m_xAggregateSet.is() ) - { - m_pAggPropMultiplexer = new OPropertyChangeMultiplexer( this, m_xAggregateSet, sal_False ); - m_pAggPropMultiplexer->acquire(); - } - decrement( m_refCount ); - - doSetDelegator(); -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::implInitValuePropertyListening( ) const -{ - // start listening for changes at the value property - // There are three pre-requisites for this to be done: - // 1. We support external value bindings. In this case, the changes in the control value need to - // be propagated to the external binding immediately when they happen - // 2. We support external validation. In this case, we need to listen for changes in the value - // property, since we need to revalidate then. - // 3. We are not committable. In this case, changes in the control value need to be propagated - // to the database column immediately when they happen. - if ( m_bSupportsExternalBinding || m_bSupportsValidation || !m_bCommitable ) - { - OSL_ENSURE( m_pAggPropMultiplexer, "OBoundControlModel::implInitValuePropertyListening: no multiplexer!" ); - if ( m_pAggPropMultiplexer && m_sValuePropertyName.getLength() ) - m_pAggPropMultiplexer->addProperty( m_sValuePropertyName ); - } -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::initOwnValueProperty( const ::rtl::OUString& i_rValuePropertyName ) -{ - OSL_PRECOND( !m_sValuePropertyName.getLength() && -1 == m_nValuePropertyAggregateHandle, - "OBoundControlModel::initOwnValueProperty: value property is already initialized!" ); - OSL_ENSURE( i_rValuePropertyName.getLength(), "OBoundControlModel::initOwnValueProperty: invalid property name!" ); - m_sValuePropertyName = i_rValuePropertyName; -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::initValueProperty( const ::rtl::OUString& _rValuePropertyName, sal_Int32 _nValuePropertyExternalHandle ) -{ - OSL_PRECOND( !m_sValuePropertyName.getLength() && -1 == m_nValuePropertyAggregateHandle, - "OBoundControlModel::initValueProperty: value property is already initialized!" ); - OSL_ENSURE( _rValuePropertyName.getLength(), "OBoundControlModel::initValueProperty: invalid property name!" ); - OSL_ENSURE( _nValuePropertyExternalHandle != -1, "OBoundControlModel::initValueProperty: invalid property handle!" ); - - m_sValuePropertyName = _rValuePropertyName; - m_nValuePropertyAggregateHandle = getOriginalHandle( _nValuePropertyExternalHandle ); - OSL_ENSURE( m_nValuePropertyAggregateHandle != -1, "OBoundControlModel::initValueProperty: unable to find the original handle!" ); - - if ( m_nValuePropertyAggregateHandle != -1 ) - { - Reference< XPropertySetInfo > xPropInfo( m_xAggregateSet->getPropertySetInfo(), UNO_SET_THROW ); - Property aValuePropDesc = xPropInfo->getPropertyByName( m_sValuePropertyName ); - m_aValuePropertyType = aValuePropDesc.Type; - m_bValuePropertyMayBeVoid = ( aValuePropDesc.Attributes & PropertyAttribute::MAYBEVOID ) != 0; - } - - // start listening for changes at the value property - implInitValuePropertyListening( ); -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::suspendValueListening( ) -{ - OSL_PRECOND( m_sValuePropertyName.getLength(), "OBoundControlModel::suspendValueListening: don't have a value property!" ); - OSL_PRECOND( m_pAggPropMultiplexer, "OBoundControlModel::suspendValueListening: I *am* not listening!" ); - - if ( m_pAggPropMultiplexer ) - m_pAggPropMultiplexer->lock(); -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::resumeValueListening( ) -{ - OSL_PRECOND( m_sValuePropertyName.getLength(), "OBoundControlModel::resumeValueListening: don't have a value property!" ); - OSL_PRECOND( m_pAggPropMultiplexer, "OBoundControlModel::resumeValueListening: I *am* not listening at all!" ); - OSL_PRECOND( !m_pAggPropMultiplexer || m_pAggPropMultiplexer->locked(), "OBoundControlModel::resumeValueListening: listening not suspended currently!" ); - - if ( m_pAggPropMultiplexer ) - m_pAggPropMultiplexer->unlock(); -} - -//----------------------------------------------------------------------------- -Sequence< Type > OBoundControlModel::_getTypes() -{ - TypeBag aTypes( - OControlModel::_getTypes(), - OBoundControlModel_BASE1::getTypes() - ); - - if ( m_bCommitable ) - aTypes.addTypes( OBoundControlModel_COMMITTING::getTypes() ); - - if ( m_bSupportsExternalBinding ) - aTypes.addTypes( OBoundControlModel_BINDING::getTypes() ); - - if ( m_bSupportsValidation ) - aTypes.addTypes( OBoundControlModel_VALIDATION::getTypes() ); - - return aTypes.getTypes(); -} - -// OComponentHelper -//----------------------------------------------------------------------------- -void OBoundControlModel::disposing() -{ - OControlModel::disposing(); - - ::osl::ClearableMutexGuard aGuard(m_aMutex); - - if ( m_pAggPropMultiplexer ) - m_pAggPropMultiplexer->dispose(); - - // notify all our listeners - com::sun::star::lang::EventObject aEvt( static_cast< XWeak* >( this ) ); - m_aUpdateListeners.disposeAndClear( aEvt ); - m_aResetHelper.disposing(); - - // disconnect from our database column - // TODO: could we replace the following 5 lines with a call to impl_disconnectDatabaseColumn_noNotify? - // The only more thing which it does is calling onDisconnectedDbColumn - could this - // cause trouble? At least when we continue to call OControlModel::disposing before, it *may*. - if ( hasField() ) - { - getField()->removePropertyChangeListener( PROPERTY_VALUE, this ); - resetField(); - } - m_xCursor = NULL; - - Reference< XComponent > xComp( m_xLabelControl, UNO_QUERY ); - if ( xComp.is() ) - xComp->removeEventListener(static_cast< XEventListener* >( static_cast< XPropertyChangeListener* >( this ) ) ); - - // disconnect from our external value binding - if ( hasExternalValueBinding() ) - disconnectExternalValueBinding(); - - // dito for the validator - if ( hasValidator() ) - disconnectValidator( ); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::onValuePropertyChange( ControlModelLock& i_rControLock ) -{ - if ( hasExternalValueBinding() ) - { // the control value changed, while we have an external value binding - // -> forward the value to it - if ( m_eControlValueChangeInstigator != eExternalBinding ) - transferControlValueToExternal( i_rControLock ); - } - else if ( !m_bCommitable && m_xColumnUpdate.is() ) - { // the control value changed, while we are bound to a database column, - // but not committable (which means changes in the control have to be reflected to - // the underlying database column immediately) - // -> forward the value to the database column - if ( m_eControlValueChangeInstigator != eDbColumnBinding ) - commitControlValueToDbColumn( false ); - } - - // validate the new value - if ( m_bSupportsValidation ) - recheckValidity( true ); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::_propertyChanged( const PropertyChangeEvent& _rEvt ) throw ( RuntimeException ) -{ - ControlModelLock aLock( *this ); - - OSL_ENSURE( _rEvt.PropertyName == m_sValuePropertyName, - "OBoundControlModel::_propertyChanged: where did this come from (1)?" ); - OSL_ENSURE( m_pAggPropMultiplexer && !m_pAggPropMultiplexer->locked(), - "OBoundControlModel::_propertyChanged: where did this come from (2)?" ); - - if ( _rEvt.PropertyName == m_sValuePropertyName ) - { - onValuePropertyChange( aLock ); - } -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::startAggregatePropertyListening( const ::rtl::OUString& _rPropertyName ) -{ - OSL_PRECOND( m_pAggPropMultiplexer, "OBoundControlModel::startAggregatePropertyListening: no multiplexer!" ); - OSL_ENSURE( _rPropertyName.getLength(), "OBoundControlModel::startAggregatePropertyListening: invalid property name!" ); - - if ( m_pAggPropMultiplexer && _rPropertyName.getLength() ) - { - m_pAggPropMultiplexer->addProperty( _rPropertyName ); - } -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::doFormListening( const bool _bStart ) -{ - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::doFormListening: external value binding should overrule the database binding!" ); - - if ( isFormListening() == _bStart ) - return; - - if ( m_xAmbientForm.is() ) - _bStart ? m_xAmbientForm->addLoadListener( this ) : m_xAmbientForm->removeLoadListener( this ); - - Reference< XLoadable > xParentLoadable( getParent(), UNO_QUERY ); - if ( getParent().is() && !xParentLoadable.is() ) - { - // if our parent does not directly support the XLoadable interface, then it might support the - // XRowSetSupplier/XRowSetChangeBroadcaster interfaces. In this case we have to listen for changes - // broadcasted by the latter. - Reference< XRowSetChangeBroadcaster > xRowSetBroadcaster( getParent(), UNO_QUERY ); - if ( xRowSetBroadcaster.is() ) - _bStart ? xRowSetBroadcaster->addRowSetChangeListener( this ) : xRowSetBroadcaster->removeRowSetChangeListener( this ); - } - - m_bFormListening = _bStart && m_xAmbientForm.is(); -} - -// XChild -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::setParent(const Reference<XInterface>& _rxParent) throw(com::sun::star::lang::NoSupportException, RuntimeException) -{ - ControlModelLock aLock( *this ); - FieldChangeNotifier aBoundFieldNotifier( aLock ); - - if ( getParent() == _rxParent ) - return; - - // disconnect from database column (which is controlled by parent, directly or indirectly) - if ( hasField() ) - impl_disconnectDatabaseColumn_noNotify(); - - // log off old listeners - if ( isFormListening() ) - doFormListening( false ); - - // actually set the new parent - OControlModel::setParent( _rxParent ); - - // a new parent means a new ambient form - impl_determineAmbientForm_nothrow(); - - if ( !hasExternalValueBinding() ) - { - // log on new listeners - doFormListening( true ); - - // re-connect to database column of the new parent - if ( m_xAmbientForm.is() && m_xAmbientForm->isLoaded() ) - impl_connectDatabaseColumn_noNotify( false ); - } -} - -// XEventListener -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::disposing(const com::sun::star::lang::EventObject& _rEvent) throw (RuntimeException) -{ - ControlModelLock aLock( *this ); - - if ( _rEvent.Source == getField() ) - { - resetField(); - } - else if ( _rEvent.Source == m_xLabelControl ) - { - Reference<XPropertySet> xOldValue = m_xLabelControl; - m_xLabelControl = NULL; - - // fire a propertyChanged (when we leave aLock's scope) - aLock.addPropertyNotification( PROPERTY_ID_CONTROLLABEL, makeAny( xOldValue ), makeAny( m_xLabelControl ) ); - } - else if ( _rEvent.Source == m_xExternalBinding ) - { // *first* check for the external binding - disconnectExternalValueBinding( ); - } - else if ( _rEvent.Source == m_xValidator ) - { // *then* check for the validator. Reason is that bindings may also act as validator at the same - // time, in this case, the validator is automatically revoked when the binding is revoked - disconnectValidator( ); - } - else - OControlModel::disposing(_rEvent); -} - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OBoundControlModel::getSupportedServiceNames() throw(RuntimeException) -{ - return ::comphelper::concatSequences( - getAggregateServiceNames(), - getSupportedServiceNames_Static() - ); -} - -//------------------------------------------------------------------------------ -Sequence< ::rtl::OUString > SAL_CALL OBoundControlModel::getSupportedServiceNames_Static() throw( RuntimeException ) -{ - Sequence< ::rtl::OUString > aOwnServiceNames( 1 ); - aOwnServiceNames[ 0 ] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.DataAwareControlModel") ); - - return ::comphelper::concatSequences( - OControlModel::getSupportedServiceNames_Static(), - aOwnServiceNames - ); -} - -// XPersist -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::write( const Reference<stario::XObjectOutputStream>& _rxOutStream ) throw(stario::IOException, RuntimeException) -{ - OControlModel::write(_rxOutStream); - - osl::MutexGuard aGuard(m_aMutex); - - // Version - _rxOutStream->writeShort(0x0002); - - // Controlsource - ::comphelper::operator<<( _rxOutStream, m_aControlSource); - - // !!! IMPORTANT NOTE !!! - // don't write any new members here : this wouldn't be compatible with older versions, as OBoundControlModel - // is a base class which is called in derived classes "read" method. So if you increment the version - // and write new stuff, older office versions will read this in the _derived_ classes, which may result - // in anything from data loss to crash. - // (use writeCommonProperties instead, this is called in derived classes write-method) - // !!! EOIN !!! -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::defaultCommonProperties() -{ - Reference<com::sun::star::lang::XComponent> xComp(m_xLabelControl, UNO_QUERY); - if (xComp.is()) - xComp->removeEventListener(static_cast<com::sun::star::lang::XEventListener*>(static_cast<XPropertyChangeListener*>(this))); - m_xLabelControl = NULL; -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::readCommonProperties(const Reference<stario::XObjectInputStream>& _rxInStream) -{ - sal_Int32 nLen = _rxInStream->readLong(); - - Reference<stario::XMarkableStream> xMark(_rxInStream, UNO_QUERY); - DBG_ASSERT(xMark.is(), "OBoundControlModel::readCommonProperties : can only work with markable streams !"); - sal_Int32 nMark = xMark->createMark(); - - // read the reference to the label control - Reference<stario::XPersistObject> xPersist; - sal_Int32 nUsedFlag; - nUsedFlag = _rxInStream->readLong(); - if (nUsedFlag) - xPersist = _rxInStream->readObject(); - m_xLabelControl = m_xLabelControl.query( xPersist ); - Reference< XComponent > xComp( m_xLabelControl, UNO_QUERY ); - if (xComp.is()) - xComp->addEventListener(static_cast<com::sun::star::lang::XEventListener*>(static_cast<XPropertyChangeListener*>(this))); - - // read any other new common properties here - - // skip the remaining bytes - xMark->jumpToMark(nMark); - _rxInStream->skipBytes(nLen); - xMark->deleteMark(nMark); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::writeCommonProperties(const Reference<stario::XObjectOutputStream>& _rxOutStream) -{ - Reference<stario::XMarkableStream> xMark(_rxOutStream, UNO_QUERY); - DBG_ASSERT(xMark.is(), "OBoundControlModel::writeCommonProperties : can only work with markable streams !"); - sal_Int32 nMark = xMark->createMark(); - - // a placeholder where we will write the overall length (later in this method) - sal_Int32 nLen = 0; - _rxOutStream->writeLong(nLen); - - // write the reference to the label control - Reference<stario::XPersistObject> xPersist(m_xLabelControl, UNO_QUERY); - sal_Int32 nUsedFlag = 0; - if (xPersist.is()) - nUsedFlag = 1; - _rxOutStream->writeLong(nUsedFlag); - if (xPersist.is()) - _rxOutStream->writeObject(xPersist); - - // write any other new common properties here - - // write the correct length at the beginning of the block - nLen = xMark->offsetToMark(nMark) - sizeof(nLen); - xMark->jumpToMark(nMark); - _rxOutStream->writeLong(nLen); - xMark->jumpToFurthest(); - xMark->deleteMark(nMark); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::read( const Reference< stario::XObjectInputStream >& _rxInStream ) throw(stario::IOException, RuntimeException) -{ - OControlModel::read(_rxInStream); - - osl::MutexGuard aGuard(m_aMutex); - sal_uInt16 nVersion = _rxInStream->readShort(); (void)nVersion; - ::comphelper::operator>>( _rxInStream, m_aControlSource); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const -{ - switch (nHandle) - { - case PROPERTY_ID_INPUT_REQUIRED: - rValue <<= m_bInputRequired; - break; - case PROPERTY_ID_CONTROLSOURCEPROPERTY: - rValue <<= m_sValuePropertyName; - break; - case PROPERTY_ID_CONTROLSOURCE: - rValue <<= m_aControlSource; - break; - case PROPERTY_ID_BOUNDFIELD: - rValue <<= getField(); - break; - case PROPERTY_ID_CONTROLLABEL: - if (!m_xLabelControl.is()) - rValue.clear(); - else - rValue <<= m_xLabelControl; - break; - default: - OControlModel::getFastPropertyValue(rValue, nHandle); - } -} - -//------------------------------------------------------------------------------ -sal_Bool OBoundControlModel::convertFastPropertyValue( - Any& _rConvertedValue, Any& _rOldValue, - sal_Int32 _nHandle, - const Any& _rValue) - throw (com::sun::star::lang::IllegalArgumentException) -{ - sal_Bool bModified(sal_False); - switch (_nHandle) - { - case PROPERTY_ID_INPUT_REQUIRED: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_bInputRequired ); - break; - case PROPERTY_ID_CONTROLSOURCE: - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_aControlSource); - break; - case PROPERTY_ID_BOUNDFIELD: - OSL_FAIL( "OBoundControlModel::convertFastPropertyValue: BoundField should be a read-only property !" ); - throw com::sun::star::lang::IllegalArgumentException(); - case PROPERTY_ID_CONTROLLABEL: - if (!_rValue.hasValue()) - { // property set to void - _rConvertedValue = Any(); - getFastPropertyValue(_rOldValue, _nHandle); - bModified = m_xLabelControl.is(); - } - else - { - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_xLabelControl); - if (!m_xLabelControl.is()) - // an empty interface is interpreted as VOID - _rOldValue.clear(); - } - break; - default: - bModified = OControlModel::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue); - } - return bModified; -} - -//------------------------------------------------------------------------------ -Any OBoundControlModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const -{ - Any aDefault; - switch ( _nHandle ) - { - case PROPERTY_ID_INPUT_REQUIRED: - aDefault <<= sal_Bool( sal_True ); - break; - - case PROPERTY_ID_CONTROLSOURCE: - aDefault <<= ::rtl::OUString(); - break; - - case PROPERTY_ID_CONTROLLABEL: - aDefault <<= Reference< XPropertySet >(); - break; - } - return aDefault; -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw (Exception) -{ - switch (nHandle) - { - case PROPERTY_ID_INPUT_REQUIRED: - OSL_VERIFY( rValue >>= m_bInputRequired ); - break; - case PROPERTY_ID_CONTROLSOURCE: - OSL_VERIFY( rValue >>= m_aControlSource ); - break; - case PROPERTY_ID_BOUNDFIELD: - OSL_FAIL("OBoundControlModel::setFastPropertyValue_NoBroadcast : BoundField should be a read-only property !"); - throw com::sun::star::lang::IllegalArgumentException(); - case PROPERTY_ID_CONTROLLABEL: - { - if ( rValue.hasValue() && ( rValue.getValueTypeClass() != TypeClass_INTERFACE ) ) - throw com::sun::star::lang::IllegalArgumentException(); - - Reference< XInterface > xNewValue( rValue, UNO_QUERY ); - if ( !xNewValue.is() ) - { // set property to "void" - Reference< XComponent > xComp( m_xLabelControl, UNO_QUERY ); - if ( xComp.is() ) - xComp->removeEventListener( static_cast< XPropertyChangeListener* >( this ) ); - m_xLabelControl = NULL; - break; - } - - Reference< XControlModel > xAsModel ( xNewValue, UNO_QUERY ); - Reference< XServiceInfo > xAsServiceInfo ( xAsModel, UNO_QUERY ); - Reference< XPropertySet > xAsPropSet ( xAsServiceInfo, UNO_QUERY ); - Reference< XChild > xAsChild ( xAsPropSet, UNO_QUERY ); - if ( !xAsChild.is() || !xAsServiceInfo->supportsService( m_aLabelServiceName ) ) - { - throw com::sun::star::lang::IllegalArgumentException(); - } - - // check if weself and the given model have a common anchestor (up to the forms collection) - Reference<XChild> xCont; - query_interface(static_cast<XWeak*>(this), xCont); - Reference< XInterface > xMyTopLevel = xCont->getParent(); - while (xMyTopLevel.is()) - { - Reference<XForm> xAsForm(xMyTopLevel, UNO_QUERY); - if (!xAsForm.is()) - // found my root - break; - - Reference<XChild> xLoopAsChild(xMyTopLevel, UNO_QUERY); - xMyTopLevel = xLoopAsChild.is() ? xLoopAsChild->getParent() : Reference< XInterface >(); - } - Reference< XInterface > xNewTopLevel = xAsChild->getParent(); - while (xNewTopLevel.is()) - { - Reference<XForm> xAsForm(xNewTopLevel, UNO_QUERY); - if (!xAsForm.is()) - break; - - Reference<XChild> xLoopAsChild(xNewTopLevel, UNO_QUERY); - xNewTopLevel = xLoopAsChild.is() ? xLoopAsChild->getParent() : Reference< XInterface >(); - } - if (xNewTopLevel != xMyTopLevel) - { - // the both objects don't belong to the same forms collection -> not acceptable - throw com::sun::star::lang::IllegalArgumentException(); - } - - m_xLabelControl = xAsPropSet; - Reference<com::sun::star::lang::XComponent> xComp(m_xLabelControl, UNO_QUERY); - if (xComp.is()) - xComp->addEventListener(static_cast<com::sun::star::lang::XEventListener*>(static_cast<XPropertyChangeListener*>(this))); - } - break; - default: - OControlModel::setFastPropertyValue_NoBroadcast(nHandle, rValue ); - } -} - -// XPropertyChangeListener -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::propertyChange( const PropertyChangeEvent& evt ) throw(RuntimeException) -{ - // if the DBColumn value changed, transfer it to the control - if ( evt.PropertyName.equals( PROPERTY_VALUE ) ) - { - OSL_ENSURE( evt.Source == getField(), "OBoundControlModel::propertyChange: value changes from components other than our database colum?" ); - osl::MutexGuard aGuard(m_aMutex); - if ( m_bForwardValueChanges && m_xColumn.is() ) - transferDbValueToControl(); - } - else - { - OSL_ENSURE( evt.Source == m_xExternalBinding, "OBoundControlModel::propertyChange: where did this come from?" ); - - // our binding has properties which can control properties of ourself - ::rtl::OUString sBindingControlledProperty; - bool bForwardToLabelControl = false; - if ( evt.PropertyName.equals( PROPERTY_READONLY ) ) - { - sBindingControlledProperty = PROPERTY_READONLY; - } - else if ( evt.PropertyName.equals( PROPERTY_RELEVANT ) ) - { - sBindingControlledProperty = PROPERTY_ENABLED; - bForwardToLabelControl = true; - } - else - return; - - try - { - setPropertyValue( sBindingControlledProperty, evt.NewValue ); - if ( bForwardToLabelControl && m_xLabelControl.is() ) - m_xLabelControl->setPropertyValue( sBindingControlledProperty, evt.NewValue ); - } - catch( const Exception& ) - { - OSL_FAIL( "OBoundControlModel::propertyChange: could not adjust my binding-controlled property!" ); - } - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::onRowSetChanged( const EventObject& /*i_Event*/ ) throw (RuntimeException) -{ - ControlModelLock aLock( *this ); - FieldChangeNotifier aBoundFieldNotifier( aLock ); - - // disconnect from database column (which is controlled by parent, directly or indirectly) - if ( hasField() ) - impl_disconnectDatabaseColumn_noNotify(); - - // log off old listeners - if ( isFormListening() ) - doFormListening( false ); - - // determine the new ambient form - impl_determineAmbientForm_nothrow(); - - // log on new listeners - doFormListening( true ); - - // re-connect to database column if needed and possible - if ( m_xAmbientForm.is() && m_xAmbientForm->isLoaded() ) - impl_connectDatabaseColumn_noNotify( false ); -} - -// XBoundComponent -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::addUpdateListener(const Reference<XUpdateListener>& _rxListener) throw(RuntimeException) -{ - m_aUpdateListeners.addInterface(_rxListener); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::removeUpdateListener(const Reference< XUpdateListener>& _rxListener) throw(RuntimeException) -{ - m_aUpdateListeners.removeInterface(_rxListener); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OBoundControlModel::commit() throw(RuntimeException) -{ - ControlModelLock aLock( *this ); - - OSL_PRECOND( m_bCommitable, "OBoundControlModel::commit: invalid call (I'm not commitable !) " ); - if ( hasExternalValueBinding() ) - { - // in most cases, no action is required: For most derivees, we know the value property of - // our control (see initValueProperty), and when an external binding is active, we - // instantly forward all changes in this property to the external binding. - if ( !m_sValuePropertyName.getLength() ) - // but for those derivees which did not use this feature, we need an - // explicit transfer - transferControlValueToExternal( aLock ); - return sal_True; - } - - OSL_ENSURE( !hasExternalValueBinding(), "OBoundControlModel::commit: control flow broken!" ); - // we reach this only if we're not working with an external binding - - if ( !hasField() ) - return sal_True; - - ::cppu::OInterfaceIteratorHelper aIter( m_aUpdateListeners ); - EventObject aEvent; - aEvent.Source = static_cast< XWeak* >( this ); - sal_Bool bSuccess = sal_True; - - aLock.release(); - // >>>>>>>> ----- UNSAFE ----- >>>>>>>> - while (aIter.hasMoreElements() && bSuccess) - bSuccess = static_cast< XUpdateListener* >( aIter.next() )->approveUpdate( aEvent ); - // <<<<<<<< ----- UNSAFE ----- <<<<<<<< - aLock.acquire(); - - if ( bSuccess ) - { - try - { - if ( m_xColumnUpdate.is() ) - bSuccess = commitControlValueToDbColumn( sal_False ); - } - catch(Exception&) - { - bSuccess = sal_False; - } - } - - if ( bSuccess ) - { - aLock.release(); - m_aUpdateListeners.notifyEach( &XUpdateListener::updated, aEvent ); - } - - return bSuccess; -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::resetField() -{ - m_xColumnUpdate.clear(); - m_xColumn.clear(); - m_xField.clear(); - m_nFieldType = DataType::OTHER; -} - -//------------------------------------------------------------------------------ -sal_Bool OBoundControlModel::connectToField(const Reference<XRowSet>& rForm) -{ - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::connectToField: invalid call (have an external binding)!" ); - - // wenn eine Verbindung zur Datenbank existiert - if (rForm.is() && getConnection(rForm).is()) - { - // Feld bestimmen und PropertyChangeListener - m_xCursor = rForm; - Reference<XPropertySet> xFieldCandidate; - - if (m_xCursor.is()) - { - Reference<XColumnsSupplier> xColumnsSupplier(m_xCursor, UNO_QUERY); - DBG_ASSERT(xColumnsSupplier.is(), "OBoundControlModel::connectToField : the row set should support the com::sun::star::sdb::ResultSet service !"); - if (xColumnsSupplier.is()) - { - Reference<XNameAccess> xColumns(xColumnsSupplier->getColumns(), UNO_QUERY); - if (xColumns.is() && xColumns->hasByName(m_aControlSource)) - { - OSL_VERIFY( xColumns->getByName(m_aControlSource) >>= xFieldCandidate ); - } - } - } - - try - { - sal_Int32 nFieldType = DataType::OTHER; - if ( xFieldCandidate.is() ) - { - xFieldCandidate->getPropertyValue( PROPERTY_FIELDTYPE ) >>= nFieldType; - if ( approveDbColumnType( nFieldType ) ) - impl_setField_noNotify( xFieldCandidate ); - } - else - impl_setField_noNotify( NULL ); - - if ( m_xField.is() ) - { - if( m_xField->getPropertySetInfo()->hasPropertyByName( PROPERTY_VALUE ) ) - { - m_nFieldType = nFieldType; - - // an wertaenderungen horchen - m_xField->addPropertyChangeListener( PROPERTY_VALUE, this ); - m_xColumnUpdate = Reference< XColumnUpdate >( m_xField, UNO_QUERY ); - m_xColumn = Reference< XColumn >( m_xField, UNO_QUERY ); - - sal_Int32 nNullableFlag = ColumnValue::NO_NULLS; - m_xField->getPropertyValue(PROPERTY_ISNULLABLE) >>= nNullableFlag; - m_bRequired = (ColumnValue::NO_NULLS == nNullableFlag); - // we're optimistic : in case of ColumnValue_NULLABLE_UNKNOWN we assume nullability .... - } - else - { - OSL_FAIL("OBoundControlModel::connectToField: property NAME not supported!"); - impl_setField_noNotify( NULL ); - } - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - resetField(); - } - } - return hasField(); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::initFromField( const Reference< XRowSet >& _rxRowSet ) -{ - // but only if the rowset if posisitioned on a valid record - if ( hasField() && _rxRowSet.is() ) - { - if ( !_rxRowSet->isBeforeFirst() && !_rxRowSet->isAfterLast() ) - transferDbValueToControl(); - else - // reset the field if the row set is empty - // #i30661# - resetNoBroadcast(); - } -} - -//------------------------------------------------------------------------------ -sal_Bool OBoundControlModel::approveDbColumnType(sal_Int32 _nColumnType) -{ - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::approveDbColumnType: invalid call (have an external binding)!" ); - - if ((_nColumnType == DataType::BINARY) || (_nColumnType == DataType::VARBINARY) - || (_nColumnType == DataType::LONGVARBINARY) || (_nColumnType == DataType::OTHER) - || (_nColumnType == DataType::OBJECT) || (_nColumnType == DataType::DISTINCT) - || (_nColumnType == DataType::STRUCT) || (_nColumnType == DataType::ARRAY) - || (_nColumnType == DataType::BLOB) /*|| (_nColumnType == DataType::CLOB)*/ - || (_nColumnType == DataType::REF) || (_nColumnType == DataType::SQLNULL)) - return sal_False; - - return sal_True; -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::impl_determineAmbientForm_nothrow() -{ - Reference< XInterface > xParent( const_cast< OBoundControlModel* >( this )->getParent() ); - - m_xAmbientForm.set( xParent, UNO_QUERY ); - if ( !m_xAmbientForm.is() ) - { - Reference< XRowSetSupplier > xSupRowSet( xParent, UNO_QUERY ); - if ( xSupRowSet.is() ) - m_xAmbientForm.set( xSupRowSet->getRowSet(), UNO_QUERY ); - } -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::impl_connectDatabaseColumn_noNotify( bool _bFromReload ) -{ - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::impl_connectDatabaseColumn_noNotify: not to be called with an external value binding!" ); - - // consistency checks - DBG_ASSERT( !( hasField() && !_bFromReload ), - "OBoundControlModel::impl_connectDatabaseColumn_noNotify: the form is just *loaded*, but we already have a field!" ); - (void)_bFromReload; - - Reference< XRowSet > xRowSet( m_xAmbientForm, UNO_QUERY ); - OSL_ENSURE( xRowSet.is(), "OBoundControlModel::impl_connectDatabaseColumn_noNotify: no row set!" ); - if ( !xRowSet.is() ) - return; - - if ( !hasField() ) - { - // connect to the column - connectToField( xRowSet ); - } - - // now that we're connected (more or less, even if we did not find a column), - // we definately want to forward any potentially occuring value changes - m_bForwardValueChanges = sal_True; - - // let derived classes react on this new connection - m_bLoaded = sal_True; - onConnectedDbColumn( xRowSet ); - - // initially transfer the db column value to the control, if we successfully connected to a database column - if ( hasField() ) - initFromField( xRowSet ); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::impl_disconnectDatabaseColumn_noNotify() -{ - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::impl_disconnectDatabaseColumn_noNotify: not to be called with an external value binding!" ); - - // let derived classes react on this - onDisconnectedDbColumn(); - - if ( hasField() ) - { - getField()->removePropertyChangeListener( PROPERTY_VALUE, this ); - resetField(); - } - - m_xCursor = NULL; - m_bLoaded = sal_False; -} - -//============================================================================== -// XLoadListener -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::loaded( const EventObject& _rEvent ) throw(RuntimeException) -{ - ControlModelLock aLock( *this ); - FieldChangeNotifier aBoundFieldNotifier( aLock ); - - OSL_ENSURE( _rEvent.Source == m_xAmbientForm, "OBoundControlModel::loaded: where does this come from?" ); - (void)_rEvent; - - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::loaded: we should never reach this with an external value binding!" ); - if ( hasExternalValueBinding() ) - return; - - impl_connectDatabaseColumn_noNotify( false ); -} - - -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::unloaded( const com::sun::star::lang::EventObject& /*aEvent*/ ) throw(RuntimeException) -{ - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::unloaded: we should never reach this with an external value binding!" ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::reloading( const com::sun::star::lang::EventObject& /*aEvent*/ ) throw(RuntimeException) -{ - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::reloading: we should never reach this with an external value binding!" ); - if ( hasExternalValueBinding() ) - return; - - osl::MutexGuard aGuard(m_aMutex); - m_bForwardValueChanges = sal_False; -} - -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::unloading(const com::sun::star::lang::EventObject& /*aEvent*/) throw(RuntimeException) -{ - ControlModelLock aLock( *this ); - FieldChangeNotifier aBoundFieldNotifier( aLock ); - - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::unloading: we should never reach this with an external value binding!" ); - if ( hasExternalValueBinding() ) - return; - - impl_disconnectDatabaseColumn_noNotify(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OBoundControlModel::reloaded( const EventObject& _rEvent ) throw(RuntimeException) -{ - ControlModelLock aLock( *this ); - FieldChangeNotifier aBoundFieldNotifier( aLock ); - - OSL_ENSURE( _rEvent.Source == m_xAmbientForm, "OBoundControlModel::reloaded: where does this come from?" ); - (void)_rEvent; - - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::reloaded: we should never reach this with an external value binding!" ); - if ( hasExternalValueBinding() ) - return; - - impl_connectDatabaseColumn_noNotify( true ); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::setControlValue( const Any& _rValue, ValueChangeInstigator _eInstigator ) -{ - m_eControlValueChangeInstigator = _eInstigator; - doSetControlValue( _rValue ); - m_eControlValueChangeInstigator = eOther; -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::doSetControlValue( const Any& _rValue ) -{ - OSL_PRECOND( m_xAggregateFastSet.is() && m_xAggregateSet.is(), - "OBoundControlModel::doSetControlValue: invalid aggregate !" ); - OSL_PRECOND( m_sValuePropertyName.getLength() || ( m_nValuePropertyAggregateHandle != -1 ), - "OBoundControlModel::doSetControlValue: please override if you have own value property handling!" ); - - try - { - // release our mutex once (it's acquired in one of the the calling methods), as setting aggregate properties - // may cause any uno controls belonging to us to lock the solar mutex, which is potentially dangerous with - // our own mutex locked - MutexRelease aRelease( m_aMutex ); - if ( ( m_nValuePropertyAggregateHandle != -1 ) && m_xAggregateFastSet.is() ) - { - m_xAggregateFastSet->setFastPropertyValue( m_nValuePropertyAggregateHandle, _rValue ); - } - else if ( m_sValuePropertyName.getLength() && m_xAggregateSet.is() ) - { - m_xAggregateSet->setPropertyValue( m_sValuePropertyName, _rValue ); - } - } - catch( const Exception& ) - { - OSL_FAIL( "OBoundControlModel::doSetControlValue: caught an exception!" ); - } -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::onConnectedValidator( ) -{ - try - { - // if we have an external validator, we do not want the control to force invalid - // inputs to the default value. Instead, invalid inputs should be translated - // to NaN (not a number) - Reference< XPropertySetInfo > xAggregatePropertyInfo; - if ( m_xAggregateSet.is() ) - xAggregatePropertyInfo = m_xAggregateSet->getPropertySetInfo(); - if ( xAggregatePropertyInfo.is() && xAggregatePropertyInfo->hasPropertyByName( PROPERTY_ENFORCE_FORMAT ) ) - m_xAggregateSet->setPropertyValue( PROPERTY_ENFORCE_FORMAT, makeAny( (sal_Bool)sal_False ) ); - } - catch( const Exception& ) - { - OSL_FAIL( "OBoundControlModel::onConnectedValidator: caught an exception!" ); - } - recheckValidity( false ); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::onDisconnectedValidator( ) -{ - try - { - Reference< XPropertySetInfo > xAggregatePropertyInfo; - if ( m_xAggregateSet.is() ) - xAggregatePropertyInfo = m_xAggregateSet->getPropertySetInfo(); - if ( xAggregatePropertyInfo.is() && xAggregatePropertyInfo->hasPropertyByName( PROPERTY_ENFORCE_FORMAT ) ) - m_xAggregateSet->setPropertyValue( PROPERTY_ENFORCE_FORMAT, makeAny( (sal_Bool)sal_True ) ); - } - catch( const Exception& ) - { - OSL_FAIL( "OBoundControlModel::onDisconnectedValidator: caught an exception!" ); - } - recheckValidity( false ); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::onConnectedExternalValue( ) -{ - calculateExternalValueType(); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::onDisconnectedExternalValue( ) -{ -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::onConnectedDbColumn( const Reference< XInterface >& /*_rxForm*/ ) -{ - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::onConnectedDbColumn: how this? There's an external value binding!" ); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::onDisconnectedDbColumn() -{ - OSL_PRECOND( !hasExternalValueBinding(), "OBoundControlModel::onDisconnectedDbColumn: how this? There's an external value binding!" ); -} - -// XReset -//----------------------------------------------------------------------------- -Any OBoundControlModel::getDefaultForReset() const -{ - return Any(); -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::resetNoBroadcast() -{ - setControlValue( getDefaultForReset(), eOther ); -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::addResetListener(const Reference<XResetListener>& l) throw (RuntimeException) -{ - m_aResetHelper.addResetListener( l ); -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::removeResetListener(const Reference<XResetListener>& l) throw (RuntimeException) -{ - m_aResetHelper.removeResetListener( l ); -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::reset() throw (RuntimeException) -{ - if ( !m_aResetHelper.approveReset() ) - return; - - ControlModelLock aLock( *this ); - - // on a new record? - sal_Bool bIsNewRecord = sal_False; - Reference<XPropertySet> xSet( m_xCursor, UNO_QUERY ); - if ( xSet.is() ) - { - try - { - xSet->getPropertyValue( PROPERTY_ISNEW ) >>= bIsNewRecord; - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - // cursor on an invalid row? - sal_Bool bInvalidCursorPosition = sal_True; - try - { - bInvalidCursorPosition = m_xCursor.is() - && ( m_xCursor->isAfterLast() - || m_xCursor->isBeforeFirst() - ) - && !bIsNewRecord; - } - catch( const SQLException& ) - { - OSL_FAIL( "OBoundControlModel::reset: caught an SQL exception!" ); - } - // #i24495# - don't count the insert row as "invalid" - - sal_Bool bSimpleReset = - ( !m_xColumn.is() // no connection to a database column - || ( m_xCursor.is() // OR we have an improperly positioned cursor - && bInvalidCursorPosition - ) - || hasExternalValueBinding() // OR we have an external value binding - ); - - if ( !bSimpleReset ) - { - // The default values will be set if and only if the current value of the field which we're bound - // to is NULL. - // Else, the current field value should be refreshed - // This behaviour is not completely ... "matured": What should happen if the field as well as the - // control have a default value? - - sal_Bool bIsNull = sal_True; - // we have to access the field content at least once to get a reliable result by XColumn::wasNull - try - { - // normally, we'd do a getString here. However, this is extremely expensive in the case - // of binary fields. Unfortunately, getString is the only method which is guaranteed - // to *always* succeed, all other getXXX methods may fail if the column is asked for a - // non-convertible type - sal_Int32 nFieldType = DataType::OBJECT; - getField()->getPropertyValue( PROPERTY_FIELDTYPE ) >>= nFieldType; - if ( ( nFieldType == DataType::BINARY ) - || ( nFieldType == DataType::VARBINARY ) - || ( nFieldType == DataType::LONGVARBINARY ) - || ( nFieldType == DataType::OBJECT ) - /*|| ( nFieldType == DataType::CLOB )*/ - ) - m_xColumn->getBinaryStream(); - else if ( nFieldType == DataType::BLOB ) - m_xColumn->getBlob(); - else - m_xColumn->getString(); - - bIsNull = m_xColumn->wasNull(); - } - catch(Exception&) - { - OSL_FAIL("OBoundControlModel::reset: this should have succeeded in all cases!"); - } - - sal_Bool bNeedValueTransfer = sal_True; - - if ( bIsNull ) - { - if ( bIsNewRecord ) - { - // reset the control to it's default - resetNoBroadcast(); - // and immediately commit the changes to the DB column, to keep consistency - commitControlValueToDbColumn( sal_True ); - - bNeedValueTransfer = sal_False; - } - } - - if ( bNeedValueTransfer ) - transferDbValueToControl(); - } - else - { - resetNoBroadcast(); - - // transfer to the external binding, if necessary - if ( hasExternalValueBinding() ) - transferControlValueToExternal( aLock ); - } - - // revalidate, if necessary - if ( hasValidator() ) - recheckValidity( true ); - - aLock.release(); - - m_aResetHelper.notifyResetted(); -} - -// ----------------------------------------------------------------------------- -void OBoundControlModel::impl_setField_noNotify( const Reference< XPropertySet>& _rxField ) -{ - DBG_ASSERT( !hasExternalValueBinding(), "OBoundControlModel::impl_setField_noNotify: We have an external value binding!" ); - m_xField = _rxField; -} - -//-------------------------------------------------------------------- -sal_Bool OBoundControlModel::impl_approveValueBinding_nolock( const Reference< XValueBinding >& _rxBinding ) -{ - if ( !_rxBinding.is() ) - return sal_False; - - Sequence< Type > aTypeCandidates; - { - // SYNCHRONIZED --> - ::osl::MutexGuard aGuard( m_aMutex ); - aTypeCandidates = getSupportedBindingTypes(); - // <-- SYNCHRONIZED - } - - for ( const Type* pType = aTypeCandidates.getConstArray(); - pType != aTypeCandidates.getConstArray() + aTypeCandidates.getLength(); - ++pType - ) - { - if ( _rxBinding->supportsType( *pType ) ) - return sal_True; - } - - return sal_False; -} - -//-------------------------------------------------------------------- -void OBoundControlModel::connectExternalValueBinding( - const Reference< XValueBinding >& _rxBinding, ControlModelLock& _rInstanceLock ) -{ - OSL_PRECOND( _rxBinding.is(), "OBoundControlModel::connectExternalValueBinding: invalid binding instance!" ); - OSL_PRECOND( !hasExternalValueBinding( ), "OBoundControlModel::connectExternalValueBinding: precond not met (currently have a binding)!" ); - - // if we're connected to a database column, suspend this - if ( hasField() ) - impl_disconnectDatabaseColumn_noNotify(); - - // suspend listening for load-related events at out ambient form. - // This is because an external value binding overrules a possible database binding. - if ( isFormListening() ) - doFormListening( false ); - - // remember this new binding - m_xExternalBinding = _rxBinding; - - // tell the derivee - onConnectedExternalValue(); - - try - { - // add as value listener so we get notified when the value changes - Reference< XModifyBroadcaster > xModifiable( m_xExternalBinding, UNO_QUERY ); - if ( xModifiable.is() ) - xModifiable->addModifyListener( this ); - - // add as property change listener for some (possibly present) properties we're - // interested in - Reference< XPropertySet > xBindingProps( m_xExternalBinding, UNO_QUERY ); - Reference< XPropertySetInfo > xBindingPropsInfo( xBindingProps.is() ? xBindingProps->getPropertySetInfo() : Reference< XPropertySetInfo >() ); - if ( xBindingPropsInfo.is() ) - { - if ( xBindingPropsInfo->hasPropertyByName( PROPERTY_READONLY ) ) - { - xBindingProps->addPropertyChangeListener( PROPERTY_READONLY, this ); - m_bBindingControlsRO = sal_True; - } - if ( xBindingPropsInfo->hasPropertyByName( PROPERTY_RELEVANT ) ) - { - xBindingProps->addPropertyChangeListener( PROPERTY_RELEVANT, this ); - m_bBindingControlsEnable = sal_True; - } - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - - // propagate our new value - transferExternalValueToControl( _rInstanceLock ); - - // if the binding is also a validator, use it, too. This is a constraint of the - // com.sun.star.form.binding.ValidatableBindableFormComponent service - if ( m_bSupportsValidation ) - { - try - { - Reference< XValidator > xAsValidator( _rxBinding, UNO_QUERY ); - if ( xAsValidator.is() ) - setValidator( xAsValidator ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } -} - -//-------------------------------------------------------------------- -void OBoundControlModel::disconnectExternalValueBinding( ) -{ - try - { - // not listening at the binding anymore - Reference< XModifyBroadcaster > xModifiable( m_xExternalBinding, UNO_QUERY ); - if ( xModifiable.is() ) - xModifiable->removeModifyListener( this ); - - // remove as property change listener - Reference< XPropertySet > xBindingProps( m_xExternalBinding, UNO_QUERY ); - if ( m_bBindingControlsRO ) - xBindingProps->removePropertyChangeListener( PROPERTY_READONLY, this ); - if ( m_bBindingControlsEnable ) - xBindingProps->removePropertyChangeListener( PROPERTY_RELEVANT, this ); - } - catch( const Exception& ) - { - OSL_FAIL( "OBoundControlModel::disconnectExternalValueBinding: caught an exception!" ); - } - - // if the binding also acts as our validator, disconnect the validator, too - if ( ( m_xExternalBinding == m_xValidator ) && m_xValidator.is() ) - disconnectValidator( ); - - // no binding anymore - m_xExternalBinding.clear(); - - // be a load listener at our form, again. This was suspended while we had - // an external value binding in place. - doFormListening( true ); - - // re-connect to database column of the new parent - if ( m_xAmbientForm.is() && m_xAmbientForm->isLoaded() ) - impl_connectDatabaseColumn_noNotify( false ); - - // tell the derivee - onDisconnectedExternalValue(); -} - -//-------------------------------------------------------------------- -void SAL_CALL OBoundControlModel::setValueBinding( const Reference< XValueBinding >& _rxBinding ) throw (IncompatibleTypesException, RuntimeException) -{ - OSL_PRECOND( m_bSupportsExternalBinding, "OBoundControlModel::setValueBinding: How did you reach this method?" ); - // the interface for this method should not have been exposed if we do not - // support binding to external data - // allow reset - if ( _rxBinding.is() && !impl_approveValueBinding_nolock( _rxBinding ) ) - { - throw IncompatibleTypesException( - FRM_RES_STRING( RID_STR_INCOMPATIBLE_TYPES ), - *this - ); - } - - ControlModelLock aLock( *this ); - - // since a ValueBinding overrules any potentially active database binding, the change in a ValueBinding - // might trigger a change in our BoundField. - FieldChangeNotifier aBoundFieldNotifier( aLock ); - - // disconnect from the old binding - if ( hasExternalValueBinding() ) - disconnectExternalValueBinding( ); - - // connect to the new binding - if ( _rxBinding.is() ) - connectExternalValueBinding( _rxBinding, aLock ); -} - -//-------------------------------------------------------------------- -Reference< XValueBinding > SAL_CALL OBoundControlModel::getValueBinding( ) throw (RuntimeException) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - OSL_PRECOND( m_bSupportsExternalBinding, "OBoundControlModel::getValueBinding: How did you reach this method?" ); - // the interface for this method should not have been exposed if we do not - // support binding to external data - - return m_xExternalBinding; -} - -//-------------------------------------------------------------------- -void SAL_CALL OBoundControlModel::modified( const EventObject& _rEvent ) throw ( RuntimeException ) -{ - ControlModelLock aLock( *this ); - - OSL_PRECOND( hasExternalValueBinding(), "OBoundControlModel::modified: Where did this come from?" ); - if ( !m_bTransferingValue && ( m_xExternalBinding == _rEvent.Source ) && m_xExternalBinding.is() ) - { - transferExternalValueToControl( aLock ); - } -} - -//-------------------------------------------------------------------- -void OBoundControlModel::transferDbValueToControl( ) -{ - try - { - setControlValue( translateDbColumnToControlValue(), eDbColumnBinding ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::transferExternalValueToControl( ControlModelLock& _rInstanceLock ) -{ - Reference< XValueBinding > xExternalBinding( m_xExternalBinding ); - Type aValueExchangeType( getExternalValueType() ); - - _rInstanceLock.release(); - // >>>>>>>> ----- UNSAFE ----- >>>>>>>> - Any aExternalValue; - try - { - aExternalValue = xExternalBinding->getValue( aValueExchangeType ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - // <<<<<<<< ----- UNSAFE ----- <<<<<<<< - _rInstanceLock.acquire(); - - setControlValue( translateExternalValueToControlValue( aExternalValue ), eExternalBinding ); -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::transferControlValueToExternal( ControlModelLock& _rInstanceLock ) -{ - OSL_PRECOND( m_bSupportsExternalBinding && hasExternalValueBinding(), - "OBoundControlModel::transferControlValueToExternal: precondition not met!" ); - - if ( m_xExternalBinding.is() ) - { - Any aExternalValue( translateControlValueToExternalValue() ); - m_bTransferingValue = sal_True; - - _rInstanceLock.release(); - // >>>>>>>> ----- UNSAFE ----- >>>>>>>> - try - { - m_xExternalBinding->setValue( aExternalValue ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - // <<<<<<<< ----- UNSAFE ----- <<<<<<<< - _rInstanceLock.acquire(); - - m_bTransferingValue = sal_False; - } -} - -// ----------------------------------------------------------------------------- -Sequence< Type > OBoundControlModel::getSupportedBindingTypes() -{ - return Sequence< Type >( &m_aValuePropertyType, 1 ); -} - -//----------------------------------------------------------------------------- -void OBoundControlModel::calculateExternalValueType() -{ - m_aExternalValueType = Type(); - if ( !m_xExternalBinding.is() ) - return; - - Sequence< Type > aTypeCandidates( getSupportedBindingTypes() ); - for ( const Type* pTypeCandidate = aTypeCandidates.getConstArray(); - pTypeCandidate != aTypeCandidates.getConstArray() + aTypeCandidates.getLength(); - ++pTypeCandidate - ) - { - if ( m_xExternalBinding->supportsType( *pTypeCandidate ) ) - { - m_aExternalValueType = *pTypeCandidate; - break; - } - } -} - -//----------------------------------------------------------------------------- -Any OBoundControlModel::translateExternalValueToControlValue( const Any& _rExternalValue ) const -{ - OSL_PRECOND( m_bSupportsExternalBinding && hasExternalValueBinding(), - "OBoundControlModel::translateExternalValueToControlValue: precondition not met!" ); - - Any aControlValue( _rExternalValue ); - - // if the external value is VOID, and our value property is not allowed to be VOID, - // then default-construct a value - if ( !aControlValue.hasValue() && !m_bValuePropertyMayBeVoid ) - aControlValue.setValue( NULL, m_aValuePropertyType ); - - // outta here - return aControlValue; -} - -//------------------------------------------------------------------------------ -Any OBoundControlModel::translateControlValueToExternalValue( ) const -{ - return getControlValue( ); -} - -//------------------------------------------------------------------------------ -Any OBoundControlModel::translateControlValueToValidatableValue( ) const -{ - OSL_PRECOND( m_xValidator.is(), "OBoundControlModel::translateControlValueToValidatableValue: no validator, so why should I?" ); - if ( ( m_xValidator == m_xExternalBinding ) && m_xValidator.is() ) - return translateControlValueToExternalValue(); - return getControlValue(); -} - -//------------------------------------------------------------------------------ -Any OBoundControlModel::getControlValue( ) const -{ - OSL_PRECOND( m_xAggregateFastSet.is() && m_xAggregateSet.is(), - "OBoundControlModel::getControlValue: invalid aggregate !" ); - OSL_PRECOND( m_sValuePropertyName.getLength() || ( m_nValuePropertyAggregateHandle != -1 ), - "OBoundControlModel::getControlValue: please override if you have own value property handling!" ); - - // determine the current control value - Any aControlValue; - if ( ( m_nValuePropertyAggregateHandle != -1 ) && m_xAggregateFastSet.is() ) - { - aControlValue = m_xAggregateFastSet->getFastPropertyValue( m_nValuePropertyAggregateHandle ); - } - else if ( m_sValuePropertyName.getLength() && m_xAggregateSet.is() ) - { - aControlValue = m_xAggregateSet->getPropertyValue( m_sValuePropertyName ); - } - - return aControlValue; -} - -//-------------------------------------------------------------------- -void OBoundControlModel::connectValidator( const Reference< XValidator >& _rxValidator ) -{ - OSL_PRECOND( _rxValidator.is(), "OBoundControlModel::connectValidator: invalid validator instance!" ); - OSL_PRECOND( !hasValidator( ), "OBoundControlModel::connectValidator: precond not met (have a validator currently)!" ); - - m_xValidator = _rxValidator; - - // add as value listener so we get notified when the value changes - if ( m_xValidator.is() ) - { - try - { - m_xValidator->addValidityConstraintListener( this ); - } - catch( const RuntimeException& ) - { - } - } - - onConnectedValidator( ); -} - -//-------------------------------------------------------------------- -void OBoundControlModel::disconnectValidator( ) -{ - OSL_PRECOND( hasValidator( ), "OBoundControlModel::connectValidator: precond not met (don't have a validator currently)!" ); - - // add as value listener so we get notified when the value changes - if ( m_xValidator.is() ) - { - try - { - m_xValidator->removeValidityConstraintListener( this ); - } - catch( const RuntimeException& ) - { - } - } - - m_xValidator.clear(); - - onDisconnectedValidator( ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OBoundControlModel::setValidator( const Reference< XValidator >& _rxValidator ) throw (VetoException,RuntimeException) -{ - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - OSL_PRECOND( m_bSupportsValidation, "OBoundControlModel::setValidator: How did you reach this method?" ); - // the interface for this method should not have been exposed if we do not - // support validation - - // early out if the validator does not change - if( _rxValidator == m_xValidator ) - return; - - if ( m_xValidator.is() && ( m_xValidator == m_xExternalBinding ) ) - throw VetoException( - FRM_RES_STRING( RID_STR_INVALID_VALIDATOR ), - *this - ); - - // disconnect from the old validator - if ( hasValidator() ) - disconnectValidator( ); - - // connect to the new validator - if ( _rxValidator.is() ) - connectValidator( _rxValidator ); -} - -//-------------------------------------------------------------------- -Reference< XValidator > SAL_CALL OBoundControlModel::getValidator( ) throw (RuntimeException) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - OSL_PRECOND( m_bSupportsValidation, "OBoundControlModel::getValidator: How did you reach this method?" ); - // the interface for this method should not have been exposed if we do not - // support validation - - return m_xValidator; -} - -//-------------------------------------------------------------------- -void SAL_CALL OBoundControlModel::validityConstraintChanged( const EventObject& /*Source*/ ) throw (RuntimeException) -{ - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - OSL_PRECOND( m_bSupportsValidation, "OBoundControlModel::validityConstraintChanged: How did you reach this method?" ); - // the interface for this method should not have been exposed if we do not - // support validation - - recheckValidity( false ); -} - -//-------------------------------------------------------------------- -sal_Bool SAL_CALL OBoundControlModel::isValid( ) throw (RuntimeException) -{ - return m_bIsCurrentValueValid; -} - -//-------------------------------------------------------------------- -::com::sun::star::uno::Any OBoundControlModel::getCurrentFormComponentValue() const -{ - if ( hasValidator() ) - return translateControlValueToValidatableValue(); - return getControlValue(); -} - -//-------------------------------------------------------------------- -Any SAL_CALL OBoundControlModel::getCurrentValue( ) throw (RuntimeException) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - return getCurrentFormComponentValue(); -} - -//-------------------------------------------------------------------- -void SAL_CALL OBoundControlModel::addFormComponentValidityListener( const Reference< validation::XFormComponentValidityListener >& Listener ) throw (NullPointerException, RuntimeException) -{ - if ( Listener.is() ) - m_aFormComponentListeners.addInterface( Listener ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OBoundControlModel::removeFormComponentValidityListener( const Reference< validation::XFormComponentValidityListener >& Listener ) throw (NullPointerException, RuntimeException) -{ - if ( Listener.is() ) - m_aFormComponentListeners.removeInterface( Listener ); -} - -//-------------------------------------------------------------------- -void OBoundControlModel::recheckValidity( bool _bForceNotification ) -{ - try - { - sal_Bool bIsCurrentlyValid = sal_True; - if ( hasValidator() ) - bIsCurrentlyValid = m_xValidator->isValid( translateControlValueToValidatableValue() ); - - if ( ( bIsCurrentlyValid != m_bIsCurrentValueValid ) || _bForceNotification ) - { - m_bIsCurrentValueValid = bIsCurrentlyValid; - - // release our mutex for the notifications - MutexRelease aRelease( m_aMutex ); - m_aFormComponentListeners.notifyEach( &validation::XFormComponentValidityListener::componentValidityChanged, EventObject( *this ) ); - } - } - catch( const Exception& ) - { - OSL_FAIL( "OBoundControlModel::recheckValidity: caught an exception!" ); - } -} - -//------------------------------------------------------------------------------ -void OBoundControlModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 5, OControlModel ) - DECL_PROP1 ( CONTROLSOURCE, ::rtl::OUString, BOUND ); - DECL_IFACE_PROP3( BOUNDFIELD, XPropertySet, BOUND, READONLY, TRANSIENT ); - DECL_IFACE_PROP2( CONTROLLABEL, XPropertySet, BOUND, MAYBEVOID ); - DECL_PROP2 ( CONTROLSOURCEPROPERTY, ::rtl::OUString, READONLY, TRANSIENT ); - DECL_BOOL_PROP1 ( INPUT_REQUIRED, BOUND ); - END_DESCRIBE_PROPERTIES() -} - -// ----------------------------------------------------------------------------- - -//......................................................................... -} -//... namespace frm ....................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/FormattedField.cxx b/forms/source/component/FormattedField.cxx deleted file mode 100644 index 21abaf123..000000000 --- a/forms/source/component/FormattedField.cxx +++ /dev/null @@ -1,1257 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "FormattedField.hxx" -#include "services.hxx" -#include "property.hrc" -#include "property.hxx" -#include "frm_resource.hxx" -#include "frm_resource.hrc" -#include "propertybaghelper.hxx" -#include <comphelper/sequence.hxx> -#include <comphelper/numbers.hxx> -#include <connectivity/dbtools.hxx> -#include <connectivity/dbconversion.hxx> -#include <svl/zforlist.hxx> -#include <svl/numuno.hxx> -#include <vcl/svapp.hxx> -#include <tools/debug.hxx> -#include <tools/wintypes.hxx> -#include <i18npool/mslangid.hxx> -#include <rtl/textenc.h> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/util/NumberFormat.hpp> -#include <com/sun/star/util/Date.hpp> -#include <com/sun/star/util/Time.hpp> -#include <com/sun/star/awt/MouseEvent.hpp> -#include <com/sun/star/form/XSubmit.hpp> -#include <com/sun/star/awt/XWindow.hpp> -#include <com/sun/star/awt/XKeyListener.hpp> -#include <com/sun/star/form/FormComponentType.hpp> -#include <com/sun/star/util/XNumberFormatsSupplier.hpp> -#include <com/sun/star/util/XNumberFormatTypes.hpp> -#include <com/sun/star/form/XForm.hpp> -#include <com/sun/star/container/XIndexAccess.hpp> -#include <osl/mutex.hxx> - // needed as long as we use the SolarMutex -#include <comphelper/streamsection.hxx> -#include <cppuhelper/weakref.hxx> -#include <unotools/desktopterminationobserver.hxx> - -#include <list> -#include <algorithm> - -using namespace dbtools; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::form::binding; - -namespace -{ - typedef com::sun::star::util::Date UNODate; - typedef com::sun::star::util::Time UNOTime; - typedef com::sun::star::util::DateTime UNODateTime; -} - -//......................................................................... -namespace frm -{ - -/*************************************************************************/ - -class StandardFormatsSupplier : protected SvNumberFormatsSupplierObj, public ::utl::ITerminationListener -{ -protected: - SvNumberFormatter* m_pMyPrivateFormatter; - static WeakReference< XNumberFormatsSupplier > s_xDefaultFormatsSupplier; - -public: - static Reference< XNumberFormatsSupplier > get( const Reference< XMultiServiceFactory >& _rxORB ); - - using SvNumberFormatsSupplierObj::operator new; - using SvNumberFormatsSupplierObj::operator delete; - -protected: - StandardFormatsSupplier(const Reference<XMultiServiceFactory>& _rxFactory,LanguageType _eSysLanguage); - ~StandardFormatsSupplier(); - -protected: - virtual bool queryTermination() const; - virtual void notifyTermination(); -}; - -//------------------------------------------------------------------ -WeakReference< XNumberFormatsSupplier > StandardFormatsSupplier::s_xDefaultFormatsSupplier; - -//------------------------------------------------------------------ -StandardFormatsSupplier::StandardFormatsSupplier(const Reference< XMultiServiceFactory > & _rxFactory,LanguageType _eSysLanguage) - :SvNumberFormatsSupplierObj() - ,m_pMyPrivateFormatter(new SvNumberFormatter(_rxFactory, _eSysLanguage)) -{ - SetNumberFormatter(m_pMyPrivateFormatter); - - // #i29147# - ::utl::DesktopTerminationObserver::registerTerminationListener( this ); -} - -//------------------------------------------------------------------ -StandardFormatsSupplier::~StandardFormatsSupplier() -{ - ::utl::DesktopTerminationObserver::revokeTerminationListener( this ); - - DELETEZ( m_pMyPrivateFormatter ); -} - -//------------------------------------------------------------------ -Reference< XNumberFormatsSupplier > StandardFormatsSupplier::get( const Reference< XMultiServiceFactory >& _rxORB ) -{ - LanguageType eSysLanguage = LANGUAGE_SYSTEM; - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - Reference< XNumberFormatsSupplier > xSupplier = s_xDefaultFormatsSupplier; - if ( xSupplier.is() ) - return xSupplier; - - // get the Office's locale - const Locale& rSysLocale = SvtSysLocale().GetLocaleData().getLocale(); - // translate - eSysLanguage = MsLangId::convertLocaleToLanguage( rSysLocale ); - } - - StandardFormatsSupplier* pSupplier = new StandardFormatsSupplier( _rxORB, eSysLanguage ); - Reference< XNumberFormatsSupplier > xNewlyCreatedSupplier( pSupplier ); - - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - Reference< XNumberFormatsSupplier > xSupplier = s_xDefaultFormatsSupplier; - if ( xSupplier.is() ) - // somebody used the small time frame where the mutex was not locked to create and set - // the supplier - return xSupplier; - - s_xDefaultFormatsSupplier = xNewlyCreatedSupplier; - } - - return xNewlyCreatedSupplier; -} - -//------------------------------------------------------------------ -bool StandardFormatsSupplier::queryTermination() const -{ - return true; -} - -//------------------------------------------------------------------ -void StandardFormatsSupplier::notifyTermination() -{ - Reference< XNumberFormatsSupplier > xKeepAlive = this; - // when the application is terminating, release our static reference so that we are cleared/destructed - // earlier than upon unloading the library - // #i29147# - s_xDefaultFormatsSupplier = WeakReference< XNumberFormatsSupplier >( ); - - SetNumberFormatter( NULL ); - DELETEZ( m_pMyPrivateFormatter ); -} - -/*************************************************************************/ -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OFormattedControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OFormattedControl(_rxFactory)); -} - -//------------------------------------------------------------------ -Sequence<Type> OFormattedControl::_getTypes() -{ - return ::comphelper::concatSequences( - OFormattedControl_BASE::getTypes(), - OBoundControl::_getTypes() - ); -} - -//------------------------------------------------------------------ -Any SAL_CALL OFormattedControl::queryAggregation(const Type& _rType) throw (RuntimeException) -{ - Any aReturn = OBoundControl::queryAggregation(_rType); - if (!aReturn.hasValue()) - aReturn = OFormattedControl_BASE::queryInterface(_rType); - return aReturn; -} - - -DBG_NAME(OFormattedControl); -//------------------------------------------------------------------------------ -OFormattedControl::OFormattedControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl(_rxFactory, VCL_CONTROL_FORMATTEDFIELD) - ,m_nKeyEvent(0) -{ - DBG_CTOR(OFormattedControl,NULL); - - increment(m_refCount); - { - Reference<XWindow> xComp; - if (query_aggregation(m_xAggregate, xComp)) - { - xComp->addKeyListener(this); - } - } - decrement(m_refCount); -} - -//------------------------------------------------------------------------------ -OFormattedControl::~OFormattedControl() -{ - if( m_nKeyEvent ) - Application::RemoveUserEvent( m_nKeyEvent ); - - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - - DBG_DTOR(OFormattedControl,NULL); -} - -// XKeyListener -//------------------------------------------------------------------------------ -void OFormattedControl::disposing(const EventObject& _rSource) throw(RuntimeException) -{ - OBoundControl::disposing(_rSource); -} - -//------------------------------------------------------------------------------ -void OFormattedControl::keyPressed(const ::com::sun::star::awt::KeyEvent& e) throw ( ::com::sun::star::uno::RuntimeException) -{ - if( e.KeyCode != KEY_RETURN || e.Modifiers != 0 ) - return; - - // Steht das Control in einem Formular mit einer Submit-URL? - Reference<com::sun::star::beans::XPropertySet> xSet(getModel(), UNO_QUERY); - if( !xSet.is() ) - return; - - Reference<XFormComponent> xFComp(xSet, UNO_QUERY); - InterfaceRef xParent = xFComp->getParent(); - if( !xParent.is() ) - return; - - Reference<com::sun::star::beans::XPropertySet> xFormSet(xParent, UNO_QUERY); - if( !xFormSet.is() ) - return; - - Any aTmp(xFormSet->getPropertyValue( PROPERTY_TARGET_URL )); - if (!isA(aTmp, static_cast< ::rtl::OUString* >(NULL)) || - !getString(aTmp).getLength() ) - return; - - Reference<XIndexAccess> xElements(xParent, UNO_QUERY); - sal_Int32 nCount = xElements->getCount(); - if( nCount > 1 ) - { - - Reference<com::sun::star::beans::XPropertySet> xFCSet; - for( sal_Int32 nIndex=0; nIndex < nCount; nIndex++ ) - { - // Any aElement(xElements->getByIndex(nIndex)); - xElements->getByIndex(nIndex) >>= xFCSet; - - if (hasProperty(PROPERTY_CLASSID, xFCSet) && - getINT16(xFCSet->getPropertyValue(PROPERTY_CLASSID)) == FormComponentType::TEXTFIELD) - { - // Noch ein weiteres Edit gefunden ==> dann nicht submitten - if (xFCSet != xSet) - return; - } - } - } - - // Da wir noch im Haender stehen, submit asynchron ausloesen - if( m_nKeyEvent ) - Application::RemoveUserEvent( m_nKeyEvent ); - m_nKeyEvent = Application::PostUserEvent( LINK(this, OFormattedControl, - OnKeyPressed) ); -} - -//------------------------------------------------------------------------------ -void OFormattedControl::keyReleased(const ::com::sun::star::awt::KeyEvent& /*e*/) throw ( ::com::sun::star::uno::RuntimeException) -{ -} - -//------------------------------------------------------------------------------ -IMPL_LINK(OFormattedControl, OnKeyPressed, void*, /*EMPTYARG*/) -{ - m_nKeyEvent = 0; - - Reference<XFormComponent> xFComp(getModel(), UNO_QUERY); - InterfaceRef xParent = xFComp->getParent(); - Reference<XSubmit> xSubmit(xParent, UNO_QUERY); - if (xSubmit.is()) - xSubmit->submit( Reference<XControl> (), ::com::sun::star::awt::MouseEvent() ); - return 0L; -} - -//------------------------------------------------------------------------------ -StringSequence OFormattedControl::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_FORMATTEDFIELD; - return aSupported; -} - -//------------------------------------------------------------------------------ -void OFormattedControl::setDesignMode(sal_Bool bOn) throw ( ::com::sun::star::uno::RuntimeException) -{ - OBoundControl::setDesignMode(bOn); -} - -/*************************************************************************/ -DBG_NAME(OFormattedModel) -//------------------------------------------------------------------ -void OFormattedModel::implConstruct() -{ - // members - m_bOriginalNumeric = sal_False; - m_bNumeric = sal_False; - m_xOriginalFormatter = NULL; - m_nKeyType = NumberFormat::UNDEFINED; - m_aNullDate = DBTypeConversion::getStandardDate(); - m_nFieldType = DataType::OTHER; - - // default our formats supplier - increment(m_refCount); - setPropertyToDefaultByHandle(PROPERTY_ID_FORMATSSUPPLIER); - decrement(m_refCount); - - startAggregatePropertyListening( PROPERTY_FORMATKEY ); - startAggregatePropertyListening( PROPERTY_FORMATSSUPPLIER ); -} - -//------------------------------------------------------------------ -OFormattedModel::OFormattedModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OEditBaseModel(_rxFactory, VCL_CONTROLMODEL_FORMATTEDFIELD, FRM_SUN_CONTROL_FORMATTEDFIELD, sal_True, sal_True ) - // use the old control name for compytibility reasons - ,OErrorBroadcaster( OComponentHelper::rBHelper ) -{ - DBG_CTOR(OFormattedModel, NULL); - - implConstruct(); - - m_nClassId = FormComponentType::TEXTFIELD; - initValueProperty( PROPERTY_EFFECTIVE_VALUE, PROPERTY_ID_EFFECTIVE_VALUE ); -} - -//------------------------------------------------------------------ -OFormattedModel::OFormattedModel( const OFormattedModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory ) - :OEditBaseModel( _pOriginal, _rxFactory ) - ,OErrorBroadcaster( OComponentHelper::rBHelper ) -{ - DBG_CTOR(OFormattedModel, NULL); - - implConstruct(); -} - -//------------------------------------------------------------------------------ -OFormattedModel::~OFormattedModel() -{ - DBG_DTOR(OFormattedModel, NULL); -} - -// XCloneable -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OFormattedModel ) - -//------------------------------------------------------------------------------ -void SAL_CALL OFormattedModel::disposing() -{ - OErrorBroadcaster::disposing(); - OEditBaseModel::disposing(); -} - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence OFormattedModel::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OEditBaseModel::getSupportedServiceNames(); - - sal_Int32 nOldLen = aSupported.getLength(); - aSupported.realloc( nOldLen + 8 ); - ::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen; - - *pStoreTo++ = BINDABLE_CONTROL_MODEL; - *pStoreTo++ = DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_CONTROL_MODEL; - - *pStoreTo++ = BINDABLE_DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_BINDABLE_CONTROL_MODEL; - - *pStoreTo++ = FRM_SUN_COMPONENT_FORMATTEDFIELD; - *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_FORMATTEDFIELD; - *pStoreTo++ = BINDABLE_DATABASE_FORMATTED_FIELD; - - return aSupported; -} - -// XAggregation -//------------------------------------------------------------------------------ -Any SAL_CALL OFormattedModel::queryAggregation(const Type& _rType) throw(RuntimeException) -{ - Any aReturn = OEditBaseModel::queryAggregation( _rType ); - return aReturn.hasValue() ? aReturn : OErrorBroadcaster::queryInterface( _rType ); -} - -// XTypeProvider -//------------------------------------------------------------------------------ -Sequence< Type > OFormattedModel::_getTypes() -{ - return ::comphelper::concatSequences( - OEditBaseModel::_getTypes(), - OErrorBroadcaster::getTypes() - ); -} - -// XPersistObject -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OFormattedModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return ::rtl::OUString(FRM_COMPONENT_EDIT); -} - -// XPropertySet -//------------------------------------------------------------------------------ -void OFormattedModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 3, OEditBaseModel ) - DECL_BOOL_PROP1(EMPTY_IS_NULL, BOUND); - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - DECL_BOOL_PROP2(FILTERPROPOSAL, BOUND, MAYBEDEFAULT); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -void OFormattedModel::describeAggregateProperties( Sequence< Property >& _rAggregateProps ) const -{ - OEditBaseModel::describeAggregateProperties( _rAggregateProps ); - - // TreatAsNumeric nicht transient : wir wollen es an der UI anbinden (ist noetig, um dem EffectiveDefault - // - der kann Text oder Zahl sein - einen Sinn zu geben) - ModifyPropertyAttributes(_rAggregateProps, PROPERTY_TREATASNUMERIC, 0, PropertyAttribute::TRANSIENT); - // same for FormatKey - // (though the paragraph above for the TreatAsNumeric does not hold anymore - we do not have an UI for this. - // But we have for the format key ...) - ModifyPropertyAttributes(_rAggregateProps, PROPERTY_FORMATKEY, 0, PropertyAttribute::TRANSIENT); - - RemoveProperty(_rAggregateProps, PROPERTY_STRICTFORMAT); - // no strict format property for formatted fields: it does not make sense, 'cause - // there is no general way to decide which characters/sub strings are allowed during the input of an - // arbitraryly formatted control -} - -//------------------------------------------------------------------------------ -void OFormattedModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const -{ - OEditBaseModel::getFastPropertyValue(rValue, nHandle); -} - -//------------------------------------------------------------------------------ -void OFormattedModel::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) throw ( ::com::sun::star::uno::Exception) -{ - OEditBaseModel::setFastPropertyValue_NoBroadcast(nHandle, rValue); -} - -//------------------------------------------------------------------------------ -sal_Bool OFormattedModel::convertFastPropertyValue(Any& rConvertedValue, Any& rOldValue, sal_Int32 nHandle, const Any& rValue) - throw( IllegalArgumentException ) -{ - return OEditBaseModel::convertFastPropertyValue(rConvertedValue, rOldValue, nHandle, rValue); -} - -//------------------------------------------------------------------------------ -void OFormattedModel::setPropertyToDefaultByHandle(sal_Int32 nHandle) -{ - if (nHandle == PROPERTY_ID_FORMATSSUPPLIER) - { - Reference<XNumberFormatsSupplier> xSupplier = calcDefaultFormatsSupplier(); - DBG_ASSERT(m_xAggregateSet.is(), "OFormattedModel::setPropertyToDefaultByHandle(FORMATSSUPPLIER) : have no aggregate !"); - if (m_xAggregateSet.is()) - m_xAggregateSet->setPropertyValue(PROPERTY_FORMATSSUPPLIER, makeAny(xSupplier)); - } - else - OEditBaseModel::setPropertyToDefaultByHandle(nHandle); -} - -//------------------------------------------------------------------------------ -void OFormattedModel::setPropertyToDefault(const ::rtl::OUString& aPropertyName) throw( com::sun::star::beans::UnknownPropertyException, RuntimeException ) -{ - OPropertyArrayAggregationHelper& rPH = m_aPropertyBagHelper.getInfoHelper(); - sal_Int32 nHandle = rPH.getHandleByName( aPropertyName ); - - if (nHandle == PROPERTY_ID_FORMATSSUPPLIER) - setPropertyToDefaultByHandle(PROPERTY_ID_FORMATSSUPPLIER); - else - OEditBaseModel::setPropertyToDefault(aPropertyName); -} - -//------------------------------------------------------------------------------ -Any OFormattedModel::getPropertyDefaultByHandle( sal_Int32 nHandle ) const -{ - if (nHandle == PROPERTY_ID_FORMATSSUPPLIER) - { - Reference<XNumberFormatsSupplier> xSupplier = calcDefaultFormatsSupplier(); - return makeAny(xSupplier); - } - else - return OEditBaseModel::getPropertyDefaultByHandle(nHandle); -} - -//------------------------------------------------------------------------------ -Any SAL_CALL OFormattedModel::getPropertyDefault( const ::rtl::OUString& aPropertyName ) throw( com::sun::star::beans::UnknownPropertyException, RuntimeException ) -{ - OPropertyArrayAggregationHelper& rPH = m_aPropertyBagHelper.getInfoHelper(); - sal_Int32 nHandle = rPH.getHandleByName( aPropertyName ); - - if (nHandle == PROPERTY_ID_FORMATSSUPPLIER) - return getPropertyDefaultByHandle(PROPERTY_ID_FORMATSSUPPLIER); - else - return OEditBaseModel::getPropertyDefault(aPropertyName); -} - -//------------------------------------------------------------------------------ -void OFormattedModel::_propertyChanged( const com::sun::star::beans::PropertyChangeEvent& evt ) throw(RuntimeException) -{ - // TODO: check how this works with external bindings - - OSL_ENSURE( evt.Source == m_xAggregateSet, "OFormattedModel::_propertyChanged: where did this come from?" ); - if ( evt.Source == m_xAggregateSet ) - { - Reference< XPropertySet > xSourceSet( evt.Source, UNO_QUERY ); - if ( evt.PropertyName.equals( PROPERTY_FORMATKEY ) ) - { - if ( evt.NewValue.getValueType().getTypeClass() == TypeClass_LONG ) - { - try - { - ::osl::MutexGuard aGuard( m_aMutex ); - - Reference<XNumberFormatsSupplier> xSupplier( calcFormatsSupplier() ); - m_nKeyType = getNumberFormatType(xSupplier->getNumberFormats(), getINT32( evt.NewValue ) ); - - // as m_aSaveValue (which is used by commitControlValueToDbColumn) is format dependent we have - // to recalc it, which is done by translateDbColumnToControlValue - if ( m_xColumn.is() && m_xAggregateFastSet.is() && !m_xCursor->isBeforeFirst() && !m_xCursor->isAfterLast()) - { - setControlValue( translateDbColumnToControlValue(), eOther ); - } - - // if we're connected to an external value binding, then re-calculate the type - // used to exchange the value - it depends on the format, too - if ( hasExternalValueBinding() ) - { - calculateExternalValueType(); - } - } - catch(Exception&) - { - } - } - return; - } - - if ( evt.PropertyName.equals( PROPERTY_FORMATSSUPPLIER ) ) - { - updateFormatterNullDate(); - return; - } - - OBoundControlModel::_propertyChanged( evt ); - } -} - -//------------------------------------------------------------------------------ -void OFormattedModel::updateFormatterNullDate() -{ - // calc the current NULL date - Reference< XNumberFormatsSupplier > xSupplier( calcFormatsSupplier() ); - if ( xSupplier.is() ) - xSupplier->getNumberFormatSettings()->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NullDate" ) ) ) >>= m_aNullDate; -} - -//------------------------------------------------------------------------------ -Reference< XNumberFormatsSupplier > OFormattedModel::calcFormatsSupplier() const -{ - Reference<XNumberFormatsSupplier> xSupplier; - - DBG_ASSERT(m_xAggregateSet.is(), "OFormattedModel::calcFormatsSupplier : have no aggregate !"); - // hat mein aggregiertes Model einen FormatSupplier ? - if( m_xAggregateSet.is() ) - m_xAggregateSet->getPropertyValue(PROPERTY_FORMATSSUPPLIER) >>= xSupplier; - - if (!xSupplier.is()) - // check if my parent form has a supplier - xSupplier = calcFormFormatsSupplier(); - - if (!xSupplier.is()) - xSupplier = calcDefaultFormatsSupplier(); - - DBG_ASSERT(xSupplier.is(), "OFormattedModel::calcFormatsSupplier : no supplier !"); - // jetzt sollte aber einer da sein - return xSupplier; -} - -//------------------------------------------------------------------------------ -Reference<XNumberFormatsSupplier> OFormattedModel::calcFormFormatsSupplier() const -{ - Reference<XChild> xMe; - query_interface(static_cast<XWeak*>(const_cast<OFormattedModel*>(this)), xMe); - // damit stellen wir sicher, dass wir auch fuer den Fall der Aggregation das richtige - // Objekt bekommen - DBG_ASSERT(xMe.is(), "OFormattedModel::calcFormFormatsSupplier : I should have a content interface !"); - - // jetzt durchhangeln nach oben, bis wir auf eine starform treffen (angefangen mit meinem eigenen Parent) - Reference<XChild> xParent(xMe->getParent(), UNO_QUERY); - Reference<XForm> xNextParentForm(xParent, UNO_QUERY); - while (!xNextParentForm.is() && xParent.is()) - { - xParent = xParent.query( xParent->getParent() ); - xNextParentForm = xNextParentForm.query( xParent ); - } - - if (!xNextParentForm.is()) - { - OSL_FAIL("OFormattedModel::calcFormFormatsSupplier : have no ancestor which is a form !"); - return NULL; - } - - // den FormatSupplier von meinem Vorfahren (falls der einen hat) - Reference< XRowSet > xRowSet( xNextParentForm, UNO_QUERY ); - Reference< XNumberFormatsSupplier > xSupplier; - if (xRowSet.is()) - xSupplier = getNumberFormats( getConnection(xRowSet), sal_True, getContext().getLegacyServiceFactory() ); - return xSupplier; -} - -//------------------------------------------------------------------------------ -Reference< XNumberFormatsSupplier > OFormattedModel::calcDefaultFormatsSupplier() const -{ - return StandardFormatsSupplier::get( getContext().getLegacyServiceFactory() ); -} - -// XBoundComponent -//------------------------------------------------------------------------------ -void OFormattedModel::loaded(const EventObject& rEvent) throw ( ::com::sun::star::uno::RuntimeException) -{ - // HACK : our onConnectedDbColumn accesses our NumberFormatter which locks the solar mutex (as it doesn't have - // an own one). To prevent deadlocks with other threads which may request a property from us in an - // UI-triggered action (e.g. an tooltip) we lock the solar mutex _here_ before our base class locks - // it's own muext (which is used for property requests) - // alternative a): we use two mutexes, one which is passed to the OPropertysetHelper and used for - // property requests and one for our own code. This would need a lot of code rewriting - // alternative b): The NumberFormatter has to be really threadsafe (with an own mutex), which is - // the only "clean" solution for me. - - SolarMutexGuard aGuard; - OEditBaseModel::loaded(rEvent); -} - -//------------------------------------------------------------------------------ -void OFormattedModel::onConnectedDbColumn( const Reference< XInterface >& _rxForm ) -{ - m_xOriginalFormatter = NULL; - - // get some properties of the field - m_nFieldType = DataType::OTHER; - Reference<XPropertySet> xField = getField(); - if ( xField.is() ) - xField->getPropertyValue( PROPERTY_FIELDTYPE ) >>= m_nFieldType; - - sal_Int32 nFormatKey = 0; - - DBG_ASSERT(m_xAggregateSet.is(), "OFormattedModel::onConnectedDbColumn : have no aggregate !"); - if (m_xAggregateSet.is()) - { // all the following doesn't make any sense if we have no aggregate ... - Any aSupplier = m_xAggregateSet->getPropertyValue(PROPERTY_FORMATSSUPPLIER); - DBG_ASSERT( aSupplier.hasValue(), "OFormattedModel::onConnectedDbColumn : invalid property value !" ); - // das sollte im Constructor oder im read auf was richtiges gesetzt worden sein - - Any aFmtKey = m_xAggregateSet->getPropertyValue(PROPERTY_FORMATKEY); - if ( !(aFmtKey >>= nFormatKey ) ) - { // nobody gave us a format to use. So we examine the field we're bound to for a - // format key, and use it ourself, too - sal_Int32 nType = DataType::VARCHAR; - if (xField.is()) - { - aFmtKey = xField->getPropertyValue(PROPERTY_FORMATKEY); - xField->getPropertyValue(PROPERTY_FIELDTYPE) >>= nType ; - } - - Reference<XNumberFormatsSupplier> xSupplier = calcFormFormatsSupplier(); - DBG_ASSERT(xSupplier.is(), "OFormattedModel::onConnectedDbColumn : bound to a field but no parent with a formatter ? how this ?"); - if (xSupplier.is()) - { - m_bOriginalNumeric = getBOOL(getPropertyValue(PROPERTY_TREATASNUMERIC)); - - if (!aFmtKey.hasValue()) - { // we aren't bound to a field (or this field's format is invalid) - // -> determine the standard text (or numeric) format of the supplier - Reference<XNumberFormatTypes> xTypes(xSupplier->getNumberFormats(), UNO_QUERY); - if (xTypes.is()) - { - Locale aApplicationLocale = Application::GetSettings().GetUILocale(); - - if (m_bOriginalNumeric) - aFmtKey <<= (sal_Int32)xTypes->getStandardFormat(NumberFormat::NUMBER, aApplicationLocale); - else - aFmtKey <<= (sal_Int32)xTypes->getStandardFormat(NumberFormat::TEXT, aApplicationLocale); - } - } - - aSupplier >>= m_xOriginalFormatter; - m_xAggregateSet->setPropertyValue(PROPERTY_FORMATSSUPPLIER, makeAny(xSupplier)); - m_xAggregateSet->setPropertyValue(PROPERTY_FORMATKEY, aFmtKey); - - // das Numeric-Flag an mein gebundenes Feld anpassen - if (xField.is()) - { - m_bNumeric = sal_False; - switch (nType) - { - case DataType::BIT: - case DataType::BOOLEAN: - case DataType::TINYINT: - case DataType::SMALLINT: - case DataType::INTEGER: - case DataType::BIGINT: - case DataType::FLOAT: - case DataType::REAL: - case DataType::DOUBLE: - case DataType::NUMERIC: - case DataType::DECIMAL: - case DataType::DATE: - case DataType::TIME: - case DataType::TIMESTAMP: - m_bNumeric = sal_True; - break; - } - } - else - m_bNumeric = m_bOriginalNumeric; - - setPropertyValue(PROPERTY_TREATASNUMERIC, makeAny((sal_Bool)m_bNumeric)); - - OSL_VERIFY( aFmtKey >>= nFormatKey ); - } - } - } - - Reference<XNumberFormatsSupplier> xSupplier = calcFormatsSupplier(); - m_bNumeric = getBOOL( getPropertyValue( PROPERTY_TREATASNUMERIC ) ); - m_nKeyType = getNumberFormatType( xSupplier->getNumberFormats(), nFormatKey ); - xSupplier->getNumberFormatSettings()->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NullDate") ) ) >>= m_aNullDate; - - OEditBaseModel::onConnectedDbColumn( _rxForm ); -} - -//------------------------------------------------------------------------------ -void OFormattedModel::onDisconnectedDbColumn() -{ - OEditBaseModel::onDisconnectedDbColumn(); - if (m_xOriginalFormatter.is()) - { // unser aggregiertes Model hatte keinerlei Format-Informationen - m_xAggregateSet->setPropertyValue(PROPERTY_FORMATSSUPPLIER, makeAny(m_xOriginalFormatter)); - m_xAggregateSet->setPropertyValue(PROPERTY_FORMATKEY, Any()); - setPropertyValue(PROPERTY_TREATASNUMERIC, makeAny((sal_Bool)m_bOriginalNumeric)); - m_xOriginalFormatter = NULL; - } - - m_nFieldType = DataType::OTHER; - m_nKeyType = NumberFormat::UNDEFINED; - m_aNullDate = DBTypeConversion::getStandardDate(); -} - -//------------------------------------------------------------------------------ -void OFormattedModel::write(const Reference<XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OEditBaseModel::write(_rxOutStream); - _rxOutStream->writeShort(0x0003); - - DBG_ASSERT(m_xAggregateSet.is(), "OFormattedModel::write : have no aggregate !"); - - // mein Format (evtl. void) in ein persistentes Format bringen (der Supplier zusammen mit dem Key ist es zwar auch, - // aber deswegen muessen wir ja nicht gleich den ganzen Supplier speichern, das waere ein klein wenig Overhead ;) - - Reference<XNumberFormatsSupplier> xSupplier; - Any aFmtKey; - sal_Bool bVoidKey = sal_True; - if (m_xAggregateSet.is()) - { - Any aSupplier = m_xAggregateSet->getPropertyValue(PROPERTY_FORMATSSUPPLIER); - if (aSupplier.getValueType().getTypeClass() != TypeClass_VOID) - { - OSL_VERIFY( aSupplier >>= xSupplier ); - } - - aFmtKey = m_xAggregateSet->getPropertyValue(PROPERTY_FORMATKEY); - bVoidKey = (!xSupplier.is() || !aFmtKey.hasValue()) || (isLoaded() && m_xOriginalFormatter.is()); - // (kein Fomatter und/oder Key) oder (loaded und faked Formatter) - } - - _rxOutStream->writeBoolean(!bVoidKey); - if (!bVoidKey) - { - // aus dem FormatKey und dem Formatter persistente Angaben basteln - - Any aKey = m_xAggregateSet->getPropertyValue(PROPERTY_FORMATKEY); - sal_Int32 nKey = aKey.hasValue() ? getINT32(aKey) : 0; - - Reference<XNumberFormats> xFormats = xSupplier->getNumberFormats(); - - ::rtl::OUString sFormatDescription; - LanguageType eFormatLanguage = LANGUAGE_DONTKNOW; - - static const ::rtl::OUString s_aLocaleProp (RTL_CONSTASCII_USTRINGPARAM("Locale") ); - Reference<com::sun::star::beans::XPropertySet> xFormat = xFormats->getByKey(nKey); - if (hasProperty(s_aLocaleProp, xFormat)) - { - Any aLocale = xFormat->getPropertyValue(s_aLocaleProp); - DBG_ASSERT(isA(aLocale, static_cast<Locale*>(NULL)), "OFormattedModel::write : invalid language property !"); - if (isA(aLocale, static_cast<Locale*>(NULL))) - { - Locale* pLocale = (Locale*)aLocale.getValue(); - eFormatLanguage = MsLangId::convertLocaleToLanguage( *pLocale ); - } - } - - static const ::rtl::OUString s_aFormatStringProp (RTL_CONSTASCII_USTRINGPARAM("FormatString") ); - if (hasProperty(s_aFormatStringProp, xFormat)) - xFormat->getPropertyValue(s_aFormatStringProp) >>= sFormatDescription; - - _rxOutStream->writeUTF(sFormatDescription); - _rxOutStream->writeLong((sal_Int32)eFormatLanguage); - } - - // version 2 : write the properties common to all OEditBaseModels - writeCommonEditProperties(_rxOutStream); - - // version 3 : write the effective value property of the aggregate - // Due to a bug within the UnoControlFormattedFieldModel implementation (our default aggregate) this props value isn't correctly read - // and this can't be corrected without being incompatible. - // so we have our own handling. - - // and to be a little bit more compatible we make the following section skippable - { - Reference< XDataOutputStream > xOut(_rxOutStream, UNO_QUERY); - OStreamSection aDownCompat(xOut); - - // a sub version within the skippable block - _rxOutStream->writeShort(0x0000); - - // version 0: the effective value of the aggregate - Any aEffectiveValue; - if (m_xAggregateSet.is()) - { - try { aEffectiveValue = m_xAggregateSet->getPropertyValue(PROPERTY_EFFECTIVE_VALUE); } catch(Exception&) { } - } - - { - OStreamSection aDownCompat2(xOut); - switch (aEffectiveValue.getValueType().getTypeClass()) - { - case TypeClass_STRING: - _rxOutStream->writeShort(0x0000); - _rxOutStream->writeUTF(::comphelper::getString(aEffectiveValue)); - break; - case TypeClass_DOUBLE: - _rxOutStream->writeShort(0x0001); - _rxOutStream->writeDouble(::comphelper::getDouble(aEffectiveValue)); - break; - default: // void and all unknown states - DBG_ASSERT(!aEffectiveValue.hasValue(), "FmXFormattedModel::write : unknown property value type !"); - _rxOutStream->writeShort(0x0002); - break; - } - } - } -} - -//------------------------------------------------------------------------------ -void OFormattedModel::read(const Reference<XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OEditBaseModel::read(_rxInStream); - sal_uInt16 nVersion = _rxInStream->readShort(); - - Reference<XNumberFormatsSupplier> xSupplier; - sal_Int32 nKey = -1; - switch (nVersion) - { - case 0x0001 : - case 0x0002 : - case 0x0003 : - { - sal_Bool bNonVoidKey = _rxInStream->readBoolean(); - if (bNonVoidKey) - { - // den String und die Language lesen .... - ::rtl::OUString sFormatDescription = _rxInStream->readUTF(); - LanguageType eDescriptionLanguage = (LanguageType)_rxInStream->readLong(); - - // und daraus von einem Formatter zu einem Key zusammenwuerfeln lassen ... - xSupplier = calcFormatsSupplier(); - // calcFormatsSupplier nimmt erst den vom Model, dann einen von der starform, dann einen ganz neuen .... - Reference<XNumberFormats> xFormats = xSupplier->getNumberFormats(); - - if (xFormats.is()) - { - Locale aDescriptionLanguage( MsLangId::convertLanguageToLocale(eDescriptionLanguage)); - - nKey = xFormats->queryKey(sFormatDescription, aDescriptionLanguage, sal_False); - if (nKey == (sal_Int32)-1) - { // noch nicht vorhanden in meinem Formatter ... - nKey = xFormats->addNew(sFormatDescription, aDescriptionLanguage); - } - } - } - if ((nVersion == 0x0002) || (nVersion == 0x0003)) - readCommonEditProperties(_rxInStream); - - if (nVersion == 0x0003) - { // since version 3 there is a "skippable" block at this position - Reference< XDataInputStream > xIn(_rxInStream, UNO_QUERY); - OStreamSection aDownCompat(xIn); - - sal_Int16 nSubVersion = _rxInStream->readShort(); - (void)nSubVersion; - - // version 0 and higher : the "effective value" property - Any aEffectiveValue; - { - OStreamSection aDownCompat2(xIn); - switch (_rxInStream->readShort()) - { - case 0: // String - aEffectiveValue <<= _rxInStream->readUTF(); - break; - case 1: // double - aEffectiveValue <<= (double)_rxInStream->readDouble(); - break; - case 2: - break; - case 3: - OSL_FAIL("FmXFormattedModel::read : unknown effective value type !"); - } - } - - // this property is only to be set if we have no control source : in all other cases the base class did a - // reset after it's read and this set the effective value to a default value - if ( m_xAggregateSet.is() && ( getControlSource().getLength() == 0 ) ) - { - try - { - m_xAggregateSet->setPropertyValue(PROPERTY_EFFECTIVE_VALUE, aEffectiveValue); - } - catch(Exception&) - { - } - } - } - } - break; - default : - OSL_FAIL("OFormattedModel::read : unknown version !"); - // dann bleibt das Format des aggregierten Sets, wie es bei der Erzeugung ist : void - defaultCommonEditProperties(); - break; - } - - if ((nKey != -1) && m_xAggregateSet.is()) - { - m_xAggregateSet->setPropertyValue(PROPERTY_FORMATSSUPPLIER, makeAny(xSupplier)); - m_xAggregateSet->setPropertyValue(PROPERTY_FORMATKEY, makeAny((sal_Int32)nKey)); - } - else - { - setPropertyToDefault(PROPERTY_FORMATSSUPPLIER); - setPropertyToDefault(PROPERTY_FORMATKEY); - } -} - -//------------------------------------------------------------------------------ -sal_uInt16 OFormattedModel::getPersistenceFlags() const -{ - return (OEditBaseModel::getPersistenceFlags() & ~PF_HANDLE_COMMON_PROPS); - // a) we do our own call to writeCommonEditProperties -} - -//------------------------------------------------------------------------------ -sal_Bool OFormattedModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) -{ - Any aControlValue( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) ); - if ( aControlValue != m_aSaveValue ) - { - // Leerstring + EmptyIsNull = void - if ( !aControlValue.hasValue() - || ( ( aControlValue.getValueType().getTypeClass() == TypeClass_STRING ) - && ( getString( aControlValue ).getLength() == 0 ) - && m_bEmptyIsNull - ) - ) - m_xColumnUpdate->updateNull(); - else - { - try - { - double f = 0.0; - if ( aControlValue.getValueType().getTypeClass() == TypeClass_DOUBLE || (aControlValue >>= f)) // #i110323 - { - DBTypeConversion::setValue( m_xColumnUpdate, m_aNullDate, getDouble( aControlValue ), m_nKeyType ); - } - else - { - DBG_ASSERT( aControlValue.getValueType().getTypeClass() == TypeClass_STRING, "OFormattedModel::commitControlValueToDbColumn: invalud value type !" ); - m_xColumnUpdate->updateString( getString( aControlValue ) ); - } - } - catch(Exception&) - { - return sal_False; - } - } - m_aSaveValue = aControlValue; - } - return sal_True; -} - -//------------------------------------------------------------------------------ -void OFormattedModel::onConnectedExternalValue( ) -{ - OEditBaseModel::onConnectedExternalValue(); - updateFormatterNullDate(); -} - -//------------------------------------------------------------------------------ -Any OFormattedModel::translateExternalValueToControlValue( const Any& _rExternalValue ) const -{ - Any aControlValue; - switch( _rExternalValue.getValueTypeClass() ) - { - case TypeClass_VOID: - break; - - case TypeClass_STRING: - aControlValue = _rExternalValue; - break; - - case TypeClass_BOOLEAN: - { - sal_Bool bExternalValue = sal_False; - _rExternalValue >>= bExternalValue; - aControlValue <<= (double)( bExternalValue ? 1 : 0 ); - } - break; - - default: - { - if ( _rExternalValue.getValueType().equals( ::getCppuType( static_cast< UNODate* >( NULL ) ) ) ) - { - UNODate aDate; - _rExternalValue >>= aDate; - aControlValue <<= DBTypeConversion::toDouble( aDate, m_aNullDate ); - } - else if ( _rExternalValue.getValueType().equals( ::getCppuType( static_cast< UNOTime* >( NULL ) ) ) ) - { - UNOTime aTime; - _rExternalValue >>= aTime; - aControlValue <<= DBTypeConversion::toDouble( aTime ); - } - else if ( _rExternalValue.getValueType().equals( ::getCppuType( static_cast< UNODateTime* >( NULL ) ) ) ) - { - UNODateTime aDateTime; - _rExternalValue >>= aDateTime; - aControlValue <<= DBTypeConversion::toDouble( aDateTime, m_aNullDate ); - } - else - { - OSL_ENSURE( _rExternalValue.getValueTypeClass() == TypeClass_DOUBLE, - "OFormattedModel::translateExternalValueToControlValue: don't know how to translate this type!" ); - double fValue = 0; - OSL_VERIFY( _rExternalValue >>= fValue ); - aControlValue <<= fValue; - } - } - } - - return aControlValue; -} - -//------------------------------------------------------------------------------ -Any OFormattedModel::translateControlValueToExternalValue( ) const -{ - OSL_PRECOND( hasExternalValueBinding(), - "OFormattedModel::translateControlValueToExternalValue: precondition not met!" ); - - Any aControlValue( getControlValue() ); - if ( !aControlValue.hasValue() ) - return aControlValue; - - Any aExternalValue; - - // translate into the the external value type - Type aExternalValueType( getExternalValueType() ); - switch ( aExternalValueType.getTypeClass() ) - { - case TypeClass_STRING: - { - ::rtl::OUString sString; - if ( aControlValue >>= sString ) - { - aExternalValue <<= sString; - break; - } - } - // NO break here! - - case TypeClass_BOOLEAN: - { - double fValue = 0; - OSL_VERIFY( aControlValue >>= fValue ); - // if this asserts ... well, the somebody set the TreatAsNumeric property to false, - // and the control value is a string. This implies some weird misconfiguration - // of the FormattedModel, so we won't care for it for the moment. - aExternalValue <<= (sal_Bool)( fValue ? sal_True : sal_False ); - } - break; - - default: - { - double fValue = 0; - OSL_VERIFY( aControlValue >>= fValue ); - // if this asserts ... well, the somebody set the TreatAsNumeric property to false, - // and the control value is a string. This implies some weird misconfiguration - // of the FormattedModel, so we won't care for it for the moment. - - if ( aExternalValueType.equals( ::getCppuType( static_cast< UNODate* >( NULL ) ) ) ) - { - aExternalValue <<= DBTypeConversion::toDate( fValue, m_aNullDate ); - } - else if ( aExternalValueType.equals( ::getCppuType( static_cast< UNOTime* >( NULL ) ) ) ) - { - aExternalValue <<= DBTypeConversion::toTime( fValue ); - } - else if ( aExternalValueType.equals( ::getCppuType( static_cast< UNODateTime* >( NULL ) ) ) ) - { - aExternalValue <<= DBTypeConversion::toDateTime( fValue, m_aNullDate ); - } - else - { - OSL_ENSURE( aExternalValueType.equals( ::getCppuType( static_cast< double* >( NULL ) ) ), - "OFormattedModel::translateControlValueToExternalValue: don't know how to translate this type!" ); - aExternalValue <<= fValue; - } - } - break; - } - return aExternalValue; -} - -//------------------------------------------------------------------------------ -Any OFormattedModel::translateDbColumnToControlValue() -{ - if ( m_bNumeric ) - m_aSaveValue <<= DBTypeConversion::getValue( m_xColumn, m_aNullDate ); // #100056# OJ - else - m_aSaveValue <<= m_xColumn->getString(); - - if ( m_xColumn->wasNull() ) - m_aSaveValue.clear(); - - return m_aSaveValue; -} - -// ----------------------------------------------------------------------------- -Sequence< Type > OFormattedModel::getSupportedBindingTypes() -{ - ::std::list< Type > aTypes; - aTypes.push_back( ::getCppuType( static_cast< double* >( NULL ) ) ); - - switch ( m_nKeyType & ~NumberFormat::DEFINED ) - { - case NumberFormat::DATE: - aTypes.push_front(::getCppuType( static_cast< UNODate* >( NULL ) ) ); - break; - case NumberFormat::TIME: - aTypes.push_front(::getCppuType( static_cast< UNOTime* >( NULL ) ) ); - break; - case NumberFormat::DATETIME: - aTypes.push_front(::getCppuType( static_cast< UNODateTime* >( NULL ) ) ); - break; - case NumberFormat::TEXT: - aTypes.push_front(::getCppuType( static_cast< ::rtl::OUString* >( NULL ) ) ); - break; - case NumberFormat::LOGICAL: - aTypes.push_front(::getCppuType( static_cast< sal_Bool* >( NULL ) ) ); - break; - } - - Sequence< Type > aTypesRet( aTypes.size() ); - ::std::copy( aTypes.begin(), aTypes.end(), aTypesRet.getArray() ); - return aTypesRet; -} - -//------------------------------------------------------------------------------ -Any OFormattedModel::getDefaultForReset() const -{ - return m_xAggregateSet->getPropertyValue( PROPERTY_EFFECTIVE_DEFAULT ); -} - -//------------------------------------------------------------------------------ -void OFormattedModel::resetNoBroadcast() -{ - OEditBaseModel::resetNoBroadcast(); - m_aSaveValue.clear(); -} - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/FormattedField.hxx b/forms/source/component/FormattedField.hxx deleted file mode 100644 index a2cdf4285..000000000 --- a/forms/source/component/FormattedField.hxx +++ /dev/null @@ -1,200 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_FORMATTEDFIELD_HXX_ -#define _FORMS_FORMATTEDFIELD_HXX_ - -#include "EditBase.hxx" -#include <comphelper/propmultiplex.hxx> -#include <cppuhelper/implbase1.hxx> -#include "errorbroadcaster.hxx" - -//......................................................................... -namespace frm -{ - - //================================================================== - //= OFormattedModel - //================================================================== - - class OFormattedModel - :public OEditBaseModel - ,public OErrorBroadcaster - { - // das Original, falls ich die Format-Properties meines aggregierten Models gefaket, d.h. von dem Feld, an das - // ich gebunden bin, weitergereicht habe (nur gueltig wenn loaded) - ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier> m_xOriginalFormatter; - ::com::sun::star::util::Date m_aNullDate; - ::com::sun::star::uno::Any m_aSaveValue; - - sal_Int32 m_nFieldType; - sal_Int16 m_nKeyType; - sal_Bool m_bOriginalNumeric : 1, - m_bNumeric : 1; // analog fuer TreatAsNumeric-Property - - protected: - ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier> calcDefaultFormatsSupplier() const; - ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier> calcFormFormatsSupplier() const; - ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier> calcFormatsSupplier() const; - - DECLARE_DEFAULT_LEAF_XTOR( OFormattedModel ); - - friend class OFormattedFieldWrapper; - - protected: - // XInterface - DECLARE_UNO3_AGG_DEFAULTS( OFormattedModel, OEditBaseModel ); - - // XTypeProvider - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - - // XAggregation - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // XServiceInfo - IMPLEMENTATION_NAME(OFormattedModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // XPersistObject - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - - // XPropertySet - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, - sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception); - - // XLoadListener - virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& rEvent) throw ( ::com::sun::star::uno::RuntimeException); - - // XPropertyState - void setPropertyToDefaultByHandle(sal_Int32 nHandle); - ::com::sun::star::uno::Any getPropertyDefaultByHandle(sal_Int32 nHandle) const; - - void SAL_CALL setPropertyToDefault(const ::rtl::OUString& aPropertyName) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); - ::com::sun::star::uno::Any SAL_CALL getPropertyDefault( const ::rtl::OUString& aPropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - virtual void describeAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps - ) const; - - // XPropertyChangeListener - virtual void _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException); - - // prevent method hiding - using OEditBaseModel::disposing; - using OEditBaseModel::getFastPropertyValue; - - protected: - virtual sal_uInt16 getPersistenceFlags() const; - // as we have an own version handling for persistence - - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > - getSupportedBindingTypes(); - virtual ::com::sun::star::uno::Any - translateExternalValueToControlValue( const ::com::sun::star::uno::Any& _rExternalValue ) const; - virtual ::com::sun::star::uno::Any - translateControlValueToExternalValue( ) const; - virtual void onConnectedExternalValue( ); - - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - virtual void resetNoBroadcast(); - - virtual void onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm ); - virtual void onDisconnectedDbColumn(); - - private: - DECLARE_XCLONEABLE(); - - void implConstruct(); - - void updateFormatterNullDate(); - }; - - //================================================================== - //= OFormattedControl - //================================================================== - typedef ::cppu::ImplHelper1< ::com::sun::star::awt::XKeyListener> OFormattedControl_BASE; - class OFormattedControl : public OBoundControl - ,public OFormattedControl_BASE - { - sal_uInt32 m_nKeyEvent; - - public: - OFormattedControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - virtual ~OFormattedControl(); - - DECLARE_UNO3_AGG_DEFAULTS(OFormattedControl, OBoundControl); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - - // ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(OFormattedControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // ::com::sun::star::lang::XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException); - - // ::com::sun::star::awt::XKeyListener - virtual void SAL_CALL keyPressed(const ::com::sun::star::awt::KeyEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL keyReleased(const ::com::sun::star::awt::KeyEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - - // ::com::sun::star::awt::XControl - virtual void SAL_CALL setDesignMode(sal_Bool bOn) throw ( ::com::sun::star::uno::RuntimeException); - - // disambiguation - using OBoundControl::disposing; - - private: - DECL_LINK( OnKeyPressed, void* ); - }; - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_FORMATTEDFIELD_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/FormattedFieldWrapper.cxx b/forms/source/component/FormattedFieldWrapper.cxx deleted file mode 100644 index f027e22ad..000000000 --- a/forms/source/component/FormattedFieldWrapper.cxx +++ /dev/null @@ -1,400 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "FormattedFieldWrapper.hxx" -#include "Edit.hxx" -#include "FormattedField.hxx" -#include <tools/debug.hxx> -#include "EditBase.hxx" -#include "services.hxx" -#include <connectivity/dbtools.hxx> -#include <vcl/svapp.hxx> - -//......................................................................... -namespace frm -{ -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; - -//================================================================== -// OFormattedFieldWrapper -//================================================================== -DBG_NAME(OFormattedFieldWrapper) -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OFormattedFieldWrapper_CreateInstance_ForceFormatted(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OFormattedFieldWrapper(_rxFactory, sal_True)); -} - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OFormattedFieldWrapper_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OFormattedFieldWrapper(_rxFactory, sal_False)); -} - -//------------------------------------------------------------------ -OFormattedFieldWrapper::OFormattedFieldWrapper(const Reference<XMultiServiceFactory>& _rxFactory, sal_Bool _bActAsFormatted) - :m_xServiceFactory(_rxFactory) - ,m_pEditPart(NULL) -{ - DBG_CTOR(OFormattedFieldWrapper, NULL); - - if (_bActAsFormatted) - { - increment(m_refCount); - { - // instantiate an FormattedModel - InterfaceRef xFormattedModel; - // (instantiate it directly ..., as the OFormattedModel isn't registered for any service names anymore) - OFormattedModel* pModel = new OFormattedModel(m_xServiceFactory); - query_interface(static_cast<XWeak*>(pModel), xFormattedModel); - - m_xAggregate = Reference<XAggregation> (xFormattedModel, UNO_QUERY); - DBG_ASSERT(m_xAggregate.is(), "OFormattedFieldWrapper::OFormattedFieldWrapper : the OFormattedModel didn't have an XAggregation interface !"); - - // _before_ setting the delegator, give it to the member references - query_interface(xFormattedModel, m_xFormattedPart); - m_pEditPart = new OEditModel(m_xServiceFactory); - m_pEditPart->acquire(); - } - if (m_xAggregate.is()) - { // has to be in it's own block because of the temporary variable created by *this - m_xAggregate->setDelegator(static_cast<XWeak*>(this)); - } - decrement(m_refCount); - } -} - -//------------------------------------------------------------------ -OFormattedFieldWrapper::OFormattedFieldWrapper( const OFormattedFieldWrapper* _pCloneSource ) - :m_xServiceFactory( _pCloneSource->m_xServiceFactory ) - ,m_pEditPart( NULL ) -{ - Reference< XCloneable > xCloneAccess; - query_aggregation( _pCloneSource->m_xAggregate, xCloneAccess ); - - // clone the aggregate - if ( xCloneAccess.is() ) - { - increment( m_refCount ); - { - Reference< XCloneable > xClone = xCloneAccess->createClone(); - m_xAggregate = Reference< XAggregation >( xClone, UNO_QUERY ); - DBG_ASSERT(m_xAggregate.is(), "OFormattedFieldWrapper::OFormattedFieldWrapper : invalid aggregate clone!"); - - query_interface( Reference< XInterface >( xClone.get() ), m_xFormattedPart ); - - if ( _pCloneSource->m_pEditPart ) - { - m_pEditPart = new OEditModel( _pCloneSource->m_pEditPart, _pCloneSource->m_xServiceFactory ); - m_pEditPart->acquire(); - } - } - if ( m_xAggregate.is() ) - { // has to be in it's own block because of the temporary variable created by *this - m_xAggregate->setDelegator( static_cast< XWeak* >( this ) ); - } - decrement( m_refCount ); - } - else - { // the clone source does not yet have an aggregate -> we don't yet need one, too - } -} - -//------------------------------------------------------------------ -OFormattedFieldWrapper::~OFormattedFieldWrapper() -{ - // release the aggregated object (if any) - if (m_xAggregate.is()) - m_xAggregate->setDelegator(InterfaceRef ()); - - if (m_pEditPart) - m_pEditPart->release(); - - DBG_DTOR(OFormattedFieldWrapper, NULL); -} - -//------------------------------------------------------------------ -Any SAL_CALL OFormattedFieldWrapper::queryAggregation(const Type& _rType) throw (RuntimeException) -{ - Any aReturn; - - if (_rType.equals( ::getCppuType( static_cast< Reference< XTypeProvider >* >(NULL) ) ) ) - { // a XTypeProvider interface needs a working aggregate - we don't want to give the type provider - // of our base class (OFormattedFieldWrapper_Base) to the caller as it supplies nearly nothing - ensureAggregate(); - if (m_xAggregate.is()) - aReturn = m_xAggregate->queryAggregation(_rType); - } - - if (!aReturn.hasValue()) - { - aReturn = OFormattedFieldWrapper_Base::queryAggregation(_rType); - - if ((_rType.equals( ::getCppuType( static_cast< Reference< XServiceInfo >* >(NULL) ) ) ) && aReturn.hasValue()) - { // somebody requested an XServiceInfo interface and our base class provided it - // check our aggregate if it has one, too - ensureAggregate(); - } - - if (!aReturn.hasValue()) - { - aReturn = ::cppu::queryInterface( _rType, - static_cast< XPersistObject* >( this ), - static_cast< XCloneable* >( this ) - ); - - if (!aReturn.hasValue()) - { - // somebody requests an interface other than the basics (XInterface) and other than - // the two we can supply without an aggregate. So ensure - // the aggregate exists. - ensureAggregate(); - if (m_xAggregate.is()) - aReturn = m_xAggregate->queryAggregation(_rType); - } - } - } - - return aReturn; -} - -//------------------------------------------------------------------ -::rtl::OUString SAL_CALL OFormattedFieldWrapper::getServiceName() throw(RuntimeException) -{ - // return the old compatibility name for an EditModel - return FRM_COMPONENT_EDIT; -} - -//------------------------------------------------------------------ -::rtl::OUString SAL_CALL OFormattedFieldWrapper::getImplementationName( ) throw (RuntimeException) -{ - return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.forms.OFormattedFieldWrapper") ); -} - -//------------------------------------------------------------------ -sal_Bool SAL_CALL OFormattedFieldWrapper::supportsService( const ::rtl::OUString& _rServiceName ) throw (RuntimeException) -{ - DBG_ASSERT(m_xAggregate.is(), "OFormattedFieldWrapper::supportsService: should never have made it 'til here without an aggregate!"); - Reference< XServiceInfo > xSI; - m_xAggregate->queryAggregation(::getCppuType(static_cast< Reference< XServiceInfo >* >(NULL))) >>= xSI; - return xSI->supportsService(_rServiceName); -} - -//------------------------------------------------------------------ -Sequence< ::rtl::OUString > SAL_CALL OFormattedFieldWrapper::getSupportedServiceNames( ) throw (RuntimeException) -{ - DBG_ASSERT(m_xAggregate.is(), "OFormattedFieldWrapper::getSupportedServiceNames: should never have made it 'til here without an aggregate!"); - Reference< XServiceInfo > xSI; - m_xAggregate->queryAggregation(::getCppuType(static_cast< Reference< XServiceInfo >* >(NULL))) >>= xSI; - return xSI->getSupportedServiceNames(); -} - -//------------------------------------------------------------------ -void SAL_CALL OFormattedFieldWrapper::write(const Reference<XObjectOutputStream>& _rxOutStream) throw( IOException, RuntimeException ) -{ - // can't write myself - ensureAggregate(); - - // if we act as real edit field, we can simple forward this write request - if (!m_xFormattedPart.is()) - { - Reference<XPersistObject> xAggregatePersistence; - query_aggregation(m_xAggregate, xAggregatePersistence); - DBG_ASSERT(xAggregatePersistence.is(), "OFormattedFieldWrapper::write : don't know how to handle this : can't write !"); - // oops ... We gave an XPersistObject interface to the caller but now we aren't an XPersistObject ... - if (xAggregatePersistence.is()) - xAggregatePersistence->write(_rxOutStream); - return; - } - - // else we have to write an edit part first - DBG_ASSERT(m_pEditPart, "OFormattedFieldWrapper::write : formatted part without edit part ?"); - if ( !m_pEditPart ) - throw RuntimeException( ::rtl::OUString(), *this ); - - // for this we transfer the current props of the formatted part to the edit part - Reference<XPropertySet> xFormatProps(m_xFormattedPart, UNO_QUERY); - Reference<XPropertySet> xEditProps; - query_interface(static_cast<XWeak*>(m_pEditPart), xEditProps); - - Locale aAppLanguage = Application::GetSettings().GetUILocale(); - dbtools::TransferFormComponentProperties(xFormatProps, xEditProps, aAppLanguage); - - // then write the edit part, after switching to "fake mode" - m_pEditPart->enableFormattedWriteFake(); - m_pEditPart->write(_rxOutStream); - m_pEditPart->disableFormattedWriteFake(); - - // and finally write the formatted part we're really interested in - m_xFormattedPart->write(_rxOutStream); -} - -//------------------------------------------------------------------ -void SAL_CALL OFormattedFieldWrapper::read(const Reference<XObjectInputStream>& _rxInStream) throw( IOException, RuntimeException ) -{ - if (m_xAggregate.is()) - { // we alread did a decision if we're an EditModel or a FormattedModel - - // if we act as formatted, we have to read the edit part first - if (m_xFormattedPart.is()) - { - // two possible cases: - // a) the stuff was written by a version which didn't work with an Edit header (all intermediate - // versions >5.1 && <=568) - // b) it was written by a version using edit headers - // as we can distinguish a) from b) only after we have read the edit part, we need to remember the - // position - Reference<XMarkableStream> xInMarkable(_rxInStream, UNO_QUERY); - DBG_ASSERT(xInMarkable.is(), "OFormattedFieldWrapper::read : can only work with markable streams !"); - sal_Int32 nBeforeEditPart = xInMarkable->createMark(); - - m_pEditPart->read(_rxInStream); - // this only works because an edit model can read the stuff written by a formatted model (maybe with - // some assertions) , but not vice versa - if (!m_pEditPart->lastReadWasFormattedFake()) - { // case a), written with a version without the edit part fake, so seek to the start position, again - xInMarkable->jumpToMark(nBeforeEditPart); - } - xInMarkable->deleteMark(nBeforeEditPart); - } - - Reference<XPersistObject> xAggregatePersistence; - query_aggregation(m_xAggregate, xAggregatePersistence); - DBG_ASSERT(xAggregatePersistence.is(), "OFormattedFieldWrapper::read : don't know how to handle this : can't read !"); - // oops ... We gave an XPersistObject interface to the caller but now we aren't an XPersistObject ... - - if (xAggregatePersistence.is()) - xAggregatePersistence->read(_rxInStream); - return; - } - - // we have to decide from the data within the stream whether we should be an EditModel or a FormattedModel - OEditBaseModel* pNewAggregate = NULL; - - // let an OEditModel do the reading - OEditModel* pBasicReader = new OEditModel(m_xServiceFactory); - Reference< XInterface > xHoldBasicReaderAlive( *pBasicReader ); - pBasicReader->read(_rxInStream); - - // was it really an edit model ? - if (!pBasicReader->lastReadWasFormattedFake()) - // yes -> all fine - pNewAggregate = pBasicReader; - else - { // no -> substitute it with a formatted model - - // let the formmatted model do the reading - OFormattedModel* pFormattedReader = new OFormattedModel(m_xServiceFactory); - Reference< XInterface > xHoldAliveWhileRead( *pFormattedReader ); - pFormattedReader->read(_rxInStream); - - // for the next write (if any) : the FormattedModel and the EditModel parts - query_interface(static_cast<XWeak*>(pFormattedReader), m_xFormattedPart); - m_pEditPart = pBasicReader; - m_pEditPart->acquire(); - - // aggregate the formatted part below - pNewAggregate = pFormattedReader; - } - - // do the aggregation - increment(m_refCount); - { - query_interface(static_cast<XWeak*>(pNewAggregate), m_xAggregate); - DBG_ASSERT(m_xAggregate.is(), "OFormattedFieldWrapper::read : the OEditModel didn't have an XAggregation interface !"); - } - if (m_xAggregate.is()) - { // has to be in it's own block because of the temporary variable created by *this - m_xAggregate->setDelegator(static_cast<XWeak*>(this)); - } - decrement(m_refCount); -} - -//------------------------------------------------------------------ -Reference< XCloneable > SAL_CALL OFormattedFieldWrapper::createClone( ) throw (RuntimeException) -{ - ensureAggregate(); - - return new OFormattedFieldWrapper( this ); -} - -//------------------------------------------------------------------ -void OFormattedFieldWrapper::ensureAggregate() -{ - if (m_xAggregate.is()) - return; - - increment(m_refCount); - { - // instantiate an EditModel (the only place where we are allowed to decide that we're an FormattedModel - // is in ::read) - InterfaceRef xEditModel = m_xServiceFactory->createInstance(FRM_SUN_COMPONENT_TEXTFIELD); - if (!xEditModel.is()) - { - // arghhh ... instantiate it directly ... it's dirty, but we really need this aggregate - OEditModel* pModel = new OEditModel(m_xServiceFactory); - query_interface(static_cast<XWeak*>(pModel), xEditModel); - } - - m_xAggregate = Reference<XAggregation> (xEditModel, UNO_QUERY); - DBG_ASSERT(m_xAggregate.is(), "OFormattedFieldWrapper::ensureAggregate : the OEditModel didn't have an XAggregation interface !"); - - { - Reference< XServiceInfo > xSI(m_xAggregate, UNO_QUERY); - if (!xSI.is()) - { - OSL_FAIL("OFormattedFieldWrapper::ensureAggregate: the aggregate has no XServiceInfo!"); - m_xAggregate.clear(); - } - } - } - if (m_xAggregate.is()) - { // has to be in it's own block because of the temporary variable created by *this - m_xAggregate->setDelegator(static_cast<XWeak*>(this)); - } - decrement(m_refCount); -} - -//......................................................................... -} -//......................................................................... - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/FormattedFieldWrapper.hxx b/forms/source/component/FormattedFieldWrapper.hxx deleted file mode 100644 index 42f861d30..000000000 --- a/forms/source/component/FormattedFieldWrapper.hxx +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_FORMATTED_FIELD_WRAPPER_HXX_ -#define _FRM_FORMATTED_FIELD_WRAPPER_HXX_ - -#include "FormComponent.hxx" -#include <cppuhelper/implbase3.hxx> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/util/XCloneable.hpp> - -//......................................................................... -namespace frm -{ - -class OEditModel; -//================================================================== -//= OFormattedFieldWrapper -//================================================================== -typedef ::cppu::WeakAggImplHelper3 < ::com::sun::star::io::XPersistObject - , ::com::sun::star::lang::XServiceInfo - , ::com::sun::star::util::XCloneable - > OFormattedFieldWrapper_Base; - -class OFormattedFieldWrapper : public OFormattedFieldWrapper_Base -{ - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory> m_xServiceFactory; - -protected: - ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation> m_xAggregate; - - OEditModel* m_pEditPart; - // if we act as formatted this is used to write the EditModel part - ::com::sun::star::uno::Reference< ::com::sun::star::io::XPersistObject> m_xFormattedPart; - // if we act as formatted, this is the PersistObject interface of our aggregate, used - // to read and write the FormattedModel part - - OFormattedFieldWrapper(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, sal_Bool _bActAsFormatted); - // if _bActAsFormatted is sal_False, the state is undetermined until somebody calls ::read or does - // anything which requires a living aggregate - OFormattedFieldWrapper( const OFormattedFieldWrapper* _pCloneSource ); - virtual ~OFormattedFieldWrapper(); - - friend InterfaceRef SAL_CALL OFormattedFieldWrapper_CreateInstance_ForceFormatted(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - friend InterfaceRef SAL_CALL OFormattedFieldWrapper_CreateInstance(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - -public: - // UNO - DECLARE_UNO3_AGG_DEFAULTS(OFormattedFieldWrapper, OWeakAggObject); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - // XServiceInfo - virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // XCloneable - virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException); - -protected: - /// ensure we're in a defined state, which means a FormattedModel _OR_ an EditModel - void ensureAggregate(); -}; - -//......................................................................... -} -//......................................................................... - -#endif // _FRM_FORMATTED_FIELD_WRAPPER_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/FormsCollection.cxx b/forms/source/component/FormsCollection.cxx deleted file mode 100644 index c2152a28d..000000000 --- a/forms/source/component/FormsCollection.cxx +++ /dev/null @@ -1,188 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "FormsCollection.hxx" -#include "services.hxx" -#include <comphelper/sequence.hxx> -#include <tools/debug.hxx> -#include <com/sun/star/form/XForm.hpp> -#include <rtl/logfile.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::util; - -//------------------------------------------------------------------ -DBG_NAME(OFormsCollection) -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OFormsCollection_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OFormsCollection(_rxFactory)); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OFormsCollection::getServiceName() throw(RuntimeException) -{ - return FRM_SUN_FORMS_COLLECTION; -} - -//------------------------------------------------------------------------------ -Sequence< sal_Int8 > SAL_CALL OFormsCollection::getImplementationId( ) throw(RuntimeException) -{ - return OImplementationIds::getImplementationId(getTypes()); -} - -//------------------------------------------------------------------------------ -Sequence<Type> SAL_CALL OFormsCollection::getTypes() throw(RuntimeException) -{ - return concatSequences(OInterfaceContainer::getTypes(), FormsCollectionComponentBase::getTypes(), OFormsCollection_BASE::getTypes()); -} - -//------------------------------------------------------------------ -OFormsCollection::OFormsCollection(const Reference<XMultiServiceFactory>& _rxFactory) - :FormsCollectionComponentBase( m_aMutex ) - ,OInterfaceContainer( _rxFactory, m_aMutex, XForm::static_type() ) - ,OFormsCollection_BASE() -{ - DBG_CTOR(OFormsCollection, NULL); -} - -//------------------------------------------------------------------------------ -OFormsCollection::OFormsCollection( const OFormsCollection& _cloneSource ) - :FormsCollectionComponentBase( m_aMutex ) - ,OInterfaceContainer( m_aMutex, _cloneSource ) - ,OFormsCollection_BASE() -{ - DBG_CTOR( OFormsCollection, NULL ); -} - -//------------------------------------------------------------------------------ -OFormsCollection::~OFormsCollection() -{ - DBG_DTOR(OFormsCollection, NULL); - if (!FormsCollectionComponentBase::rBHelper.bDisposed) - { - acquire(); - dispose(); - } -} - -//------------------------------------------------------------------------------ -Any SAL_CALL OFormsCollection::queryAggregation(const Type& _rType) throw(RuntimeException) -{ - Any aReturn = OFormsCollection_BASE::queryInterface(_rType); - if (!aReturn.hasValue()) - { - aReturn = OInterfaceContainer::queryInterface(_rType); - - if (!aReturn.hasValue()) - aReturn = FormsCollectionComponentBase::queryAggregation(_rType); - } - - return aReturn; -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OFormsCollection::getImplementationName() throw(RuntimeException) -{ - return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.forms.OFormsCollection") ); -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OFormsCollection::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException) -{ - Sequence<rtl::OUString> aSupported = getSupportedServiceNames(); - const rtl::OUString* pSupported = aSupported.getConstArray(); - for (sal_Int32 i=0; i<aSupported.getLength(); ++i, ++pSupported) - if (pSupported->equals(_rServiceName)) - return sal_True; - return sal_False; -} - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OFormsCollection::getSupportedServiceNames() throw(RuntimeException) -{ - StringSequence aReturn(2); - - aReturn.getArray()[0] = FRM_SUN_FORMS_COLLECTION; - aReturn.getArray()[1] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.FormComponents") ); - - return aReturn; -} - -// XCloneable -//------------------------------------------------------------------------------ -Reference< XCloneable > SAL_CALL OFormsCollection::createClone( ) throw (RuntimeException) -{ - OFormsCollection* pClone = new OFormsCollection( *this ); - osl_incrementInterlockedCount( &pClone->m_refCount ); - pClone->clonedFrom( *this ); - osl_decrementInterlockedCount( &pClone->m_refCount ); - return pClone; -} - -// OComponentHelper -//------------------------------------------------------------------------------ -void OFormsCollection::disposing() -{ - { - RTL_LOGFILE_CONTEXT( aLogger, "forms::OFormsCollection::disposing" ); - OInterfaceContainer::disposing(); - } - FormsCollectionComponentBase::disposing(); - m_xParent = NULL; -} - -//XChild -//------------------------------------------------------------------------------ -void OFormsCollection::setParent(const InterfaceRef& Parent) throw( NoSupportException, RuntimeException ) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - m_xParent = Parent; -} - -//------------------------------------------------------------------------------ -InterfaceRef OFormsCollection::getParent() throw( RuntimeException ) -{ - return m_xParent; -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/FormsCollection.hxx b/forms/source/component/FormsCollection.hxx deleted file mode 100644 index 8a9ef988a..000000000 --- a/forms/source/component/FormsCollection.hxx +++ /dev/null @@ -1,102 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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 "InterfaceContainer.hxx" -#include "ids.hxx" -#include <cppuhelper/component.hxx> -#include <cppuhelper/implbase2.hxx> -#include <comphelper/uno3.hxx> -#include <com/sun/star/lang/XServiceInfo.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -// OFormsCollection -// Implementiert den UNO-Container fuer Formulare -// enthaelt alle zugeordneten Forms -// dieses Container kann selbst den Context fuer Formulare darstellen -// oder aussen einen Context uebergeben bekommen -//================================================================== -typedef ::cppu::OComponentHelper FormsCollectionComponentBase; -typedef ::cppu::ImplHelper2< ::com::sun::star::container::XChild - ,::com::sun::star::lang::XServiceInfo > OFormsCollection_BASE; - - // else MSVC kills itself on some statements -class OFormsCollection - :public FormsCollectionComponentBase - ,public OInterfaceContainer - ,public OFormsCollection_BASE -{ - ::osl::Mutex m_aMutex; - OImplementationIdsRef m_aHoldIdHelper; - ::comphelper::InterfaceRef m_xParent; // Parent - -public: - OFormsCollection(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - OFormsCollection( const OFormsCollection& _cloneSource ); - virtual ~OFormsCollection(); - -public: - DECLARE_UNO3_AGG_DEFAULTS(OFormsCollection, FormsCollectionComponentBase); - - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - // XTypeProvider - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); - - // XServiceInfo - virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); - virtual StringSequence SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); - - // XCloneable - virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // ::com::sun::star::container::XChild - virtual ::comphelper::InterfaceRef SAL_CALL getParent() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setParent(const ::comphelper::InterfaceRef& Parent) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); - - // prevent method hiding - using OInterfaceContainer::disposing; -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Grid.cxx b/forms/source/component/Grid.cxx deleted file mode 100644 index 3b68a88a0..000000000 --- a/forms/source/component/Grid.cxx +++ /dev/null @@ -1,1165 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "Columns.hxx" -#include "findpos.hxx" -#include "Grid.hxx" -#include "property.hrc" -#include "property.hxx" -#include "services.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/form/FormComponentType.hpp> -#include <com/sun/star/form/XForm.hpp> -#include <com/sun/star/form/XLoadable.hpp> -#include <com/sun/star/text/WritingMode2.hpp> -/** === end UNO includes === **/ - -#include <comphelper/basicio.hxx> -#include <comphelper/container.hxx> -#include <comphelper/extract.hxx> -#include <cppuhelper/queryinterface.hxx> -#include <toolkit/helper/vclunohelper.hxx> -#include <vcl/svapp.hxx> - -using namespace ::com::sun::star::uno; - -//......................................................................... -namespace frm -{ -//......................................................................... -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::view; - -namespace WritingMode2 = ::com::sun::star::text::WritingMode2; - -const sal_uInt16 ROWHEIGHT = 0x0001; -const sal_uInt16 FONTTYPE = 0x0002; -const sal_uInt16 FONTSIZE = 0x0004; -const sal_uInt16 FONTATTRIBS = 0x0008; -const sal_uInt16 TABSTOP = 0x0010; -const sal_uInt16 TEXTCOLOR = 0x0020; -const sal_uInt16 FONTDESCRIPTOR = 0x0040; -const sal_uInt16 RECORDMARKER = 0x0080; -const sal_uInt16 BACKGROUNDCOLOR = 0x0100; - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OGridControlModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OGridControlModel(_rxFactory)); -} - -DBG_NAME(OGridControlModel); -//------------------------------------------------------------------ -OGridControlModel::OGridControlModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OControlModel(_rxFactory, ::rtl::OUString()) - ,OInterfaceContainer(_rxFactory, m_aMutex, ::getCppuType(static_cast<Reference<XPropertySet>*>(NULL))) - ,OErrorBroadcaster( OComponentHelper::rBHelper ) - ,FontControlModel( false ) - ,m_aSelectListeners(m_aMutex) - ,m_aResetListeners(m_aMutex) - ,m_aRowSetChangeListeners(m_aMutex) - ,m_aDefaultControl( FRM_SUN_CONTROL_GRIDCONTROL ) - ,m_nBorder(1) - ,m_nWritingMode( WritingMode2::CONTEXT ) - ,m_nContextWritingMode( WritingMode2::CONTEXT ) - ,m_bEnableVisible(sal_True) - ,m_bEnable(sal_True) - ,m_bNavigation(sal_True) - ,m_bRecordMarker(sal_True) - ,m_bPrintable(sal_True) - ,m_bAlwaysShowCursor(sal_False) - ,m_bDisplaySynchron(sal_True) -{ - DBG_CTOR(OGridControlModel,NULL); - - m_nClassId = FormComponentType::GRIDCONTROL; -} - -//------------------------------------------------------------------ -OGridControlModel::OGridControlModel( const OGridControlModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory ) - :OControlModel( _pOriginal, _rxFactory ) - ,OInterfaceContainer( _rxFactory, m_aMutex, ::getCppuType( static_cast<Reference<XPropertySet>*>( NULL ) ) ) - ,OErrorBroadcaster( OComponentHelper::rBHelper ) - ,FontControlModel( _pOriginal ) - ,m_aSelectListeners( m_aMutex ) - ,m_aResetListeners( m_aMutex ) - ,m_aRowSetChangeListeners( m_aMutex ) -{ - DBG_CTOR(OGridControlModel,NULL); - - m_aDefaultControl = _pOriginal->m_aDefaultControl; - m_bEnable = _pOriginal->m_bEnable; - m_bEnableVisible = _pOriginal->m_bEnableVisible; - m_bNavigation = _pOriginal->m_bNavigation; - m_nBorder = _pOriginal->m_nBorder; - m_nWritingMode = _pOriginal->m_nWritingMode; - m_nContextWritingMode = _pOriginal->m_nContextWritingMode; - m_bRecordMarker = _pOriginal->m_bRecordMarker; - m_bPrintable = _pOriginal->m_bPrintable; - m_bAlwaysShowCursor = _pOriginal->m_bAlwaysShowCursor; - m_bDisplaySynchron = _pOriginal->m_bDisplaySynchron; - - // clone the columns - cloneColumns( _pOriginal ); - - // TODO: clone the events? -} - -//------------------------------------------------------------------ -OGridControlModel::~OGridControlModel() -{ - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - - DBG_DTOR(OGridControlModel,NULL); -} - -// XCloneable -//------------------------------------------------------------------------------ -Reference< XCloneable > SAL_CALL OGridControlModel::createClone( ) throw (RuntimeException) -{ - OGridControlModel* pClone = new OGridControlModel( this, getContext().getLegacyServiceFactory() ); - osl_incrementInterlockedCount( &pClone->m_refCount ); - pClone->OControlModel::clonedFrom( this ); - // do not call OInterfaceContainer::clonedFrom, it would clone the elements aka columns, which is - // already done in the ctor - //pClone->OInterfaceContainer::clonedFrom( *this ); - osl_decrementInterlockedCount( &pClone->m_refCount ); - return static_cast< XCloneable* >( static_cast< OControlModel* >( pClone ) ); -} - -//------------------------------------------------------------------------------ -void OGridControlModel::cloneColumns( const OGridControlModel* _pOriginalContainer ) -{ - try - { - Reference< XCloneable > xColCloneable; - - const OInterfaceArray::const_iterator pColumnStart = _pOriginalContainer->m_aItems.begin(); - const OInterfaceArray::const_iterator pColumnEnd = _pOriginalContainer->m_aItems.end(); - for ( OInterfaceArray::const_iterator pColumn = pColumnStart; pColumn != pColumnEnd; ++pColumn ) - { - // ask the col for a factory for the clone - xColCloneable = xColCloneable.query( *pColumn ); - DBG_ASSERT( xColCloneable.is(), "OGridControlModel::cloneColumns: column is not cloneable!" ); - - if ( xColCloneable.is() ) - { - // create a clone of the column - Reference< XCloneable > xColClone( xColCloneable->createClone() ); - DBG_ASSERT( xColClone.is(), "OGridControlModel::cloneColumns: invalid column clone!" ); - - if ( xColClone.is() ) - { - // insert this clone into our own container - insertByIndex( pColumn - pColumnStart, xColClone->queryInterface( m_aElementType ) ); - } - - } - } - } - catch( const Exception& ) - { - OSL_FAIL( "OGridControlModel::cloneColumns: caught an exception while cloning the columns!" ); - } -} - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence OGridControlModel::getSupportedServiceNames() throw(RuntimeException) -{ - StringSequence aSupported = OControlModel::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 2); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-2] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlModel")); - pArray[aSupported.getLength()-1] = FRM_SUN_COMPONENT_GRIDCONTROL; - return aSupported; -} - -//------------------------------------------------------------------------------ -Any SAL_CALL OGridControlModel::queryAggregation( const Type& _rType ) throw (RuntimeException) -{ - Any aReturn = OGridControlModel_BASE::queryInterface(_rType); - - if ( !aReturn.hasValue() ) - { - aReturn = OControlModel::queryAggregation( _rType ); - if ( !aReturn.hasValue() ) - { - aReturn = OInterfaceContainer::queryInterface( _rType ); - if ( !aReturn.hasValue() ) - aReturn = OErrorBroadcaster::queryInterface( _rType ); - } - } - return aReturn; -} - -// XSQLErrorListener -//------------------------------------------------------------------------------ -void SAL_CALL OGridControlModel::errorOccured( const SQLErrorEvent& _rEvent ) throw (RuntimeException) -{ - // forward the errors which happened to my columns to my own listeners - onError( _rEvent ); -} - -// XRowSetSupplier -//------------------------------------------------------------------------------ -Reference< XRowSet > SAL_CALL OGridControlModel::getRowSet( ) throw (RuntimeException) -{ - return Reference< XRowSet >( getParent(), UNO_QUERY ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OGridControlModel::setRowSet( const Reference< XRowSet >& /*_rxDataSource*/ ) throw (RuntimeException) -{ - OSL_FAIL( "OGridControlModel::setRowSet: not supported!" ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OGridControlModel::addRowSetChangeListener( const Reference< XRowSetChangeListener >& i_Listener ) throw (RuntimeException) -{ - if ( i_Listener.is() ) - m_aRowSetChangeListeners.addInterface( i_Listener ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OGridControlModel::removeRowSetChangeListener( const Reference< XRowSetChangeListener >& i_Listener ) throw (RuntimeException) -{ - m_aRowSetChangeListeners.removeInterface( i_Listener ); -} - -// XChild -//------------------------------------------------------------------------------ -void SAL_CALL OGridControlModel::setParent( const InterfaceRef& i_Parent ) throw(NoSupportException, RuntimeException) -{ - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - if ( i_Parent == getParent() ) - return; - - OControlModel::setParent( i_Parent ); - - EventObject aEvent( *this ); - aGuard.clear(); - m_aRowSetChangeListeners.notifyEach( &XRowSetChangeListener::onRowSetChanged, aEvent ); -} - -//------------------------------------------------------------------------------ -Sequence< Type > SAL_CALL OGridControlModel::getTypes( ) throw(RuntimeException) -{ - return concatSequences( - concatSequences( - OControlModel::getTypes(), - OInterfaceContainer::getTypes(), - OErrorBroadcaster::getTypes() - ), - OGridControlModel_BASE::getTypes() - ); -} - -// OComponentHelper -//------------------------------------------------------------------------------ -void OGridControlModel::disposing() -{ - OControlModel::disposing(); - OErrorBroadcaster::disposing(); - OInterfaceContainer::disposing(); - - setParent(NULL); - - EventObject aEvt(static_cast<XWeak*>(this)); - m_aSelectListeners.disposeAndClear(aEvt); - m_aResetListeners.disposeAndClear(aEvt); - m_aRowSetChangeListeners.disposeAndClear(aEvt); -} - -// XEventListener -//------------------------------------------------------------------------------ -void OGridControlModel::disposing(const EventObject& _rEvent) throw( RuntimeException ) -{ - OControlModel::disposing( _rEvent ); - OInterfaceContainer::disposing( _rEvent ); -} - -// XSelectionSupplier -//----------------------------------------------------------------------------- -sal_Bool SAL_CALL OGridControlModel::select(const Any& rElement) throw(IllegalArgumentException, RuntimeException) -{ - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - - Reference<XPropertySet> xSel; - if (rElement.hasValue() && !::cppu::extractInterface(xSel, rElement)) - { - throw IllegalArgumentException(); - } - InterfaceRef xMe = static_cast<XWeak*>(this); - - if (xSel.is()) - { - Reference<XChild> xAsChild(xSel, UNO_QUERY); - if (!xAsChild.is() || (xAsChild->getParent() != xMe)) - { - throw IllegalArgumentException(); - } - } - - if ( xSel != m_xSelection ) - { - m_xSelection = xSel; - aGuard.clear(); - m_aSelectListeners.notifyEach( &XSelectionChangeListener::selectionChanged, EventObject( *this ) ); - return sal_True; - } - return sal_False; -} - -//----------------------------------------------------------------------------- -Any SAL_CALL OGridControlModel::getSelection() throw(RuntimeException) -{ - return makeAny(m_xSelection); -} - -//----------------------------------------------------------------------------- -void OGridControlModel::addSelectionChangeListener(const Reference< XSelectionChangeListener >& _rxListener) throw( RuntimeException ) -{ - m_aSelectListeners.addInterface(_rxListener); -} - -//----------------------------------------------------------------------------- -void OGridControlModel::removeSelectionChangeListener(const Reference< XSelectionChangeListener >& _rxListener) throw( RuntimeException ) -{ - m_aSelectListeners.removeInterface(_rxListener); -} - -// XGridColumnFactory -//------------------------------------------------------------------------------ -Reference<XPropertySet> SAL_CALL OGridControlModel::createColumn(const ::rtl::OUString& ColumnType) throw ( :: com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException) -{ - const Sequence< ::rtl::OUString >& rColumnTypes = frm::getColumnTypes(); - return createColumn( detail::findPos( ColumnType, rColumnTypes ) ); -} - -//------------------------------------------------------------------------------ -Reference<XPropertySet> OGridControlModel::createColumn(sal_Int32 nTypeId) const -{ - Reference<XPropertySet> xReturn; - switch (nTypeId) - { - case TYPE_CHECKBOX: xReturn = new CheckBoxColumn( getContext() ); break; - case TYPE_COMBOBOX: xReturn = new ComboBoxColumn( getContext() ); break; - case TYPE_CURRENCYFIELD: xReturn = new CurrencyFieldColumn( getContext() ); break; - case TYPE_DATEFIELD: xReturn = new DateFieldColumn( getContext() ); break; - case TYPE_LISTBOX: xReturn = new ListBoxColumn( getContext() ); break; - case TYPE_NUMERICFIELD: xReturn = new NumericFieldColumn( getContext() ); break; - case TYPE_PATTERNFIELD: xReturn = new PatternFieldColumn( getContext() ); break; - case TYPE_TEXTFIELD: xReturn = new TextFieldColumn( getContext() ); break; - case TYPE_TIMEFIELD: xReturn = new TimeFieldColumn( getContext() ); break; - case TYPE_FORMATTEDFIELD: xReturn = new FormattedFieldColumn( getContext() ); break; - default: - OSL_FAIL("OGridControlModel::createColumn: Unknown Column"); - break; - } - return xReturn; -} - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OGridControlModel::getColumnTypes() throw ( ::com::sun::star::uno::RuntimeException) -{ - return frm::getColumnTypes(); -} - -// XReset -//----------------------------------------------------------------------------- -void SAL_CALL OGridControlModel::reset() throw ( ::com::sun::star::uno::RuntimeException) -{ - ::cppu::OInterfaceIteratorHelper aIter(m_aResetListeners); - EventObject aEvt(static_cast<XWeak*>(this)); - sal_Bool bContinue = sal_True; - while (aIter.hasMoreElements() && bContinue) - bContinue =((XResetListener*)aIter.next())->approveReset(aEvt); - - if (bContinue) - { - _reset(); - m_aResetListeners.notifyEach( &XResetListener::resetted, aEvt ); - } -} - -//----------------------------------------------------------------------------- -void SAL_CALL OGridControlModel::addResetListener(const Reference<XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException) -{ - m_aResetListeners.addInterface(_rxListener); -} - -//----------------------------------------------------------------------------- -void SAL_CALL OGridControlModel::removeResetListener(const Reference<XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException) -{ - m_aResetListeners.removeInterface(_rxListener); -} - -//----------------------------------------------------------------------------- -void OGridControlModel::_reset() -{ - Reference<XReset> xReset; - sal_Int32 nCount = getCount(); - for (sal_Int32 nIndex=0; nIndex < nCount; nIndex++) - { - getByIndex( nIndex ) >>= xReset; - if (xReset.is()) - xReset->reset(); - } -} - -// XPropertySet -//------------------------------------------------------------------------------ -void OGridControlModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_BASE_PROPERTIES( 37 ) - DECL_PROP1(NAME, ::rtl::OUString, BOUND); - DECL_PROP2(CLASSID, sal_Int16, READONLY, TRANSIENT); - DECL_PROP1(TAG, ::rtl::OUString, BOUND); - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - DECL_PROP3(TABSTOP, sal_Bool, BOUND, MAYBEDEFAULT, MAYBEVOID); - DECL_PROP2(HASNAVIGATION, sal_Bool, BOUND, MAYBEDEFAULT); - DECL_PROP1(ENABLED, sal_Bool, BOUND); - DECL_PROP2(ENABLEVISIBLE, sal_Bool, BOUND, MAYBEDEFAULT); - DECL_PROP1(BORDER, sal_Int16, BOUND); - DECL_PROP2(BORDERCOLOR, sal_Int16, BOUND, MAYBEVOID); - DECL_PROP1(DEFAULTCONTROL, ::rtl::OUString, BOUND); - DECL_PROP3(TEXTCOLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID); - DECL_PROP3(BACKGROUNDCOLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID); - DECL_PROP2(FONT, FontDescriptor, BOUND, MAYBEDEFAULT); - DECL_PROP3(ROWHEIGHT, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID); - DECL_PROP1(HELPTEXT, ::rtl::OUString, BOUND); - DECL_PROP1(FONT_NAME, ::rtl::OUString, MAYBEDEFAULT); - DECL_PROP1(FONT_STYLENAME, ::rtl::OUString, MAYBEDEFAULT); - DECL_PROP1(FONT_FAMILY, sal_Int16, MAYBEDEFAULT); - DECL_PROP1(FONT_CHARSET, sal_Int16, MAYBEDEFAULT); - DECL_PROP1(FONT_HEIGHT, float, MAYBEDEFAULT); - DECL_PROP1(FONT_WEIGHT, float, MAYBEDEFAULT); - DECL_PROP1(FONT_SLANT, sal_Int16, MAYBEDEFAULT); - DECL_PROP1(FONT_UNDERLINE, sal_Int16, MAYBEDEFAULT); - DECL_BOOL_PROP1(FONT_WORDLINEMODE, MAYBEDEFAULT); - DECL_PROP3(TEXTLINECOLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID); - DECL_PROP2(FONTEMPHASISMARK, sal_Int16, BOUND, MAYBEDEFAULT); - DECL_PROP2(FONTRELIEF, sal_Int16, BOUND, MAYBEDEFAULT); - DECL_PROP1(FONT_STRIKEOUT, sal_Int16, MAYBEDEFAULT); - DECL_PROP2(RECORDMARKER, sal_Bool, BOUND, MAYBEDEFAULT ); - DECL_PROP2(PRINTABLE, sal_Bool, BOUND, MAYBEDEFAULT ); - DECL_PROP4(CURSORCOLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID , TRANSIENT); - DECL_PROP3(ALWAYSSHOWCURSOR, sal_Bool, BOUND, MAYBEDEFAULT, TRANSIENT); - DECL_PROP3(DISPLAYSYNCHRON, sal_Bool, BOUND, MAYBEDEFAULT, TRANSIENT); - DECL_PROP2(HELPURL, ::rtl::OUString, BOUND, MAYBEDEFAULT); - DECL_PROP2(WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT); - DECL_PROP3(CONTEXT_WRITING_MODE,sal_Int16, BOUND, MAYBEDEFAULT, TRANSIENT); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -void OGridControlModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle ) const -{ - switch (nHandle) - { - case PROPERTY_ID_CONTEXT_WRITING_MODE: - rValue <<= m_nContextWritingMode; - break; - case PROPERTY_ID_WRITING_MODE: - rValue <<= m_nWritingMode; - break; - case PROPERTY_ID_HELPTEXT: - rValue <<= m_sHelpText; - break; - case PROPERTY_ID_HELPURL: - rValue <<= m_sHelpURL; - break; - case PROPERTY_ID_DISPLAYSYNCHRON: - setBOOL(rValue, m_bDisplaySynchron); - break; - case PROPERTY_ID_ALWAYSSHOWCURSOR: - setBOOL(rValue, m_bAlwaysShowCursor); - break; - case PROPERTY_ID_CURSORCOLOR: - rValue = m_aCursorColor; - break; - case PROPERTY_ID_PRINTABLE: - setBOOL(rValue, m_bPrintable); - break; - case PROPERTY_ID_TABSTOP: - rValue = m_aTabStop; - break; - case PROPERTY_ID_HASNAVIGATION: - setBOOL(rValue, m_bNavigation); - break; - case PROPERTY_ID_RECORDMARKER: - setBOOL(rValue, m_bRecordMarker); - break; - case PROPERTY_ID_ENABLED: - setBOOL(rValue, m_bEnable); - break; - case PROPERTY_ID_ENABLEVISIBLE: - setBOOL(rValue, m_bEnableVisible); - break; - case PROPERTY_ID_BORDER: - rValue <<= (sal_Int16)m_nBorder; - break; - case PROPERTY_ID_BORDERCOLOR: - rValue <<= m_aBorderColor; - break; - case PROPERTY_ID_DEFAULTCONTROL: - rValue <<= m_aDefaultControl; - break; - case PROPERTY_ID_BACKGROUNDCOLOR: - rValue = m_aBackgroundColor; - break; - case PROPERTY_ID_ROWHEIGHT: - rValue = m_aRowHeight; - break; - - default: - if ( isFontRelatedProperty( nHandle ) ) - FontControlModel::getFastPropertyValue( rValue, nHandle ); - else - OControlModel::getFastPropertyValue( rValue, nHandle ); - } -} - -//------------------------------------------------------------------------------ -sal_Bool OGridControlModel::convertFastPropertyValue( Any& rConvertedValue, Any& rOldValue, - sal_Int32 nHandle, const Any& rValue )throw( IllegalArgumentException ) -{ - sal_Bool bModified(sal_False); - switch (nHandle) - { - case PROPERTY_ID_CONTEXT_WRITING_MODE: - bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_nContextWritingMode ); - break; - case PROPERTY_ID_WRITING_MODE: - bModified = tryPropertyValue( rConvertedValue, rOldValue, rValue, m_nWritingMode ); - break; - case PROPERTY_ID_HELPTEXT: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_sHelpText); - break; - case PROPERTY_ID_HELPURL: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_sHelpURL); - break; - case PROPERTY_ID_DISPLAYSYNCHRON: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bDisplaySynchron); - break; - case PROPERTY_ID_ALWAYSSHOWCURSOR: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bAlwaysShowCursor); - break; - case PROPERTY_ID_CURSORCOLOR: - if (!rValue.hasValue() || !m_aCursorColor.hasValue()) - { - if (rValue.hasValue() && (TypeClass_LONG != rValue.getValueType().getTypeClass())) - { - throw IllegalArgumentException(); - } - rOldValue = m_aCursorColor; - rConvertedValue = rValue; - bModified = (rOldValue.getValue() != rConvertedValue.getValue()); - } - else - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, getINT32(m_aCursorColor)); - break; - case PROPERTY_ID_PRINTABLE: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bPrintable); - break; - case PROPERTY_ID_TABSTOP: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aTabStop, ::getBooleanCppuType()); - break; - case PROPERTY_ID_HASNAVIGATION: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bNavigation); - break; - case PROPERTY_ID_RECORDMARKER: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bRecordMarker); - break; - case PROPERTY_ID_ENABLED: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bEnable); - break; - case PROPERTY_ID_ENABLEVISIBLE: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bEnableVisible); - break; - case PROPERTY_ID_BORDER: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_nBorder); - break; - case PROPERTY_ID_BORDERCOLOR: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aBorderColor, ::getCppuType((const sal_Int32*)NULL)); - break; - case PROPERTY_ID_DEFAULTCONTROL: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aDefaultControl); - break; - case PROPERTY_ID_BACKGROUNDCOLOR: - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aBackgroundColor, ::getCppuType((const sal_Int32*)NULL)); - break; - case PROPERTY_ID_ROWHEIGHT: - { - bModified = tryPropertyValue(rConvertedValue, rOldValue, rValue, m_aRowHeight, ::getCppuType((const sal_Int32*)NULL)); - - sal_Int32 nNewVal( 0 ); - if ( ( rConvertedValue >>= nNewVal ) && ( nNewVal <= 0 ) ) - { - rConvertedValue.clear(); - bModified = m_aRowHeight.hasValue(); - } - } - break; - default: - if ( isFontRelatedProperty( nHandle ) ) - bModified = FontControlModel::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue ); - else - bModified = OControlModel::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue); - } - return bModified; -} - -//------------------------------------------------------------------------------ -void OGridControlModel::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) throw ( ::com::sun::star::uno::Exception) -{ - switch (nHandle) - { - case PROPERTY_ID_CONTEXT_WRITING_MODE: - rValue >>= m_nContextWritingMode; - break; - case PROPERTY_ID_WRITING_MODE: - rValue >>= m_nWritingMode; - break; - case PROPERTY_ID_HELPTEXT: - rValue >>= m_sHelpText; - break; - case PROPERTY_ID_HELPURL: - rValue >>= m_sHelpURL; - break; - case PROPERTY_ID_DISPLAYSYNCHRON: - m_bDisplaySynchron = getBOOL(rValue); - break; - case PROPERTY_ID_ALWAYSSHOWCURSOR: - m_bAlwaysShowCursor = getBOOL(rValue); - break; - case PROPERTY_ID_CURSORCOLOR: - m_aCursorColor = rValue; - break; - case PROPERTY_ID_PRINTABLE: - m_bPrintable = getBOOL(rValue); - break; - case PROPERTY_ID_TABSTOP: - m_aTabStop = rValue; - break; - case PROPERTY_ID_HASNAVIGATION: - m_bNavigation = getBOOL(rValue); - break; - case PROPERTY_ID_ENABLED: - m_bEnable = getBOOL(rValue); - break; - case PROPERTY_ID_ENABLEVISIBLE: - m_bEnableVisible = getBOOL(rValue); - break; - case PROPERTY_ID_RECORDMARKER: - m_bRecordMarker = getBOOL(rValue); - break; - case PROPERTY_ID_BORDER: - rValue >>= m_nBorder; - break; - case PROPERTY_ID_BORDERCOLOR: - m_aBorderColor = rValue; - break; - case PROPERTY_ID_DEFAULTCONTROL: - rValue >>= m_aDefaultControl; - break; - case PROPERTY_ID_BACKGROUNDCOLOR: - m_aBackgroundColor = rValue; - break; - case PROPERTY_ID_ROWHEIGHT: - m_aRowHeight = rValue; - break; - - default: - if ( isFontRelatedProperty( nHandle ) ) - { - FontDescriptor aOldFont( getFont() ); - - FontControlModel::setFastPropertyValue_NoBroadcast( nHandle, rValue ); - - if ( isFontAggregateProperty( nHandle ) ) - firePropertyChange( PROPERTY_ID_FONT, makeAny( getFont() ), makeAny( aOldFont ) ); - } - else - OControlModel::setFastPropertyValue_NoBroadcast( nHandle, rValue ); - } - -} - -//XPropertyState - -//------------------------------------------------------------------------------ -Any OGridControlModel::getPropertyDefaultByHandle( sal_Int32 nHandle ) const -{ - Any aReturn; - switch (nHandle) - { - case PROPERTY_ID_CONTEXT_WRITING_MODE: - case PROPERTY_ID_WRITING_MODE: - aReturn <<= WritingMode2::CONTEXT; - break; - - case PROPERTY_ID_DEFAULTCONTROL: - aReturn <<= ::rtl::OUString( STARDIV_ONE_FORM_CONTROL_GRID ); - break; - - case PROPERTY_ID_PRINTABLE: - case PROPERTY_ID_HASNAVIGATION: - case PROPERTY_ID_RECORDMARKER: - case PROPERTY_ID_DISPLAYSYNCHRON: - case PROPERTY_ID_ENABLED: - case PROPERTY_ID_ENABLEVISIBLE: - aReturn = makeBoolAny(sal_True); - break; - - case PROPERTY_ID_ALWAYSSHOWCURSOR: - aReturn = makeBoolAny(sal_False); - break; - - case PROPERTY_ID_HELPURL: - case PROPERTY_ID_HELPTEXT: - aReturn <<= ::rtl::OUString(); - break; - - case PROPERTY_ID_BORDER: - aReturn <<= (sal_Int16)1; - break; - - case PROPERTY_ID_BORDERCOLOR: - case PROPERTY_ID_TABSTOP: - case PROPERTY_ID_BACKGROUNDCOLOR: - case PROPERTY_ID_ROWHEIGHT: - case PROPERTY_ID_CURSORCOLOR: - // void - break; - - default: - if ( isFontRelatedProperty( nHandle ) ) - aReturn = FontControlModel::getPropertyDefaultByHandle( nHandle ); - else - aReturn = OControlModel::getPropertyDefaultByHandle(nHandle); - } - return aReturn; -} - -//------------------------------------------------------------------------------ -OGridColumn* OGridControlModel::getColumnImplementation(const InterfaceRef& _rxIFace) const -{ - OGridColumn* pImplementation = NULL; - Reference< XUnoTunnel > xUnoTunnel( _rxIFace, UNO_QUERY ); - if ( xUnoTunnel.is() ) - pImplementation = reinterpret_cast<OGridColumn*>(xUnoTunnel->getSomething(OGridColumn::getUnoTunnelImplementationId())); - - return pImplementation; -} - -//------------------------------------------------------------------------------ -void OGridControlModel::gotColumn( const Reference< XInterface >& _rxColumn ) -{ - Reference< XSQLErrorBroadcaster > xBroadcaster( _rxColumn, UNO_QUERY ); - if ( xBroadcaster.is() ) - xBroadcaster->addSQLErrorListener( this ); -} - -//------------------------------------------------------------------------------ -void OGridControlModel::lostColumn(const Reference< XInterface >& _rxColumn) -{ - if ( m_xSelection == _rxColumn ) - { // the currently selected element was replaced - m_xSelection.clear(); - EventObject aEvt( static_cast< XWeak* >( this ) ); - m_aSelectListeners.notifyEach( &XSelectionChangeListener::selectionChanged, aEvt ); - } - - Reference< XSQLErrorBroadcaster > xBroadcaster( _rxColumn, UNO_QUERY ); - if ( xBroadcaster.is() ) - xBroadcaster->removeSQLErrorListener( this ); -} - -//------------------------------------------------------------------------------ -void OGridControlModel::implRemoved(const InterfaceRef& _rxObject) -{ - OInterfaceContainer::implRemoved(_rxObject); - lostColumn(_rxObject); -} - -//------------------------------------------------------------------------------ -void OGridControlModel::implInserted( const ElementDescription* _pElement ) -{ - OInterfaceContainer::implInserted( _pElement ); - gotColumn( _pElement->xInterface ); -} - -//------------------------------------------------------------------------------ -void OGridControlModel::impl_replacedElement( const ContainerEvent& _rEvent, ::osl::ClearableMutexGuard& _rInstanceLock ) -{ - Reference< XInterface > xOldColumn( _rEvent.ReplacedElement, UNO_QUERY ); - Reference< XInterface > xNewColumn( _rEvent.Element, UNO_QUERY ); - - bool bNewSelection = ( xOldColumn == m_xSelection ); - - lostColumn( xOldColumn ); - gotColumn( xNewColumn ); - - if ( bNewSelection ) - m_xSelection.set( xNewColumn, UNO_QUERY ); - - OInterfaceContainer::impl_replacedElement( _rEvent, _rInstanceLock ); - // <<---- SYNCHRONIZED - - if ( bNewSelection ) - { - m_aSelectListeners.notifyEach( &XSelectionChangeListener::selectionChanged, EventObject( *this ) ); - } -} - -//------------------------------------------------------------------------------ -ElementDescription* OGridControlModel::createElementMetaData( ) -{ - return new ColumnDescription; -} - -//------------------------------------------------------------------------------ -void OGridControlModel::approveNewElement( const Reference< XPropertySet >& _rxObject, ElementDescription* _pElement ) -{ - OGridColumn* pCol = getColumnImplementation( _rxObject ); - if ( !pCol ) - throw IllegalArgumentException(); - - OInterfaceContainer::approveNewElement( _rxObject, _pElement ); - - // if we're here, the object passed all tests - if ( _pElement ) - static_cast< ColumnDescription* >( _pElement )->pColumn = pCol; -} - -// XPersistObject -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OGridControlModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_GRID; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void OGridControlModel::write(const Reference<XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OControlModel::write(_rxOutStream); - - Reference<XMarkableStream> xMark(_rxOutStream, UNO_QUERY); - - // 1. Version - _rxOutStream->writeShort(0x0008); - - // 2. Columns - sal_Int32 nLen = getCount(); - _rxOutStream->writeLong(nLen); - OGridColumn* pCol; - for (sal_Int32 i = 0; i < nLen; i++) - { - // zuerst den Servicenamen fuer das darunterliegende Model - pCol = getColumnImplementation(m_aItems[i]); - DBG_ASSERT(pCol != NULL, "OGridControlModel::write : such items should never reach it into my container !"); - - _rxOutStream << pCol->getModelName(); - - // dann das Object selbst - sal_Int32 nMark = xMark->createMark(); - sal_Int32 nObjLen = 0; - _rxOutStream->writeLong(nObjLen); - - // schreiben der Col - pCol->write(_rxOutStream); - - // feststellen der Laenge - nObjLen = xMark->offsetToMark(nMark) - 4; - xMark->jumpToMark(nMark); - _rxOutStream->writeLong(nObjLen); - xMark->jumpToFurthest(); - xMark->deleteMark(nMark); - } - - // 3. Events - writeEvents(_rxOutStream); - - // 4. Attribute - // Maskierung fuer alle any Typen - sal_uInt16 nAnyMask = 0; - if (m_aRowHeight.getValueType().getTypeClass() == TypeClass_LONG) - nAnyMask |= ROWHEIGHT; - if ( getFont() != getDefaultFont() ) - nAnyMask |= FONTATTRIBS | FONTSIZE | FONTTYPE | FONTDESCRIPTOR; - if (m_aTabStop.getValueType().getTypeClass() == TypeClass_BOOLEAN) - nAnyMask |= TABSTOP; - if ( hasTextColor() ) - nAnyMask |= TEXTCOLOR; - if (m_aBackgroundColor.getValueType().getTypeClass() == TypeClass_LONG) - nAnyMask |= BACKGROUNDCOLOR; - if (!m_bRecordMarker) - nAnyMask |= RECORDMARKER; - - _rxOutStream->writeShort(nAnyMask); - - if (nAnyMask & ROWHEIGHT) - _rxOutStream->writeLong(getINT32(m_aRowHeight)); - - // old structures - const FontDescriptor& aFont = getFont(); - if ( nAnyMask & FONTDESCRIPTOR ) - { - // Attrib - _rxOutStream->writeShort( sal::static_int_cast< sal_Int16 >( VCLUnoHelper::ConvertFontWeight( aFont.Weight ) ) ); - _rxOutStream->writeShort( sal::static_int_cast< sal_Int16 >( aFont.Slant ) ); - _rxOutStream->writeShort( aFont.Underline ); - _rxOutStream->writeShort( aFont.Strikeout ); - _rxOutStream->writeShort( sal_Int16(aFont.Orientation * 10) ); - _rxOutStream->writeBoolean( aFont.Kerning ); - _rxOutStream->writeBoolean( aFont.WordLineMode ); - - // Size - _rxOutStream->writeLong( aFont.Width ); - _rxOutStream->writeLong( aFont.Height ); - _rxOutStream->writeShort( sal::static_int_cast< sal_Int16 >( VCLUnoHelper::ConvertFontWidth( aFont.CharacterWidth ) ) ); - - // Type - _rxOutStream->writeUTF( aFont.Name ); - _rxOutStream->writeUTF( aFont.StyleName ); - _rxOutStream->writeShort( aFont.Family ); - _rxOutStream->writeShort( aFont.CharSet ); - _rxOutStream->writeShort( aFont.Pitch ); - } - - _rxOutStream << m_aDefaultControl; - - _rxOutStream->writeShort(m_nBorder); - _rxOutStream->writeBoolean(m_bEnable); - - if (nAnyMask & TABSTOP) - _rxOutStream->writeBoolean(getBOOL(m_aTabStop)); - - _rxOutStream->writeBoolean(m_bNavigation); - - if (nAnyMask & TEXTCOLOR) - _rxOutStream->writeLong( getTextColor() ); - - // neu ab Version 6 - _rxOutStream << m_sHelpText; - - if (nAnyMask & FONTDESCRIPTOR) - _rxOutStream << getFont(); - - if (nAnyMask & RECORDMARKER) - _rxOutStream->writeBoolean(m_bRecordMarker); - - // neu ab Version 7 - _rxOutStream->writeBoolean(m_bPrintable); - - // new since 8 - if (nAnyMask & BACKGROUNDCOLOR) - _rxOutStream->writeLong(getINT32(m_aBackgroundColor)); -} - -//------------------------------------------------------------------------------ -void OGridControlModel::read(const Reference<XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OControlModel::read(_rxInStream); - - Reference<XMarkableStream> xMark(_rxInStream, UNO_QUERY); - - // 1. Version - sal_Int16 nVersion = _rxInStream->readShort(); - - // 2. Einlesen der Spalten - sal_Int32 nLen = _rxInStream->readLong(); - if (nLen) - { - for (sal_Int32 i = 0; i < nLen; i++) - { - // Lesen des Modelnamen - - ::rtl::OUString sModelName; - _rxInStream >> sModelName; - - Reference<XPropertySet> xCol(createColumn(getColumnTypeByModelName(sModelName))); - DBG_ASSERT(xCol.is(), "OGridControlModel::read : unknown column type !"); - sal_Int32 nObjLen = _rxInStream->readLong(); - if (nObjLen) - { - sal_Int32 nMark = xMark->createMark(); - if (xCol.is()) - { - OGridColumn* pCol = getColumnImplementation(xCol); - pCol->read(_rxInStream); - } - xMark->jumpToMark(nMark); - _rxInStream->skipBytes(nObjLen); - xMark->deleteMark(nMark); - } - - if ( xCol.is() ) - implInsert( i, xCol, sal_False, NULL, sal_False ); - } - } - - // In der Basisimplementierung werden die Events nur gelesen, Elemente im Container existieren - // da aber vor TF_ONE fuer das GridControl immer Events geschrieben wurden, muessen sie auch immer - // mit gelesen werden - sal_Int32 nObjLen = _rxInStream->readLong(); - if (nObjLen) - { - sal_Int32 nMark = xMark->createMark(); - Reference<XPersistObject> xObj(m_xEventAttacher, UNO_QUERY); - if (xObj.is()) - xObj->read(_rxInStream); - xMark->jumpToMark(nMark); - _rxInStream->skipBytes(nObjLen); - xMark->deleteMark(nMark); - } - - // Attachement lesen - for (sal_Int32 i = 0; i < nLen; i++) - { - InterfaceRef xIfc(m_aItems[i], UNO_QUERY); - Reference<XPropertySet> xSet(xIfc, UNO_QUERY); - Any aHelper; - aHelper <<= xSet; - m_xEventAttacher->attach( i, xIfc, aHelper ); - } - - // 4. Einlesen der Attribute - if (nVersion == 1) - return; - - // Maskierung fuer any - sal_uInt16 nAnyMask = _rxInStream->readShort(); - - if (nAnyMask & ROWHEIGHT) - { - sal_Int32 nValue = _rxInStream->readLong(); - m_aRowHeight <<= (sal_Int32)nValue; - } - - FontDescriptor aFont( getFont() ); - if ( nAnyMask & FONTATTRIBS ) - { - aFont.Weight = (float)VCLUnoHelper::ConvertFontWeight( _rxInStream->readShort() ); - - aFont.Slant = (FontSlant)_rxInStream->readShort(); - aFont.Underline = _rxInStream->readShort(); - aFont.Strikeout = _rxInStream->readShort(); - aFont.Orientation = ( (float)_rxInStream->readShort() ) / 10; - aFont.Kerning = _rxInStream->readBoolean(); - aFont.WordLineMode = _rxInStream->readBoolean(); - } - if ( nAnyMask & FONTSIZE ) - { - aFont.Width = (sal_Int16)_rxInStream->readLong(); - aFont.Height = (sal_Int16)_rxInStream->readLong(); - aFont.CharacterWidth = (float)VCLUnoHelper::ConvertFontWidth( _rxInStream->readShort() ); - } - if ( nAnyMask & FONTTYPE ) - { - aFont.Name = _rxInStream->readUTF(); - aFont.StyleName = _rxInStream->readUTF(); - aFont.Family = _rxInStream->readShort(); - aFont.CharSet = _rxInStream->readShort(); - aFont.Pitch = _rxInStream->readShort(); - } - - if ( nAnyMask & ( FONTATTRIBS | FONTSIZE | FONTTYPE ) ) - setFont( aFont ); - - // Name - _rxInStream >> m_aDefaultControl; - m_nBorder = _rxInStream->readShort(); - m_bEnable = _rxInStream->readBoolean(); - - if (nAnyMask & TABSTOP) - { - m_aTabStop = makeBoolAny(_rxInStream->readBoolean()); - } - - if (nVersion > 3) - m_bNavigation = _rxInStream->readBoolean(); - - if (nAnyMask & TEXTCOLOR) - { - sal_Int32 nValue = _rxInStream->readLong(); - setTextColor( (sal_Int32)nValue ); - } - - // neu ab Version 6 - if (nVersion > 5) - _rxInStream >> m_sHelpText; - - if (nAnyMask & FONTDESCRIPTOR) - { - FontDescriptor aUNOFont; - _rxInStream >> aUNOFont; - setFont( aFont ); - } - - if (nAnyMask & RECORDMARKER) - m_bRecordMarker = _rxInStream->readBoolean(); - - // neu ab Version 7 - if (nVersion > 6) - m_bPrintable = _rxInStream->readBoolean(); - - if (nAnyMask & BACKGROUNDCOLOR) - { - sal_Int32 nValue = _rxInStream->readLong(); - m_aBackgroundColor <<= (sal_Int32)nValue; - } -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Grid.hxx b/forms/source/component/Grid.hxx deleted file mode 100644 index 7077ffc59..000000000 --- a/forms/source/component/Grid.hxx +++ /dev/null @@ -1,221 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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 "errorbroadcaster.hxx" -#include "FormComponent.hxx" -#include "formcontrolfont.hxx" -#include "InterfaceContainer.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/form/XGridColumnFactory.hpp> -#include <com/sun/star/form/XLoadable.hpp> -#include <com/sun/star/sdb/XRowSetSupplier.hpp> -#include <com/sun/star/sdb/XRowSetChangeBroadcaster.hpp> -#include <com/sun/star/view/XSelectionSupplier.hpp> -/** === end UNO includes === **/ - -#include <comphelper/proparrhlp.hxx> -#include <cppuhelper/implbase7.hxx> -#include <tools/link.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... - -class OGridColumn; - -//================================================================== -// ColumnDescription -//================================================================== - - struct ColumnDescription : public ElementDescription - { - public: - OGridColumn* pColumn; // not owned by this instance! only to prevent duplicate XUnoTunnel usage - }; - -//================================================================== -// OGridControlModel -//================================================================== -typedef ::cppu::ImplHelper7 < ::com::sun::star::awt::XControlModel - , ::com::sun::star::form::XGridColumnFactory - , ::com::sun::star::form::XReset - , ::com::sun::star::view::XSelectionSupplier - , ::com::sun::star::sdb::XSQLErrorListener - , ::com::sun::star::sdb::XRowSetSupplier - , ::com::sun::star::sdb::XRowSetChangeBroadcaster - > OGridControlModel_BASE; - -class OGridControlModel :public OControlModel - ,public OInterfaceContainer - ,public OErrorBroadcaster - ,public FontControlModel - ,public OGridControlModel_BASE -{ - ::cppu::OInterfaceContainerHelper m_aSelectListeners, - m_aResetListeners, - m_aRowSetChangeListeners; - -// [properties] - ::com::sun::star::uno::Any m_aRowHeight; // Zeilenhoehe - ::com::sun::star::uno::Any m_aTabStop; - ::com::sun::star::uno::Any m_aBackgroundColor; - ::com::sun::star::uno::Any m_aCursorColor; // transient - ::com::sun::star::uno::Any m_aBorderColor; - ::rtl::OUString m_aDefaultControl; - ::rtl::OUString m_sHelpText; -// [properties] - - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xSelection; - -// [properties] - ::rtl::OUString m_sHelpURL; // URL - sal_Int16 m_nBorder; - sal_Int16 m_nWritingMode; - sal_Int16 m_nContextWritingMode; - sal_Bool m_bEnableVisible : 1; - sal_Bool m_bEnable : 1; - sal_Bool m_bNavigation : 1; - sal_Bool m_bRecordMarker : 1; - sal_Bool m_bPrintable : 1; - sal_Bool m_bAlwaysShowCursor : 1; // transient - sal_Bool m_bDisplaySynchron : 1; // transient -// [properties] - -protected: - void _reset(); - -public: - DECLARE_DEFAULT_LEAF_XTOR( OGridControlModel ); - - // UNO Anbindung - DECLARE_UNO3_AGG_DEFAULTS(OGridControlModel, OControlModel); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException); - - // XChild - virtual void SAL_CALL setParent(const InterfaceRef& Parent) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); - - // XServiceInfo - IMPLEMENTATION_NAME(OGridControlModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // XTypeProvider - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException); - - // XReset - virtual void SAL_CALL reset() throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addResetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeResetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener>& _rxListener) throw ( ::com::sun::star::uno::RuntimeException); - - // XSelectionSupplier - virtual sal_Bool SAL_CALL select(const ::com::sun::star::uno::Any& aElement) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Any SAL_CALL getSelection() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addSelectionChangeListener(const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeSelectionChangeListener(const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener) throw(::com::sun::star::uno::RuntimeException); - - // XGridColumnFactory - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> SAL_CALL createColumn(const ::rtl::OUString& ColumnType) throw ( :: com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual StringSequence SAL_CALL getColumnTypes() throw ( ::com::sun::star::uno::RuntimeException); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // XPropertySet - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, - sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception); - - // XPropertyState - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const; - - // XSQLErrorListener - virtual void SAL_CALL errorOccured( const ::com::sun::star::sdb::SQLErrorEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException); - - // XRowSetSupplier - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet > SAL_CALL getRowSet( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setRowSet( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xDataSource ) throw (::com::sun::star::uno::RuntimeException); - - // XRowSetChangeBroadcaster - virtual void SAL_CALL addRowSetChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetChangeListener >& i_Listener ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeRowSetChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetChangeListener >& i_Listener ) throw (::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - - // prevent method hiding - using OControlModel::disposing; - using OControlModel::getFastPropertyValue; - -protected: - DECLARE_XCLONEABLE(); - -protected: - virtual void approveNewElement( - const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxObject, - ElementDescription* _pElement - ); - - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> createColumn(sal_Int32 nTypeId) const; - - OGridColumn* getColumnImplementation(const InterfaceRef& _rxIFace) const; - - virtual ElementDescription* createElementMetaData( ); - -protected: - virtual void implRemoved(const InterfaceRef& _rxObject); - virtual void implInserted( const ElementDescription* _pElement ); - virtual void impl_replacedElement( - const ::com::sun::star::container::ContainerEvent& _rEvent, - ::osl::ClearableMutexGuard& _rInstanceLock - ); - - void gotColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxColumn); - void lostColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxColumn); - - void cloneColumns( const OGridControlModel* _pOriginalContainer ); -}; - -//......................................................................... -} // namespace frm -//......................................................................... - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/GroupBox.cxx b/forms/source/component/GroupBox.cxx deleted file mode 100644 index ba3da3576..000000000 --- a/forms/source/component/GroupBox.cxx +++ /dev/null @@ -1,175 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "GroupBox.hxx" -#include "property.hxx" -#include "property.hrc" -#include "services.hxx" -#include <tools/debug.hxx> - -//......................................................................... -namespace frm -{ -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; - -//================================================================== -// OGroupBoxModel -//================================================================== - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OGroupBoxModel_CreateInstance(const Reference<starlang::XMultiServiceFactory>& _rxFactory) throw (RuntimeException) -{ - return *(new OGroupBoxModel(_rxFactory)); -} - -//------------------------------------------------------------------ -DBG_NAME( OGroupBoxModel ) -//------------------------------------------------------------------ -OGroupBoxModel::OGroupBoxModel(const Reference<starlang::XMultiServiceFactory>& _rxFactory) - :OControlModel(_rxFactory, VCL_CONTROLMODEL_GROUPBOX, VCL_CONTROL_GROUPBOX) -{ - DBG_CTOR( OGroupBoxModel, NULL ); - m_nClassId = FormComponentType::GROUPBOX; -} - -//------------------------------------------------------------------ -OGroupBoxModel::OGroupBoxModel( const OGroupBoxModel* _pOriginal, const Reference<starlang::XMultiServiceFactory>& _rxFactory ) - :OControlModel( _pOriginal, _rxFactory ) -{ - DBG_CTOR( OGroupBoxModel, NULL ); -} - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OGroupBoxModel::getSupportedServiceNames() throw(RuntimeException) -{ - StringSequence aSupported = OControlModel::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_COMPONENT_GROUPBOX; - return aSupported; -} - -//------------------------------------------------------------------ -OGroupBoxModel::~OGroupBoxModel() -{ - DBG_DTOR( OGroupBoxModel, NULL ); -} - -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OGroupBoxModel ) - -//------------------------------------------------------------------------------ -void OGroupBoxModel::describeAggregateProperties( Sequence< Property >& _rAggregateProps ) const -{ - OControlModel::describeAggregateProperties( _rAggregateProps ); - // don't want to have the TabStop property - RemoveProperty(_rAggregateProps, PROPERTY_TABSTOP); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OGroupBoxModel::getServiceName() throw(RuntimeException) -{ - return FRM_COMPONENT_GROUPBOX; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void SAL_CALL OGroupBoxModel::write(const Reference< XObjectOutputStream>& _rxOutStream) - throw(IOException, RuntimeException) -{ - OControlModel::write(_rxOutStream); - - // Version - _rxOutStream->writeShort(0x0002); - writeHelpTextCompatibly(_rxOutStream); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OGroupBoxModel::read(const Reference< XObjectInputStream>& _rxInStream) throw(IOException, RuntimeException) -{ - OControlModel::read( _rxInStream ); - - // Version - sal_uInt16 nVersion = _rxInStream->readShort(); - DBG_ASSERT(nVersion > 0, "OGroupBoxModel::read : version 0 ? this should never have been written !"); - // ups, ist das Englisch richtig ? ;) - - if (nVersion == 2) - readHelpTextCompatibly(_rxInStream); - - if (nVersion > 0x0002) - { - OSL_FAIL("OGroupBoxModel::read : unknown version !"); - } -}; - -//================================================================== -// OGroupBoxControl -//================================================================== - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OGroupBoxControl_CreateInstance(const Reference<starlang::XMultiServiceFactory>& _rxFactory) throw (RuntimeException) -{ - return *(new OGroupBoxControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -OGroupBoxControl::OGroupBoxControl(const Reference<starlang::XMultiServiceFactory>& _rxFactory) - :OControl(_rxFactory, VCL_CONTROL_GROUPBOX) -{ -} - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OGroupBoxControl::getSupportedServiceNames() throw(RuntimeException) -{ - StringSequence aSupported = OControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_GROUPBOX; - return aSupported; -} - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/GroupBox.hxx b/forms/source/component/GroupBox.hxx deleted file mode 100644 index 1c0af9dc1..000000000 --- a/forms/source/component/GroupBox.hxx +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_GROUPBOX_HXX_ -#define _FORMS_GROUPBOX_HXX_ - -#include "FormComponent.hxx" - -//......................................................................... -namespace frm -{ - -//================================================================== -// OGroupBoxModel -//================================================================== -class OGroupBoxModel - :public OControlModel -{ -public: - DECLARE_DEFAULT_LEAF_XTOR( OGroupBoxModel ); - - // XServiceInfo - IMPLEMENTATION_NAME(OGroupBoxModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps - ) const; - -protected: - DECLARE_XCLONEABLE(); -}; - -//================================================================== -// OGroupBoxControl (nur aus Kompatibilitaet zur 5.0) -//================================================================== -class OGroupBoxControl : public OControl -{ -public: - OGroupBoxControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - - // XServiceInfo - IMPLEMENTATION_NAME(OGroupBoxControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); -}; - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_GROUPBOX_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/GroupManager.cxx b/forms/source/component/GroupManager.cxx deleted file mode 100644 index 299d752ac..000000000 --- a/forms/source/component/GroupManager.cxx +++ /dev/null @@ -1,533 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "GroupManager.hxx" -#include <com/sun/star/beans/XFastPropertySet.hpp> -#include <com/sun/star/form/FormComponentType.hpp> -#include <comphelper/property.hxx> -#include <comphelper/uno3.hxx> -#include <tools/solar.h> -#include <tools/debug.hxx> - -#include "property.hrc" - -#include <algorithm> - -//......................................................................... -namespace frm -{ -//......................................................................... - -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::form; - -namespace -{ - bool isRadioButton( const Reference< XPropertySet >& _rxComponent ) - { - bool bIs = false; - if ( hasProperty( PROPERTY_CLASSID, _rxComponent ) ) - { - sal_Int16 nClassId = FormComponentType::CONTROL; - _rxComponent->getPropertyValue( PROPERTY_CLASSID ) >>= nClassId; - if ( nClassId == FormComponentType::RADIOBUTTON ) - bIs = true; - } - return bIs; - } -} - -//======================================================================== -// class OGroupCompAcc -//======================================================================== -//------------------------------------------------------------------ -OGroupCompAcc::OGroupCompAcc(const Reference<XPropertySet>& rxElement, const OGroupComp& _rGroupComp ) - :m_xComponent( rxElement ) - ,m_aGroupComp( _rGroupComp ) -{ -} - -//------------------------------------------------------------------ -sal_Bool OGroupCompAcc::operator==( const OGroupCompAcc& rCompAcc ) const -{ - return (m_xComponent == rCompAcc.GetComponent()); -} - -//------------------------------------------------------------------ -class OGroupCompAccLess : public ::std::binary_function<OGroupCompAcc, OGroupCompAcc, sal_Bool> -{ -public: - sal_Bool operator() (const OGroupCompAcc& lhs, const OGroupCompAcc& rhs) const - { - return - reinterpret_cast<sal_Int64>(lhs.m_xComponent.get()) - < reinterpret_cast<sal_Int64>(rhs.m_xComponent.get()); - } -}; - -//======================================================================== -// class OGroupComp -//======================================================================== - -//------------------------------------------------------------------ -OGroupComp::OGroupComp() - :m_nPos( -1 ) - ,m_nTabIndex( 0 ) -{ -} - -//------------------------------------------------------------------ -OGroupComp::OGroupComp(const OGroupComp& _rSource) - :m_aName( _rSource.m_aName ) - ,m_xComponent( _rSource.m_xComponent ) - ,m_xControlModel(_rSource.m_xControlModel) - ,m_nPos( _rSource.m_nPos ) - ,m_nTabIndex( _rSource.m_nTabIndex ) -{ -} - -//------------------------------------------------------------------ -OGroupComp::OGroupComp(const Reference<XPropertySet>& rxSet, sal_Int32 nInsertPos ) - : m_aName( OGroupManager::GetGroupName( rxSet ) ) - , m_xComponent( rxSet ) - , m_xControlModel(rxSet,UNO_QUERY) - , m_nPos( nInsertPos ) - , m_nTabIndex(0) -{ - if (m_xComponent.is()) - { - if (hasProperty( PROPERTY_TABINDEX, m_xComponent ) ) - // Indices kleiner 0 werden wie 0 behandelt - m_nTabIndex = Max(getINT16(m_xComponent->getPropertyValue( PROPERTY_TABINDEX )) , sal_Int16(0)); - } -} - -//------------------------------------------------------------------ -sal_Bool OGroupComp::operator==( const OGroupComp& rComp ) const -{ - return m_nTabIndex == rComp.GetTabIndex() && m_nPos == rComp.GetPos(); -} - -//------------------------------------------------------------------ -class OGroupCompLess : public ::std::binary_function<OGroupComp, OGroupComp, sal_Bool> -{ -public: - sal_Bool operator() (const OGroupComp& lhs, const OGroupComp& rhs) const - { - sal_Bool bResult; - // TabIndex von 0 wird hinten einsortiert - if (lhs.m_nTabIndex == rhs.GetTabIndex()) - bResult = lhs.m_nPos < rhs.GetPos(); - else if (lhs.m_nTabIndex && rhs.GetTabIndex()) - bResult = lhs.m_nTabIndex < rhs.GetTabIndex(); - else - bResult = lhs.m_nTabIndex != 0; - return bResult; - } -}; - -//======================================================================== -// class OGroup -//======================================================================== - -DBG_NAME(OGroup) -//------------------------------------------------------------------ -OGroup::OGroup( const ::rtl::OUString& rGroupName ) - :m_aGroupName( rGroupName ) - ,m_nInsertPos(0) -{ - DBG_CTOR(OGroup,NULL); -} - -#ifdef DBG_UTIL -//------------------------------------------------------------------ -OGroup::OGroup( const OGroup& _rSource ) -:m_aCompArray(_rSource.m_aCompArray) - ,m_aCompAccArray(_rSource.m_aCompAccArray) - ,m_aGroupName(_rSource.m_aGroupName) - ,m_nInsertPos(_rSource.m_nInsertPos) -{ - DBG_CTOR(OGroup,NULL); -} -#endif - -//------------------------------------------------------------------ -OGroup::~OGroup() -{ - DBG_DTOR(OGroup,NULL); -} - -//------------------------------------------------------------------ -void OGroup::InsertComponent( const Reference<XPropertySet>& xSet ) -{ - OGroupComp aNewGroupComp( xSet, m_nInsertPos ); - sal_Int32 nPosInserted = insert_sorted(m_aCompArray, aNewGroupComp, OGroupCompLess()); - - OGroupCompAcc aNewGroupCompAcc( xSet, m_aCompArray[nPosInserted] ); - insert_sorted(m_aCompAccArray, aNewGroupCompAcc, OGroupCompAccLess()); - m_nInsertPos++; -} - -//------------------------------------------------------------------ -void OGroup::RemoveComponent( const Reference<XPropertySet>& rxElement ) -{ - sal_Int32 nGroupCompAccPos; - OGroupCompAcc aSearchCompAcc( rxElement, OGroupComp() ); - if ( seek_entry(m_aCompAccArray, aSearchCompAcc, nGroupCompAccPos, OGroupCompAccLess()) ) - { - OGroupCompAcc& aGroupCompAcc = m_aCompAccArray[nGroupCompAccPos]; - const OGroupComp& aGroupComp = aGroupCompAcc.GetGroupComponent(); - - sal_Int32 nGroupCompPos; - if ( seek_entry(m_aCompArray, aGroupComp, nGroupCompPos, OGroupCompLess()) ) - { - m_aCompAccArray.erase( m_aCompAccArray.begin() + nGroupCompAccPos ); - m_aCompArray.erase( m_aCompArray.begin() + nGroupCompPos ); - - /*============================================================ - Durch das Entfernen der GroupComp ist die Einfuegeposition - ungueltig geworden. Sie braucht hier aber nicht angepasst werden, - da sie fortlaufend vergeben wird und damit immer - aufsteigend eindeutig ist. - ============================================================*/ - } - else - { - OSL_FAIL( "OGroup::RemoveComponent: Component nicht in Gruppe" ); - } - } - else - { - OSL_FAIL( "OGroup::RemoveComponent: Component nicht in Gruppe" ); - } -} - -//------------------------------------------------------------------ -sal_Bool OGroup::operator==( const OGroup& rGroup ) const -{ - return m_aGroupName.equals(rGroup.GetGroupName()); -} - -//------------------------------------------------------------------ -class OGroupLess : public ::std::binary_function<OGroup, OGroup, sal_Bool> -{ -public: - sal_Bool operator() (const OGroup& lhs, const OGroup& rhs) const - { - return lhs.m_aGroupName < rhs.m_aGroupName; - } -}; - -//------------------------------------------------------------------ -Sequence< Reference<XControlModel> > OGroup::GetControlModels() const -{ - sal_Int32 nLen = m_aCompArray.size(); - Sequence<Reference<XControlModel> > aControlModelSeq( nLen ); - Reference<XControlModel>* pModels = aControlModelSeq.getArray(); - - ConstOGroupCompArrIterator aGroupComps = m_aCompArray.begin(); - for (sal_Int32 i = 0; i < nLen; ++i, ++pModels, ++aGroupComps) - { - *pModels = aGroupComps->GetControlModel(); - } - return aControlModelSeq; -} - -DBG_NAME(OGroupManager); -//------------------------------------------------------------------ -OGroupManager::OGroupManager(const Reference< XContainer >& _rxContainer) - :m_pCompGroup( new OGroup( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AllComponentGroup") ) ) ) - ,m_xContainer(_rxContainer) -{ - DBG_CTOR(OGroupManager,NULL); - - increment(m_refCount); - { - _rxContainer->addContainerListener(this); - } - decrement(m_refCount); -} - -//------------------------------------------------------------------ -OGroupManager::~OGroupManager() -{ - DBG_DTOR(OGroupManager,NULL); - // Alle Components und CompGroup loeschen - delete m_pCompGroup; -} - -// XPropertyChangeListener -//------------------------------------------------------------------ -void OGroupManager::disposing(const EventObject& evt) throw( RuntimeException ) -{ - Reference<XContainer> xContainer(evt.Source, UNO_QUERY); - if (xContainer.get() == m_xContainer.get()) - { - DELETEZ(m_pCompGroup); - - //////////////////////////////////////////////////////////////// - // Gruppen loeschen - m_aGroupArr.clear(); - m_xContainer.clear(); - } -} -// ----------------------------------------------------------------------------- -void OGroupManager::removeFromGroupMap(const ::rtl::OUString& _sGroupName,const Reference<XPropertySet>& _xSet) -{ - // Component aus CompGroup entfernen - m_pCompGroup->RemoveComponent( _xSet ); - - OGroupArr::iterator aFind = m_aGroupArr.find(_sGroupName); - - if ( aFind != m_aGroupArr.end() ) - { - // Gruppe vorhanden - aFind->second.RemoveComponent( _xSet ); - - // Wenn Anzahl der Gruppenelemente == 1 ist, Gruppe deaktivieren - sal_Int32 nCount = aFind->second.Count(); - if ( nCount == 1 || nCount == 0 ) - { - OActiveGroups::iterator aActiveFind = ::std::find( - m_aActiveGroupMap.begin(), - m_aActiveGroupMap.end(), - aFind - ); - if ( aActiveFind != m_aActiveGroupMap.end() ) - { - // the group is active. Deactivate it if the remaining component - // is *no* radio button - if ( nCount == 0 || !isRadioButton( aFind->second.GetObject( 0 ) ) ) - m_aActiveGroupMap.erase( aActiveFind ); - } - } - } - - - // Bei Component als PropertyChangeListener abmelden - _xSet->removePropertyChangeListener( PROPERTY_NAME, this ); - if (hasProperty(PROPERTY_GROUP_NAME, _xSet)) - _xSet->removePropertyChangeListener( PROPERTY_GROUP_NAME, this ); - if (hasProperty(PROPERTY_TABINDEX, _xSet)) - _xSet->removePropertyChangeListener( PROPERTY_TABINDEX, this ); -} -//------------------------------------------------------------------ -void SAL_CALL OGroupManager::propertyChange(const PropertyChangeEvent& evt) throw ( ::com::sun::star::uno::RuntimeException) -{ - Reference<XPropertySet> xSet(evt.Source, UNO_QUERY); - - // Component aus Gruppe entfernen - ::rtl::OUString sGroupName; - if (hasProperty( PROPERTY_GROUP_NAME, xSet )) - xSet->getPropertyValue( PROPERTY_GROUP_NAME ) >>= sGroupName; - if (evt.PropertyName == PROPERTY_NAME) { - if (sGroupName.getLength() > 0) - return; // group hasn't changed; ignore this name change. - // no GroupName; use Name as GroupNme - evt.OldValue >>= sGroupName; - } - else if (evt.PropertyName == PROPERTY_GROUP_NAME) { - evt.OldValue >>= sGroupName; - if (sGroupName.getLength() == 0) { - // No prior GroupName; fallback to Nme - xSet->getPropertyValue( PROPERTY_NAME ) >>= sGroupName; - } - } - else - sGroupName = GetGroupName( xSet ); - - removeFromGroupMap(sGroupName,xSet); - - // Component neu einordnen - InsertElement( xSet ); -} - -// XContainerListener -//------------------------------------------------------------------ -void SAL_CALL OGroupManager::elementInserted(const ContainerEvent& Event) throw ( ::com::sun::star::uno::RuntimeException) -{ - Reference< XPropertySet > xProps; - Event.Element >>= xProps; - if ( xProps.is() ) - InsertElement( xProps ); -} - -//------------------------------------------------------------------ -void SAL_CALL OGroupManager::elementRemoved(const ContainerEvent& Event) throw ( ::com::sun::star::uno::RuntimeException) -{ - Reference<XPropertySet> xProps; - Event.Element >>= xProps; - if ( xProps.is() ) - RemoveElement( xProps ); -} - -//------------------------------------------------------------------ -void SAL_CALL OGroupManager::elementReplaced(const ContainerEvent& Event) throw ( ::com::sun::star::uno::RuntimeException) -{ - Reference<XPropertySet> xProps; - Event.ReplacedElement >>= xProps; - if ( xProps.is() ) - RemoveElement( xProps ); - - xProps.clear(); - Event.Element >>= xProps; - if ( xProps.is() ) - InsertElement( xProps ); -} - -// Other functions -//------------------------------------------------------------------ -Sequence<Reference<XControlModel> > OGroupManager::getControlModels() -{ - return m_pCompGroup->GetControlModels(); -} - -//------------------------------------------------------------------ -sal_Int32 OGroupManager::getGroupCount() -{ - return m_aActiveGroupMap.size(); -} - -//------------------------------------------------------------------ -void OGroupManager::getGroup(sal_Int32 nGroup, Sequence< Reference<XControlModel> >& _rGroup, ::rtl::OUString& _rName) -{ - OSL_ENSURE(nGroup >= 0 && (size_t)nGroup < m_aActiveGroupMap.size(),"OGroupManager::getGroup: Invalid group index!"); - OGroupArr::iterator aGroupPos = m_aActiveGroupMap[nGroup]; - _rName = aGroupPos->second.GetGroupName(); - _rGroup = aGroupPos->second.GetControlModels(); -} - -//------------------------------------------------------------------ -void OGroupManager::getGroupByName(const ::rtl::OUString& _rName, Sequence< Reference<XControlModel> >& _rGroup) -{ - OGroupArr::iterator aFind = m_aGroupArr.find(_rName); - if ( aFind != m_aGroupArr.end() ) - _rGroup = aFind->second.GetControlModels(); -} - -//------------------------------------------------------------------ -void OGroupManager::InsertElement( const Reference<XPropertySet>& xSet ) -{ - // Nur ControlModels - Reference<XControlModel> xControl(xSet, UNO_QUERY); - if (!xControl.is() ) - return; - - // Component in CompGroup aufnehmen - m_pCompGroup->InsertComponent( xSet ); - - // Component in Gruppe aufnehmen - ::rtl::OUString sGroupName( GetGroupName( xSet ) ); - - OGroupArr::iterator aFind = m_aGroupArr.find(sGroupName); - - if ( aFind == m_aGroupArr.end() ) - { - aFind = m_aGroupArr.insert(OGroupArr::value_type(sGroupName,OGroup(sGroupName))).first; - } - - aFind->second.InsertComponent( xSet ); - - // if we have at least 2 elements in the group, then this is an "active group" - bool bActivateGroup = aFind->second.Count() == 2; - - // Additionally, if the component is a radio button, then it's group becomes active, - // too. With this, we ensure that in a container with n radio buttons which all are - // in different groups the selection still works reliably (means that all radios can be - // clicked independently) - if ( aFind->second.Count() == 1 ) - { - if ( isRadioButton( xSet ) ) - bActivateGroup = true; - } - - if ( bActivateGroup ) - { - OActiveGroups::iterator aAlreadyExistent = ::std::find( - m_aActiveGroupMap.begin(), - m_aActiveGroupMap.end(), - aFind - ); - if ( aAlreadyExistent == m_aActiveGroupMap.end() ) - m_aActiveGroupMap.push_back( aFind ); - } - - - // Bei Component als PropertyChangeListener anmelden - xSet->addPropertyChangeListener( PROPERTY_NAME, this ); - if (hasProperty(PROPERTY_GROUP_NAME, xSet)) - xSet->addPropertyChangeListener( PROPERTY_GROUP_NAME, this ); - - // Tabindex muss nicht jeder unterstuetzen - if (hasProperty(PROPERTY_TABINDEX, xSet)) - xSet->addPropertyChangeListener( PROPERTY_TABINDEX, this ); - -} - -//------------------------------------------------------------------ -void OGroupManager::RemoveElement( const Reference<XPropertySet>& xSet ) -{ - // Nur ControlModels - Reference<XControlModel> xControl(xSet, UNO_QUERY); - if (!xControl.is() ) - return; - - // Component aus Gruppe entfernen - ::rtl::OUString sGroupName( GetGroupName( xSet ) ); - - removeFromGroupMap(sGroupName,xSet); -} - -::rtl::OUString OGroupManager::GetGroupName( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> xComponent ) -{ - if (!xComponent.is()) - return ::rtl::OUString(); - ::rtl::OUString sGroupName; - if (hasProperty( PROPERTY_GROUP_NAME, xComponent )) { - xComponent->getPropertyValue( PROPERTY_GROUP_NAME ) >>= sGroupName; - if (sGroupName.getLength() == 0) - xComponent->getPropertyValue( PROPERTY_NAME ) >>= sGroupName; - } - else - xComponent->getPropertyValue( PROPERTY_NAME ) >>= sGroupName; - return sGroupName; -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/GroupManager.hxx b/forms/source/component/GroupManager.hxx deleted file mode 100644 index 312151ac2..000000000 --- a/forms/source/component/GroupManager.hxx +++ /dev/null @@ -1,234 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_GROUPMANAGER_HXX_ -#define _FRM_GROUPMANAGER_HXX_ - -#include <com/sun/star/sdbc/XRowSet.hpp> -#include <com/sun/star/awt/XControlModel.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/beans/XPropertyChangeListener.hpp> -#include <com/sun/star/container/XContainerListener.hpp> -#include <com/sun/star/container/XContainer.hpp> -#include <cppuhelper/implbase2.hxx> -#include <comphelper/stl_types.hxx> -#include <comphelper/types.hxx> - -#include <algorithm> - -using namespace comphelper; - -/*======================================================================== -Funktionsweise GroupManager: - -Der GroupManager horcht an der starform, ob FormComponents eingefuegt oder entfernt -werden. Zusaetzlich horcht er bei den FormComponents an den Properties -"Name" und "TabIndex". Mit diesen Infos aktualisiert er seine Gruppen. - -Der GroupManager verwaltet eine Gruppe, in der alle Controls nach TabIndex -geordnet sind, und ein Array von Gruppen, in dem jede FormComponent noch -einmal einer Gruppe dem Namen nach zugeordnet wird. -Die einzelnen Gruppen werden ueber eine Map aktiviert, wenn sie mehr als -ein Element besitzen. - -Die Gruppen verwalten intern die FormComponents in zwei Arrays. In dem -GroupCompArray werden die Components nach TabIndex und Einfuegepostion -sortiert. Da auf dieses Array ueber die FormComponent zugegriffen -wird, gibt es noch das GroupCompAccessArray, in dem die FormComponents -nach ihrer Speicheradresse sortiert sind. Jedes Element des -GroupCompAccessArrays ist mit einem Element des GroupCompArrays verpointert. - -========================================================================*/ - -//......................................................................... -namespace frm -{ -//......................................................................... - -//======================================================================== - template <class ELEMENT, class LESS_COMPARE> - sal_Int32 insert_sorted(::std::vector<ELEMENT>& _rArray, const ELEMENT& _rNewElement, const LESS_COMPARE& _rCompareOp) - { - typename ::std::vector<ELEMENT>::iterator aInsertPos = ::std::lower_bound( - _rArray.begin(), - _rArray.end(), - _rNewElement, - _rCompareOp - ); - aInsertPos = _rArray.insert(aInsertPos, _rNewElement); - return aInsertPos - _rArray.begin(); - } - - template <class ELEMENT, class LESS_COMPARE> - sal_Bool seek_entry(const ::std::vector<ELEMENT>& _rArray, const ELEMENT& _rNewElement, sal_Int32& nPos, const LESS_COMPARE& _rCompareOp) - { - typename ::std::vector<ELEMENT>::const_iterator aExistentPos = ::std::lower_bound( - _rArray.begin(), - _rArray.end(), - _rNewElement, - _rCompareOp - ); - if ((aExistentPos != _rArray.end()) && (*aExistentPos == _rNewElement)) - { // we have a valid "lower or equal" element and it's really "equal" - nPos = aExistentPos - _rArray.begin(); - return sal_True; - } - nPos = -1; - return sal_False; - } - -//======================================================================== -class OGroupComp -{ - ::rtl::OUString m_aName; - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> m_xComponent; - ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel> m_xControlModel; - sal_Int32 m_nPos; - sal_Int16 m_nTabIndex; - - friend class OGroupCompLess; - -public: - OGroupComp(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& rxElement, sal_Int32 nInsertPos ); - OGroupComp(const OGroupComp& _rSource); - OGroupComp(); - - sal_Bool operator==( const OGroupComp& rComp ) const; - - inline const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& GetComponent() const { return m_xComponent; } - inline const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel>& GetControlModel() const { return m_xControlModel; } - - sal_Int32 GetPos() const { return m_nPos; } - sal_Int16 GetTabIndex() const { return m_nTabIndex; } - ::rtl::OUString GetName() const { return m_aName; } -}; - -DECLARE_STL_VECTOR(OGroupComp, OGroupCompArr); - -//======================================================================== -class OGroupComp; -class OGroupCompAcc -{ - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> m_xComponent; - - OGroupComp m_aGroupComp; - - friend class OGroupCompAccLess; - -public: - OGroupCompAcc(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& rxElement, const OGroupComp& _rGroupComp ); - - sal_Bool operator==( const OGroupCompAcc& rCompAcc ) const; - - inline const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& GetComponent() const { return m_xComponent; } - const OGroupComp& GetGroupComponent() const { return m_aGroupComp; } -}; - -DECLARE_STL_VECTOR(OGroupCompAcc, OGroupCompAccArr); - -//======================================================================== -class OGroup -{ - OGroupCompArr m_aCompArray; - OGroupCompAccArr m_aCompAccArray; - - ::rtl::OUString m_aGroupName; - sal_uInt16 m_nInsertPos; // Die Einfugeposition der GroupComps wird von der Gruppe bestimmt. - - friend class OGroupLess; - -public: - OGroup( const ::rtl::OUString& rGroupName ); -#ifdef DBG_UTIL - OGroup( const OGroup& _rSource ); // just to ensure the DBG_CTOR call -#endif - virtual ~OGroup(); - - sal_Bool operator==( const OGroup& rGroup ) const; - - ::rtl::OUString GetGroupName() const { return m_aGroupName; } - ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel> > GetControlModels() const; - - void InsertComponent( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& rxElement ); - void RemoveComponent( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& rxElement ); - sal_uInt16 Count() const { return sal::static_int_cast< sal_uInt16 >(m_aCompArray.size()); } - const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& GetObject( sal_uInt16 nP ) const - { return m_aCompArray[nP].GetComponent(); } -}; - -DECLARE_STL_USTRINGACCESS_MAP(OGroup, OGroupArr); -DECLARE_STL_VECTOR(OGroupArr::iterator, OActiveGroups); - -//======================================================================== -class OGroupManager : public ::cppu::WeakImplHelper2< ::com::sun::star::beans::XPropertyChangeListener, ::com::sun::star::container::XContainerListener> -{ - OGroup* m_pCompGroup; // Alle Components nach TabIndizes sortiert - OGroupArr m_aGroupArr; // Alle Components nach Gruppen sortiert - OActiveGroups m_aActiveGroupMap; // In dieser Map werden die Indizes aller Gruppen gehalten, - // die mehr als 1 Element haben - - ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainer > - m_xContainer; - - // Helper functions - void InsertElement( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& rxElement ); - void RemoveElement( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& rxElement ); - void removeFromGroupMap(const ::rtl::OUString& _sGroupName,const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xSet); - -public: - OGroupManager(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainer >& _rxContainer); - virtual ~OGroupManager(); - -// ::com::sun::star::lang::XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::beans::XPropertyChangeListener - virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw ( ::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::container::XContainerListener - virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& _rEvent) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& _rEvent) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& _rEvent) throw ( ::com::sun::star::uno::RuntimeException); - -// Other functions - sal_Int32 getGroupCount(); - void getGroup(sal_Int32 nGroup, ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel> >& _rGroup, ::rtl::OUString& Name); - void getGroupByName(const ::rtl::OUString& Name, ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel> >& _rGroup); - ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel> > getControlModels(); - - static ::rtl::OUString GetGroupName( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> xComponent ); -}; - - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FRM_GROUPMANAGER_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Hidden.cxx b/forms/source/component/Hidden.cxx deleted file mode 100644 index 75193f08f..000000000 --- a/forms/source/component/Hidden.cxx +++ /dev/null @@ -1,190 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "Hidden.hxx" -#include "property.hxx" -#include "property.hrc" -#include "services.hxx" -#include <tools/debug.hxx> -#include <comphelper/basicio.hxx> - -//......................................................................... -namespace frm -{ -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OHiddenModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException) -{ - return *(new OHiddenModel(_rxFactory)); -} - -//------------------------------------------------------------------ -DBG_NAME( OHiddenModel ) -//------------------------------------------------------------------ -OHiddenModel::OHiddenModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OControlModel(_rxFactory, ::rtl::OUString()) -{ - DBG_CTOR( OHiddenModel, NULL ); - m_nClassId = FormComponentType::HIDDENCONTROL; -} - -//------------------------------------------------------------------ -OHiddenModel::OHiddenModel( const OHiddenModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OControlModel( _pOriginal, _rxFactory ) -{ - DBG_CTOR( OHiddenModel, NULL ); - m_sHiddenValue = _pOriginal->m_sHiddenValue; -} - -//------------------------------------------------------------------------------ -OHiddenModel::~OHiddenModel( ) -{ - DBG_CTOR( OHiddenModel, NULL ); -} - -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OHiddenModel ) - -//------------------------------------------------------------------------------ -void OHiddenModel::getFastPropertyValue(Any& _rValue, sal_Int32 _nHandle) const -{ - switch (_nHandle) - { - case PROPERTY_ID_HIDDEN_VALUE : _rValue <<= m_sHiddenValue; break; - default: - OControlModel::getFastPropertyValue(_rValue, _nHandle); - } -} - -//------------------------------------------------------------------------------ -void OHiddenModel::setFastPropertyValue_NoBroadcast(sal_Int32 _nHandle, const Any& _rValue) throw (com::sun::star::uno::Exception) -{ - switch (_nHandle) - { - case PROPERTY_ID_HIDDEN_VALUE : - DBG_ASSERT(_rValue.getValueType().getTypeClass() == TypeClass_STRING, "OHiddenModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - _rValue >>= m_sHiddenValue; - break; - default: - OControlModel::setFastPropertyValue_NoBroadcast(_nHandle, _rValue); - } -} - -//------------------------------------------------------------------------------ -sal_Bool OHiddenModel::convertFastPropertyValue( - Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue) - throw (IllegalArgumentException) -{ - sal_Bool bModified(sal_False); - switch (_nHandle) - { - case PROPERTY_ID_HIDDEN_VALUE : - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_sHiddenValue); - break; - default: - bModified = OControlModel::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue); - break; - } - return bModified; -} - -//------------------------------------------------------------------------------ -void OHiddenModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_BASE_PROPERTIES(4) - DECL_PROP2(CLASSID, sal_Int16, READONLY, TRANSIENT); - DECL_PROP1(HIDDEN_VALUE, ::rtl::OUString, BOUND); - DECL_PROP1(NAME, ::rtl::OUString, BOUND); - DECL_PROP1(TAG, ::rtl::OUString, BOUND); - END_DESCRIBE_PROPERTIES(); -} - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OHiddenModel::getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException) -{ - StringSequence aSupported( 2 ); - aSupported[ 0 ] = FRM_SUN_COMPONENT_HIDDENCONTROL; - aSupported[ 1 ] = FRM_SUN_FORMCOMPONENT; - return aSupported; -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OHiddenModel::getServiceName() throw(RuntimeException) -{ - return FRM_COMPONENT_HIDDEN; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void SAL_CALL OHiddenModel::write(const Reference<XObjectOutputStream>& _rxOutStream) - throw(IOException, RuntimeException) -{ - // Version - _rxOutStream->writeShort(0x0002); - - // Wert - _rxOutStream << m_sHiddenValue; - - OControlModel::write(_rxOutStream); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OHiddenModel::read(const Reference<XObjectInputStream>& _rxInStream) throw(IOException, RuntimeException) -{ - // Version - sal_uInt16 nVersion = _rxInStream->readShort(); - - // Name - DBG_ASSERT(nVersion != 1, "OHiddenModel::read : this version is obsolete !"); - switch (nVersion) - { - case 1 : { ::rtl::OUString sDummy; _rxInStream >> sDummy; _rxInStream >> m_sHiddenValue; } break; - case 2 : _rxInStream >> m_sHiddenValue; break; - default : OSL_FAIL("OHiddenModel::read : unknown version !"); m_sHiddenValue = ::rtl::OUString(); - } - OControlModel::read(_rxInStream); -} - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Hidden.hxx b/forms/source/component/Hidden.hxx deleted file mode 100644 index 98bbcdd6c..000000000 --- a/forms/source/component/Hidden.hxx +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_HIDDEN_HXX_ -#define _FORMS_HIDDEN_HXX_ - -#include "FormComponent.hxx" - -//......................................................................... -namespace frm -{ - -//================================================================== -// OHiddenModel -//================================================================== -class OHiddenModel - :public OControlModel -{ - ::rtl::OUString m_sHiddenValue; - -public: - DECLARE_DEFAULT_LEAF_XTOR( OHiddenModel ); - - // OPropertySetHelper - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const; - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw (::com::sun::star::uno::Exception); - virtual sal_Bool SAL_CALL convertFastPropertyValue( - ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw (::com::sun::star::lang::IllegalArgumentException); - - // XServiceInfo - IMPLEMENTATION_NAME(OHiddenModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - - // prevent method hiding - using OControlModel::getFastPropertyValue; - -protected: - DECLARE_XCLONEABLE( ); -}; - -#endif // _FORMS_HIDDEN_HXX_ - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/ImageButton.cxx b/forms/source/component/ImageButton.cxx deleted file mode 100644 index 470ddefc2..000000000 --- a/forms/source/component/ImageButton.cxx +++ /dev/null @@ -1,275 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "ImageButton.hxx" -#include <tools/debug.hxx> -#include <tools/urlobj.hxx> -#include <vcl/svapp.hxx> -#include <osl/mutex.hxx> -#include <comphelper/basicio.hxx> -#include <com/sun/star/awt/MouseButton.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; - -//================================================================== -//= OImageButtonModel -//================================================================== -DBG_NAME(OImageButtonModel) -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OImageButtonModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OImageButtonModel(_rxFactory)); -} - -//------------------------------------------------------------------ -OImageButtonModel::OImageButtonModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OClickableImageBaseModel( _rxFactory, VCL_CONTROLMODEL_IMAGEBUTTON, FRM_SUN_CONTROL_IMAGEBUTTON ) - // use the old control name for compytibility reasons -{ - DBG_CTOR(OImageButtonModel, NULL); - m_nClassId = FormComponentType::IMAGEBUTTON; -} - -//------------------------------------------------------------------ -OImageButtonModel::OImageButtonModel( const OImageButtonModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory) - :OClickableImageBaseModel( _pOriginal, _rxFactory ) -{ - DBG_CTOR(OImageButtonModel, NULL); - implInitializeImageURL(); -} - -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OImageButtonModel ) - -//------------------------------------------------------------------------------ -OImageButtonModel::~OImageButtonModel() -{ - DBG_DTOR(OImageButtonModel, NULL); -} - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence OImageButtonModel::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OClickableImageBaseModel::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_COMPONENT_IMAGEBUTTON; - return aSupported; -} - -//------------------------------------------------------------------------------ -void OImageButtonModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 5, OClickableImageBaseModel ) - DECL_PROP1(BUTTONTYPE, FormButtonType, BOUND); - DECL_PROP1(DISPATCHURLINTERNAL, sal_Bool, BOUND); - DECL_PROP1(TARGET_URL, ::rtl::OUString, BOUND); - DECL_PROP1(TARGET_FRAME, ::rtl::OUString, BOUND); - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -::rtl::OUString OImageButtonModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_IMAGEBUTTON; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void OImageButtonModel::write(const Reference<XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OControlModel::write(_rxOutStream); - - // Version - _rxOutStream->writeShort(0x0003); - _rxOutStream->writeShort((sal_uInt16)m_eButtonType); - - ::rtl::OUString sTmp(INetURLObject::decode( m_sTargetURL, '%', INetURLObject::DECODE_UNAMBIGUOUS)); - _rxOutStream << sTmp; - _rxOutStream << m_sTargetFrame; - writeHelpTextCompatibly(_rxOutStream); -} - -//------------------------------------------------------------------------------ -void OImageButtonModel::read(const Reference<XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OControlModel::read(_rxInStream); - - // Version - sal_uInt16 nVersion = _rxInStream->readShort(); - - switch (nVersion) - { - case 0x0001: - { - m_eButtonType = (FormButtonType)_rxInStream->readShort(); - } - break; - case 0x0002: - { - m_eButtonType = (FormButtonType)_rxInStream->readShort(); - _rxInStream >> m_sTargetURL; - _rxInStream >> m_sTargetFrame; - } - break; - case 0x0003: - { - m_eButtonType = (FormButtonType)_rxInStream->readShort(); - _rxInStream >> m_sTargetURL; - _rxInStream >> m_sTargetFrame; - readHelpTextCompatibly(_rxInStream); - } - break; - - default : - OSL_FAIL("OImageButtonModel::read : unknown version !"); - m_eButtonType = FormButtonType_PUSH; - m_sTargetURL = ::rtl::OUString(); - m_sTargetFrame = ::rtl::OUString(); - break; - } -} - -//================================================================== -// OImageButtonControl -//================================================================== -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OImageButtonControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OImageButtonControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OImageButtonControl::_getTypes() -{ - static Sequence<Type> aTypes; - if (!aTypes.getLength()) - aTypes = concatSequences(OClickableImageBaseControl::_getTypes(), OImageButtonControl_BASE::getTypes()); - return aTypes; -} - -//------------------------------------------------------------------------------ -StringSequence OImageButtonControl::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OClickableImageBaseControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_IMAGEBUTTON; - return aSupported; -} - -//------------------------------------------------------------------------------ -OImageButtonControl::OImageButtonControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OClickableImageBaseControl(_rxFactory, VCL_CONTROL_IMAGEBUTTON) -{ - increment(m_refCount); - { - // als MouseListener anmelden - Reference< awt::XWindow > xComp; - query_aggregation( m_xAggregate, xComp); - if (xComp.is()) - xComp->addMouseListener( static_cast< awt::XMouseListener* >( this ) ); - } - decrement(m_refCount); -} - -// UNO Anbindung -//------------------------------------------------------------------------------ -Any SAL_CALL OImageButtonControl::queryAggregation(const Type& _rType) throw (RuntimeException) -{ - Any aReturn = OClickableImageBaseControl::queryAggregation(_rType); - if (!aReturn.hasValue()) - aReturn = OImageButtonControl_BASE::queryInterface(_rType); - - return aReturn; -} - -//------------------------------------------------------------------------------ -void OImageButtonControl::mousePressed(const awt::MouseEvent& e) throw ( ::com::sun::star::uno::RuntimeException) -{ - SolarMutexGuard aSolarGuard; - - if (e.Buttons != awt::MouseButton::LEFT) - return; - - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - if( m_aApproveActionListeners.getLength() ) - { - // if there are listeners, start the action in an own thread, to not allow - // them to block us here (we're in the application's main thread) - getImageProducerThread()->OComponentEventThread::addEvent( &e ); - } - else - { - // Sonst nicht. Dann darf man aber auf keinen Fal die Listener - // benachrichtigen, auch dann nicht, wenn er spaeter hinzukommt. - aGuard.clear(); - actionPerformed_Impl( sal_False, e ); - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL OImageButtonControl::mouseReleased(const awt::MouseEvent& /*e*/) throw ( RuntimeException) -{ -} - -//------------------------------------------------------------------------------ -void SAL_CALL OImageButtonControl::mouseEntered(const awt::MouseEvent& /*e*/) throw ( RuntimeException) -{ -} - -//------------------------------------------------------------------------------ -void SAL_CALL OImageButtonControl::mouseExited(const awt::MouseEvent& /*e*/) throw ( RuntimeException) -{ -} - - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/ImageButton.hxx b/forms/source/component/ImageButton.hxx deleted file mode 100644 index 2507e3666..000000000 --- a/forms/source/component/ImageButton.hxx +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_IMAGE_BUTTON_HXX_ -#define _FRM_IMAGE_BUTTON_HXX_ - -#include "clickableimage.hxx" -#include <com/sun/star/awt/XMouseListener.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -// OImageButtonModel -//================================================================== -class OImageButtonModel - :public OClickableImageBaseModel -{ -public: - DECLARE_DEFAULT_LEAF_XTOR( OImageButtonModel ); - -// ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(OImageButtonModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - -// ::com::sun::star::io::XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - -protected: - DECLARE_XCLONEABLE(); -}; - -//================================================================== -// OImageButtonControl -//================================================================== -typedef ::cppu::ImplHelper1< ::com::sun::star::awt::XMouseListener> OImageButtonControl_BASE; -class OImageButtonControl : public OClickableImageBaseControl, - public OImageButtonControl_BASE -{ -protected: - // UNO Anbindung - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - OImageButtonControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - - // XServiceInfo - IMPLEMENTATION_NAME(OImageButtonControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // UNO Anbindung - DECLARE_UNO3_AGG_DEFAULTS(OImageButtonControl, OClickableImageBaseControl); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - // XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException) - { OControl::disposing(_rSource); } - - // XMouseListener - virtual void SAL_CALL mousePressed(const ::com::sun::star::awt::MouseEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL mouseReleased(const ::com::sun::star::awt::MouseEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL mouseEntered(const ::com::sun::star::awt::MouseEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL mouseExited(const ::com::sun::star::awt::MouseEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - - // prevent method hiding - using OClickableImageBaseControl::disposing; -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FRM_IMAGE_BUTTON_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/ImageControl.cxx b/forms/source/component/ImageControl.cxx deleted file mode 100644 index 05a676d0e..000000000 --- a/forms/source/component/ImageControl.cxx +++ /dev/null @@ -1,1021 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "ImageControl.hxx" - -#include "property.hrc" -#include "frm_resource.hrc" -#include "frm_resource.hxx" -#include "services.hxx" -#include "componenttools.hxx" - -#include <svtools/imageresourceaccess.hxx> -#include <unotools/ucblockbytes.hxx> -#include <sfx2/filedlghelper.hxx> -#include <com/sun/star/awt/XPopupMenu.hpp> -#include <com/sun/star/awt/PopupMenuDirection.hpp> -#include <com/sun/star/ui/dialogs/TemplateDescription.hpp> -#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp> -#include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> -#include <com/sun/star/ui/dialogs/XFilePicker.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/awt/MouseButton.hpp> -#include <com/sun/star/awt/XWindow.hpp> -#include <com/sun/star/awt/XDialog.hpp> -#include <com/sun/star/io/XActiveDataSink.hpp> -#include <com/sun/star/io/NotConnectedException.hpp> -#include <com/sun/star/beans/PropertyValue.hpp> -#include <com/sun/star/graphic/XGraphic.hpp> -#include <com/sun/star/graphic/GraphicObject.hpp> -#include <tools/urlobj.hxx> -#include <tools/stream.hxx> -#include <tools/debug.hxx> -#include <tools/diagnose_ex.h> -#include <vcl/svapp.hxx> -#include <unotools/streamhelper.hxx> -#include <comphelper/extract.hxx> -#include <comphelper/guarding.hxx> -#include <unotools/ucbstreamhelper.hxx> -#include <svl/urihelper.hxx> - -#include <memory> - -#define ID_OPEN_GRAPHICS 1 -#define ID_CLEAR_GRAPHICS 2 - -//......................................................................... -namespace frm -{ -//......................................................................... -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::ui::dialogs; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::graphic; -using namespace ::com::sun::star::frame; - -//============================================================================== -//= OImageControlModel -//============================================================================== -namespace -{ - enum ImageStoreType - { - ImageStoreBinary, - ImageStoreLink, - - ImageStoreInvalid - }; - - ImageStoreType lcl_getImageStoreType( const sal_Int32 _nFieldType ) - { - // binary/longvarchar types could be used to store images in binary representation - if ( ( _nFieldType == DataType::BINARY ) - || ( _nFieldType == DataType::VARBINARY ) - || ( _nFieldType == DataType::LONGVARBINARY ) - || ( _nFieldType == DataType::OTHER ) - || ( _nFieldType == DataType::OBJECT ) - || ( _nFieldType == DataType::BLOB ) - || ( _nFieldType == DataType::LONGVARCHAR ) - || ( _nFieldType == DataType::CLOB ) - ) - return ImageStoreBinary; - - // char types could be used to store links to images - if ( ( _nFieldType == DataType::CHAR ) - || ( _nFieldType == DataType::VARCHAR ) - ) - return ImageStoreLink; - - return ImageStoreInvalid; - } -} - -//============================================================================== -// OImageControlModel -//============================================================================== - -//------------------------------------------------------------------------------ -InterfaceRef SAL_CALL OImageControlModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OImageControlModel(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OImageControlModel::_getTypes() -{ - return concatSequences( - OBoundControlModel::_getTypes(), - OImageControlModel_Base::getTypes() - ); -} - -DBG_NAME(OImageControlModel) -//------------------------------------------------------------------ -OImageControlModel::OImageControlModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControlModel( _rxFactory, VCL_CONTROLMODEL_IMAGECONTROL, FRM_SUN_CONTROL_IMAGECONTROL, sal_False, sal_False, sal_False ) - // use the old control name for compytibility reasons - ,m_pImageProducer( NULL ) - ,m_bExternalGraphic( true ) - ,m_bReadOnly( sal_False ) - ,m_sImageURL() - ,m_xGraphicObject() -{ - DBG_CTOR( OImageControlModel, NULL ); - m_nClassId = FormComponentType::IMAGECONTROL; - initOwnValueProperty( PROPERTY_IMAGE_URL ); - - implConstruct(); -} - -//------------------------------------------------------------------ -OImageControlModel::OImageControlModel( const OImageControlModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory ) - :OBoundControlModel( _pOriginal, _rxFactory ) - // use the old control name for compytibility reasons - ,m_pImageProducer( NULL ) - ,m_bExternalGraphic( true ) - ,m_bReadOnly( _pOriginal->m_bReadOnly ) - ,m_sImageURL( _pOriginal->m_sImageURL ) - ,m_xGraphicObject( _pOriginal->m_xGraphicObject ) -{ - DBG_CTOR( OImageControlModel, NULL ); - implConstruct(); - - osl_incrementInterlockedCount( &m_refCount ); - { - // simulate a propertyChanged event for the ImageURL - ::osl::MutexGuard aGuard( m_aMutex ); - impl_handleNewImageURL_lck( eOther ); - } - osl_decrementInterlockedCount( &m_refCount ); -} - -//------------------------------------------------------------------ -void OImageControlModel::implConstruct() -{ - m_pImageProducer = new ImageProducer; - m_xImageProducer = m_pImageProducer; - m_pImageProducer->SetDoneHdl( LINK( this, OImageControlModel, OnImageImportDone ) ); -} - -//------------------------------------------------------------------ -OImageControlModel::~OImageControlModel() -{ - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - - DBG_DTOR(OImageControlModel,NULL); -} - -// XCloneable -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OImageControlModel ) - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence OImageControlModel::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControlModel::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_COMPONENT_IMAGECONTROL; - return aSupported; -} - -//------------------------------------------------------------------------------ -Any SAL_CALL OImageControlModel::queryAggregation(const Type& _rType) throw (RuntimeException) -{ - // oder matters: we want to "override" the XImageProducer interface of the aggreate with out - // own XImageProducer interface, thus we need to query OImageControlModel_Base first - Any aReturn = OImageControlModel_Base::queryInterface( _rType ); - - // BUT: _don't_ let it feel responsible for the XTypeProvider interface - // (as this is implemented by our base class in the proper way) - if ( _rType.equals( ::getCppuType( static_cast< Reference< XTypeProvider >* >( NULL ) ) ) - || !aReturn.hasValue() - ) - aReturn = OBoundControlModel::queryAggregation( _rType ); - - return aReturn; -} - -//------------------------------------------------------------------------------ -sal_Bool OImageControlModel::approveDbColumnType( sal_Int32 _nColumnType ) -{ - return ImageStoreInvalid != lcl_getImageStoreType( _nColumnType ); -} - -//------------------------------------------------------------------------------ -void OImageControlModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const -{ - switch (nHandle) - { - case PROPERTY_ID_READONLY: - rValue <<= (sal_Bool)m_bReadOnly; - break; - case PROPERTY_ID_IMAGE_URL: - rValue <<= m_sImageURL; - break; - case PROPERTY_ID_GRAPHIC: - rValue <<= m_xGraphicObject.is() ? m_xGraphicObject->getGraphic() : Reference< XGraphic >(); - break; - default: - OBoundControlModel::getFastPropertyValue(rValue, nHandle); - } -} - -//------------------------------------------------------------------------------ -void OImageControlModel::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) throw ( ::com::sun::star::uno::Exception) -{ - switch (nHandle) - { - case PROPERTY_ID_READONLY : - DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_BOOLEAN, "OImageControlModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - m_bReadOnly = getBOOL(rValue); - break; - - case PROPERTY_ID_IMAGE_URL: - OSL_VERIFY( rValue >>= m_sImageURL ); - impl_handleNewImageURL_lck( eOther ); - { - ControlModelLock aLock( *this ); - // that's a fake ... onValuePropertyChange expects to receive the only lock to our instance, - // but we're already called with our mutex locked ... - onValuePropertyChange( aLock ); - } - break; - - case PROPERTY_ID_GRAPHIC: - { - Reference< XGraphic > xGraphic; - OSL_VERIFY( rValue >>= xGraphic ); - if ( !xGraphic.is() ) - m_xGraphicObject.clear(); - else - { - m_xGraphicObject = GraphicObject::create( m_aContext.getUNOContext() ); - m_xGraphicObject->setGraphic( xGraphic ); - } - - if ( m_bExternalGraphic ) - { - // if that's an external graphic, i.e. one which has not been loaded by ourselves in response to a - // new image URL, then also adjust our ImageURL. - ::rtl::OUString sNewImageURL; - if ( m_xGraphicObject.is() ) - { - sNewImageURL = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.GraphicObject:" ) ); - sNewImageURL = sNewImageURL + m_xGraphicObject->getUniqueID(); - } - m_sImageURL = sNewImageURL; - // TODO: speaking strictly, this would need to be notified, since ImageURL is a bound property. However, - // this method here is called with a locked mutex, so we cannot simply call listeners ... - // I think the missing notification (and thus clients which potentially cannot observe the change) - // is less severe than the potential deadlock ... - } - } - break; - - default: - OBoundControlModel::setFastPropertyValue_NoBroadcast(nHandle, rValue); - break; - } -} - -//------------------------------------------------------------------------------ -sal_Bool OImageControlModel::convertFastPropertyValue(Any& rConvertedValue, Any& rOldValue, sal_Int32 nHandle, const Any& rValue) - throw( IllegalArgumentException ) -{ - switch (nHandle) - { - case PROPERTY_ID_READONLY : - return tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bReadOnly); - - case PROPERTY_ID_IMAGE_URL: - return tryPropertyValue( rConvertedValue, rOldValue, rValue, m_sImageURL ); - - case PROPERTY_ID_GRAPHIC: - { - const Reference< XGraphic > xGraphic( getFastPropertyValue( PROPERTY_ID_GRAPHIC ), UNO_QUERY ); - return tryPropertyValue( rConvertedValue, rOldValue, rValue, xGraphic ); - } - - default: - return OBoundControlModel::convertFastPropertyValue(rConvertedValue, rOldValue, nHandle, rValue); - } -} - -//------------------------------------------------------------------------------ -void OImageControlModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 4, OBoundControlModel ) - DECL_IFACE_PROP2( GRAPHIC, XGraphic, BOUND, TRANSIENT ); - DECL_PROP1 ( IMAGE_URL, ::rtl::OUString, BOUND ); - DECL_BOOL_PROP1 ( READONLY, BOUND ); - DECL_PROP1 ( TABINDEX, sal_Int16, BOUND ); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -void OImageControlModel::describeAggregateProperties( Sequence< Property >& /* [out] */ o_rAggregateProperties ) const -{ - OBoundControlModel::describeAggregateProperties( o_rAggregateProperties ); - // remove ImageULR and Graphic properties, we "overload" them. This is because our aggregate synchronizes those - // two, but we have an own sychronization mechanism. - RemoveProperty( o_rAggregateProperties, PROPERTY_IMAGE_URL ); - RemoveProperty( o_rAggregateProperties, PROPERTY_GRAPHIC ); -} - -//------------------------------------------------------------------------------ -::rtl::OUString OImageControlModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_IMAGECONTROL; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void OImageControlModel::write(const Reference<XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - // Basisklasse - OBoundControlModel::write(_rxOutStream); - // Version - _rxOutStream->writeShort(0x0003); - // Name - _rxOutStream->writeBoolean(m_bReadOnly); - writeHelpTextCompatibly(_rxOutStream); - // from version 0x0003 : common properties - writeCommonProperties(_rxOutStream); -} - -//------------------------------------------------------------------------------ -void OImageControlModel::read(const Reference<XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) -{ - OBoundControlModel::read(_rxInStream); - - // Version - sal_uInt16 nVersion = _rxInStream->readShort(); - switch (nVersion) - { - case 0x0001: - m_bReadOnly = _rxInStream->readBoolean(); - break; - case 0x0002: - m_bReadOnly = _rxInStream->readBoolean(); - readHelpTextCompatibly(_rxInStream); - break; - case 0x0003: - m_bReadOnly = _rxInStream->readBoolean(); - readHelpTextCompatibly(_rxInStream); - readCommonProperties(_rxInStream); - break; - default : - OSL_FAIL("OImageControlModel::read : unknown version !"); - m_bReadOnly = sal_False; - defaultCommonProperties(); - break; - } - // Nach dem Lesen die Defaultwerte anzeigen - if ( getControlSource().getLength() ) - { // (not if we don't have a control source - the "State" property acts like it is persistent, then - ::osl::MutexGuard aGuard(m_aMutex); // resetNoBroadcast expects this mutex guarding - resetNoBroadcast(); - } -} - -//------------------------------------------------------------------------------ -sal_Bool OImageControlModel::impl_updateStreamForURL_lck( const ::rtl::OUString& _rURL, ValueChangeInstigator _eInstigator ) -{ - // create a stream for the image specified by the URL - ::std::auto_ptr< SvStream > pImageStream; - Reference< XInputStream > xImageStream; - - if ( ::svt::GraphicAccess::isSupportedURL( _rURL ) ) - { - xImageStream = ::svt::GraphicAccess::getImageXStream( getContext().getLegacyServiceFactory(), _rURL ); - } - else - { - pImageStream.reset( ::utl::UcbStreamHelper::CreateStream( _rURL, STREAM_READ ) ); - sal_Bool bSetNull = ( pImageStream.get() == NULL ) || ( ERRCODE_NONE != pImageStream->GetErrorCode() ); - - if ( !bSetNull ) - { - // get the size of the stream - pImageStream->Seek(STREAM_SEEK_TO_END); - sal_Int32 nSize = (sal_Int32)pImageStream->Tell(); - if (pImageStream->GetBufferSize() < 8192) - pImageStream->SetBufferSize(8192); - pImageStream->Seek(STREAM_SEEK_TO_BEGIN); - - xImageStream = new ::utl::OInputStreamHelper( new SvLockBytes( pImageStream.get(), sal_False ), nSize ); - } - } - - if ( xImageStream.is() ) - { - if ( m_xColumnUpdate.is() ) - m_xColumnUpdate->updateBinaryStream( xImageStream, xImageStream->available() ); - else - setControlValue( makeAny( xImageStream ), _eInstigator ); - xImageStream->closeInput(); - return sal_True; - } - - return sal_False; -} - -//------------------------------------------------------------------------------ -sal_Bool OImageControlModel::impl_handleNewImageURL_lck( ValueChangeInstigator _eInstigator ) -{ - switch ( lcl_getImageStoreType( getFieldType() ) ) - { - case ImageStoreBinary: - if ( impl_updateStreamForURL_lck( m_sImageURL, _eInstigator ) ) - return sal_True; - break; - - case ImageStoreLink: - { - ::rtl::OUString sCommitURL( m_sImageURL ); - if ( m_sDocumentURL.getLength() ) - sCommitURL = URIHelper::simpleNormalizedMakeRelative( m_sDocumentURL, sCommitURL ); - OSL_ENSURE( m_xColumnUpdate.is(), "OImageControlModel::impl_handleNewImageURL_lck: no bound field, but ImageStoreLink?!" ); - if ( m_xColumnUpdate.is() ) - { - m_xColumnUpdate->updateString( sCommitURL ); - return sal_True; - } - } - break; - - case ImageStoreInvalid: - OSL_FAIL( "OImageControlModel::impl_handleNewImageURL_lck: image storage type type!" ); - break; - } - - // if we're here, then the above code was unable to update our field/control from the given URL - // => fall back to NULL/VOID - if ( m_xColumnUpdate.is() ) - m_xColumnUpdate->updateNull(); - else - setControlValue( Any(), _eInstigator ); - - return sal_True; -} - -//------------------------------------------------------------------------------ -sal_Bool OImageControlModel::commitControlValueToDbColumn( bool _bPostReset ) -{ - if ( _bPostReset ) - { - // since this is a "commit after reset", we can simply update the column - // with null - this is our "default" which we were just reset to - if ( m_xColumnUpdate.is() ) - m_xColumnUpdate->updateNull(); - } - else - { - ::osl::MutexGuard aGuard(m_aMutex); - return impl_handleNewImageURL_lck( eDbColumnBinding ); - } - - return sal_True; -} - -//------------------------------------------------------------------------------ -namespace -{ - bool lcl_isValidDocumentURL( const ::rtl::OUString& _rDocURL ) - { - return ( _rDocURL.getLength() && !_rDocURL.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "private:object" ) ) ); - } -} - -//------------------------------------------------------------------------------ -void OImageControlModel::onConnectedDbColumn( const Reference< XInterface >& _rxForm ) -{ - OBoundControlModel::onConnectedDbColumn( _rxForm ); - - try - { - Reference< XModel > xDocument( getXModel( *this ) ); - if ( xDocument.is() ) - { - m_sDocumentURL = xDocument->getURL(); - if ( !lcl_isValidDocumentURL( m_sDocumentURL ) ) - { - Reference< XChild > xAsChild( xDocument, UNO_QUERY ); - while ( xAsChild.is() && !lcl_isValidDocumentURL( m_sDocumentURL ) ) - { - xDocument.set( xAsChild->getParent(), UNO_QUERY ); - if ( xDocument.is() ) - m_sDocumentURL = xDocument->getURL(); - xAsChild.set( xDocument, UNO_QUERY ); - } - } - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } -} - -//------------------------------------------------------------------------------ -void OImageControlModel::onDisconnectedDbColumn() -{ - OBoundControlModel::onDisconnectedDbColumn(); - - m_sDocumentURL = ::rtl::OUString(); -} - -//------------------------------------------------------------------------------ -Any OImageControlModel::translateDbColumnToControlValue() -{ - switch ( lcl_getImageStoreType( getFieldType() ) ) - { - case ImageStoreBinary: - { - Reference< XInputStream > xImageStream( m_xColumn->getBinaryStream() ); - if ( m_xColumn->wasNull() ) - xImageStream.clear(); - return makeAny( xImageStream ); - } - case ImageStoreLink: - { - ::rtl::OUString sImageLink( m_xColumn->getString() ); - if ( m_sDocumentURL.getLength() ) - sImageLink = INetURLObject::GetAbsURL( m_sDocumentURL, sImageLink ); - return makeAny( sImageLink ); - } - case ImageStoreInvalid: - OSL_FAIL( "OImageControlModel::translateDbColumnToControlValue: invalid field type!" ); - break; - } - return Any(); -} - -//------------------------------------------------------------------------------ -Any OImageControlModel::getControlValue( ) const -{ - return makeAny( m_sImageURL ); -} - -//------------------------------------------------------------------------------ -void OImageControlModel::doSetControlValue( const Any& _rValue ) -{ - DBG_ASSERT( GetImageProducer() && m_xImageProducer.is(), "OImageControlModel::doSetControlValue: no image producer!" ); - if ( !GetImageProducer() || !m_xImageProducer.is() ) - return; - - bool bStartProduction = false; - switch ( lcl_getImageStoreType( getFieldType() ) ) - { - case ImageStoreBinary: - { - // give the image producer the stream - Reference< XInputStream > xInStream; - _rValue >>= xInStream; - GetImageProducer()->setImage( xInStream ); - bStartProduction = true; - } - break; - - case ImageStoreLink: - { - ::rtl::OUString sImageURL; - _rValue >>= sImageURL; - GetImageProducer()->SetImage( sImageURL ); - bStartProduction = true; - } - break; - - case ImageStoreInvalid: - OSL_FAIL( "OImageControlModel::doSetControlValue: invalid field type!" ); - break; - - } // switch ( lcl_getImageStoreType( getFieldType() ) ) - - if ( bStartProduction ) - { - // start production - Reference< XImageProducer > xProducer = m_xImageProducer; - { - // release our mutex once (it's acquired in the calling method!), as starting the image production may - // result in the locking of the solar mutex (unfortunally the default implementation of our aggregate, - // VCLXImageControl, does this locking) - MutexRelease aRelease(m_aMutex); - xProducer->startProduction(); - } - } -} - -// OComponentHelper -//------------------------------------------------------------------ -void SAL_CALL OImageControlModel::disposing() -{ - OBoundControlModel::disposing(); -} - -//------------------------------------------------------------------------------ -void OImageControlModel::resetNoBroadcast() -{ - if ( hasField() ) // only reset when we are connected to a column - OBoundControlModel::resetNoBroadcast( ); -} - -//-------------------------------------------------------------------- -Reference< XImageProducer > SAL_CALL OImageControlModel::getImageProducer() throw ( RuntimeException) -{ - return this; -} - -//-------------------------------------------------------------------- -void SAL_CALL OImageControlModel::addConsumer( const Reference< XImageConsumer >& _rxConsumer ) throw (RuntimeException) -{ - GetImageProducer()->addConsumer( _rxConsumer ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OImageControlModel::removeConsumer( const Reference< XImageConsumer >& _rxConsumer ) throw (RuntimeException) -{ - GetImageProducer()->removeConsumer( _rxConsumer ); -} - -//-------------------------------------------------------------------- -void SAL_CALL OImageControlModel::startProduction( ) throw (RuntimeException) -{ - GetImageProducer()->startProduction(); -} - -//------------------------------------------------------------------------------ -IMPL_LINK( OImageControlModel, OnImageImportDone, ::Graphic*, i_pGraphic ) -{ - const Reference< XGraphic > xGraphic( i_pGraphic != NULL ? Image( i_pGraphic->GetBitmapEx() ).GetXGraphic() : NULL ); - m_bExternalGraphic = false; - try - { - setPropertyValue( PROPERTY_GRAPHIC, makeAny( xGraphic ) ); - } - catch ( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - m_bExternalGraphic = true; - return 1L; -} - -//================================================================== -// OImageControlControl -//================================================================== - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OImageControlControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OImageControlControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OImageControlControl::_getTypes() -{ - return concatSequences( - OBoundControl::_getTypes(), - OImageControlControl_Base::getTypes() - ); -} - -//------------------------------------------------------------------------------ -OImageControlControl::OImageControlControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl(_rxFactory, VCL_CONTROL_IMAGECONTROL) - ,m_aModifyListeners( m_aMutex ) -{ - increment(m_refCount); - { - // als Focus- und MouseListener anmelden - Reference< XWindow > xComp; - query_aggregation( m_xAggregate, xComp ); - if ( xComp.is() ) - xComp->addMouseListener( this ); - } - decrement(m_refCount); -} - -//------------------------------------------------------------------------------ -Any SAL_CALL OImageControlControl::queryAggregation(const Type& _rType) throw (RuntimeException) -{ - Any aReturn = OBoundControl::queryAggregation( _rType ); - if ( !aReturn.hasValue() ) - aReturn = ::cppu::queryInterface( - _rType, - static_cast< XMouseListener* >( this ), - static_cast< XModifyBroadcaster* >( this ) - ); - - return aReturn; -} - -//------------------------------------------------------------------------------ -StringSequence OImageControlControl::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_IMAGECONTROL; - return aSupported; -} - -//------------------------------------------------------------------------------ -void SAL_CALL OImageControlControl::addModifyListener( const Reference< XModifyListener >& _Listener ) throw (RuntimeException) -{ - m_aModifyListeners.addInterface( _Listener ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OImageControlControl::removeModifyListener( const Reference< XModifyListener >& _Listener ) throw (RuntimeException) -{ - m_aModifyListeners.removeInterface( _Listener ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OImageControlControl::disposing() -{ - EventObject aEvent( *this ); - m_aModifyListeners.disposeAndClear( aEvent ); - - OBoundControl::disposing(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OImageControlControl::disposing( const EventObject& _Event ) throw(RuntimeException) -{ - OBoundControl::disposing( _Event ); -} - -//------------------------------------------------------------------------------ -void OImageControlControl::implClearGraphics( sal_Bool _bForce ) -{ - Reference< XPropertySet > xSet( getModel(), UNO_QUERY ); - if ( xSet.is() ) - { - if ( _bForce ) - { - ::rtl::OUString sOldImageURL; - xSet->getPropertyValue( PROPERTY_IMAGE_URL ) >>= sOldImageURL; - - if ( !sOldImageURL.getLength() ) - // the ImageURL is already empty, so simply setting a new empty one would not suffice - // (since it would be ignored) - xSet->setPropertyValue( PROPERTY_IMAGE_URL, makeAny( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:emptyImage" ) ) ) ); - // (the concrete URL we're passing here doens't matter. It's important that - // the model cannot resolve it to a a valid resource describing an image stream - } - - xSet->setPropertyValue( PROPERTY_IMAGE_URL, makeAny( ::rtl::OUString() ) ); - } -} - -//------------------------------------------------------------------------------ -bool OImageControlControl::implInsertGraphics() -{ - Reference< XPropertySet > xSet( getModel(), UNO_QUERY ); - if ( !xSet.is() ) - return false; - - ::rtl::OUString sTitle = FRM_RES_STRING(RID_STR_IMPORT_GRAPHIC); - // build some arguments for the upcoming dialog - try - { - ::sfx2::FileDialogHelper aDialog( TemplateDescription::FILEOPEN_LINK_PREVIEW, SFXWB_GRAPHIC ); - aDialog.SetTitle( sTitle ); - - Reference< XFilePickerControlAccess > xController( aDialog.GetFilePicker(), UNO_QUERY_THROW ); - xController->setValue(ExtendedFilePickerElementIds::CHECKBOX_PREVIEW, 0, ::cppu::bool2any(sal_True)); - - Reference<XPropertySet> xBoundField; - if ( hasProperty( PROPERTY_BOUNDFIELD, xSet ) ) - xSet->getPropertyValue( PROPERTY_BOUNDFIELD ) >>= xBoundField; - sal_Bool bHasField = xBoundField.is(); - - // if the control is bound to a DB field, then it's not possible to decide whether or not to link - xController->enableControl(ExtendedFilePickerElementIds::CHECKBOX_LINK, !bHasField ); - - // if the control is bound to a DB field, then linking of the image depends on the type of the field - sal_Bool bImageIsLinked = sal_True; - if ( bHasField ) - { - sal_Int32 nFieldType = DataType::OTHER; - OSL_VERIFY( xBoundField->getPropertyValue( PROPERTY_FIELDTYPE ) >>= nFieldType ); - bImageIsLinked = ( lcl_getImageStoreType( nFieldType ) == ImageStoreLink ); - } - xController->setValue(ExtendedFilePickerElementIds::CHECKBOX_LINK, 0, makeAny( bImageIsLinked ) ); - - if ( ERRCODE_NONE == aDialog.Execute() ) - { - // reset the url property in case it already has the value we're about to set - in this case - // our propertyChanged would not get called without this. - implClearGraphics( sal_False ); - sal_Bool bIsLink = sal_False; - xController->getValue(ExtendedFilePickerElementIds::CHECKBOX_LINK, 0) >>= bIsLink; - // Force bIsLink to be sal_True if we're bound to a field. Though we initialized the file picker with IsLink=TRUE - // in this case, and disabled the respective control, there might be picker implementations which do not - // respect this, and return IsLink=FALSE here. In this case, "normalize" the flag. - // #i112659# - bIsLink |= bHasField; - if ( !bIsLink ) - { - Graphic aGraphic; - aDialog.GetGraphic( aGraphic ); - xSet->setPropertyValue( PROPERTY_GRAPHIC, makeAny( aGraphic.GetXGraphic() ) ); - } - else - xSet->setPropertyValue( PROPERTY_IMAGE_URL, makeAny( ::rtl::OUString( aDialog.GetPath() ) ) ); - - return true; - } - } - catch(Exception&) - { - OSL_FAIL("OImageControlControl::implInsertGraphics: caught an exception while attempting to execute the FilePicker!"); - } - return false; -} - -//------------------------------------------------------------------------------ -bool OImageControlControl::impl_isEmptyGraphics_nothrow() const -{ - bool bIsEmpty = true; - - try - { - Reference< XPropertySet > xModelProps( const_cast< OImageControlControl* >( this )->getModel(), UNO_QUERY_THROW ); - Reference< XGraphic > xGraphic; - OSL_VERIFY( xModelProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Graphic" ) ) ) >>= xGraphic ); - bIsEmpty = !xGraphic.is(); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - - return bIsEmpty; -} - -// MouseListener -//------------------------------------------------------------------------------ -void OImageControlControl::mousePressed(const ::com::sun::star::awt::MouseEvent& e) throw ( ::com::sun::star::uno::RuntimeException) -{ - SolarMutexGuard aGuard; - - if (e.Buttons != MouseButton::LEFT) - return; - - bool bModified = false; - // is this a request for a context menu? - if ( e.PopupTrigger ) - { - Reference< XPopupMenu > xMenu( m_aContext.createComponent( "com.sun.star.awt.PopupMenu" ), UNO_QUERY ); - DBG_ASSERT( xMenu.is(), "OImageControlControl::mousePressed: could not create a popup menu!" ); - - Reference< XWindowPeer > xWindowPeer = getPeer(); - DBG_ASSERT( xWindowPeer.is(), "OImageControlControl::mousePressed: no window!" ); - - if ( xMenu.is() && xWindowPeer.is() ) - { - xMenu->insertItem( ID_OPEN_GRAPHICS, FRM_RES_STRING( RID_STR_OPEN_GRAPHICS ), 0, 0 ); - xMenu->insertItem( ID_CLEAR_GRAPHICS, FRM_RES_STRING( RID_STR_CLEAR_GRAPHICS ), 0, 1 ); - - // check if the ImageURL is empty - if ( impl_isEmptyGraphics_nothrow() ) - xMenu->enableItem( ID_CLEAR_GRAPHICS, sal_False ); - - awt::Rectangle aRect( e.X, e.Y, 0, 0 ); - if ( ( e.X < 0 ) || ( e.Y < 0 ) ) - { // context menu triggered by keyboard - // position it in the center of the control - Reference< XWindow > xWindow( static_cast< ::cppu::OWeakObject* >( this ), UNO_QUERY ); - OSL_ENSURE( xWindow.is(), "OImageControlControl::mousePressed: me not a window? How this?" ); - if ( xWindow.is() ) - { - awt::Rectangle aPosSize = xWindow->getPosSize(); - aRect.X = aPosSize.Width / 2; - aRect.Y = aPosSize.Height / 2; - } - } - - const sal_Int16 nResult = xMenu->execute( xWindowPeer, aRect, PopupMenuDirection::EXECUTE_DEFAULT ); - - switch ( nResult ) - { - case ID_OPEN_GRAPHICS: - implInsertGraphics(); - bModified = true; - break; - - case ID_CLEAR_GRAPHICS: - implClearGraphics( sal_True ); - bModified = true; - break; - } - } - } - else - { - ////////////////////////////////////////////////////////////////////// - // Doppelclick - if (e.ClickCount == 2) - { - - Reference<XPropertySet> xSet(getModel(), UNO_QUERY); - if (!xSet.is()) - return; - - // wenn Control nicht gebunden ist, kein Dialog (da die zu schickende URL hinterher sowieso - // versanden wuerde) - Reference<XPropertySet> xBoundField; - if (hasProperty(PROPERTY_BOUNDFIELD, xSet)) - ::cppu::extractInterface(xBoundField, xSet->getPropertyValue(PROPERTY_BOUNDFIELD)); - if (!xBoundField.is()) - { - // but only if our IMAGE_URL property is handled as if it is transient, which is equivalent to - // an empty control source - if (!hasProperty(PROPERTY_CONTROLSOURCE, xSet) || (::comphelper::getString(xSet->getPropertyValue(PROPERTY_CONTROLSOURCE)).getLength() != 0)) - return; - } - - sal_Bool bReadOnly = false; - xSet->getPropertyValue(PROPERTY_READONLY) >>= bReadOnly; - if (bReadOnly) - return; - - if ( implInsertGraphics() ) - bModified = true; - } - } - - if ( bModified ) - { - EventObject aEvent( *this ); - m_aModifyListeners.notifyEach( &XModifyListener::modified, aEvent ); - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL OImageControlControl::mouseReleased(const awt::MouseEvent& /*e*/) throw ( RuntimeException ) -{ -} - -//------------------------------------------------------------------------------ -void SAL_CALL OImageControlControl::mouseEntered(const awt::MouseEvent& /*e*/) throw ( RuntimeException ) -{ -} - -//------------------------------------------------------------------------------ -void SAL_CALL OImageControlControl::mouseExited(const awt::MouseEvent& /*e*/) throw ( RuntimeException ) -{ -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/ImageControl.hxx b/forms/source/component/ImageControl.hxx deleted file mode 100644 index 65f1a6a6a..000000000 --- a/forms/source/component/ImageControl.hxx +++ /dev/null @@ -1,212 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_IMAGE_CONTROL_HXX_ -#define _FRM_IMAGE_CONTROL_HXX_ - -#include "FormComponent.hxx" -#include "imgprod.hxx" -#include <com/sun/star/form/XImageProducerSupplier.hpp> -#include <com/sun/star/awt/XMouseListener.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> -#include <com/sun/star/graphic/XGraphicObject.hpp> -#include <comphelper/propmultiplex.hxx> -#include <comphelper/implementationreference.hxx> -#include <cppuhelper/implbase2.hxx> - -using namespace comphelper; - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -// OImageControlModel -//================================================================== -typedef ::cppu::ImplHelper2 < ::com::sun::star::form::XImageProducerSupplier - , ::com::sun::star::awt::XImageProducer - > OImageControlModel_Base; - -class OImageControlModel - :public OImageControlModel_Base - ,public OBoundControlModel -{ - ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer> m_xImageProducer; - ImageProducer* m_pImageProducer; - bool m_bExternalGraphic; - sal_Bool m_bReadOnly; - ::rtl::OUString m_sImageURL; - ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicObject > - m_xGraphicObject; - ::rtl::OUString m_sDocumentURL; - -protected: - // UNO Anbindung - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - - inline ImageProducer* GetImageProducer() { return m_pImageProducer; } - -public: - DECLARE_DEFAULT_LEAF_XTOR( OImageControlModel ); - - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception); - - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - - // UNO Anbindung - DECLARE_UNO3_AGG_DEFAULTS(OImageControlModel, OBoundControlModel); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - // XServiceInfo - IMPLEMENTATION_NAME(OImageControlModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // XImageProducerSupplier - virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer> SAL_CALL getImageProducer() throw ( ::com::sun::star::uno::RuntimeException); - - // XImageProducer - virtual void SAL_CALL addConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& xConsumer ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& xConsumer ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL startProduction( ) throw (::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps - ) const; - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - - // prevent method hiding - using OBoundControlModel::disposing; - using OBoundControlModel::getFastPropertyValue; - -protected: - // OBoundControlModel overridables - virtual void onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm ); - virtual void onDisconnectedDbColumn(); - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - - virtual ::com::sun::star::uno::Any - getControlValue( ) const; - virtual void doSetControlValue( const ::com::sun::star::uno::Any& _rValue ); - - virtual sal_Bool approveDbColumnType(sal_Int32 _nColumnType); - - virtual void resetNoBroadcast(); - -protected: - DECLARE_XCLONEABLE(); - - void implConstruct(); - - /** displays the image described by the given URL - @precond - our own mutex is locked - */ - sal_Bool impl_handleNewImageURL_lck( ValueChangeInstigator _eInstigator ); - - /** updates the binary stream, created from loading the file which the given URL points to, into our - bound field, or the control itself if there is no bound field - */ - sal_Bool impl_updateStreamForURL_lck( const ::rtl::OUString& _rURL, ValueChangeInstigator _eInstigator ); - - DECL_LINK( OnImageImportDone, ::Graphic* ); -}; - -//================================================================== -//= OImageControlControl -//================================================================== -typedef ::cppu::ImplHelper2 < ::com::sun::star::awt::XMouseListener - , ::com::sun::star::util::XModifyBroadcaster - > OImageControlControl_Base; -class OImageControlControl : public OBoundControl - , public OImageControlControl_Base -{ -private: - ::cppu::OInterfaceContainerHelper m_aModifyListeners; - - // XTypeProvider - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - OImageControlControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - - // UNO - DECLARE_UNO3_AGG_DEFAULTS( OImageControlControl, OBoundControl ); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException); - - // XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException); - - // XServiceInfo - IMPLEMENTATION_NAME(OImageControlControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // XMouseListener - virtual void SAL_CALL mousePressed(const ::com::sun::star::awt::MouseEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL mouseReleased(const ::com::sun::star::awt::MouseEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL mouseEntered(const ::com::sun::star::awt::MouseEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL mouseExited(const ::com::sun::star::awt::MouseEvent& e) throw ( ::com::sun::star::uno::RuntimeException); - - // XModifyBroadcaster - virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - -private: - void implClearGraphics( sal_Bool _bForce ); - bool implInsertGraphics(); - - /** determines whether the control does currently have an empty grahic set - */ - bool impl_isEmptyGraphics_nothrow() const; -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FRM_IMAGE_CONTROL_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/ListBox.cxx b/forms/source/component/ListBox.cxx deleted file mode 100644 index b997c19f9..000000000 --- a/forms/source/component/ListBox.cxx +++ /dev/null @@ -1,1862 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* -* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * -************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "ListBox.hxx" -#include "property.hxx" -#include "property.hrc" -#include "services.hxx" -#include "frm_resource.hxx" -#include "frm_resource.hrc" -#include "BaseListBox.hxx" -#include "listenercontainers.hxx" -#include "componenttools.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/util/XNumberFormatTypes.hpp> -#include <com/sun/star/sdbc/XRowSet.hpp> -#include <com/sun/star/container/XIndexAccess.hpp> -#include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp> -#include <com/sun/star/sdb/XQueriesSupplier.hpp> -#include <com/sun/star/util/NumberFormat.hpp> -#include <com/sun/star/awt/XWindow.hpp> -#include <com/sun/star/sdbc/XConnection.hpp> -#include <com/sun/star/sdb/CommandType.hpp> -/** === end UNO includes === **/ - -#include <comphelper/basicio.hxx> -#include <comphelper/container.hxx> -#include <comphelper/numbers.hxx> -#include <comphelper/listenernotification.hxx> -#include <connectivity/dbtools.hxx> -#include <connectivity/formattedcolumnvalue.hxx> -#include <connectivity/dbconversion.hxx> -#include <cppuhelper/queryinterface.hxx> -#include <rtl/logfile.hxx> -#include <tools/debug.hxx> -#include <tools/diagnose_ex.h> -#include <unotools/sharedunocomponent.hxx> -#include <vcl/svapp.hxx> - -#include <boost/optional.hpp> - -#include <algorithm> -#include <functional> - - -//......................................................................... -namespace frm -{ - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::sdb; - using namespace ::com::sun::star::sdbc; - using namespace ::com::sun::star::sdbcx; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::container; - using namespace ::com::sun::star::form; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::io; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::form::binding; - using namespace ::dbtools; - - using ::connectivity::ORowSetValue; - - //============================================================================== - //= helper - //============================================================================== - namespace - { - //-------------------------------------------------------------------------- - struct RowSetValueToString : public ::std::unary_function< ORowSetValue, ::rtl::OUString > - { - ::rtl::OUString operator()( const ORowSetValue& _value ) const - { - return _value.getString(); - } - }; - - //-------------------------------------------------------------------------- - struct AppendRowSetValueString : public ::std::unary_function< ::rtl::OUString, void > - { - AppendRowSetValueString( ::rtl::OUString& _string ) - :m_string( _string ) - { - } - - void operator()( const ::rtl::OUString _append ) - { - m_string += _append; - } - - private: - ::rtl::OUString& m_string; - }; - - //-------------------------------------------------------------------------- - Sequence< ::rtl::OUString > lcl_convertToStringSequence( const ValueList& _values ) - { - Sequence< ::rtl::OUString > aStrings( _values.size() ); - ::std::transform( - _values.begin(), - _values.end(), - aStrings.getArray(), - RowSetValueToString() - ); - return aStrings; - } - } - - //============================================================================== - //= ItemEventDescription - //============================================================================== - typedef ::comphelper::EventHolder< ItemEvent > ItemEventDescription; - - //============================================================================== - //= OListBoxModel - //============================================================================== - //------------------------------------------------------------------ - InterfaceRef SAL_CALL OListBoxModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException) - { - return *(new OListBoxModel(_rxFactory)); - } - - //------------------------------------------------------------------------------ - Sequence< Type> OListBoxModel::_getTypes() - { - return TypeBag( - OBoundControlModel::_getTypes(), - OEntryListHelper::getTypes(), - OErrorBroadcaster::getTypes() - ).getTypes(); - } - - - DBG_NAME(OListBoxModel); - //------------------------------------------------------------------ - OListBoxModel::OListBoxModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControlModel( _rxFactory, VCL_CONTROLMODEL_LISTBOX, FRM_SUN_CONTROL_LISTBOX, sal_True, sal_True, sal_True ) - // use the old control name for compytibility reasons - ,OEntryListHelper( (OControlModel&)*this ) - ,OErrorBroadcaster( OComponentHelper::rBHelper ) - ,m_aListRowSet( getContext() ) - ,m_nNULLPos(-1) - ,m_nBoundColumnType( DataType::SQLNULL ) - { - DBG_CTOR(OListBoxModel,NULL); - - m_nClassId = FormComponentType::LISTBOX; - m_eListSourceType = ListSourceType_VALUELIST; - m_aBoundColumn <<= (sal_Int16)1; - initValueProperty( PROPERTY_SELECT_SEQ, PROPERTY_ID_SELECT_SEQ); - - startAggregatePropertyListening( PROPERTY_STRINGITEMLIST ); - } - - //------------------------------------------------------------------ - OListBoxModel::OListBoxModel( const OListBoxModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OBoundControlModel( _pOriginal, _rxFactory ) - ,OEntryListHelper( *_pOriginal, (OControlModel&)*this ) - ,OErrorBroadcaster( OComponentHelper::rBHelper ) - ,m_aListRowSet( getContext() ) - ,m_eListSourceType( _pOriginal->m_eListSourceType ) - ,m_aBoundColumn( _pOriginal->m_aBoundColumn ) - ,m_aListSourceValues( _pOriginal->m_aListSourceValues ) - ,m_aBoundValues( _pOriginal->m_aBoundValues ) - ,m_aDefaultSelectSeq( _pOriginal->m_aDefaultSelectSeq ) - ,m_nNULLPos(-1) - ,m_nBoundColumnType( DataType::SQLNULL ) - { - DBG_CTOR(OListBoxModel,NULL); - - startAggregatePropertyListening( PROPERTY_STRINGITEMLIST ); - } - - //------------------------------------------------------------------ - OListBoxModel::~OListBoxModel() - { - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - - DBG_DTOR(OListBoxModel,NULL); - } - - // XCloneable - //------------------------------------------------------------------------------ - IMPLEMENT_DEFAULT_CLONING( OListBoxModel ) - - // XServiceInfo - //------------------------------------------------------------------------------ - StringSequence SAL_CALL OListBoxModel::getSupportedServiceNames() throw(RuntimeException) - { - StringSequence aSupported = OBoundControlModel::getSupportedServiceNames(); - - sal_Int32 nOldLen = aSupported.getLength(); - aSupported.realloc( nOldLen + 8 ); - ::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen; - - *pStoreTo++ = BINDABLE_CONTROL_MODEL; - *pStoreTo++ = DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_CONTROL_MODEL; - - *pStoreTo++ = BINDABLE_DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_BINDABLE_CONTROL_MODEL; - - *pStoreTo++ = FRM_SUN_COMPONENT_LISTBOX; - *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_LISTBOX; - *pStoreTo++ = BINDABLE_DATABASE_LIST_BOX; - - return aSupported; - } - - //------------------------------------------------------------------------------ - Any SAL_CALL OListBoxModel::queryAggregation(const Type& _rType) throw (RuntimeException) - { - Any aReturn = OBoundControlModel::queryAggregation( _rType ); - if ( !aReturn.hasValue() ) - aReturn = OEntryListHelper::queryInterface( _rType ); - if ( !aReturn.hasValue() ) - aReturn = OErrorBroadcaster::queryInterface( _rType ); - return aReturn; - } - - // OComponentHelper - //------------------------------------------------------------------------------ - void OListBoxModel::disposing() - { - OBoundControlModel::disposing(); - OEntryListHelper::disposing(); - OErrorBroadcaster::disposing(); - } - - //------------------------------------------------------------------------------ - void OListBoxModel::getFastPropertyValue(Any& _rValue, sal_Int32 _nHandle) const - { - switch (_nHandle) - { - case PROPERTY_ID_BOUNDCOLUMN: - _rValue <<= m_aBoundColumn; - break; - - case PROPERTY_ID_LISTSOURCETYPE: - _rValue <<= m_eListSourceType; - break; - - case PROPERTY_ID_LISTSOURCE: - _rValue <<= lcl_convertToStringSequence( m_aListSourceValues ); - break; - - case PROPERTY_ID_VALUE_SEQ: - _rValue <<= lcl_convertToStringSequence( m_aBoundValues ); - break; - - case PROPERTY_ID_DEFAULT_SELECT_SEQ: - _rValue <<= m_aDefaultSelectSeq; - break; - - case PROPERTY_ID_STRINGITEMLIST: - _rValue <<= getStringItemList(); - break; - - default: - OBoundControlModel::getFastPropertyValue(_rValue, _nHandle); - } - } - - //------------------------------------------------------------------------------ - void OListBoxModel::setFastPropertyValue_NoBroadcast(sal_Int32 _nHandle, const Any& _rValue) throw (com::sun::star::uno::Exception) - { - switch (_nHandle) - { - case PROPERTY_ID_BOUNDCOLUMN : - DBG_ASSERT((_rValue.getValueType().getTypeClass() == TypeClass_SHORT) || (_rValue.getValueType().getTypeClass() == TypeClass_VOID), - "OListBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - m_aBoundColumn = _rValue; - break; - - case PROPERTY_ID_LISTSOURCETYPE : - DBG_ASSERT(_rValue.getValueType().equals(::getCppuType(reinterpret_cast<ListSourceType*>(NULL))), - "OComboBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - _rValue >>= m_eListSourceType; - break; - - case PROPERTY_ID_LISTSOURCE: - { - // extract - Sequence< ::rtl::OUString > aListSource; - OSL_VERIFY( _rValue >>= aListSource ); - - // copy to member - ValueList().swap(m_aListSourceValues); - ::std::copy( - aListSource.getConstArray(), - aListSource.getConstArray() + aListSource.getLength(), - ::std::insert_iterator< ValueList >( m_aListSourceValues, m_aListSourceValues.end() ) - ); - - // propagate - if ( m_eListSourceType == ListSourceType_VALUELIST ) - { - m_aBoundValues = m_aListSourceValues; - } - else - { - if ( m_xCursor.is() && !hasField() && !hasExternalListSource() ) - // listbox is already connected to a database, and no external list source - // data source changed -> refresh - loadData( false ); - } - } - break; - - case PROPERTY_ID_VALUE_SEQ : - OSL_FAIL( "ValueItemList is read-only!" ); - throw PropertyVetoException(); - - case PROPERTY_ID_DEFAULT_SELECT_SEQ : - DBG_ASSERT(_rValue.getValueType().equals(::getCppuType(reinterpret_cast< Sequence<sal_Int16>*>(NULL))), - "OListBoxModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - _rValue >>= m_aDefaultSelectSeq; - - DBG_ASSERT(m_xAggregateFastSet.is(), "OListBoxModel::setFastPropertyValue_NoBroadcast(DEFAULT_SELECT_SEQ) : invalid aggregate !"); - if ( m_xAggregateFastSet.is() ) - setControlValue( _rValue, eOther ); - break; - - case PROPERTY_ID_STRINGITEMLIST: - { - ControlModelLock aLock( *this ); - setNewStringItemList( _rValue, aLock ); - // TODO: this is bogus. setNewStringItemList expects a guard which has the *only* - // lock to the mutex, but setFastPropertyValue_NoBroadcast is already called with - // a lock - so we effectively has two locks here, of which setNewStringItemList can - // only control one. - } - resetNoBroadcast(); - break; - - default: - OBoundControlModel::setFastPropertyValue_NoBroadcast(_nHandle, _rValue); - } - } - - //------------------------------------------------------------------------------ - sal_Bool OListBoxModel::convertFastPropertyValue( - Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue) - throw (IllegalArgumentException) - { - sal_Bool bModified(sal_False); - switch (_nHandle) - { - case PROPERTY_ID_BOUNDCOLUMN : - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_aBoundColumn, ::getCppuType(reinterpret_cast<sal_Int16*>(NULL))); - break; - - case PROPERTY_ID_LISTSOURCETYPE: - bModified = tryPropertyValueEnum(_rConvertedValue, _rOldValue, _rValue, m_eListSourceType); - break; - - case PROPERTY_ID_LISTSOURCE: - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, lcl_convertToStringSequence( m_aListSourceValues ) ); - break; - - case PROPERTY_ID_VALUE_SEQ : - OSL_FAIL( "ValueItemList is read-only!" ); - throw PropertyVetoException(); - - case PROPERTY_ID_DEFAULT_SELECT_SEQ : - bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_aDefaultSelectSeq); - break; - - case PROPERTY_ID_STRINGITEMLIST: - bModified = convertNewListSourceProperty( _rConvertedValue, _rOldValue, _rValue ); - break; - - default: - return OBoundControlModel::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue); - } - return bModified; - } - - //------------------------------------------------------------------------------ - void SAL_CALL OListBoxModel::setPropertyValues( const Sequence< ::rtl::OUString >& _rPropertyNames, const Sequence< Any >& _rValues ) throw(PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) - { - // if both SelectedItems and StringItemList are set, care for this - // #i27024# - const Any* pSelectSequenceValue = NULL; - - const ::rtl::OUString* pStartPos = _rPropertyNames.getConstArray(); - const ::rtl::OUString* pEndPos = _rPropertyNames.getConstArray() + _rPropertyNames.getLength(); - const ::rtl::OUString* pSelectedItemsPos = ::std::find_if( - pStartPos, pEndPos, - ::std::bind2nd( ::std::equal_to< ::rtl::OUString >(), PROPERTY_SELECT_SEQ ) - ); - const ::rtl::OUString* pStringItemListPos = ::std::find_if( - pStartPos, pEndPos, - ::std::bind2nd( ::std::equal_to< ::rtl::OUString >(), PROPERTY_STRINGITEMLIST ) - ); - if ( ( pSelectedItemsPos != pEndPos ) && ( pStringItemListPos != pEndPos ) ) - { - // both properties are present - // -> remember the value for the select sequence - pSelectSequenceValue = _rValues.getConstArray() + ( pSelectedItemsPos - pStartPos ); - } - - OBoundControlModel::setPropertyValues( _rPropertyNames, _rValues ); - - if ( pSelectSequenceValue ) - { - setPropertyValue( PROPERTY_SELECT_SEQ, *pSelectSequenceValue ); - // Note that this is the only reliable way, since one of the properties is implemented - // by ourself, and one is implemented by the aggregate, we cannot rely on any particular - // results when setting them both - too many undocumented behavior in all the involved - // classes - } - } - - //------------------------------------------------------------------------------ - void OListBoxModel::describeFixedProperties( Sequence< Property >& _rProps ) const - { - BEGIN_DESCRIBE_PROPERTIES( 7, OBoundControlModel ) - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - DECL_PROP2(BOUNDCOLUMN, sal_Int16, BOUND, MAYBEVOID); - DECL_PROP1(LISTSOURCETYPE, ListSourceType, BOUND); - DECL_PROP1(LISTSOURCE, StringSequence, BOUND); - DECL_PROP3(VALUE_SEQ, StringSequence, BOUND, READONLY, TRANSIENT); - DECL_PROP1(DEFAULT_SELECT_SEQ, Sequence<sal_Int16>, BOUND); - DECL_PROP1(STRINGITEMLIST, Sequence< ::rtl::OUString >, BOUND); - END_DESCRIBE_PROPERTIES(); - } - - //------------------------------------------------------------------------------ - void OListBoxModel::_propertyChanged( const PropertyChangeEvent& i_rEvent ) throw ( RuntimeException ) - { - if ( i_rEvent.PropertyName == PROPERTY_STRINGITEMLIST ) - { - ControlModelLock aLock( *this ); - // SYNCHRONIZED -----> - // our aggregate internally changed its StringItemList property - reflect this in our "overridden" - // version of the property - setNewStringItemList( i_rEvent.NewValue, aLock ); - // <----- SYNCHRONIZED - return; - } - OBoundControlModel::_propertyChanged( i_rEvent ); - } - - //------------------------------------------------------------------------------ - void OListBoxModel::describeAggregateProperties( Sequence< Property >& _rAggregateProps ) const - { - OBoundControlModel::describeAggregateProperties( _rAggregateProps ); - - // superseded properties: - RemoveProperty( _rAggregateProps, PROPERTY_STRINGITEMLIST ); - } - - //------------------------------------------------------------------------------ - ::rtl::OUString SAL_CALL OListBoxModel::getServiceName() throw(RuntimeException) - { - return FRM_COMPONENT_LISTBOX; // old (non-sun) name for compatibility ! - } - - //------------------------------------------------------------------------------ - void SAL_CALL OListBoxModel::write(const Reference<XObjectOutputStream>& _rxOutStream) - throw(IOException, RuntimeException) - { - OBoundControlModel::write(_rxOutStream); - - // Dummy-Seq, um Kompatible zu bleiben, wenn SelectSeq nicht mehr gespeichert wird - Sequence<sal_Int16> aDummySeq; - - // Version - // Version 0x0002: ListSource wird StringSeq - _rxOutStream->writeShort(0x0004); - - // Maskierung fuer any - sal_uInt16 nAnyMask = 0; - if (m_aBoundColumn.getValueType().getTypeClass() != TypeClass_VOID) - nAnyMask |= BOUNDCOLUMN; - - _rxOutStream << nAnyMask; - - _rxOutStream << lcl_convertToStringSequence( m_aListSourceValues ); - _rxOutStream << (sal_Int16)m_eListSourceType; - _rxOutStream << aDummySeq; - _rxOutStream << m_aDefaultSelectSeq; - - if ((nAnyMask & BOUNDCOLUMN) == BOUNDCOLUMN) - { - sal_Int16 nBoundColumn = 0; - m_aBoundColumn >>= nBoundColumn; - _rxOutStream << nBoundColumn; - } - writeHelpTextCompatibly(_rxOutStream); - - // from version 0x0004 : common properties - writeCommonProperties(_rxOutStream); - } - - //------------------------------------------------------------------------------ - void SAL_CALL OListBoxModel::read(const Reference<XObjectInputStream>& _rxInStream) throw(IOException, RuntimeException) - { - // Bei manchen Variblen muessen Abhaengigkeiten beruecksichtigt werden. - // Deshalb muessen sie explizit ueber setPropertyValue() gesetzt werden. - - OBoundControlModel::read(_rxInStream); - ControlModelLock aLock( *this ); - - // since we are "overwriting" the StringItemList of our aggregate (means we have - // an own place to store the value, instead of relying on our aggregate storing it), - // we need to respect what the aggregate just read for the StringItemList property. - try - { - if ( m_xAggregateSet.is() ) - setNewStringItemList( m_xAggregateSet->getPropertyValue( PROPERTY_STRINGITEMLIST ), aLock ); - } - catch( const Exception& ) - { - OSL_FAIL( "OComboBoxModel::read: caught an exception while examining the aggregate's string item list!" ); - } - - // Version - sal_uInt16 nVersion = _rxInStream->readShort(); - DBG_ASSERT(nVersion > 0, "OListBoxModel::read : version 0 ? this should never have been written !"); - - if (nVersion > 0x0004) - { - OSL_FAIL("OListBoxModel::read : invalid (means unknown) version !"); - ValueList().swap(m_aListSourceValues); - m_aBoundColumn <<= (sal_Int16)0; - ValueList().swap(m_aBoundValues); - m_eListSourceType = ListSourceType_VALUELIST; - m_aDefaultSelectSeq.realloc(0); - defaultCommonProperties(); - return; - } - - // Maskierung fuer any - sal_uInt16 nAnyMask; - _rxInStream >> nAnyMask; - - // ListSourceSeq - StringSequence aListSourceSeq; - if (nVersion == 0x0001) - { - // ListSourceSeq aus String zusammenstellen; - ::rtl::OUString sListSource; - _rxInStream >> sListSource; - - sal_Int32 nTokens = 1; - const sal_Unicode* pStr = sListSource.getStr(); - while ( *pStr ) - { - if ( *pStr == ';' ) - nTokens++; - pStr++; - } - aListSourceSeq.realloc( nTokens ); - for (sal_uInt16 i=0; i<nTokens; ++i) - { - sal_Int32 nTmp = 0; - aListSourceSeq.getArray()[i] = sListSource.getToken(i,';',nTmp); - } - } - else - _rxInStream >> aListSourceSeq; - - sal_Int16 nListSourceType; - _rxInStream >> nListSourceType; - m_eListSourceType = (ListSourceType)nListSourceType; - Any aListSourceSeqAny; - aListSourceSeqAny <<= aListSourceSeq; - - setFastPropertyValue(PROPERTY_ID_LISTSOURCE, aListSourceSeqAny ); - - // Dummy-Seq, um Kompatible zu bleiben, wenn SelectSeq nicht mehr gespeichert wird - Sequence<sal_Int16> aDummySeq; - _rxInStream >> aDummySeq; - - // DefaultSelectSeq - Sequence<sal_Int16> aDefaultSelectSeq; - _rxInStream >> aDefaultSelectSeq; - Any aDefaultSelectSeqAny; - aDefaultSelectSeqAny <<= aDefaultSelectSeq; - setFastPropertyValue(PROPERTY_ID_DEFAULT_SELECT_SEQ, aDefaultSelectSeqAny); - - // BoundColumn - if ((nAnyMask & BOUNDCOLUMN) == BOUNDCOLUMN) - { - sal_Int16 nValue; - _rxInStream >> nValue; - m_aBoundColumn <<= nValue; - } - - if (nVersion > 2) - readHelpTextCompatibly(_rxInStream); - - // if our string list is not filled from the value list, we must empty it - // this can be the case when somebody saves in alive mode - if ( ( m_eListSourceType != ListSourceType_VALUELIST ) - && !hasExternalListSource() - ) - { - setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( StringSequence() ) ); - } - - if (nVersion > 3) - readCommonProperties(_rxInStream); - - // Nach dem Lesen die Defaultwerte anzeigen - if ( getControlSource().getLength() ) - // (not if we don't have a control source - the "State" property acts like it is persistent, then - resetNoBroadcast(); - } - - //------------------------------------------------------------------------------ - void OListBoxModel::loadData( bool _bForce ) - { - RTL_LOGFILE_CONTEXT( aLogContext, "OListBoxModel::loadData" ); - DBG_ASSERT( m_eListSourceType != ListSourceType_VALUELIST, "OListBoxModel::loadData: cannot load value list from DB!" ); - DBG_ASSERT( !hasExternalListSource(), "OListBoxModel::loadData: cannot load from DB when I have an external list source!" ); - - const sal_Int16 nNULLPosBackup( m_nNULLPos ); - const sal_Int32 nBoundColumnTypeBackup( m_nBoundColumnType ); - m_nNULLPos = -1; - m_nBoundColumnType = DataType::SQLNULL; - - // pre-requisites: - // PRE1: connection - Reference< XConnection > xConnection; - // is the active connection of our form - Reference< XPropertySet > xFormProps( m_xCursor, UNO_QUERY ); - if ( xFormProps.is() ) - xFormProps->getPropertyValue( PROPERTY_ACTIVE_CONNECTION ) >>= xConnection; - - // PRE2: list source - ::rtl::OUString sListSource; - // if our list source type is no value list, we need to concatenate - // the single list source elements - ::std::for_each( - m_aListSourceValues.begin(), - m_aListSourceValues.end(), - AppendRowSetValueString( sListSource ) - ); - - // outta here if we don't have all pre-requisites - if ( !xConnection.is() || !sListSource.getLength() ) - { - ValueList().swap(m_aBoundValues); - return; - } - - ::boost::optional< sal_Int16 > aBoundColumn; - if ( m_aBoundColumn.getValueType().getTypeClass() == TypeClass_SHORT ) - { - sal_Int16 nBoundColumn( 0 ); - m_aBoundColumn >>= nBoundColumn; - aBoundColumn.reset( nBoundColumn ); - } - - ::utl::SharedUNOComponent< XResultSet > xListCursor; - try - { - m_aListRowSet.setConnection( xConnection ); - - sal_Bool bExecute = sal_False; - switch (m_eListSourceType) - { - case ListSourceType_TABLEFIELDS: - // don't work with a statement here, the fields will be collected below - break; - - case ListSourceType_TABLE: - { - Reference<XNameAccess> xFieldsByName = getTableFields(xConnection, sListSource); - Reference<XIndexAccess> xFieldsByIndex(xFieldsByName, UNO_QUERY); - - // do we have a bound column if yes we have to select it - // and the displayed column is the first column othwhise we act as a combobox - ::rtl::OUString aFieldName; - ::rtl::OUString aBoundFieldName; - - if ( !!aBoundColumn && ( *aBoundColumn >= 0 ) && xFieldsByIndex.is() ) - { - if ( *aBoundColumn >= xFieldsByIndex->getCount() ) - break; - - Reference<XPropertySet> xFieldAsSet(xFieldsByIndex->getByIndex( *aBoundColumn ),UNO_QUERY); - xFieldAsSet->getPropertyValue(PROPERTY_NAME) >>= aBoundFieldName; - aBoundColumn.reset( 1 ); - - xFieldAsSet.set(xFieldsByIndex->getByIndex(0),UNO_QUERY); - xFieldAsSet->getPropertyValue(PROPERTY_NAME) >>= aFieldName; - } - else if (xFieldsByName.is()) - { - if ( xFieldsByName->hasByName( getControlSource() ) ) - aFieldName = getControlSource(); - else - { - // otherwise look for the alias - Reference< XColumnsSupplier > xSupplyFields; - xFormProps->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SingleSelectQueryComposer"))) >>= xSupplyFields; - - // search the field - DBG_ASSERT(xSupplyFields.is(), "OListBoxModel::loadData : invalid query composer !"); - - Reference<XNameAccess> xFieldNames = xSupplyFields->getColumns(); - if ( xFieldNames->hasByName( getControlSource() ) ) - { - Reference<XPropertySet> xComposerFieldAsSet; - xFieldNames->getByName( getControlSource() ) >>= xComposerFieldAsSet; - if (hasProperty(PROPERTY_FIELDSOURCE, xComposerFieldAsSet)) - xComposerFieldAsSet->getPropertyValue(PROPERTY_FIELDSOURCE) >>= aFieldName; - } - } - } - if (!aFieldName.getLength()) - break; - - Reference<XDatabaseMetaData> xMeta = xConnection->getMetaData(); - ::rtl::OUString aQuote = xMeta->getIdentifierQuoteString(); - ::rtl::OUString aStatement(RTL_CONSTASCII_USTRINGPARAM("SELECT ")); - if (!aBoundFieldName.getLength()) // act like a combobox - aStatement += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DISTINCT ") ); - - aStatement += quoteName(aQuote,aFieldName); - if (aBoundFieldName.getLength()) - { - aStatement += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(", ") ); - aStatement += quoteName(aQuote, aBoundFieldName); - } - aStatement += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" FROM ") ); - - ::rtl::OUString sCatalog, sSchema, sTable; - qualifiedNameComponents( xMeta, sListSource, sCatalog, sSchema, sTable, eInDataManipulation ); - aStatement += composeTableNameForSelect( xConnection, sCatalog, sSchema, sTable ); - - m_aListRowSet.setEscapeProcessing( sal_False ); - m_aListRowSet.setCommand( aStatement ); - bExecute = sal_True; - } - break; - - case ListSourceType_QUERY: - m_aListRowSet.setCommandFromQuery( sListSource ); - bExecute = sal_True; - break; - - default: - m_aListRowSet.setEscapeProcessing( ListSourceType_SQLPASSTHROUGH != m_eListSourceType ); - m_aListRowSet.setCommand( sListSource ); - bExecute = sal_True; - break; - } - - if (bExecute) - { - if ( !_bForce && !m_aListRowSet.isDirty() ) - { - // if none of the settings of the row set changed, compared to the last - // invocation of loadData, then don't re-fill the list. Instead, assume - // the list entries are the same. - m_nNULLPos = nNULLPosBackup; - m_nBoundColumnType = nBoundColumnTypeBackup; - return; - } - xListCursor.reset( m_aListRowSet.execute() ); - } - } - catch(SQLException& eSQL) - { - onError(eSQL, FRM_RES_STRING(RID_BASELISTBOX_ERROR_FILLLIST)); - return; - } - catch(const Exception& eUnknown) - { - (void)eUnknown; - return; - } - - // Anzeige- und Werteliste fuellen - ValueList aDisplayList, aValueList; - sal_Bool bUseNULL = hasField() && !isRequired(); - - try - { - OSL_ENSURE( xListCursor.is() || ( ListSourceType_TABLEFIELDS == m_eListSourceType ), - "OListBoxModel::loadData: logic error!" ); - if ( !xListCursor.is() && ( ListSourceType_TABLEFIELDS != m_eListSourceType ) ) - return; - - switch (m_eListSourceType) - { - case ListSourceType_SQL: - case ListSourceType_SQLPASSTHROUGH: - case ListSourceType_TABLE: - case ListSourceType_QUERY: - { - // Feld der 1. Column des ResultSets holen - Reference<XColumnsSupplier> xSupplyCols(xListCursor, UNO_QUERY); - DBG_ASSERT(xSupplyCols.is(), "OListBoxModel::loadData : cursor supports the row set service but is no column supplier?!"); - Reference<XIndexAccess> xColumns; - if (xSupplyCols.is()) - { - xColumns = Reference<XIndexAccess>(xSupplyCols->getColumns(), UNO_QUERY); - DBG_ASSERT(xColumns.is(), "OListBoxModel::loadData : no columns supplied by the row set !"); - } - - Reference< XPropertySet > xDataField; - if ( xColumns.is() ) - xColumns->getByIndex(0) >>= xDataField; - if ( !xDataField.is() ) - return; - - ::dbtools::FormattedColumnValue aValueFormatter( getContext(), m_xCursor, xDataField ); - - // Feld der BoundColumn des ResultSets holen - m_nBoundColumnType = DataType::SQLNULL; - if ( !!aBoundColumn && ( *aBoundColumn >= 0 ) && m_xColumn.is() ) - { // don't look for a bound column if we're not connected to a field - try - { - Reference< XPropertySet > xBoundField( xColumns->getByIndex( *aBoundColumn ), UNO_QUERY_THROW ); - OSL_VERIFY( xBoundField->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Type") ) ) >>= m_nBoundColumnType ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - // Ist die LB an ein Feld gebunden und sind Leereintraege zulaessig - // dann wird die Position fuer einen Leereintrag gemerkt - - RTL_LOGFILE_CONTEXT( aLogContext, "OListBoxModel::loadData: string collection" ); - ::rtl::OUString aStr; - sal_Int16 entryPos = 0; - ORowSetValue aBoundValue; - Reference< XRow > xCursorRow( xListCursor, UNO_QUERY_THROW ); - while ( xListCursor->next() && ( entryPos++ < SHRT_MAX ) ) // SHRT_MAX is the maximum number of entries - { - aStr = aValueFormatter.getFormattedValue(); - aDisplayList.push_back( aStr ); - - if ( impl_hasBoundComponent() ) - { - aBoundValue.fill( *aBoundColumn + 1, m_nBoundColumnType, xCursorRow ); - aValueList.push_back( aBoundValue ); - } - - if ( bUseNULL && ( m_nNULLPos == -1 ) && !aStr.getLength() ) - m_nNULLPos = sal_Int16( aDisplayList.size() - 1 ); - } - } - break; - - case ListSourceType_TABLEFIELDS: - { - Reference<XNameAccess> xFieldNames = getTableFields(xConnection, sListSource); - if (xFieldNames.is()) - { - StringSequence seqNames = xFieldNames->getElementNames(); - ::std::copy( - seqNames.getConstArray(), - seqNames.getConstArray() + seqNames.getLength(), - ::std::insert_iterator< ValueList >( aDisplayList, aDisplayList.end() ) - ); - } - } - break; - default: - OSL_FAIL( "OListBoxModel::loadData: unreachable!" ); - break; - } - } - catch(SQLException& eSQL) - { - onError(eSQL, FRM_RES_STRING(RID_BASELISTBOX_ERROR_FILLLIST)); - return; - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - return; - } - - - // Value-Sequence erzeugen - // NULL eintrag hinzufuegen - if (bUseNULL && m_nNULLPos == -1) - { - if ( impl_hasBoundComponent() ) - aValueList.insert( aValueList.begin(), ORowSetValue() ); - - aDisplayList.insert( aDisplayList.begin(), ORowSetValue( ::rtl::OUString() ) ); - m_nNULLPos = 0; - } - - m_aBoundValues = aValueList; - - setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( lcl_convertToStringSequence( aDisplayList ) ) ); - } - - //------------------------------------------------------------------------------ - void OListBoxModel::onConnectedDbColumn( const Reference< XInterface >& /*_rxForm*/ ) - { - // list boxes which are bound to a db column don't have multi selection - // - this would be unable to reflect in the db column - if ( hasField() ) - { - setFastPropertyValue( PROPERTY_ID_MULTISELECTION, ::cppu::bool2any( ( sal_False ) ) ); - } - - if ( !hasExternalListSource() ) - impl_refreshDbEntryList( false ); - } - - //------------------------------------------------------------------------------ - void OListBoxModel::onDisconnectedDbColumn() - { - if ( m_eListSourceType != ListSourceType_VALUELIST ) - { - ValueList().swap(m_aBoundValues); - m_nNULLPos = -1; - m_nBoundColumnType = DataType::SQLNULL; - - if ( !hasExternalListSource() ) - setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( StringSequence() ) ); - - m_aListRowSet.dispose(); - } - } - - //------------------------------------------------------------------------------ - ValueList OListBoxModel::impl_getValues() const - { - if ( !m_aBoundValues.empty() ) - return m_aBoundValues; - - Sequence< ::rtl::OUString > aStringItems( getStringItemList() ); - ValueList aValues( aStringItems.getLength() ); - ::std::copy( - aStringItems.getConstArray(), - aStringItems.getConstArray() + aStringItems.getLength(), - aValues.begin() - ); - - return aValues; - } - //------------------------------------------------------------------------------ - ORowSetValue OListBoxModel::getFirstSelectedValue() const - { - static const ORowSetValue s_aEmptyVaue; - - DBG_ASSERT( m_xAggregateFastSet.is(), "OListBoxModel::getFirstSelectedValue: invalid aggregate!" ); - if ( !m_xAggregateFastSet.is() ) - return s_aEmptyVaue; - - Sequence< sal_Int16 > aSelectedIndices; - OSL_VERIFY( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) >>= aSelectedIndices ); - if ( !aSelectedIndices.getLength() ) - // nothing selected at all - return s_aEmptyVaue; - - if ( ( m_nNULLPos != -1 ) && ( aSelectedIndices[0] == m_nNULLPos ) ) - // the dedicated "NULL" entry is selected - return s_aEmptyVaue; - - ValueList aValues( impl_getValues() ); - - size_t selectedValue = aSelectedIndices[0]; - if ( selectedValue >= aValues.size() ) - { - OSL_FAIL( "OListBoxModel::getFirstSelectedValue: inconsistent selection/valuelist!" ); - return s_aEmptyVaue; - } - - return aValues[ selectedValue ]; - } - - //------------------------------------------------------------------------------ - sal_Bool OListBoxModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) - { - // current selektion list - const ORowSetValue aCurrentValue( getFirstSelectedValue() ); - if ( aCurrentValue != m_aSaveValue ) - { - if ( aCurrentValue.isNull() ) - m_xColumnUpdate->updateNull(); - else - { - try - { - m_xColumnUpdate->updateObject( aCurrentValue.makeAny() ); - } - catch ( const Exception& ) - { - return sal_False; - } - } - m_aSaveValue = aCurrentValue; - } - return sal_True; - } - - // XPropertiesChangeListener - //------------------------------------------------------------------------------ - Any OListBoxModel::translateDbColumnToControlValue() - { - Reference< XPropertySet > xBoundField( getField() ); - if ( !xBoundField.is() ) - { - OSL_FAIL( "OListBoxModel::translateDbColumnToControlValue: no field? How could that happen?!" ); - return Any(); - } - - Sequence< sal_Int16 > aSelectionIndicies; - - ORowSetValue aCurrentValue; - aCurrentValue.fill( impl_hasBoundComponent() ? m_nBoundColumnType : getFieldType(), m_xColumn ); - - // reset selection for NULL values - if ( aCurrentValue.isNull() ) - { - if ( m_nNULLPos != -1 ) - { - aSelectionIndicies.realloc(1); - aSelectionIndicies[0] = m_nNULLPos; - } - } - else - { - ValueList aValues( impl_getValues() ); - ValueList::const_iterator curValuePos = ::std::find( aValues.begin(), aValues.end(), aCurrentValue ); - if ( curValuePos != aValues.end() ) - { - aSelectionIndicies.realloc( 1 ); - aSelectionIndicies[0] = curValuePos - aValues.begin(); - } - } - - m_aSaveValue = aCurrentValue; - - return makeAny( aSelectionIndicies ); - } - - // XReset - //------------------------------------------------------------------------------ - Any OListBoxModel::getDefaultForReset() const - { - Any aValue; - if (m_aDefaultSelectSeq.getLength()) - aValue <<= m_aDefaultSelectSeq; - else if (m_nNULLPos != -1) // gebundene Listbox - { - Sequence<sal_Int16> aSeq(1); - aSeq.getArray()[0] = m_nNULLPos; - aValue <<= aSeq; - } - else - { - Sequence<sal_Int16> aSeq; - aValue <<= aSeq; - } - - return aValue; - } - - //-------------------------------------------------------------------- - void OListBoxModel::resetNoBroadcast() - { - OBoundControlModel::resetNoBroadcast(); - m_aSaveValue.setNull(); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxModel::disposing( const EventObject& _rSource ) throw ( RuntimeException ) - { - if ( !OEntryListHelper::handleDisposing( _rSource ) ) - OBoundControlModel::disposing( _rSource ); - } - - //-------------------------------------------------------------------- - namespace - { - /** type how we should transfer our selection to external value bindings - */ - enum ExchangeType - { - eIndexList, /// as list of indexes of selected entries - eIndex, /// as index of the selected entry - eEntryList, /// as list of string representations of selected entries - eEntry /// as string representation of the selected entry - }; - - //-------------------------------------------------------------------- - ExchangeType lcl_getCurrentExchangeType( const Type& _rExchangeType ) - { - switch ( _rExchangeType.getTypeClass() ) - { - case TypeClass_STRING: - return eEntry; - case TypeClass_LONG: - return eIndex; - case TypeClass_SEQUENCE: - { - Type aElementType = ::comphelper::getSequenceElementType( _rExchangeType ); - switch ( aElementType.getTypeClass() ) - { - case TypeClass_STRING: - return eEntryList; - case TypeClass_LONG: - return eIndexList; - default: - break; - } - } - default: - break; - } - OSL_FAIL( "lcl_getCurrentExchangeType: unsupported (unexpected) exchange type!" ); - return eEntry; - } - } - - //-------------------------------------------------------------------- - Any OListBoxModel::translateExternalValueToControlValue( const Any& _rExternalValue ) const - { - Sequence< sal_Int16 > aSelectIndexes; - - switch ( lcl_getCurrentExchangeType( getExternalValueType() ) ) - { - case eIndexList: - { - // unfortunately, our select sequence is a sequence<short>, while the external binding - // supplies sequence<int> only -> transform this - Sequence< sal_Int32 > aSelectIndexesPure; - OSL_VERIFY( _rExternalValue >>= aSelectIndexesPure ); - aSelectIndexes.realloc( aSelectIndexesPure.getLength() ); - ::std::copy( - aSelectIndexesPure.getConstArray(), - aSelectIndexesPure.getConstArray() + aSelectIndexesPure.getLength(), - aSelectIndexes.getArray() - ); - } - break; - - case eIndex: - { - sal_Int32 nSelectIndex = -1; - OSL_VERIFY( _rExternalValue >>= nSelectIndex ); - if ( ( nSelectIndex >= 0 ) && ( nSelectIndex < getStringItemList().getLength() ) ) - { - aSelectIndexes.realloc( 1 ); - aSelectIndexes[ 0 ] = static_cast< sal_Int16 >( nSelectIndex ); - } - } - break; - - case eEntryList: - { - // we can retrieve a string list from the binding for multiple selection - Sequence< ::rtl::OUString > aSelectEntries; - OSL_VERIFY( _rExternalValue >>= aSelectEntries ); - - ::std::set< sal_Int16 > aSelectionSet; - - // find the selection entries in our item list - const ::rtl::OUString* pSelectEntries = aSelectEntries.getArray(); - const ::rtl::OUString* pSelectEntriesEnd = pSelectEntries + aSelectEntries.getLength(); - while ( pSelectEntries != pSelectEntriesEnd ) - { - // the indexes where the current string appears in our string items - Sequence< sal_Int16 > aThisEntryIndexes; - aThisEntryIndexes = findValue( getStringItemList(), *pSelectEntries++, sal_False ); - - // insert all the indexes of this entry into our set - ::std::copy( - aThisEntryIndexes.getConstArray(), - aThisEntryIndexes.getConstArray() + aThisEntryIndexes.getLength(), - ::std::insert_iterator< ::std::set< sal_Int16 > >( aSelectionSet, aSelectionSet.begin() ) - ); - } - - // copy the indexes to the sequence - aSelectIndexes.realloc( aSelectionSet.size() ); - ::std::copy( - aSelectionSet.begin(), - aSelectionSet.end(), - aSelectIndexes.getArray() - ); - } - break; - - case eEntry: - { - ::rtl::OUString sStringToSelect; - OSL_VERIFY( _rExternalValue >>= sStringToSelect ); - - aSelectIndexes = findValue( getStringItemList(), sStringToSelect, sal_False ); - } - break; - } - - return makeAny( aSelectIndexes ); - } - - //-------------------------------------------------------------------- - namespace - { - //................................................................ - struct ExtractStringFromSequence_Safe : public ::std::unary_function< sal_Int16, ::rtl::OUString > - { - protected: - const Sequence< ::rtl::OUString >& m_rList; - - public: - ExtractStringFromSequence_Safe( const Sequence< ::rtl::OUString >& _rList ) : m_rList( _rList ) { } - - ::rtl::OUString operator ()( sal_Int16 _nIndex ) - { - OSL_ENSURE( _nIndex < m_rList.getLength(), "ExtractStringFromSequence_Safe: inconsistence!" ); - if ( _nIndex < m_rList.getLength() ) - return m_rList[ _nIndex ]; - return ::rtl::OUString(); - } - }; - - //................................................................ - Any lcl_getSingleSelectedEntry( const Sequence< sal_Int16 >& _rSelectSequence, const Sequence< ::rtl::OUString >& _rStringList ) - { - Any aReturn; - - // by definition, multiple selected entries are transfered as NULL if the - // binding does not support string lists - if ( _rSelectSequence.getLength() <= 1 ) - { - ::rtl::OUString sSelectedEntry; - - if ( _rSelectSequence.getLength() == 1 ) - sSelectedEntry = ExtractStringFromSequence_Safe( _rStringList )( _rSelectSequence[0] ); - - aReturn <<= sSelectedEntry; - } - - return aReturn; - } - - //................................................................ - Any lcl_getMultiSelectedEntries( const Sequence< sal_Int16 >& _rSelectSequence, const Sequence< ::rtl::OUString >& _rStringList ) - { - Sequence< ::rtl::OUString > aSelectedEntriesTexts( _rSelectSequence.getLength() ); - ::std::transform( - _rSelectSequence.getConstArray(), - _rSelectSequence.getConstArray() + _rSelectSequence.getLength(), - aSelectedEntriesTexts.getArray(), - ExtractStringFromSequence_Safe( _rStringList ) - ); - return makeAny( aSelectedEntriesTexts ); - } - } - - //-------------------------------------------------------------------- - Any OListBoxModel::translateControlValueToExternalValue( ) const - { - OSL_PRECOND( hasExternalValueBinding(), "OListBoxModel::translateControlValueToExternalValue: no binding!" ); - - Sequence< sal_Int16 > aSelectSequence; - const_cast< OListBoxModel* >( this )->getPropertyValue( PROPERTY_SELECT_SEQ ) >>= aSelectSequence; - - Any aReturn; - switch ( lcl_getCurrentExchangeType( getExternalValueType() ) ) - { - case eIndexList: - { - // unfortunately, the select sequence is a sequence<short>, but our binding - // expects int's - Sequence< sal_Int32 > aTransformed( aSelectSequence.getLength() ); - ::std::copy( - aSelectSequence.getConstArray(), - aSelectSequence.getConstArray() + aSelectSequence.getLength(), - aTransformed.getArray() - ); - aReturn <<= aTransformed; - } - break; - - case eIndex: - if ( aSelectSequence.getLength() <= 1 ) - { - sal_Int32 nIndex = -1; - - if ( aSelectSequence.getLength() == 1 ) - nIndex = aSelectSequence[0]; - - aReturn <<= nIndex; - } - break; - - case eEntryList: - aReturn = lcl_getMultiSelectedEntries( aSelectSequence, getStringItemList() ); - break; - - case eEntry: - aReturn = lcl_getSingleSelectedEntry( aSelectSequence, getStringItemList() ); - break; - } - - return aReturn; - } - - //-------------------------------------------------------------------- - Any OListBoxModel::getCurrentFormComponentValue() const - { - if ( hasValidator() ) - return OBoundControlModel::getCurrentFormComponentValue(); - - Any aCurretnValue; - - try - { - Sequence< sal_Int16 > aSelectSequence; - OSL_VERIFY( const_cast< OListBoxModel* >( this )->getPropertyValue( PROPERTY_SELECT_SEQ ) >>= aSelectSequence ); - - sal_Bool bMultiSelection( sal_False ); - OSL_VERIFY( const_cast< OListBoxModel* >( this )->getPropertyValue( PROPERTY_MULTISELECTION ) >>= bMultiSelection ); - - if ( bMultiSelection ) - aCurretnValue = lcl_getMultiSelectedEntries( aSelectSequence, getStringItemList() ); - else - aCurretnValue = lcl_getSingleSelectedEntry( aSelectSequence, getStringItemList() ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - - return aCurretnValue; - } - - //-------------------------------------------------------------------- - Sequence< Type > OListBoxModel::getSupportedBindingTypes() - { - Sequence< Type > aTypes(4); - aTypes[0] = ::getCppuType( static_cast< Sequence< sal_Int32 >* >( NULL ) ); - aTypes[1] = ::getCppuType( static_cast< sal_Int32* >( NULL ) ); - aTypes[2] = ::getCppuType( static_cast< Sequence< ::rtl::OUString >* >( NULL ) ); - aTypes[3] = ::getCppuType( static_cast< ::rtl::OUString* >( NULL ) ); - return aTypes; - } - - //-------------------------------------------------------------------- - void OListBoxModel::stringItemListChanged( ControlModelLock& _rInstanceLock ) - { - if ( !m_xAggregateSet.is() ) - return; - - suspendValueListening(); - try - { - m_xAggregateSet->setPropertyValue( PROPERTY_STRINGITEMLIST, makeAny( getStringItemList() ) ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - resumeValueListening(); - - // update the selection here - if ( hasExternalValueBinding( ) ) - transferExternalValueToControl( _rInstanceLock ); - else - { - if ( hasField() ) - { - // TODO: update the selection in case we're bound to a database column - } - else - { - if ( m_aDefaultSelectSeq.getLength() ) - setControlValue( makeAny( m_aDefaultSelectSeq ), eOther ); - } - } - } - - //-------------------------------------------------------------------- - void OListBoxModel::connectedExternalListSource( ) - { - // TODO? - } - - //-------------------------------------------------------------------- - void OListBoxModel::disconnectedExternalListSource( ) - { - // TODO: in case we're part of an already loaded form, we should probably simulate - // an onConnectedDbColumn, so our list get's filled with the data as indicated - // by our SQL-binding related properties - } - - //-------------------------------------------------------------------- - void OListBoxModel::impl_refreshDbEntryList( bool _bForce ) - { - DBG_ASSERT( !hasExternalListSource(), "OListBoxModel::impl_refreshDbEntryList: invalid call!" ); - - if ( !hasExternalListSource( ) - && ( m_eListSourceType != ListSourceType_VALUELIST ) - && ( m_xCursor.is() ) - ) - { - loadData( _bForce ); - } - } - - //-------------------------------------------------------------------- - void OListBoxModel::refreshInternalEntryList() - { - impl_refreshDbEntryList( true ); - if ( hasField() && m_xCursor.is() ) - initFromField( m_xCursor ); - } - - //================================================================== - // OListBoxControl - //================================================================== - - //------------------------------------------------------------------ - InterfaceRef SAL_CALL OListBoxControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException) - { - return *(new OListBoxControl(_rxFactory)); - } - - //------------------------------------------------------------------------------ - Sequence< Type> OListBoxControl::_getTypes() - { - return TypeBag( - OBoundControl::_getTypes(), - OListBoxControl_BASE::getTypes() - ).getTypes(); - } - - //------------------------------------------------------------------ - Any SAL_CALL OListBoxControl::queryAggregation(const Type& _rType) throw (RuntimeException) - { - Any aReturn = OListBoxControl_BASE::queryInterface( _rType ); - - if ( !aReturn.hasValue() - || _rType.equals( XTypeProvider::static_type() ) - ) - aReturn = OBoundControl::queryAggregation( _rType ); - - return aReturn; - } - - DBG_NAME(OListBoxControl); - //------------------------------------------------------------------------------ - OListBoxControl::OListBoxControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl( _rxFactory, VCL_CONTROL_LISTBOX, sal_False ) - ,m_aChangeListeners( m_aMutex ) - ,m_aItemListeners( m_aMutex ) - ,m_pItemBroadcaster( NULL ) - { - DBG_CTOR(OListBoxControl,NULL); - - increment(m_refCount); - { - // als FocusListener anmelden - Reference<XWindow> xComp; - if (query_aggregation(m_xAggregate, xComp)) - xComp->addFocusListener(this); - - // als ItemListener anmelden - if ( query_aggregation( m_xAggregate, m_xAggregateListBox ) ) - m_xAggregateListBox->addItemListener(this); - } - // Refcount bei 2 fuer angemeldete Listener - decrement(m_refCount); - - doSetDelegator(); - - m_aChangeTimer.SetTimeout(500); - m_aChangeTimer.SetTimeoutHdl(LINK(this,OListBoxControl,OnTimeout)); - } - - //------------------------------------------------------------------------------ - OListBoxControl::~OListBoxControl() - { - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - - doResetDelegator(); - m_xAggregateListBox.clear(); - - DBG_DTOR(OListBoxControl,NULL); - } - - //------------------------------------------------------------------------------ - StringSequence SAL_CALL OListBoxControl::getSupportedServiceNames() throw(RuntimeException) - { - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_LISTBOX; - return aSupported; - } - - - // XFocusListener - //------------------------------------------------------------------------------ - void SAL_CALL OListBoxControl::focusGained(const FocusEvent& /*_rEvent*/) throw(RuntimeException) - { - ::osl::MutexGuard aGuard(m_aMutex); - if ( m_aChangeListeners.getLength() ) // only if there are listeners - { - Reference<XPropertySet> xSet(getModel(), UNO_QUERY); - if (xSet.is()) - { - // memorize the current selection for posting the change event - m_aCurrentSelection = xSet->getPropertyValue(PROPERTY_SELECT_SEQ); - } - } - } - - //------------------------------------------------------------------------------ - void SAL_CALL OListBoxControl::focusLost(const FocusEvent& /*_rEvent*/) throw(RuntimeException) - { - m_aCurrentSelection.clear(); - } - - // XItemListener - //------------------------------------------------------------------------------ - void SAL_CALL OListBoxControl::itemStateChanged(const ItemEvent& _rEvent) throw(RuntimeException) - { - // forward this to our listeners - Reference< XChild > xChild( getModel(), UNO_QUERY ); - if ( xChild.is() && xChild->getParent().is() ) - { - ::osl::MutexGuard aGuard( m_aMutex ); - if ( m_aItemListeners.getLength() ) - { - if ( !m_pItemBroadcaster.is() ) - { - m_pItemBroadcaster.set( new ::comphelper::AsyncEventNotifier ); - m_pItemBroadcaster->create(); - } - m_pItemBroadcaster->addEvent( new ItemEventDescription( _rEvent ), this ); - } - } - else - m_aItemListeners.notifyEach( &XItemListener::itemStateChanged, _rEvent ); - - // and do the handling for the ChangeListeners - ::osl::ClearableMutexGuard aGuard(m_aMutex); - if ( m_aChangeTimer.IsActive() ) - { - Reference<XPropertySet> xSet(getModel(), UNO_QUERY); - m_aCurrentSelection = xSet->getPropertyValue(PROPERTY_SELECT_SEQ); - - m_aChangeTimer.Stop(); - m_aChangeTimer.Start(); - } - else - { - if ( m_aChangeListeners.getLength() && m_aCurrentSelection.hasValue() ) - { - Reference<XPropertySet> xSet(getModel(), UNO_QUERY); - if (xSet.is()) - { - // Has the selection been changed? - sal_Bool bModified(sal_False); - Any aValue = xSet->getPropertyValue(PROPERTY_SELECT_SEQ); - - Sequence<sal_Int16>& rSelection = *(Sequence<sal_Int16> *)aValue.getValue(); - Sequence<sal_Int16>& rOldSelection = *(Sequence<sal_Int16> *)m_aCurrentSelection.getValue(); - sal_Int32 nLen = rSelection.getLength(); - if (nLen != rOldSelection.getLength()) - bModified = sal_True; - else - { - const sal_Int16* pVal = rSelection.getConstArray(); - const sal_Int16* pCompVal = rOldSelection.getConstArray(); - - while (nLen-- && !bModified) - bModified = pVal[nLen] != pCompVal[nLen]; - } - - if (bModified) - { - m_aCurrentSelection = aValue; - m_aChangeTimer.Start(); - } - } - } - else if (m_aCurrentSelection.hasValue()) - m_aCurrentSelection.clear(); - } - } - - // XEventListener - //------------------------------------------------------------------------------ - void SAL_CALL OListBoxControl::disposing(const EventObject& _rSource) throw (RuntimeException) - { - OBoundControl::disposing(_rSource); - } - - // XChangeBroadcaster - //------------------------------------------------------------------------------ - void SAL_CALL OListBoxControl::addChangeListener(const Reference<XChangeListener>& _rxListener) throw(RuntimeException) - { - m_aChangeListeners.addInterface( _rxListener ); - } - - //------------------------------------------------------------------------------ - void SAL_CALL OListBoxControl::removeChangeListener(const Reference<XChangeListener>& _rxListener) throw(RuntimeException) - { - m_aChangeListeners.removeInterface( _rxListener ); - } - - // OComponentHelper - //------------------------------------------------------------------------------ - void OListBoxControl::disposing() - { - if (m_aChangeTimer.IsActive()) - m_aChangeTimer.Stop(); - - EventObject aEvent( *this ); - m_aChangeListeners.disposeAndClear( aEvent ); - m_aItemListeners.disposeAndClear( aEvent ); - - { - ::osl::MutexGuard aGuard( m_aMutex ); - if ( m_pItemBroadcaster.is() ) - { - m_pItemBroadcaster->removeEventsForProcessor( this ); - m_pItemBroadcaster->terminate(); - m_pItemBroadcaster = NULL; - } - } - - OBoundControl::disposing(); - } - - //------------------------------------------------------------------------------ - void OListBoxControl::processEvent( const AnyEvent& _rEvent ) - { - Reference< XListBox > xKeepAlive( this ); - { - ::osl::MutexGuard aGuard( m_aMutex ); - if ( OComponentHelper::rBHelper.bDisposed ) - return; - } - const ItemEventDescription& rItemEvent = static_cast< const ItemEventDescription& >( _rEvent ); - m_aItemListeners.notifyEach( &XItemListener::itemStateChanged, rItemEvent.getEventObject() ); - } - - //------------------------------------------------------------------------------ - IMPL_LINK(OListBoxControl, OnTimeout, void*, /*EMPTYTAG*/) - { - m_aChangeListeners.notifyEach( &XChangeListener::changed, EventObject( *this ) ); - return 0L; - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::addItemListener( const Reference< XItemListener >& l ) throw (RuntimeException) - { - m_aItemListeners.addInterface( l ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::removeItemListener( const Reference< XItemListener >& l ) throw (RuntimeException) - { - m_aItemListeners.removeInterface( l ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::addActionListener( const Reference< XActionListener >& l ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->addActionListener( l ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::removeActionListener( const Reference< XActionListener >& l ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->removeActionListener( l ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::addItem( const ::rtl::OUString& aItem, ::sal_Int16 nPos ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->addItem( aItem, nPos ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::addItems( const Sequence< ::rtl::OUString >& aItems, ::sal_Int16 nPos ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->addItems( aItems, nPos ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::removeItems( ::sal_Int16 nPos, ::sal_Int16 nCount ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->removeItems( nPos, nCount ); - } - - //-------------------------------------------------------------------- - ::sal_Int16 SAL_CALL OListBoxControl::getItemCount( ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - return m_xAggregateListBox->getItemCount(); - return 0; - } - - //-------------------------------------------------------------------- - ::rtl::OUString SAL_CALL OListBoxControl::getItem( ::sal_Int16 nPos ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - return m_xAggregateListBox->getItem( nPos ); - return ::rtl::OUString( ); - } - - //-------------------------------------------------------------------- - Sequence< ::rtl::OUString > SAL_CALL OListBoxControl::getItems( ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - return m_xAggregateListBox->getItems(); - return Sequence< ::rtl::OUString >( ); - } - - //-------------------------------------------------------------------- - ::sal_Int16 SAL_CALL OListBoxControl::getSelectedItemPos( ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - return m_xAggregateListBox->getSelectedItemPos(); - return 0; - } - - //-------------------------------------------------------------------- - Sequence< ::sal_Int16 > SAL_CALL OListBoxControl::getSelectedItemsPos( ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - return m_xAggregateListBox->getSelectedItemsPos(); - return Sequence< ::sal_Int16 >( ); - } - - //-------------------------------------------------------------------- - ::rtl::OUString SAL_CALL OListBoxControl::getSelectedItem( ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - return m_xAggregateListBox->getSelectedItem(); - return ::rtl::OUString( ); - } - - //-------------------------------------------------------------------- - Sequence< ::rtl::OUString > SAL_CALL OListBoxControl::getSelectedItems( ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - return m_xAggregateListBox->getSelectedItems(); - return Sequence< ::rtl::OUString >( ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::selectItemPos( ::sal_Int16 nPos, ::sal_Bool bSelect ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->selectItemPos( nPos, bSelect ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::selectItemsPos( const Sequence< ::sal_Int16 >& aPositions, ::sal_Bool bSelect ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->selectItemsPos( aPositions, bSelect ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::selectItem( const ::rtl::OUString& aItem, ::sal_Bool bSelect ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->selectItem( aItem, bSelect ); - } - - //-------------------------------------------------------------------- - ::sal_Bool SAL_CALL OListBoxControl::isMutipleMode( ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - return m_xAggregateListBox->isMutipleMode(); - return sal_False; - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::setMultipleMode( ::sal_Bool bMulti ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->setMultipleMode( bMulti ); - } - - //-------------------------------------------------------------------- - ::sal_Int16 SAL_CALL OListBoxControl::getDropDownLineCount( ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - return m_xAggregateListBox->getDropDownLineCount(); - return 0; - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::setDropDownLineCount( ::sal_Int16 nLines ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->setDropDownLineCount( nLines ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OListBoxControl::makeVisible( ::sal_Int16 nEntry ) throw (RuntimeException) - { - if ( m_xAggregateListBox.is() ) - m_xAggregateListBox->makeVisible( nEntry ); - } - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/ListBox.hxx b/forms/source/component/ListBox.hxx deleted file mode 100644 index a46442ec5..000000000 --- a/forms/source/component/ListBox.hxx +++ /dev/null @@ -1,288 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_LISTBOX_HXX_ -#define _FORMS_LISTBOX_HXX_ - -#include "FormComponent.hxx" -#include "cachedrowset.hxx" -#include "errorbroadcaster.hxx" -#include "entrylisthelper.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/util/XNumberFormatter.hpp> -#include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp> -#include <com/sun/star/form/ListSourceType.hpp> -#include <com/sun/star/awt/XItemListener.hpp> -#include <com/sun/star/awt/XFocusListener.hpp> -#include <com/sun/star/awt/XListBox.hpp> -#include <com/sun/star/form/XChangeBroadcaster.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -/** === end UNO includes === **/ - -#include <comphelper/asyncnotification.hxx> -#include <connectivity/FValue.hxx> -#include <cppuhelper/interfacecontainer.hxx> -#include <cppuhelper/implbase1.hxx> -#include <vcl/timer.hxx> - -#include <vector> - -namespace dbtools -{ - class FormattedColumnValue; -} - -//......................................................................... -namespace frm -{ - -//================================================================== -//= OListBoxModel -//================================================================== -typedef ::std::vector< ::connectivity::ORowSetValue > ValueList; - -class OListBoxModel :public OBoundControlModel - ,public OEntryListHelper - ,public OErrorBroadcaster -{ - - CachedRowSet m_aListRowSet; // the row set to fill the list - ::connectivity::ORowSetValue m_aSaveValue; - - // <properties> - ::com::sun::star::form::ListSourceType m_eListSourceType; // type der list source - ::com::sun::star::uno::Any m_aBoundColumn; - ValueList m_aListSourceValues; - ValueList m_aBoundValues; - ::com::sun::star::uno::Sequence<sal_Int16> m_aDefaultSelectSeq; // DefaultSelected - // </properties> - - sal_Int16 m_nNULLPos; // position of the NULL value in our list - sal_Int32 m_nBoundColumnType; - -private: - ::connectivity::ORowSetValue getFirstSelectedValue() const; - - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - DECLARE_DEFAULT_LEAF_XTOR( OListBoxModel ); - -// XServiceInfo - IMPLEMENTATION_NAME(OListBoxModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - -// UNO Anbindung - DECLARE_UNO3_AGG_DEFAULTS(OListBoxModel, OBoundControlModel); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException); - -// OComponentHelper - virtual void SAL_CALL disposing(); - -// OPropertySetHelper - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const; - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw (::com::sun::star::uno::Exception); - virtual sal_Bool SAL_CALL convertFastPropertyValue( - ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw (::com::sun::star::lang::IllegalArgumentException); - -protected: - // XMultiPropertySet - virtual void SAL_CALL setPropertyValues(const ::com::sun::star::uno::Sequence< ::rtl::OUString >& PropertyNames, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& Values) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - virtual void describeAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps - ) const; - - // XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException); - - // OPropertyChangeListener - virtual void _propertyChanged( const ::com::sun::star::beans::PropertyChangeEvent& _rEvt ) throw ( ::com::sun::star::uno::RuntimeException ); - - // prevent method hiding - using OBoundControlModel::getFastPropertyValue; - using OBoundControlModel::setPropertyValues; - -protected: - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > - getSupportedBindingTypes(); - virtual ::com::sun::star::uno::Any - translateExternalValueToControlValue( const ::com::sun::star::uno::Any& _rExternalValue ) const; - virtual ::com::sun::star::uno::Any - translateControlValueToExternalValue( ) const; - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - - virtual void onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm ); - virtual void onDisconnectedDbColumn(); - - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - virtual void resetNoBroadcast(); - - virtual ::com::sun::star::uno::Any - getCurrentFormComponentValue() const; - - // OEntryListHelper overriables - virtual void stringItemListChanged( ControlModelLock& _rInstanceLock ); - virtual void connectedExternalListSource( ); - virtual void disconnectedExternalListSource( ); - virtual void refreshInternalEntryList(); - -protected: - DECLARE_XCLONEABLE(); - -private: - void loadData( bool _bForce ); - - /** refreshes the list boxes list data - @precond we don't actually have an external list source - */ - void impl_refreshDbEntryList( bool _bForce ); - - ValueList impl_getValues() const; - - bool impl_hasBoundComponent() const { return m_nBoundColumnType != ::com::sun::star::sdbc::DataType::SQLNULL; } -}; - -//================================================================== -//= OListBoxControl -//================================================================== -typedef ::cppu::ImplHelper4 < ::com::sun::star::awt::XFocusListener - , ::com::sun::star::awt::XItemListener - , ::com::sun::star::awt::XListBox - , ::com::sun::star::form::XChangeBroadcaster - > OListBoxControl_BASE; - -class ChangeListeners; - -class OListBoxControl :public OBoundControl - ,public OListBoxControl_BASE - ,public IEventProcessor -{ -private: - ::cppu::OInterfaceContainerHelper m_aChangeListeners; - ::cppu::OInterfaceContainerHelper m_aItemListeners; - - ::com::sun::star::uno::Any m_aCurrentSelection; - Timer m_aChangeTimer; - - ::com::sun::star::uno::Reference< ::com::sun::star::awt::XListBox > - m_xAggregateListBox; - - ::rtl::Reference< ::comphelper::AsyncEventNotifier > - m_pItemBroadcaster; - -protected: - // UNO Anbindung - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - OListBoxControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - virtual ~OListBoxControl(); - - // UNO Anbindung - DECLARE_UNO3_AGG_DEFAULTS(OListBoxControl, OBoundControl); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException); - -// XServiceInfo - IMPLEMENTATION_NAME(OListBoxControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - -// XChangeBroadcaster - virtual void SAL_CALL addChangeListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XChangeListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeChangeListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XChangeListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - -// XFocusListener - virtual void SAL_CALL focusGained(const ::com::sun::star::awt::FocusEvent& _rEvent) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL focusLost(const ::com::sun::star::awt::FocusEvent& _rEvent) throw(::com::sun::star::uno::RuntimeException); - -// XItemListener - virtual void SAL_CALL itemStateChanged(const ::com::sun::star::awt::ItemEvent& _rEvent) throw(::com::sun::star::uno::RuntimeException); - -// XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException); - -// OComponentHelper - virtual void SAL_CALL disposing(); - -// XListBox - virtual void SAL_CALL addItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeItemListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XItemListener >& l ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& l ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeActionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XActionListener >& l ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addItem( const ::rtl::OUString& aItem, ::sal_Int16 nPos ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addItems( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aItems, ::sal_Int16 nPos ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeItems( ::sal_Int16 nPos, ::sal_Int16 nCount ) throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Int16 SAL_CALL getItemCount( ) throw (::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getItem( ::sal_Int16 nPos ) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getItems( ) throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Int16 SAL_CALL getSelectedItemPos( ) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::sal_Int16 > SAL_CALL getSelectedItemsPos( ) throw (::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getSelectedItem( ) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSelectedItems( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL selectItemPos( ::sal_Int16 nPos, ::sal_Bool bSelect ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL selectItemsPos( const ::com::sun::star::uno::Sequence< ::sal_Int16 >& aPositions, ::sal_Bool bSelect ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL selectItem( const ::rtl::OUString& aItem, ::sal_Bool bSelect ) throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Bool SAL_CALL isMutipleMode( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setMultipleMode( ::sal_Bool bMulti ) throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Int16 SAL_CALL getDropDownLineCount( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setDropDownLineCount( ::sal_Int16 nLines ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL makeVisible( ::sal_Int16 nEntry ) throw (::com::sun::star::uno::RuntimeException); - -protected: - // IEventProcessor - virtual void processEvent( const ::comphelper::AnyEvent& _rEvent ); - -private: - DECL_LINK( OnTimeout, void* ); -}; - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_LISTBOX_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Numeric.cxx b/forms/source/component/Numeric.cxx deleted file mode 100644 index 5dc45da96..000000000 --- a/forms/source/component/Numeric.cxx +++ /dev/null @@ -1,224 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "Numeric.hxx" -#include <tools/debug.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::form::binding; - -//================================================================== -// ONumericControl -//================================================================== - -//------------------------------------------------------------------ -ONumericControl::ONumericControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl(_rxFactory, VCL_CONTROL_NUMERICFIELD) -{ -} - -//------------------------------------------------------------------------------ -StringSequence ONumericControl::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_NUMERICFIELD; - return aSupported; -} - - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL ONumericControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new ONumericControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> ONumericControl::_getTypes() -{ - return OBoundControl::_getTypes(); -} - -//================================================================== -// ONumericModel -//================================================================== -//------------------------------------------------------------------ -InterfaceRef SAL_CALL ONumericModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new ONumericModel(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> ONumericModel::_getTypes() -{ - return OEditBaseModel::_getTypes(); -} - -//------------------------------------------------------------------ -DBG_NAME( ONumericModel ) -//------------------------------------------------------------------ -ONumericModel::ONumericModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OEditBaseModel( _rxFactory, VCL_CONTROLMODEL_NUMERICFIELD, FRM_SUN_CONTROL_NUMERICFIELD, sal_True, sal_True ) - // use the old control name for compytibility reasons -{ - DBG_CTOR( ONumericModel, NULL ); - - m_nClassId = FormComponentType::NUMERICFIELD; - initValueProperty( PROPERTY_VALUE, PROPERTY_ID_VALUE ); -} - -//------------------------------------------------------------------ -ONumericModel::ONumericModel( const ONumericModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OEditBaseModel( _pOriginal, _rxFactory ) -{ - DBG_CTOR( ONumericModel, NULL ); -} - -//------------------------------------------------------------------ -ONumericModel::~ONumericModel() -{ - DBG_DTOR( ONumericModel, NULL ); -} - -// XCloneable -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( ONumericModel ) - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence ONumericModel::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControlModel::getSupportedServiceNames(); - - sal_Int32 nOldLen = aSupported.getLength(); - aSupported.realloc( nOldLen + 8 ); - ::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen; - - *pStoreTo++ = BINDABLE_CONTROL_MODEL; - *pStoreTo++ = DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_CONTROL_MODEL; - - *pStoreTo++ = BINDABLE_DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_BINDABLE_CONTROL_MODEL; - - *pStoreTo++ = FRM_SUN_COMPONENT_NUMERICFIELD; - *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_NUMERICFIELD; - *pStoreTo++ = BINDABLE_DATABASE_NUMERIC_FIELD; - - return aSupported; -} - -//------------------------------------------------------------------------------ -void ONumericModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 2, OEditBaseModel ) - DECL_PROP3(DEFAULT_VALUE, double, BOUND, MAYBEDEFAULT, MAYBEVOID); - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL ONumericModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_NUMERICFIELD; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -sal_Bool ONumericModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) -{ - Any aControlValue( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) ); - if ( !compare( aControlValue, m_aSaveValue ) ) - { - if ( !aControlValue.hasValue() ) - m_xColumnUpdate->updateNull(); - else - { - try - { - m_xColumnUpdate->updateDouble( getDouble( aControlValue ) ); - } - catch(Exception&) - { - return sal_False; - } - } - m_aSaveValue = aControlValue; - } - return sal_True; -} - -//------------------------------------------------------------------------------ -Any ONumericModel::translateDbColumnToControlValue() -{ - m_aSaveValue <<= (double)m_xColumn->getDouble(); - if ( m_xColumn->wasNull() ) - m_aSaveValue.clear(); - - return m_aSaveValue; -} - -//------------------------------------------------------------------------------ -Any ONumericModel::getDefaultForReset() const -{ - Any aValue; - if (m_aDefault.getValueType().getTypeClass() == TypeClass_DOUBLE) - aValue = m_aDefault; - - return aValue; -} - -//------------------------------------------------------------------------------ -void ONumericModel::resetNoBroadcast() -{ - OEditBaseModel::resetNoBroadcast(); - m_aSaveValue.clear(); -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Numeric.hxx b/forms/source/component/Numeric.hxx deleted file mode 100644 index f87cf9008..000000000 --- a/forms/source/component/Numeric.hxx +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_NUMERIC_HXX_ -#define _FORMS_NUMERIC_HXX_ - -#include "EditBase.hxx" - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -//= ONumericModel -//================================================================== -class ONumericModel - :public OEditBaseModel -{ -private: - ::com::sun::star::uno::Any m_aSaveValue; -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - DECLARE_DEFAULT_LEAF_XTOR( ONumericModel ); - - // ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(ONumericModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // ::com::sun::star::io::XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - -protected: - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - virtual void resetNoBroadcast(); - -protected: - DECLARE_XCLONEABLE(); -}; - -//================================================================== -//= ONumericControl -//================================================================== -class ONumericControl: public OBoundControl -{ -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - ONumericControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - - // ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(ONumericControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FORMS_NUMERIC_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Pattern.cxx b/forms/source/component/Pattern.cxx deleted file mode 100644 index b600553db..000000000 --- a/forms/source/component/Pattern.cxx +++ /dev/null @@ -1,264 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "Pattern.hxx" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ - -//......................................................................... -namespace frm -{ -//......................................................................... - - /** === begin UNO using === **/ - using ::com::sun::star::uno::Reference; - using ::com::sun::star::lang::XMultiServiceFactory; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::uno::Type; - using ::com::sun::star::beans::Property; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::uno::XInterface; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::sdbc::XRowSet; - using ::com::sun::star::uno::UNO_QUERY; - /** === end UNO using === **/ - namespace FormComponentType = ::com::sun::star::form::FormComponentType; - -//================================================================== -// OPatternControl -//================================================================== -//------------------------------------------------------------------ -OPatternControl::OPatternControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl(_rxFactory, VCL_CONTROL_PATTERNFIELD) -{ -} - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OPatternControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OPatternControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OPatternControl::_getTypes() -{ - return OBoundControl::_getTypes(); -} - -//------------------------------------------------------------------------------ -StringSequence OPatternControl::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_PATTERNFIELD; - return aSupported; -} - -//================================================================== -// OPatternModel -//================================================================== -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OPatternModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OPatternModel(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OPatternModel::_getTypes() -{ - return OEditBaseModel::_getTypes(); -} - -//------------------------------------------------------------------ -DBG_NAME( OPatternModel ) -//------------------------------------------------------------------ -OPatternModel::OPatternModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OEditBaseModel( _rxFactory, VCL_CONTROLMODEL_PATTERNFIELD, FRM_SUN_CONTROL_PATTERNFIELD, sal_False, sal_False ) - // use the old control name for compytibility reasons -{ - DBG_CTOR( OPatternModel, NULL ); - - m_nClassId = FormComponentType::PATTERNFIELD; - initValueProperty( PROPERTY_TEXT, PROPERTY_ID_TEXT ); -} - -//------------------------------------------------------------------ -OPatternModel::OPatternModel( const OPatternModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OEditBaseModel( _pOriginal, _rxFactory ) -{ - DBG_CTOR( OPatternModel, NULL ); -} - -//------------------------------------------------------------------ -OPatternModel::~OPatternModel() -{ - DBG_DTOR( OPatternModel, NULL ); -} - -// XCloneable -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OPatternModel ) - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OPatternModel::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControlModel::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 2); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-2] = FRM_SUN_COMPONENT_DATABASE_PATTERNFIELD; - pArray[aSupported.getLength()-1] = FRM_SUN_COMPONENT_PATTERNFIELD; - return aSupported; -} - - -//------------------------------------------------------------------------------ -void OPatternModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 4, OEditBaseModel ) - DECL_PROP2(DEFAULT_TEXT, ::rtl::OUString, BOUND, MAYBEDEFAULT); - DECL_BOOL_PROP1(EMPTY_IS_NULL, BOUND); - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - DECL_PROP2(FILTERPROPOSAL, sal_Bool, BOUND, MAYBEDEFAULT); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OPatternModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_PATTERNFIELD; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -sal_Bool OPatternModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) -{ - Any aNewValue( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) ); - - if ( aNewValue != m_aLastKnownValue ) - { - ::rtl::OUString sNewValue; - aNewValue >>= sNewValue; - - if ( !aNewValue.hasValue() - || ( !sNewValue.getLength() // an empty string - && m_bEmptyIsNull // which should be interpreted as NULL - ) - ) - { - m_xColumnUpdate->updateNull(); - } - else - { - OSL_ENSURE( m_pFormattedValue.get(), "OPatternModel::commitControlValueToDbColumn: no value helper!" ); - if ( !m_pFormattedValue.get() ) - return sal_False; - - if ( !m_pFormattedValue->setFormattedValue( sNewValue ) ) - return sal_False; - } - - m_aLastKnownValue = aNewValue; - } - - return sal_True; -} - -//------------------------------------------------------------------------------ -void OPatternModel::onConnectedDbColumn( const Reference< XInterface >& _rxForm ) -{ - OEditBaseModel::onConnectedDbColumn( _rxForm ); - - Reference< XPropertySet > xField( getField() ); - if ( !xField.is() ) - return; - - m_pFormattedValue.reset( new ::dbtools::FormattedColumnValue( getContext(), Reference< XRowSet >( _rxForm, UNO_QUERY ), xField ) ); -} - -//------------------------------------------------------------------------------ -void OPatternModel::onDisconnectedDbColumn() -{ - OEditBaseModel::onDisconnectedDbColumn(); - m_pFormattedValue.reset(); -} - -// XPropertyChangeListener -//------------------------------------------------------------------------------ -Any OPatternModel::translateDbColumnToControlValue() -{ - OSL_PRECOND( m_pFormattedValue.get(), "OPatternModel::translateDbColumnToControlValue: no value helper!" ); - - if ( m_pFormattedValue.get() ) - { - ::rtl::OUString sValue( m_pFormattedValue->getFormattedValue() ); - if ( !sValue.getLength() - && m_pFormattedValue->getColumn().is() - && m_pFormattedValue->getColumn()->wasNull() - ) - { - m_aLastKnownValue.clear(); - } - else - { - m_aLastKnownValue <<= sValue; - } - } - else - m_aLastKnownValue.clear(); - - return m_aLastKnownValue.hasValue() ? m_aLastKnownValue : makeAny( ::rtl::OUString() ); - // (m_aLastKnownValue is alllowed to be VOID, the control value isn't) -} - -// XReset -//------------------------------------------------------------------------------ -Any OPatternModel::getDefaultForReset() const -{ - return makeAny( m_aDefaultText ); -} - -//------------------------------------------------------------------------------ -void OPatternModel::resetNoBroadcast() -{ - OEditBaseModel::resetNoBroadcast(); - m_aLastKnownValue.clear(); -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Pattern.hxx b/forms/source/component/Pattern.hxx deleted file mode 100644 index d4d09a338..000000000 --- a/forms/source/component/Pattern.hxx +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_PATTERN_HXX_ -#define _FORMS_PATTERN_HXX_ - -#include "EditBase.hxx" - -#include <connectivity/formattedcolumnvalue.hxx> - -#include <memory> - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -//= OPatternModel -//================================================================== -class OPatternModel - :public OEditBaseModel -{ -private: - ::com::sun::star::uno::Any m_aLastKnownValue; - ::std::auto_ptr< ::dbtools::FormattedColumnValue > - m_pFormattedValue; - -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - DECLARE_DEFAULT_LEAF_XTOR( OPatternModel ); - - // ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(OPatternModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // ::com::sun::star::io::XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - -protected: - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - virtual void onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm ); - virtual void onDisconnectedDbColumn(); - - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - virtual void resetNoBroadcast(); - -protected: - DECLARE_XCLONEABLE(); -}; - -//================================================================== -//= OPatternControl -//================================================================== -class OPatternControl: public OBoundControl -{ -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - OPatternControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - - // ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(OPatternControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FORMS_PATTERN_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/RadioButton.cxx b/forms/source/component/RadioButton.cxx deleted file mode 100644 index 1ff0a11a8..000000000 --- a/forms/source/component/RadioButton.cxx +++ /dev/null @@ -1,438 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "RadioButton.hxx" -#include "GroupManager.hxx" -#include "property.hxx" -#include "property.hrc" -#include "services.hxx" -#include <tools/debug.hxx> -#include <comphelper/extract.hxx> -#include <comphelper/basicio.hxx> -#include <com/sun/star/container/XIndexAccess.hpp> -#include <com/sun/star/awt/XVclWindowPeer.hpp> - -//......................................................................... -namespace frm -{ -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::form::binding; - -//================================================================== -//------------------------------------------------------------------------------ -InterfaceRef SAL_CALL ORadioButtonControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException) -{ - return *(new ORadioButtonControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL ORadioButtonControl::getSupportedServiceNames() throw(RuntimeException) -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_RADIOBUTTON; - return aSupported; -} - - -//------------------------------------------------------------------ -ORadioButtonControl::ORadioButtonControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl(_rxFactory, VCL_CONTROL_RADIOBUTTON) -{ -} - -//------------------------------------------------------------------ -void SAL_CALL ORadioButtonControl::createPeer(const Reference<starawt::XToolkit>& _rxToolkit, const Reference<starawt::XWindowPeer>& _rxParent) throw (RuntimeException) -{ - OBoundControl::createPeer(_rxToolkit, _rxParent); - - // switch off the auto-toggle, we do this ourself .... - // (formerly this switch-off was done in the toolkit - but the correct place is here ...) -// Reference< XVclWindowPeer > xVclWindowPeer( getPeer(), UNO_QUERY ); -// if (xVclWindowPeer.is()) -// xVclWindowPeer->setProperty(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AutoToggle")), ::cppu::bool2any(sal_False)); - // new order: do _not_ switch off the auto toggle because: - // * today, it is not necessary anymore to handle the toggling ourself (everything works fine without it) - // * without auto toggle, the AccessibleEvents as fired by the radio buttons are - // a. newly checked button: "unchecked"->"checked" - // b. previously checked button: "checked"->"unchecked" - // This is deadly for AT-tools, which then get the "unchecked" event _immediately_ after the "checked" event, - // and only read the latter. This makes radio buttons pretty unusable in form documents. - // So we switched AutoToggle _on_, again, because then VCL can handle the notifications, and will send - // them in the proper order. -} - -//================================================================== -InterfaceRef SAL_CALL ORadioButtonModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException) -{ - return *(new ORadioButtonModel(_rxFactory)); -} - -//------------------------------------------------------------------ -DBG_NAME( ORadioButtonModel ) -//------------------------------------------------------------------ -ORadioButtonModel::ORadioButtonModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OReferenceValueComponent( _rxFactory, VCL_CONTROLMODEL_RADIOBUTTON, FRM_SUN_CONTROL_RADIOBUTTON,sal_True ) - // use the old control name for compytibility reasons -{ - DBG_CTOR( ORadioButtonModel, NULL ); - - m_nClassId = FormComponentType::RADIOBUTTON; - m_aLabelServiceName = FRM_SUN_COMPONENT_GROUPBOX; - initValueProperty( PROPERTY_STATE, PROPERTY_ID_STATE ); - startAggregatePropertyListening( PROPERTY_GROUP_NAME ); -} - -//------------------------------------------------------------------ -ORadioButtonModel::ORadioButtonModel( const ORadioButtonModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OReferenceValueComponent( _pOriginal, _rxFactory ) -{ - DBG_CTOR( ORadioButtonModel, NULL ); -} - -//------------------------------------------------------------------------------ -ORadioButtonModel::~ORadioButtonModel() -{ - DBG_DTOR( ORadioButtonModel, NULL ); -} - -// XCloneable -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( ORadioButtonModel ) - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL ORadioButtonModel::getSupportedServiceNames() throw(RuntimeException) -{ - StringSequence aSupported = OReferenceValueComponent::getSupportedServiceNames(); - - sal_Int32 nOldLen = aSupported.getLength(); - aSupported.realloc( nOldLen + 8 ); - ::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen; - - *pStoreTo++ = BINDABLE_CONTROL_MODEL; - *pStoreTo++ = DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_CONTROL_MODEL; - - *pStoreTo++ = BINDABLE_DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_BINDABLE_CONTROL_MODEL; - - *pStoreTo++ = FRM_SUN_COMPONENT_RADIOBUTTON; - *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_RADIOBUTTON; - *pStoreTo++ = BINDABLE_DATABASE_RADIO_BUTTON; - - return aSupported; -} - -//------------------------------------------------------------------------------ -void ORadioButtonModel::SetSiblingPropsTo(const ::rtl::OUString& rPropName, const Any& rValue) -{ - // my name - ::rtl::OUString sMyGroup; - if (hasProperty(PROPERTY_GROUP_NAME, this)) - this->getPropertyValue(PROPERTY_GROUP_NAME) >>= sMyGroup; - if (sMyGroup.getLength() == 0) - sMyGroup = m_aName; - - // meine Siblings durchiterieren - Reference<XIndexAccess> xIndexAccess(getParent(), UNO_QUERY); - if (xIndexAccess.is()) - { - Reference<XPropertySet> xMyProps; - query_interface(static_cast<XWeak*>(this), xMyProps); - ::rtl::OUString sCurrentGroup; - sal_Int32 nNumSiblings = xIndexAccess->getCount(); - for (sal_Int32 i=0; i<nNumSiblings; ++i) - { - Reference<XPropertySet> xSiblingProperties(*(InterfaceRef*)xIndexAccess->getByIndex(i).getValue(), UNO_QUERY); - if (!xSiblingProperties.is()) - continue; - if (xMyProps == xSiblingProperties) - continue; // mich selber nicht umsetzen - - // nur wenn es ein Radio-Button ist - if (!hasProperty(PROPERTY_CLASSID, xSiblingProperties)) - continue; - sal_Int16 nType = 0; - xSiblingProperties->getPropertyValue(PROPERTY_CLASSID) >>= nType; - if (nType != FormComponentType::RADIOBUTTON) - continue; - - // das 'zur selben Gruppe gehoeren' wird am Namen festgemacht - sCurrentGroup = OGroupManager::GetGroupName( xSiblingProperties ); - if (sCurrentGroup == sMyGroup) - xSiblingProperties->setPropertyValue(rPropName, rValue); - } - } -} - -//------------------------------------------------------------------------------ -void ORadioButtonModel::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) throw (Exception) -{ - OReferenceValueComponent::setFastPropertyValue_NoBroadcast( nHandle, rValue ); - - // if the label control changed ... - if (nHandle == PROPERTY_ID_CONTROLLABEL) - { // ... forward this to our siblings - SetSiblingPropsTo(PROPERTY_CONTROLLABEL, rValue); - } - - // wenn sich die ControlSource-Eigenschaft geaendert hat ... - if (nHandle == PROPERTY_ID_CONTROLSOURCE) - { // ... muss ich allen meinen Siblings, die in der selben RadioButton-Gruppe sind wie ich, auch die - // neue ControlSource mitgeben - SetSiblingPropsTo(PROPERTY_CONTROLSOURCE, rValue); - } - - // die andere Richtung : wenn sich mein Name aendert ... - if (nHandle == PROPERTY_ID_NAME) - { - setControlSource(); - } - - if (nHandle == PROPERTY_ID_DEFAULT_STATE) - { - sal_Int16 nValue; - rValue >>= nValue; - if (1 == nValue) - { // bei allen Radios der selben Gruppe das 'default checked' ruecksetzen, denn wie schon der highlander wusste : - // es kann nur einen geben. - Any aZero; - nValue = 0; - aZero <<= nValue; - SetSiblingPropsTo(PROPERTY_DEFAULT_STATE, aZero); - } - } -} - -void ORadioButtonModel::setControlSource() -{ - Reference<XIndexAccess> xIndexAccess(getParent(), UNO_QUERY); - if (xIndexAccess.is()) - { - ::rtl::OUString sName, sGroupName; - - if (hasProperty(PROPERTY_GROUP_NAME, this)) - this->getPropertyValue(PROPERTY_GROUP_NAME) >>= sGroupName; - this->getPropertyValue(PROPERTY_NAME) >>= sName; - - Reference<XPropertySet> xMyProps; - query_interface(static_cast<XWeak*>(this), xMyProps); - for (sal_Int32 i=0; i<xIndexAccess->getCount(); ++i) - { - Reference<XPropertySet> xSiblingProperties(*(InterfaceRef*)xIndexAccess->getByIndex(i).getValue(), UNO_QUERY); - if (!xSiblingProperties.is()) - continue; - - if (xMyProps == xSiblingProperties) - // nur wenn ich nicht mich selber gefunden habe - continue; - - sal_Int16 nType = 0; - xSiblingProperties->getPropertyValue(PROPERTY_CLASSID) >>= nType; - if (nType != FormComponentType::RADIOBUTTON) - // nur Radio-Buttons - continue; - - ::rtl::OUString sSiblingName, sSiblingGroupName; - if (hasProperty(PROPERTY_GROUP_NAME, xSiblingProperties)) - xSiblingProperties->getPropertyValue(PROPERTY_GROUP_NAME) >>= sSiblingGroupName; - xSiblingProperties->getPropertyValue(PROPERTY_NAME) >>= sSiblingName; - - if ((sGroupName.getLength() == 0 && sSiblingGroupName.getLength() == 0 && // (no group name - sName == sSiblingName) || // names match) or - (sGroupName.getLength() != 0 && sSiblingGroupName.getLength() != 0 && // (have group name - sGroupName == sSiblingGroupName)) // they match) - { - setPropertyValue(PROPERTY_CONTROLSOURCE, xSiblingProperties->getPropertyValue(PROPERTY_CONTROLSOURCE)); - break; - } - } - } -} - -//------------------------------------------------------------------------------ -void ORadioButtonModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 1, OReferenceValueComponent ) - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL ORadioButtonModel::getServiceName() throw(RuntimeException) -{ - return FRM_COMPONENT_RADIOBUTTON; // old (non-sun) name for compatibility ! -} - -//------------------------------------------------------------------------------ -void SAL_CALL ORadioButtonModel::write(const Reference<XObjectOutputStream>& _rxOutStream) - throw(IOException, RuntimeException) -{ - OReferenceValueComponent::write(_rxOutStream); - - // Version - _rxOutStream->writeShort(0x0003); - - // Properties - _rxOutStream << getReferenceValue(); - _rxOutStream << (sal_Int16)getDefaultChecked(); - writeHelpTextCompatibly(_rxOutStream); - - // from version 0x0003 : common properties - writeCommonProperties(_rxOutStream); -} - -//------------------------------------------------------------------------------ -void SAL_CALL ORadioButtonModel::read(const Reference<XObjectInputStream>& _rxInStream) throw(IOException, RuntimeException) -{ - OReferenceValueComponent::read(_rxInStream); - ::osl::MutexGuard aGuard(m_aMutex); - - // Version - sal_uInt16 nVersion = _rxInStream->readShort(); - - ::rtl::OUString sReferenceValue; - sal_Int16 nDefaultChecked( 0 ); - switch (nVersion) - { - case 0x0001 : - _rxInStream >> sReferenceValue; - _rxInStream >> nDefaultChecked; - break; - case 0x0002 : - _rxInStream >> sReferenceValue; - _rxInStream >> nDefaultChecked; - readHelpTextCompatibly(_rxInStream); - break; - case 0x0003 : - _rxInStream >> sReferenceValue; - _rxInStream >> nDefaultChecked; - readHelpTextCompatibly(_rxInStream); - readCommonProperties(_rxInStream); - break; - default : - OSL_FAIL("ORadioButtonModel::read : unknown version !"); - defaultCommonProperties(); - break; - } - - setReferenceValue( sReferenceValue ); - setDefaultChecked( (ToggleState)nDefaultChecked ); - - // Nach dem Lesen die Defaultwerte anzeigen - if ( getControlSource().getLength() ) - // (not if we don't have a control source - the "State" property acts like it is persistent, then - resetNoBroadcast(); -} - -//------------------------------------------------------------------------------ -void ORadioButtonModel::_propertyChanged(const PropertyChangeEvent& _rEvent) throw(RuntimeException) -{ - if ( _rEvent.PropertyName.equals( PROPERTY_STATE ) ) - { - if ( _rEvent.NewValue == (sal_Int16)1 ) - { - // wenn sich mein Status auf 'checked' geaendert hat, muss ich alle meine Siblings, die in der selben Gruppe - // sind wie ich, entsprechend zuruecksetzen - Any aZero; - aZero <<= (sal_Int16)0; - SetSiblingPropsTo( PROPERTY_STATE, aZero ); - } - } - else if ( _rEvent.PropertyName.equals( PROPERTY_GROUP_NAME ) ) - { - setControlSource(); - // Can't call OReferenceValueComponent::_propertyChanged(), as it - // doesn't know what to do with the GroupName property. - return; - } - - OReferenceValueComponent::_propertyChanged( _rEvent ); -} - -//------------------------------------------------------------------------------ -Any ORadioButtonModel::translateDbColumnToControlValue() -{ - return makeAny( (sal_Int16) - ( ( m_xColumn->getString() == getReferenceValue() ) ? STATE_CHECK : STATE_NOCHECK ) - ); -} - -//------------------------------------------------------------------------------ -Any ORadioButtonModel::translateExternalValueToControlValue( const Any& _rExternalValue ) const -{ - Any aControlValue = OReferenceValueComponent::translateExternalValueToControlValue( _rExternalValue ); - sal_Int16 nState = STATE_NOCHECK; - if ( ( aControlValue >>= nState ) && ( nState == STATE_DONTKNOW ) ) - // radio buttons do not have the DONTKNOW state - aControlValue <<= (sal_Int16)STATE_NOCHECK; - return aControlValue; -} - -//----------------------------------------------------------------------------- -sal_Bool ORadioButtonModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) -{ - Reference< XPropertySet > xField( getField() ); - OSL_PRECOND( xField.is(), "ORadioButtonModel::commitControlValueToDbColumn: not bound!" ); - if ( xField.is() ) - { - try - { - sal_Int16 nValue = 0; - m_xAggregateSet->getPropertyValue( PROPERTY_STATE ) >>= nValue; - if ( nValue == 1 ) - xField->setPropertyValue( PROPERTY_VALUE, makeAny( getReferenceValue() ) ); - } - catch(Exception&) - { - OSL_FAIL("ORadioButtonModel::commitControlValueToDbColumn: could not commit !"); - } - } - return sal_True; -} - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/RadioButton.hxx b/forms/source/component/RadioButton.hxx deleted file mode 100644 index d562152ed..000000000 --- a/forms/source/component/RadioButton.hxx +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_RADIOBUTTON_HXX_ -#define _FORMS_RADIOBUTTON_HXX_ - -#include "refvaluecomponent.hxx" - -//......................................................................... -namespace frm -{ - -//================================================================== -// ORadioButtonModel -//================================================================== -class ORadioButtonModel :public OReferenceValueComponent -{ -public: - DECLARE_DEFAULT_LEAF_XTOR( ORadioButtonModel ); - - // XServiceInfo - IMPLEMENTATION_NAME(ORadioButtonModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // OPropertySetHelper - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw (::com::sun::star::uno::Exception); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // OPropertyChangeListener - virtual void _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - -protected: - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - virtual ::com::sun::star::uno::Any - translateExternalValueToControlValue( const ::com::sun::star::uno::Any& _rExternalValue ) const; - -protected: - void SetSiblingPropsTo(const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Any& rValue); - - DECLARE_XCLONEABLE( ); - -private: - /** sets the given value as new State at the aggregate - @precond - our mutex is aquired exactly once - */ - void setNewAggregateState( const ::com::sun::star::uno::Any& _rValue ); - - void setControlSource(); -}; - -//================================================================== -// ORadioButtonControl -//================================================================== -class ORadioButtonControl: public OBoundControl -{ -public: - ORadioButtonControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - - // XServiceInfo - IMPLEMENTATION_NAME(ORadioButtonControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - -protected: - // XControl - virtual void SAL_CALL createPeer(const ::com::sun::star::uno::Reference<starawt::XToolkit>& Toolkit, const ::com::sun::star::uno::Reference<starawt::XWindowPeer>& Parent) throw (::com::sun::star::uno::RuntimeException); -}; - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_RADIOBUTTON_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Time.cxx b/forms/source/component/Time.cxx deleted file mode 100644 index 5918dd201..000000000 --- a/forms/source/component/Time.cxx +++ /dev/null @@ -1,367 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "Time.hxx" -#include <tools/debug.hxx> -#include <tools/time.hxx> -#include <connectivity/dbconversion.hxx> -#include <com/sun/star/sdbc/DataType.hpp> - -using namespace dbtools; - -//......................................................................... -namespace frm -{ -//......................................................................... - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdb; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::util; -using namespace ::com::sun::star::awt; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; - -//================================================================== -//= -//================================================================== - -//================================================================== -//= OTimeControl -//================================================================== -//------------------------------------------------------------------ -OTimeControl::OTimeControl(const Reference<XMultiServiceFactory>& _rxFactory) - :OBoundControl(_rxFactory, VCL_CONTROL_TIMEFIELD) -{ -} - -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OTimeControl_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OTimeControl(_rxFactory)); -} - -//------------------------------------------------------------------------------ -Sequence<Type> OTimeControl::_getTypes() -{ - return OBoundControl::_getTypes(); -} - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OTimeControl::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControl::getSupportedServiceNames(); - aSupported.realloc(aSupported.getLength() + 1); - - ::rtl::OUString*pArray = aSupported.getArray(); - pArray[aSupported.getLength()-1] = FRM_SUN_CONTROL_TIMEFIELD; - return aSupported; -} - -//================================================================== -//= OTimeModel -//================================================================== -//------------------------------------------------------------------ -InterfaceRef SAL_CALL OTimeModel_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) -{ - return *(new OTimeModel(_rxFactory)); -} - -// XServiceInfo -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OTimeModel::getSupportedServiceNames() throw() -{ - StringSequence aSupported = OBoundControlModel::getSupportedServiceNames(); - - sal_Int32 nOldLen = aSupported.getLength(); - aSupported.realloc( nOldLen + 8 ); - ::rtl::OUString* pStoreTo = aSupported.getArray() + nOldLen; - - *pStoreTo++ = BINDABLE_CONTROL_MODEL; - *pStoreTo++ = DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_CONTROL_MODEL; - - *pStoreTo++ = BINDABLE_DATA_AWARE_CONTROL_MODEL; - *pStoreTo++ = VALIDATABLE_BINDABLE_CONTROL_MODEL; - - *pStoreTo++ = FRM_SUN_COMPONENT_TIMEFIELD; - *pStoreTo++ = FRM_SUN_COMPONENT_DATABASE_TIMEFIELD; - *pStoreTo++ = BINDABLE_DATABASE_TIME_FIELD; - - return aSupported; -} - -//------------------------------------------------------------------------------ -Sequence<Type> OTimeModel::_getTypes() -{ - return OBoundControlModel::_getTypes(); -} - -//------------------------------------------------------------------ -DBG_NAME( OTimeModel ) -//------------------------------------------------------------------ -OTimeModel::OTimeModel(const Reference<XMultiServiceFactory>& _rxFactory) - :OEditBaseModel( _rxFactory, VCL_CONTROLMODEL_TIMEFIELD, FRM_SUN_CONTROL_TIMEFIELD, sal_True, sal_True ) - // use the old control name for compytibility reasons - ,OLimitedFormats(_rxFactory, FormComponentType::TIMEFIELD) -{ - DBG_CTOR( OTimeModel, NULL ); - - m_nClassId = FormComponentType::TIMEFIELD; - initValueProperty( PROPERTY_TIME, PROPERTY_ID_TIME ); - - setAggregateSet(m_xAggregateFastSet, getOriginalHandle(PROPERTY_ID_TIMEFORMAT)); -} - -//------------------------------------------------------------------------------ -OTimeModel::OTimeModel( const OTimeModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OEditBaseModel( _pOriginal, _rxFactory ) - ,OLimitedFormats( _rxFactory, FormComponentType::TIMEFIELD ) -{ - DBG_CTOR( OTimeModel, NULL ); - - setAggregateSet( m_xAggregateFastSet, getOriginalHandle( PROPERTY_ID_TIMEFORMAT ) ); -} - -//------------------------------------------------------------------------------ -OTimeModel::~OTimeModel( ) -{ - setAggregateSet(Reference< XFastPropertySet >(), -1); - DBG_DTOR( OTimeModel, NULL ); -} - -// XCloneable -//------------------------------------------------------------------------------ -IMPLEMENT_DEFAULT_CLONING( OTimeModel ) - -//------------------------------------------------------------------------------ -::rtl::OUString SAL_CALL OTimeModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException) -{ - return FRM_COMPONENT_TIMEFIELD; // old (non-sun) name for compatibility ! -} - -// XPropertySet -//------------------------------------------------------------------------------ -void OTimeModel::describeFixedProperties( Sequence< Property >& _rProps ) const -{ - BEGIN_DESCRIBE_PROPERTIES( 4, OEditBaseModel ) - DECL_PROP3(DEFAULT_TIME, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID); - DECL_PROP1(TABINDEX, sal_Int16, BOUND); - DECL_PROP1(FORMATKEY, sal_Int32, TRANSIENT); - DECL_IFACE_PROP2(FORMATSSUPPLIER, XNumberFormatsSupplier, READONLY, TRANSIENT); - END_DESCRIBE_PROPERTIES(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OTimeModel::getFastPropertyValue(Any& _rValue, sal_Int32 _nHandle ) const -{ - switch (_nHandle) - { - case PROPERTY_ID_FORMATKEY: - getFormatKeyPropertyValue(_rValue); - break; - case PROPERTY_ID_FORMATSSUPPLIER: - _rValue <<= getFormatsSupplier(); - break; - default: - OEditBaseModel::getFastPropertyValue(_rValue, _nHandle); - break; - } -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OTimeModel::convertFastPropertyValue(Any& _rConvertedValue, Any& _rOldValue, - sal_Int32 _nHandle, const Any& _rValue ) throw(IllegalArgumentException) -{ - if (PROPERTY_ID_FORMATKEY == _nHandle) - return convertFormatKeyPropertyValue(_rConvertedValue, _rOldValue, _rValue); - else - return OEditBaseModel::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OTimeModel::setFastPropertyValue_NoBroadcast(sal_Int32 _nHandle, const Any& _rValue) throw ( ::com::sun::star::uno::Exception) -{ - if (PROPERTY_ID_FORMATKEY == _nHandle) - setFormatKeyPropertyValue(_rValue); - else - OEditBaseModel::setFastPropertyValue_NoBroadcast(_nHandle, _rValue); -} - -// XLoadListener -//------------------------------------------------------------------------------ -void OTimeModel::onConnectedDbColumn( const Reference< XInterface >& _rxForm ) -{ - OBoundControlModel::onConnectedDbColumn( _rxForm ); - Reference<XPropertySet> xField = getField(); - if (xField.is()) - { - m_bDateTimeField = sal_False; - try - { - sal_Int32 nFieldType = 0; - xField->getPropertyValue(PROPERTY_FIELDTYPE) >>= nFieldType; - m_bDateTimeField = (nFieldType == DataType::TIMESTAMP); - } - catch(Exception&) - { - } - } -} - -//------------------------------------------------------------------------------ -sal_Bool OTimeModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) -{ - Any aControlValue( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) ); - if ( !compare( aControlValue, m_aSaveValue ) ) - { - if ( !aControlValue.hasValue() ) - m_xColumnUpdate->updateNull(); - else - { - try - { - util::Time aTime; - if ( !( aControlValue >>= aTime ) ) - { - sal_Int32 nAsInt(0); - aControlValue >>= nAsInt; - aTime = DBTypeConversion::toTime(nAsInt); - } - - if (!m_bDateTimeField) - m_xColumnUpdate->updateTime(aTime); - else - { - util::DateTime aDateTime = m_xColumn->getTimestamp(); - aDateTime.HundredthSeconds = aTime.HundredthSeconds; - aDateTime.Seconds = aTime.Seconds; - aDateTime.Minutes = aTime.Minutes; - aDateTime.Hours = aTime.Hours; - m_xColumnUpdate->updateTimestamp(aDateTime); - } - } - catch(Exception&) - { - return sal_False; - } - } - m_aSaveValue = aControlValue; - } - return sal_True; -} - -//------------------------------------------------------------------------------ -void OTimeModel::impl_translateControlValueToUNOTime( Any& _rUNOValue ) const -{ - _rUNOValue = getControlValue(); - if ( _rUNOValue.hasValue() ) - { - sal_Int32 nTime = 0; - OSL_VERIFY( _rUNOValue >>= nTime ); - if ( nTime == ::Time( 99, 99, 99 ).GetTime() ) - // "invalid time" in VCL is different from "invalid time" in UNO - _rUNOValue.clear(); - else - _rUNOValue <<= DBTypeConversion::toTime( nTime ); - } -} - -//------------------------------------------------------------------------------ -Any OTimeModel::translateControlValueToExternalValue( ) const -{ - Any aExternalValue; - impl_translateControlValueToUNOTime( aExternalValue ); - return aExternalValue; -} - -//------------------------------------------------------------------------------ -Any OTimeModel::translateExternalValueToControlValue( const Any& _rExternalValue ) const -{ - Any aControlValue; - if ( _rExternalValue.hasValue() ) - { - util::Time aTime; - OSL_VERIFY( _rExternalValue >>= aTime ); - aControlValue <<= DBTypeConversion::toINT32( aTime ); - } - return aControlValue; -} - -//------------------------------------------------------------------------------ -Any OTimeModel::translateControlValueToValidatableValue( ) const -{ - Any aValidatableValue; - impl_translateControlValueToUNOTime( aValidatableValue ); - return aValidatableValue; -} - -//------------------------------------------------------------------------------ -Any OTimeModel::translateDbColumnToControlValue() -{ - util::Time aTime = m_xColumn->getTime(); - if ( m_xColumn->wasNull() ) - m_aSaveValue.clear(); - else - // the aggregated set expects an Int32 as value ... - m_aSaveValue <<= DBTypeConversion::toINT32( aTime ); - - return m_aSaveValue; -} - -//------------------------------------------------------------------------------ -Any OTimeModel::getDefaultForReset() const -{ - return m_aDefault; -} - -//------------------------------------------------------------------------------ -void OTimeModel::resetNoBroadcast() -{ - OEditBaseModel::resetNoBroadcast(); - m_aSaveValue.clear(); -} - -//------------------------------------------------------------------------------ -Sequence< Type > OTimeModel::getSupportedBindingTypes() -{ - return Sequence< Type >( &::getCppuType( static_cast< util::Time* >( NULL ) ), 1 ); -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/Time.hxx b/forms/source/component/Time.hxx deleted file mode 100644 index 5d6a8a66e..000000000 --- a/forms/source/component/Time.hxx +++ /dev/null @@ -1,135 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_TIME_HXX_ -#define _FORMS_TIME_HXX_ - -#include "EditBase.hxx" -#include "limitedformats.hxx" - -//......................................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -//= OTimeModel -//================================================================== -class OTimeModel - :public OEditBaseModel - ,public OLimitedFormats -{ -private: - ::com::sun::star::uno::Any m_aSaveValue; - sal_Bool m_bDateTimeField; - -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - DECLARE_DEFAULT_LEAF_XTOR( OTimeModel ); - - // stario::XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - - // ::com::sun::star::beans::XPropertySet - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, - sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception); - - // ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(OTimeModel); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - - // prevent method hiding - using OBoundControlModel::getFastPropertyValue; - -protected: - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > - getSupportedBindingTypes(); - virtual ::com::sun::star::uno::Any - translateControlValueToExternalValue( ) const; - virtual ::com::sun::star::uno::Any - translateExternalValueToControlValue( const ::com::sun::star::uno::Any& _rExternalValue ) const; - - virtual ::com::sun::star::uno::Any - translateControlValueToValidatableValue( ) const; - - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - virtual void resetNoBroadcast(); - - virtual void onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm ); - -protected: - DECLARE_XCLONEABLE(); - -private: - /** translates the control value (the VCL-internal integer representation of a date) into - a UNO-Date. - */ - void impl_translateControlValueToUNOTime( - ::com::sun::star::uno::Any& _rUNOValue ) const; -}; - -//================================================================== -//= OTimeControl -//================================================================== -class OTimeControl: public OBoundControl -{ -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - -public: - OTimeControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - DECLARE_UNO3_AGG_DEFAULTS(OTimeControl, OBoundControl); - - // ::com::sun::star::lang::XServiceInfo - IMPLEMENTATION_NAME(OTimeControl); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(); -}; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FORMS_TIME_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/cachedrowset.cxx b/forms/source/component/cachedrowset.cxx deleted file mode 100644 index 8d4bc6b9e..000000000 --- a/forms/source/component/cachedrowset.cxx +++ /dev/null @@ -1,205 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "cachedrowset.hxx" -#include "services.hxx" -#include "frm_strings.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/lang/XComponent.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/sdb/XQueriesSupplier.hpp> -#include <com/sun/star/sdbc/ResultSetType.hpp> -/** === end UNO includes === **/ - -#include <tools/diagnose_ex.h> - -//........................................................................ -namespace frm -{ -//........................................................................ - - /** === begin UNO using === **/ - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::uno::UNO_SET_THROW; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::sdbc::XConnection; - using ::com::sun::star::lang::XComponent; - using ::com::sun::star::beans::XPropertySet; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::sdbc::SQLException; - using ::com::sun::star::uno::Any; - using ::com::sun::star::sdb::XQueriesSupplier; - using ::com::sun::star::container::XNameAccess; - using ::com::sun::star::sdbc::XResultSet; - using ::com::sun::star::sdbc::XStatement; - /** === end UNO using === **/ - namespace ResultSetType = ::com::sun::star::sdbc::ResultSetType; - - //==================================================================== - //= CachedRowSet_Data - //==================================================================== - struct CachedRowSet_Data - { - ::comphelper::ComponentContext aContext; - ::rtl::OUString sCommand; - sal_Bool bEscapeProcessing; - Reference< XConnection > xConnection; - - bool bStatementDirty; - - CachedRowSet_Data( const ::comphelper::ComponentContext& _rContext ) - :aContext( _rContext ) - ,sCommand() - ,bEscapeProcessing( sal_False ) - ,xConnection() - ,bStatementDirty( true ) - { - } - }; - - //==================================================================== - //= CachedRowSet - //==================================================================== - //-------------------------------------------------------------------- - CachedRowSet::CachedRowSet( const ::comphelper::ComponentContext& _rContext ) - :m_pData( new CachedRowSet_Data( _rContext ) ) - { - } - - //-------------------------------------------------------------------- - CachedRowSet::~CachedRowSet() - { - dispose(); - } - - //-------------------------------------------------------------------- - void CachedRowSet::setCommand( const ::rtl::OUString& _rCommand ) - { - if ( m_pData->sCommand == _rCommand ) - return; - - m_pData->sCommand = _rCommand; - m_pData->bStatementDirty = true; - } - - //-------------------------------------------------------------------- - void CachedRowSet::setCommandFromQuery( const ::rtl::OUString& _rQueryName ) - { - Reference< XQueriesSupplier > xSupplyQueries( m_pData->xConnection, UNO_QUERY_THROW ); - Reference< XNameAccess > xQueries ( xSupplyQueries->getQueries(), UNO_QUERY_THROW ); - Reference< XPropertySet > xQuery ( xQueries->getByName( _rQueryName ), UNO_QUERY_THROW ); - - sal_Bool bEscapeProcessing( sal_False ); - OSL_VERIFY( xQuery->getPropertyValue( PROPERTY_ESCAPE_PROCESSING ) >>= bEscapeProcessing ); - setEscapeProcessing( bEscapeProcessing ); - - ::rtl::OUString sCommand; - OSL_VERIFY( xQuery->getPropertyValue( PROPERTY_COMMAND ) >>= sCommand ); - setCommand( sCommand ); - } - - //-------------------------------------------------------------------- - void CachedRowSet::setEscapeProcessing ( const sal_Bool _bEscapeProcessing ) - { - if ( m_pData->bEscapeProcessing == _bEscapeProcessing ) - return; - - m_pData->bEscapeProcessing = _bEscapeProcessing; - m_pData->bStatementDirty = true; - } - - //-------------------------------------------------------------------- - void CachedRowSet::setConnection( const Reference< XConnection >& _rxConnection ) - { - if ( m_pData->xConnection == _rxConnection ) - return; - - m_pData->xConnection = _rxConnection; - m_pData->bStatementDirty = true; - } - - //-------------------------------------------------------------------- - Reference< XResultSet > CachedRowSet::execute() - { - Reference< XResultSet > xResult; - try - { - OSL_PRECOND( m_pData->xConnection.is(), "CachedRowSet::execute: how am I expected to do this without a connection?" ); - if ( !m_pData->xConnection.is() ) - return xResult; - - Reference< XStatement > xStatement( m_pData->xConnection->createStatement(), UNO_SET_THROW ); - Reference< XPropertySet > xStatementProps( xStatement, UNO_QUERY_THROW ); - xStatementProps->setPropertyValue( PROPERTY_ESCAPE_PROCESSING, makeAny( m_pData->bEscapeProcessing ) ); - xStatementProps->setPropertyValue( PROPERTY_RESULTSET_TYPE, makeAny( ResultSetType::FORWARD_ONLY ) ); - - xResult.set( xStatement->executeQuery( m_pData->sCommand ), UNO_SET_THROW ); - m_pData->bStatementDirty = false; - } - catch( const SQLException& ) - { - throw; - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return xResult; - } - - //-------------------------------------------------------------------- - bool CachedRowSet::isDirty() const - { - return m_pData->bStatementDirty; - } - - //-------------------------------------------------------------------- - void CachedRowSet::dispose() - { - try - { - m_pData.reset( new CachedRowSet_Data( m_pData->aContext ) ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/cachedrowset.hxx b/forms/source/component/cachedrowset.hxx deleted file mode 100644 index 09f325091..000000000 --- a/forms/source/component/cachedrowset.hxx +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef CACHEDROWSET_HXX -#define CACHEDROWSET_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/sdbc/XResultSet.hpp> -#include <com/sun/star/sdbc/XConnection.hpp> -/** === end UNO includes === **/ - -#include <comphelper/componentcontext.hxx> -#include <unotools/sharedunocomponent.hxx> - -#include <memory> - -//........................................................................ -namespace frm -{ -//........................................................................ - - struct CachedRowSet_Data; - //==================================================================== - //= CachedRowSet - //==================================================================== - /** caches a result set obtained from a SQL statement - */ - class CachedRowSet - { - public: - CachedRowSet( const ::comphelper::ComponentContext& _rContext ); - ~CachedRowSet(); - - public: - /** executes the statement - - @return - the result set produced by the statement. The caller takes ownership of the - given object. - - @throws ::com::sun::star::sdbc::SQLException - if such an exception is thrown when executing the statement - */ - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > - execute(); - - /// determines whether the row set properties are dirty, i.e. have changed since the last call to execute - bool isDirty() const; - - /// disposes the instance and frees all associated resources - void dispose(); - - /** sets the command of a query as command to be executed - - A connection must have been set before. - - @throws Exception - */ - void setCommandFromQuery ( const ::rtl::OUString& _rQueryName ); - - void setCommand ( const ::rtl::OUString& _rCommand ); - void setEscapeProcessing ( const sal_Bool _bEscapeProcessing ); - void setConnection ( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection ); - - private: - ::std::auto_ptr< CachedRowSet_Data > m_pData; - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // CACHEDROWSET_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/clickableimage.cxx b/forms/source/component/clickableimage.cxx deleted file mode 100644 index 249094849..000000000 --- a/forms/source/component/clickableimage.cxx +++ /dev/null @@ -1,927 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "clickableimage.hxx" -#include "controlfeatureinterception.hxx" -#include "urltransformer.hxx" -#include "componenttools.hxx" -#include <com/sun/star/form/XSubmit.hpp> -#include <com/sun/star/awt/SystemPointer.hpp> -#include <com/sun/star/form/FormComponentType.hpp> -#include <com/sun/star/frame/XDispatch.hpp> -#include <com/sun/star/frame/XDispatchProvider.hpp> -#include <com/sun/star/frame/FrameSearchFlag.hpp> -#include <com/sun/star/frame/XController.hpp> -#include <com/sun/star/frame/XFrame.hpp> -#include <com/sun/star/awt/ActionEvent.hpp> -#include <com/sun/star/awt/XActionListener.hpp> -#include <tools/urlobj.hxx> -#include <tools/debug.hxx> -#include <vcl/svapp.hxx> -#include <sfx2/docfile.hxx> -#include <sfx2/objsh.hxx> -#include <osl/mutex.hxx> -#include "services.hxx" -#include <comphelper/container.hxx> -#include <comphelper/listenernotification.hxx> -#include <svtools/imageresourceaccess.hxx> -#define LOCAL_URL_PREFIX '#' - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::sdb; - using namespace ::com::sun::star::sdbc; - using namespace ::com::sun::star::sdbcx; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::container; - using namespace ::com::sun::star::form; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::io; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::frame; - using namespace ::com::sun::star::form::submission; - using ::com::sun::star::awt::MouseEvent; - using ::com::sun::star::task::XInteractionHandler; - - //================================================================== - // OClickableImageBaseControl - //================================================================== - //------------------------------------------------------------------------------ - Sequence<Type> OClickableImageBaseControl::_getTypes() - { - static Sequence<Type> aTypes; - if (!aTypes.getLength()) - aTypes = concatSequences(OControl::_getTypes(), OClickableImageBaseControl_BASE::getTypes()); - return aTypes; - } - - //------------------------------------------------------------------------------ - OClickableImageBaseControl::OClickableImageBaseControl(const Reference<XMultiServiceFactory>& _rxFactory, const ::rtl::OUString& _aService) - :OControl(_rxFactory, _aService) - ,m_pThread(NULL) - ,m_aSubmissionVetoListeners( m_aMutex ) - ,m_aApproveActionListeners( m_aMutex ) - ,m_aActionListeners( m_aMutex ) - { - m_pFeatureInterception.reset( new ControlFeatureInterception( _rxFactory ) ); - } - - //------------------------------------------------------------------------------ - OClickableImageBaseControl::~OClickableImageBaseControl() - { - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - } - - // UNO Anbindung - //------------------------------------------------------------------------------ - Any SAL_CALL OClickableImageBaseControl::queryAggregation(const Type& _rType) throw (RuntimeException) - { - Any aReturn = OControl::queryAggregation(_rType); - if (!aReturn.hasValue()) - aReturn = OClickableImageBaseControl_BASE::queryInterface(_rType); - return aReturn; - } - - // XApproveActionBroadcaster - //------------------------------------------------------------------------------ - void OClickableImageBaseControl::addApproveActionListener( - const Reference<XApproveActionListener>& l) throw( RuntimeException ) - { - m_aApproveActionListeners.addInterface(l); - } - - //------------------------------------------------------------------------------ - void OClickableImageBaseControl::removeApproveActionListener( - const Reference<XApproveActionListener>& l) throw( RuntimeException ) - { - m_aApproveActionListeners.removeInterface(l); - } - - //-------------------------------------------------------------------- - void SAL_CALL OClickableImageBaseControl::registerDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException) - { - m_pFeatureInterception->registerDispatchProviderInterceptor( _rxInterceptor ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OClickableImageBaseControl::releaseDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException) - { - m_pFeatureInterception->releaseDispatchProviderInterceptor( _rxInterceptor ); - } - - // OComponentHelper - //------------------------------------------------------------------------------ - void OClickableImageBaseControl::disposing() - { - EventObject aEvent( static_cast< XWeak* >( this ) ); - m_aApproveActionListeners.disposeAndClear( aEvent ); - m_aActionListeners.disposeAndClear( aEvent ); - m_aSubmissionVetoListeners.disposeAndClear( aEvent ); - m_pFeatureInterception->dispose(); - - { - ::osl::MutexGuard aGuard( m_aMutex ); - if( m_pThread ) - { - m_pThread->release(); - m_pThread = NULL; - } - } - - OControl::disposing(); - } - - //------------------------------------------------------------------------------ - OImageProducerThread_Impl* OClickableImageBaseControl::getImageProducerThread() - { - if ( !m_pThread ) - { - m_pThread = new OImageProducerThread_Impl( this ); - m_pThread->acquire(); - m_pThread->create(); - } - return m_pThread; - } - - //------------------------------------------------------------------------------ - bool OClickableImageBaseControl::approveAction( ) - { - sal_Bool bCancelled = sal_False; - EventObject aEvent( static_cast< XWeak* >( this ) ); - - ::cppu::OInterfaceIteratorHelper aIter( m_aApproveActionListeners ); - while( !bCancelled && aIter.hasMoreElements() ) - { - // Jede approveAction-Methode muss thread-safe sein!!! - if( !static_cast< XApproveActionListener* >( aIter.next() )->approveAction( aEvent ) ) - bCancelled = sal_True; - } - - return !bCancelled; - } - - //------------------------------------------------------------------------------ - // Diese Methode wird auch aus einem Thread gerufen und muss deshalb - // thread-safe sein. - void OClickableImageBaseControl::actionPerformed_Impl(sal_Bool bNotifyListener, const MouseEvent& rEvt) - { - if( bNotifyListener ) - { - if ( !approveAction() ) - return; - } - - // Ob der Rest des Codes Thread-Safe ist weiss man nicht genau. Deshalb - // wird das meiste bei gelocktem Solar-Mutex erledigen. - Reference<XPropertySet> xSet; - Reference< XInterface > xModelsParent; - FormButtonType eButtonType = FormButtonType_PUSH; - { - SolarMutexGuard aGuard; - - // Parent holen - Reference<XFormComponent> xComp(getModel(), UNO_QUERY); - if (!xComp.is()) - return; - - xModelsParent = xComp->getParent(); - if (!xModelsParent.is()) - return; - - // which button type? - xSet = xSet.query( xComp ); - if ( !xSet.is() ) - return; - xSet->getPropertyValue(PROPERTY_BUTTONTYPE) >>= eButtonType; - } - - switch (eButtonType) - { - case FormButtonType_RESET: - { - // reset-Methoden muessen thread-safe sein! - Reference<XReset> xReset(xModelsParent, UNO_QUERY); - if (!xReset.is()) - return; - - xReset->reset(); - } - break; - - case FormButtonType_SUBMIT: - { - // if some outer component can provide an interaction handler, use it - Reference< XInteractionHandler > xHandler( m_pFeatureInterception->queryDispatch( "private:/InteractionHandler" ), UNO_QUERY ); - try - { - implSubmit( rEvt, xHandler ); - } - catch( const Exception& ) - { - // ignore - } - } - break; - - case FormButtonType_URL: - { - SolarMutexGuard aGuard; - - Reference< XModel > xModel = getXModel(xModelsParent); - if (!xModel.is()) - return; - - /////////////////////////////////////////////////////////////////////// - // Jetzt URL ausfuehren - Reference< XController > xController = xModel->getCurrentController(); - if (!xController.is()) - return; - - Reference< XFrame > xFrame = xController->getFrame(); - if( !xFrame.is() ) - return; - - URL aURL; - aURL.Complete = - getString(xSet->getPropertyValue(PROPERTY_TARGET_URL)); - - if (aURL.Complete.getLength() && (LOCAL_URL_PREFIX == aURL.Complete.getStr()[0])) - { // the URL contains a local URL only. Since the URLTransformer does not handle this case correctly - // (it can't: it does not know the document URL), we have to take care for this ourself. - // The real solution would be to not allow such relative URLs (there is a rule that at runtime, all - // URLs have to be absolute), but for compatibility reasons this is no option. - // The more as the user does not want to see a local URL as "file://<path>/<document>#mark" if it - // could be "#mark" as well. - // If we someday say that this hack (yes, it's kind of a hack) is not sustainable anymore, the complete - // solutiuon would be: - // * recognize URLs consisting of a mark only while _reading_ the document - // * for this, allow the INetURLObject (which at the moment is invoked when reading URLs) to - // transform such mark-only URLs into correct absolute URLs - // * at the UI, show only the mark - // * !!!! recognize every SAVEAS on the document, so the absolute URL can be adjusted. This seems - // rather impossible !!! - aURL.Mark = aURL.Complete; - aURL.Complete = xModel->getURL(); - aURL.Complete += aURL.Mark; - } - - sal_Bool bDispatchUrlInternal = sal_False; - xSet->getPropertyValue(PROPERTY_DISPATCHURLINTERNAL) >>= bDispatchUrlInternal; - if ( bDispatchUrlInternal ) - { - m_pFeatureInterception->getTransformer().parseSmartWithAsciiProtocol( aURL, INET_FILE_SCHEME ); - - ::rtl::OUString aTargetFrame; - xSet->getPropertyValue(PROPERTY_TARGET_FRAME) >>= aTargetFrame; - - Reference< XDispatch > xDisp = Reference< XDispatchProvider > (xFrame,UNO_QUERY)->queryDispatch( aURL, aTargetFrame, - FrameSearchFlag::SELF | FrameSearchFlag::PARENT | - FrameSearchFlag::SIBLINGS | FrameSearchFlag::CREATE ); - - Sequence<PropertyValue> aArgs(1); - PropertyValue& rProp = aArgs.getArray()[0]; - rProp.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Referer") ); - rProp.Value <<= xModel->getURL(); - - if (xDisp.is()) - xDisp->dispatch( aURL, aArgs ); - } - else - { - URL aHyperLink = m_pFeatureInterception->getTransformer().getStrictURLFromAscii( ".uno:OpenHyperlink" ); - - Reference< XDispatch > xDisp = Reference< XDispatchProvider > (xFrame,UNO_QUERY)->queryDispatch(aHyperLink, ::rtl::OUString() , 0); - - if ( xDisp.is() ) - { - Sequence<PropertyValue> aProps(3); - aProps[0].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("URL")); - aProps[0].Value <<= aURL.Complete; - - aProps[1].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FrameName")); - aProps[1].Value = xSet->getPropertyValue(PROPERTY_TARGET_FRAME); - - aProps[2].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Referer")); - aProps[2].Value <<= xModel->getURL(); - - xDisp->dispatch( aHyperLink, aProps ); - } - } - } break; - default: - { - // notify the action listeners for a push button - ActionEvent aEvt(static_cast<XWeak*>(this), m_aActionCommand); - m_aActionListeners.notifyEach( &XActionListener::actionPerformed, aEvt ); - } - } - } - - - //-------------------------------------------------------------------- - void SAL_CALL OClickableImageBaseControl::addSubmissionVetoListener( const Reference< submission::XSubmissionVetoListener >& listener ) throw (NoSupportException, RuntimeException) - { - m_aSubmissionVetoListeners.addInterface( listener ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OClickableImageBaseControl::removeSubmissionVetoListener( const Reference< submission::XSubmissionVetoListener >& listener ) throw (NoSupportException, RuntimeException) - { - m_aSubmissionVetoListeners.removeInterface( listener ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OClickableImageBaseControl::submitWithInteraction( const Reference< XInteractionHandler >& _rxHandler ) throw (VetoException, WrappedTargetException, RuntimeException) - { - implSubmit( MouseEvent(), _rxHandler ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OClickableImageBaseControl::submit( ) throw (VetoException, WrappedTargetException, RuntimeException) - { - implSubmit( MouseEvent(), NULL ); - } - - //-------------------------------------------------------------------- - Sequence< ::rtl::OUString > SAL_CALL OClickableImageBaseControl::getSupportedServiceNames( ) throw (RuntimeException) - { - Sequence< ::rtl::OUString > aSupported = OControl::getSupportedServiceNames(); - aSupported.realloc( aSupported.getLength() + 1 ); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[ aSupported.getLength() - 1 ] = FRM_SUN_CONTROL_SUBMITBUTTON; - - return aSupported; - } - - //-------------------------------------------------------------------- - void OClickableImageBaseControl::implSubmit( const MouseEvent& _rEvent, const Reference< XInteractionHandler >& _rxHandler ) SAL_THROW((VetoException, WrappedTargetException, RuntimeException)) - { - try - { - // allow the veto listeners to join the game - m_aSubmissionVetoListeners.notifyEach( &XSubmissionVetoListener::submitting, EventObject( *this ) ); - - // see whether there's an "submit interceptor" set at our model - Reference< submission::XSubmissionSupplier > xSubmissionSupp( getModel(), UNO_QUERY ); - Reference< XSubmission > xSubmission; - if ( xSubmissionSupp.is() ) - xSubmission = xSubmissionSupp->getSubmission(); - - if ( xSubmission.is() ) - { - if ( !_rxHandler.is() ) - xSubmission->submit(); - else - xSubmission->submitWithInteraction( _rxHandler ); - } - else - { - // no "interceptor" -> ordinary (old-way) submission - Reference< XChild > xChild( getModel(), UNO_QUERY ); - Reference< XSubmit > xParentSubmission; - if ( xChild.is() ) - xParentSubmission = xParentSubmission.query( xChild->getParent() ); - if ( xParentSubmission.is() ) - xParentSubmission->submit( this, _rEvent ); - } - } - catch( const VetoException& ) - { - // allowed to leave - throw; - } - catch( const RuntimeException& ) - { - // allowed to leave - throw; - } - catch( const WrappedTargetException& e ) - { - // allowed to leave - throw; - } - catch( const Exception& e ) - { - OSL_FAIL( "OClickableImageBaseControl::implSubmit: caught an unknown exception!" ); - throw WrappedTargetException( ::rtl::OUString(), *this, makeAny( e ) ); - } - } - - //================================================================== - // OClickableImageBaseModel - //================================================================== - //------------------------------------------------------------------------------ - Sequence<Type> OClickableImageBaseModel::_getTypes() - { - return concatSequences( - OControlModel::_getTypes(), - OClickableImageBaseModel_Base::getTypes() - ); - } - - //------------------------------------------------------------------ - DBG_NAME( OClickableImageBaseModel ) - //------------------------------------------------------------------ - OClickableImageBaseModel::OClickableImageBaseModel( const Reference< XMultiServiceFactory >& _rxFactory, const ::rtl::OUString& _rUnoControlModelTypeName, - const ::rtl::OUString& rDefault ) - :OControlModel( _rxFactory, _rUnoControlModelTypeName, rDefault ) - ,OPropertyChangeListener(m_aMutex) - ,m_pMedium(NULL) - ,m_pProducer( NULL ) - ,m_bDispatchUrlInternal(sal_False) - ,m_bDownloading(sal_False) - ,m_bProdStarted(sal_False) - { - DBG_CTOR( OClickableImageBaseModel, NULL ); - implConstruct(); - m_eButtonType = FormButtonType_PUSH; - } - - //------------------------------------------------------------------ - OClickableImageBaseModel::OClickableImageBaseModel( const OClickableImageBaseModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) - :OControlModel( _pOriginal, _rxFactory ) - ,OPropertyChangeListener( m_aMutex ) - ,m_pMedium( NULL ) - ,m_pProducer( NULL ) - ,m_bDispatchUrlInternal(sal_False) - ,m_bDownloading( sal_False ) - ,m_bProdStarted( sal_False ) - { - DBG_CTOR( OClickableImageBaseModel, NULL ); - implConstruct(); - - // copy properties - m_eButtonType = _pOriginal->m_eButtonType; - m_sTargetURL = _pOriginal->m_sTargetURL; - m_sTargetFrame = _pOriginal->m_sTargetFrame; - m_bDispatchUrlInternal = _pOriginal->m_bDispatchUrlInternal; - } - - //------------------------------------------------------------------------------ - void OClickableImageBaseModel::implInitializeImageURL( ) - { - osl_incrementInterlockedCount( &m_refCount ); - { - // simulate a propertyChanged event for the ImageURL - Any aImageURL; - getFastPropertyValue( aImageURL, PROPERTY_ID_IMAGE_URL ); - _propertyChanged( PropertyChangeEvent( *this, PROPERTY_IMAGE_URL, sal_False, PROPERTY_ID_IMAGE_URL, Any( ), aImageURL ) ); - } - osl_decrementInterlockedCount( &m_refCount ); - } - - //------------------------------------------------------------------------------ - void OClickableImageBaseModel::implConstruct() - { - m_pProducer = new ImageProducer; - increment( m_refCount ); - { - m_xProducer = m_pProducer; - - if ( m_xAggregateSet.is() ) - { - OPropertyChangeMultiplexer* pMultiplexer = new OPropertyChangeMultiplexer( this, m_xAggregateSet ); - pMultiplexer->addProperty( PROPERTY_IMAGE_URL ); - } - } - decrement(m_refCount); - } - - //------------------------------------------------------------------------------ - OClickableImageBaseModel::~OClickableImageBaseModel() - { - if (!OComponentHelper::rBHelper.bDisposed) - { - acquire(); - dispose(); - } - DBG_ASSERT(m_pMedium == NULL, "OClickableImageBaseModel::~OClickableImageBaseModel : leaving a memory leak ..."); - // spaetestens im dispose sollte das aufgeraeumt worden sein - - DBG_DTOR( OClickableImageBaseModel, NULL ); - } - - // XImageProducer - //-------------------------------------------------------------------- - void SAL_CALL OClickableImageBaseModel::addConsumer( const Reference< XImageConsumer >& _rxConsumer ) throw (RuntimeException) - { - ImageModelMethodGuard aGuard( *this ); - GetImageProducer()->addConsumer( _rxConsumer ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OClickableImageBaseModel::removeConsumer( const Reference< XImageConsumer >& _rxConsumer ) throw (RuntimeException) - { - ImageModelMethodGuard aGuard( *this ); - GetImageProducer()->removeConsumer( _rxConsumer ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OClickableImageBaseModel::startProduction( ) throw (RuntimeException) - { - ImageModelMethodGuard aGuard( *this ); - GetImageProducer()->startProduction(); - } - - //-------------------------------------------------------------------- - Reference< submission::XSubmission > SAL_CALL OClickableImageBaseModel::getSubmission() throw (RuntimeException) - { - return m_xSubmissionDelegate; - } - - //-------------------------------------------------------------------- - void SAL_CALL OClickableImageBaseModel::setSubmission( const Reference< submission::XSubmission >& _submission ) throw (RuntimeException) - { - m_xSubmissionDelegate = _submission; - } - - //-------------------------------------------------------------------- - Sequence< ::rtl::OUString > SAL_CALL OClickableImageBaseModel::getSupportedServiceNames( ) throw (RuntimeException) - { - Sequence< ::rtl::OUString > aSupported = OControlModel::getSupportedServiceNames(); - aSupported.realloc( aSupported.getLength() + 1 ); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[ aSupported.getLength() - 1 ] = FRM_SUN_COMPONENT_SUBMITBUTTON; - - return aSupported; - } - - // OComponentHelper - //------------------------------------------------------------------------------ - void OClickableImageBaseModel::disposing() - { - OControlModel::disposing(); - if (m_pMedium) - { - delete m_pMedium; - m_pMedium = NULL; - } - - m_xProducer = NULL; - m_pProducer = NULL; - } - - //------------------------------------------------------------------------------ - Any SAL_CALL OClickableImageBaseModel::queryAggregation(const Type& _rType) throw (RuntimeException) - { - // order matters: - // we definately want to "overload" the XImageProducer interface of our aggregate, - // thus check OClickableImageBaseModel_Base (which provides this) first - Any aReturn = OClickableImageBaseModel_Base::queryInterface( _rType ); - - // BUT: _don't_ let it feel responsible for the XTypeProvider interface - // (as this is implemented by our base class in the proper way) - if ( _rType.equals( ::getCppuType( static_cast< Reference< XTypeProvider >* >( NULL ) ) ) - || !aReturn.hasValue() - ) - aReturn = OControlModel::queryAggregation( _rType ); - - return aReturn; - } - - //------------------------------------------------------------------------------ - void OClickableImageBaseModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const - { - switch (nHandle) - { - case PROPERTY_ID_BUTTONTYPE : rValue <<= m_eButtonType; break; - case PROPERTY_ID_TARGET_URL : rValue <<= m_sTargetURL; break; - case PROPERTY_ID_TARGET_FRAME : rValue <<= m_sTargetFrame; break; - case PROPERTY_ID_DISPATCHURLINTERNAL : rValue <<= m_bDispatchUrlInternal; break; - default: - OControlModel::getFastPropertyValue(rValue, nHandle); - } - } - - //------------------------------------------------------------------------------ - void OClickableImageBaseModel::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) throw ( Exception) - { - switch (nHandle) - { - case PROPERTY_ID_BUTTONTYPE : - DBG_ASSERT(isA(rValue, static_cast<FormButtonType*>(NULL)), "OClickableImageBaseModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - rValue >>= m_eButtonType; - break; - - case PROPERTY_ID_TARGET_URL : - DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_STRING, "OClickableImageBaseModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - rValue >>= m_sTargetURL; - break; - - case PROPERTY_ID_TARGET_FRAME : - DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_STRING, "OClickableImageBaseModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - rValue >>= m_sTargetFrame; - break; - - case PROPERTY_ID_DISPATCHURLINTERNAL: - DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_BOOLEAN, "OClickableImageBaseModel::setFastPropertyValue_NoBroadcast : invalid type !" ); - rValue >>= m_bDispatchUrlInternal; - break; - - default: - OControlModel::setFastPropertyValue_NoBroadcast(nHandle, rValue); - } - } - - //------------------------------------------------------------------------------ - sal_Bool OClickableImageBaseModel::convertFastPropertyValue(Any& rConvertedValue, Any& rOldValue, sal_Int32 nHandle, const Any& rValue) - throw( IllegalArgumentException ) - { - switch (nHandle) - { - case PROPERTY_ID_BUTTONTYPE : - return tryPropertyValueEnum( rConvertedValue, rOldValue, rValue, m_eButtonType ); - - case PROPERTY_ID_TARGET_URL : - return tryPropertyValue(rConvertedValue, rOldValue, rValue, m_sTargetURL); - - case PROPERTY_ID_TARGET_FRAME : - return tryPropertyValue(rConvertedValue, rOldValue, rValue, m_sTargetFrame); - - case PROPERTY_ID_DISPATCHURLINTERNAL : - return tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bDispatchUrlInternal); - - default: - return OControlModel::convertFastPropertyValue(rConvertedValue, rOldValue, nHandle, rValue); - } - } - - //------------------------------------------------------------------------------ - void OClickableImageBaseModel::StartProduction() - { - ImageProducer *pImgProd = GetImageProducer(); - // grab the ImageURL - rtl::OUString sURL; - getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ImageURL") ) ) >>= sURL; - if (!m_pMedium) - { - if ( ::svt::GraphicAccess::isSupportedURL( sURL ) ) - pImgProd->SetImage( sURL ); - else - // caution: the medium may be NULL if somebody gave us a invalid URL to work with - pImgProd->SetImage(String()); - m_bDownloading = sal_False; - return; - } - if (m_pMedium->GetErrorCode()==0) - { - SvStream* pStream = m_pMedium->GetInStream(); - - pImgProd->SetImage(*pStream); - pImgProd->startProduction(); - m_bProdStarted = sal_True; - } - else - { - pImgProd->SetImage(String()); - delete m_pMedium; - m_pMedium = 0; - m_bDownloading = sal_False; - } - } - - //------------------------------------------------------------------------------ - void OClickableImageBaseModel::SetURL( const ::rtl::OUString& rURL ) - { - if (m_pMedium || !rURL.getLength()) - { - // Den Stream am Producer freigeben, bevor das Medium geloscht wird. - GetImageProducer()->SetImage(String()); - delete m_pMedium; - m_pMedium = NULL; - } - - // the SfxMedium is not allowed to be created with an invalid URL, so we have to check this first - INetURLObject aUrl(rURL); - if (INET_PROT_NOT_VALID == aUrl.GetProtocol()) - // we treat an invalid URL like we would treat no URL - return; - - if (rURL.getLength() && !::svt::GraphicAccess::isSupportedURL( rURL ) ) - { - if (m_pMedium) - delete m_pMedium; - - m_pMedium = new SfxMedium(rURL, STREAM_STD_READ, sal_False); - m_pMedium->SetDataAvailableLink( - STATIC_LINK(this, OClickableImageBaseModel, DataAvailableLink)); - - // Das XModel suchen, um an die Object-Shell oder zumindest den - // Referer zu gelangen. - // Das Model findet man allerdings nur beim Laden von HTML-Dokumenten - // und dann, wenn die URL in einem bereits geladenen Dokument - // geaendert wird. Waehrend des Ladens kommt man nicht an das - // Model ran. - Reference< XModel > xModel; - InterfaceRef xIfc( *this ); - while( !xModel.is() && xIfc.is() ) - { - Reference<XChild> xChild( xIfc, UNO_QUERY ); - xIfc = xChild->getParent(); - query_interface(xIfc, xModel); - } - - // Die Object-Shell suchen, indem wir - // ueber alle Object-Shells iterieren und deren XModel mit dem - // eigenen vergleichen. Als Optimierung probieren wir aber erstmal - // die aktuelle Object-Shell. - // wir unser XModel mit dem aller Object - SfxObjectShell *pObjSh = 0; - - if( xModel.is() ) - { - SfxObjectShell *pTestObjSh = SfxObjectShell::Current(); - if( pTestObjSh ) - { - Reference< XModel > xTestModel = pTestObjSh->GetModel(); - if( xTestModel == xModel ) - pObjSh = pTestObjSh; - } - if( !pObjSh ) - { - pTestObjSh = SfxObjectShell::GetFirst(); - while( !pObjSh && pTestObjSh ) - { - Reference< XModel > xTestModel = pTestObjSh->GetModel(); - if( xTestModel == xModel ) - pObjSh = pTestObjSh; - else - pTestObjSh = SfxObjectShell::GetNext( *pTestObjSh ); - } - } - } - - #ifdef USE_REGISTER_TRANSFER - if( pObjSh ) - { - // Medium registrieren, damit abgebrochen werden kann - pObjSh->RegisterTransfer( *m_pMedium ); - - // Target-Frame uebertragen, damit auch javascript:-URLs - // "geladen" werden koennen. - const SfxMedium *pShMedium = pObjSh->GetMedium(); - if( pShMedium ) - m_pMedium->SetLoadTargetFrame(pShMedium->GetLoadTargetFrame()); - } - else - { - // Keine Object-Shell, aber ein Medium? Dann uebernehmen wir - // zumindest den Referer. - if( xModel.is() ) - { - ::rtl::OUString sReferer( xModel->getURL() ); - if( sReferer.getLength() ) - m_pMedium->SetReferer( OUStringToString(sReferer, CHARSET_SYSTEM) ); - } - } - #else - if( pObjSh ) - { - // Target-Frame uebertragen, damit auch javascript:-URLs - // "geladen" werden koennen. - const SfxMedium *pShMedium = pObjSh->GetMedium(); - if( pShMedium ) - m_pMedium->SetLoadTargetFrame(pShMedium->GetLoadTargetFrame()); - } - - if( xModel.is() ) - { - ::rtl::OUString sReferer( xModel->getURL() ); - if( sReferer.getLength() ) - m_pMedium->SetReferer( sReferer ); - } - #endif - - // Downloading-Flag auf sal_True setzen. Es werden dann auch - // Data-Available-Links, wenn wir in den Pending-Staus gelangen. - m_bDownloading = sal_True; - m_bProdStarted = sal_False; - - // Download anstossen (Achtung: Kann auch synchron sein). - m_pMedium->DownLoad(STATIC_LINK(this, OClickableImageBaseModel, DownloadDoneLink)); - } - else - { - if ( ::svt::GraphicAccess::isSupportedURL( rURL ) ) - GetImageProducer()->SetImage( rURL ); - GetImageProducer()->startProduction(); - } - } - - //------------------------------------------------------------------------------ - void OClickableImageBaseModel::DataAvailable() - { - if (!m_bProdStarted) - StartProduction(); - - GetImageProducer()->NewDataAvailable(); - } - - //------------------------------------------------------------------------------ - void OClickableImageBaseModel::DownloadDone() - { - DataAvailable(); - m_bDownloading = sal_False; - } - - //------------------------------------------------------------------------------ - IMPL_STATIC_LINK( OClickableImageBaseModel, DownloadDoneLink, void*, EMPTYARG ) - { - ::osl::MutexGuard aGuard( pThis->m_aMutex ); - pThis->DownloadDone(); - return 0; - } - - //------------------------------------------------------------------------------ - IMPL_STATIC_LINK( OClickableImageBaseModel, DataAvailableLink, void*, EMPTYARG ) - { - ::osl::MutexGuard aGuard( pThis->m_aMutex ); - pThis->DataAvailable(); - return 0; - } - - //------------------------------------------------------------------------------ - void OClickableImageBaseModel::_propertyChanged( const PropertyChangeEvent& rEvt ) - throw( RuntimeException ) - { - // Wenn eine URL gesetzt worden ist, muss die noch an den ImageProducer - // weitergereicht werden. - ::osl::MutexGuard aGuard(m_aMutex); - SetURL( getString(rEvt.NewValue) ); - } - - // ----------------------------------------------------------------------------- - Any OClickableImageBaseModel::getPropertyDefaultByHandle( sal_Int32 nHandle ) const - { - switch (nHandle) - { - case PROPERTY_ID_BUTTONTYPE : return makeAny( FormButtonType_PUSH ); - case PROPERTY_ID_TARGET_URL : - case PROPERTY_ID_TARGET_FRAME : return makeAny( ::rtl::OUString() ); - case PROPERTY_ID_DISPATCHURLINTERNAL : return makeAny( sal_False ); - default: - return OControlModel::getPropertyDefaultByHandle(nHandle); - } - } - - //================================================================== - // OImageProducerThread_Impl - //================================================================== - //------------------------------------------------------------------ - EventObject* OImageProducerThread_Impl::cloneEvent( const EventObject* _pEvt ) const - { - return new EventObject( *_pEvt ); - } - - //------------------------------------------------------------------ - void OImageProducerThread_Impl::processEvent( ::cppu::OComponentHelper *pCompImpl, - const EventObject* pEvt, - const Reference<XControl>&, - sal_Bool ) - { - ((OClickableImageBaseControl *)pCompImpl)->actionPerformed_Impl( sal_True, *(MouseEvent *)pEvt ); - } - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/clickableimage.hxx b/forms/source/component/clickableimage.hxx deleted file mode 100644 index 9091d8b23..000000000 --- a/forms/source/component/clickableimage.hxx +++ /dev/null @@ -1,297 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_CLICKABLEIMAGE_HXX -#define FORMS_SOURCE_CLICKABLEIMAGE_HXX - -#include "FormComponent.hxx" -#include "EventThread.hxx" -#include "imgprod.hxx" -#include <tools/link.hxx> -#include <comphelper/propmultiplex.hxx> -#include <com/sun/star/form/XImageProducerSupplier.hpp> -#include <com/sun/star/form/FormButtonType.hpp> -#include <com/sun/star/form/XApproveActionListener.hpp> -#include <com/sun/star/form/XApproveActionBroadcaster.hpp> -#include <com/sun/star/form/submission/XSubmissionSupplier.hpp> -#include <com/sun/star/form/submission/XSubmission.hpp> -#include <com/sun/star/frame/XModel.hpp> -#include <com/sun/star/frame/XDispatchProviderInterception.hpp> -#include <cppuhelper/implbase3.hxx> - - -class SfxMedium; - -//......................................................................... -namespace frm -{ -//......................................................................... - - class OImageProducerThread_Impl; - class ControlFeatureInterception; - //================================================================== - // OClickableImageBaseModel - //================================================================== - typedef ::cppu::ImplHelper3 < ::com::sun::star::form::XImageProducerSupplier - , ::com::sun::star::awt::XImageProducer - , ::com::sun::star::form::submission::XSubmissionSupplier - > OClickableImageBaseModel_Base; - - class OClickableImageBaseModel :public OClickableImageBaseModel_Base - ,public OControlModel - ,public OPropertyChangeListener - { - protected: - ::com::sun::star::form::FormButtonType m_eButtonType; // Art des Buttons (push,submit,reset) - ::rtl::OUString m_sTargetURL; // URL fuer den URL-Button - ::rtl::OUString m_sTargetFrame; // TargetFrame zum Oeffnen - - // ImageProducer stuff - ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer> m_xProducer; - SfxMedium* m_pMedium; // Download-Medium - ImageProducer* m_pProducer; - sal_Bool m_bDispatchUrlInternal; // property: is not allowed to set : 1 - sal_Bool m_bDownloading : 1; // laeuft ein Download? - sal_Bool m_bProdStarted : 1; - - // XSubmission stuff - ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmission > - m_xSubmissionDelegate; - - - DECL_STATIC_LINK( OClickableImageBaseModel, DataAvailableLink, void* ); - DECL_STATIC_LINK( OClickableImageBaseModel, DownloadDoneLink, void* ); - - inline ImageProducer* GetImageProducer() { return m_pProducer; } - - void StartProduction(); - void SetURL(const ::rtl::OUString& rURL); - void DataAvailable(); - void DownloadDone(); - - ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - inline sal_Bool isDispatchUrlInternal() const { return m_bDispatchUrlInternal; } - inline void setDispatchUrlInternal(sal_Bool _bDispatch) { m_bDispatchUrlInternal = _bDispatch; } - - public: - DECLARE_DEFAULT_XTOR( OClickableImageBaseModel ); - - // UNO Anbindung - DECLARE_UNO3_AGG_DEFAULTS(OClickableImageBaseModel, OControlModel); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - protected: - // OComponentHelper - virtual void SAL_CALL disposing(); - - // ::com::sun::star::form::XImageProducerSupplier - virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer> SAL_CALL getImageProducer() throw (::com::sun::star::uno::RuntimeException) { return m_xProducer; } - - // OPropertySetHelper - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw (::com::sun::star::uno::Exception); - - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - - using ::cppu::OPropertySetHelper::getFastPropertyValue; - - // OPropertyChangeListener - virtual void _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent&) throw(::com::sun::star::uno::RuntimeException); - - // XPropertyState - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const; - - // XImageProducer - virtual void SAL_CALL addConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& xConsumer ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& xConsumer ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL startProduction( ) throw (::com::sun::star::uno::RuntimeException); - - // XSubmissionSupplier - virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmission > SAL_CALL getSubmission() throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setSubmission( const ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmission >& _submission ) throw (::com::sun::star::uno::RuntimeException); - - // XServiceInfo - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); - - // XEventListener - using OControlModel::disposing; - - public: - struct GuardAccess { friend class ImageModelMethodGuard; private: GuardAccess() { } }; - ::osl::Mutex& getMutex( GuardAccess ) { return m_aMutex; } - ImageProducer* getImageProducer( GuardAccess ) { return m_pProducer; } - - protected: - using OControlModel::getMutex; - - void implConstruct(); - - // to be called from within the cloning-ctor of your derived class - void implInitializeImageURL( ); - }; - - //================================================================== - // ImageModelMethodGuard - //================================================================== - class ImageModelMethodGuard : public ::osl::MutexGuard - { - private: - typedef ::osl::MutexGuard GuardBase; - - public: - ImageModelMethodGuard( OClickableImageBaseModel& _rModel ) - :GuardBase( _rModel.getMutex( OClickableImageBaseModel::GuardAccess() ) ) - { - if ( NULL == _rModel.getImageProducer( OClickableImageBaseModel::GuardAccess() ) ) - throw ::com::sun::star::lang::DisposedException( - ::rtl::OUString(), - static_cast< ::com::sun::star::form::XImageProducerSupplier* >( &_rModel ) - ); - } - }; - - //================================================================== - // OClickableImageBaseControl - //================================================================== - typedef ::cppu::ImplHelper3 < ::com::sun::star::form::XApproveActionBroadcaster - , ::com::sun::star::form::submission::XSubmission - , ::com::sun::star::frame::XDispatchProviderInterception - > OClickableImageBaseControl_BASE; - - class OClickableImageBaseControl :public OClickableImageBaseControl_BASE - ,public OControl - { - friend class OImageProducerThread_Impl; - - private: - OImageProducerThread_Impl* m_pThread; - ::cppu::OInterfaceContainerHelper m_aSubmissionVetoListeners; - ::std::auto_ptr< ControlFeatureInterception > - m_pFeatureInterception; - - protected: - ::cppu::OInterfaceContainerHelper m_aApproveActionListeners; - ::cppu::OInterfaceContainerHelper m_aActionListeners; - ::rtl::OUString m_aActionCommand; - - // XSubmission - virtual void SAL_CALL submit( ) throw (::com::sun::star::util::VetoException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL submitWithInteraction( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& aHandler ) throw (::com::sun::star::util::VetoException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addSubmissionVetoListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmissionVetoListener >& listener ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeSubmissionVetoListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmissionVetoListener >& listener ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); - - // XServiceInfo - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); - - // XEventListener - using OControl::disposing; - - public: - OClickableImageBaseControl( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, - const ::rtl::OUString& _aService); - virtual ~OClickableImageBaseControl(); - - protected: - // UNO Anbindung - DECLARE_UNO3_AGG_DEFAULTS(OClickableImageBaseControl, OControl); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // ::com::sun::star::form::XApproveActionBroadcaster - virtual void SAL_CALL addApproveActionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XApproveActionListener>& _rxListener) - throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeApproveActionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XApproveActionListener>& _rxListener) - throw(::com::sun::star::uno::RuntimeException); - - // XDispatchProviderInterception - virtual void SAL_CALL registerDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL releaseDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException); - - protected: - virtual void actionPerformed_Impl( sal_Bool bNotifyListener, const ::com::sun::star::awt::MouseEvent& rEvt ); - - ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > _getTypes(); - - /** approves the action by calling the approve listeners - @return <TRUE/> if and only if the action has <em>not</em> been cancelled by a listener - */ - bool approveAction( ); - - /** retrieves (and if necessary creates) the image producer thread. - - Must be called with our mutex locked - */ - OImageProducerThread_Impl* getImageProducerThread(); - - private: - void implSubmit( - const ::com::sun::star::awt::MouseEvent& _rEvent, - const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& aHandler - ) SAL_THROW((com::sun::star::util::VetoException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)); - }; - - //================================================================== - // OImageProducerThread_Impl - //================================================================== - class OImageProducerThread_Impl: public OComponentEventThread - { - protected: - - // Die folgende Methode wrrd gerufen um das Event unter Beruecksichtigung - // seines Typs zu duplizieren - virtual ::com::sun::star::lang::EventObject* cloneEvent( const ::com::sun::star::lang::EventObject* _pEvt ) const; - - // Ein Event bearbeiten. Der Mutex ist dabei nicht gelockt, pCompImpl - // bleibt aber in jedem Fall gueltig. - virtual void processEvent( ::cppu::OComponentHelper *pCompImpl, - const ::com::sun::star::lang::EventObject*, - const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>&, - sal_Bool ); - - public: - OImageProducerThread_Impl( OClickableImageBaseControl *pControl ) : - OComponentEventThread( pControl ) - {} - - void addEvent() { ::com::sun::star::lang::EventObject aEvt; OComponentEventThread::addEvent( &aEvt ); } - - protected: - using OComponentEventThread::addEvent; - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_SOURCE_CLICKABLEIMAGE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/cloneable.cxx b/forms/source/component/cloneable.cxx deleted file mode 100644 index 8b876f631..000000000 --- a/forms/source/component/cloneable.cxx +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "cloneable.hxx" -#include <com/sun/star/util/XCloneable.hpp> -#include <comphelper/uno3.hxx> -#include <tools/debug.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::comphelper; - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::util; - - //==================================================================== - //= OCloneableAggregation - //==================================================================== - //------------------------------------------------------------------ - Reference< XAggregation > OCloneableAggregation::createAggregateClone( const OCloneableAggregation* _pOriginal ) - { - Reference< XCloneable > xAggregateCloneable; // will be the aggregate's XCloneable - Reference< XAggregation > xAggregateClone; // will be the aggregate's clone - - if ( query_aggregation( _pOriginal->m_xAggregate, xAggregateCloneable ) ) - { - xAggregateClone = xAggregateClone.query( xAggregateCloneable->createClone() ); - DBG_ASSERT( xAggregateClone.is(), "OCloneableAggregation::createAggregateClone: invalid clone returned by the aggregate!" ); - } - else { - DBG_ASSERT( !_pOriginal->m_xAggregate.is(), "OCloneableAggregation::createAggregateClone: aggregate is not cloneable!" ); - } - - return xAggregateClone; - } - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/entrylisthelper.cxx b/forms/source/component/entrylisthelper.cxx deleted file mode 100644 index 1d24c6867..000000000 --- a/forms/source/component/entrylisthelper.cxx +++ /dev/null @@ -1,324 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "entrylisthelper.hxx" -#include "FormComponent.hxx" - -#include <osl/diagnose.h> -#include <comphelper/sequence.hxx> -#include <comphelper/property.hxx> -#include <algorithm> - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::form::binding; - - //===================================================================== - //= OEntryListHelper - //===================================================================== - //--------------------------------------------------------------------- - OEntryListHelper::OEntryListHelper( OControlModel& _rControlModel ) - :m_rControlModel( _rControlModel ) - ,m_aRefreshListeners( _rControlModel.getInstanceMutex() ) - { - } - - //--------------------------------------------------------------------- - OEntryListHelper::OEntryListHelper( const OEntryListHelper& _rSource, OControlModel& _rControlModel ) - :m_rControlModel( _rControlModel ) - ,m_xListSource ( _rSource.m_xListSource ) - ,m_aStringItems( _rSource.m_aStringItems ) - ,m_aRefreshListeners( _rControlModel.getInstanceMutex() ) - { - } - - //--------------------------------------------------------------------- - OEntryListHelper::~OEntryListHelper( ) - { - } - - //--------------------------------------------------------------------- - void SAL_CALL OEntryListHelper::setListEntrySource( const Reference< XListEntrySource >& _rxSource ) throw (RuntimeException) - { - ControlModelLock aLock( m_rControlModel ); - - // disconnect from the current external list source - disconnectExternalListSource(); - - // and connect to the new one - if ( _rxSource.is() ) - connectExternalListSource( _rxSource, aLock ); - } - - //--------------------------------------------------------------------- - Reference< XListEntrySource > SAL_CALL OEntryListHelper::getListEntrySource( ) throw (RuntimeException) - { - return m_xListSource; - } - - - //--------------------------------------------------------------------- - void SAL_CALL OEntryListHelper::entryChanged( const ListEntryEvent& _rEvent ) throw (RuntimeException) - { - ControlModelLock aLock( m_rControlModel ); - - OSL_ENSURE( _rEvent.Source == m_xListSource, - "OEntryListHelper::entryChanged: where did this come from?" ); - OSL_ENSURE( ( _rEvent.Position >= 0 ) && ( _rEvent.Position < m_aStringItems.getLength() ), - "OEntryListHelper::entryChanged: invalid index!" ); - OSL_ENSURE( _rEvent.Entries.getLength() == 1, - "OEntryListHelper::entryChanged: invalid string list!" ); - - if ( ( _rEvent.Position >= 0 ) - && ( _rEvent.Position < m_aStringItems.getLength() ) - && ( _rEvent.Entries.getLength() > 0 ) - ) - { - m_aStringItems[ _rEvent.Position ] = _rEvent.Entries[ 0 ]; - stringItemListChanged( aLock ); - } - } - - //--------------------------------------------------------------------- - void SAL_CALL OEntryListHelper::entryRangeInserted( const ListEntryEvent& _rEvent ) throw (RuntimeException) - { - ControlModelLock aLock( m_rControlModel ); - - OSL_ENSURE( _rEvent.Source == m_xListSource, - "OEntryListHelper::entryRangeInserted: where did this come from?" ); - OSL_ENSURE( ( _rEvent.Position > 0 ) && ( _rEvent.Position < m_aStringItems.getLength() ) && ( _rEvent.Entries.getLength() > 0 ), - "OEntryListHelper::entryRangeRemoved: invalid count and/or position!" ); - - if ( ( _rEvent.Position > 0 ) - && ( _rEvent.Position < m_aStringItems.getLength() ) - && ( _rEvent.Entries.getLength() > 0 ) - ) - { - // the entries *before* the insertion pos - Sequence< ::rtl::OUString > aKeepEntries( - m_aStringItems.getConstArray(), - _rEvent.Position - ); - // the entries *behind* the insertion pos - Sequence< ::rtl::OUString > aMovedEntries( - m_aStringItems.getConstArray() + _rEvent.Position, - m_aStringItems.getLength() - _rEvent.Position - ); - - // concat all three parts - m_aStringItems = ::comphelper::concatSequences( - aKeepEntries, - _rEvent.Entries, - aMovedEntries - ); - - stringItemListChanged( aLock ); - } - } - - //--------------------------------------------------------------------- - void SAL_CALL OEntryListHelper::entryRangeRemoved( const ListEntryEvent& _rEvent ) throw (RuntimeException) - { - ControlModelLock aLock( m_rControlModel ); - - OSL_ENSURE( _rEvent.Source == m_xListSource, - "OEntryListHelper::entryRangeRemoved: where did this come from?" ); - OSL_ENSURE( ( _rEvent.Position > 0 ) && ( _rEvent.Count > 0 ) && ( _rEvent.Position + _rEvent.Count <= m_aStringItems.getLength() ), - "OEntryListHelper::entryRangeRemoved: invalid count and/or position!" ); - - if ( ( _rEvent.Position > 0 ) - && ( _rEvent.Count > 0 ) - && ( _rEvent.Position + _rEvent.Count <= m_aStringItems.getLength() ) - ) - { - // copy all items after the removed ones - ::std::copy( - m_aStringItems.getConstArray() + _rEvent.Position + _rEvent.Count, - m_aStringItems.getConstArray() + m_aStringItems.getLength(), - m_aStringItems.getArray( ) + _rEvent.Position - ); - // shrink the array - m_aStringItems.realloc( m_aStringItems.getLength() - _rEvent.Count ); - - stringItemListChanged( aLock ); - } - } - - //--------------------------------------------------------------------- - void SAL_CALL OEntryListHelper::allEntriesChanged( const EventObject& _rEvent ) throw (RuntimeException) - { - ControlModelLock aLock( m_rControlModel ); - - OSL_ENSURE( _rEvent.Source == m_xListSource, - "OEntryListHelper::allEntriesChanged: where did this come from?" ); - - Reference< XListEntrySource > xSource( _rEvent.Source, UNO_QUERY ); - if ( _rEvent.Source == m_xListSource ) - { - impl_lock_refreshList( aLock ); - } - } - - // XRefreshable - //------------------------------------------------------------------------------ - void SAL_CALL OEntryListHelper::addRefreshListener(const Reference<XRefreshListener>& _rxListener) throw(RuntimeException) - { - if ( _rxListener.is() ) - m_aRefreshListeners.addInterface( _rxListener ); - } - - //------------------------------------------------------------------------------ - void SAL_CALL OEntryListHelper::removeRefreshListener(const Reference<XRefreshListener>& _rxListener) throw(RuntimeException) - { - if ( _rxListener.is() ) - m_aRefreshListeners.removeInterface( _rxListener ); - } - - //------------------------------------------------------------------------------ - void SAL_CALL OEntryListHelper::refresh() throw(RuntimeException) - { - { - ControlModelLock aLock( m_rControlModel ); - impl_lock_refreshList( aLock ); - } - - EventObject aEvt( static_cast< XRefreshable* >( this ) ); - m_aRefreshListeners.notifyEach( &XRefreshListener::refreshed, aEvt ); - } - - //--------------------------------------------------------------------- - void OEntryListHelper::impl_lock_refreshList( ControlModelLock& _rInstanceLock ) - { - if ( hasExternalListSource() ) - { - m_aStringItems = m_xListSource->getAllListEntries( ); - stringItemListChanged( _rInstanceLock ); - } - else - refreshInternalEntryList(); - } - - //--------------------------------------------------------------------- - bool OEntryListHelper::handleDisposing( const EventObject& _rEvent ) - { - if ( m_xListSource .is() && ( _rEvent.Source == m_xListSource ) ) - { - disconnectExternalListSource( ); - return true; - } - return false; - } - - //--------------------------------------------------------------------- - void OEntryListHelper::disposing( ) - { - EventObject aEvt( static_cast< XRefreshable* >( this ) ); - m_aRefreshListeners.disposeAndClear(aEvt); - - if ( hasExternalListSource( ) ) - disconnectExternalListSource( ); - } - - //--------------------------------------------------------------------- - void OEntryListHelper::disconnectExternalListSource( ) - { - if ( m_xListSource.is() ) - m_xListSource->removeListEntryListener( this ); - - m_xListSource.clear(); - - disconnectedExternalListSource(); - } - - //--------------------------------------------------------------------- - void OEntryListHelper::connectedExternalListSource( ) - { - // nothing to do here - } - - //--------------------------------------------------------------------- - void OEntryListHelper::disconnectedExternalListSource( ) - { - // nothing to do here - } - - //--------------------------------------------------------------------- - void OEntryListHelper::connectExternalListSource( const Reference< XListEntrySource >& _rxSource, ControlModelLock& _rInstanceLock ) - { - OSL_ENSURE( !hasExternalListSource(), "OEntryListHelper::connectExternalListSource: only to be called if no external source is active!" ); - OSL_ENSURE( _rxSource.is(), "OEntryListHelper::connectExternalListSource: invalid list source!" ); - - // remember it - m_xListSource = _rxSource; - - // initially fill our item list - if ( m_xListSource.is() ) - { - // be notified when the list changes ... - m_xListSource->addListEntryListener( this ); - - m_aStringItems = m_xListSource->getAllListEntries( ); - stringItemListChanged( _rInstanceLock ); - - // let derivees react on the new list source - connectedExternalListSource(); - } - } - - //--------------------------------------------------------------------- - sal_Bool OEntryListHelper::convertNewListSourceProperty( Any& _rConvertedValue, - Any& _rOldValue, const Any& _rValue ) SAL_THROW( ( IllegalArgumentException ) ) - { - if ( hasExternalListSource() ) - throw IllegalArgumentException( ); - // TODO: error message - - return ::comphelper::tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_aStringItems ); - } - - //--------------------------------------------------------------------- - void OEntryListHelper::setNewStringItemList( const ::com::sun::star::uno::Any& _rValue, ControlModelLock& _rInstanceLock ) - { - OSL_PRECOND( !hasExternalListSource(), "OEntryListHelper::setNewStringItemList: this should never have survived convertNewListSourceProperty!" ); - OSL_VERIFY( _rValue >>= m_aStringItems ); - stringItemListChanged( _rInstanceLock ); - } - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/entrylisthelper.hxx b/forms/source/component/entrylisthelper.hxx deleted file mode 100644 index 1713ffe24..000000000 --- a/forms/source/component/entrylisthelper.hxx +++ /dev/null @@ -1,201 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_ENTRYLISTHELPER_HXX -#define FORMS_ENTRYLISTHELPER_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/form/binding/XListEntrySink.hpp> -#include <com/sun/star/util/XRefreshable.hpp> -#include <com/sun/star/form/binding/XListEntryListener.hpp> -#include <com/sun/star/lang/IllegalArgumentException.hpp> -/** === end UNO includes === **/ - -#include <cppuhelper/implbase3.hxx> -#include <cppuhelper/interfacecontainer.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... - - class OControlModel; - class ControlModelLock; - - //===================================================================== - //= OEntryListHelper - //===================================================================== - typedef ::cppu::ImplHelper3 < ::com::sun::star::form::binding::XListEntrySink - , ::com::sun::star::form::binding::XListEntryListener - , ::com::sun::star::util::XRefreshable - > OEntryListHelper_BASE; - - class OEntryListHelper : public OEntryListHelper_BASE - { - private: - OControlModel& m_rControlModel; - - ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XListEntrySource > - m_xListSource; /// our external list source - ::com::sun::star::uno::Sequence< ::rtl::OUString > - m_aStringItems; /// "overridden" StringItemList property value - ::cppu::OInterfaceContainerHelper - m_aRefreshListeners; - - - protected: - OEntryListHelper( OControlModel& _rControlModel ); - OEntryListHelper( const OEntryListHelper& _rSource, OControlModel& _rControlModel ); - virtual ~OEntryListHelper( ); - - /// returns the current string item list - inline const ::com::sun::star::uno::Sequence< ::rtl::OUString >& - getStringItemList() const { return m_aStringItems; } - inline const ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XListEntrySource >& - getExternalListEntrySource() const { return m_xListSource; } - - /// determines whether we actually have an external list source - inline bool hasExternalListSource( ) const { return m_xListSource.is(); } - - /** handling the XEventListener::disposing call for the case where - our list source is being disposed - @return - <TRUE/> if and only if the disposed object was our list source, and so the - event was handled - */ - bool handleDisposing( const ::com::sun::star::lang::EventObject& _rEvent ); - - /** to be called by derived classes' instances when they're being disposed - */ - void disposing( ); - - // prevent method hiding - virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException) = 0; - - /** helper for implementing convertFastPropertyValue( StringItemList ) - - <p>The signature of this method and the return type have the same semantics - as convertFastPropertyValue.</p> - */ - sal_Bool convertNewListSourceProperty( - ::com::sun::star::uno::Any& _rConvertedValue, - ::com::sun::star::uno::Any& _rOldValue, - const ::com::sun::star::uno::Any& _rValue - ) - SAL_THROW( ( ::com::sun::star::lang::IllegalArgumentException ) ); - - /** helper for implementing setFastPropertyValueNoBroadcast - - <p>Will internally call stringItemListChanged after the new item list - has been set.</p> - - @precond - not to be called when we have an external list source - @see hasExternalListSource - */ - void setNewStringItemList( const ::com::sun::star::uno::Any& _rValue, ControlModelLock& _rInstanceLock ); - - /** announces that the list of entries has changed. - - <p>Derived classes have to override this. Most probably, they'll set the new - as model property.</p> - - @pure - @see getStringItemList - */ - virtual void stringItemListChanged( ControlModelLock& _rInstanceLock ) = 0; - - /** called whenever a connection to a new external list source has been established - */ - virtual void connectedExternalListSource( ); - - /** called whenever a connection to a new external list source has been revoked - */ - virtual void disconnectedExternalListSource( ); - - /** called when XRefreshable::refresh has been called, and we do *not* have an external - list source - */ - virtual void refreshInternalEntryList() = 0; - - private: - // XListEntrySink - virtual void SAL_CALL setListEntrySource( const ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XListEntrySource >& _rxSource ) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XListEntrySource > SAL_CALL getListEntrySource( ) throw (::com::sun::star::uno::RuntimeException); - - // XListEntryListener - virtual void SAL_CALL entryChanged( const ::com::sun::star::form::binding::ListEntryEvent& _rSource ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL entryRangeInserted( const ::com::sun::star::form::binding::ListEntryEvent& _rSource ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL entryRangeRemoved( const ::com::sun::star::form::binding::ListEntryEvent& _rSource ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL allEntriesChanged( const ::com::sun::star::lang::EventObject& _rSource ) throw (::com::sun::star::uno::RuntimeException); - - // XRefreshable - virtual void SAL_CALL refresh() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addRefreshListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeRefreshListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - - private: - /** disconnects from the active external list source, if present - @see connectExternalListSource - */ - void disconnectExternalListSource( ); - - /** connects to a new external list source - @param _rxSource - the new list source. Must not be <NULL/> - @see disconnectExternalListSource - */ - void connectExternalListSource( - const ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XListEntrySource >& _rxSource, - ControlModelLock& _rInstanceLock - ); - - /** refreshes our list entries - - In case we have an external list source, its used to obtain the new entries, and then - stringItemListChanged is called to give the derived class the possibility to - react on this. - - In case we do not have an external list source, refreshInternalEntryList is called. - */ - void impl_lock_refreshList( ControlModelLock& _rInstanceLock ); - - private: - OEntryListHelper(); // never implemented - OEntryListHelper( const OEntryListHelper& ); // never implemented - OEntryListHelper& operator=( const OEntryListHelper& ); // never implemented - }; - -//......................................................................... -} // namespace frm -//......................................................................... - - -#endif // FORMS_ENTRYLISTHELPER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/errorbroadcaster.cxx b/forms/source/component/errorbroadcaster.cxx deleted file mode 100644 index 575a65d46..000000000 --- a/forms/source/component/errorbroadcaster.cxx +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "errorbroadcaster.hxx" -#include <connectivity/dbtools.hxx> -#include <com/sun/star/sdb/SQLContext.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::sdbc; - using namespace ::com::sun::star::sdb; - using namespace ::dbtools; - - //===================================================================== - //= OErrorBroadcaster - //===================================================================== - //--------------------------------------------------------------------- - OErrorBroadcaster::OErrorBroadcaster( ::cppu::OBroadcastHelper& _rBHelper ) - :m_rBHelper( _rBHelper ) - ,m_aErrorListeners( _rBHelper.rMutex ) - { - } - - //--------------------------------------------------------------------- - OErrorBroadcaster::~OErrorBroadcaster( ) - { - OSL_ENSURE( m_rBHelper.bDisposed || m_rBHelper.bInDispose, - "OErrorBroadcaster::~OErrorBroadcaster: not disposed!" ); - // herein, we don't have a chance to do the dispose ourself .... - - OSL_ENSURE( 0 == m_aErrorListeners.getLength(), - "OErrorBroadcaster::~OErrorBroadcaster: still have listeners!" ); - // either we're not disposed, or the derived class did not call our dispose from within their dispose - } - - //--------------------------------------------------------------------- - void SAL_CALL OErrorBroadcaster::disposing() - { - EventObject aDisposeEvent( static_cast< XSQLErrorBroadcaster* >( this ) ); - m_aErrorListeners.disposeAndClear( aDisposeEvent ); - } - - //------------------------------------------------------------------------------ - void SAL_CALL OErrorBroadcaster::onError( const SQLException& _rException, const ::rtl::OUString& _rContextDescription ) - { - Any aError; - if ( _rContextDescription.getLength() ) - aError = makeAny( prependErrorInfo( _rException, static_cast< XSQLErrorBroadcaster* >( this ), _rContextDescription ) ); - else - aError = makeAny( _rException ); - - onError( SQLErrorEvent( static_cast< XSQLErrorBroadcaster* >( this ), aError ) ); - } - - //------------------------------------------------------------------------------ - void SAL_CALL OErrorBroadcaster::onError( const ::com::sun::star::sdb::SQLErrorEvent& _rError ) - { - if ( m_aErrorListeners.getLength() ) - { - - ::cppu::OInterfaceIteratorHelper aIter( m_aErrorListeners ); - while ( aIter.hasMoreElements() ) - static_cast< XSQLErrorListener* >( aIter.next() )->errorOccured( _rError ); - } - } - - //------------------------------------------------------------------------------ - void SAL_CALL OErrorBroadcaster::addSQLErrorListener( const Reference< XSQLErrorListener >& _rxListener ) throw( RuntimeException ) - { - m_aErrorListeners.addInterface( _rxListener ); - } - - //------------------------------------------------------------------------------ - void SAL_CALL OErrorBroadcaster::removeSQLErrorListener( const Reference< XSQLErrorListener >& _rxListener ) throw( RuntimeException ) - { - m_aErrorListeners.removeInterface( _rxListener ); - } - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/errorbroadcaster.hxx b/forms/source/component/errorbroadcaster.hxx deleted file mode 100644 index 38a808322..000000000 --- a/forms/source/component/errorbroadcaster.hxx +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_ERRORBROADCASTER_HXX -#define FORMS_ERRORBROADCASTER_HXX - -#include <cppuhelper/implbase1.hxx> -#include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp> -#include <cppuhelper/interfacecontainer.h> -#include <com/sun/star/sdbc/SQLException.hpp> -#include <com/sun/star/sdb/SQLErrorEvent.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - - //===================================================================== - //= OErrorBroadcaster - //===================================================================== - typedef ::cppu::ImplHelper1 < ::com::sun::star::sdb::XSQLErrorBroadcaster - > OErrorBroadcaster_BASE; - - class OErrorBroadcaster : public OErrorBroadcaster_BASE - { - private: - ::cppu::OBroadcastHelper& m_rBHelper; - ::cppu::OInterfaceContainerHelper m_aErrorListeners; - - protected: - OErrorBroadcaster( ::cppu::OBroadcastHelper& _rBHelper ); - virtual ~OErrorBroadcaster( ); - - void SAL_CALL disposing(); - - void SAL_CALL onError( const ::com::sun::star::sdbc::SQLException& _rException, const ::rtl::OUString& _rContextDescription ); - void SAL_CALL onError( const ::com::sun::star::sdb::SQLErrorEvent& _rException ); - - protected: - // XSQLErrorBroadcaster - virtual void SAL_CALL addSQLErrorListener( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener >& _rListener ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeSQLErrorListener( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener >& _rListener ) throw (::com::sun::star::uno::RuntimeException); - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_ERRORBROADCASTER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/findpos.cxx b/forms/source/component/findpos.cxx deleted file mode 100644 index 40732f806..000000000 --- a/forms/source/component/findpos.cxx +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "sal/config.h" - -#include "findpos.hxx" - -#include "com/sun/star/uno/Sequence.hxx" -#include "comphelper/types.hxx" -#include "rtl/ustring.hxx" -#include "sal/types.h" - -#include <algorithm> - -namespace detail { - -sal_Int32 findPos( - const ::rtl::OUString& aStr, - const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rList) -{ - const ::rtl::OUString* pStrList = rList.getConstArray(); - const ::rtl::OUString* pResult = ::std::lower_bound( - pStrList, pStrList + rList.getLength(), aStr ); - if ( ( pResult != pStrList + rList.getLength() ) && ( *pResult == aStr ) ) - return ( pResult - pStrList ); - - return -1; -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/findpos.hxx b/forms/source/component/findpos.hxx deleted file mode 100644 index 1a583a909..000000000 --- a/forms/source/component/findpos.hxx +++ /dev/null @@ -1,48 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef INCLUDED_FORMS_SOURCE_COMPONENT_FINDPOS_HXX -#define INCLUDED_FORMS_SOURCE_COMPONENT_FINDPOS_HXX - -#include "sal/config.h" -#include "com/sun/star/uno/Sequence.hxx" -#include "sal/types.h" - -namespace rtl { class OUString; } - -namespace detail { - -sal_Int32 findPos( - const ::rtl::OUString& aStr, - const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rList); - -} - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/formcontrolfont.cxx b/forms/source/component/formcontrolfont.cxx deleted file mode 100644 index 7a1919024..000000000 --- a/forms/source/component/formcontrolfont.cxx +++ /dev/null @@ -1,552 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "formcontrolfont.hxx" -#include "property.hrc" -#include "property.hxx" -#include <tools/debug.hxx> -#include <comphelper/property.hxx> -#include <comphelper/types.hxx> -#include <tools/color.hxx> -#include <toolkit/helper/emptyfontdescriptor.hxx> -#include <com/sun/star/awt/FontRelief.hpp> -#include <com/sun/star/awt/FontEmphasisMark.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::comphelper; - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::beans; - - //------------------------------------------------------------------------------ - namespace - { - Any lcl_extractFontDescriptorAggregate( sal_Int32 _nHandle, const FontDescriptor& _rFont ) - { - Any aValue; - switch ( _nHandle ) - { - case PROPERTY_ID_FONT_NAME: - aValue <<= _rFont.Name; - break; - - case PROPERTY_ID_FONT_STYLENAME: - aValue <<= _rFont.StyleName; - break; - - case PROPERTY_ID_FONT_FAMILY: - aValue <<= (sal_Int16)_rFont.Family; - break; - - case PROPERTY_ID_FONT_CHARSET: - aValue <<= (sal_Int16)_rFont.CharSet; - break; - - case PROPERTY_ID_FONT_CHARWIDTH: - aValue <<= _rFont.CharacterWidth; - break; - - case PROPERTY_ID_FONT_KERNING: - aValue <<= _rFont.Kerning; - break; - - case PROPERTY_ID_FONT_ORIENTATION: - aValue <<= _rFont.Orientation; - break; - - case PROPERTY_ID_FONT_PITCH: - aValue <<= _rFont.Pitch; - break; - - case PROPERTY_ID_FONT_TYPE: - aValue <<= _rFont.Type; - break; - - case PROPERTY_ID_FONT_WIDTH: - aValue <<= _rFont.Width; - break; - - case PROPERTY_ID_FONT_HEIGHT: - aValue <<= (float)( _rFont.Height ); - break; - - case PROPERTY_ID_FONT_WEIGHT: - aValue <<= (float)_rFont.Weight; - break; - - case PROPERTY_ID_FONT_SLANT: - aValue = makeAny(_rFont.Slant); - break; - - case PROPERTY_ID_FONT_UNDERLINE: - aValue <<= (sal_Int16)_rFont.Underline; - break; - - case PROPERTY_ID_FONT_STRIKEOUT: - aValue <<= (sal_Int16)_rFont.Strikeout; - break; - - case PROPERTY_ID_FONT_WORDLINEMODE: - aValue = makeAny( (sal_Bool)_rFont.WordLineMode ); - break; - - default: - OSL_FAIL( "lcl_extractFontDescriptorAggregate: invalid handle!" ); - break; - } - return aValue; - } - } - - //===================================================================== - //= FontControlModel - //===================================================================== - //--------------------------------------------------------------------- - FontControlModel::FontControlModel( bool _bToolkitCompatibleDefaults ) - :m_nFontRelief( FontRelief::NONE ) - ,m_nFontEmphasis( FontEmphasisMark::NONE ) - ,m_bToolkitCompatibleDefaults( _bToolkitCompatibleDefaults ) - { - } - - //--------------------------------------------------------------------- - FontControlModel::FontControlModel( const FontControlModel* _pOriginal ) - { - m_aFont = _pOriginal->m_aFont; - m_nFontRelief = _pOriginal->m_nFontRelief; - m_nFontEmphasis = _pOriginal->m_nFontEmphasis; - m_aTextLineColor = _pOriginal->m_aTextLineColor; - m_aTextColor = _pOriginal->m_aTextColor; - m_bToolkitCompatibleDefaults = _pOriginal->m_bToolkitCompatibleDefaults; - } - - //--------------------------------------------------------------------- - bool FontControlModel::isFontRelatedProperty( sal_Int32 _nPropertyHandle ) const - { - return isFontAggregateProperty( _nPropertyHandle ) - || ( _nPropertyHandle == PROPERTY_ID_FONT ) - || ( _nPropertyHandle == PROPERTY_ID_FONTEMPHASISMARK ) - || ( _nPropertyHandle == PROPERTY_ID_FONTRELIEF ) - || ( _nPropertyHandle == PROPERTY_ID_TEXTLINECOLOR ) - || ( _nPropertyHandle == PROPERTY_ID_TEXTCOLOR ); - } - - //--------------------------------------------------------------------- - bool FontControlModel::isFontAggregateProperty( sal_Int32 _nPropertyHandle ) const - { - return ( _nPropertyHandle == PROPERTY_ID_FONT_CHARWIDTH ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_ORIENTATION ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_WIDTH ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_NAME ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_STYLENAME ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_FAMILY ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_CHARSET ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_HEIGHT ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_WEIGHT ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_SLANT ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_UNDERLINE ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_STRIKEOUT ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_WORDLINEMODE ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_PITCH ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_KERNING ) - || ( _nPropertyHandle == PROPERTY_ID_FONT_TYPE ); - } - - //--------------------------------------------------------------------- - sal_Int32 FontControlModel::getTextColor( ) const - { - sal_Int32 nColor = COL_TRANSPARENT; - m_aTextColor >>= nColor; - return nColor; - } - - //--------------------------------------------------------------------- - sal_Int32 FontControlModel::getTextLineColor( ) const - { - sal_Int32 nColor = COL_TRANSPARENT; - m_aTextLineColor >>= nColor; - return nColor; - } - - //------------------------------------------------------------------------------ - void FontControlModel::describeFontRelatedProperties( Sequence< Property >& /* [out] */ _rProps ) const - { - sal_Int32 nPos = _rProps.getLength(); - _rProps.realloc( nPos + 21 ); - Property* pProperties = _rProps.getArray(); - - DECL_PROP2 ( FONT, FontDescriptor, BOUND, MAYBEDEFAULT ); - DECL_PROP2 ( FONTEMPHASISMARK, sal_Int16, BOUND, MAYBEDEFAULT ); - DECL_PROP2 ( FONTRELIEF, sal_Int16, BOUND, MAYBEDEFAULT ); - DECL_PROP3 ( TEXTCOLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ); - DECL_PROP3 ( TEXTLINECOLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ); - - DECL_PROP1 ( FONT_CHARWIDTH, float, MAYBEDEFAULT ); - DECL_BOOL_PROP1 ( FONT_KERNING, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_ORIENTATION, float, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_PITCH, sal_Int16, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_TYPE, sal_Int16, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_WIDTH, sal_Int16, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_NAME, ::rtl::OUString, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_STYLENAME, ::rtl::OUString, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_FAMILY, sal_Int16, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_CHARSET, sal_Int16, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_HEIGHT, float, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_WEIGHT, float, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_SLANT, sal_Int16, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_UNDERLINE, sal_Int16, MAYBEDEFAULT ); - DECL_PROP1 ( FONT_STRIKEOUT, sal_Int16, MAYBEDEFAULT ); - DECL_BOOL_PROP1 ( FONT_WORDLINEMODE, MAYBEDEFAULT ); - } - - //--------------------------------------------------------------------- - void FontControlModel::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const - { - switch( _nHandle ) - { - case PROPERTY_ID_TEXTCOLOR: - _rValue = m_aTextColor; - break; - - case PROPERTY_ID_FONTEMPHASISMARK: - _rValue <<= m_nFontEmphasis; - break; - - case PROPERTY_ID_FONTRELIEF: - _rValue <<= m_nFontRelief; - break; - - case PROPERTY_ID_TEXTLINECOLOR: - _rValue = m_aTextLineColor; - break; - - case PROPERTY_ID_FONT: - _rValue = makeAny( m_aFont ); - break; - - default: - _rValue = lcl_extractFontDescriptorAggregate( _nHandle, m_aFont ); - break; - } - } - - //--------------------------------------------------------------------- - sal_Bool FontControlModel::convertFastPropertyValue( Any& _rConvertedValue, Any& _rOldValue, - sal_Int32 _nHandle, const Any& _rValue ) throw( IllegalArgumentException ) - { - sal_Bool bModified = sal_False; - switch( _nHandle ) - { - case PROPERTY_ID_TEXTCOLOR: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_aTextColor, ::getCppuType( static_cast< const sal_Int32* >( NULL ) ) ); - break; - - case PROPERTY_ID_TEXTLINECOLOR: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_aTextLineColor, ::getCppuType( static_cast< sal_Int32* >( NULL ) ) ); - break; - - case PROPERTY_ID_FONTEMPHASISMARK: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_nFontEmphasis ); - break; - - case PROPERTY_ID_FONTRELIEF: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_nFontRelief ); - break; - - case PROPERTY_ID_FONT: - { - Any aWorkAroundGccLimitation = makeAny( m_aFont ); - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, aWorkAroundGccLimitation, ::getCppuType( &m_aFont ) ); - } - break; - - case PROPERTY_ID_FONT_NAME: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_aFont.Name ); - break; - - case PROPERTY_ID_FONT_STYLENAME: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_aFont.StyleName ); - break; - - case PROPERTY_ID_FONT_FAMILY: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Int16)m_aFont.Family ); - break; - - case PROPERTY_ID_FONT_CHARSET: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Int16)m_aFont.CharSet ); - break; - - case PROPERTY_ID_FONT_CHARWIDTH: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, float( m_aFont.CharacterWidth ) ); - break; - - case PROPERTY_ID_FONT_KERNING: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Int16)m_aFont.Kerning ); - break; - - case PROPERTY_ID_FONT_ORIENTATION: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, float( m_aFont.Orientation ) ); - break; - - case PROPERTY_ID_FONT_PITCH: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Int16)m_aFont.Pitch ); - break; - - case PROPERTY_ID_FONT_TYPE: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Int16)m_aFont.Type ); - break; - - case PROPERTY_ID_FONT_WIDTH: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Int16)m_aFont.Width ); - break; - - case PROPERTY_ID_FONT_HEIGHT: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, float( m_aFont.Height ) ); - break; - - case PROPERTY_ID_FONT_WEIGHT: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_aFont.Weight ); - break; - - case PROPERTY_ID_FONT_SLANT: - bModified = tryPropertyValueEnum( _rConvertedValue, _rOldValue, _rValue, m_aFont.Slant ); - break; - - case PROPERTY_ID_FONT_UNDERLINE: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Int16)m_aFont.Underline ); - break; - - case PROPERTY_ID_FONT_STRIKEOUT: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Int16)m_aFont.Strikeout ); - break; - - case PROPERTY_ID_FONT_WORDLINEMODE: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Bool)m_aFont.WordLineMode ); - break; - - default: - OSL_FAIL( "FontControlModel::convertFastPropertyValue: no font aggregate!" ); - } - return bModified; - } - - //------------------------------------------------------------------------------ - void FontControlModel::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const Any& _rValue ) throw ( Exception ) - { - switch( _nHandle ) - { - case PROPERTY_ID_TEXTCOLOR: - m_aTextColor = _rValue; - break; - - case PROPERTY_ID_TEXTLINECOLOR: - m_aTextLineColor = _rValue; - break; - - case PROPERTY_ID_FONTEMPHASISMARK: - _rValue >>= m_nFontEmphasis; - break; - - case PROPERTY_ID_FONTRELIEF: - _rValue >>= m_nFontRelief; - break; - - case PROPERTY_ID_FONT: - _rValue >>= m_aFont; - break; - - case PROPERTY_ID_FONT_NAME: - _rValue >>= m_aFont.Name; - break; - - case PROPERTY_ID_FONT_STYLENAME: - _rValue >>= m_aFont.StyleName; - break; - - case PROPERTY_ID_FONT_FAMILY: - _rValue >>= m_aFont.Family; - break; - - case PROPERTY_ID_FONT_CHARSET: - _rValue >>= m_aFont.CharSet; - break; - - case PROPERTY_ID_FONT_CHARWIDTH: - _rValue >>= m_aFont.CharacterWidth; - break; - - case PROPERTY_ID_FONT_KERNING: - _rValue >>= m_aFont.Kerning; - break; - - case PROPERTY_ID_FONT_ORIENTATION: - _rValue >>= m_aFont.Orientation; - break; - - case PROPERTY_ID_FONT_PITCH: - _rValue >>= m_aFont.Pitch; - break; - - case PROPERTY_ID_FONT_TYPE: - _rValue >>= m_aFont.Type; - break; - - case PROPERTY_ID_FONT_WIDTH: - _rValue >>= m_aFont.Width; - break; - - case PROPERTY_ID_FONT_HEIGHT: - { - float nHeight = 0; - _rValue >>= nHeight; - m_aFont.Height = (sal_Int16)nHeight; - } - break; - - case PROPERTY_ID_FONT_WEIGHT: - _rValue >>= m_aFont.Weight; - break; - - case PROPERTY_ID_FONT_SLANT: - _rValue >>= m_aFont.Slant; - break; - - case PROPERTY_ID_FONT_UNDERLINE: - _rValue >>= m_aFont.Underline; - break; - - case PROPERTY_ID_FONT_STRIKEOUT: - _rValue >>= m_aFont.Strikeout; - break; - - case PROPERTY_ID_FONT_WORDLINEMODE: - { - sal_Bool bWordLineMode = sal_False; - _rValue >>= bWordLineMode; - m_aFont.WordLineMode = bWordLineMode; - } - break; - - default: - OSL_FAIL( "FontControlModel::setFastPropertyValue_NoBroadcast: invalid property!" ); - } - } - - //------------------------------------------------------------------------------ - Any FontControlModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const - { - Any aReturn; - // some defaults which are the same, not matter if we have toolkit-compatible - // defaults or not - bool bHandled = false; - switch( _nHandle ) - { - case PROPERTY_ID_TEXTCOLOR: - case PROPERTY_ID_TEXTLINECOLOR: - // void - bHandled = true; - break; - - case PROPERTY_ID_FONTEMPHASISMARK: - aReturn <<= FontEmphasisMark::NONE; - bHandled = true; - break; - - case PROPERTY_ID_FONTRELIEF: - aReturn <<= FontRelief::NONE; - bHandled = true; - break; - } - if ( bHandled ) - return aReturn; - - if ( m_bToolkitCompatibleDefaults ) - { - EmptyFontDescriptor aEmpty; - if ( PROPERTY_ID_FONT == _nHandle ) - return makeAny( (FontDescriptor)aEmpty ); - return lcl_extractFontDescriptorAggregate( _nHandle, aEmpty ); - } - - switch( _nHandle ) - { - case PROPERTY_ID_FONT: - aReturn <<= ::comphelper::getDefaultFont(); - break; - - case PROPERTY_ID_FONT_WORDLINEMODE: - aReturn = makeBoolAny(sal_False); - - case PROPERTY_ID_FONT_NAME: - case PROPERTY_ID_FONT_STYLENAME: - aReturn <<= ::rtl::OUString(); - - case PROPERTY_ID_FONT_FAMILY: - case PROPERTY_ID_FONT_CHARSET: - case PROPERTY_ID_FONT_SLANT: - case PROPERTY_ID_FONT_UNDERLINE: - case PROPERTY_ID_FONT_STRIKEOUT: - aReturn <<= (sal_Int16)1; - break; - - case PROPERTY_ID_FONT_KERNING: - aReturn = makeBoolAny(sal_False); - break; - - case PROPERTY_ID_FONT_PITCH: - case PROPERTY_ID_FONT_TYPE: - case PROPERTY_ID_FONT_WIDTH: - aReturn <<= (sal_Int16)0; - break; - - case PROPERTY_ID_FONT_HEIGHT: - case PROPERTY_ID_FONT_WEIGHT: - case PROPERTY_ID_FONT_CHARWIDTH: - case PROPERTY_ID_FONT_ORIENTATION: - aReturn <<= (float)0; - break; - - default: - OSL_FAIL( "FontControlModel::getPropertyDefaultByHandle: invalid property!" ); - } - - return aReturn; - } - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/imgprod.cxx b/forms/source/component/imgprod.cxx deleted file mode 100644 index 518a20568..000000000 --- a/forms/source/component/imgprod.cxx +++ /dev/null @@ -1,582 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "imgprod.hxx" - -#include <vcl/bmpacc.hxx> -#include <vcl/cvtgrf.hxx> -#include <vcl/svapp.hxx> -#include <unotools/ucbstreamhelper.hxx> -#include <svtools/filter.hxx> -#include <com/sun/star/io/XInputStream.hpp> - -#include "svtools/imageresourceaccess.hxx" -#include <comphelper/processfactory.hxx> - -// -------------------- -// - ImgProdLockBytes - -// -------------------- - -class ImgProdLockBytes : public SvLockBytes -{ - ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > xStmRef; - ::com::sun::star::uno::Sequence<sal_Int8> maSeq; - - ImgProdLockBytes() {}; - -public: - - ImgProdLockBytes( SvStream* pStm, sal_Bool bOwner ); - ImgProdLockBytes( ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > & rStreamRef ); - virtual ~ImgProdLockBytes(); - - virtual ErrCode ReadAt( sal_Size nPos, void* pBuffer, sal_Size nCount, sal_Size* pRead ) const; - virtual ErrCode WriteAt( sal_Size nPos, const void* pBuffer, sal_Size nCount, sal_Size* pWritten ); - virtual ErrCode Flush() const; - virtual ErrCode SetSize( sal_Size nSize ); - virtual ErrCode Stat( SvLockBytesStat*, SvLockBytesStatFlag ) const; -}; - -// ------------------------------------------------------------------------ - -ImgProdLockBytes::ImgProdLockBytes( SvStream* pStm, sal_Bool bOwner ) : - SvLockBytes( pStm, bOwner ) -{ -} - -// ------------------------------------------------------------------------ - -ImgProdLockBytes::ImgProdLockBytes( ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > & rStmRef ) : - xStmRef( rStmRef ) -{ - if( xStmRef.is() ) - { - const sal_uInt32 nBytesToRead = 65535; - sal_uInt32 nRead; - - do - { - ::com::sun::star::uno::Sequence< sal_Int8 > aReadSeq; - - nRead = xStmRef->readSomeBytes( aReadSeq, nBytesToRead ); - - if( nRead ) - { - const sal_uInt32 nOldLength = maSeq.getLength(); - maSeq.realloc( nOldLength + nRead ); - rtl_copyMemory( maSeq.getArray() + nOldLength, aReadSeq.getConstArray(), aReadSeq.getLength() ); - } - } - while( nBytesToRead == nRead ); - } -} - -// ------------------------------------------------------------------------ - -ImgProdLockBytes::~ImgProdLockBytes() -{ -} - -// ------------------------------------------------------------------------ - -ErrCode ImgProdLockBytes::ReadAt( sal_Size nPos, void* pBuffer, sal_Size nCount, sal_Size* pRead ) const -{ - if( GetStream() ) - { - ( (SvStream*) GetStream() )->ResetError(); - const ErrCode nErr = SvLockBytes::ReadAt( nPos, pBuffer, nCount, pRead ); - ( (SvStream*) GetStream() )->ResetError(); - return nErr; - } - else - { - const sal_Size nSeqLen = maSeq.getLength(); - ErrCode nErr = ERRCODE_NONE; - - if( nPos < nSeqLen ) - { - if( ( nPos + nCount ) > nSeqLen ) - nCount = nSeqLen - nPos; - - memcpy( pBuffer, maSeq.getConstArray() + nPos, nCount ); - *pRead = nCount; - } - else - *pRead = 0UL; - - return nErr; - } -} - -// ------------------------------------------------------------------------ - -ErrCode ImgProdLockBytes::WriteAt( sal_Size nPos, const void* pBuffer, sal_Size nCount, sal_Size* pWritten ) -{ - if( GetStream() ) - return SvLockBytes::WriteAt( nPos, pBuffer, nCount, pWritten ); - else - { - DBG_ASSERT( xStmRef.is(), "ImgProdLockBytes::WriteAt: xInputStream has no reference..." ); - return ERRCODE_IO_CANTWRITE; - } -} - -// ------------------------------------------------------------------------ - -ErrCode ImgProdLockBytes::Flush() const -{ - return ERRCODE_NONE; -} - -// ------------------------------------------------------------------------ - -ErrCode ImgProdLockBytes::SetSize( sal_Size nSize ) -{ - if( GetStream() ) - return SvLockBytes::SetSize( nSize ); - else - { - OSL_FAIL( "ImgProdLockBytes::SetSize not supported for xInputStream..." ); - return ERRCODE_IO_CANTWRITE; - } -} - -// ------------------------------------------------------------------------ - -ErrCode ImgProdLockBytes::Stat( SvLockBytesStat* pStat, SvLockBytesStatFlag eFlag ) const -{ - if( GetStream() ) - return SvLockBytes::Stat( pStat, eFlag ); - else - { - DBG_ASSERT( xStmRef.is(), "ImgProdLockBytes::Stat: xInputStream has no reference..." ); - pStat->nSize = maSeq.getLength(); - return ERRCODE_NONE; - } -} - -// ----------------- -// - ImageProducer - -// ----------------- - -ImageProducer::ImageProducer() : - mpStm ( NULL ), - mbConsInit ( sal_False ) -{ - mpGraphic = new Graphic; - DBG_ASSERT( Application::GetFilterHdl().IsSet(), "ImageProducer::ImageProducer(): No filter handler set" ); -} - -// ------------------------------------------------------------ - -ImageProducer::~ImageProducer() -{ - delete mpGraphic; - mpGraphic = NULL; - - delete mpStm; - mpStm = NULL; -} - -// ------------------------------------------------------------ - -// ::com::sun::star::uno::XInterface -::com::sun::star::uno::Any ImageProducer::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) -{ - ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, - SAL_STATIC_CAST( ::com::sun::star::lang::XInitialization*, this ), - SAL_STATIC_CAST( ::com::sun::star::awt::XImageProducer*, this ) ); - return (aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType )); -} - -// ------------------------------------------------------------ - -void ImageProducer::addConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& rxConsumer ) throw(::com::sun::star::uno::RuntimeException) -{ - DBG_ASSERT( rxConsumer.is(), "::AddConsumer(...): No consumer referenced!" ); - if( rxConsumer.is() ) - maConsList.push_back( new ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer > ( rxConsumer )); -} - -// ------------------------------------------------------------ - -void ImageProducer::removeConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& rxConsumer ) throw(::com::sun::star::uno::RuntimeException) -{ - ConsumerList_t::reverse_iterator riter = std::find(maConsList.rbegin(),maConsList.rend(),rxConsumer); - - if (riter != maConsList.rend()) - maConsList.erase(riter.base()-1); -} - -// ------------------------------------------------------------ - -void ImageProducer::SetImage( const ::rtl::OUString& rPath ) -{ - maURL = rPath; - mpGraphic->Clear(); - mbConsInit = sal_False; - delete mpStm; - - if ( ::svt::GraphicAccess::isSupportedURL( maURL ) ) - { - mpStm = ::svt::GraphicAccess::getImageStream( ::comphelper::getProcessServiceFactory(), maURL ); - } - else if( maURL.getLength() ) - { - SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( maURL, STREAM_STD_READ ); - mpStm = pIStm ? new SvStream( new ImgProdLockBytes( pIStm, sal_True ) ) : NULL; - } - else - mpStm = NULL; -} - -// ------------------------------------------------------------ - -void ImageProducer::SetImage( SvStream& rStm ) -{ - maURL = ::rtl::OUString(); - mpGraphic->Clear(); - mbConsInit = sal_False; - - delete mpStm; - mpStm = new SvStream( new ImgProdLockBytes( &rStm, sal_False ) ); -} - -// ------------------------------------------------------------ - -void ImageProducer::setImage( ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > & rInputStmRef ) -{ - maURL = ::rtl::OUString(); - mpGraphic->Clear(); - mbConsInit = sal_False; - delete mpStm; - - if( rInputStmRef.is() ) - mpStm = new SvStream( new ImgProdLockBytes( rInputStmRef ) ); - else - mpStm = NULL; -} - -// ------------------------------------------------------------ - -void ImageProducer::NewDataAvailable() -{ - if( ( GRAPHIC_NONE == mpGraphic->GetType() ) || mpGraphic->GetContext() ) - startProduction(); -} - -// ------------------------------------------------------------ - -void ImageProducer::startProduction() throw(::com::sun::star::uno::RuntimeException) -{ - if( !maConsList.empty() || maDoneHdl.IsSet() ) - { - bool bNotifyEmptyGraphics = false; - - // valid stream or filled graphic? => update consumers - if( mpStm || ( mpGraphic->GetType() != GRAPHIC_NONE ) ) - { - // if we already have a graphic, we don't have to import again; - // graphic is cleared if a new Stream is set - if( ( mpGraphic->GetType() == GRAPHIC_NONE ) || mpGraphic->GetContext() ) - { - if ( ImplImportGraphic( *mpGraphic ) && maDoneHdl.IsSet() ) - maDoneHdl.Call( mpGraphic ); - } - - if( mpGraphic->GetType() != GRAPHIC_NONE ) - ImplUpdateData( *mpGraphic ); - else - bNotifyEmptyGraphics = true; - } - else - bNotifyEmptyGraphics = true; - - if ( bNotifyEmptyGraphics ) - { - // reset image - // create temporary list to hold interfaces - ConsumerList_t aTmp = maConsList; - - // iterate through interfaces - for( ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter ) - { - (*iter)->init( 0, 0 ); - (*iter)->complete( ::com::sun::star::awt::ImageStatus::IMAGESTATUS_STATICIMAGEDONE, this ); - } - - if ( maDoneHdl.IsSet() ) - maDoneHdl.Call( NULL ); - } - } -} - -// ------------------------------------------------------------ - -sal_Bool ImageProducer::ImplImportGraphic( Graphic& rGraphic ) -{ - if( ERRCODE_IO_PENDING == mpStm->GetError() ) - mpStm->ResetError(); - - mpStm->Seek( 0UL ); - - sal_Bool bRet = GraphicConverter::Import( *mpStm, rGraphic ) == ERRCODE_NONE; - - if( ERRCODE_IO_PENDING == mpStm->GetError() ) - mpStm->ResetError(); - - return bRet; -} - -// ------------------------------------------------------------ - -void ImageProducer::ImplUpdateData( const Graphic& rGraphic ) -{ - ImplInitConsumer( rGraphic ); - - if( mbConsInit && !maConsList.empty() ) - { - // create temporary list to hold interfaces - ConsumerList_t aTmp = maConsList; - - ImplUpdateConsumer( rGraphic ); - mbConsInit = sal_False; - - // iterate through interfaces - for( ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter ) - (*iter)->complete( ::com::sun::star::awt::ImageStatus::IMAGESTATUS_STATICIMAGEDONE, this ); - } -} - -// ------------------------------------------------------------ - -void ImageProducer::ImplInitConsumer( const Graphic& rGraphic ) -{ - Bitmap aBmp( rGraphic.GetBitmapEx().GetBitmap() ); - BitmapReadAccess* pBmpAcc = aBmp.AcquireReadAccess(); - - if( pBmpAcc ) - { - sal_uInt16 nPalCount = 0; - sal_uInt32 nRMask = 0; - sal_uInt32 nGMask = 0; - sal_uInt32 nBMask = 0; - sal_uInt32 nAMask = 0; - ::com::sun::star::uno::Sequence< sal_Int32 > aRGBPal; - - if( pBmpAcc->HasPalette() ) - { - nPalCount = pBmpAcc->GetPaletteEntryCount(); - - if( nPalCount ) - { - aRGBPal = ::com::sun::star::uno::Sequence< sal_Int32 >( nPalCount + 1 ); - - sal_Int32* pTmp = aRGBPal.getArray(); - - for( sal_uInt32 i = 0; i < nPalCount; i++, pTmp++ ) - { - const BitmapColor& rCol = pBmpAcc->GetPaletteColor( (sal_uInt16) i ); - - *pTmp = ( (sal_Int32) rCol.GetRed() ) << (sal_Int32)(24L); - *pTmp |= ( (sal_Int32) rCol.GetGreen() ) << (sal_Int32)(16L); - *pTmp |= ( (sal_Int32) rCol.GetBlue() ) << (sal_Int32)(8L); - *pTmp |= (sal_Int32)(0x000000ffL); - } - - if( rGraphic.IsTransparent() ) - { - // append transparent entry - *pTmp = (sal_Int32)(0xffffff00L); - mnTransIndex = nPalCount; - nPalCount++; - } - else - mnTransIndex = 0; - - } - } - else - { - nRMask = 0xff000000UL; - nGMask = 0x00ff0000UL; - nBMask = 0x0000ff00UL; - nAMask = 0x000000ffUL; - } - - // create temporary list to hold interfaces - ConsumerList_t aTmp = maConsList; - - // iterate through interfaces - for( ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter) - { - (*iter)->init( pBmpAcc->Width(), pBmpAcc->Height() ); - (*iter)->setColorModel( pBmpAcc->GetBitCount(),aRGBPal, nRMask, nGMask, nBMask, nAMask ); - } - - aBmp.ReleaseAccess( pBmpAcc ); - mbConsInit = sal_True; - } -} - -// ------------------------------------------------------------ - -void ImageProducer::ImplUpdateConsumer( const Graphic& rGraphic ) -{ - BitmapEx aBmpEx( rGraphic.GetBitmapEx() ); - Bitmap aBmp( aBmpEx.GetBitmap() ); - BitmapReadAccess* pBmpAcc = aBmp.AcquireReadAccess(); - - if( pBmpAcc ) - { - Bitmap aMask( aBmpEx.GetMask() ); - BitmapReadAccess* pMskAcc = !!aMask ? aMask.AcquireReadAccess() : NULL; - const long nWidth = pBmpAcc->Width(); - const long nHeight = pBmpAcc->Height(); - const long nStartX = 0L; - const long nEndX = nWidth - 1L; - const long nStartY = 0L; - const long nEndY = nHeight - 1L; - const long nPartWidth = nEndX - nStartX + 1; - const long nPartHeight = nEndY - nStartY + 1; - - if( !pMskAcc ) - { - aMask = Bitmap( aBmp.GetSizePixel(), 1 ); - aMask.Erase( COL_BLACK ); - pMskAcc = aMask.AcquireReadAccess(); - } - - // create temporary list to hold interfaces - ConsumerList_t aTmp = maConsList; - - if( pBmpAcc->HasPalette() ) - { - const BitmapColor aWhite( pMskAcc->GetBestMatchingColor( Color( COL_WHITE ) ) ); - - if( mnTransIndex < 256 ) - { - ::com::sun::star::uno::Sequence<sal_Int8> aData( nPartWidth * nPartHeight ); - sal_Int8* pTmp = aData.getArray(); - - for( long nY = nStartY; nY <= nEndY; nY++ ) - { - for( long nX = nStartX; nX <= nEndX; nX++ ) - { - if( pMskAcc->GetPixel( nY, nX ) == aWhite ) - *pTmp++ = sal::static_int_cast< sal_Int8 >( - mnTransIndex ); - else - *pTmp++ = pBmpAcc->GetPixel( nY, nX ).GetIndex(); - } - } - - // iterate through interfaces - for (ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter) - (*iter)->setPixelsByBytes( nStartX, nStartY, nPartWidth, nPartHeight, aData, 0UL, nPartWidth ); - } - else - { - ::com::sun::star::uno::Sequence<sal_Int32> aData( nPartWidth * nPartHeight ); - sal_Int32* pTmp = aData.getArray(); - - for( long nY = nStartY; nY <= nEndY; nY++ ) - { - for( long nX = nStartX; nX <= nEndX; nX++ ) - { - if( pMskAcc->GetPixel( nY, nX ) == aWhite ) - *pTmp++ = mnTransIndex; - else - *pTmp++ = pBmpAcc->GetPixel( nY, nX ).GetIndex(); - } - } - - // iterate through interfaces - for (ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter) - (*iter)->setPixelsByLongs( nStartX, nStartY, nPartWidth, nPartHeight, aData, 0UL, nPartWidth ); - } - } - else - { - ::com::sun::star::uno::Sequence<sal_Int32> aData( nPartWidth * nPartHeight ); - const BitmapColor aWhite( pMskAcc->GetBestMatchingColor( Color( COL_WHITE ) ) ); - sal_Int32* pTmp = aData.getArray(); - - for( long nY = nStartY; nY <= nEndY; nY++ ) - { - for( long nX = nStartX; nX <= nEndX; nX++, pTmp++ ) - { - const BitmapColor aCol( pBmpAcc->GetPixel( nY, nX ) ); - - *pTmp = ( (sal_Int32) aCol.GetRed() ) << (sal_Int32)(24L); - *pTmp |= ( (sal_Int32) aCol.GetGreen() ) << (sal_Int32)(16L); - *pTmp |= ( (sal_Int32) aCol.GetBlue() ) << (sal_Int32)(8L); - - if( pMskAcc->GetPixel( nY, nX ) != aWhite ) - *pTmp |= 0x000000ffUL; - } - } - - // iterate through interfaces - for (ConsumerList_t::iterator iter = aTmp.begin(); iter != aTmp.end(); ++iter) - (*iter)->setPixelsByLongs( nStartX, nStartY, nPartWidth, nPartHeight, aData, 0UL, nPartWidth ); - } - - aBmp.ReleaseAccess( pBmpAcc ); - aMask.ReleaseAccess( pMskAcc ); - } -} - -void ImageProducer::initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException) -{ - if ( aArguments.getLength() == 1 ) - { - ::com::sun::star::uno::Any aArg = aArguments.getConstArray()[0]; - rtl::OUString aURL; - if ( aArg >>= aURL ) - { - SetImage( aURL ); - } - } -} - -namespace frm -{ -::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > -SAL_CALL ImageProducer_CreateInstance( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& ) -{ - return ::com::sun::star::uno::Reference < ::com::sun::star::uno::XInterface >( - ( ::cppu::OWeakObject* ) new ImageProducer ); -} -} // namespace frm - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/imgprod.hxx b/forms/source/component/imgprod.hxx deleted file mode 100644 index f37c24534..000000000 --- a/forms/source/component/imgprod.hxx +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _PRODUCE_HXX -#define _PRODUCE_HXX - -#include <boost/ptr_container/ptr_vector.hpp> - -#include <tools/link.hxx> -#include <tools/string.hxx> -#include <com/sun/star/awt/ImageStatus.hpp> -#include <com/sun/star/awt/XImageConsumer.hpp> -#include <com/sun/star/awt/XImageProducer.hpp> -#include <com/sun/star/lang/XInitialization.hpp> -#include <cppuhelper/weak.hxx> - - -// ----------------- -// - ImageProducer - -// ----------------- - - - -class SvStream; -class ImageConsumer; -class Graphic; -class GraphicFilter; - -namespace com { namespace sun { namespace star { namespace io { - class XInputStream; -}}}} - - -class ImageProducer : public ::com::sun::star::awt::XImageProducer, - public ::com::sun::star::lang::XInitialization, - public ::cppu::OWeakObject -{ -private: - - typedef boost::ptr_vector< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer > > ConsumerList_t; - - ::rtl::OUString maURL; - ConsumerList_t maConsList; - Graphic* mpGraphic; - SvStream* mpStm; - sal_uInt32 mnTransIndex; - sal_Bool mbConsInit; - Link maDoneHdl; - - sal_Bool ImplImportGraphic( Graphic& rGraphic ); - void ImplUpdateData( const Graphic& rGraphic ); - void ImplInitConsumer( const Graphic& rGraphic ); - void ImplUpdateConsumer( const Graphic& rGraphic ); - -public: - - ImageProducer(); - ~ImageProducer(); - - void SetImage( const ::rtl::OUString& rPath ); - void SetImage( SvStream& rStm ); - - void NewDataAvailable(); - - void SetDoneHdl( const Link& i_rHdl ) { maDoneHdl = i_rHdl; } - const Link& GetDoneHdl() const { return maDoneHdl; } - - // ::com::sun::star::uno::XInterface - ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); - void SAL_CALL acquire() throw() { OWeakObject::acquire(); } - void SAL_CALL release() throw() { OWeakObject::release(); } - - // MT: ??? - void setImage( ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > & rStmRef ); - - // ::com::sun::star::awt::XImageProducer - void SAL_CALL addConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& rxConsumer ) throw(::com::sun::star::uno::RuntimeException); - void SAL_CALL removeConsumer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer >& rxConsumer ) throw(::com::sun::star::uno::RuntimeException); - void SAL_CALL startProduction( ) throw(::com::sun::star::uno::RuntimeException); - - // ::com::sun::star::lang::XInitialization - void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); - -}; - -#endif // _PRODUCE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/navigationbar.cxx b/forms/source/component/navigationbar.cxx deleted file mode 100644 index c0c38b083..000000000 --- a/forms/source/component/navigationbar.cxx +++ /dev/null @@ -1,512 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "navigationbar.hxx" -#include "frm_module.hxx" - -#include <com/sun/star/text/WritingMode2.hpp> - -#include <comphelper/streamsection.hxx> -#include <comphelper/basicio.hxx> - -//-------------------------------------------------------------------------- -extern "C" void SAL_CALL createRegistryInfo_ONavigationBarModel() -{ - static ::frm::OMultiInstanceAutoRegistration< ::frm::ONavigationBarModel > aAutoRegistration; -} - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::form; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::io; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::container; - using namespace ::comphelper; - - namespace WritingMode2 = ::com::sun::star::text::WritingMode2; - -#define REGISTER_VOID_PROP( prop, memberAny, type ) \ - registerMayBeVoidProperty( PROPERTY_##prop, PROPERTY_ID_##prop, PropertyAttribute::BOUND | PropertyAttribute::MAYBEDEFAULT | PropertyAttribute::MAYBEVOID, \ - &memberAny, ::getCppuType( static_cast< type* >( NULL ) ) ); - - //================================================================== - // ONavigationBarModel - //================================================================== - DBG_NAME( ONavigationBarModel ) - //------------------------------------------------------------------ - ONavigationBarModel::ONavigationBarModel( const Reference< XMultiServiceFactory >& _rxFactory ) - :OControlModel( _rxFactory, ::rtl::OUString() ) - ,FontControlModel( true ) - { - DBG_CTOR( ONavigationBarModel, NULL ); - - m_nClassId = FormComponentType::NAVIGATIONBAR; - implInitPropertyContainer(); - - getPropertyDefaultByHandle( PROPERTY_ID_DEFAULTCONTROL ) >>= m_sDefaultControl; - getPropertyDefaultByHandle( PROPERTY_ID_ICONSIZE ) >>= m_nIconSize; - getPropertyDefaultByHandle( PROPERTY_ID_BORDER ) >>= m_nBorder; - getPropertyDefaultByHandle( PROPERTY_ID_DELAY ) >>= m_nDelay; - getPropertyDefaultByHandle( PROPERTY_ID_ENABLED ) >>= m_bEnabled; - getPropertyDefaultByHandle( PROPERTY_ID_ENABLEVISIBLE ) >>= m_bEnableVisible; - getPropertyDefaultByHandle( PROPERTY_ID_SHOW_POSITION ) >>= m_bShowPosition; - getPropertyDefaultByHandle( PROPERTY_ID_SHOW_NAVIGATION ) >>= m_bShowNavigation; - getPropertyDefaultByHandle( PROPERTY_ID_SHOW_RECORDACTIONS ) >>= m_bShowActions; - getPropertyDefaultByHandle( PROPERTY_ID_SHOW_FILTERSORT ) >>= m_bShowFilterSort; - getPropertyDefaultByHandle( PROPERTY_ID_WRITING_MODE ) >>= m_nWritingMode; - getPropertyDefaultByHandle( PROPERTY_ID_CONTEXT_WRITING_MODE ) >>= m_nContextWritingMode; - } - - //------------------------------------------------------------------ - ONavigationBarModel::ONavigationBarModel( const ONavigationBarModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory ) - :OControlModel( _pOriginal, _rxFactory ) - ,FontControlModel( _pOriginal ) - { - DBG_CTOR( ONavigationBarModel, NULL ); - - implInitPropertyContainer(); - - m_aTabStop = _pOriginal->m_aTabStop; - m_aBackgroundColor = _pOriginal->m_aBackgroundColor; - m_sDefaultControl = _pOriginal->m_sDefaultControl; - m_sHelpText = _pOriginal->m_sHelpText; - m_sHelpURL = _pOriginal->m_sHelpURL; - m_bEnabled = _pOriginal->m_bEnabled; - m_bEnableVisible = _pOriginal->m_bEnableVisible; - m_nIconSize = _pOriginal->m_nIconSize; - m_nBorder = _pOriginal->m_nBorder; - m_nDelay = _pOriginal->m_nDelay; - m_bShowPosition = _pOriginal->m_bShowPosition; - m_bShowNavigation = _pOriginal->m_bShowNavigation; - m_bShowActions = _pOriginal->m_bShowActions; - m_bShowFilterSort = _pOriginal->m_bShowFilterSort; - m_nWritingMode = _pOriginal->m_nWritingMode; - m_nContextWritingMode = _pOriginal->m_nContextWritingMode; - } - - //------------------------------------------------------------------ - void ONavigationBarModel::implInitPropertyContainer() - { - REGISTER_PROP_2( DEFAULTCONTROL, m_sDefaultControl, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( HELPTEXT, m_sHelpText, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( HELPURL, m_sHelpURL, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( ENABLED, m_bEnabled, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( ENABLEVISIBLE, m_bEnableVisible, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( ICONSIZE, m_nIconSize, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( BORDER, m_nBorder, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( DELAY, m_nDelay, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( SHOW_POSITION, m_bShowPosition, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( SHOW_NAVIGATION, m_bShowNavigation, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( SHOW_RECORDACTIONS, m_bShowActions, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( SHOW_FILTERSORT, m_bShowFilterSort, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( WRITING_MODE, m_nWritingMode, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_3( CONTEXT_WRITING_MODE,m_nContextWritingMode, BOUND, MAYBEDEFAULT, TRANSIENT ); - - REGISTER_VOID_PROP( TABSTOP, m_aTabStop, sal_Bool ); - REGISTER_VOID_PROP( BACKGROUNDCOLOR, m_aBackgroundColor, sal_Int32 ); - } - - //------------------------------------------------------------------ - ONavigationBarModel::~ONavigationBarModel() - { - if ( !OComponentHelper::rBHelper.bDisposed ) - { - acquire(); - dispose(); - } - - DBG_DTOR( ONavigationBarModel, NULL ); - } - - //------------------------------------------------------------------ - Any SAL_CALL ONavigationBarModel::queryAggregation( const Type& _rType ) throw ( RuntimeException ) - { - Any aReturn = ONavigationBarModel_BASE::queryInterface( _rType ); - - if ( !aReturn.hasValue() ) - aReturn = OControlModel::queryAggregation( _rType ); - - return aReturn; - } - - //------------------------------------------------------------------ - IMPLEMENT_FORWARD_XTYPEPROVIDER2( ONavigationBarModel, OControlModel, ONavigationBarModel_BASE ) - - //------------------------------------------------------------------------------ - IMPLEMENT_DEFAULT_CLONING( ONavigationBarModel ) - - //------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ONavigationBarModel::getImplementationName() throw(RuntimeException) - { - return getImplementationName_Static(); - } - - //------------------------------------------------------------------ - Sequence< ::rtl::OUString > SAL_CALL ONavigationBarModel::getSupportedServiceNames() throw(RuntimeException) - { - return getSupportedServiceNames_Static(); - } - - //------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ONavigationBarModel::getImplementationName_Static() - { - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.form.ONavigationBarModel" ) ); - } - - //------------------------------------------------------------------ - Sequence< ::rtl::OUString > SAL_CALL ONavigationBarModel::getSupportedServiceNames_Static() - { - Sequence< ::rtl::OUString > aSupported = OControlModel::getSupportedServiceNames_Static(); - aSupported.realloc( aSupported.getLength() + 2 ); - - ::rtl::OUString* pArray = aSupported.getArray(); - pArray[ aSupported.getLength() - 2 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlModel" ) ); - pArray[ aSupported.getLength() - 1 ] = FRM_SUN_COMPONENT_NAVTOOLBAR; - return aSupported; - } - - //------------------------------------------------------------------ - Reference< XInterface > SAL_CALL ONavigationBarModel::Create( const Reference< XMultiServiceFactory >& _rxFactory ) - { - return *( new ONavigationBarModel( _rxFactory ) ); - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarModel::disposing() - { - OControlModel::disposing( ); - } - - //------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ONavigationBarModel::getServiceName() throw ( RuntimeException ) - { - return FRM_SUN_COMPONENT_NAVTOOLBAR; - } - - //------------------------------------------------------------------ - #define PERSIST_TABSTOP 0x0001 - #define PERSIST_BACKGROUND 0x0002 - #define PERSIST_TEXTCOLOR 0x0004 - #define PERSIST_TEXTLINECOLOR 0x0008 - - #define PERSIST_ENABLED 0x0001 - #define PERSIST_LARGEICONS 0x0002 - // leaf a leap here - this will allow for two more icon size values to be stored compatibly - #define PERSIST_SHOW_POSITION 0x0008 - #define PERSIST_SHOW_NAVIGATION 0x0010 - #define PERSIST_SHOW_ACTIONS 0x0020 - #define PERSIST_SHOW_FILTERSORT 0x0040 - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarModel::write( const Reference< XObjectOutputStream >& _rxOutStream ) throw ( IOException, RuntimeException ) - { - // open a section for compatibility - if we later on write additional members, - // then older versions can skip them - Reference< XDataOutputStream > xDataOut( _rxOutStream, UNO_QUERY ); - OStreamSection aEnsureBlockCompat( xDataOut ); - - // base class - OControlModel::write( _rxOutStream ); - - { - OStreamSection aEnsureCompat( xDataOut ); - // determine which properties are not void and need to be written - sal_Int32 nNonVoids = 0; - if ( m_aTabStop.hasValue() ) - nNonVoids |= PERSIST_TABSTOP; - if ( m_aBackgroundColor.hasValue() ) - nNonVoids |= PERSIST_BACKGROUND; - if ( hasTextColor() ) - nNonVoids |= PERSIST_TEXTCOLOR; - if ( hasTextLineColor() ) - nNonVoids |= PERSIST_TEXTLINECOLOR; - - _rxOutStream->writeLong( nNonVoids ); - - // the maybeboid anys - if ( nNonVoids & PERSIST_TABSTOP ) - { - sal_Bool bTabStop( sal_False ); - m_aTabStop >>= bTabStop; - _rxOutStream->writeBoolean( bTabStop ); - } - if ( nNonVoids & PERSIST_BACKGROUND ) - { - sal_Int32 nBackgroundColor = 0; - m_aBackgroundColor >>= nBackgroundColor; - _rxOutStream->writeLong( nBackgroundColor ); - } - if ( nNonVoids & PERSIST_TEXTCOLOR ) - { - _rxOutStream->writeLong( getTextColor() ); - } - if ( nNonVoids & PERSIST_TEXTLINECOLOR ) - { - _rxOutStream->writeLong( getTextLineColor() ); - } - } - - { - OStreamSection aEnsureCompat( xDataOut ); - ::comphelper::operator<<( _rxOutStream, getFont() ); - } - - // our boolean flags - sal_Int32 nFlags = 0; - if ( m_bEnabled ) nFlags |= PERSIST_ENABLED; - if ( m_nIconSize ) nFlags |= PERSIST_LARGEICONS; // at the moment, this is quasi boolean - if ( m_bShowPosition ) nFlags |= PERSIST_SHOW_POSITION; - if ( m_bShowNavigation ) nFlags |= PERSIST_SHOW_NAVIGATION; - if ( m_bShowActions ) nFlags |= PERSIST_SHOW_ACTIONS; - if ( m_bShowFilterSort ) nFlags |= PERSIST_SHOW_FILTERSORT; - _rxOutStream->writeLong( nFlags ); - - // our strings - _rxOutStream->writeUTF( m_sHelpText ); - _rxOutStream->writeUTF( m_sHelpURL ); - _rxOutStream->writeUTF( m_sDefaultControl ); - - // misc - _rxOutStream->writeShort( m_nBorder ); - _rxOutStream->writeLong ( m_nDelay ); - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarModel::read( const Reference< XObjectInputStream >& _rxInStream ) throw ( IOException, RuntimeException ) - { - Reference< XDataInputStream > xDataIn( _rxInStream, UNO_QUERY ); - OStreamSection aEnsureBlockCompat( xDataIn ); - - // base class - OControlModel::read( _rxInStream ); - - { - OStreamSection aEnsureCompat( xDataIn ); - // determine which properties were non-void - sal_Int32 nNonVoids = _rxInStream->readLong( ); - - // the maybeboid anys - if ( nNonVoids & PERSIST_TABSTOP ) - m_aTabStop = makeAny( _rxInStream->readBoolean() ); - else - m_aTabStop.clear(); - - if ( nNonVoids & PERSIST_BACKGROUND ) - m_aBackgroundColor = makeAny( _rxInStream->readLong() ); - else - m_aBackgroundColor.clear(); - - if ( nNonVoids & PERSIST_TEXTCOLOR ) - setTextColor( _rxInStream->readLong() ); - else - clearTextColor(); - - if ( nNonVoids & PERSIST_TEXTLINECOLOR ) - setTextLineColor( _rxInStream->readLong() ); - else - clearTextLineColor(); - } - - { - OStreamSection aEnsureCompat( xDataIn ); - FontDescriptor aFont; - ::comphelper::operator>>( _rxInStream, aFont ); - setFont( aFont ); - } - - // our boolean flags - sal_Int32 nFlags = _rxInStream->readLong( ); - m_bEnabled = ( nFlags & PERSIST_ENABLED ) ? sal_True : sal_False; - m_nIconSize = ( nFlags & PERSIST_LARGEICONS ) ? 1 : 0; - m_bShowPosition = ( nFlags & PERSIST_SHOW_POSITION ) ? sal_True : sal_False; - m_bShowNavigation = ( nFlags & PERSIST_SHOW_NAVIGATION ) ? sal_True : sal_False; - m_bShowActions = ( nFlags & PERSIST_SHOW_ACTIONS ) ? sal_True : sal_False; - m_bShowFilterSort = ( nFlags & PERSIST_SHOW_FILTERSORT ) ? sal_True : sal_False; - - // our strings - m_sHelpText = _rxInStream->readUTF( ); - m_sHelpURL = _rxInStream->readUTF( ); - m_sDefaultControl = _rxInStream->readUTF( ); - - // misc - m_nBorder = _rxInStream->readShort(); - m_nDelay = _rxInStream->readLong(); - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarModel::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const - { - if ( isRegisteredProperty( _nHandle ) ) - { - OPropertyContainerHelper::getFastPropertyValue( _rValue, _nHandle ); - } - else if ( isFontRelatedProperty( _nHandle ) ) - { - FontControlModel::getFastPropertyValue( _rValue, _nHandle ); - } - else - { - OControlModel::getFastPropertyValue( _rValue, _nHandle ); - } - } - - //------------------------------------------------------------------ - sal_Bool SAL_CALL ONavigationBarModel::convertFastPropertyValue( Any& _rConvertedValue, Any& _rOldValue, - sal_Int32 _nHandle, const Any& _rValue ) throw( IllegalArgumentException ) - { - sal_Bool bModified = sal_False; - - if ( isRegisteredProperty( _nHandle ) ) - { - bModified = OPropertyContainerHelper::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ); - } - else if ( isFontRelatedProperty( _nHandle ) ) - { - bModified = FontControlModel::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ); - } - else - { - bModified = OControlModel::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ); - } - - return bModified; - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarModel::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const Any& _rValue ) throw ( Exception ) - { - if ( isRegisteredProperty( _nHandle ) ) - { - OPropertyContainerHelper::setFastPropertyValue( _nHandle, _rValue ); - } - else if ( isFontRelatedProperty( _nHandle ) ) - { - FontDescriptor aOldFont( getFont() ); - - FontControlModel::setFastPropertyValue_NoBroadcast( _nHandle, _rValue ); - - if ( isFontAggregateProperty( _nHandle ) ) - firePropertyChange( PROPERTY_ID_FONT, makeAny( getFont() ), makeAny( aOldFont ) ); - } - else - { - OControlModel::setFastPropertyValue_NoBroadcast( _nHandle, _rValue ); - } - } - - //------------------------------------------------------------------ - Any ONavigationBarModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const - { - Any aDefault; - - switch ( _nHandle ) - { - case PROPERTY_ID_TABSTOP: - case PROPERTY_ID_BACKGROUNDCOLOR: - /* void */ - break; - case PROPERTY_ID_WRITING_MODE: - case PROPERTY_ID_CONTEXT_WRITING_MODE: - aDefault <<= WritingMode2::CONTEXT; - break; - - case PROPERTY_ID_ENABLED: - case PROPERTY_ID_ENABLEVISIBLE: - case PROPERTY_ID_SHOW_POSITION: - case PROPERTY_ID_SHOW_NAVIGATION: - case PROPERTY_ID_SHOW_RECORDACTIONS: - case PROPERTY_ID_SHOW_FILTERSORT: - aDefault <<= (sal_Bool)sal_True; - break; - - case PROPERTY_ID_ICONSIZE: - aDefault <<= (sal_Int16)0; - break; - - case PROPERTY_ID_DEFAULTCONTROL: - aDefault <<= ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.control.NavigationToolBar" ) ); - break; - - case PROPERTY_ID_HELPTEXT: - case PROPERTY_ID_HELPURL: - aDefault <<= ::rtl::OUString(); - break; - - case PROPERTY_ID_BORDER: - aDefault <<= (sal_Int16)0; - break; - - case PROPERTY_ID_DELAY: - aDefault <<= (sal_Int32)20; - break; - - default: - if ( isFontRelatedProperty( _nHandle ) ) - aDefault = FontControlModel::getPropertyDefaultByHandle( _nHandle ); - else - aDefault = OControlModel::getPropertyDefaultByHandle( _nHandle ); - } - return aDefault; - } - - //------------------------------------------------------------------ - void ONavigationBarModel::describeFixedProperties( Sequence< Property >& _rProps ) const - { - BEGIN_DESCRIBE_PROPERTIES( 1, OControlModel ) - DECL_PROP2( TABINDEX, sal_Int16, BOUND, MAYBEDEFAULT ); - END_DESCRIBE_PROPERTIES(); - - // properties which the OPropertyContainerHelper is responsible for - Sequence< Property > aContainedProperties; - describeProperties( aContainedProperties ); - - // properties which the FontControlModel is responsible for - Sequence< Property > aFontProperties; - describeFontRelatedProperties( aFontProperties ); - - _rProps = concatSequences( - aContainedProperties, - aFontProperties, - _rProps - ); - } - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/navigationbar.hxx b/forms/source/component/navigationbar.hxx deleted file mode 100644 index 4af073777..000000000 --- a/forms/source/component/navigationbar.hxx +++ /dev/null @@ -1,140 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_COMPONENT_NAVIGATION_BAR_HXX -#define FORMS_COMPONENT_NAVIGATION_BAR_HXX - -#include "FormComponent.hxx" -#include <com/sun/star/io/XPersistObject.hpp> -#include <comphelper/proparrhlp.hxx> -#include <comphelper/propertycontainerhelper.hxx> -#include <cppuhelper/implbase1.hxx> -#include <cppuhelper/interfacecontainer.hxx> -#include <com/sun/star/container/XSet.hpp> -#include <com/sun/star/container/XContainer.hpp> -#include "formcontrolfont.hxx" - -#include <set> - -//......................................................................... -namespace frm -{ -//......................................................................... - - //================================================================== - // ONavigationBarModel - //================================================================== - typedef ::cppu::ImplHelper1 < ::com::sun::star::awt::XControlModel - > ONavigationBarModel_BASE; - - class ONavigationBarModel - :public OControlModel - ,public FontControlModel - ,public OPropertyContainerHelper - ,public ONavigationBarModel_BASE - { - // <properties> - ::com::sun::star::uno::Any m_aTabStop; - ::com::sun::star::uno::Any m_aBackgroundColor; - ::rtl::OUString m_sDefaultControl; - ::rtl::OUString m_sHelpText; - ::rtl::OUString m_sHelpURL; - sal_Int16 m_nIconSize; - sal_Int16 m_nBorder; - sal_Int32 m_nDelay; - sal_Bool m_bEnabled; - sal_Bool m_bEnableVisible; - sal_Bool m_bShowPosition; - sal_Bool m_bShowNavigation; - sal_Bool m_bShowActions; - sal_Bool m_bShowFilterSort; - sal_Int16 m_nWritingMode; - sal_Int16 m_nContextWritingMode; - // </properties> - - public: - DECLARE_DEFAULT_LEAF_XTOR( ONavigationBarModel ); - - // XServiceInfo - static version - static ::rtl::OUString SAL_CALL getImplementationName_Static(); - static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static(); - static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory ); - - protected: - // UNO - DECLARE_UNO3_AGG_DEFAULTS( ONavigationBarModel, OControlModel ); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException); - - // XServiceInfo - virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // XTypeProvider - DECLARE_XTYPEPROVIDER() - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // XPropertySet - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, - sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception); - - // XPropertyState - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const; - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - - // prevent method hiding - using OControlModel::disposing; - using OControlModel::getFastPropertyValue; - - protected: - DECLARE_XCLONEABLE(); - - private: - void implInitPropertyContainer(); - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_COMPONENT_NAVIGATION_BAR_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/propertybaghelper.cxx b/forms/source/component/propertybaghelper.cxx deleted file mode 100644 index ec82d3b1d..000000000 --- a/forms/source/component/propertybaghelper.cxx +++ /dev/null @@ -1,360 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "propertybaghelper.hxx" - -#include "property.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/beans/PropertyExistException.hpp> -#include <com/sun/star/beans/XMultiPropertySet.hpp> -#include <com/sun/star/beans/NotRemoveableException.hpp> -#include <com/sun/star/beans/UnknownPropertyException.hpp> -/** === end UNO includes === **/ - -#include <tools/diagnose_ex.h> - -#include <comphelper/sequence.hxx> -#include <rtl/logfile.hxx> -#include "rtl/instance.hxx" - - -#define NEW_HANDLE_BASE 10000 - -//........................................................................ -namespace frm -{ -//........................................................................ - - /** === begin UNO using === **/ - using ::com::sun::star::lang::DisposedException; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::beans::Property; - using ::com::sun::star::uno::Any; - using ::com::sun::star::beans::PropertyExistException; - using ::com::sun::star::beans::PropertyValue; - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::beans::XMultiPropertySet; - using ::com::sun::star::beans::XPropertySetInfo; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::beans::NotRemoveableException; - using ::com::sun::star::beans::UnknownPropertyException; - /** === end UNO using === **/ - namespace PropertyAttribute = ::com::sun::star::beans::PropertyAttribute; - - //==================================================================== - //= helper - //==================================================================== - namespace - { - //---------------------------------------------------------------- - static ::comphelper::IPropertyInfoService& lcl_getPropertyInfos() - { - static ConcreteInfoService s_aPropInfos; - return s_aPropInfos; - } - } - - //==================================================================== - //= PropertyBagHelper - //==================================================================== - //-------------------------------------------------------------------- - PropertyBagHelper::PropertyBagHelper( IPropertyBagHelperContext& _rContext ) - :m_rContext( _rContext ) - ,m_pPropertyArrayHelper( NULL ) - ,m_bDisposed( false ) - { - } - - //-------------------------------------------------------------------- - PropertyBagHelper::~PropertyBagHelper() - { - delete m_pPropertyArrayHelper, m_pPropertyArrayHelper = NULL; - } - - //-------------------------------------------------------------------- - void PropertyBagHelper::dispose() - { - m_bDisposed = true; - } - - //-------------------------------------------------------------------- - void PropertyBagHelper::impl_nts_checkDisposed_throw() const - { - if ( m_bDisposed ) - throw DisposedException(); - } - - //-------------------------------------------------------------------- - void PropertyBagHelper::impl_nts_invalidatePropertySetInfo() - { - delete m_pPropertyArrayHelper, m_pPropertyArrayHelper = NULL; - } - - //-------------------------------------------------------------------- - sal_Int32 PropertyBagHelper::impl_findFreeHandle( const ::rtl::OUString& _rPropertyName ) - { - ::comphelper::OPropertyArrayAggregationHelper& rPropInfo( impl_ts_getArrayHelper() ); - - // check the preferred handle - sal_Int32 nHandle = lcl_getPropertyInfos().getPreferedPropertyId( _rPropertyName ); - if ( ( nHandle != -1 ) && rPropInfo.fillPropertyMembersByHandle( NULL, NULL, nHandle ) ) - nHandle = -1; - - // seach a free handle in <math>F_1009</math> - if ( nHandle == -1 ) - { - sal_Int32 nPrime = 1009; - sal_Int32 nFactor = 11; - sal_Int32 nNum = nFactor; - while ( nNum != 1 ) - { - if ( !rPropInfo.fillPropertyMembersByHandle( NULL, NULL, nNum + NEW_HANDLE_BASE ) ) - { - // handle not used, yet - nHandle = nNum + NEW_HANDLE_BASE; - break; - } - nNum = ( nNum * nFactor ) % nPrime; - } - } - - // search a free handle greater NEW_HANDLE_BASE - if ( nHandle == -1 ) - { - nHandle = NEW_HANDLE_BASE + 1009; - while ( rPropInfo.fillPropertyMembersByHandle( NULL, NULL, nHandle ) ) - ++nHandle; - } - - return nHandle; - } - - //-------------------------------------------------------------------- - ::comphelper::OPropertyArrayAggregationHelper& PropertyBagHelper::impl_ts_getArrayHelper() const - { - OPropertyArrayAggregationHelper* p = m_pPropertyArrayHelper; - if ( !p ) - { - ::osl::MutexGuard aGuard( m_rContext.getMutex() ); - p = m_pPropertyArrayHelper; - if ( !p ) - { - // our own fixed and our aggregate's properties - Sequence< Property > aFixedProps; - Sequence< Property > aAggregateProps; - m_rContext.describeFixedAndAggregateProperties( aFixedProps, aAggregateProps ); - - // our dynamic properties - Sequence< Property > aDynamicProps; - m_aDynamicProperties.describeProperties( aDynamicProps ); - - Sequence< Property > aOwnProps( - ::comphelper::concatSequences( aFixedProps, aDynamicProps ) ); - - p = new OPropertyArrayAggregationHelper( aOwnProps, aAggregateProps, &lcl_getPropertyInfos(), NEW_HANDLE_BASE ); - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - const_cast< PropertyBagHelper* >( this )->m_pPropertyArrayHelper = p; - } - } // if ( !p ) - else - { - OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER(); - } - return *p; - } - - //-------------------------------------------------------------------- - void PropertyBagHelper::addProperty( const ::rtl::OUString& _rName, ::sal_Int16 _nAttributes, const Any& _rInitialValue ) - { - ::osl::MutexGuard aGuard( m_rContext.getMutex() ); - impl_nts_checkDisposed_throw(); - - //---------------------------------------------- - // check name sanity - ::comphelper::OPropertyArrayAggregationHelper& aPropInfo( impl_ts_getArrayHelper() ); - if ( aPropInfo.hasPropertyByName( _rName ) ) - throw PropertyExistException( _rName, m_rContext.getPropertiesInterface() ); - - //---------------------------------------------- - // normalize the REMOVEABLE attribute - the FormComponent service - // requires that all dynamic properties are REMOVEABLE - _nAttributes |= PropertyAttribute::REMOVEABLE; - - //---------------------------------------------- - // find a free handle - sal_Int32 nHandle = impl_findFreeHandle( _rName ); - - //---------------------------------------------- - // register the property, and invalidate our property meta data - m_aDynamicProperties.addProperty( _rName, nHandle, _nAttributes, _rInitialValue ); - impl_nts_invalidatePropertySetInfo(); - } - - //-------------------------------------------------------------------- - void PropertyBagHelper::removeProperty( const ::rtl::OUString& _rName ) - { - ::osl::MutexGuard aGuard( m_rContext.getMutex() ); - impl_nts_checkDisposed_throw(); - - // check whether it's removeable at all - Reference< XMultiPropertySet > xMe( m_rContext.getPropertiesInterface(), UNO_QUERY_THROW ); - Reference< XPropertySetInfo > xPSI( xMe->getPropertySetInfo(), UNO_QUERY_THROW ); - Property aProperty( xPSI->getPropertyByName( _rName ) ); - if ( ( aProperty.Attributes & PropertyAttribute::REMOVEABLE ) == 0 ) - throw NotRemoveableException( _rName, xMe ); - - m_aDynamicProperties.removeProperty( _rName ); - impl_nts_invalidatePropertySetInfo(); - } - - //-------------------------------------------------------------------- - namespace - { - //---------------------------------------------------------------- - struct SelectNameOfProperty : public ::std::unary_function< Property, ::rtl::OUString > - { - const ::rtl::OUString& operator()( const Property& _rProp ) const { return _rProp.Name; } - }; - - //---------------------------------------------------------------- - struct SelectNameOfPropertyValue : public ::std::unary_function< PropertyValue, ::rtl::OUString > - { - const ::rtl::OUString& operator()( const PropertyValue& _rProp ) const { return _rProp.Name; } - }; - - //---------------------------------------------------------------- - struct SelectValueOfPropertyValue : public ::std::unary_function< PropertyValue, Any > - { - const Any& operator()( const PropertyValue& _rProp ) const { return _rProp.Value; } - }; - - //---------------------------------------------------------------- - struct PropertyValueLessByName : public ::std::binary_function< PropertyValue, PropertyValue, bool > - { - bool operator()( const PropertyValue& _lhs, const PropertyValue _rhs ) const - { - return _lhs.Name < _rhs.Name; - } - }; - } - - //-------------------------------------------------------------------- - Sequence< PropertyValue > PropertyBagHelper::getPropertyValues() - { - ::osl::MutexGuard aGuard( m_rContext.getMutex() ); - impl_nts_checkDisposed_throw(); - - Reference< XMultiPropertySet > xMe( m_rContext.getPropertiesInterface(), UNO_QUERY_THROW ); - Reference< XPropertySetInfo > xPSI( xMe->getPropertySetInfo(), UNO_QUERY_THROW ); - - Sequence< Property > aProperties( xPSI->getProperties() ); - Sequence< ::rtl::OUString > aPropertyNames( aProperties.getLength() ); - ::std::transform( aProperties.getConstArray(), aProperties.getConstArray() + aProperties.getLength(), - aPropertyNames.getArray(), SelectNameOfProperty() ); - - Sequence< Any > aValues; - try - { - aValues = xMe->getPropertyValues( aPropertyNames ); - - if ( aValues.getLength() != aPropertyNames.getLength() ) - throw RuntimeException(); - } - catch( const RuntimeException& ) { throw; } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - Sequence< PropertyValue > aPropertyValues( aValues.getLength() ); - PropertyValue* pPropertyValue = aPropertyValues.getArray(); - - const ::rtl::OUString* pName = aPropertyNames.getConstArray(); - const ::rtl::OUString* pNameEnd = aPropertyNames.getConstArray() + aPropertyNames.getLength(); - const Any* pValue = aValues.getConstArray(); - for ( ; pName != pNameEnd; ++pName, ++pValue, ++pPropertyValue ) - { - pPropertyValue->Name = *pName; - pPropertyValue->Value = *pValue; - } - - return aPropertyValues; - } - - //-------------------------------------------------------------------- - void PropertyBagHelper::setPropertyValues( const Sequence< PropertyValue >& _rProps ) - { - ::osl::ClearableMutexGuard aGuard( m_rContext.getMutex() ); - impl_nts_checkDisposed_throw(); - - sal_Int32 nPropertyValues = _rProps.getLength(); - - // XMultiPropertySet::setPropertyValues expects its arguments to be sorted by name - // while XPropertyAccess::setPropertyValues doesn't. So first of all, sort. - Sequence< PropertyValue > aSortedProps( _rProps ); - ::std::sort( aSortedProps.getArray(), aSortedProps.getArray() + nPropertyValues, PropertyValueLessByName() ); - - // also, XPropertyAccess::setPropertyValues is expected to throw an UnknownPropertyException - // for unsupported properties, while XMultiPropertySet::setPropertyValues is expected to ignore - // those. So, check for unsupported properties first. - ::comphelper::OPropertyArrayAggregationHelper& rArrayHelper( impl_ts_getArrayHelper() ); - for ( const PropertyValue* pProperties = aSortedProps.getConstArray(); - pProperties != aSortedProps.getConstArray() + nPropertyValues; - ++pProperties - ) - { - if ( !rArrayHelper.hasPropertyByName( pProperties->Name ) ) - throw UnknownPropertyException( pProperties->Name, m_rContext.getPropertiesInterface() ); - } - - // Now finally split into a Name and a Value sequence, and forward to - // XMultiPropertySet::setPropertyValues - Sequence< ::rtl::OUString > aNames( nPropertyValues ); - ::std::transform( aSortedProps.getConstArray(), aSortedProps.getConstArray() + nPropertyValues, - aNames.getArray(), SelectNameOfPropertyValue() ); - - Sequence< Any > aValues( nPropertyValues ); - ::std::transform( aSortedProps.getConstArray(), aSortedProps.getConstArray() + nPropertyValues, - aValues.getArray(), SelectValueOfPropertyValue() ); - - Reference< XMultiPropertySet > xMe( m_rContext.getPropertiesInterface(), UNO_QUERY_THROW ); - - aGuard.clear(); - xMe->setPropertyValues( aNames, aValues ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/refvaluecomponent.cxx b/forms/source/component/refvaluecomponent.cxx deleted file mode 100644 index c7095bc54..000000000 --- a/forms/source/component/refvaluecomponent.cxx +++ /dev/null @@ -1,303 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "refvaluecomponent.hxx" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ - -#include <tools/diagnose_ex.h> - -#include <list> - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::form::binding; - - //==================================================================== - //= - //==================================================================== - //-------------------------------------------------------------------- - OReferenceValueComponent::OReferenceValueComponent( const Reference< XMultiServiceFactory>& _rxFactory, const ::rtl::OUString& _rUnoControlModelTypeName, const ::rtl::OUString& _rDefault, sal_Bool _bSupportNoCheckRefValue ) - :OBoundControlModel( _rxFactory, _rUnoControlModelTypeName, _rDefault, sal_False, sal_True, sal_True ) - ,m_eDefaultChecked( STATE_NOCHECK ) - ,m_bSupportSecondRefValue( _bSupportNoCheckRefValue ) - { - } - - //-------------------------------------------------------------------- - OReferenceValueComponent::OReferenceValueComponent( const OReferenceValueComponent* _pOriginal, const Reference< XMultiServiceFactory>& _rxFactory ) - :OBoundControlModel( _pOriginal, _rxFactory ) - { - m_sReferenceValue = _pOriginal->m_sReferenceValue; - m_sNoCheckReferenceValue = _pOriginal->m_sNoCheckReferenceValue; - m_eDefaultChecked = _pOriginal->m_eDefaultChecked; - m_bSupportSecondRefValue = _pOriginal->m_bSupportSecondRefValue; - - calculateExternalValueType(); - } - - //-------------------------------------------------------------------- - OReferenceValueComponent::~OReferenceValueComponent() - { - } - - //-------------------------------------------------------------------- - void OReferenceValueComponent::setReferenceValue( const ::rtl::OUString& _rRefValue ) - { - m_sReferenceValue = _rRefValue; - calculateExternalValueType(); - } - - //-------------------------------------------------------------------- - void SAL_CALL OReferenceValueComponent::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const - { - switch ( _nHandle ) - { - case PROPERTY_ID_REFVALUE: _rValue <<= m_sReferenceValue; break; - case PROPERTY_ID_DEFAULT_STATE: _rValue <<= (sal_Int16)m_eDefaultChecked; break; - - case PROPERTY_ID_UNCHECKED_REFVALUE: - OSL_ENSURE( m_bSupportSecondRefValue, "OReferenceValueComponent::getFastPropertyValue: not supported!" ); - _rValue <<= m_sNoCheckReferenceValue; - break; - - default: - OBoundControlModel::getFastPropertyValue( _rValue, _nHandle ); - } - } - - //-------------------------------------------------------------------- - void SAL_CALL OReferenceValueComponent::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const Any& _rValue ) throw (Exception) - { - switch ( _nHandle ) - { - case PROPERTY_ID_REFVALUE : - OSL_VERIFY( _rValue >>= m_sReferenceValue ); - calculateExternalValueType(); - break; - - case PROPERTY_ID_UNCHECKED_REFVALUE: - OSL_ENSURE( m_bSupportSecondRefValue, "OReferenceValueComponent::setFastPropertyValue_NoBroadcast: not supported!" ); - OSL_VERIFY( _rValue >>= m_sNoCheckReferenceValue ); - break; - - case PROPERTY_ID_DEFAULT_STATE: - { - sal_Int16 nDefaultChecked( (sal_Int16)STATE_NOCHECK ); - OSL_VERIFY( _rValue >>= nDefaultChecked ); - m_eDefaultChecked = (ToggleState)nDefaultChecked; - resetNoBroadcast(); - } - break; - - default: - OBoundControlModel::setFastPropertyValue_NoBroadcast( _nHandle, _rValue ); - } - } - - //-------------------------------------------------------------------- - sal_Bool SAL_CALL OReferenceValueComponent::convertFastPropertyValue( Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue ) throw (IllegalArgumentException) - { - sal_Bool bModified = sal_False; - switch ( _nHandle ) - { - case PROPERTY_ID_REFVALUE: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_sReferenceValue ); - break; - - case PROPERTY_ID_UNCHECKED_REFVALUE: - OSL_ENSURE( m_bSupportSecondRefValue, "OReferenceValueComponent::convertFastPropertyValue: not supported!" ); - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_sNoCheckReferenceValue ); - break; - - case PROPERTY_ID_DEFAULT_STATE: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, (sal_Int16)m_eDefaultChecked ); - break; - - default: - bModified = OBoundControlModel::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ); - break; - } - return bModified; - } - - //------------------------------------------------------------------------------ - Any OReferenceValueComponent::getDefaultForReset() const - { - return makeAny( (sal_Int16)m_eDefaultChecked ); - } - - //-------------------------------------------------------------------- - void OReferenceValueComponent::describeFixedProperties( Sequence< Property >& _rProps ) const - { - BEGIN_DESCRIBE_PROPERTIES( m_bSupportSecondRefValue ? 3 : 2, OBoundControlModel ) - DECL_PROP1( REFVALUE, ::rtl::OUString, BOUND ); - DECL_PROP1( DEFAULT_STATE, sal_Int16, BOUND ); - if ( m_bSupportSecondRefValue ) - { - DECL_PROP1( UNCHECKED_REFVALUE, ::rtl::OUString, BOUND ); - } - END_DESCRIBE_PROPERTIES(); - } - - //----------------------------------------------------------------------------- - Sequence< Type > OReferenceValueComponent::getSupportedBindingTypes() - { - ::std::list< Type > aTypes; - aTypes.push_back( ::getCppuType( static_cast< sal_Bool* >( NULL ) ) ); - - if ( m_sReferenceValue.getLength() ) - aTypes.push_front( ::getCppuType( static_cast< ::rtl::OUString* >( NULL ) ) ); - // push_front, because this is the preferred type - - Sequence< Type > aTypesRet( aTypes.size() ); - ::std::copy( aTypes.begin(), aTypes.end(), aTypesRet.getArray() ); - return aTypesRet; - } - - //----------------------------------------------------------------------------- - Any OReferenceValueComponent::translateExternalValueToControlValue( const Any& _rExternalValue ) const - { - sal_Int16 nState = STATE_DONTKNOW; - - sal_Bool bExternalState = sal_False; - ::rtl::OUString sExternalValue; - if ( _rExternalValue >>= bExternalState ) - { - nState = ::sal::static_int_cast< sal_Int16 >( bExternalState ? STATE_CHECK : STATE_NOCHECK ); - } - else if ( _rExternalValue >>= sExternalValue ) - { - if ( sExternalValue == m_sReferenceValue ) - nState = STATE_CHECK; - else - { - if ( !m_bSupportSecondRefValue || ( sExternalValue == m_sNoCheckReferenceValue ) ) - nState = STATE_NOCHECK; - else - nState = STATE_DONTKNOW; - } - } - else if ( !_rExternalValue.hasValue() ) - { - nState = STATE_DONTKNOW; - } - else - { - OSL_FAIL( "OReferenceValueComponent::translateExternalValueToControlValue: unexpected value type!" ); - } - - return makeAny( nState ); - } - - //----------------------------------------------------------------------------- - Any OReferenceValueComponent::translateControlValueToExternalValue( ) const - { - Any aExternalValue; - - try - { - Any aControlValue( m_xAggregateSet->getPropertyValue( PROPERTY_STATE ) ); - sal_Int16 nControlValue = STATE_DONTKNOW; - aControlValue >>= nControlValue; - - bool bBooleanExchange = getExternalValueType().getTypeClass() == TypeClass_BOOLEAN; - bool bStringExchange = getExternalValueType().getTypeClass() == TypeClass_STRING; - OSL_ENSURE( bBooleanExchange || bStringExchange, - "OReferenceValueComponent::translateControlValueToExternalValue: unexpected value exchange type!" ); - - switch( nControlValue ) - { - case STATE_CHECK: - if ( bBooleanExchange ) - { - aExternalValue <<= (sal_Bool)sal_True; - } - else if ( bStringExchange ) - { - aExternalValue <<= m_sReferenceValue; - } - break; - - case STATE_NOCHECK: - if ( bBooleanExchange ) - { - aExternalValue <<= (sal_Bool)sal_False; - } - else if ( bStringExchange ) - { - aExternalValue <<= (m_bSupportSecondRefValue ? m_sNoCheckReferenceValue : ::rtl::OUString()); - } - break; - } - } - catch( const Exception& ) - { - OSL_FAIL( "OReferenceValueComponent::translateControlValueToExternalValue: caught an exception!" ); - } - - return aExternalValue; - } - - //----------------------------------------------------------------------------- - Any OReferenceValueComponent::translateControlValueToValidatableValue( ) const - { - if ( !m_xAggregateSet.is() ) - return Any(); - - Any aControlValue( m_xAggregateSet->getPropertyValue( PROPERTY_STATE ) ); - sal_Int16 nControlValue = STATE_DONTKNOW; - aControlValue >>= nControlValue; - - Any aValidatableValue; - switch ( nControlValue ) - { - case STATE_CHECK: - aValidatableValue <<= (sal_Bool)sal_True; - break; - case STATE_NOCHECK: - aValidatableValue <<= (sal_Bool)sal_False; - break; - } - return aValidatableValue; - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/refvaluecomponent.hxx b/forms/source/component/refvaluecomponent.hxx deleted file mode 100644 index bb56ba8b4..000000000 --- a/forms/source/component/refvaluecomponent.hxx +++ /dev/null @@ -1,111 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_COMPONENT_REFVALUECOMPONENT_HXX -#define FORMS_SOURCE_COMPONENT_REFVALUECOMPONENT_HXX - -#include "FormComponent.hxx" -#include "togglestate.hxx" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= OReferenceValueComponent - //==================================================================== - /** a OBoundControlModel which features the exchange of a reference value - */ - class OReferenceValueComponent : public OBoundControlModel - { - private: - // <properties> - ::rtl::OUString m_sReferenceValue; // the reference value to use for data exchange - ::rtl::OUString m_sNoCheckReferenceValue; // the reference value to be exchanged when the control is not checked - ToggleState m_eDefaultChecked; // the default check state - // </properties> - - sal_Bool m_bSupportSecondRefValue; // do we support the SecondaryRefValue property? - - protected: - const ::rtl::OUString& getReferenceValue() const { return m_sReferenceValue; } - void setReferenceValue( const ::rtl::OUString& _rRefValue ); - - const ::rtl::OUString& getNoCheckReferenceValue() const { return m_sNoCheckReferenceValue; } - - ToggleState getDefaultChecked() const { return m_eDefaultChecked; } - void setDefaultChecked( ToggleState _eChecked ) { m_eDefaultChecked = _eChecked; } - - protected: - OReferenceValueComponent( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, - const ::rtl::OUString& _rUnoControlModelTypeName, - const ::rtl::OUString& _rDefault, - sal_Bool _bSupportNoCheckRefValue = sal_False - ); - DECLARE_DEFAULT_CLONE_CTOR( OReferenceValueComponent ) - DECLARE_DEFAULT_DTOR( OReferenceValueComponent ); - - // OPropertySet and friends - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const; - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw (::com::sun::star::uno::Exception); - virtual sal_Bool SAL_CALL convertFastPropertyValue( - ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw (::com::sun::star::lang::IllegalArgumentException); - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - using ::cppu::OPropertySetHelper::getFastPropertyValue; - - // OBoundControlModel overridables - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > - getSupportedBindingTypes(); - virtual ::com::sun::star::uno::Any - translateExternalValueToControlValue( const ::com::sun::star::uno::Any& _rExternalValue ) const; - virtual ::com::sun::star::uno::Any - translateControlValueToExternalValue( ) const; - - virtual ::com::sun::star::uno::Any - translateControlValueToValidatableValue( ) const; - - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_COMPONENT_REFVALUECOMPONENT_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/scrollbar.cxx b/forms/source/component/scrollbar.cxx deleted file mode 100644 index d2b5c5d06..000000000 --- a/forms/source/component/scrollbar.cxx +++ /dev/null @@ -1,322 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "scrollbar.hxx" -#include <comphelper/streamsection.hxx> -#include <comphelper/basicio.hxx> -#include <rtl/math.hxx> - -//-------------------------------------------------------------------------- -extern "C" void SAL_CALL createRegistryInfo_OScrollBarModel() -{ - static ::frm::OMultiInstanceAutoRegistration< ::frm::OScrollBarModel > aRegisterModel; -} - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::form; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::io; - using namespace ::com::sun::star::form::binding; - - //==================================================================== - //= helper - //==================================================================== - //-------------------------------------------------------------------- - Any translateExternalDoubleToControlIntValue( - const Any& _rExternalValue, const Reference< XPropertySet >& _rxProperties, - const ::rtl::OUString& _rMinValueName, const ::rtl::OUString& _rMaxValueName ) - { - OSL_ENSURE( _rxProperties.is(), "translateExternalDoubleToControlIntValue: no aggregate!?" ); - - sal_Int32 nControlValue( 0 ); - double nExternalValue = 0; - if ( _rExternalValue >>= nExternalValue ) - { - if ( ::rtl::math::isInf( nExternalValue ) ) - { - // set the minimum or maximum of the scroll values - ::rtl::OUString sLimitPropertyName = ::rtl::math::isSignBitSet( nExternalValue ) - ? _rMinValueName : _rMaxValueName; - if ( _rxProperties.is() ) - _rxProperties->getPropertyValue( sLimitPropertyName ) >>= nControlValue; - } - else - { - nControlValue = (sal_Int32)::rtl::math::round( nExternalValue ); - } - } - else - { - if ( _rxProperties.is() ) - _rxProperties->getPropertyValue( _rMinValueName ) >>= nControlValue; - } - - return makeAny( nControlValue ); - } - - //-------------------------------------------------------------------- - Any translateControlIntToExternalDoubleValue( const Any& _rControlIntValue ) - { - Any aExternalDoubleValue; - sal_Int32 nScrollValue = 0; - if ( _rControlIntValue >>= nScrollValue ) - aExternalDoubleValue <<= (double)nScrollValue; - else - { - OSL_FAIL( "translateControlIntToExternalDoubleValue: no integer scroll value!" ); - // aExternalDoubleValue is void here, which is okay for this purpose ... - } - - return aExternalDoubleValue; - } - - //==================================================================== - //= OScrollBarModel - //==================================================================== - //-------------------------------------------------------------------- - DBG_NAME( OScrollBarModel ) - //-------------------------------------------------------------------- - OScrollBarModel::OScrollBarModel( const Reference<XMultiServiceFactory>& _rxFactory ) - :OBoundControlModel( _rxFactory, VCL_CONTROLMODEL_SCROLLBAR, VCL_CONTROL_SCROLLBAR, sal_True, sal_True, sal_False ) - ,m_nDefaultScrollValue( 0 ) - { - DBG_CTOR( OScrollBarModel, NULL ); - - m_nClassId = FormComponentType::SCROLLBAR; - initValueProperty( PROPERTY_SCROLL_VALUE, PROPERTY_ID_SCROLL_VALUE ); - } - - //-------------------------------------------------------------------- - OScrollBarModel::OScrollBarModel( const OScrollBarModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory ) - :OBoundControlModel( _pOriginal, _rxFactory ) - { - DBG_CTOR( OScrollBarModel, NULL ); - m_nDefaultScrollValue = _pOriginal->m_nDefaultScrollValue; - } - - //-------------------------------------------------------------------- - OScrollBarModel::~OScrollBarModel( ) - { - DBG_DTOR( OScrollBarModel, NULL ); - } - - //-------------------------------------------------------------------- - IMPLEMENT_SERVICE_REGISTRATION_2( OScrollBarModel, OControlModel, FRM_SUN_COMPONENT_SCROLLBAR, BINDABLE_INTEGER_VALUE_RANGE ) - // note that we're passing OControlModel as "base class". This is because - // OBoundControlModel, our real base class, claims to support the DataAwareControlModel - // service, which isn't really true for us. We only derive from this class - // to benefit from the functionality for binding to spreadsheet cells - - //------------------------------------------------------------------------------ - IMPLEMENT_DEFAULT_CLONING( OScrollBarModel ) - - //------------------------------------------------------------------------------ - void SAL_CALL OScrollBarModel::disposing() - { - OBoundControlModel::disposing(); - } - - //-------------------------------------------------------------------- - void OScrollBarModel::describeFixedProperties( Sequence< Property >& _rProps ) const - { - BEGIN_DESCRIBE_PROPERTIES( 3, OControlModel ) - DECL_PROP1( DEFAULT_SCROLL_VALUE, sal_Int32, BOUND ); - DECL_PROP1( TABINDEX, sal_Int16, BOUND ); - DECL_PROP2( CONTROLSOURCEPROPERTY,::rtl::OUString, READONLY, TRANSIENT ); - END_DESCRIBE_PROPERTIES(); - } - - //------------------------------------------------------------------------------ - void OScrollBarModel::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const - { - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_SCROLL_VALUE: - _rValue <<= m_nDefaultScrollValue; - break; - - default: - OBoundControlModel::getFastPropertyValue( _rValue, _nHandle ); - } - } - - //------------------------------------------------------------------------------ - void OScrollBarModel::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const Any& _rValue ) throw ( Exception ) - { - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_SCROLL_VALUE: - OSL_VERIFY( _rValue >>= m_nDefaultScrollValue ); - resetNoBroadcast(); - break; - - default: - OBoundControlModel::setFastPropertyValue_NoBroadcast( _nHandle, _rValue ); - } - } - - //------------------------------------------------------------------------------ - sal_Bool OScrollBarModel::convertFastPropertyValue( - Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue ) - throw ( IllegalArgumentException ) - { - sal_Bool bModified( sal_False ); - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_SCROLL_VALUE: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_nDefaultScrollValue ); - break; - - default: - bModified = OBoundControlModel::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ); - break; - } - return bModified; - } - - //-------------------------------------------------------------------- - Any OScrollBarModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const - { - Any aReturn; - - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_SCROLL_VALUE: - aReturn <<= (sal_Int32)0; - break; - - default: - aReturn = OBoundControlModel::getPropertyDefaultByHandle( _nHandle ); - break; - } - - return aReturn; - } - - //------------------------------------------------------------------------------ - Any OScrollBarModel::translateDbColumnToControlValue( ) - { - OSL_FAIL( "OScrollBarModel::commitControlValueToDbColumn: never to be called (we're not bound)!" ); - return Any(); - } - - //------------------------------------------------------------------------------ - sal_Bool OScrollBarModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) - { - OSL_FAIL( "OScrollBarModel::commitControlValueToDbColumn: never to be called (we're not bound)!" ); - return sal_True; - } - - //------------------------------------------------------------------------------ - Any OScrollBarModel::getDefaultForReset() const - { - return makeAny( (sal_Int32)m_nDefaultScrollValue ); - } - - //-------------------------------------------------------------------- - ::rtl::OUString SAL_CALL OScrollBarModel::getServiceName() throw( RuntimeException ) - { - return FRM_SUN_COMPONENT_SCROLLBAR; - } - - //-------------------------------------------------------------------- - void SAL_CALL OScrollBarModel::write( const Reference< XObjectOutputStream >& _rxOutStream ) - throw( IOException, RuntimeException ) - { - OBoundControlModel::write( _rxOutStream ); - ::osl::MutexGuard aGuard( m_aMutex ); - - OStreamSection aSection( Reference< XDataOutputStream >( _rxOutStream, UNO_QUERY ) ); - - // version - _rxOutStream->writeShort( 0x0001 ); - - // properties - _rxOutStream << m_nDefaultScrollValue; - writeHelpTextCompatibly( _rxOutStream ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OScrollBarModel::read( const Reference< XObjectInputStream>& _rxInStream ) throw( IOException, RuntimeException ) - { - OBoundControlModel::read( _rxInStream ); - ::osl::MutexGuard aGuard( m_aMutex ); - - // version - { - OStreamSection aSection( Reference< XDataInputStream >( _rxInStream, UNO_QUERY ) ); - - sal_uInt16 nVersion = _rxInStream->readShort(); - if ( nVersion == 0x0001 ) - { - _rxInStream >> m_nDefaultScrollValue; - readHelpTextCompatibly( _rxInStream ); - } - else - defaultCommonProperties(); - - // here, everything in the stream section which is left will be skipped - } - } - - //-------------------------------------------------------------------- - Any OScrollBarModel::translateExternalValueToControlValue( const Any& _rExternalValue ) const - { - return translateExternalDoubleToControlIntValue( _rExternalValue, m_xAggregateSet, - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ScrollValueMin" ) ), - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ScrollValueMax" ) ) ); - } - - //-------------------------------------------------------------------- - Any OScrollBarModel::translateControlValueToExternalValue( ) const - { - // by definition, the base class simply obtains the property value - return translateControlIntToExternalDoubleValue( OBoundControlModel::translateControlValueToExternalValue() ); - } - - //-------------------------------------------------------------------- - Sequence< Type > OScrollBarModel::getSupportedBindingTypes() - { - return Sequence< Type >( &::getCppuType( static_cast< double* >( NULL ) ), 1 ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/scrollbar.hxx b/forms/source/component/scrollbar.hxx deleted file mode 100644 index a7b4e323f..000000000 --- a/forms/source/component/scrollbar.hxx +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef FORMS_SOURCE_COMPONENT_SCROLLBAR_HXX -#define FORMS_SOURCE_COMPONENT_SCROLLBAR_HXX - -#include "FormComponent.hxx" -#include "frm_module.hxx" - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= OScrollBarModel - //==================================================================== - class OScrollBarModel :public OBoundControlModel - { - private: - // <properties> - sal_Int32 m_nDefaultScrollValue; - // </properties> - - protected: - DECLARE_DEFAULT_LEAF_XTOR( OScrollBarModel ); - - // XServiceInfo - DECLARE_SERVICE_REGISTRATION( OScrollBarModel ) - - // XPersistObject - DECLARE_XPERSISTOBJECT() - - // XCloneable - DECLARE_XCLONEABLE(); - - // XPropertyState - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 _nHandle ) const; - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - - // OPropertySetHelper - virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& _rValue, sal_Int32 _nHandle ) const; - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw ( ::com::sun::star::uno::Exception ); - virtual sal_Bool SAL_CALL convertFastPropertyValue( ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw ( ::com::sun::star::lang::IllegalArgumentException ); - - // OBoundControlModel - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > - getSupportedBindingTypes(); - virtual ::com::sun::star::uno::Any - translateExternalValueToControlValue( const ::com::sun::star::uno::Any& _rExternalValue ) const; - virtual ::com::sun::star::uno::Any - translateControlValueToExternalValue( ) const; - - // XCoponent and related helpers - virtual void SAL_CALL disposing(); - - // prevent method hiding - using OBoundControlModel::disposing; - using OBoundControlModel::getFastPropertyValue; - - }; -//........................................................................ -} // namespacefrm -//........................................................................ - -#endif // FORMS_SOURCE_COMPONENT_SCROLLBAR_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/spinbutton.cxx b/forms/source/component/spinbutton.cxx deleted file mode 100644 index 7fbc3ea8b..000000000 --- a/forms/source/component/spinbutton.cxx +++ /dev/null @@ -1,278 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "spinbutton.hxx" -#include <comphelper/streamsection.hxx> -#include <comphelper/basicio.hxx> - -//-------------------------------------------------------------------------- -extern "C" void SAL_CALL createRegistryInfo_OSpinButtonModel() -{ - static ::frm::OMultiInstanceAutoRegistration< ::frm::OSpinButtonModel > aRegisterModel; -} - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::form; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::io; - using namespace ::com::sun::star::form::binding; - - //==================================================================== - //= OSpinButtonModel - //==================================================================== - // implemented elsewhere - Any translateExternalDoubleToControlIntValue( - const Any& _rExternalValue, const Reference< XPropertySet >& _rxProperties, - const ::rtl::OUString& _rMinValueName, const ::rtl::OUString& _rMaxValueName ); - Any translateControlIntToExternalDoubleValue( const Any& _rControlIntValue ); - - //==================================================================== - //= OSpinButtonModel - //==================================================================== - //-------------------------------------------------------------------- - DBG_NAME( OSpinButtonModel ) - //-------------------------------------------------------------------- - OSpinButtonModel::OSpinButtonModel( const Reference<XMultiServiceFactory>& _rxFactory ) - :OBoundControlModel( _rxFactory, VCL_CONTROLMODEL_SPINBUTTON, VCL_CONTROL_SPINBUTTON, sal_True, sal_True, sal_False ) - ,m_nDefaultSpinValue( 0 ) - { - DBG_CTOR( OSpinButtonModel, NULL ); - - m_nClassId = FormComponentType::SPINBUTTON; - initValueProperty( PROPERTY_SPIN_VALUE, PROPERTY_ID_SPIN_VALUE ); - } - - //-------------------------------------------------------------------- - OSpinButtonModel::OSpinButtonModel( const OSpinButtonModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory ) - :OBoundControlModel( _pOriginal, _rxFactory ) - { - DBG_CTOR( OSpinButtonModel, NULL ); - m_nDefaultSpinValue = _pOriginal->m_nDefaultSpinValue; - } - - //-------------------------------------------------------------------- - OSpinButtonModel::~OSpinButtonModel( ) - { - DBG_DTOR( OSpinButtonModel, NULL ); - } - - //-------------------------------------------------------------------- - IMPLEMENT_SERVICE_REGISTRATION_2( OSpinButtonModel, OControlModel, FRM_SUN_COMPONENT_SPINBUTTON, BINDABLE_INTEGER_VALUE_RANGE ) - // note that we're passing OControlModel as "base class". This is because - // OBoundControlModel, our real base class, claims to support the DataAwareControlModel - // service, which isn't really true for us. We only derive from this class - // to benefit from the functionality for binding to spreadsheet cells - - //------------------------------------------------------------------------------ - IMPLEMENT_DEFAULT_CLONING( OSpinButtonModel ) - - //------------------------------------------------------------------------------ - void SAL_CALL OSpinButtonModel::disposing() - { - OBoundControlModel::disposing(); - } - - //-------------------------------------------------------------------- - void OSpinButtonModel::describeFixedProperties( Sequence< Property >& _rProps ) const - { - BEGIN_DESCRIBE_PROPERTIES( 3, OControlModel ) - DECL_PROP1( DEFAULT_SPIN_VALUE, sal_Int32, BOUND ); - DECL_PROP1( TABINDEX, sal_Int16, BOUND ); - DECL_PROP2( CONTROLSOURCEPROPERTY,::rtl::OUString, READONLY, TRANSIENT ); - END_DESCRIBE_PROPERTIES(); - } - - //------------------------------------------------------------------------------ - void OSpinButtonModel::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const - { - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_SPIN_VALUE: - _rValue <<= m_nDefaultSpinValue; - break; - - default: - OBoundControlModel::getFastPropertyValue( _rValue, _nHandle ); - } - } - - //------------------------------------------------------------------------------ - void OSpinButtonModel::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const Any& _rValue ) throw ( Exception ) - { - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_SPIN_VALUE: - OSL_VERIFY( _rValue >>= m_nDefaultSpinValue ); - resetNoBroadcast(); - break; - - default: - OBoundControlModel::setFastPropertyValue_NoBroadcast( _nHandle, _rValue ); - } - } - - //------------------------------------------------------------------------------ - sal_Bool OSpinButtonModel::convertFastPropertyValue( - Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue ) - throw ( IllegalArgumentException ) - { - sal_Bool bModified( sal_False ); - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_SPIN_VALUE: - bModified = tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, m_nDefaultSpinValue ); - break; - - default: - bModified = OBoundControlModel::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ); - break; - } - return bModified; - } - - //-------------------------------------------------------------------- - Any OSpinButtonModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const - { - Any aReturn; - - switch ( _nHandle ) - { - case PROPERTY_ID_DEFAULT_SPIN_VALUE: - aReturn <<= (sal_Int32)0; - break; - - default: - aReturn = OBoundControlModel::getPropertyDefaultByHandle( _nHandle ); - break; - } - - return aReturn; - } - - //------------------------------------------------------------------------------ - Any OSpinButtonModel::translateDbColumnToControlValue( ) - { - OSL_FAIL( "OSpinButtonModel::commitControlValueToDbColumn: never to be called (we're not bound)!" ); - return Any(); - } - - //------------------------------------------------------------------------------ - sal_Bool OSpinButtonModel::commitControlValueToDbColumn( bool /*_bPostReset*/ ) - { - OSL_FAIL( "OSpinButtonModel::commitControlValueToDbColumn: never to be called (we're not bound)!" ); - return sal_True; - } - - //------------------------------------------------------------------------------ - Any OSpinButtonModel::getDefaultForReset() const - { - return makeAny( (sal_Int32)m_nDefaultSpinValue ); - } - - //-------------------------------------------------------------------- - ::rtl::OUString SAL_CALL OSpinButtonModel::getServiceName() throw( RuntimeException ) - { - return FRM_SUN_COMPONENT_SPINBUTTON; - } - - //-------------------------------------------------------------------- - void SAL_CALL OSpinButtonModel::write( const Reference< XObjectOutputStream >& _rxOutStream ) - throw( IOException, RuntimeException ) - { - OBoundControlModel::write( _rxOutStream ); - ::osl::MutexGuard aGuard( m_aMutex ); - - OStreamSection aSection( Reference< XDataOutputStream >( _rxOutStream, UNO_QUERY ) ); - - // version - _rxOutStream->writeShort( 0x0001 ); - - // properties - _rxOutStream << m_nDefaultSpinValue; - writeHelpTextCompatibly( _rxOutStream ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OSpinButtonModel::read( const Reference< XObjectInputStream>& _rxInStream ) throw( IOException, RuntimeException ) - { - OBoundControlModel::read( _rxInStream ); - ::osl::MutexGuard aGuard( m_aMutex ); - - // version - { - OStreamSection aSection( Reference< XDataInputStream >( _rxInStream, UNO_QUERY ) ); - - sal_uInt16 nVersion = _rxInStream->readShort(); - if ( nVersion == 0x0001 ) - { - _rxInStream >> m_nDefaultSpinValue; - readHelpTextCompatibly( _rxInStream ); - } - else - defaultCommonProperties(); - - // here, everything in the stream section which is left will be skipped - } - } - - //-------------------------------------------------------------------- - Any OSpinButtonModel::translateExternalValueToControlValue( const Any& _rExternalValue ) const - { - return translateExternalDoubleToControlIntValue( _rExternalValue, m_xAggregateSet, - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SpinValueMin" ) ), - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SpinValueMax" ) ) ); - } - - //-------------------------------------------------------------------- - Any OSpinButtonModel::translateControlValueToExternalValue( ) const - { - // by definition, the base class simply obtains the property value - return translateControlIntToExternalDoubleValue( OBoundControlModel::translateControlValueToExternalValue() ); - } - - //-------------------------------------------------------------------- - Sequence< Type > OSpinButtonModel::getSupportedBindingTypes() - { - return Sequence< Type >( &::getCppuType( static_cast< double* >( NULL ) ), 1 ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/component/spinbutton.hxx b/forms/source/component/spinbutton.hxx deleted file mode 100644 index 54348e580..000000000 --- a/forms/source/component/spinbutton.hxx +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef FORMS_SOURCE_COMPONENT_SPINBUTTON_HXX -#define FORMS_SOURCE_COMPONENT_SPINBUTTON_HXX - -#include "FormComponent.hxx" -#include "frm_module.hxx" - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= OSpinButtonModel - //==================================================================== - class OSpinButtonModel :public OBoundControlModel - { - private: - // <properties> - sal_Int32 m_nDefaultSpinValue; - // </properties> - - protected: - DECLARE_DEFAULT_LEAF_XTOR( OSpinButtonModel ); - - // XServiceInfo - DECLARE_SERVICE_REGISTRATION( OSpinButtonModel ) - - // XPersistObject - DECLARE_XPERSISTOBJECT() - - // XCloneable - DECLARE_XCLONEABLE(); - - // XPropertyState - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 _nHandle ) const; - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - - // OPropertySetHelper - virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& _rValue, sal_Int32 _nHandle ) const; - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw ( ::com::sun::star::uno::Exception ); - virtual sal_Bool SAL_CALL convertFastPropertyValue( ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw ( ::com::sun::star::lang::IllegalArgumentException ); - - // OBoundControlModel - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ); - virtual sal_Bool commitControlValueToDbColumn( bool _bPostReset ); - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > - getSupportedBindingTypes(); - virtual ::com::sun::star::uno::Any - translateExternalValueToControlValue( const ::com::sun::star::uno::Any& _rExternalValue ) const; - virtual ::com::sun::star::uno::Any - translateControlValueToExternalValue( ) const; - - // XCoponent and related helpers - virtual void SAL_CALL disposing(); - - // prevent method hiding - using OBoundControlModel::disposing; - using OBoundControlModel::getFastPropertyValue; - - }; -//........................................................................ -} // namespacefrm -//........................................................................ - -#endif // FORMS_SOURCE_COMPONENT_SPINBUTTON_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/helper/commanddescriptionprovider.cxx b/forms/source/helper/commanddescriptionprovider.cxx deleted file mode 100644 index e61810f60..000000000 --- a/forms/source/helper/commanddescriptionprovider.cxx +++ /dev/null @@ -1,143 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * -************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "commanddescriptionprovider.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/container/XNameAccess.hpp> -#include <com/sun/star/frame/XModuleManager.hpp> -#include <com/sun/star/beans/PropertyValue.hpp> -/** === end UNO includes === **/ - -#include <comphelper/namedvaluecollection.hxx> -#include <tools/diagnose_ex.h> - -//........................................................................ -namespace frm -{ -//........................................................................ - - /** === begin UNO using === **/ - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::XInterface; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::uno::UNO_SET_THROW; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::uno::Type; - using ::com::sun::star::frame::XModel; - using ::com::sun::star::container::XNameAccess; - using ::com::sun::star::frame::XModuleManager; - using ::com::sun::star::beans::PropertyValue; - /** === end UNO using === **/ - - //==================================================================== - //= DefaultCommandDescriptionProvider - //==================================================================== - class DefaultCommandDescriptionProvider : public ICommandDescriptionProvider - { - public: - DefaultCommandDescriptionProvider( const ::comphelper::ComponentContext& _rContext, const Reference< XModel >& _rxDocument ) - { - impl_init_nothrow( _rContext, _rxDocument ); - } - - ~DefaultCommandDescriptionProvider() - { - } - - // ICommandDescriptionProvider - virtual ::rtl::OUString getCommandDescription( const ::rtl::OUString& _rCommandURL ) const; - - private: - void impl_init_nothrow( const ::comphelper::ComponentContext& _rContext, const Reference< XModel >& _rxDocument ); - - private: - Reference< XNameAccess > m_xCommandAccess; - }; - - - //-------------------------------------------------------------------- - void DefaultCommandDescriptionProvider::impl_init_nothrow( const ::comphelper::ComponentContext& _rContext, const Reference< XModel >& _rxDocument ) - { - OSL_ENSURE( _rxDocument.is(), "DefaultCommandDescriptionProvider::impl_init_nothrow: no document => no command descriptions!" ); - if ( !_rxDocument.is() ) - return; - - try - { - Reference< XModuleManager > xModuleManager( _rContext.createComponent( "com.sun.star.frame.ModuleManager" ), UNO_QUERY_THROW ); - ::rtl::OUString sModuleID = xModuleManager->identify( _rxDocument ); - - Reference< XNameAccess > xUICommandDescriptions( _rContext.createComponent( "com.sun.star.frame.UICommandDescription" ), UNO_QUERY_THROW ); - m_xCommandAccess.set( xUICommandDescriptions->getByName( sModuleID ), UNO_QUERY_THROW ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - //-------------------------------------------------------------------- - ::rtl::OUString DefaultCommandDescriptionProvider::getCommandDescription( const ::rtl::OUString& _rCommandURL ) const - { - if ( !m_xCommandAccess.is() ) - return ::rtl::OUString(); - - try - { - ::comphelper::NamedValueCollection aCommandProperties( m_xCommandAccess->getByName( _rCommandURL ) ); - return aCommandProperties.getOrDefault( "Name", ::rtl::OUString() ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - - return ::rtl::OUString(); - } - - //-------------------------------------------------------------------- - PCommandDescriptionProvider createDocumentCommandDescriptionProvider( - const ::comphelper::ComponentContext& _rContext, const Reference< XModel >& _rxDocument ) - { - PCommandDescriptionProvider pDescriptionProvider( new DefaultCommandDescriptionProvider( _rContext, _rxDocument ) ); - return pDescriptionProvider; - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/helper/commandimageprovider.cxx b/forms/source/helper/commandimageprovider.cxx deleted file mode 100644 index 6b3599678..000000000 --- a/forms/source/helper/commandimageprovider.cxx +++ /dev/null @@ -1,183 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * -************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "commandimageprovider.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/ui/XImageManager.hpp> -#include <com/sun/star/ui/XUIConfigurationManagerSupplier.hpp> -#include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp> -#include <com/sun/star/frame/XModuleManager.hpp> -#include <com/sun/star/ui/ImageType.hpp> -/** === end UNO includes === **/ - -#include <tools/diagnose_ex.h> - -//........................................................................ -namespace frm -{ -//........................................................................ - - /** === begin UNO using === **/ - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::XInterface; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::uno::UNO_SET_THROW; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::uno::Type; - using ::com::sun::star::frame::XModel; - using ::com::sun::star::ui::XImageManager; - using ::com::sun::star::ui::XUIConfigurationManagerSupplier; - using ::com::sun::star::ui::XUIConfigurationManager; - using ::com::sun::star::ui::XModuleUIConfigurationManagerSupplier; - using ::com::sun::star::frame::XModuleManager; - using ::com::sun::star::graphic::XGraphic; - /** === end UNO using === **/ - namespace ImageType = ::com::sun::star::ui::ImageType; - - //==================================================================== - //= DocumentCommandImageProvider - //==================================================================== - class DocumentCommandImageProvider : public ICommandImageProvider - { - public: - DocumentCommandImageProvider( const ::comphelper::ComponentContext& _rContext, const Reference< XModel >& _rxDocument ) - { - impl_init_nothrow( _rContext, _rxDocument ); - } - virtual ~DocumentCommandImageProvider() - { - } - - // ICommandImageProvider - virtual CommandImages getCommandImages( const CommandURLs& _rCommandURLs, const bool _bLarge ) const; - - private: - void impl_init_nothrow( const ::comphelper::ComponentContext& _rContext, const Reference< XModel >& _rxDocument ); - - private: - Reference< XImageManager > m_xDocumentImageManager; - Reference< XImageManager > m_xModuleImageManager; - }; - - //-------------------------------------------------------------------- - void DocumentCommandImageProvider::impl_init_nothrow( const ::comphelper::ComponentContext& _rContext, const Reference< XModel >& _rxDocument ) - { - OSL_ENSURE( _rxDocument.is(), "DocumentCommandImageProvider::impl_init_nothrow: no document => no images!" ); - if ( !_rxDocument.is() ) - return; - - // obtain the image manager of the document - try - { - Reference< XUIConfigurationManagerSupplier > xSuppUIConfig( _rxDocument, UNO_QUERY_THROW ); - Reference< XUIConfigurationManager > xUIConfig( xSuppUIConfig->getUIConfigurationManager(), UNO_QUERY ); - m_xDocumentImageManager.set( xUIConfig->getImageManager(), UNO_QUERY_THROW ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - - // obtain the image manager or the module - try - { - Reference< XModuleManager > xModuleManager( _rContext.createComponent( "com.sun.star.frame.ModuleManager" ), UNO_QUERY_THROW ); - ::rtl::OUString sModuleID = xModuleManager->identify( _rxDocument ); - - Reference< XModuleUIConfigurationManagerSupplier > xSuppUIConfig( - _rContext.createComponent( "com.sun.star.ui.ModuleUIConfigurationManagerSupplier" ), UNO_QUERY_THROW ); - Reference< XUIConfigurationManager > xUIConfig( - xSuppUIConfig->getUIConfigurationManager( sModuleID ), UNO_SET_THROW ); - m_xModuleImageManager.set( xUIConfig->getImageManager(), UNO_QUERY_THROW ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - //-------------------------------------------------------------------- - CommandImages DocumentCommandImageProvider::getCommandImages( const CommandURLs& _rCommandURLs, const bool _bLarge ) const - { - const size_t nCommandCount = _rCommandURLs.getLength(); - CommandImages aImages( nCommandCount ); - try - { - const sal_Int16 nImageType = ImageType::COLOR_NORMAL - + ( _bLarge ? ImageType::SIZE_LARGE : ImageType::SIZE_DEFAULT ); - - Sequence< Reference< XGraphic > > aDocImages( nCommandCount ); - Sequence< Reference< XGraphic > > aModImages( nCommandCount ); - - // first try the document image manager - if ( m_xDocumentImageManager.is() ) - aDocImages = m_xDocumentImageManager->getImages( nImageType, _rCommandURLs ); - - // then the module's image manager - if ( m_xModuleImageManager.is() ) - aModImages = m_xModuleImageManager->getImages( nImageType, _rCommandURLs ); - - ENSURE_OR_THROW( (size_t)aDocImages.getLength() == nCommandCount, "illegal array size returned by getImages (document image manager)" ); - ENSURE_OR_THROW( (size_t)aModImages.getLength() == nCommandCount, "illegal array size returned by getImages (module image manager)" ); - - for ( size_t i=0; i<nCommandCount; ++i ) - { - if ( aDocImages[i].is() ) - aImages[i] = Image( aDocImages[i] ); - else - aImages[i] = Image( aModImages[i] ); - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return aImages; - } - - //-------------------------------------------------------------------- - PCommandImageProvider createDocumentCommandImageProvider( - const ::comphelper::ComponentContext& _rContext, const Reference< XModel >& _rxDocument ) - { - PCommandImageProvider pImageProvider( new DocumentCommandImageProvider( _rContext, _rxDocument ) ); - return pImageProvider; - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/helper/controlfeatureinterception.cxx b/forms/source/helper/controlfeatureinterception.cxx deleted file mode 100644 index bc9ab0c0c..000000000 --- a/forms/source/helper/controlfeatureinterception.cxx +++ /dev/null @@ -1,172 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "controlfeatureinterception.hxx" -#include "urltransformer.hxx" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ -#include <tools/debug.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::frame; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::lang; - - //==================================================================== - //= ControlFeatureInterception - //==================================================================== - //-------------------------------------------------------------------- - ControlFeatureInterception::ControlFeatureInterception( const Reference< XMultiServiceFactory >& _rxORB ) - :m_pUrlTransformer( new UrlTransformer( _rxORB ) ) - { - } - - //-------------------------------------------------------------------- - void SAL_CALL ControlFeatureInterception::registerDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException ) - { - if ( !_rxInterceptor.is() ) - { - OSL_FAIL( "ControlFeatureInterception::registerDispatchProviderInterceptor: invalid interceptor!" ); - return; - } - - if ( m_xFirstDispatchInterceptor.is() ) - { - // there is already an interceptor; the new one will become its master - Reference< XDispatchProvider > xFirstProvider( m_xFirstDispatchInterceptor, UNO_QUERY ); - _rxInterceptor->setSlaveDispatchProvider( xFirstProvider ); - m_xFirstDispatchInterceptor->setMasterDispatchProvider( xFirstProvider ); - } - - // we are the master of the chain's first interceptor - m_xFirstDispatchInterceptor = _rxInterceptor; - m_xFirstDispatchInterceptor->setMasterDispatchProvider( NULL ); - // it's the first of the interceptor chain - } - - //-------------------------------------------------------------------- - void SAL_CALL ControlFeatureInterception::releaseDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException ) - { - if ( !_rxInterceptor.is() ) - { - OSL_FAIL( "ControlFeatureInterception::releaseDispatchProviderInterceptor: invalid interceptor!" ); - return; - } - - Reference< XDispatchProviderInterceptor > xChainWalk( m_xFirstDispatchInterceptor ); - - if ( m_xFirstDispatchInterceptor == _rxInterceptor ) - { // our chain will have a new first element - Reference< XDispatchProviderInterceptor > xSlave( m_xFirstDispatchInterceptor->getSlaveDispatchProvider(), UNO_QUERY ); - m_xFirstDispatchInterceptor = xSlave; - } - // do this before removing the interceptor from the chain as we won't know it's slave afterwards) - - while ( xChainWalk.is() ) - { - // walk along the chain of interceptors and look for the interceptor that has to be removed - Reference< XDispatchProviderInterceptor > xSlave( xChainWalk->getSlaveDispatchProvider(), UNO_QUERY ); - - if ( xChainWalk == _rxInterceptor ) - { - // old master may be an interceptor too - Reference< XDispatchProviderInterceptor > xMaster( xChainWalk->getMasterDispatchProvider(), UNO_QUERY ); - - // unchain the interceptor that has to be removed - xChainWalk->setSlaveDispatchProvider( NULL ); - xChainWalk->setMasterDispatchProvider( NULL ); - - // reconnect the chain - if ( xMaster.is() ) - { - xMaster->setSlaveDispatchProvider( Reference< XDispatchProvider >::query( xSlave ) ); - } - - // if somebody has registered the same interceptor twice, then we will remove - // it once per call ... - break; - } - - xChainWalk = xSlave; - } - } - - //-------------------------------------------------------------------- - void ControlFeatureInterception::dispose() - { - // release all interceptors - Reference< XDispatchProviderInterceptor > xInterceptor( m_xFirstDispatchInterceptor ); - m_xFirstDispatchInterceptor.clear(); - while ( xInterceptor.is() ) - { - // tell the interceptor it has a new (means no) predecessor - xInterceptor->setMasterDispatchProvider( NULL ); - - // ask for it's successor - Reference< XDispatchProvider > xSlave = xInterceptor->getSlaveDispatchProvider(); - // and give it the new (means no) successoert - xInterceptor->setSlaveDispatchProvider( NULL ); - - // start over with the next chain element - xInterceptor = xInterceptor.query( xSlave ); - } - } - //-------------------------------------------------------------------- - Reference< XDispatch > ControlFeatureInterception::queryDispatch( const URL& _rURL, const ::rtl::OUString& _rTargetFrameName, ::sal_Int32 _nSearchFlags ) SAL_THROW((RuntimeException)) - { - Reference< XDispatch > xDispatcher; - if ( m_xFirstDispatchInterceptor.is() ) - xDispatcher = m_xFirstDispatchInterceptor->queryDispatch( _rURL, _rTargetFrameName, _nSearchFlags ); - return xDispatcher; - } - - //-------------------------------------------------------------------- - Reference< XDispatch > ControlFeatureInterception::queryDispatch( const URL& _rURL ) SAL_THROW((RuntimeException)) - { - return queryDispatch( _rURL, ::rtl::OUString(), 0 ); - } - - //-------------------------------------------------------------------- - Reference< XDispatch > ControlFeatureInterception::queryDispatch( const sal_Char* _pAsciiURL ) SAL_THROW((RuntimeException)) - { - return queryDispatch( m_pUrlTransformer->getStrictURLFromAscii( _pAsciiURL ) ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/helper/formnavigation.cxx b/forms/source/helper/formnavigation.cxx deleted file mode 100644 index b6e81c2a7..000000000 --- a/forms/source/helper/formnavigation.cxx +++ /dev/null @@ -1,487 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "formnavigation.hxx" -#include "urltransformer.hxx" -#include "controlfeatureinterception.hxx" -#include "frm_strings.hxx" - -#include <com/sun/star/form/runtime/FormFeature.hpp> - -#include <tools/debug.hxx> - - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::frame; - namespace FormFeature = ::com::sun::star::form::runtime::FormFeature; - - //================================================================== - //= OFormNavigationHelper - //================================================================== - DBG_NAME( OFormNavigationHelper ) - //------------------------------------------------------------------ - OFormNavigationHelper::OFormNavigationHelper( const Reference< XMultiServiceFactory >& _rxORB ) - :m_xORB( _rxORB ) - ,m_nConnectedFeatures( 0 ) - { - DBG_CTOR( OFormNavigationHelper, NULL ); - m_pFeatureInterception.reset( new ControlFeatureInterception( m_xORB ) ); - } - - //------------------------------------------------------------------ - OFormNavigationHelper::~OFormNavigationHelper() - { - DBG_DTOR( OFormNavigationHelper, NULL ); - } - - //------------------------------------------------------------------ - void SAL_CALL OFormNavigationHelper::dispose( ) throw( RuntimeException ) - { - m_pFeatureInterception->dispose(); - disconnectDispatchers(); - } - - //------------------------------------------------------------------ - void OFormNavigationHelper::interceptorsChanged( ) - { - updateDispatches(); - } - - //------------------------------------------------------------------ - void OFormNavigationHelper::featureStateChanged( sal_Int16 /*_nFeatureId*/, sal_Bool /*_bEnabled*/ ) - { - // not interested in - } - - //------------------------------------------------------------------ - void OFormNavigationHelper::allFeatureStatesChanged( ) - { - // not interested in - } - - //------------------------------------------------------------------ - void SAL_CALL OFormNavigationHelper::registerDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException) - { - m_pFeatureInterception->registerDispatchProviderInterceptor( _rxInterceptor ); - interceptorsChanged(); - } - - //------------------------------------------------------------------ - void SAL_CALL OFormNavigationHelper::releaseDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException) - { - m_pFeatureInterception->releaseDispatchProviderInterceptor( _rxInterceptor ); - interceptorsChanged(); - } - - //------------------------------------------------------------------ - void SAL_CALL OFormNavigationHelper::statusChanged( const FeatureStateEvent& _rState ) throw (RuntimeException) - { - for ( FeatureMap::iterator aFeature = m_aSupportedFeatures.begin(); - aFeature != m_aSupportedFeatures.end(); - ++aFeature - ) - { - if ( aFeature->second.aURL.Main == _rState.FeatureURL.Main ) - { - if ( ( aFeature->second.bCachedState != _rState.IsEnabled ) - || ( aFeature->second.aCachedAdditionalState != _rState.State ) - ) - { - // change the cached state - aFeature->second.bCachedState = _rState.IsEnabled; - aFeature->second.aCachedAdditionalState = _rState.State; - // tell derivees what happened - featureStateChanged( aFeature->first, _rState.IsEnabled ); - } - return; - } - } - - // unreachable - OSL_FAIL( "OFormNavigationHelper::statusChanged: huh? An invalid/unknown URL?" ); - } - - //------------------------------------------------------------------ - void SAL_CALL OFormNavigationHelper::disposing( const EventObject& _rSource ) throw (RuntimeException) - { - // was it one of our external dispatchers? - if ( m_nConnectedFeatures ) - { - for ( FeatureMap::iterator aFeature = m_aSupportedFeatures.begin(); - aFeature != m_aSupportedFeatures.end(); - ++aFeature - ) - { - if ( aFeature->second.xDispatcher == _rSource.Source ) - { - aFeature->second.xDispatcher->removeStatusListener( static_cast< XStatusListener* >( this ), aFeature->second.aURL ); - aFeature->second.xDispatcher = NULL; - aFeature->second.bCachedState = sal_False; - aFeature->second.aCachedAdditionalState.clear(); - --m_nConnectedFeatures; - - featureStateChanged( aFeature->first, sal_False ); - break; - } - } - } - } - - //------------------------------------------------------------------ - void OFormNavigationHelper::updateDispatches() - { - if ( !m_nConnectedFeatures ) - { // we don't have any dispatchers yet -> do the initial connect - connectDispatchers(); - return; - } - - initializeSupportedFeatures(); - - m_nConnectedFeatures = 0; - - Reference< XDispatch > xNewDispatcher; - Reference< XDispatch > xCurrentDispatcher; - - for ( FeatureMap::iterator aFeature = m_aSupportedFeatures.begin(); - aFeature != m_aSupportedFeatures.end(); - ++aFeature - ) - { - xNewDispatcher = queryDispatch( aFeature->second.aURL ); - xCurrentDispatcher = aFeature->second.xDispatcher; - if ( xNewDispatcher != xCurrentDispatcher ) - { - // the dispatcher for this particular URL changed - if ( xCurrentDispatcher.is() ) - xCurrentDispatcher->removeStatusListener( static_cast< XStatusListener* >( this ), aFeature->second.aURL ); - - xCurrentDispatcher = aFeature->second.xDispatcher = xNewDispatcher; - - if ( xCurrentDispatcher.is() ) - xCurrentDispatcher->addStatusListener( static_cast< XStatusListener* >( this ), aFeature->second.aURL ); - } - - if ( xCurrentDispatcher.is() ) - ++m_nConnectedFeatures; - else - aFeature->second.bCachedState = sal_False; - } - - // notify derivee that (potentially) all features changed their state - allFeatureStatesChanged( ); - } - - //------------------------------------------------------------------ - void OFormNavigationHelper::connectDispatchers() - { - if ( m_nConnectedFeatures ) - { // already connected -> just do an update - updateDispatches(); - return; - } - - initializeSupportedFeatures(); - - m_nConnectedFeatures = 0; - - for ( FeatureMap::iterator aFeature = m_aSupportedFeatures.begin(); - aFeature != m_aSupportedFeatures.end(); - ++aFeature - ) - { - aFeature->second.bCachedState = sal_False; - aFeature->second.aCachedAdditionalState.clear(); - aFeature->second.xDispatcher = queryDispatch( aFeature->second.aURL ); - if ( aFeature->second.xDispatcher.is() ) - { - ++m_nConnectedFeatures; - aFeature->second.xDispatcher->addStatusListener( static_cast< XStatusListener* >( this ), aFeature->second.aURL ); - } - } - - // notify derivee that (potentially) all features changed their state - allFeatureStatesChanged( ); - } - - //------------------------------------------------------------------ - void OFormNavigationHelper::disconnectDispatchers() - { - if ( m_nConnectedFeatures ) - { - for ( FeatureMap::iterator aFeature = m_aSupportedFeatures.begin(); - aFeature != m_aSupportedFeatures.end(); - ++aFeature - ) - { - if ( aFeature->second.xDispatcher.is() ) - aFeature->second.xDispatcher->removeStatusListener( static_cast< XStatusListener* >( this ), aFeature->second.aURL ); - - aFeature->second.xDispatcher = NULL; - aFeature->second.bCachedState = sal_False; - aFeature->second.aCachedAdditionalState.clear(); - } - - m_nConnectedFeatures = 0; - } - - // notify derivee that (potentially) all features changed their state - allFeatureStatesChanged( ); - } - - //------------------------------------------------------------------ - void OFormNavigationHelper::initializeSupportedFeatures( ) - { - if ( m_aSupportedFeatures.empty() ) - { - // ask the derivee which feature ids it wants us to support - ::std::vector< sal_Int16 > aFeatureIds; - getSupportedFeatures( aFeatureIds ); - - OFormNavigationMapper aUrlMapper( m_xORB ); - - for ( ::std::vector< sal_Int16 >::const_iterator aLoop = aFeatureIds.begin(); - aLoop != aFeatureIds.end(); - ++aLoop - ) - { - FeatureInfo aFeatureInfo; - - bool bKnownId = - aUrlMapper.getFeatureURL( *aLoop, aFeatureInfo.aURL ); - DBG_ASSERT( bKnownId, "OFormNavigationHelper::initializeSupportedFeatures: unknown feature id!" ); - - if ( bKnownId ) - // add to our map - m_aSupportedFeatures.insert( FeatureMap::value_type( *aLoop, aFeatureInfo ) ); - } - } - } - - //------------------------------------------------------------------ - Reference< XDispatch > OFormNavigationHelper::queryDispatch( const URL& _rURL ) - { - return m_pFeatureInterception->queryDispatch( _rURL ); - } - - //------------------------------------------------------------------ - void OFormNavigationHelper::dispatchWithArgument( sal_Int16 _nFeatureId, const sal_Char* _pParamAsciiName, - const Any& _rParamValue ) const - { - FeatureMap::const_iterator aInfo = m_aSupportedFeatures.find( _nFeatureId ); - if ( m_aSupportedFeatures.end() != aInfo ) - { - if ( aInfo->second.xDispatcher.is() ) - { - Sequence< PropertyValue > aArgs( 1 ); - aArgs[0].Name = ::rtl::OUString::createFromAscii( _pParamAsciiName ); - aArgs[0].Value = _rParamValue; - - aInfo->second.xDispatcher->dispatch( aInfo->second.aURL, aArgs ); - } - } - } - - //------------------------------------------------------------------ - void OFormNavigationHelper::dispatch( sal_Int16 _nFeatureId ) const - { - FeatureMap::const_iterator aInfo = m_aSupportedFeatures.find( _nFeatureId ); - if ( m_aSupportedFeatures.end() != aInfo ) - { - if ( aInfo->second.xDispatcher.is() ) - { - Sequence< PropertyValue > aEmptyArgs; - aInfo->second.xDispatcher->dispatch( aInfo->second.aURL, aEmptyArgs ); - } - } - } - - //------------------------------------------------------------------ - bool OFormNavigationHelper::isEnabled( sal_Int16 _nFeatureId ) const - { - FeatureMap::const_iterator aInfo = m_aSupportedFeatures.find( _nFeatureId ); - if ( m_aSupportedFeatures.end() != aInfo ) - return aInfo->second.bCachedState; - - return false; - } - - //------------------------------------------------------------------ - bool OFormNavigationHelper::getBooleanState( sal_Int16 _nFeatureId ) const - { - sal_Bool bState = sal_False; - - FeatureMap::const_iterator aInfo = m_aSupportedFeatures.find( _nFeatureId ); - if ( m_aSupportedFeatures.end() != aInfo ) - aInfo->second.aCachedAdditionalState >>= bState; - - return (bool)bState; - } - - //------------------------------------------------------------------ - ::rtl::OUString OFormNavigationHelper::getStringState( sal_Int16 _nFeatureId ) const - { - ::rtl::OUString sState; - - FeatureMap::const_iterator aInfo = m_aSupportedFeatures.find( _nFeatureId ); - if ( m_aSupportedFeatures.end() != aInfo ) - aInfo->second.aCachedAdditionalState >>= sState; - - return sState; - } - - //------------------------------------------------------------------ - sal_Int32 OFormNavigationHelper::getIntegerState( sal_Int16 _nFeatureId ) const - { - sal_Int32 nState = 0; - - FeatureMap::const_iterator aInfo = m_aSupportedFeatures.find( _nFeatureId ); - if ( m_aSupportedFeatures.end() != aInfo ) - aInfo->second.aCachedAdditionalState >>= nState; - - return nState; - } - - //------------------------------------------------------------------ - void OFormNavigationHelper::invalidateSupportedFeaturesSet() - { - disconnectDispatchers( ); - // no supported features anymore: - FeatureMap aEmpty; - m_aSupportedFeatures.swap( aEmpty ); - } - - //================================================================== - //= OFormNavigationMapper - //================================================================== - //------------------------------------------------------------------ - OFormNavigationMapper::OFormNavigationMapper( const Reference< XMultiServiceFactory >& _rxORB ) - { - m_pUrlTransformer.reset( new UrlTransformer( _rxORB ) ); - } - - //------------------------------------------------------------------ - OFormNavigationMapper::~OFormNavigationMapper( ) - { - } - - //------------------------------------------------------------------ - bool OFormNavigationMapper::getFeatureURL( sal_Int16 _nFeatureId, URL& /* [out] */ _rURL ) - { - // get the ascii version of the URL - const char* pAsciiURL = getFeatureURLAscii( _nFeatureId ); - if ( pAsciiURL ) - _rURL = m_pUrlTransformer->getStrictURLFromAscii( pAsciiURL ); - - return ( pAsciiURL != NULL ); - } - - //------------------------------------------------------------------ - namespace - { - struct FeatureURL - { - const sal_Int16 nFormFeature; - const sal_Char* pAsciiURL; - - FeatureURL( const sal_Int16 _nFormFeature, const sal_Char* _pAsciiURL ) - :nFormFeature( _nFormFeature ) - ,pAsciiURL( _pAsciiURL ) - { - } - }; - const FeatureURL* lcl_getFeatureTable() - { - static const FeatureURL s_aFeatureURLs[] = - { - FeatureURL( FormFeature::MoveAbsolute, URL_FORM_POSITION ), - FeatureURL( FormFeature::TotalRecords, URL_FORM_RECORDCOUNT ), - FeatureURL( FormFeature::MoveToFirst, URL_RECORD_FIRST ), - FeatureURL( FormFeature::MoveToPrevious, URL_RECORD_PREV ), - FeatureURL( FormFeature::MoveToNext, URL_RECORD_NEXT ), - FeatureURL( FormFeature::MoveToLast, URL_RECORD_LAST ), - FeatureURL( FormFeature::SaveRecordChanges, URL_RECORD_SAVE ), - FeatureURL( FormFeature::UndoRecordChanges, URL_RECORD_UNDO ), - FeatureURL( FormFeature::MoveToInsertRow, URL_RECORD_NEW ), - FeatureURL( FormFeature::DeleteRecord, URL_RECORD_DELETE ), - FeatureURL( FormFeature::ReloadForm, URL_FORM_REFRESH ), - FeatureURL( FormFeature::RefreshCurrentControl, URL_FORM_REFRESH_CURRENT_CONTROL ), - FeatureURL( FormFeature::SortAscending, URL_FORM_SORT_UP ), - FeatureURL( FormFeature::SortDescending, URL_FORM_SORT_DOWN ), - FeatureURL( FormFeature::InteractiveSort, URL_FORM_SORT ), - FeatureURL( FormFeature::AutoFilter, URL_FORM_AUTO_FILTER ), - FeatureURL( FormFeature::InteractiveFilter, URL_FORM_FILTER ), - FeatureURL( FormFeature::ToggleApplyFilter, URL_FORM_APPLY_FILTER ), - FeatureURL( FormFeature::RemoveFilterAndSort, URL_FORM_REMOVE_FILTER ), - FeatureURL( 0, NULL ) - }; - return s_aFeatureURLs; - } - } - - //------------------------------------------------------------------ - const char* OFormNavigationMapper::getFeatureURLAscii( sal_Int16 _nFeatureId ) - { - const FeatureURL* pFeatures = lcl_getFeatureTable(); - while ( pFeatures->pAsciiURL ) - { - if ( pFeatures->nFormFeature == _nFeatureId ) - return pFeatures->pAsciiURL; - ++pFeatures; - } - return NULL; - } - - //------------------------------------------------------------------ - sal_Int16 OFormNavigationMapper::getFeatureId( const ::rtl::OUString& _rCompleteURL ) - { - const FeatureURL* pFeatures = lcl_getFeatureTable(); - while ( pFeatures->pAsciiURL ) - { - if ( _rCompleteURL.compareToAscii( pFeatures->pAsciiURL ) == 0 ) - return pFeatures->nFormFeature; - ++pFeatures; - } - return -1; - } - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/helper/resettable.cxx b/forms/source/helper/resettable.cxx deleted file mode 100644 index 94380fe7c..000000000 --- a/forms/source/helper/resettable.cxx +++ /dev/null @@ -1,105 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * -************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "resettable.hxx" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ - -#include <cppuhelper/weak.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - /** === begin UNO using === **/ - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::XInterface; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::uno::UNO_SET_THROW; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::uno::Type; - using ::com::sun::star::form::XResetListener; - using ::com::sun::star::lang::EventObject; - /** === end UNO using === **/ - - //==================================================================== - //= ResetHelper - //==================================================================== - //-------------------------------------------------------------------- - void ResetHelper::addResetListener( const Reference< XResetListener >& _listener ) - { - m_aResetListeners.addInterface( _listener ); - } - - //-------------------------------------------------------------------- - void ResetHelper::removeResetListener( const Reference< XResetListener >& _listener ) - { - m_aResetListeners.removeInterface( _listener ); - } - - //-------------------------------------------------------------------- - bool ResetHelper::approveReset() - { - ::cppu::OInterfaceIteratorHelper aIter( m_aResetListeners ); - EventObject aResetEvent( m_rParent ); - - sal_Bool bContinue = sal_True; - while ( aIter.hasMoreElements() && bContinue ) - bContinue = static_cast< XResetListener* >( aIter.next() )->approveReset( aResetEvent ); - - return bContinue; - } - - //-------------------------------------------------------------------- - void ResetHelper::notifyResetted() - { - EventObject aResetEvent( m_rParent ); - m_aResetListeners.notifyEach( &XResetListener::resetted, aResetEvent ); - } - - //-------------------------------------------------------------------- - void ResetHelper::disposing() - { - EventObject aEvent( m_rParent ); - m_aResetListeners.disposeAndClear( aEvent ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/helper/urltransformer.cxx b/forms/source/helper/urltransformer.cxx deleted file mode 100644 index 8788fa6bd..000000000 --- a/forms/source/helper/urltransformer.cxx +++ /dev/null @@ -1,105 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "urltransformer.hxx" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ -#include <tools/debug.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::lang; - - //==================================================================== - //= UrlTransformer - //==================================================================== - //-------------------------------------------------------------------- - UrlTransformer::UrlTransformer( const Reference< XMultiServiceFactory >& _rxORB ) - :m_xORB( _rxORB ) - ,m_bTriedToCreateTransformer( false ) - { - DBG_ASSERT( _rxORB.is(), "UrlTransformer::UrlTransformer: invalid service factory!" ); - } - - //-------------------------------------------------------------------- - bool UrlTransformer::implEnsureTransformer() const - { - // create the transformer, if not already attempted to do so - if ( !m_xTransformer.is() && !m_bTriedToCreateTransformer ) - { - if ( m_xORB.is() ) - { - m_xTransformer = m_xTransformer.query( - m_xORB->createInstance( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ) ) - ) - ); - DBG_ASSERT( m_xTransformer.is(), "UrlTransformer::getStrictURL: couldn't get an URL transformer!" ); - } - - m_bTriedToCreateTransformer = true; - } - return m_xTransformer.is(); - } - - //-------------------------------------------------------------------- - URL UrlTransformer::getStrictURL( const ::rtl::OUString& _rURL ) const - { - URL aReturn; - aReturn.Complete = _rURL; - if ( implEnsureTransformer() ) - m_xTransformer->parseStrict( aReturn ); - return aReturn; - } - - //-------------------------------------------------------------------- - URL UrlTransformer::getStrictURLFromAscii( const sal_Char* _pAsciiURL ) const - { - return getStrictURL( ::rtl::OUString::createFromAscii( _pAsciiURL ) ); - } - - //-------------------------------------------------------------------- - void UrlTransformer::parseSmartWithAsciiProtocol( ::com::sun::star::util::URL& _rURL, const sal_Char* _pAsciiURL ) const - { - if ( implEnsureTransformer() ) - m_xTransformer->parseSmart( _rURL, ::rtl::OUString::createFromAscii( _pAsciiURL ) ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/helper/windowstateguard.cxx b/forms/source/helper/windowstateguard.cxx deleted file mode 100644 index f1fe62585..000000000 --- a/forms/source/helper/windowstateguard.cxx +++ /dev/null @@ -1,234 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "windowstateguard.hxx" -#include "frm_strings.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/awt/XWindowListener2.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -/** === end UNO includes === **/ -#include <cppuhelper/implbase1.hxx> -#include <tools/diagnose_ex.h> - -//........................................................................ -namespace frm -{ -//........................................................................ - - /** === begin UNO using === **/ - using ::com::sun::star::awt::XWindowListener2; - using ::com::sun::star::uno::Reference; - using ::com::sun::star::awt::XWindow2; - using ::com::sun::star::awt::WindowEvent; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::awt::XControlModel; - using ::com::sun::star::beans::XPropertySet; - using ::com::sun::star::lang::EventObject; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::uno::Exception; - /** === end UNO using === **/ - - //==================================================================== - //= WindowStateGuard_Impl - //==================================================================== - typedef ::cppu::WeakImplHelper1 < XWindowListener2 - > WindowStateGuard_Impl_Base; - class WindowStateGuard_Impl : public WindowStateGuard_Impl_Base - { - private: - ::osl::Mutex m_aMutex; - Reference< XWindow2 > m_xWindow; - Reference< XPropertySet > m_xModelProps; - - public: - /** constructs the instance - @param _rxWindow - the window at which to listen. Must not be <NULL/>. - @param _rxModel - the model which acts as the reference for the states to be enforced. Must not be <NULL/>. - */ - WindowStateGuard_Impl( const Reference< XWindow2 >& _rxWindow, const Reference< XPropertySet >& _rxMdelProps ); - - void dispose(); - - protected: - // XWindowListener2 - virtual void SAL_CALL windowEnabled( const ::com::sun::star::lang::EventObject& e ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL windowDisabled( const ::com::sun::star::lang::EventObject& e ) throw (::com::sun::star::uno::RuntimeException); - - // XWindowListener - virtual void SAL_CALL windowResized( const ::com::sun::star::awt::WindowEvent& e ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL windowMoved( const ::com::sun::star::awt::WindowEvent& e ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL windowShown( const ::com::sun::star::lang::EventObject& e ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL windowHidden( const ::com::sun::star::lang::EventObject& e ) throw (::com::sun::star::uno::RuntimeException); - - // XEventListener - virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); - - private: - /** ensures that the window's Enabled state matches what is described at the model - @precond - our mutex is locked - */ - void impl_ensureEnabledState_nothrow_nolck(); - }; - - //-------------------------------------------------------------------- - WindowStateGuard_Impl::WindowStateGuard_Impl( const Reference< XWindow2 >& _rxWindow, const Reference< XPropertySet >& _rxMdelProps ) - :m_xWindow( _rxWindow ) - ,m_xModelProps( _rxMdelProps ) - { - if ( !m_xWindow.is() || !m_xModelProps.is() ) - throw RuntimeException(); - - osl_incrementInterlockedCount( &m_refCount ); - { - m_xWindow->addWindowListener( this ); - } - osl_decrementInterlockedCount( &m_refCount ); - } - - //-------------------------------------------------------------------- - void WindowStateGuard_Impl::dispose() - { - ::osl::MutexGuard aGuard( m_aMutex ); - if ( !m_xWindow.is() ) - // already disposed - return; - - m_xWindow->removeWindowListener( this ); - m_xWindow.clear(); - } - - //-------------------------------------------------------------------- - void WindowStateGuard_Impl::impl_ensureEnabledState_nothrow_nolck() - { - try - { - Reference< XWindow2 > xWindow; - sal_Bool bEnabled = sal_False; - sal_Bool bShouldBeEnabled = sal_False; - { - ::osl::MutexGuard aGuard( m_aMutex ); - if ( !m_xWindow.is() || !m_xModelProps.is() ) - return; - xWindow = m_xWindow; - bEnabled = xWindow->isEnabled(); - OSL_VERIFY( m_xModelProps->getPropertyValue( PROPERTY_ENABLED ) >>= bShouldBeEnabled ); - } - - if ( !bShouldBeEnabled && bEnabled && xWindow.is() ) - xWindow->setEnable( sal_False ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - //-------------------------------------------------------------------- - void SAL_CALL WindowStateGuard_Impl::windowEnabled( const EventObject& /*e*/ ) throw (RuntimeException) - { - impl_ensureEnabledState_nothrow_nolck(); - } - - //-------------------------------------------------------------------- - void SAL_CALL WindowStateGuard_Impl::windowDisabled( const EventObject& /*e*/ ) throw (RuntimeException) - { - impl_ensureEnabledState_nothrow_nolck(); - } - - //-------------------------------------------------------------------- - void SAL_CALL WindowStateGuard_Impl::windowResized( const WindowEvent& /*e*/ ) throw (RuntimeException) - { - // not interested in - } - - //-------------------------------------------------------------------- - void SAL_CALL WindowStateGuard_Impl::windowMoved( const WindowEvent& /*e*/ ) throw (RuntimeException) - { - // not interested in - } - - //-------------------------------------------------------------------- - void SAL_CALL WindowStateGuard_Impl::windowShown( const EventObject& /*e*/ ) throw (RuntimeException) - { - // not interested in - } - - //-------------------------------------------------------------------- - void SAL_CALL WindowStateGuard_Impl::windowHidden( const EventObject& /*e*/ ) throw (RuntimeException) - { - // not interested in - } - - //-------------------------------------------------------------------- - void SAL_CALL WindowStateGuard_Impl::disposing( const EventObject& Source ) throw (RuntimeException) - { - OSL_ENSURE( Source.Source == m_xWindow, "WindowStateGuard_Impl::disposing: where does this come from?" ); - (void)Source; - dispose(); - } - - //==================================================================== - //= WindowStateGuard - //==================================================================== - //-------------------------------------------------------------------- - WindowStateGuard::WindowStateGuard() - { - } - - //-------------------------------------------------------------------- - WindowStateGuard::~WindowStateGuard() - { - } - - //-------------------------------------------------------------------- - void WindowStateGuard::attach( const Reference< XWindow2 >& _rxWindow, const Reference< XControlModel >& _rxModel ) - { - if ( m_pImpl.is() ) - { - m_pImpl->dispose(); - m_pImpl = NULL; - } - - Reference< XPropertySet > xModelProps( _rxModel, UNO_QUERY ); - OSL_ENSURE( xModelProps.is() || !_rxModel.is(), "WindowStateGuard::attach: a model which is no XPropertySet?" ); - if ( _rxWindow.is() && xModelProps.is() ) - m_pImpl = new WindowStateGuard_Impl( _rxWindow, xModelProps ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/FormComponent.hxx b/forms/source/inc/FormComponent.hxx deleted file mode 100644 index dd62fbe13..000000000 --- a/forms/source/inc/FormComponent.hxx +++ /dev/null @@ -1,1322 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_FORMCOMPONENT_HXX_ -#define _FORMS_FORMCOMPONENT_HXX_ - -#include "cloneable.hxx" -#include "ids.hxx" -#include "property.hrc" -#include "property.hxx" -#include "propertybaghelper.hxx" -#include "resettable.hxx" -#include "services.hxx" -#include "windowstateguard.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/awt/XControl.hpp> -#include <com/sun/star/beans/XPropertyAccess.hpp> -#include <com/sun/star/beans/XPropertyContainer.hpp> -#include <com/sun/star/container/XChild.hpp> -#include <com/sun/star/container/XNamed.hpp> -#include <com/sun/star/form/binding/XBindableValue.hpp> -#include <com/sun/star/form/FormComponentType.hpp> -#include <com/sun/star/form/validation/XValidatableFormComponent.hpp> -#include <com/sun/star/form/validation/XValidityConstraintListener.hpp> -#include <com/sun/star/form/XBoundComponent.hpp> -#include <com/sun/star/form/XBoundControl.hpp> -#include <com/sun/star/form/XFormComponent.hpp> -#include <com/sun/star/form/XLoadListener.hpp> -#include <com/sun/star/form/XReset.hpp> -#include <com/sun/star/io/XMarkableStream.hpp> -#include <com/sun/star/io/XPersistObject.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/lang/XEventListener.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/sdb/XColumn.hpp> -#include <com/sun/star/sdb/XColumnUpdate.hpp> -#include <com/sun/star/sdb/XRowSetChangeListener.hpp> -#include <com/sun/star/sdbc/XRowSet.hpp> -#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> -#include <com/sun/star/uno/XAggregation.hpp> -#include <com/sun/star/util/XCloneable.hpp> -#include <com/sun/star/util/XModifyListener.hpp> -#include <com/sun/star/form/XLoadable.hpp> -/** === end UNO includes === **/ - -#include <comphelper/componentcontext.hxx> -#include <comphelper/propagg.hxx> -#include <comphelper/propertybag.hxx> -#include <comphelper/propmultiplex.hxx> -#include <comphelper/sequence.hxx> -#include <comphelper/uno3.hxx> -#include <cppuhelper/component.hxx> -#include <cppuhelper/implbase1.hxx> -#include <cppuhelper/implbase2.hxx> -#include <cppuhelper/implbase3.hxx> -#include <cppuhelper/implbase4.hxx> -#include <cppuhelper/implbase7.hxx> -#include <osl/mutex.hxx> -#include <rtl/ustring.hxx> - -#include <memory> - -//......................................................................... -namespace frm -{ -//......................................................................... - - // default tab index for components - const sal_Int16 FRM_DEFAULT_TABINDEX = 0; - - // macros for quickly declaring/implementing XServiceInfo - #define DECLARE_XPERSISTOBJECT() \ - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException); \ - virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); \ - virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); \ - - // old macro for quickly implementing XServiceInfo::getImplementationName - #define IMPLEMENTATION_NAME(ImplName) \ - virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException) \ - { return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.forms.") ) + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(#ImplName)); } - - class OControlModel; - - //========================================================================= - //= ControlModelLock - //========================================================================= - /** class whose instances lock a OControlModel - - Locking here merely means locking the OControlModel's mutex. - - In addition to the locking facility, the class is also able to fire property - change notifications. This happens when the last ControlModelLock instance on a stack - dies. - */ - class ControlModelLock - { - public: - ControlModelLock( OControlModel& _rModel ) - :m_rModel( _rModel ) - ,m_bLocked( false ) - { - acquire(); - } - - ~ControlModelLock() - { - if ( m_bLocked ) - release(); - } - inline void acquire(); - inline void release(); - - inline OControlModel& getModel() const { return m_rModel; }; - - /** adds a property change notification, which is to be fired when the last lock on the model - (in the current thread) is released. - */ - void addPropertyNotification( - const sal_Int32 _nHandle, - const ::com::sun::star::uno::Any& _rOldValue, - const ::com::sun::star::uno::Any& _rNewValue - ); - - private: - void impl_notifyAll_nothrow(); - - private: - OControlModel& m_rModel; - bool m_bLocked; - ::com::sun::star::uno::Sequence< sal_Int32 > m_aHandles; - ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > m_aOldValues; - ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > m_aNewValues; - - private: - ControlModelLock(); // never implemented - ControlModelLock( const ControlModelLock& ); // never implemented - ControlModelLock& operator=( const ControlModelLock& ); // never implemented - }; - -//========================================================================= -//= OControl -//= base class for form layer controls -//========================================================================= -typedef ::cppu::ImplHelper3 < ::com::sun::star::awt::XControl - , ::com::sun::star::lang::XEventListener - , ::com::sun::star::lang::XServiceInfo - > OControl_BASE; - -class OControl :public ::cppu::OComponentHelper - ,public OControl_BASE -{ -protected: - ::osl::Mutex m_aMutex; - OImplementationIdsRef m_aHoldIdHelper; - ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > - m_xControl; - ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation> - m_xAggregate; - - ::comphelper::ComponentContext m_aContext; - WindowStateGuard m_aWindowStateGuard; - -public: - /** constructs a control - - @param _rFactory - the service factory for this control - @param _rAggregateService - the service name of the component to aggregate - @param _bSetDelegator - set this to <FALSE/> if you don't want the constructor to set the delegator at - the aggregate. In this case, you <em>have</em> to call doSetDelegator within your - own constructor. - - This is helpfull, if your derived class wants to cache an interface of the aggregate. - In this case, the aggregate needs to be queried for this interface <b>before</b> the - <member scope="com::sun::star::uno">XAggregation::setDelegator</member> call. - - In such a case, pass <FALSE/> to this parameter. Then, cache the aggregate's interface(s) - as needed. Afterwards, call <member>doSetDelegator</member>. - - In your destructor, you need to call <member>doResetDelegator</member> before - resetting the cached interfaces. This will reset the aggregates delegator to <NULL/>, - which will ensure that the <member scope="com::sun::star::uno">XInterface::release</member> - calls on the cached interfaces are really applied to the aggregate, instead of - the <type>OControl</type> itself. - */ - OControl( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rFactory, - const ::rtl::OUString& _rAggregateService, - const sal_Bool _bSetDelegator = sal_True - ); - - /** initializes the given peer with various settings necessary for form controls - */ - static void initFormControlPeer( - const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& _rxPeer ); - -protected: - virtual ~OControl(); - - /** sets the control as delegator at the aggregate - - This has to be called from within your derived class' constructor, if and only - if you passed <FALSE/> to the <arg>_bSetDelegator</arg> parameter of the - <type>OControl</type> constructor. - */ - void doSetDelegator(); - void doResetDelegator(); - -// UNO - DECLARE_UNO3_AGG_DEFAULTS(OControl, OComponentHelper); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException); - -// XTypeProvider - virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException); - -// OComponentHelper - virtual void SAL_CALL disposing(); - -// XComponent (as base of XControl) - virtual void SAL_CALL dispose( ) throw(::com::sun::star::uno::RuntimeException) - { OComponentHelper::dispose(); } - virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException) - { OComponentHelper::addEventListener(_rxListener); } - virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException) - { OComponentHelper::removeEventListener(_rxListener); } - -// XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException); - -// XServiceInfo - virtual sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw (::com::sun::star::uno::RuntimeException); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException) = 0; - -// XServiceInfo - static version - static StringSequence SAL_CALL getSupportedServiceNames_Static() throw(::com::sun::star::uno::RuntimeException); - -// XControl - virtual void SAL_CALL setContext(const InterfaceRef& Context) throw (::com::sun::star::uno::RuntimeException); - virtual InterfaceRef SAL_CALL getContext() throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL createPeer(const ::com::sun::star::uno::Reference<starawt::XToolkit>& Toolkit, const ::com::sun::star::uno::Reference<starawt::XWindowPeer>& Parent) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference<starawt::XWindowPeer> SAL_CALL getPeer() throw (::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL setModel(const ::com::sun::star::uno::Reference<starawt::XControlModel>& Model) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference<starawt::XControlModel> SAL_CALL getModel() throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference<starawt::XView> SAL_CALL getView() throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setDesignMode(sal_Bool bOn) throw (::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isDesignMode() throw (::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isTransparent() throw (::com::sun::star::uno::RuntimeException); - -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - // overwrite this and call the base class if you have additional types - - ::com::sun::star::uno::Sequence< ::rtl::OUString > getAggregateServiceNames(); - -private: - void impl_resetStateGuard_nothrow(); -}; - -//================================================================== -//= OBoundControl -//= a form control implementing the XBoundControl interface -//================================================================== -typedef ::cppu::ImplHelper1 < ::com::sun::star::form::XBoundControl - > OBoundControl_BASE; -class OBoundControl :public OControl - ,public OBoundControl_BASE -{ -protected: - sal_Bool m_bLocked : 1; - - ::rtl::OUString m_sOriginalHelpText; // as long as the text/value is invalid, we change the help text of our peer - ::com::sun::star::awt::FontDescriptor - m_aOriginalFont; // as long as the text/value is invalid, we also change the font - sal_Int32 m_nOriginalTextLineColor; // (we add red underlining) - -public: - OBoundControl( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory, - const ::rtl::OUString& _rAggregateService, - const sal_Bool _bSetDelegator = sal_True - ); - - virtual ~OBoundControl(); - - DECLARE_UNO3_AGG_DEFAULTS(OBoundControl, OControl); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw(::com::sun::star::uno::RuntimeException); - - // XBoundControl - virtual sal_Bool SAL_CALL getLock() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setLock(sal_Bool _bLock) throw(::com::sun::star::uno::RuntimeException); - // default implementation just disables the controls, overwrite _setLock to change this behaviour - - // XControl - virtual sal_Bool SAL_CALL setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& Model) throw (::com::sun::star::uno::RuntimeException); - - // XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - -protected: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - // implement the lock setting - virtual void _setLock(sal_Bool _bLock); -}; - -//================================================================== -//= OControlModel -//= model of a form layer control -//================================================================== - -typedef ::cppu::ImplHelper7 < ::com::sun::star::form::XFormComponent - , ::com::sun::star::io::XPersistObject - , ::com::sun::star::container::XNamed - , ::com::sun::star::lang::XServiceInfo - , ::com::sun::star::util::XCloneable - , ::com::sun::star::beans::XPropertyContainer - , ::com::sun::star::beans::XPropertyAccess - > OControlModel_BASE; - -class OControlModel :public ::cppu::OComponentHelper - ,public OPropertySetAggregationHelper - ,public OControlModel_BASE - ,public OCloneableAggregation - ,public IPropertyBagHelperContext -{ - -protected: - ::comphelper::ComponentContext m_aContext; - - ::osl::Mutex m_aMutex; - oslInterlockedCount m_lockCount; - - InterfaceRef m_xParent; // ParentComponent - OImplementationIdsRef m_aHoldIdHelper; - PropertyBagHelper m_aPropertyBagHelper; - - const ::comphelper::ComponentContext& - getContext() const { return m_aContext; } - -// <properties> - ::rtl::OUString m_aName; // name of the control - ::rtl::OUString m_aTag; // tag for additional data - sal_Int16 m_nTabIndex; // index within the taborder - sal_Int16 m_nClassId; // type of the control - sal_Bool m_bNativeLook; // should the control use the native platform look? -// </properties> - - -protected: - OControlModel( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rFactory, // factory to create the aggregate with - const ::rtl::OUString& _rUnoControlModelTypeName, // service name of te model to aggregate - const ::rtl::OUString& rDefault = ::rtl::OUString(), // service name of the default control - const sal_Bool _bSetDelegator = sal_True // set to sal_False if you want to call setDelegator later (after returning from this ctor) - ); - OControlModel( - const OControlModel* _pOriginal, // the original object to clone - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rFactory, // factory to create the aggregate with - const sal_Bool _bCloneAggregate = sal_True, // should the aggregate of the original be cloned, too? - const sal_Bool _bSetDelegator = sal_True // set to sal_False if you want to call setDelegator later (after returning from this ctor) - ); - virtual ~OControlModel(); - - /** to be called after a OBoundControlModel (a derivee, respectively) has been cloned - - <p>This method contains late initializations which cannot be done in the - constructor of this base class, since the virtual method of derived classes do - not yet work there.</p> - */ - virtual void clonedFrom( const OControlModel* _pOriginal ); - - using OComponentHelper::rBHelper; - - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - - void readHelpTextCompatibly(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream >& _rxInStream); - void writeHelpTextCompatibly(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream >& _rxOutStream); - - void doSetDelegator(); - void doResetDelegator(); - - ::com::sun::star::uno::Sequence< ::rtl::OUString > getAggregateServiceNames(); - -public: - DECLARE_UNO3_AGG_DEFAULTS(OControl, OComponentHelper); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException); - -// XTypeProvider - virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException); - -// OComponentHelper - virtual void SAL_CALL disposing(); - -// XNamed - virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setName(const ::rtl::OUString& aName) throw(::com::sun::star::uno::RuntimeException); - -// XServiceInfo - virtual sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw (::com::sun::star::uno::RuntimeException); - virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException) = 0; - -// XSericeInfo - static version(s) - static StringSequence SAL_CALL getSupportedServiceNames_Static() throw(::com::sun::star::uno::RuntimeException); - -// XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException) = 0; - virtual void SAL_CALL - write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL - read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - -// XChild (base of XFormComponent) - virtual InterfaceRef SAL_CALL getParent() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setParent(const InterfaceRef& Parent) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); - -// XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException); - -// XPropertySet - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue( - ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw (::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw (::com::sun::star::uno::Exception); - using ::cppu::OPropertySetHelper::getFastPropertyValue; - -// ::com::sun::star::beans::XPropertyState - virtual ::com::sun::star::beans::PropertyState getPropertyStateByHandle(sal_Int32 nHandle); - virtual void setPropertyToDefaultByHandle(sal_Int32 nHandle); - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const; - -// XCloneable - virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException) = 0; - -// XPropertyContainer - virtual void SAL_CALL addProperty( const ::rtl::OUString& Name, ::sal_Int16 Attributes, const ::com::sun::star::uno::Any& DefaultValue ) throw (::com::sun::star::beans::PropertyExistException, ::com::sun::star::beans::IllegalTypeException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeProperty( const ::rtl::OUString& Name ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::NotRemoveableException, ::com::sun::star::uno::RuntimeException); - -// XPropertyAccess - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getPropertyValues( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aProps ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - -protected: - using OPropertySetAggregationHelper::setPropertyValues; - using OPropertySetAggregationHelper::getPropertyValues; - -protected: - virtual void writeAggregate( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream >& _rxOutStream ) const; - virtual void readAggregate( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream >& _rxInStream ); - -protected: - // XPropertySet - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw( ::com::sun::star::uno::RuntimeException); - // OPropertySetHelper - virtual cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper(); - - /** describes the properties provided by this class, or its respective - derived class - - Derived classes usually call the base class first, and then append own properties. - */ - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - - // IPropertyBagHelperContext - virtual ::osl::Mutex& getMutex(); - virtual void describeFixedAndAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rFixedProperties, - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rAggregateProperties - ) const; - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XMultiPropertySet > - getPropertiesInterface(); - - /** describes the properties of our aggregate - - The default implementation simply asks m_xAggregateSet for its properties. - - You usually only need to overload this method if you want to filter the aggregate - properties. - */ - virtual void describeAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps - ) const; - -public: - struct LockAccess { friend class ControlModelLock; private: LockAccess() { } }; - - void lockInstance( LockAccess ); - oslInterlockedCount unlockInstance( LockAccess ); - - void firePropertyChanges( - const ::com::sun::star::uno::Sequence< sal_Int32 >& _rHandles, - const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& _rOldValues, - const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& _rNewValues, - LockAccess - ); - - inline ::osl::Mutex& - getInstanceMutex() { return m_aMutex; } -}; - -//================================================================== -// simple destructor -#define DECLARE_DEFAULT_DTOR( classname ) \ - ~classname() \ - -// constructor for cloning a class -#define DECLARE_DEFAULT_CLONE_CTOR( classname ) \ - classname( \ - const classname* _pOriginal, \ - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory \ - ); \ - -// all xtors for an inner class of the object hierarchy -#define DECLARE_DEFAULT_XTOR( classname ) \ - classname( \ - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, \ - const ::rtl::OUString& _rUnoControlModelTypeName, \ - const ::rtl::OUString& _rDefault \ - ); \ - DECLARE_DEFAULT_CLONE_CTOR( classname ) \ - DECLARE_DEFAULT_DTOR( classname ) \ - -// all xtors for an inner class of the object hierarchy which is *bound* -#define DECLARE_DEFAULT_BOUND_XTOR( classname ) \ - classname( \ - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, \ - const ::rtl::OUString& _rUnoControlModelTypeName, \ - const ::rtl::OUString& _rDefault, \ - const sal_Bool _bSupportExternalBinding, \ - const sal_Bool _bSupportsValidation \ - ); \ - DECLARE_DEFAULT_CLONE_CTOR( classname ) \ - DECLARE_DEFAULT_DTOR( classname ) \ - -// all xtors for a leas class of the object hierarchy -#define DECLARE_DEFAULT_LEAF_XTOR( classname ) \ - classname( \ - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory \ - ); \ - classname( \ - const classname* _pOriginal, \ - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory \ - ); \ - DECLARE_DEFAULT_DTOR( classname ) \ - -//================================================================== -// XCloneable -#define DECLARE_XCLONEABLE( ) \ - virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone( ) throw (::com::sun::star::uno::RuntimeException) - -#define IMPLEMENT_DEFAULT_CLONING( classname ) \ - ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL classname::createClone( ) throw (::com::sun::star::uno::RuntimeException) \ - { \ - classname* pClone = new classname( this, getContext().getLegacyServiceFactory() ); \ - pClone->clonedFrom( this ); \ - return pClone; \ - } - -//================================================================== -//= OBoundControlModel -//= model of a form layer control which is bound to a data source field -//================================================================== -typedef ::cppu::ImplHelper4 < ::com::sun::star::form::XLoadListener - , ::com::sun::star::form::XReset - , ::com::sun::star::beans::XPropertyChangeListener - , ::com::sun::star::sdb::XRowSetChangeListener - > OBoundControlModel_BASE1; - -// separated into an own base class since derivees can disable the support for this -// interface, thus we want to easily exclude it in the queryInterface and getTypes -typedef ::cppu::ImplHelper1 < ::com::sun::star::form::XBoundComponent - > OBoundControlModel_COMMITTING; - -// dito -typedef ::cppu::ImplHelper2 < ::com::sun::star::form::binding::XBindableValue - , ::com::sun::star::util::XModifyListener - > OBoundControlModel_BINDING; - -// dito -typedef ::cppu::ImplHelper2 < ::com::sun::star::form::validation::XValidityConstraintListener - , ::com::sun::star::form::validation::XValidatableFormComponent - > OBoundControlModel_VALIDATION; - -class OBoundControlModel :public OControlModel - ,public OBoundControlModel_BASE1 - ,public OBoundControlModel_COMMITTING - ,public OBoundControlModel_BINDING - ,public OBoundControlModel_VALIDATION - ,public ::comphelper::OPropertyChangeListener -{ -protected: - enum ValueChangeInstigator - { - eDbColumnBinding, - eExternalBinding, - eOther - }; - -private: - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > - m_xField; - // the form which controls supplies the field we bind to. - ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadable > - m_xAmbientForm; - - ::rtl::OUString m_sValuePropertyName; - sal_Int32 m_nValuePropertyAggregateHandle; - sal_Int32 m_nFieldType; - ::com::sun::star::uno::Type m_aValuePropertyType; - bool m_bValuePropertyMayBeVoid; - - ResetHelper m_aResetHelper; - ::cppu::OInterfaceContainerHelper m_aUpdateListeners; - ::cppu::OInterfaceContainerHelper m_aFormComponentListeners; - - ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XValueBinding > - m_xExternalBinding; - ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XValidator > - m_xValidator; - ::com::sun::star::uno::Type m_aExternalValueType; - -// <properties> - ::rtl::OUString m_aControlSource; // Datenquelle, Name des Feldes - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > - m_xLabelControl; // reference to a sibling control (model) which is our label - sal_Bool m_bInputRequired; -// </properties> - - ::comphelper::OPropertyChangeMultiplexer* - m_pAggPropMultiplexer; - - bool m_bFormListening : 1; // are we currently a XLoadListener at our ambient form? - sal_Bool m_bLoaded : 1; - sal_Bool m_bRequired : 1; - const sal_Bool m_bCommitable : 1; // do we support XBoundComponent? - const sal_Bool m_bSupportsExternalBinding : 1; // do we support XBindableValue? - const sal_Bool m_bSupportsValidation : 1; // do we support XValidatable? - sal_Bool m_bForwardValueChanges : 1; // do we currently handle changes in the bound database field? - sal_Bool m_bTransferingValue : 1; // true if we're currently transfering our value to an external binding - sal_Bool m_bIsCurrentValueValid : 1; // flag specifying whether our current value is valid, relative to our external validator - sal_Bool m_bBindingControlsRO : 1; // is our ReadOnly property currently controlled by our external binding? - sal_Bool m_bBindingControlsEnable : 1; // is our Enabled property currently controlled by our external binding? - - ValueChangeInstigator m_eControlValueChangeInstigator; - -protected: - ::rtl::OUString m_aLabelServiceName; - // when setting the label for our control (property FM_PROP_CONTROLLABEL, member m_xLabelControl), - // we accept only objects supporting an XControlModel interface, an XServiceInfo interface and - // support for a service (XServiceInfo::supportsService) determined by this string. - // Any other arguments will throw an IllegalArgumentException. - // The default value is FM_COMPONENT_FIXEDTEXT. - - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet > - m_xCursor; - ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumnUpdate > - m_xColumnUpdate; - ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn > - m_xColumn; - -protected: - inline const ::rtl::OUString& getValuePropertyName( ) const { return m_sValuePropertyName; } - inline sal_Int32 getValuePropertyAggHandle( ) const { return m_nValuePropertyAggregateHandle; } - inline const ::rtl::OUString& getControlSource( ) const { return m_aControlSource; } - inline sal_Bool isRequired() const { return m_bRequired; } - inline sal_Bool isLoaded() const { return m_bLoaded; } - -protected: - - OBoundControlModel( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rFactory, - // factory to create the aggregate with - const ::rtl::OUString& _rUnoControlModelTypeName, // service name of te model to aggregate - const ::rtl::OUString& _rDefault, // service name of the default control - const sal_Bool _bCommitable, // is the control (model) commitable ? - const sal_Bool _bSupportExternalBinding, // set to sal_True if you want to support XBindableValue - const sal_Bool _bSupportsValidation // set to sal_True if you want to support XValidatable - ); - OBoundControlModel( - const OBoundControlModel* _pOriginal, // the original object to clone - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rFactory - // factory to create the aggregate with - ); - virtual ~OBoundControlModel(); - - /// late ctor after cloning - virtual void clonedFrom( const OControlModel* _pOriginal ); - - /** initializes the part of the class which is related to the control value. - - <p>Kind of late ctor, to be called for derivees which have a dedicated value property.<br/> - The value property is the property which's value is synced with either the database - column the object is bound to, or with the external value binding, if present.<br/> - E.g. for a text control model, this property will most probably be "Text".</p> - - <p>Derived classes are stronly recommend to call this method - at least the - "DataFieldProperty" (exposed in getFastPropertyValue) relies on the information - given herein, and needs to be supplied otherwise else.</p> - - <p>If this method has been called properly, then <member>setControlValue</member> - does not need to be overridden - it will simply set the property value at the - aggregate then.</p> - - @precond - The method has not be called before during the life time of the object. - - @param _rValuePropertyName - the name of the value property - @param _nValuePropertyExternalHandle - the handle of the property, as exposed to external components.<br/> - Normally, this information can be obtained dynamically (e.g. from describeFixedProperties), - but since this method is to be called from within the constructor of derived classes, - we prefer to be on the *really* safe side here .... - - @see setControlValue - @see suspendValueListening - @see resumeValueListening - @see describeFixedProperties - */ - void initValueProperty( - const ::rtl::OUString& _rValuePropertyName, - sal_Int32 _nValuePropertyExternalHandle - ); - - /** initializes the part of the class which is related to the control value. - - <p>In opposite to ->initValueProperty, this method is to be used for value properties which are <em>not</em> - implemented by our aggregate, but by ourselves.</p> - - <p>Certain functionality is not available when using own value properties. This includes binding to an external - value and external validation. (This is not a conceptual limit, but simply missing implementation.)</p> - */ - void initOwnValueProperty( - const ::rtl::OUString& i_rValuePropertyName - ); - - /** suspends listening at the value property - - <p>As long as this listening is suspended, changes in the value property will not be - recognized and not be handled.</p> - - @see initValueProperty - @see resumeValueListening - */ - void suspendValueListening( ); - - /** resumes listening at the value property - - <p>As long as this listening is suspended, changes in the value property will not be - recognized and not be handled.</p> - - @precond - listening at the value property is currently suspended - - @see initValueProperty - @see resumeValueListening - */ - void resumeValueListening( ); - - /** (to be) called when the value property changed - - Normally, this is done automatically, since the value property is a property of our aggregate, and we're - a listener at this property. - However, in some cases the value property might not be an aggregate property, but a property of the - delegator instance. In this case, you'll need to call <code>onValuePropertyChange</code> whenever this - property changes. - */ - void onValuePropertyChange( ControlModelLock& i_rControLock ); - - /** starts listening at the aggregate, for changes in the given property - - <p>The OBoundControlModel automatically registers a multiplexer which listens for - changes in the aggregate property values. By default, only the control value property - is observed. You may add additional properties to be observed with this method.</p> - - @see initValueProperty - @see _propertyChanged - */ - void startAggregatePropertyListening( const ::rtl::OUString& _rPropertyName ); - - /** returns the default which should be used when resetting the control - - <p>The default implementation returns an empty Any.</p> - - @see resetNoBroadcast - */ - virtual ::com::sun::star::uno::Any - getDefaultForReset() const; - - /** translates a db column value into a control value. - - <p>Must transform the very current value of the database column we're bound to - (<member>m_xColumn</member>) into a value which can be used as current value - for the control.</p> - - @see setControlValue - @pure - */ - virtual ::com::sun::star::uno::Any - translateDbColumnToControlValue( ) = 0; - - /** returns the data types which the control could use to exchange data with - an external value binding - - The types returned here are completely independent from the concrete value binding, - they're just candidates which depend on the control type, and possible the concrete state - of the control (i.e. some property value). - - If a control implementation supports multiple types, the ordering in the returned - sequence indicates preference: Preferred types are mentioned first. - - The default implementation returns the type of our value property. - */ - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > - getSupportedBindingTypes(); - - /** translates the given value, which was obtained from the current external value binding, - to a value which can be used in setControlValue - - <p>The default implementation returns the value itself, exception when it is VOID, and - our value property is not allowed to be void - in this case, the returned value is a - default-constructed value of the type required by our value property. - - @see hasExternalValueBinding - @see getExternalValueType - */ - virtual ::com::sun::star::uno::Any - translateExternalValueToControlValue( const ::com::sun::star::uno::Any& _rExternalValue ) const; - - /** commits the current control value to our external value binding - - <p>The default implementation simply calls getControlValue.</p> - - @see hasExternalValueBinding - @see initValueProperty - */ - virtual ::com::sun::star::uno::Any - translateControlValueToExternalValue( ) const; - - /** commits the current control value to the database column we're bound to - @precond - we're properly bound to a database column, especially <member>m_xColumnUpdate</member> - is not <NULL/> - @param _bPostReset - <TRUE/> if and only if the current control value results from a reset (<member>getDefaultForReset</member>) - @pure - */ - virtual sal_Bool commitControlValueToDbColumn( - bool _bPostReset - ) = 0; - - /** sets the given value as new current value for the control - - Besides some administrative work (such as caring for <member>m_eControlValueChangeInstigator</member>), - this method simply calls <member>doSetControlValue</member>. - - @precond - Our own mutex is locked. - @param _rValue - The value to set. This value is guaranteed to be created by - <member>translateDbColumnToControlValue</member> or - <member>translateExternalValueToControlValue</member> - @param _eInstigator - the instigator of the value change - */ - void setControlValue( - const ::com::sun::star::uno::Any& _rValue, - ValueChangeInstigator _eInstigator - ); - /** - <p>The default implementation will forward the given value to the aggregate, using - m_nValuePropertyAggregateHandle and/or m_sValuePropertyName.</p> - - @precond - Our own mutex is locked. - @param _rValue - The value to set. This value is guaranteed to be created by - <member>translateDbColumnToControlValue</member> or - <member>translateExternalValueToControlValue</member> - */ - virtual void doSetControlValue( - const ::com::sun::star::uno::Any& _rValue - ); - - /** retrieves the current value of the control - - <p>The default implementation will ask the aggregate for the property value - determined by either m_nValuePropertyAggregateHandle and/or m_sValuePropertyName.</p> - - @precond - Our own mutex is locked. - */ - virtual ::com::sun::star::uno::Any - getControlValue( ) const; - - /** called whenever a connection to a database column has been established - */ - virtual void onConnectedDbColumn( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxForm ); - /** called whenever a connection to a database column has been suspended - */ - virtual void onDisconnectedDbColumn(); - - /** called whenever a connection to an external supplier of values (XValueBinding) has been established - @see m_xExternalBinding - */ - virtual void onConnectedExternalValue( ); - /** called whenever a connection to an external supplier of values (XValueBinding) has been suspended - */ - virtual void onDisconnectedExternalValue(); - - /** called whenever an external validator has been registered - */ - virtual void onConnectedValidator( ); - /** called whenever an external validator has been revoked - */ - virtual void onDisconnectedValidator( ); - - /** nFieldType ist der Typ des Feldes, an das das Model gebunden werden soll. - Das Binden erfolgt genau dann, wenn Rueckgabewert sal_True. - Die Standard-Implementation erlaubt alles ausser den drei binary-Typen und - FieldType_OTHER. - */ - virtual sal_Bool approveDbColumnType(sal_Int32 _nColumnType); - - /** retrieves the current value of the control, in a shape which can be used with our - external validator. - - The default implementation simply calls <member>>translateControlValueToExternalValue</member>. - - @precond - Our own mutex is locked. - */ - virtual ::com::sun::star::uno::Any - translateControlValueToValidatableValue( ) const; - - /** retrieves the current value of the form component - - This is the implementation method for XValidatableFormComponent::getCurrentValue. The default implementation - calls translateControlValueToValidatableValue if a validator is present, otherwise getControlValue. - - @precond - our mutex is locked when this method is called - */ - virtual ::com::sun::star::uno::Any - getCurrentFormComponentValue() const; - - /** We can't write (new) common properties in this base class, as the file format doesn't allow this - (unfortunally). So derived classes may use the following to methods. They secure the written - data with marks, so any new common properties in newer versions will be skipped by older ones. - */ - void writeCommonProperties(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream); - void readCommonProperties(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream); - // the next method may be used in derived classes's read when an unknown version is encountered - void defaultCommonProperties(); - - /** called to reset the control to some kind of default. - - <p>The semantics of "default" is finally defined by the derived class (in particular, - by <member>getDefaultForReset</member>).</p> - - <p>No listener notification needs to be done in the derived class.</p> - - <p>Normally, you won't override this method, but <member>getDefaultForReset</member> instead.</p> - - @see getDefaultForReset - */ - virtual void resetNoBroadcast(); - - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> _getTypes(); - - /// sets m_xField to the given new value, without notifying our listeners - void impl_setField_noNotify( - const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxField - ); - inline bool hasField() const - { - return m_xField.is(); - } - inline sal_Int32 getFieldType() const - { - return m_nFieldType; - } - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - -public: - inline const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& getField() const - { - return m_xField; - } - -public: - // UNO Anbindung - DECLARE_UNO3_AGG_DEFAULTS(OBoundControlModel, OControlModel); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException); - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // XReset - virtual void SAL_CALL reset( ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addResetListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener >& aListener ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeResetListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener >& aListener ) throw(::com::sun::star::uno::RuntimeException); - - // XServiceInfo - virtual StringSequence SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); - - // XServiceInfo - static version - static StringSequence SAL_CALL getSupportedServiceNames_Static() throw(::com::sun::star::uno::RuntimeException); - - // XChild - virtual void SAL_CALL setParent( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Parent ) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); - - // XPersistObject - virtual void SAL_CALL write( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream >& OutStream ) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream >& InStream ) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - - // XBoundComponent - virtual sal_Bool SAL_CALL commit() throw(::com::sun::star::uno::RuntimeException); - - // XUpdateBroadcaster (base of XBoundComponent) - virtual void SAL_CALL addUpdateListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& aListener ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeUpdateListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& aListener ) throw(::com::sun::star::uno::RuntimeException); - - // XPropertySet - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue( - ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - throw (::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw (::com::sun::star::uno::Exception); - using ::cppu::OPropertySetHelper::getFastPropertyValue; - -// ::com::sun::star::beans::XPropertyState - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const; - -// XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException); - -// XPropertyChangeListener - virtual void SAL_CALL propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw(::com::sun::star::uno::RuntimeException); - - // XRowSetChangeListener - virtual void SAL_CALL onRowSetChanged( const ::com::sun::star::lang::EventObject& i_Event ) throw (::com::sun::star::uno::RuntimeException); - -// XLoadListener - virtual void SAL_CALL loaded( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL unloading( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL unloaded( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL reloading( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL reloaded( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException); - -private: - // XBindableValue - virtual void SAL_CALL setValueBinding( const ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XValueBinding >& _rxBinding ) throw (::com::sun::star::form::binding::IncompatibleTypesException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XValueBinding > SAL_CALL getValueBinding( ) throw (::com::sun::star::uno::RuntimeException); - - // XModifyListener - virtual void SAL_CALL modified( const ::com::sun::star::lang::EventObject& _rEvent ) throw (::com::sun::star::uno::RuntimeException); - - // XValidatable - virtual void SAL_CALL setValidator( const ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XValidator >& Validator ) throw (::com::sun::star::util::VetoException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XValidator > SAL_CALL getValidator( ) throw (::com::sun::star::uno::RuntimeException); - - // XValidityConstraintListener - virtual void SAL_CALL validityConstraintChanged( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); - - // XValidatableFormComponent - virtual sal_Bool SAL_CALL isValid( ) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Any SAL_CALL getCurrentValue( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addFormComponentValidityListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XFormComponentValidityListener >& Listener ) throw (::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeFormComponentValidityListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XFormComponentValidityListener >& Listener ) throw (::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException); - -protected: - // OPropertyChangeListener - virtual void - _propertyChanged( const ::com::sun::star::beans::PropertyChangeEvent& _rEvt ) throw ( ::com::sun::star::uno::RuntimeException ); - - /// checks whether we currently have an external value binding in place - inline bool hasExternalValueBinding() const { return m_xExternalBinding.is(); } - - // checks whether we currently have an external validator - inline bool hasValidator() const { return m_xValidator.is(); } - - /** transfers the very current value of the db column we're bound to the control - @precond - our own mutex is locked - @precond - we don't have an external binding in place - */ - void transferDbValueToControl( ); - - /** transfers the current value of the active external binding to the control - @precond - we do have an active external binding in place - */ - void transferExternalValueToControl( ControlModelLock& _rInstanceLock ); - - /** transfers the control value to the external binding - @precond - our own mutex is locked, and _rInstanceLock is the guard locking it - @precond - we do have an active external binding in place - */ - void transferControlValueToExternal( ControlModelLock& _rInstanceLock ); - - /** calculates the type which is to be used to communicate with the current external binding, - and stores it in m_aExternalValueType - - The method checks the possible type candidates as returned by getSupportedBindingTypes, - and the types supported by the current external binding, if any. - */ - void calculateExternalValueType(); - - /** returns the type which should be used to exchange data with our external value binding - - @see initValueProperty - */ - const ::com::sun::star::uno::Type& - getExternalValueType() const { return m_aExternalValueType; } - - /** initializes the control from m_xField - - Basically, this method calls transferDbValueToControl - but only if our cursor is positioned - on a valid row. Otherwise, the control is reset. - - @precond - m_xField is not <NULL/> - */ - void initFromField( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxForm ); - -private: - sal_Bool connectToField( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxForm ); - void resetField(); - - /** does a new validation of the control value - - If necessary, our <member>m_bIsCurrentValueValid</member> member will be adjusted, - and changes will be notified. - - Note that it's not necessary that we're connected to a validator. If we are not, - it's assumed that our value is valid, and this is handled appropriately. - - Use this method if there is a potential that <b>only</b> the validity flag changed. If - any of the other aspects (our current value, or our current text) changed, then - pass <TRUE/> for <member>_bForceNotification</member>. - - @param _bForceNotification - if <TRUE/>, then the validity listeners will be notified, not matter whether the validity - changed. - */ - void recheckValidity( bool _bForceNotification ); - - /// initializes m_pAggPropMultiplexer - void implInitAggMultiplexer( ); - - /// initializes listening at the value property - void implInitValuePropertyListening( ) const; - - /** adds or removes the component as load listener to/from our form, and (if necessary) as RowSetChange listener at - our parent. - - @precond there must no external value binding be in place - */ - void doFormListening( const bool _bStart ); - - inline bool isFormListening() const { return m_bFormListening; } - - /** determines the new value of m_xAmbientForm - */ - void impl_determineAmbientForm_nothrow(); - - /** connects to a value supplier which is an database column. - - The column is take from our parent, which must be a database form respectively row set. - - @precond The control does not have an external value supplier - - @param _bFromReload - Determines whether the connection is made after the row set has been loaded (<FALSE/>) - or reloaded (<TRUE/>) - - @see impl_disconnectDatabaseColumn_noNotify - */ - void impl_connectDatabaseColumn_noNotify( - bool _bFromReload - ); - - /** disconnects from a value supplier which is an database column - - @precond The control does not have an external value supplier - @see impl_connectDatabaseColumn_noNotify - */ - void impl_disconnectDatabaseColumn_noNotify(); - - /** connects to an external value binding - - <p>Note that by definition, external data bindings superseede the SQL data binding which - is defined by our RowSet-column-related properties. This means that in case we're currently - connected to a database column when this is called, this connection is suspended.</p> - - @precond - the new external binding has already been approved (see <member>impl_approveValueBinding_nolock</member>) - @precond - there currently is no external binding in place - */ - void connectExternalValueBinding( - const ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XValueBinding >& _rxBinding, - ControlModelLock& _rInstanceLock - ); - - /** disconnects from an external value binding - - @precond - there currently is an external binding in place - */ - void disconnectExternalValueBinding( ); - - /** connects the component to an external validator - - @precond - there currently is no active validator - @precond - our mutex is currently locked exactly once - */ - void connectValidator( - const ::com::sun::star::uno::Reference< ::com::sun::star::form::validation::XValidator >& _rxValidator - ); - - /** disconnects the component from it's current an external validator - - @precond - there currently is an active validator - @precond - our mutex is currently locked exactly once - */ - void disconnectValidator( ); - - /** called from within <member scope="com::sun::star:::form::binding">XBindableValue::setValueBinding</member> - to approve the new binding - - The default implementation approves the binding if and only if it is not <NULL/>, and supports - the type returned by getExternalValueType. - - @param _rxBinding - the binding which applies for being responsible for our value, Must not be - <NULL/> - @return - <TRUE/> if and only if the given binding can supply values in the proper type - - @seealso getExternalValueType - */ - sal_Bool impl_approveValueBinding_nolock( - const ::com::sun::star::uno::Reference< ::com::sun::star::form::binding::XValueBinding >& _rxBinding - ); -}; - - //========================================================================= - //= inlines - //========================================================================= - inline void ControlModelLock::acquire() - { - m_rModel.lockInstance( OControlModel::LockAccess() ); - m_bLocked = true; - } - inline void ControlModelLock::release() - { - OSL_ENSURE( m_bLocked, "ControlModelLock::release: not locked!" ); - m_bLocked = false; - - if ( 0 == m_rModel.unlockInstance( OControlModel::LockAccess() ) ) - impl_notifyAll_nothrow(); - } - -//......................................................................... -} -//......................................................................... - -#endif // _FORMS_FORMCOMPONENT_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/InterfaceContainer.hxx b/forms/source/inc/InterfaceContainer.hxx deleted file mode 100644 index 94ead1fa3..000000000 --- a/forms/source/inc/InterfaceContainer.hxx +++ /dev/null @@ -1,329 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_INTERFACE_CONTAINER_HXX_ -#define _FRM_INTERFACE_CONTAINER_HXX_ - -#include <boost/unordered_map.hpp> -#include <comphelper/stl_types.hxx> -#include <comphelper/types.hxx> -#include <comphelper/uno3.hxx> -#include <com/sun/star/container/XNameReplace.hpp> -#include <com/sun/star/container/XIndexReplace.hpp> -#include <com/sun/star/container/XNameContainer.hpp> -#include <com/sun/star/lang/XEventListener.hpp> -#include <com/sun/star/lang/EventObject.hpp> -#include <com/sun/star/container/XEnumerationAccess.hpp> -#include <com/sun/star/io/XPersistObject.hpp> -#include <com/sun/star/beans/XPropertyChangeListener.hpp> -#include <com/sun/star/beans/PropertyChangeEvent.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/script/XEventAttacherManager.hpp> -#include <com/sun/star/script/ScriptEvent.hpp> -#include <com/sun/star/script/ScriptEventDescriptor.hpp> -#include <com/sun/star/container/XContainer.hpp> -#include <com/sun/star/container/XIndexContainer.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/form/XFormComponent.hpp> -#include <com/sun/star/util/XCloneable.hpp> -#include <osl/mutex.hxx> -#include <cppuhelper/interfacecontainer.hxx> -#include <cppuhelper/component.hxx> -#include <cppuhelper/implbase8.hxx> - -using namespace comphelper; - -//......................................................................... -namespace frm -{ -//......................................................................... - - -//================================================================== - struct ElementDescription - { - public: - ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xInterface; - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropertySet; - ::com::sun::star::uno::Reference< ::com::sun::star::container::XChild > xChild; - ::com::sun::star::uno::Any aElementTypeInterface; - - public: - ElementDescription( ); - virtual ~ElementDescription(); - - private: - ElementDescription( const ElementDescription& ); // never implemented - ElementDescription& operator=( const ElementDescription& ); // never implemented - }; - -typedef ::std::vector<InterfaceRef> OInterfaceArray; -typedef ::boost::unordered_multimap< ::rtl::OUString, InterfaceRef, ::rtl::OUStringHash, ::comphelper::UStringEqual> OInterfaceMap; - -//================================================================== -// OInterfaceContainer -// implements a container for form components -//================================================================== -typedef ::cppu::ImplHelper8 < ::com::sun::star::container::XNameContainer - , ::com::sun::star::container::XIndexContainer - , ::com::sun::star::container::XContainer - , ::com::sun::star::container::XEnumerationAccess - , ::com::sun::star::script::XEventAttacherManager - , ::com::sun::star::beans::XPropertyChangeListener - , ::com::sun::star::io::XPersistObject - , ::com::sun::star::util::XCloneable - > OInterfaceContainer_BASE; - -class OInterfaceContainer : public OInterfaceContainer_BASE -{ -protected: - ::osl::Mutex& m_rMutex; - - OInterfaceArray m_aItems; - OInterfaceMap m_aMap; - ::cppu::OInterfaceContainerHelper m_aContainerListeners; - - const ::com::sun::star::uno::Type m_aElementType; - - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory> m_xServiceFactory; - - - // EventManager - ::com::sun::star::uno::Reference< ::com::sun::star::script::XEventAttacherManager> m_xEventAttacher; - -public: - OInterfaceContainer( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, - ::osl::Mutex& _rMutex, - const ::com::sun::star::uno::Type& _rElementType); - - OInterfaceContainer( ::osl::Mutex& _rMutex, const OInterfaceContainer& _cloneSource ); - - // late constructor for cloning - void clonedFrom( const OInterfaceContainer& _cloneSource ); - -protected: - virtual ~OInterfaceContainer(); - -public: -// ::com::sun::star::io::XPersistObject - virtual ::rtl::OUString SAL_CALL getServiceName( ) throw(::com::sun::star::uno::RuntimeException) = 0; - virtual void SAL_CALL write( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream >& OutStream ) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL read( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream >& InStream ) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::lang::XEventListener - virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::beans::XPropertyChangeListener - virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw (::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::container::XElementAccess - virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw(::com::sun::star::uno::RuntimeException) ; - virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::container::XEnumerationAccess - virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration> SAL_CALL createEnumeration() throw(::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::container::XNameAccess - virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual StringSequence SAL_CALL getElementNames( ) throw(::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw(::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::container::XNameReplace - virtual void SAL_CALL replaceByName(const ::rtl::OUString& Name, const ::com::sun::star::uno::Any& _rElement) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::container::XNameContainer - virtual void SAL_CALL insertByName(const ::rtl::OUString& Name, const ::com::sun::star::uno::Any& _rElement) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeByName(const ::rtl::OUString& Name) throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::container::XIndexAccess - virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 _nIndex) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::container::XIndexReplace - virtual void SAL_CALL replaceByIndex(sal_Int32 _nIndex, const ::com::sun::star::uno::Any& _rElement) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::container::XIndexContainer - virtual void SAL_CALL insertByIndex(sal_Int32 _nIndex, const ::com::sun::star::uno::Any& Element) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeByIndex(sal_Int32 _nIndex) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::container::XContainer - virtual void SAL_CALL addContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); - -// ::com::sun::star::script::XEventAttacherManager - virtual void SAL_CALL registerScriptEvent( sal_Int32 nIndex, const ::com::sun::star::script::ScriptEventDescriptor& aScriptEvent ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL registerScriptEvents( sal_Int32 nIndex, const ::com::sun::star::uno::Sequence< ::com::sun::star::script::ScriptEventDescriptor >& aScriptEvents ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL revokeScriptEvent( sal_Int32 nIndex, const ::rtl::OUString& aListenerType, const ::rtl::OUString& aEventMethod, const ::rtl::OUString& aRemoveListenerParam ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL revokeScriptEvents( sal_Int32 nIndex ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL insertEntry( sal_Int32 nIndex ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeEntry( sal_Int32 nIndex ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::script::ScriptEventDescriptor > SAL_CALL getScriptEvents( sal_Int32 Index ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL attach( sal_Int32 nIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xObject, const ::com::sun::star::uno::Any& aHelper ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::ServiceNotRegisteredException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL detach( sal_Int32 nIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xObject ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addScriptListener( const ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener >& xListener ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeScriptListener( const ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener >& Listener ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - -protected: - // helper - virtual void SAL_CALL disposing(); - virtual void removeElementsNoEvents(sal_Int32 nIndex); - - /** to be overridden if elements which are to be inserted into the container shall be checked - - <p>the ElementDescription given can be used to cache information about the object - it will be passed - later on to implInserted/implReplaced.</p> - */ - virtual void approveNewElement( - const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxObject, - ElementDescription* _pElement - ); - - virtual ElementDescription* createElementMetaData( ); - - /** inserts an object into our internal structures - - @param _nIndex - the index at which position it should be inserted - @param _bEvents - if <TRUE/>, event knittings will be done - @param _pApprovalResult - must contain the result of an approveNewElement call. Can be <NULL/>, in this case, the approval - is done within implInsert. - @param _bFire - if <TRUE/>, a notification about the insertion will be fired - */ - void implInsert( - sal_Int32 _nIndex, - const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxObject, - sal_Bool _bEvents /* = sal_True */, - ElementDescription* _pApprovalResult /* = NULL */ , - sal_Bool _bFire /* = sal_True */ - ) throw(::com::sun::star::lang::IllegalArgumentException); - - // called after the object is inserted, but before the "real listeners" are notified - virtual void implInserted( const ElementDescription* _pElement ); - // called after the object is removed, but before the "real listeners" are notified - virtual void implRemoved(const InterfaceRef& _rxObject); - - /** called after an object was replaced. The default implementation notifies our listeners, after releasing - the instance lock. - */ - virtual void impl_replacedElement( - const ::com::sun::star::container::ContainerEvent& _rEvent, - ::osl::ClearableMutexGuard& _rInstanceLock - ); - - void SAL_CALL writeEvents(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream); - void SAL_CALL readEvents(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream); - - /** replace an element, specified by position - - @precond <arg>_nIndex</arg> is a valid index - @precond our mutex is locked exactly once, by the guard specified with <arg>_rClearBeforeNotify</arg> - - */ - void implReplaceByIndex( - const sal_Int32 _nIndex, - const ::com::sun::star::uno::Any& _rNewElement, - ::osl::ClearableMutexGuard& _rClearBeforeNotify - ); - - /** removes an element, specified by position - - @precond <arg>_nIndex</arg> is a valid index - @precond our mutex is locked exactly once, by the guard specified with <arg>_rClearBeforeNotify</arg> - - */ - void implRemoveByIndex( - const sal_Int32 _nIndex, - ::osl::ClearableMutexGuard& _rClearBeforeNotify - ); - - /** validates the given index - @throws ::com::sun::star::lang::IndexOutOfBoundsException - if the given index does not denote a valid position in our childs array - */ - void implCheckIndex( const sal_Int32 _nIndex ) SAL_THROW( ( ::com::sun::star::lang::IndexOutOfBoundsException ) ); - -private: - // hack for Vba Events - void impl_addVbEvents_nolck_nothrow( const sal_Int32 i_nIndex ); - - // the runtime event format has changed from version SO5.2 to OOo - enum EventFormat - { - efVersionSO5x, - efVersionSO6x - }; - void transformEvents( const EventFormat _eTargetFormat ); - - void impl_createEventAttacher_nothrow(); -}; - -//================================================================== -//= OFormComponents -//================================================================== -typedef ::cppu::ImplHelper1< ::com::sun::star::form::XFormComponent> OFormComponents_BASE; -typedef ::cppu::OComponentHelper FormComponentsBase; - // else MSVC kills itself on some statements -class OFormComponents :public FormComponentsBase - ,public OInterfaceContainer - ,public OFormComponents_BASE -{ -protected: - ::osl::Mutex m_aMutex; - ::comphelper::InterfaceRef m_xParent; - -public: - OFormComponents(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); - OFormComponents( const OFormComponents& _cloneSource ); - virtual ~OFormComponents(); - - DECLARE_UNO3_AGG_DEFAULTS(OFormComponents, FormComponentsBase); - - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); - -// OComponentHelper - virtual void SAL_CALL disposing(); - -// ::com::sun::star::form::XFormComponent - virtual ::comphelper::InterfaceRef SAL_CALL getParent() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setParent(const ::comphelper::InterfaceRef& Parent) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); - - // XEventListener - using OInterfaceContainer::disposing; -}; -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FRM_INTERFACE_CONTAINER_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/cloneable.hxx b/forms/source/inc/cloneable.hxx deleted file mode 100644 index d08caa881..000000000 --- a/forms/source/inc/cloneable.hxx +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_COMPONENT_CLONEABLE_HXX -#define FORMS_COMPONENT_CLONEABLE_HXX - -#include <com/sun/star/uno/XAggregation.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - - //==================================================================== - //= OCloneableAggregation - //==================================================================== - class OCloneableAggregation - { - protected: - ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation> m_xAggregate; - - protected: - static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation > createAggregateClone( const OCloneableAggregation* _pOriginal ); - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_COMPONENT_CLONEABLE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/commanddescriptionprovider.hxx b/forms/source/inc/commanddescriptionprovider.hxx deleted file mode 100644 index 986f24a79..000000000 --- a/forms/source/inc/commanddescriptionprovider.hxx +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * -************************************************************************/ - -#ifndef COMMANDDESCRIPTIONPROVIDER_HXX -#define COMMANDDESCRIPTIONPROVIDER_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/frame/XModel.hpp> -/** === end UNO includes === **/ - -#include <comphelper/componentcontext.hxx> - -#include <boost/shared_ptr.hpp> - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= ICommandDescriptionProvider - //==================================================================== - class SAL_NO_VTABLE ICommandDescriptionProvider - { - public: - virtual ::rtl::OUString getCommandDescription( const ::rtl::OUString& _rCommandURL ) const = 0; - - virtual ~ICommandDescriptionProvider() { } - }; - - typedef ::boost::shared_ptr< const ICommandDescriptionProvider > PCommandDescriptionProvider; - - //===================================================================== - //= factory - //===================================================================== - PCommandDescriptionProvider - createDocumentCommandDescriptionProvider( - const ::comphelper::ComponentContext& _rContext, - const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& _rxDocument - ); - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // COMMANDDESCRIPTIONPROVIDER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/commandimageprovider.hxx b/forms/source/inc/commandimageprovider.hxx deleted file mode 100644 index caf19b4f2..000000000 --- a/forms/source/inc/commandimageprovider.hxx +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * -************************************************************************/ - -#ifndef COMMANDIMAGEPROVIDER_HXX -#define COMMANDIMAGEPROVIDER_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/frame/XModel.hpp> -/** === end UNO includes === **/ - -#include <comphelper/componentcontext.hxx> -#include <vcl/image.hxx> - -#include <boost/shared_ptr.hpp> - -//........................................................................ -namespace frm -{ -//........................................................................ - - //===================================================================== - //= ICommandImageProvider - //===================================================================== - typedef ::rtl::OUString CommandURL; - typedef ::com::sun::star::uno::Sequence< CommandURL > CommandURLs; - typedef ::std::vector< Image > CommandImages; - - class SAL_NO_VTABLE ICommandImageProvider - { - public: - virtual CommandImages getCommandImages( - const CommandURLs& _rCommandURLs, - const bool _bLarge - ) const = 0; - - virtual ~ICommandImageProvider() { } - }; - - typedef ::boost::shared_ptr< const ICommandImageProvider > PCommandImageProvider; - - //===================================================================== - //= factory - //===================================================================== - PCommandImageProvider - createDocumentCommandImageProvider( - const ::comphelper::ComponentContext& _rContext, - const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& _rxDocument - ); - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // COMMANDIMAGEPROVIDER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/componenttools.hxx b/forms/source/inc/componenttools.hxx deleted file mode 100644 index 8b20881e5..000000000 --- a/forms/source/inc/componenttools.hxx +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_INC_COMPONENTTOOLS_HXX -#define FORMS_SOURCE_INC_COMPONENTTOOLS_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/uno/Type.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/frame/XModel.hpp> -/** === end UNO includes === **/ - -#include <set> -#include <functional> - -//........................................................................ -namespace frm -{ -//........................................................................ - - struct TypeCompareLess : public ::std::binary_function< ::com::sun::star::uno::Type, ::com::sun::star::uno::Type, bool > - { - private: - typedef ::com::sun::star::uno::Type Type; - - public: - bool operator()( const Type& _rLHS, const Type& _rRHS ) const - { - return _rLHS.getTypeName() < _rRHS.getTypeName(); - } - }; - - //==================================================================== - //= TypeBag - //==================================================================== - /** a helper class which merges sequences of <type scope="com::sun::star::uno">Type</type>s, - so that the resulting sequence contains every type at most once - */ - class TypeBag - { - public: - typedef ::com::sun::star::uno::Type Type; - typedef ::com::sun::star::uno::Sequence< Type > TypeSequence; - typedef ::std::set< Type, TypeCompareLess > TypeSet; - - private: - TypeSet m_aTypes; - - public: - TypeBag( - const TypeSequence& _rTypes1 - ); - - TypeBag( - const TypeSequence& _rTypes1, - const TypeSequence& _rTypes2 - ); - TypeBag( - const TypeSequence& _rTypes1, - const TypeSequence& _rTypes2, - const TypeSequence& _rTypes3 - ); - - void addType( const Type& i_rType ); - void addTypes( const TypeSequence& _rTypes ); - void removeType( const Type& i_rType ); - - /** returns the types represented by this bag - */ - TypeSequence getTypes() const; - }; - - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > getXModel( - const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxComponent ); - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_INC_COMPONENTTOOLS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/controlfeatureinterception.hxx b/forms/source/inc/controlfeatureinterception.hxx deleted file mode 100644 index 9bb809656..000000000 --- a/forms/source/inc/controlfeatureinterception.hxx +++ /dev/null @@ -1,102 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_INC_CONTROLFEATUREINTERCEPTION_HXX -#define FORMS_SOURCE_INC_CONTROLFEATUREINTERCEPTION_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/frame/XDispatchProviderInterceptor.hpp> -/** === end UNO includes === **/ - -#include <memory> - -//........................................................................ -namespace frm -{ -//........................................................................ - - class UrlTransformer; - //==================================================================== - //= ControlFeatureInterception - //==================================================================== - /** helper class for controls which allow some of their features to be intercepted - by external instances - - For using this class, instantiate it as member, derive yourself from - <type scope="com::sun::star::frame">XDispatchProviderInterception</type>, and forward all - respective methods to this member. - - Additionally, don't forget to call <member>dispose</member> when your class is disposed itself. - */ - class ControlFeatureInterception - { - private: - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor > - m_xFirstDispatchInterceptor; - ::std::auto_ptr< UrlTransformer > m_pUrlTransformer; - - public: - /** retrieves our URL transformer, so our clients may use it, too - */ - const UrlTransformer& getTransformer() const { return *m_pUrlTransformer; } - - public: - ControlFeatureInterception( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB ); - - // XDispatchProviderInterception - void SAL_CALL registerDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException ); - void SAL_CALL releaseDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException ); - - // XComponent - void SAL_CALL dispose(); - - /** queries the interceptor chain for the given dispatch - */ - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > - queryDispatch( const ::com::sun::star::util::URL& _rURL, const ::rtl::OUString& _rTargetFrameName, ::sal_Int32 _nSearchFlags ) SAL_THROW((::com::sun::star::uno::RuntimeException)); - - /** queries the interceptor chain for the given dispatch, with a blank target frame and no frame search flags - */ - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > - queryDispatch( const ::com::sun::star::util::URL& _rURL ) SAL_THROW((::com::sun::star::uno::RuntimeException)); - - /** queries the interceptor chain for the URL given as ASCII string, - with a blank target frame and no frame search flags - */ - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > - queryDispatch( const sal_Char* _pAsciiURL ) SAL_THROW((::com::sun::star::uno::RuntimeException)); - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_INC_CONTROLFEATUREINTERCEPTION_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/featuredispatcher.hxx b/forms/source/inc/featuredispatcher.hxx deleted file mode 100644 index bca3431d6..000000000 --- a/forms/source/inc/featuredispatcher.hxx +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOLAR_DISPATCHER_HXX -#define FORMS_SOLAR_DISPATCHER_HXX - -#include <rtl/ustring.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... - - //========================================================================= - //= IFeatureDispatcher - //========================================================================= - class IFeatureDispatcher - { - public: - /** dispatches a feature - - @param _nFeatureId - the id of the feature to dispatch - */ - virtual void dispatch( sal_Int16 _nFeatureId ) const = 0; - - /** dispatches a feature, with an additional named parameter - - @param _nFeatureId - the id of the feature to dispatch - - @param _pParamAsciiName - the Ascii name of the parameter of the dispatch call - - @param _rParamValue - the value of the parameter of the dispatch call - */ - virtual void dispatchWithArgument( - sal_Int16 _nFeatureId, - const sal_Char* _pParamName, - const ::com::sun::star::uno::Any& _rParamValue - ) const = 0; - - /** checks whether a given feature is enabled - */ - virtual bool isEnabled( sal_Int16 _nFeatureId ) const = 0; - - /** returns the boolean state of a feature - - Certain features may support more status information than only the enabled/disabled - state. The type of such additional information is fixed relative to a given feature, but - may differ between different features. - - This method allows retrieving status information about features which have an additional - boolean information associated with it. - */ - virtual bool getBooleanState( sal_Int16 _nFeatureId ) const = 0; - - /** returns the string state of a feature - - Certain features may support more status information than only the enabled/disabled - state. The type of such additional information is fixed relative to a given feature, but - may differ between different features. - - This method allows retrieving status information about features which have an additional - string information associated with it. - */ - virtual ::rtl::OUString getStringState( sal_Int16 _nFeatureId ) const = 0; - - /** returns the integer state of a feature - - Certain features may support more status information than only the enabled/disabled - state. The type of such additional information is fixed relative to a given feature, but - may differ between different features. - - This method allows retrieving status information about features which have an additional - integer information associated with it. - */ - virtual sal_Int32 getIntegerState( sal_Int16 _nFeatureId ) const = 0; - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_SOLAR_DISPATCHER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/formcontrolfont.hxx b/forms/source/inc/formcontrolfont.hxx deleted file mode 100644 index 1460aa0cf..000000000 --- a/forms/source/inc/formcontrolfont.hxx +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_COMPONENT_FORMCONTROLFONT_HXX -#define FORMS_SOURCE_COMPONENT_FORMCONTROLFONT_HXX - -#include <com/sun/star/io/XObjectOutputStream.hpp> -#include <com/sun/star/awt/FontDescriptor.hpp> -#include <com/sun/star/beans/Property.hpp> -#include <com/sun/star/lang/IllegalArgumentException.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - - //===================================================================== - //= FontControlModel - //===================================================================== - class FontControlModel - { - private: - // <properties> - ::com::sun::star::awt::FontDescriptor m_aFont; - sal_Int16 m_nFontRelief; - sal_Int16 m_nFontEmphasis; - ::com::sun::star::uno::Any m_aTextLineColor; - ::com::sun::star::uno::Any m_aTextColor; - // </properties> - - bool m_bToolkitCompatibleDefaults; - - protected: - const ::com::sun::star::awt::FontDescriptor& getFont() const { return m_aFont; } - void setFont( const ::com::sun::star::awt::FontDescriptor& _rFont ) { m_aFont = _rFont; } - - void setTextColor( sal_Int32 _nColor ) { m_aTextColor <<= _nColor; } - void clearTextColor( ) { m_aTextColor.clear(); } - bool hasTextColor( ) const { return m_aTextColor.hasValue(); } - sal_Int32 getTextColor( ) const; - - void setTextLineColor( sal_Int32 _nColor ) { m_aTextLineColor <<= _nColor; } - void clearTextLineColor( ) { m_aTextLineColor.clear(); } - bool hasTextLineColor( ) const { return m_aTextLineColor.hasValue(); } - sal_Int32 getTextLineColor( ) const; - - protected: - FontControlModel( bool _bToolkitCompatibleDefaults ); - FontControlModel( const FontControlModel* _pOriginal ); - - protected: - bool isFontRelatedProperty( sal_Int32 _nPropertyHandle ) const; - bool isFontAggregateProperty( sal_Int32 _nPropertyHandle ) const; - - /// appends (!) the description of all font related properties to the given sequence - void describeFontRelatedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps ) const; - - void getFastPropertyValue ( ::com::sun::star::uno::Any& _rValue, sal_Int32 _nHandle ) const; - sal_Bool convertFastPropertyValue ( ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) throw( ::com::sun::star::lang::IllegalArgumentException ); - void setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) throw ( ::com::sun::star::uno::Exception ); - ::com::sun::star::uno::Any - getPropertyDefaultByHandle ( sal_Int32 _nHandle ) const; - - private: - - private: - FontControlModel(); // never implemented - FontControlModel( const FontControlModel& ); // never implemented - FontControlModel& operator=( const FontControlModel& ); // never implemented - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_SOURCE_COMPONENT_FORMCONTROLFONT_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/formnavigation.hxx b/forms/source/inc/formnavigation.hxx deleted file mode 100644 index 095ecba2c..000000000 --- a/forms/source/inc/formnavigation.hxx +++ /dev/null @@ -1,238 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_FORM_NAVIGATION_HXX -#define FORMS_FORM_NAVIGATION_HXX - -#include <com/sun/star/frame/XDispatchProviderInterception.hpp> -#include <com/sun/star/frame/XStatusListener.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/util/XURLTransformer.hpp> -#include <cppuhelper/implbase2.hxx> -#include "featuredispatcher.hxx" -#include <vector> -#include <map> -#include <memory> - - -//......................................................................... -namespace frm -{ -//......................................................................... - - class UrlTransformer; - class ControlFeatureInterception; - - //================================================================== - //= OFormNavigationHelper - //================================================================== - typedef ::cppu::ImplHelper2 < ::com::sun::star::frame::XDispatchProviderInterception - , ::com::sun::star::frame::XStatusListener - > OFormNavigationHelper_Base; - - class OFormNavigationHelper - :public OFormNavigationHelper_Base - ,public IFeatureDispatcher - { - private: - struct FeatureInfo - { - ::com::sun::star::util::URL aURL; - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xDispatcher; - sal_Bool bCachedState; - ::com::sun::star::uno::Any aCachedAdditionalState; - - FeatureInfo() : bCachedState( sal_False ) { } - }; - typedef ::std::map< sal_Int16, FeatureInfo > FeatureMap; - - private: - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > - m_xORB; - ::std::auto_ptr< ControlFeatureInterception > - m_pFeatureInterception; - - // all supported features - FeatureMap m_aSupportedFeatures; - // all features which we have an external dispatcher for - sal_Int32 m_nConnectedFeatures; - - protected: - inline const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& - getORB( ) const { return m_xORB; } - - protected: - OFormNavigationHelper( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB ); - virtual ~OFormNavigationHelper(); - - // XComponent - void SAL_CALL dispose( ) throw( ::com::sun::star::uno::RuntimeException ); - - // XDispatchProviderInterception - virtual void SAL_CALL registerDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL releaseDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException); - - // XStatusListener - virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& State ) throw (::com::sun::star::uno::RuntimeException); - - // XEventListener - virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); - - // IFeatureDispatcher - virtual void dispatch( sal_Int16 _nFeatureId ) const; - virtual void dispatchWithArgument( sal_Int16 _nFeatureId, const sal_Char* _pParamName, const ::com::sun::star::uno::Any& _rParamValue ) const; - virtual bool isEnabled( sal_Int16 _nFeatureId ) const; - virtual bool getBooleanState( sal_Int16 _nFeatureId ) const; - virtual ::rtl::OUString getStringState( sal_Int16 _nFeatureId ) const; - virtual sal_Int32 getIntegerState( sal_Int16 _nFeatureId ) const; - - // own overridables - /** is called when the interceptors have. - <p>The default implementations simply calls <member>updateDispatches</member>, - derived classes can prevent this in certain cases, or do additional handling.</p> - */ - virtual void interceptorsChanged( ); - - /** called when the status of a feature changed - - <p>The default implementation does nothing.</p> - - <p>If the feature in question does support more state information that just the - enabled/disabled state, then this additional information is to be retrieved in - a separate call.</p> - - @param _nFeatureId - the id of the feature - @param _bEnabled - determines if the features is enabled or disabled - @see getBooleanState - */ - virtual void featureStateChanged( sal_Int16 _nFeatureId, sal_Bool _bEnabled ); - - /** notification for (potential) changes in the state of all features - <p>The base class implementation does nothing. Derived classes could force - their peer to update it's state, depending on the result of calls to - <member>IFeatureDispatcher::isEnabled</member>.</p> - */ - virtual void allFeatureStatesChanged( ); - - /** retrieves the list of supported features - <p>To be overridden by derived classes</p> - @param _rFeatureIds - the array of features to support. Out parameter to fill by the derivee's implementation - @pure - */ - virtual void getSupportedFeatures( ::std::vector< sal_Int16 >& /* [out] */ _rFeatureIds ) = 0; - - protected: - /** update all our dispatches which are controlled by our dispatch interceptors - */ - void updateDispatches(); - - /** connect to the dispatch interceptors - */ - void connectDispatchers(); - - /** disconnect from the dispatch interceptors - */ - void disconnectDispatchers(); - - /** queries the interceptor chain for a dispatcher for the given URL - */ - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > - queryDispatch( const ::com::sun::star::util::URL& _rURL ); - - /** invalidates the set of supported features - - <p>This will invalidate all structures which are tied to the set of supported - features. All dispatches will be disconnected.<br/> - No automatic re-connection to potential external dispatchers is done, instead, - you have to call updateDispatches explicitly, if necessary.</p> - */ - void invalidateSupportedFeaturesSet(); - - private: - /** initialize m_aSupportedFeatures, if necessary - */ - void initializeSupportedFeatures(); - }; - - //================================================================== - //= OFormNavigationMapper - //================================================================== - /** helper class mapping between feature ids and feature URLs - */ - class OFormNavigationMapper - { - private: - ::std::auto_ptr< UrlTransformer > m_pUrlTransformer; - - public: - OFormNavigationMapper( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB - ); - ~OFormNavigationMapper( ); - - /** retrieves the ASCII representation of a feature URL belonging to an id - - @complexity O(log n) - @return NULL if the given id is not a known feature id (which is a valid usage) - */ - const char* getFeatureURLAscii( sal_Int16 _nFeatureId ); - - /** retrieves the feature URL belonging to an feature id - - @complexity O(log n), with n being the number of all potentially known URLs - @return - <TRUE/> if and only if the given id is a known feature id - (which is a valid usage) - */ - bool getFeatureURL( sal_Int16 _nFeatureId, ::com::sun::star::util::URL& /* [out] */ _rURL ); - - /** retrieves the feature id belonging to an feature URL - - @complexity O(n), with n being the number of all potentially known URLs - @return - the id of the feature URL, or -1 if the URl is not known - (which is a valid usage) - */ - sal_Int16 getFeatureId( const ::rtl::OUString& _rCompleteURL ); - - private: - OFormNavigationMapper( ); // never implemented - OFormNavigationMapper( const OFormNavigationMapper& ); // never implemented - OFormNavigationMapper& operator=( const OFormNavigationMapper& ); // never implemented - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_FORM_NAVIGATION_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/forms_module.hxx b/forms/source/inc/forms_module.hxx deleted file mode 100644 index 6fc259ad8..000000000 --- a/forms/source/inc/forms_module.hxx +++ /dev/null @@ -1,320 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_MODULE_INCLUDE_CONTEXT - #error "not to be included directly! use 'foo_module.hxx instead'!" -#endif - -#ifndef FORMS_MODULE_NAMESPACE - #error "set FORMS_MODULE_NAMESPACE to your namespace identifier!" -#endif - -#include <osl/mutex.hxx> -#include <tools/resid.hxx> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/lang/XSingleServiceFactory.hpp> -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/registry/XRegistryKey.hpp> -#include <cppuhelper/factory.hxx> -#include <rtl/string.hxx> - -//......................................................................... -namespace FORMS_MODULE_NAMESPACE -{ -//......................................................................... - - typedef ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory > (SAL_CALL *FactoryInstantiation) - ( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rServiceManager, - const ::rtl::OUString & _rComponentName, - ::cppu::ComponentInstantiation _pCreateFunction, - const ::com::sun::star::uno::Sequence< ::rtl::OUString > & _rServiceNames, - rtl_ModuleCount* _pModuleCounter - ); - - //========================================================================= - //= OFormsModule - //========================================================================= - class OFormsModule - { - private: - OFormsModule(); - // not implemented. OFormsModule is a static class - - protected: - // auto registration administration - static ::com::sun::star::uno::Sequence< ::rtl::OUString >* - s_pImplementationNames; - static ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > >* - s_pSupportedServices; - static ::com::sun::star::uno::Sequence< sal_Int64 >* - s_pCreationFunctionPointers; - static ::com::sun::star::uno::Sequence< sal_Int64 >* - s_pFactoryFunctionPointers; - - public: - /** register a component implementing a service with the given data. - @param _rImplementationName - the implementation name of the component - @param _rServiceNames - the services the component supports - @param _pCreateFunction - a function for creating an instance of the component - @param _pFactoryFunction - a function for creating a factory for that component - @see revokeComponent - */ - static void registerComponent( - const ::rtl::OUString& _rImplementationName, - const ::com::sun::star::uno::Sequence< ::rtl::OUString >& _rServiceNames, - ::cppu::ComponentInstantiation _pCreateFunction, - FactoryInstantiation _pFactoryFunction); - - /** revoke the registration for the specified component - @param _rImplementationName - the implementation name of the component - */ - static void revokeComponent( - const ::rtl::OUString& _rImplementationName); - - /** creates a Factory for the component with the given implementation name. - <p>Usually used from within component_getFactory.<p/> - @param _rxServiceManager - a pointer to an XMultiServiceFactory interface as got in component_getFactory - @param _pImplementationName - the implementation name of the component - @return - the XInterface access to a factory for the component - */ - static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getComponentFactory( - const ::rtl::OUString& _rImplementationName, - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxServiceManager - ); - - private: - /** ensure that the impl class exists - @precond m_aMutex is guarded when this method gets called - */ - static void ensureImpl(); - }; - - //========================================================================== - //= OMultiInstanceAutoRegistration - //========================================================================== - template <class TYPE> - class OMultiInstanceAutoRegistration - { - public: - /** automatically registeres a multi instance component - <p>Assumed that the template argument has the three methods - <ul> - <li><code>static ::rtl::OUString getImplementationName_Static()</code><li/> - <li><code>static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static()</code><li/> - <li><code>static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > - Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&)</code> - </li> - <ul/> - the instantiation of this object will automatically register the class via <method>OFormsModule::registerComponent</method>. - <p/> - <p>The factory creation function used is <code>::cppu::createSingleFactory</code>.</p> - - @see OOneInstanceAutoRegistration - */ - OMultiInstanceAutoRegistration(); - ~OMultiInstanceAutoRegistration(); - }; - - template <class TYPE> - OMultiInstanceAutoRegistration<TYPE>::OMultiInstanceAutoRegistration() - { - OFormsModule::registerComponent( - TYPE::getImplementationName_Static(), - TYPE::getSupportedServiceNames_Static(), - TYPE::Create, - ::cppu::createSingleFactory - ); - } - - template <class TYPE> - OMultiInstanceAutoRegistration<TYPE>::~OMultiInstanceAutoRegistration() - { - OFormsModule::revokeComponent(TYPE::getImplementationName_Static()); - } - - //========================================================================== - //= OOneInstanceAutoRegistration - //========================================================================== - template <class TYPE> - class OOneInstanceAutoRegistration - { - public: - /** automatically registeres a single instance component - <p>Assumed that the template argument has the three methods - <ul> - <li><code>static ::rtl::OUString getImplementationName_Static()</code><li/> - <li><code>static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static()</code><li/> - <li><code>static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > - Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&)</code> - </li> - <ul/> - the instantiation of this object will automatically register the class via <method>OFormsModule::registerComponent</method>. - <p/> - The factory creation function used is <code>::cppu::createOneInstanceFactory</code>. - @see OOneInstanceAutoRegistration - */ - OOneInstanceAutoRegistration(); - ~OOneInstanceAutoRegistration(); - }; - - template <class TYPE> - OOneInstanceAutoRegistration<TYPE>::OOneInstanceAutoRegistration() - { - OFormsModule::registerComponent( - TYPE::getImplementationName_Static(), - TYPE::getSupportedServiceNames_Static(), - TYPE::Create, - ::cppu::createOneInstanceFactory - ); - } - - template <class TYPE> - OOneInstanceAutoRegistration<TYPE>::~OOneInstanceAutoRegistration() - { - OFormsModule::revokeComponent(TYPE::getImplementationName_Static()); - } - - //========================================================================== - //= helper for classes implementing the service handling via - //= OMultiInstanceAutoRegistration or OOneInstanceAutoRegistration - //========================================================================== - #define DECLARE_SERVICE_REGISTRATION( classname ) \ - virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException); \ - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); \ - \ - static ::rtl::OUString SAL_CALL getImplementationName_Static(); \ - static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static(); \ - static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory ); \ - \ - friend class OOneInstanceAutoRegistration< classname >; \ - friend class OMultiInstanceAutoRegistration< classname >; \ - - #define IMPLEMENT_SERVICE_REGISTRATION_BASE( classname, baseclass ) \ - \ - ::rtl::OUString SAL_CALL classname::getImplementationName( ) throw ( RuntimeException ) \ - { return getImplementationName_Static(); } \ - \ - Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames( ) throw (RuntimeException) \ - { \ - return ::comphelper::concatSequences( \ - getAggregateServiceNames(), \ - getSupportedServiceNames_Static() \ - ); \ - } \ - \ - ::rtl::OUString SAL_CALL classname::getImplementationName_Static() \ - { return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.forms."#classname ) ); } \ - \ - Reference< XInterface > SAL_CALL classname::Create( const Reference< XMultiServiceFactory >& _rxFactory ) \ - { return static_cast< XServiceInfo* >( new classname( _rxFactory ) ); } \ - \ - - #define IMPLEMENT_SERVICE_REGISTRATION_1( classname, baseclass, service1 ) \ - IMPLEMENT_SERVICE_REGISTRATION_BASE( classname, baseclass ) \ - \ - Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames_Static() \ - { \ - Sequence< ::rtl::OUString > aOwnNames( 1 ); \ - aOwnNames[ 0 ] = service1; \ - \ - return ::comphelper::concatSequences( \ - baseclass::getSupportedServiceNames_Static(), \ - aOwnNames \ - ); \ - } \ - - #define IMPLEMENT_SERVICE_REGISTRATION_2( classname, baseclass, service1, service2 ) \ - IMPLEMENT_SERVICE_REGISTRATION_BASE( classname, baseclass ) \ - \ - Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames_Static() \ - { \ - Sequence< ::rtl::OUString > aOwnNames( 2 ); \ - aOwnNames[ 0 ] = service1; \ - aOwnNames[ 1 ] = service2; \ - \ - return ::comphelper::concatSequences( \ - baseclass::getSupportedServiceNames_Static(), \ - aOwnNames \ - ); \ - } \ - - #define IMPLEMENT_SERVICE_REGISTRATION_7( classname, baseclass, service1, service2, service3, service4 , service5, service6, service7 ) \ - IMPLEMENT_SERVICE_REGISTRATION_BASE( classname, baseclass ) \ - \ - Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames_Static() \ - { \ - Sequence< ::rtl::OUString > aOwnNames( 7 ); \ - aOwnNames[ 0 ] = service1; \ - aOwnNames[ 1 ] = service2; \ - aOwnNames[ 2 ] = service3; \ - aOwnNames[ 3 ] = service4; \ - aOwnNames[ 4 ] = service5; \ - aOwnNames[ 5 ] = service6; \ - aOwnNames[ 6 ] = service7; \ - \ - return ::comphelper::concatSequences( \ - baseclass::getSupportedServiceNames_Static(), \ - aOwnNames \ - ); \ - } \ - - #define IMPLEMENT_SERVICE_REGISTRATION_8( classname, baseclass, service1, service2, service3, service4 , service5, service6, service7, service8 ) \ - IMPLEMENT_SERVICE_REGISTRATION_BASE( classname, baseclass ) \ - \ - Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames_Static() \ - { \ - Sequence< ::rtl::OUString > aOwnNames( 8 ); \ - aOwnNames[ 0 ] = service1; \ - aOwnNames[ 1 ] = service2; \ - aOwnNames[ 2 ] = service3; \ - aOwnNames[ 3 ] = service4; \ - aOwnNames[ 4 ] = service5; \ - aOwnNames[ 5 ] = service6; \ - aOwnNames[ 6 ] = service7; \ - aOwnNames[ 6 ] = service8; \ - \ - return ::comphelper::concatSequences( \ - baseclass::getSupportedServiceNames_Static(), \ - aOwnNames \ - ); \ - } \ - -//......................................................................... -} // namespace FORMS_MODULE_NAMESPACE -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/forms_module_impl.hxx b/forms/source/inc/forms_module_impl.hxx deleted file mode 100644 index 06a1d46ad..000000000 --- a/forms/source/inc/forms_module_impl.hxx +++ /dev/null @@ -1,163 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#ifndef FORMS_MODULE_IMPLEMENTATION_INCLUDE_CONTEXT - #error "not to be included directly! use 'foo_module.hxx instead'!" -#endif - -#ifndef FORMS_MODULE_NAMESPACE - #error "set FORMS_MODULE_NAMESPACE to your namespace identifier!" -#endif - -#include <comphelper/sequence.hxx> - -//......................................................................... -namespace FORMS_MODULE_NAMESPACE -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::registry; - using namespace ::comphelper; - using namespace ::cppu; - - //========================================================================= - //= OFormsModule - //========================================================================= - - //-------------------------------------------------------------------------- - //- registration helper - //-------------------------------------------------------------------------- - - Sequence< ::rtl::OUString >* OFormsModule::s_pImplementationNames = NULL; - Sequence< Sequence< ::rtl::OUString > >* OFormsModule::s_pSupportedServices = NULL; - Sequence< sal_Int64 >* OFormsModule::s_pCreationFunctionPointers = NULL; - Sequence< sal_Int64 >* OFormsModule::s_pFactoryFunctionPointers = NULL; - - //-------------------------------------------------------------------------- - void OFormsModule::registerComponent( - const ::rtl::OUString& _rImplementationName, - const Sequence< ::rtl::OUString >& _rServiceNames, - ComponentInstantiation _pCreateFunction, - FactoryInstantiation _pFactoryFunction) - { - if (!s_pImplementationNames) - { - OSL_ENSURE(!s_pSupportedServices && !s_pCreationFunctionPointers && !s_pFactoryFunctionPointers, - "OFormsModule::registerComponent : inconsistent state (the pointers (1)) !"); - s_pImplementationNames = new Sequence< ::rtl::OUString >; - s_pSupportedServices = new Sequence< Sequence< ::rtl::OUString > >; - s_pCreationFunctionPointers = new Sequence< sal_Int64 >; - s_pFactoryFunctionPointers = new Sequence< sal_Int64 >; - } - OSL_ENSURE(s_pImplementationNames && s_pSupportedServices && s_pCreationFunctionPointers && s_pFactoryFunctionPointers, - "OFormsModule::registerComponent : inconsistent state (the pointers (2)) !"); - - OSL_ENSURE( (s_pImplementationNames->getLength() == s_pSupportedServices->getLength()) - && (s_pImplementationNames->getLength() == s_pCreationFunctionPointers->getLength()) - && (s_pImplementationNames->getLength() == s_pFactoryFunctionPointers->getLength()), - "OFormsModule::registerComponent : inconsistent state !"); - - sal_Int32 nOldLen = s_pImplementationNames->getLength(); - s_pImplementationNames->realloc(nOldLen + 1); - s_pSupportedServices->realloc(nOldLen + 1); - s_pCreationFunctionPointers->realloc(nOldLen + 1); - s_pFactoryFunctionPointers->realloc(nOldLen + 1); - - s_pImplementationNames->getArray()[nOldLen] = _rImplementationName; - s_pSupportedServices->getArray()[nOldLen] = _rServiceNames; - s_pCreationFunctionPointers->getArray()[nOldLen] = reinterpret_cast<sal_Int64>(_pCreateFunction); - s_pFactoryFunctionPointers->getArray()[nOldLen] = reinterpret_cast<sal_Int64>(_pFactoryFunction); - } - - //-------------------------------------------------------------------------- - void OFormsModule::revokeComponent(const ::rtl::OUString& _rImplementationName) - { - if (!s_pImplementationNames) - { - OSL_FAIL("OFormsModule::revokeComponent : have no class infos ! Are you sure called this method at the right time ?"); - return; - } - OSL_ENSURE(s_pImplementationNames && s_pSupportedServices && s_pCreationFunctionPointers && s_pFactoryFunctionPointers, - "OFormsModule::revokeComponent : inconsistent state (the pointers) !"); - OSL_ENSURE( (s_pImplementationNames->getLength() == s_pSupportedServices->getLength()) - && (s_pImplementationNames->getLength() == s_pCreationFunctionPointers->getLength()) - && (s_pImplementationNames->getLength() == s_pFactoryFunctionPointers->getLength()), - "OFormsModule::revokeComponent : inconsistent state !"); - - sal_Int32 nLen = s_pImplementationNames->getLength(); - const ::rtl::OUString* pImplNames = s_pImplementationNames->getConstArray(); - for (sal_Int32 i=0; i<nLen; ++i, ++pImplNames) - { - if (pImplNames->equals(_rImplementationName)) - { - removeElementAt(*s_pImplementationNames, i); - removeElementAt(*s_pSupportedServices, i); - removeElementAt(*s_pCreationFunctionPointers, i); - removeElementAt(*s_pFactoryFunctionPointers, i); - break; - } - } - - if (s_pImplementationNames->getLength() == 0) - { - delete s_pImplementationNames; s_pImplementationNames = NULL; - delete s_pSupportedServices; s_pSupportedServices = NULL; - delete s_pCreationFunctionPointers; s_pCreationFunctionPointers = NULL; - delete s_pFactoryFunctionPointers; s_pFactoryFunctionPointers = NULL; - } - } - - //-------------------------------------------------------------------------- - Reference< XInterface > OFormsModule::getComponentFactory( - const ::rtl::OUString& _rImplementationName, - const Reference< XMultiServiceFactory >& _rxServiceManager) - { - OSL_ENSURE(_rxServiceManager.is(), "OFormsModule::getComponentFactory : invalid argument (service manager) !"); - OSL_ENSURE(_rImplementationName.getLength(), "OFormsModule::getComponentFactory : invalid argument (implementation name) !"); - - if (!s_pImplementationNames) - { - OSL_FAIL("OFormsModule::getComponentFactory : have no class infos ! Are you sure called this method at the right time ?"); - return NULL; - } - OSL_ENSURE(s_pImplementationNames && s_pSupportedServices && s_pCreationFunctionPointers && s_pFactoryFunctionPointers, - "OFormsModule::getComponentFactory : inconsistent state (the pointers) !"); - OSL_ENSURE( (s_pImplementationNames->getLength() == s_pSupportedServices->getLength()) - && (s_pImplementationNames->getLength() == s_pCreationFunctionPointers->getLength()) - && (s_pImplementationNames->getLength() == s_pFactoryFunctionPointers->getLength()), - "OFormsModule::getComponentFactory : inconsistent state !"); - - - Reference< XInterface > xReturn; - - - sal_Int32 nLen = s_pImplementationNames->getLength(); - const ::rtl::OUString* pImplName = s_pImplementationNames->getConstArray(); - const Sequence< ::rtl::OUString >* pServices = s_pSupportedServices->getConstArray(); - const sal_Int64* pComponentFunction = s_pCreationFunctionPointers->getConstArray(); - const sal_Int64* pFactoryFunction = s_pFactoryFunctionPointers->getConstArray(); - - for (sal_Int32 i=0; i<nLen; ++i, ++pImplName, ++pServices, ++pComponentFunction, ++pFactoryFunction) - { - if (pImplName->equals(_rImplementationName)) - { - const FactoryInstantiation FactoryInstantiationFunction = reinterpret_cast<const FactoryInstantiation>(*pFactoryFunction); - const ComponentInstantiation ComponentInstantiationFunction = reinterpret_cast<const ComponentInstantiation>(*pComponentFunction); - - xReturn = FactoryInstantiationFunction( _rxServiceManager, *pImplName, ComponentInstantiationFunction, *pServices, NULL); - if (xReturn.is()) - { - xReturn->acquire(); - return xReturn.get(); - } - } - } - - return NULL; - } - -//......................................................................... -} // namespace FORMS_MODULE_NAMESPACE -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/frm_module.hxx b/forms/source/inc/frm_module.hxx deleted file mode 100644 index 9ed02c234..000000000 --- a/forms/source/inc/frm_module.hxx +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FRM_MODULE_HXX -#define FRM_MODULE_HXX - -#define FORMS_MODULE_INCLUDE_CONTEXT - #define FORMS_MODULE_NAMESPACE frm - #include "forms_module.hxx" -#undef FORMS_MODULE_INCLUDE_CONTEXT - -#endif // FRM_MODULE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/frm_resource.hrc b/forms/source/inc/frm_resource.hrc deleted file mode 100644 index 3e7ef035b..000000000 --- a/forms/source/inc/frm_resource.hrc +++ /dev/null @@ -1,108 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_RESOURCE_HRC_ -#define _FRM_RESOURCE_HRC_ - -#ifndef _SOLAR_HRC -#include <svl/solar.hrc> -#endif - -//------------------------------------------------------------------------------ -#define RID_FRM_STRINGS_START RID_FORMLAYER_START - - - -//------------------------------------------------------------------------------ -//- String-IDs -#define RID_BASELISTBOX_ERROR_FILLLIST ( RID_FRM_STRINGS_START + 0 ) -#define RID_STR_IMPORT_GRAPHIC ( RID_FRM_STRINGS_START + 1 ) -#define RID_STR_CONTROL_SUBSTITUTED_NAME ( RID_FRM_STRINGS_START + 2 ) -#define RID_STR_CONTROL_SUBSTITUTED_EPXPLAIN ( RID_FRM_STRINGS_START + 3 ) -#define RID_STR_READERROR ( RID_FRM_STRINGS_START + 4 ) -#define RID_STR_CONNECTERROR ( RID_FRM_STRINGS_START + 5 ) -#define RID_ERR_LOADING_FORM ( RID_FRM_STRINGS_START + 6 ) -#define RID_ERR_REFRESHING_FORM ( RID_FRM_STRINGS_START + 7 ) -#define RID_STR_ERR_INSERTRECORD ( RID_FRM_STRINGS_START + 8 ) -#define RID_STR_ERR_UPDATERECORD ( RID_FRM_STRINGS_START + 9 ) -#define RID_STR_ERR_DELETERECORD ( RID_FRM_STRINGS_START + 10 ) -#define RID_STR_ERR_DELETERECORDS ( RID_FRM_STRINGS_START + 11 ) -#define RID_STR_NEED_NON_NULL_OBJECT ( RID_FRM_STRINGS_START + 12 ) -#define RID_STR_OPEN_GRAPHICS ( RID_FRM_STRINGS_START + 13 ) -#define RID_STR_CLEAR_GRAPHICS ( RID_FRM_STRINGS_START + 14 ) -#define RID_STR_INVALIDSTREAM ( RID_FRM_STRINGS_START + 15 ) -#define RID_STR_SYNTAXERROR ( RID_FRM_STRINGS_START + 16 ) -#define RID_STR_INCOMPATIBLE_TYPES ( RID_FRM_STRINGS_START + 17 ) -#define RID_STR_INVALID_VALIDATOR ( RID_FRM_STRINGS_START + 18 ) -#define RID_STR_LABEL_RECORD ( RID_FRM_STRINGS_START + 19 ) -#define RID_STR_LABEL_OF ( RID_FRM_STRINGS_START + 20 ) - -#define RID_STR_XFORMS_NO_BINDING_EXPRESSION ( RID_FRM_STRINGS_START + 21 ) -#define RID_STR_XFORMS_INVALID_BINDING_EXPRESSION (RID_FRM_STRINGS_START + 22) -#define RID_STR_XFORMS_INVALID_VALUE ( RID_FRM_STRINGS_START + 23 ) -#define RID_STR_XFORMS_REQUIRED ( RID_FRM_STRINGS_START + 24 ) -#define RID_STR_XFORMS_INVALID_CONSTRAINT ( RID_FRM_STRINGS_START + 25 ) -#define RID_STR_XFORMS_VALUE_IS_NOT_A ( RID_FRM_STRINGS_START + 26 ) -#define RID_STR_XFORMS_VALUE_MAX_INCL ( RID_FRM_STRINGS_START + 27 ) -#define RID_STR_XFORMS_VALUE_MAX_EXCL ( RID_FRM_STRINGS_START + 28 ) -#define RID_STR_XFORMS_VALUE_MIN_INCL ( RID_FRM_STRINGS_START + 29 ) -#define RID_STR_XFORMS_VALUE_MIN_EXCL ( RID_FRM_STRINGS_START + 30 ) -#define RID_STR_XFORMS_VALUE_PATTERN ( RID_FRM_STRINGS_START + 31 ) -#define RID_STR_XFORMS_VALUE_TOTAL_DIGITS ( RID_FRM_STRINGS_START + 32 ) -#define RID_STR_XFORMS_VALUE_FRACTION_DIGITS ( RID_FRM_STRINGS_START + 33 ) -#define RID_STR_XFORMS_VALUE_LENGTH ( RID_FRM_STRINGS_START + 34 ) -#define RID_STR_XFORMS_VALUE_MIN_LENGTH ( RID_FRM_STRINGS_START + 35 ) -#define RID_STR_XFORMS_VALUE_MAX_LENGTH ( RID_FRM_STRINGS_START + 36 ) - -#define RID_STR_DATATYPE_STRING ( RID_FRM_STRINGS_START + 37 ) -#define RID_STR_DATATYPE_URL ( RID_FRM_STRINGS_START + 38 ) -#define RID_STR_DATATYPE_BOOLEAN ( RID_FRM_STRINGS_START + 39 ) -#define RID_STR_DATATYPE_DECIMAL ( RID_FRM_STRINGS_START + 40 ) -#define RID_STR_DATATYPE_FLOAT ( RID_FRM_STRINGS_START + 41 ) -#define RID_STR_DATATYPE_DOUBLE ( RID_FRM_STRINGS_START + 42 ) -#define RID_STR_DATATYPE_DATE ( RID_FRM_STRINGS_START + 43 ) -#define RID_STR_DATATYPE_TIME ( RID_FRM_STRINGS_START + 44 ) -#define RID_STR_DATATYPE_DATETIME ( RID_FRM_STRINGS_START + 45 ) -#define RID_STR_DATATYPE_YEARMONTH ( RID_FRM_STRINGS_START + 46 ) -#define RID_STR_DATATYPE_YEAR ( RID_FRM_STRINGS_START + 47 ) -#define RID_STR_DATATYPE_MONTHDAY ( RID_FRM_STRINGS_START + 48 ) -#define RID_STR_DATATYPE_MONTH ( RID_FRM_STRINGS_START + 49 ) -#define RID_STR_DATATYPE_DAY ( RID_FRM_STRINGS_START + 50 ) - -#define RID_STR_XFORMS_CANT_EVALUATE ( RID_FRM_STRINGS_START + 51 ) -#define RID_STR_XFORMS_PATTERN_DOESNT_MATCH ( RID_FRM_STRINGS_START + 52 ) -#define RID_STR_XFORMS_BINDING_UI_NAME ( RID_FRM_STRINGS_START + 53 ) - -#define RID_STR_QUERY_SAVE_MODIFIED_ROW ( RID_FRM_STRINGS_START + 54 ) -#define RID_STR_COULD_NOT_SET_ORDER ( RID_FRM_STRINGS_START + 55 ) -#define RID_STR_COULD_NOT_SET_FILTER ( RID_FRM_STRINGS_START + 56 ) -#define RID_STR_FEATURE_REQUIRES_PARAMETERS ( RID_FRM_STRINGS_START + 57 ) -#define RID_STR_FEATURE_NOT_EXECUTABLE ( RID_FRM_STRINGS_START + 58 ) -#define RID_STR_FEATURE_UNKNOWN ( RID_FRM_STRINGS_START + 59 ) - -#endif // _FRM_RESOURCE_HRC_ - diff --git a/forms/source/inc/frm_resource.hxx b/forms/source/inc/frm_resource.hxx deleted file mode 100644 index bb217960d..000000000 --- a/forms/source/inc/frm_resource.hxx +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_RESOURCE_HXX_ -#define _FRM_RESOURCE_HXX_ - -#include <rtl/ustring.hxx> - -class SimpleResMgr; -//......................................................................... -namespace frm -{ - -#define FRM_RES_STRING(id) ResourceManager::loadString(id) - - //================================================================== - //= ResourceManager - //= handling ressources within the FormLayer library - //================================================================== - class ResourceManager - { - static SimpleResMgr* m_pImpl; - - private: - // no instantiation allowed - ResourceManager() { } - ~ResourceManager() { } - - // we'll instantiate one static member of the following class, which, in it's dtor, - // ensures that m_pImpl will be deleted - class EnsureDelete - { - public: - EnsureDelete() { } - ~EnsureDelete(); - }; - friend class EnsureDelete; - - protected: - static void ensureImplExists(); - - public: - /** loads the string with the specified resource id from the FormLayer resource file - */ - static ::rtl::OUString loadString(sal_uInt16 _nResId); - }; - -//......................................................................... -} -//......................................................................... - -#endif // _FRM_RESOURCE_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/frm_strings.hxx b/forms/source/inc/frm_strings.hxx deleted file mode 100644 index 98c4fa634..000000000 --- a/forms/source/inc/frm_strings.hxx +++ /dev/null @@ -1,365 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FRM_STRINGS_HXX -#define FRM_STRINGS_HXX - -#include <sal/types.h> -#include <rtl/ustring.hxx> - -//.............................................................................. -namespace frm -{ -//.............................................................................. - - struct ConstAsciiString - { - const sal_Char* ascii; - sal_Int32 length; - - inline operator ::rtl::OUString () const; - inline operator const sal_Char* () const { return ascii; } - - inline ConstAsciiString(const sal_Char* _pAsciiZeroTerminated, const sal_Int32 _nLength); - inline ~ConstAsciiString(); - - private: - mutable ::rtl::OUString* ustring; - }; - - //------------------------------------------------------------ - inline ConstAsciiString::ConstAsciiString(const sal_Char* _pAsciiZeroTerminated, const sal_Int32 _nLength) - :ascii(_pAsciiZeroTerminated) - ,length(_nLength) - ,ustring(NULL) - { - } - - //------------------------------------------------------------ - inline ConstAsciiString::~ConstAsciiString() - { - delete ustring; - ustring = NULL; - } - - //------------------------------------------------------------ - inline ConstAsciiString::operator ::rtl::OUString () const - { - if ( !ustring ) - ustring = new ::rtl::OUString( ascii, length, RTL_TEXTENCODING_ASCII_US ); - return *ustring; - } - - #ifndef FORMS_IMPLEMENT_STRINGS - #define FORMS_CONSTASCII_STRING( ident, string ) \ - extern const ConstAsciiString ident - #else - #define FORMS_CONSTASCII_STRING( ident, string ) \ - extern const ConstAsciiString ident( string, sizeof( string )-1 ) - #endif - -//.............................................................................. -} // namespace frm -//.............................................................................. - -//.............................................................................. -namespace frm -{ -//.............................................................................. - - //-------------------------------------------------------------------------- - //- properties - //-------------------------------------------------------------------------- - FORMS_CONSTASCII_STRING( PROPERTY_TABINDEX, "TabIndex" ); - FORMS_CONSTASCII_STRING( PROPERTY_TAG, "Tag" ); - FORMS_CONSTASCII_STRING( PROPERTY_NAME, "Name" ); - FORMS_CONSTASCII_STRING( PROPERTY_GROUP_NAME, "GroupName" ); - FORMS_CONSTASCII_STRING( PROPERTY_CLASSID, "ClassId" ); - FORMS_CONSTASCII_STRING( PROPERTY_FETCHSIZE, "FetchSize" ); - FORMS_CONSTASCII_STRING( PROPERTY_VALUE, "Value" ); - FORMS_CONSTASCII_STRING( PROPERTY_TEXT, "Text" ); - FORMS_CONSTASCII_STRING( PROPERTY_LABEL, "Label" ); - FORMS_CONSTASCII_STRING( PROPERTY_CANINSERT, "CanInsert" ); - FORMS_CONSTASCII_STRING( PROPERTY_CANUPDATE, "CanUpdate" ); - FORMS_CONSTASCII_STRING( PROPERTY_CANDELETE, "CanDelete" ); - FORMS_CONSTASCII_STRING( PROPERTY_NAVIGATION, "NavigationBarMode" ); - FORMS_CONSTASCII_STRING( PROPERTY_HASNAVIGATION, "HasNavigationBar" ); - FORMS_CONSTASCII_STRING( PROPERTY_CYCLE, "Cycle" ); - FORMS_CONSTASCII_STRING( PROPERTY_CONTROLSOURCE, "DataField" ); - FORMS_CONSTASCII_STRING( PROPERTY_ENABLED, "Enabled" ); - FORMS_CONSTASCII_STRING( PROPERTY_ENABLEVISIBLE, "EnableVisible" ); - FORMS_CONSTASCII_STRING( PROPERTY_READONLY, "ReadOnly" ); - FORMS_CONSTASCII_STRING( PROPERTY_RELEVANT, "Relevant" ); - FORMS_CONSTASCII_STRING( PROPERTY_ISREADONLY, "IsReadOnly" ); - FORMS_CONSTASCII_STRING( PROPERTY_FILTER, "Filter" ); - FORMS_CONSTASCII_STRING( PROPERTY_WIDTH, "Width" ); - FORMS_CONSTASCII_STRING( PROPERTY_SEARCHABLE, "IsSearchable" ); - FORMS_CONSTASCII_STRING( PROPERTY_MULTILINE, "MultiLine" ); - FORMS_CONSTASCII_STRING( PROPERTY_TARGET_URL, "TargetURL" ); - FORMS_CONSTASCII_STRING( PROPERTY_TARGET_FRAME, "TargetFrame" ); - FORMS_CONSTASCII_STRING( PROPERTY_DEFAULTCONTROL, "DefaultControl" ); - FORMS_CONSTASCII_STRING( PROPERTY_MAXTEXTLEN, "MaxTextLen" ); - FORMS_CONSTASCII_STRING( PROPERTY_EDITMASK, "EditMask" ); - FORMS_CONSTASCII_STRING( PROPERTY_SIZE, "Size" ); - FORMS_CONSTASCII_STRING( PROPERTY_SPIN, "Spin" ); - FORMS_CONSTASCII_STRING( PROPERTY_DATE, "Date" ); - FORMS_CONSTASCII_STRING( PROPERTY_TIME, "Time" ); - FORMS_CONSTASCII_STRING( PROPERTY_STATE, "State" ); - FORMS_CONSTASCII_STRING( PROPERTY_TRISTATE, "TriState" ); - FORMS_CONSTASCII_STRING( PROPERTY_HIDDEN_VALUE, "HiddenValue" ); - FORMS_CONSTASCII_STRING( PROPERTY_BUTTONTYPE, "ButtonType" ); - FORMS_CONSTASCII_STRING( PROPERTY_STRINGITEMLIST, "StringItemList" ); - FORMS_CONSTASCII_STRING( PROPERTY_DEFAULT_TEXT, "DefaultText" ); - FORMS_CONSTASCII_STRING( PROPERTY_DEFAULT_STATE, "DefaultState" ); - FORMS_CONSTASCII_STRING( PROPERTY_FORMATKEY, "FormatKey" ); - FORMS_CONSTASCII_STRING( PROPERTY_FORMATSSUPPLIER, "FormatsSupplier" ); - FORMS_CONSTASCII_STRING( PROPERTY_SUBMIT_ACTION, "SubmitAction" ); - FORMS_CONSTASCII_STRING( PROPERTY_SUBMIT_TARGET, "SubmitTarget" ); - FORMS_CONSTASCII_STRING( PROPERTY_SUBMIT_METHOD, "SubmitMethod" ); - FORMS_CONSTASCII_STRING( PROPERTY_SUBMIT_ENCODING, "SubmitEncoding" ); - FORMS_CONSTASCII_STRING( PROPERTY_IMAGE_URL, "ImageURL" ); - FORMS_CONSTASCII_STRING( PROPERTY_GRAPHIC, "Graphic" ); - FORMS_CONSTASCII_STRING( PROPERTY_IMAGE_POSITION, "ImagePosition" ); - FORMS_CONSTASCII_STRING( PROPERTY_EMPTY_IS_NULL, "ConvertEmptyToNull" ); - FORMS_CONSTASCII_STRING( PROPERTY_LISTSOURCETYPE, "ListSourceType" ); - FORMS_CONSTASCII_STRING( PROPERTY_LISTSOURCE, "ListSource" ); - FORMS_CONSTASCII_STRING( PROPERTY_SELECT_SEQ, "SelectedItems" ); - FORMS_CONSTASCII_STRING( PROPERTY_VALUE_SEQ, "ValueItemList" ); - FORMS_CONSTASCII_STRING( PROPERTY_DEFAULT_SELECT_SEQ, "DefaultSelection" ); - FORMS_CONSTASCII_STRING( PROPERTY_MULTISELECTION, "MultiSelection" ); - FORMS_CONSTASCII_STRING( PROPERTY_ALIGN, "Align" ); - FORMS_CONSTASCII_STRING( PROPERTY_VERTICAL_ALIGN, "VerticalAlign" ); - FORMS_CONSTASCII_STRING( PROPERTY_DEFAULT_DATE, "DefaultDate" ); - FORMS_CONSTASCII_STRING( PROPERTY_DEFAULT_TIME, "DefaultTime" ); - FORMS_CONSTASCII_STRING( PROPERTY_DEFAULT_VALUE, "DefaultValue" ); - FORMS_CONSTASCII_STRING( PROPERTY_DECIMAL_ACCURACY, "DecimalAccuracy" ); - FORMS_CONSTASCII_STRING( PROPERTY_CURSORSOURCE, "DataSelection" ); - FORMS_CONSTASCII_STRING( PROPERTY_CURSORSOURCETYPE, "DataSelectionType" ); - FORMS_CONSTASCII_STRING( PROPERTY_FIELDTYPE, "Type" ); - FORMS_CONSTASCII_STRING( PROPERTY_DECIMALS, "Decimals" ); - FORMS_CONSTASCII_STRING( PROPERTY_REFVALUE, "RefValue" ); - FORMS_CONSTASCII_STRING( PROPERTY_UNCHECKED_REFVALUE, "SecondaryRefValue" ); - FORMS_CONSTASCII_STRING( PROPERTY_VALUEMIN, "ValueMin" ); - FORMS_CONSTASCII_STRING( PROPERTY_VALUEMAX, "ValueMax" ); - FORMS_CONSTASCII_STRING( PROPERTY_STRICTFORMAT, "StrictFormat" ); - FORMS_CONSTASCII_STRING( PROPERTY_ALLOWADDITIONS, "AllowInserts" ); - FORMS_CONSTASCII_STRING( PROPERTY_ALLOWEDITS, "AllowUpdates" ); - FORMS_CONSTASCII_STRING( PROPERTY_ALLOWDELETIONS, "AllowDeletes" ); - FORMS_CONSTASCII_STRING( PROPERTY_MASTERFIELDS, "MasterFields" ); - FORMS_CONSTASCII_STRING( PROPERTY_ISPASSTHROUGH, "IsPassThrough" ); - FORMS_CONSTASCII_STRING( PROPERTY_QUERY, "Query" ); - FORMS_CONSTASCII_STRING( PROPERTY_LITERALMASK, "LiteralMask" ); - FORMS_CONSTASCII_STRING( PROPERTY_VALUESTEP, "ValueStep" ); - FORMS_CONSTASCII_STRING( PROPERTY_SHOWTHOUSANDSEP, "ShowThousandsSeparator" ); - FORMS_CONSTASCII_STRING( PROPERTY_CURRENCYSYMBOL, "CurrencySymbol" ); - FORMS_CONSTASCII_STRING( PROPERTY_DATEFORMAT, "DateFormat" ); - FORMS_CONSTASCII_STRING( PROPERTY_DATEMIN, "DateMin" ); - FORMS_CONSTASCII_STRING( PROPERTY_DATEMAX, "DateMax" ); - FORMS_CONSTASCII_STRING( PROPERTY_DATE_SHOW_CENTURY, "DateShowCentury" ); - FORMS_CONSTASCII_STRING( PROPERTY_TIMEFORMAT, "TimeFormat" ); - FORMS_CONSTASCII_STRING( PROPERTY_TIMEMIN, "TimeMin" ); - FORMS_CONSTASCII_STRING( PROPERTY_TIMEMAX, "TimeMax" ); - FORMS_CONSTASCII_STRING( PROPERTY_LINECOUNT, "LineCount" ); - FORMS_CONSTASCII_STRING( PROPERTY_BOUNDCOLUMN, "BoundColumn" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT, "FontDescriptor" ); - FORMS_CONSTASCII_STRING( PROPERTY_FILLCOLOR, "FillColor" ); - FORMS_CONSTASCII_STRING( PROPERTY_LINECOLOR, "LineColor" ); - FORMS_CONSTASCII_STRING( PROPERTY_DROPDOWN, "Dropdown" ); - FORMS_CONSTASCII_STRING( PROPERTY_HSCROLL, "HScroll" ); - FORMS_CONSTASCII_STRING( PROPERTY_VSCROLL, "VScroll" ); - FORMS_CONSTASCII_STRING( PROPERTY_TABSTOP, "Tabstop" ); - FORMS_CONSTASCII_STRING( PROPERTY_AUTOCOMPLETE, "Autocomplete" ); - FORMS_CONSTASCII_STRING( PROPERTY_HARDLINEBREAKS, "HardLineBreaks" ); - FORMS_CONSTASCII_STRING( PROPERTY_PRINTABLE, "Printable" ); - FORMS_CONSTASCII_STRING( PROPERTY_ECHO_CHAR, "EchoChar" ); - FORMS_CONSTASCII_STRING( PROPERTY_ROWHEIGHT, "RowHeight" ); - FORMS_CONSTASCII_STRING( PROPERTY_HELPTEXT, "HelpText" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_NAME, "FontName" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_STYLENAME, "FontStyleName" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_FAMILY, "FontFamily" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_CHARSET, "FontCharset" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_HEIGHT, "FontHeight" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_WEIGHT, "FontWeight" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_SLANT, "FontSlant" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_UNDERLINE, "FontUnderline" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_WORDLINEMODE, "FontWordLineMode" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_STRIKEOUT, "FontStrikeout" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONTEMPHASISMARK, "FontEmphasisMark" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONTRELIEF, "FontRelief" ); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_CHARWIDTH, "FontCharWidth"); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_KERNING, "FontKerning"); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_ORIENTATION, "FontOrientation"); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_PITCH, "FontPitch"); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_TYPE, "FontType"); - FORMS_CONSTASCII_STRING( PROPERTY_FONT_WIDTH, "FontWidth"); - FORMS_CONSTASCII_STRING( PROPERTY_HELPURL, "HelpURL" ); - FORMS_CONSTASCII_STRING( PROPERTY_RECORDMARKER, "HasRecordMarker" ); - FORMS_CONSTASCII_STRING( PROPERTY_BOUNDFIELD, "BoundField" ); - FORMS_CONSTASCII_STRING( PROPERTY_INPUT_REQUIRED, "InputRequired" ); - FORMS_CONSTASCII_STRING( PROPERTY_TREATASNUMERIC, "TreatAsNumber" ); - FORMS_CONSTASCII_STRING( PROPERTY_EFFECTIVE_VALUE, "EffectiveValue" ); - FORMS_CONSTASCII_STRING( PROPERTY_EFFECTIVE_DEFAULT, "EffectiveDefault" ); - FORMS_CONSTASCII_STRING( PROPERTY_EFFECTIVE_MIN, "EffectiveMin" ); - FORMS_CONSTASCII_STRING( PROPERTY_EFFECTIVE_MAX, "EffectiveMax" ); - FORMS_CONSTASCII_STRING( PROPERTY_HIDDEN, "Hidden" ); - FORMS_CONSTASCII_STRING( PROPERTY_FILTERPROPOSAL, "UseFilterValueProposal" ); - FORMS_CONSTASCII_STRING( PROPERTY_FIELDSOURCE, "FieldSource" ); - FORMS_CONSTASCII_STRING( PROPERTY_TABLENAME, "TableName" ); - FORMS_CONSTASCII_STRING( PROPERTY_ISFILTERAPPLIED, "IsFilterApplied" ); - FORMS_CONSTASCII_STRING( PROPERTY_CONTROLLABEL, "LabelControl" ); - FORMS_CONSTASCII_STRING( PROPERTY_CURRSYM_POSITION, "PrependCurrencySymbol" ); - FORMS_CONSTASCII_STRING( PROPERTY_CURSORCOLOR, "CursorColor" ); - FORMS_CONSTASCII_STRING( PROPERTY_ALWAYSSHOWCURSOR, "AlwaysShowCursor" ); - FORMS_CONSTASCII_STRING( PROPERTY_DISPLAYSYNCHRON, "DisplayIsSynchron" ); - FORMS_CONSTASCII_STRING( PROPERTY_TEXTCOLOR, "TextColor" ); - FORMS_CONSTASCII_STRING( PROPERTY_DELAY, "RepeatDelay" ); - FORMS_CONSTASCII_STRING( PROPERTY_DEFAULT_SCROLL_VALUE, "DefaultScrollValue" ); - FORMS_CONSTASCII_STRING( PROPERTY_SCROLL_VALUE, "ScrollValue" ); - FORMS_CONSTASCII_STRING( PROPERTY_DEFAULT_SPIN_VALUE, "DefaultSpinValue" ); - FORMS_CONSTASCII_STRING( PROPERTY_SPIN_VALUE, "SpinValue" ); - FORMS_CONSTASCII_STRING( PROPERTY_REFERENCE_DEVICE, "ReferenceDevice" ); - FORMS_CONSTASCII_STRING( PROPERTY_ISMODIFIED, "IsModified" ); - FORMS_CONSTASCII_STRING( PROPERTY_ISNEW, "IsNew" ); - FORMS_CONSTASCII_STRING( PROPERTY_PRIVILEGES, "Privileges" ); - FORMS_CONSTASCII_STRING( PROPERTY_COMMAND, "Command" ); - FORMS_CONSTASCII_STRING( PROPERTY_COMMANDTYPE, "CommandType" ); - FORMS_CONSTASCII_STRING( PROPERTY_RESULTSET_CONCURRENCY, "ResultSetConcurrency" ); - FORMS_CONSTASCII_STRING( PROPERTY_INSERTONLY, "IgnoreResult" ); - FORMS_CONSTASCII_STRING( PROPERTY_RESULTSET_TYPE, "ResultSetType" ); - FORMS_CONSTASCII_STRING( PROPERTY_ESCAPE_PROCESSING, "EscapeProcessing" ); - FORMS_CONSTASCII_STRING( PROPERTY_APPLYFILTER, "ApplyFilter" ); - FORMS_CONSTASCII_STRING( PROPERTY_ROWCOUNT, "RowCount" ); - FORMS_CONSTASCII_STRING( PROPERTY_ROWCOUNTFINAL, "IsRowCountFinal" ); - - FORMS_CONSTASCII_STRING( PROPERTY_ISNULLABLE, "IsNullable" ); - FORMS_CONSTASCII_STRING( PROPERTY_ACTIVECOMMAND, "ActiveCommand" ); - FORMS_CONSTASCII_STRING( PROPERTY_ISCURRENCY, "IsCurrency" ); - FORMS_CONSTASCII_STRING( PROPERTY_URL, "URL" ); - FORMS_CONSTASCII_STRING( PROPERTY_TITLE, "Title" ); - FORMS_CONSTASCII_STRING( PROPERTY_ACTIVE_CONNECTION, "ActiveConnection" ); - FORMS_CONSTASCII_STRING( PROPERTY_SCALE, "Scale" ); - FORMS_CONSTASCII_STRING( PROPERTY_SORT, "Order" ); - FORMS_CONSTASCII_STRING( PROPERTY_DATASOURCE, "DataSourceName" ); - FORMS_CONSTASCII_STRING( PROPERTY_DETAILFIELDS, "DetailFields" ); - - FORMS_CONSTASCII_STRING( PROPERTY_COLUMNSERVICENAME, "ColumnServiceName" ); - FORMS_CONSTASCII_STRING( PROPERTY_REALNAME, "RealName" ); - FORMS_CONSTASCII_STRING( PROPERTY_CONTROLSOURCEPROPERTY, "DataFieldProperty" ); - FORMS_CONSTASCII_STRING( PROPERTY_USER, "User" ); - FORMS_CONSTASCII_STRING( PROPERTY_PASSWORD, "Password" ); - FORMS_CONSTASCII_STRING( PROPERTY_DISPATCHURLINTERNAL, "DispatchURLInternal" ); - FORMS_CONSTASCII_STRING( PROPERTY_PERSISTENCE_MAXTEXTLENGTH,"PersistenceMaxTextLength" ); - FORMS_CONSTASCII_STRING( PROPERTY_RICH_TEXT, "RichText" ); - FORMS_CONSTASCII_STRING( PROPERTY_ENFORCE_FORMAT, "EnforceFormat" ); - FORMS_CONSTASCII_STRING( PROPERTY_LINEEND_FORMAT, "LineEndFormat" ); - FORMS_CONSTASCII_STRING( PROPERTY_WRITING_MODE, "WritingMode" ); - FORMS_CONSTASCII_STRING( PROPERTY_CONTEXT_WRITING_MODE, "ContextWritingMode" ); - - FORMS_CONSTASCII_STRING( PROPERTY_NATIVE_LOOK, "NativeWidgetLook" ); - FORMS_CONSTASCII_STRING( PROPERTY_BORDER, "Border" ); - FORMS_CONSTASCII_STRING( PROPERTY_BORDERCOLOR, "BorderColor" ); - FORMS_CONSTASCII_STRING( PROPERTY_BACKGROUNDCOLOR, "BackgroundColor" ); - FORMS_CONSTASCII_STRING( PROPERTY_ICONSIZE, "IconSize" ); - FORMS_CONSTASCII_STRING( PROPERTY_TEXTLINECOLOR, "TextLineColor" ); - FORMS_CONSTASCII_STRING( PROPERTY_HIDEINACTIVESELECTION, "HideInactiveSelection" ); - - FORMS_CONSTASCII_STRING( PROPERTY_SHOW_POSITION, "ShowPosition" ); - FORMS_CONSTASCII_STRING( PROPERTY_SHOW_NAVIGATION, "ShowNavigation" ); - FORMS_CONSTASCII_STRING( PROPERTY_SHOW_RECORDACTIONS, "ShowRecordActions" ); - FORMS_CONSTASCII_STRING( PROPERTY_SHOW_FILTERSORT, "ShowFilterSort" ); - - FORMS_CONSTASCII_STRING( PROPERTY_XSD_WHITESPACE, "WhiteSpace" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_PATTERN, "Pattern" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_LENGTH, "Length" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_LENGTH, "MinLength" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_LENGTH, "MaxLength" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_TOTAL_DIGITS, "TotalDigits" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_FRACTION_DIGITS, "FractionDigits" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_INCLUSIVE_INT, "MaxInclusiveInt" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_EXCLUSIVE_INT, "MaxExclusiveInt" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_INCLUSIVE_INT, "MinInclusiveInt" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_EXCLUSIVE_INT, "MinExclusiveInt" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_INCLUSIVE_DOUBLE, "MaxInclusiveDouble" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_EXCLUSIVE_DOUBLE, "MaxExclusiveDouble" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_INCLUSIVE_DOUBLE, "MinInclusiveDouble" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_EXCLUSIVE_DOUBLE, "MinExclusiveDouble" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_INCLUSIVE_DATE, "MaxInclusiveDate" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_EXCLUSIVE_DATE, "MaxExclusiveDate" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_INCLUSIVE_DATE, "MinInclusiveDate" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_EXCLUSIVE_DATE, "MinExclusiveDate" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_INCLUSIVE_TIME, "MaxInclusiveTime" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_EXCLUSIVE_TIME, "MaxExclusiveTime" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_INCLUSIVE_TIME, "MinInclusiveTime" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_EXCLUSIVE_TIME, "MinExclusiveTime" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_INCLUSIVE_DATE_TIME, "MaxInclusiveDateTime" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MAX_EXCLUSIVE_DATE_TIME, "MaxExclusiveDateTime" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_INCLUSIVE_DATE_TIME, "MinInclusiveDateTime" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_MIN_EXCLUSIVE_DATE_TIME, "MinExclusiveDateTime" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_IS_BASIC, "IsBasic" ); - FORMS_CONSTASCII_STRING( PROPERTY_XSD_TYPE_CLASS, "TypeClass" ); - - FORMS_CONSTASCII_STRING( PROPERTY_DYNAMIC_CONTROL_BORDER, "DynamicControlBorder" ); - FORMS_CONSTASCII_STRING( PROPERTY_CONTROL_BORDER_COLOR_FOCUS, "ControlBorderColorOnFocus" ); - FORMS_CONSTASCII_STRING( PROPERTY_CONTROL_BORDER_COLOR_MOUSE, "ControlBorderColorOnHover" ); - FORMS_CONSTASCII_STRING( PROPERTY_CONTROL_BORDER_COLOR_INVALID,"ControlBorderColorOnInvalid" ); - - //-------------------------------------------------------------------------- - //- URLs - //-------------------------------------------------------------------------- - FORMS_CONSTASCII_STRING( URL_CONTROLLER_PREFIX, ".uno:FormController/" ); - - FORMS_CONSTASCII_STRING( URL_FORM_POSITION, ".uno:FormController/positionForm" ); - FORMS_CONSTASCII_STRING( URL_FORM_RECORDCOUNT, ".uno:FormController/RecordCount" ); - FORMS_CONSTASCII_STRING( URL_RECORD_FIRST, ".uno:FormController/moveToFirst" ); - FORMS_CONSTASCII_STRING( URL_RECORD_PREV, ".uno:FormController/moveToPrev" ); - FORMS_CONSTASCII_STRING( URL_RECORD_NEXT, ".uno:FormController/moveToNext" ); - FORMS_CONSTASCII_STRING( URL_RECORD_LAST, ".uno:FormController/moveToLast" ); - FORMS_CONSTASCII_STRING( URL_RECORD_SAVE, ".uno:FormController/saveRecord" ); - FORMS_CONSTASCII_STRING( URL_RECORD_UNDO, ".uno:FormController/undoRecord" ); - FORMS_CONSTASCII_STRING( URL_RECORD_NEW, ".uno:FormController/moveToNew" ); - FORMS_CONSTASCII_STRING( URL_RECORD_DELETE, ".uno:FormController/deleteRecord" ); - FORMS_CONSTASCII_STRING( URL_FORM_REFRESH, ".uno:FormController/refreshForm" ); - FORMS_CONSTASCII_STRING( URL_FORM_REFRESH_CURRENT_CONTROL, - ".uno:FormController/refreshCurrentControl" ); - - FORMS_CONSTASCII_STRING( URL_FORM_SORT_UP, ".uno:FormController/sortUp" ); - FORMS_CONSTASCII_STRING( URL_FORM_SORT_DOWN, ".uno:FormController/sortDown" ); - FORMS_CONSTASCII_STRING( URL_FORM_SORT, ".uno:FormController/sort" ); - FORMS_CONSTASCII_STRING( URL_FORM_AUTO_FILTER, ".uno:FormController/autoFilter" ); - FORMS_CONSTASCII_STRING( URL_FORM_FILTER, ".uno:FormController/filter" ); - FORMS_CONSTASCII_STRING( URL_FORM_APPLY_FILTER, ".uno:FormController/applyFilter" ); - FORMS_CONSTASCII_STRING( URL_FORM_REMOVE_FILTER,".uno:FormController/removeFilterOrder" ); - -//.............................................................................. -} // namespace frm -//.............................................................................. - - -#endif // FRM_STRINGS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/ids.hxx b/forms/source/inc/ids.hxx deleted file mode 100644 index 204713ea9..000000000 --- a/forms/source/inc/ids.hxx +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_IDS_HXX_ -#define _FRM_IDS_HXX_ - -#include <unotools/idhelper.hxx> - -DECLARE_IMPLEMENTATIONID_HELPER(frm, OImplementationIds) - -#endif // _FRM_IDS_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/limitedformats.hxx b/forms/source/inc/limitedformats.hxx deleted file mode 100644 index 6c75a5bed..000000000 --- a/forms/source/inc/limitedformats.hxx +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FORMS_LIMITED_FORMATS_HXX_ -#define _FORMS_LIMITED_FORMATS_HXX_ - -#include <osl/mutex.hxx> -#include <com/sun/star/util/XNumberFormatsSupplier.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/beans/XFastPropertySet.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - - //===================================================================== - //= OLimitedFormats - //===================================================================== - /** maintains translation tables format key <-> enum value - <p>Used for controls which provide a limited number for (standard) formats, which - should be available as format keys.</p> - */ - class OLimitedFormats - { - private: - static sal_Int32 s_nInstanceCount; - static ::osl::Mutex s_aMutex; - static ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > - s_xStandardFormats; - - protected: - sal_Int32 m_nFormatEnumPropertyHandle; - const sal_Int16 m_nTableId; - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XFastPropertySet > - m_xAggregate; - - protected: - /** ctor - <p>The class id is used to determine the translation table to use. All instances which - pass the same value here share one table.</p> - */ - OLimitedFormats( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB, - const sal_Int16 _nClassId - ); - ~OLimitedFormats(); - - protected: - void setAggregateSet( - const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XFastPropertySet >& _rxAggregate, - sal_Int32 _nOriginalPropertyHandle - ); - - protected: - void getFormatKeyPropertyValue( ::com::sun::star::uno::Any& _rValue ) const; - sal_Bool convertFormatKeyPropertyValue( - ::com::sun::star::uno::Any& _rConvertedValue, - ::com::sun::star::uno::Any& _rOldValue, - const ::com::sun::star::uno::Any& _rNewValue - ); - void setFormatKeyPropertyValue( const ::com::sun::star::uno::Any& _rNewValue ); - // setFormatKeyPropertyValue should only be called with a value got from convertFormatKeyPropertyValue! - - ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > - getFormatsSupplier() const { return s_xStandardFormats; } - - private: - void acquireSupplier(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB); - void releaseSupplier(); - - static void ensureTableInitialized(const sal_Int16 _nTableId); - static void clearTable(const sal_Int16 _nTableId); - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FORMS_LIMITED_FORMATS_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/listenercontainers.hxx b/forms/source/inc/listenercontainers.hxx deleted file mode 100644 index 4c12b69c8..000000000 --- a/forms/source/inc/listenercontainers.hxx +++ /dev/null @@ -1,142 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_INC_LISTENERCONTAINERS_HXX -#define FORMS_SOURCE_INC_LISTENERCONTAINERS_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/form/XResetListener.hpp> -/** === end UNO includes === **/ -#include <comphelper/listenernotification.hxx> -#include <cppuhelper/weak.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - //===================================================================== - //= EventListeners - //===================================================================== - template < class LISTENER > - class EventListeners : public ::comphelper::OListenerContainerBase< LISTENER, ::com::sun::star::lang::EventObject > - { - public: - typedef LISTENER ListenerClass; - typedef ::com::sun::star::lang::EventObject EventClass; - typedef ::comphelper::OListenerContainerBase< ListenerClass, EventClass > - EventListeners_Base; - - private: - ::cppu::OWeakObject& m_rInstigator; - - protected: - ::cppu::OWeakObject& getInstigator() { return m_rInstigator; } - - protected: - inline EventListeners( ::cppu::OWeakObject& _rInstigator, ::osl::Mutex& _rMutex ) - :EventListeners_Base( _rMutex ) - ,m_rInstigator( _rInstigator ) - { - } - - // still waiting to be overwritten - virtual bool implTypedNotify( - const ::com::sun::star::uno::Reference< ListenerClass >& _rxListener, - const EventClass& _rEvent - ) SAL_THROW( ( ::com::sun::star::uno::Exception ) ) = 0; - - public: - inline bool notify() - { - ::com::sun::star::lang::EventObject aEvent( m_rInstigator ); - return EventListeners_Base::notify( aEvent ); - } - - inline void disposing() - { - ::com::sun::star::lang::EventObject aEvent( m_rInstigator ); - EventListeners_Base::disposing( aEvent ); - } - protected: - using EventListeners_Base::notify; - using EventListeners_Base::disposing; - }; - - //===================================================================== - //= ResetListeners - //===================================================================== - typedef EventListeners < ::com::sun::star::form::XResetListener - > ResetListeners_Base; - class ResetListeners : public ResetListeners_Base - { - private: - enum NotificationType - { - eApproval, - eFinal - }; - NotificationType m_eCurrentNotificationType; - - public: - inline ResetListeners( ::cppu::OWeakObject& _rInstigator, ::osl::Mutex& _rMutex ) - :ResetListeners_Base( _rInstigator, _rMutex ) - ,m_eCurrentNotificationType( eApproval ) - { - } - - /** see whether all our listeners approve the reset - */ - sal_Bool approveReset() - { - m_eCurrentNotificationType = eApproval; - return notify(); - } - - /** tell all our listeners that the reset happened - */ - void resetted() - { - m_eCurrentNotificationType = eFinal; - notify(); - } - - protected: - virtual bool implTypedNotify( - const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener >& _rxListener, - const ::com::sun::star::lang::EventObject& _rEvent - ) SAL_THROW( ( ::com::sun::star::uno::Exception ) ); - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_INC_LISTENERCONTAINERS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/property.hrc b/forms/source/inc/property.hrc deleted file mode 100644 index 8ba6e87a4..000000000 --- a/forms/source/inc/property.hrc +++ /dev/null @@ -1,318 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef _FRM_PROPERTY_HRC_ -#define _FRM_PROPERTY_HRC_ - -#ifndef _RTL_USTRING_HXX_ -#include <rtl/ustring.hxx> -#endif - -#ifndef FRM_STRINGS_HXX -#include "frm_strings.hxx" -#endif - -//......................................................................... -namespace frm -{ -//......................................................................... - -// PropertyId's, welche eine Zuordnung zu einen PropertyName haben -#define PROPERTY_ID_START 0 - -#define PROPERTY_ID_NAME (PROPERTY_ID_START + 1) -#define PROPERTY_ID_TABINDEX (PROPERTY_ID_START + 2) -#define PROPERTY_ID_CONTROLSOURCE (PROPERTY_ID_START + 3) -#define PROPERTY_ID_MASTERFIELDS (PROPERTY_ID_START + 4) -#define PROPERTY_ID_DATASOURCE (PROPERTY_ID_START + 6) -#define PROPERTY_ID_CLASSID (PROPERTY_ID_START + 9) -#define PROPERTY_ID_CURSORTYPE (PROPERTY_ID_START + 10) -#define PROPERTY_ID_READONLY (PROPERTY_ID_START + 11) -#define PROPERTY_ID_NAVIGATION (PROPERTY_ID_START + 13) -#define PROPERTY_ID_CYCLE (PROPERTY_ID_START + 14) -#define PROPERTY_ID_ALLOWADDITIONS (PROPERTY_ID_START + 15) -#define PROPERTY_ID_ALLOWEDITS (PROPERTY_ID_START + 16) -#define PROPERTY_ID_ALLOWDELETIONS (PROPERTY_ID_START + 17) -#define PROPERTY_ID_NATIVE_LOOK (PROPERTY_ID_START + 18) -#define PROPERTY_ID_INPUT_REQUIRED (PROPERTY_ID_START + 19) -#define PROPERTY_ID_WRITING_MODE (PROPERTY_ID_START + 20) -#define PROPERTY_ID_CONTEXT_WRITING_MODE (PROPERTY_ID_START + 21) -#define PROPERTY_ID_VERTICAL_ALIGN (PROPERTY_ID_START + 22) -#define PROPERTY_ID_GRAPHIC (PROPERTY_ID_START + 23) -#define PROPERTY_ID_GROUP_NAME (PROPERTY_ID_START + 24) - // free - // free - // free - // free - // free - // free - // free - // free -#define PROPERTY_ID_VALUE (PROPERTY_ID_START + 31) // INT32 - // free -#define PROPERTY_ID_FORMATKEY (PROPERTY_ID_START + 33) // UINT32 - // free - // free - // free -#define PROPERTY_ID_SIZE (PROPERTY_ID_START + 37) // UINT32 -#define PROPERTY_ID_REFERENCE_DEVICE (PROPERTY_ID_START + 38) // XDevice - // free - // free - // free -#define PROPERTY_ID_WIDTH (PROPERTY_ID_START + 42) // UINT16 -#define PROPERTY_ID_DEFAULTCONTROL (PROPERTY_ID_START + 43) // string -#define PROPERTY_ID_BOUNDCOLUMN (PROPERTY_ID_START + 44) // UINT16 may be null -#define PROPERTY_ID_LISTSOURCETYPE (PROPERTY_ID_START + 45) // UINT16 -#define PROPERTY_ID_LISTSOURCE (PROPERTY_ID_START + 46) // string - // FREE -#define PROPERTY_ID_TEXT (PROPERTY_ID_START + 48) // string -#define PROPERTY_ID_STRINGITEMLIST (PROPERTY_ID_START + 49) // wsstringsequence -#define PROPERTY_ID_LABEL (PROPERTY_ID_START + 50) // string -#define PROPERTY_ID_HIDEINACTIVESELECTION (PROPERTY_ID_START + 51) // sal_Bool -#define PROPERTY_ID_STATE (PROPERTY_ID_START + 52) // UINT16 -#define PROPERTY_ID_DELAY (PROPERTY_ID_START + 53) // sal_Int32 -#define PROPERTY_ID_FONT (PROPERTY_ID_START + 54) // font -#define PROPERTY_ID_HASNAVIGATION (PROPERTY_ID_START + 55) -#define PROPERTY_ID_BORDERCOLOR (PROPERTY_ID_START + 56) // sal_Int32 -#define PROPERTY_ID_ROWHEIGHT (PROPERTY_ID_START + 57) // UINT16 -#define PROPERTY_ID_BACKGROUNDCOLOR (PROPERTY_ID_START + 58) // sal_Int32 -#define PROPERTY_ID_FILLCOLOR (PROPERTY_ID_START + 59) // UINT32 -#define PROPERTY_ID_TEXTCOLOR (PROPERTY_ID_START + 60) // UINT32 -#define PROPERTY_ID_LINECOLOR (PROPERTY_ID_START + 61) // UINT32 -#define PROPERTY_ID_BORDER (PROPERTY_ID_START + 62) // UINT16 -#define PROPERTY_ID_ALIGN (PROPERTY_ID_START + 63) // UINT16 -#define PROPERTY_ID_DROPDOWN (PROPERTY_ID_START + 64) // BOOL -#define PROPERTY_ID_UNCHECKED_REFVALUE (PROPERTY_ID_START + 65) // ::rtl::OUString -#define PROPERTY_ID_HSCROLL (PROPERTY_ID_START + 66) // BOOL -#define PROPERTY_ID_VSCROLL (PROPERTY_ID_START + 67) // BOOL -#define PROPERTY_ID_TABSTOP (PROPERTY_ID_START + 68) // BOOL -#define PROPERTY_ID_REFVALUE (PROPERTY_ID_START + 69) // ::rtl::OUString -#define PROPERTY_ID_BUTTONTYPE (PROPERTY_ID_START + 70) // UINT16 -#define PROPERTY_ID_DEFAULT_TEXT (PROPERTY_ID_START + 71) // ::rtl::OUString -#define PROPERTY_ID_SUBMIT_ACTION (PROPERTY_ID_START + 72) // string -#define PROPERTY_ID_SUBMIT_METHOD (PROPERTY_ID_START + 73) // FmSubmitMethod -#define PROPERTY_ID_SUBMIT_ENCODING (PROPERTY_ID_START + 74) // FmSubmitEncoding -#define PROPERTY_ID_DEFAULT_VALUE (PROPERTY_ID_START + 75) // ::rtl::OUString -#define PROPERTY_ID_SUBMIT_TARGET (PROPERTY_ID_START + 76) // ::rtl::OUString -#define PROPERTY_ID_DEFAULT_STATE (PROPERTY_ID_START + 77) // UINT16 -#define PROPERTY_ID_VALUE_SEQ (PROPERTY_ID_START + 78) // StringSeq -#define PROPERTY_ID_IMAGE_URL (PROPERTY_ID_START + 79) // ::rtl::OUString - // free - // free - // free - // free - // free - // free - // free - // free - // free - // free - // free -#define PROPERTY_ID_SELECT_SEQ (PROPERTY_ID_START + 91) // INT16Seq -#define PROPERTY_ID_DEFAULT_SELECT_SEQ (PROPERTY_ID_START + 92) // INT16Seq -#define PROPERTY_ID_MULTISELECTION (PROPERTY_ID_START + 93) // BOOL -#define PROPERTY_ID_MULTILINE (PROPERTY_ID_START + 94) // BOOL -#define PROPERTY_ID_DATE (PROPERTY_ID_START + 95) // UINT32 -#define PROPERTY_ID_DATEMIN (PROPERTY_ID_START + 96) // UINT32 -#define PROPERTY_ID_DATEMAX (PROPERTY_ID_START + 97) // UINT32 -#define PROPERTY_ID_DATEFORMAT (PROPERTY_ID_START + 98) // UINT16 -#define PROPERTY_ID_TIME (PROPERTY_ID_START + 99) // UINT32 -#define PROPERTY_ID_TIMEMIN (PROPERTY_ID_START +100) // UINT32 -#define PROPERTY_ID_TIMEMAX (PROPERTY_ID_START +101) // UINT32 -#define PROPERTY_ID_TIMEFORMAT (PROPERTY_ID_START +102) // UINT16 -#define PROPERTY_ID_VALUEMIN (PROPERTY_ID_START +103) // INT32 -#define PROPERTY_ID_VALUEMAX (PROPERTY_ID_START +104) // INT32 -#define PROPERTY_ID_VALUESTEP (PROPERTY_ID_START +105) // INT32 -#define PROPERTY_ID_CURRENCYSYMBOL (PROPERTY_ID_START +106) // ::rtl::OUString -#define PROPERTY_ID_EDITMASK (PROPERTY_ID_START +107) // ::rtl::OUString -#define PROPERTY_ID_LITERALMASK (PROPERTY_ID_START +108) // ::rtl::OUString -#define PROPERTY_ID_ENABLED (PROPERTY_ID_START +109) // BOOL -#define PROPERTY_ID_AUTOCOMPLETE (PROPERTY_ID_START +110) // BOOL -#define PROPERTY_ID_LINECOUNT (PROPERTY_ID_START +111) // UINT16 -#define PROPERTY_ID_MAXTEXTLEN (PROPERTY_ID_START +112) // UINT16 -#define PROPERTY_ID_SPIN (PROPERTY_ID_START +113) // BOOL -#define PROPERTY_ID_STRICTFORMAT (PROPERTY_ID_START +114) // BOOL -#define PROPERTY_ID_SHOWTHOUSANDSEP (PROPERTY_ID_START +115) // BOOL -#define PROPERTY_ID_HARDLINEBREAKS (PROPERTY_ID_START +116) // BOOL -#define PROPERTY_ID_PRINTABLE (PROPERTY_ID_START +117) // BOOL -#define PROPERTY_ID_TARGET_URL (PROPERTY_ID_START +118) // ::rtl::OUString -#define PROPERTY_ID_TARGET_FRAME (PROPERTY_ID_START +119) // ::rtl::OUString -#define PROPERTY_ID_TAG (PROPERTY_ID_START +120) // ::rtl::OUString -#define PROPERTY_ID_ECHO_CHAR (PROPERTY_ID_START +121) // UINT16 -#define PROPERTY_ID_SHOW_POSITION (PROPERTY_ID_START +122) // sal_Bool -#define PROPERTY_ID_SHOW_NAVIGATION (PROPERTY_ID_START +123) // sal_Bool -#define PROPERTY_ID_SHOW_RECORDACTIONS (PROPERTY_ID_START +124) // sal_Bool -#define PROPERTY_ID_SHOW_FILTERSORT (PROPERTY_ID_START +125) // sal_Bool -#define PROPERTY_ID_EMPTY_IS_NULL (PROPERTY_ID_START +126) // Bool -#define PROPERTY_ID_DECIMAL_ACCURACY (PROPERTY_ID_START +127) // UINT16 -#define PROPERTY_ID_DATE_SHOW_CENTURY (PROPERTY_ID_START +128) // Bool -#define PROPERTY_ID_TRISTATE (PROPERTY_ID_START +129) // Bool -#define PROPERTY_ID_DEFAULT_BUTTON (PROPERTY_ID_START +130) // Bool -#define PROPERTY_ID_HIDDEN_VALUE (PROPERTY_ID_START +131) // ::rtl::OUString -#define PROPERTY_ID_DECIMALS (PROPERTY_ID_START +132) // UINT16 -#define PROPERTY_ID_AUTOINCREMENT (PROPERTY_ID_START +133) // UINT16 - // free -#define PROPERTY_ID_FILTER (PROPERTY_ID_START +135) // ::rtl::OUString - // free -#define PROPERTY_ID_QUERY (PROPERTY_ID_START +137) // ::rtl::OUString -#define PROPERTY_ID_DEFAULT_LONG_VALUE (PROPERTY_ID_START +138) // Double -#define PROPERTY_ID_DEFAULT_DATE (PROPERTY_ID_START +139) // UINT32 -#define PROPERTY_ID_DEFAULT_TIME (PROPERTY_ID_START +140) -#define PROPERTY_ID_HELPTEXT (PROPERTY_ID_START +141) -#define PROPERTY_ID_FONT_NAME (PROPERTY_ID_START +142) -#define PROPERTY_ID_FONT_STYLENAME (PROPERTY_ID_START +143) -#define PROPERTY_ID_FONT_FAMILY (PROPERTY_ID_START +144) -#define PROPERTY_ID_FONT_CHARSET (PROPERTY_ID_START +145) -#define PROPERTY_ID_FONT_HEIGHT (PROPERTY_ID_START +146) -#define PROPERTY_ID_FONT_WEIGHT (PROPERTY_ID_START +147) -#define PROPERTY_ID_FONT_SLANT (PROPERTY_ID_START +148) -#define PROPERTY_ID_FONT_UNDERLINE (PROPERTY_ID_START +149) -#define PROPERTY_ID_FONT_STRIKEOUT (PROPERTY_ID_START +150) -#define PROPERTY_ID_ISPASSTHROUGH (PROPERTY_ID_START +151) -#define PROPERTY_ID_HELPURL (PROPERTY_ID_START +152) // ::rtl::OUString -#define PROPERTY_ID_RECORDMARKER (PROPERTY_ID_START +153) -#define PROPERTY_ID_BOUNDFIELD (PROPERTY_ID_START +154) -#define PROPERTY_ID_FORMATSSUPPLIER (PROPERTY_ID_START +155) // XNumberFormatsSupplier -#define PROPERTY_ID_TREATASNUMERIC (PROPERTY_ID_START +156) // BOOL -#define PROPERTY_ID_EFFECTIVE_VALUE (PROPERTY_ID_START +157) // ANY (string or double) -#define PROPERTY_ID_EFFECTIVE_DEFAULT (PROPERTY_ID_START +158) // dito -#define PROPERTY_ID_EFFECTIVE_MIN (PROPERTY_ID_START +159) // dito -#define PROPERTY_ID_EFFECTIVE_MAX (PROPERTY_ID_START +160) // dito -#define PROPERTY_ID_HIDDEN (PROPERTY_ID_START +161) // BOOL -#define PROPERTY_ID_FILTERPROPOSAL (PROPERTY_ID_START +162) // BOOL -#define PROPERTY_ID_FIELDSOURCE (PROPERTY_ID_START +163) // String -#define PROPERTY_ID_TABLENAME (PROPERTY_ID_START +164) // String -#define PROPERTY_ID_ENABLEVISIBLE (PROPERTY_ID_START +165) // BOOL - // FREE - // FREE - // FREE - // FREE -#define PROPERTY_ID_CONTROLLABEL (PROPERTY_ID_START +171) // XPropertySet -#define PROPERTY_ID_CURRSYM_POSITION (PROPERTY_ID_START +172) // String - // FREE -#define PROPERTY_ID_CURSORCOLOR (PROPERTY_ID_START +174) // INT32 -#define PROPERTY_ID_ALWAYSSHOWCURSOR (PROPERTY_ID_START +175) // BOOL -#define PROPERTY_ID_DISPLAYSYNCHRON (PROPERTY_ID_START +176) // BOOL -#define PROPERTY_ID_ISMODIFIED (PROPERTY_ID_START +177) // BOOL -#define PROPERTY_ID_ISNEW (PROPERTY_ID_START +178) // BOOL -#define PROPERTY_ID_PRIVILEGES (PROPERTY_ID_START +179) // INT32 -#define PROPERTY_ID_DETAILFIELDS (PROPERTY_ID_START +180) // Sequence< ::rtl::OUString > -#define PROPERTY_ID_COMMAND (PROPERTY_ID_START +181) // String -#define PROPERTY_ID_COMMANDTYPE (PROPERTY_ID_START +182) // INT32 (com::sun::star::sdb::CommandType) -#define PROPERTY_ID_RESULTSET_CONCURRENCY (PROPERTY_ID_START +183)// INT32 (com::sun::star::sdbc::ResultSetConcurrency) -#define PROPERTY_ID_INSERTONLY (PROPERTY_ID_START +184) // BOOL -#define PROPERTY_ID_RESULTSET_TYPE (PROPERTY_ID_START +185) // INT32 (com::sun::star::sdbc::ResultSetType) -#define PROPERTY_ID_ESCAPE_PROCESSING (PROPERTY_ID_START +186) // BOOL -#define PROPERTY_ID_APPLYFILTER (PROPERTY_ID_START +187) // BOOL - -#define PROPERTY_ID_ISNULLABLE (PROPERTY_ID_START +188) // BOOL -#define PROPERTY_ID_ACTIVECOMMAND (PROPERTY_ID_START +189) // String -#define PROPERTY_ID_ISCURRENCY (PROPERTY_ID_START +190) // BOOL -#define PROPERTY_ID_URL (PROPERTY_ID_START +192) // String -#define PROPERTY_ID_TITLE (PROPERTY_ID_START +193) // String -#define PROPERTY_ID_ACTIVE_CONNECTION (PROPERTY_ID_START +194) // com::sun::star::sdbc::XConnection -#define PROPERTY_ID_SCALE (PROPERTY_ID_START +195) // INT32 -#define PROPERTY_ID_SORT (PROPERTY_ID_START +196) // String - - // free - // free -#define PROPERTY_ID_FETCHSIZE (PROPERTY_ID_START +199) - // free -#define PROPERTY_ID_SEARCHABLE (PROPERTY_ID_START +201) -#define PROPERTY_ID_ISREADONLY (PROPERTY_ID_START +202) - // free -#define PROPERTY_ID_FIELDTYPE (PROPERTY_ID_START +204) -#define PROPERTY_ID_COLUMNSERVICENAME (PROPERTY_ID_START +205) -#define PROPERTY_ID_CONTROLSOURCEPROPERTY (PROPERTY_ID_START +206) -#define PROPERTY_ID_REALNAME (PROPERTY_ID_START +207) -#define PROPERTY_ID_FONT_WORDLINEMODE (PROPERTY_ID_START +208) -#define PROPERTY_ID_TEXTLINECOLOR (PROPERTY_ID_START +209) -#define PROPERTY_ID_FONTEMPHASISMARK (PROPERTY_ID_START +210) -#define PROPERTY_ID_FONTRELIEF (PROPERTY_ID_START +211) - -#define PROPERTY_ID_DISPATCHURLINTERNAL ( PROPERTY_ID_START + 212 ) // sal_Bool -#define PROPERTY_ID_PERSISTENCE_MAXTEXTLENGTH ( PROPERTY_ID_START + 213 ) // sal_Int16 -#define PROPERTY_ID_DEFAULT_SCROLL_VALUE ( PROPERTY_ID_START + 214 ) // sal_Int32 -#define PROPERTY_ID_DEFAULT_SPIN_VALUE ( PROPERTY_ID_START + 215 ) // sal_Int32 -#define PROPERTY_ID_SCROLL_VALUE ( PROPERTY_ID_START + 216 ) // sal_Int32 -#define PROPERTY_ID_SPIN_VALUE ( PROPERTY_ID_START + 217 ) // sal_Int32 -#define PROPERTY_ID_ICONSIZE ( PROPERTY_ID_START + 218 ) // sal_Int16 - -#define PROPERTY_ID_FONT_CHARWIDTH ( PROPERTY_ID_START + 219 ) // float -#define PROPERTY_ID_FONT_KERNING ( PROPERTY_ID_START + 220 ) // sal_Bool -#define PROPERTY_ID_FONT_ORIENTATION ( PROPERTY_ID_START + 221 ) // float -#define PROPERTY_ID_FONT_PITCH ( PROPERTY_ID_START + 222 ) // sal_Int16 -#define PROPERTY_ID_FONT_TYPE ( PROPERTY_ID_START + 223 ) // sal_Int16 -#define PROPERTY_ID_FONT_WIDTH ( PROPERTY_ID_START + 224 ) // sal_Int16 -#define PROPERTY_ID_RICH_TEXT ( PROPERTY_ID_START + 225 ) // sal_Bool - -#define PROPERTY_ID_DYNAMIC_CONTROL_BORDER ( PROPERTY_ID_START + 226 ) // sal_Bool -#define PROPERTY_ID_CONTROL_BORDER_COLOR_FOCUS ( PROPERTY_ID_START + 227 ) // sal_Int32 -#define PROPERTY_ID_CONTROL_BORDER_COLOR_MOUSE ( PROPERTY_ID_START + 228 ) // sal_Int32 -#define PROPERTY_ID_CONTROL_BORDER_COLOR_INVALID ( PROPERTY_ID_START + 229 ) // sal_Int32 - -#define PROPERTY_ID_XSD_PATTERN ( PROPERTY_ID_START + 230 ) -#define PROPERTY_ID_XSD_WHITESPACE ( PROPERTY_ID_START + 231 ) -#define PROPERTY_ID_XSD_LENGTH ( PROPERTY_ID_START + 232 ) -#define PROPERTY_ID_XSD_MIN_LENGTH ( PROPERTY_ID_START + 233 ) -#define PROPERTY_ID_XSD_MAX_LENGTH ( PROPERTY_ID_START + 234 ) -#define PROPERTY_ID_XSD_TOTAL_DIGITS ( PROPERTY_ID_START + 235 ) -#define PROPERTY_ID_XSD_FRACTION_DIGITS ( PROPERTY_ID_START + 236 ) -#define PROPERTY_ID_XSD_MAX_INCLUSIVE_INT ( PROPERTY_ID_START + 237 ) -#define PROPERTY_ID_XSD_MAX_EXCLUSIVE_INT ( PROPERTY_ID_START + 238 ) -#define PROPERTY_ID_XSD_MIN_INCLUSIVE_INT ( PROPERTY_ID_START + 239 ) -#define PROPERTY_ID_XSD_MIN_EXCLUSIVE_INT ( PROPERTY_ID_START + 240 ) -#define PROPERTY_ID_XSD_MAX_INCLUSIVE_DOUBLE ( PROPERTY_ID_START + 241 ) -#define PROPERTY_ID_XSD_MAX_EXCLUSIVE_DOUBLE ( PROPERTY_ID_START + 242 ) -#define PROPERTY_ID_XSD_MIN_INCLUSIVE_DOUBLE ( PROPERTY_ID_START + 243 ) -#define PROPERTY_ID_XSD_MIN_EXCLUSIVE_DOUBLE ( PROPERTY_ID_START + 244 ) -#define PROPERTY_ID_XSD_MAX_INCLUSIVE_DATE ( PROPERTY_ID_START + 245 ) -#define PROPERTY_ID_XSD_MAX_EXCLUSIVE_DATE ( PROPERTY_ID_START + 246 ) -#define PROPERTY_ID_XSD_MIN_INCLUSIVE_DATE ( PROPERTY_ID_START + 247 ) -#define PROPERTY_ID_XSD_MIN_EXCLUSIVE_DATE ( PROPERTY_ID_START + 248 ) -#define PROPERTY_ID_XSD_MAX_INCLUSIVE_TIME ( PROPERTY_ID_START + 249 ) -#define PROPERTY_ID_XSD_MAX_EXCLUSIVE_TIME ( PROPERTY_ID_START + 250 ) -#define PROPERTY_ID_XSD_MIN_INCLUSIVE_TIME ( PROPERTY_ID_START + 251 ) -#define PROPERTY_ID_XSD_MIN_EXCLUSIVE_TIME ( PROPERTY_ID_START + 252 ) -#define PROPERTY_ID_XSD_MAX_INCLUSIVE_DATE_TIME ( PROPERTY_ID_START + 253 ) -#define PROPERTY_ID_XSD_MAX_EXCLUSIVE_DATE_TIME ( PROPERTY_ID_START + 254 ) -#define PROPERTY_ID_XSD_MIN_INCLUSIVE_DATE_TIME ( PROPERTY_ID_START + 255 ) -#define PROPERTY_ID_XSD_MIN_EXCLUSIVE_DATE_TIME ( PROPERTY_ID_START + 256 ) -#define PROPERTY_ID_XSD_IS_BASIC ( PROPERTY_ID_START + 257 ) -#define PROPERTY_ID_XSD_TYPE_CLASS ( PROPERTY_ID_START + 258 ) - -#define PROPERTY_ID_LINEEND_FORMAT ( PROPERTY_ID_START + 259 ) // css.awt.LineEndFormat - -// start ID fuer aggregierte Properties -#define PROPERTY_ID_AGGREGATE_ID (PROPERTY_ID_START + 10000) - -//......................................................................... -} -//......................................................................... - - -#endif // _FRM_PROPERTY_HRC_ - diff --git a/forms/source/inc/property.hxx b/forms/source/inc/property.hxx deleted file mode 100644 index 35e8162bb..000000000 --- a/forms/source/inc/property.hxx +++ /dev/null @@ -1,238 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_PROPERTY_HXX_ -#define _FRM_PROPERTY_HXX_ - -#include <com/sun/star/uno/XAggregation.hpp> -#include <com/sun/star/beans/XPropertyState.hpp> -#include <com/sun/star/beans/PropertyAttribute.hpp> -#include <cppuhelper/propshlp.hxx> -#include <cppuhelper/proptypehlp.hxx> -#include <comphelper/property.hxx> -#include <comphelper/propagg.hxx> -#include <comphelper/stl_types.hxx> - -using namespace comphelper; - -//========================================================================= -//= property helper classes -//========================================================================= - -//... namespace frm ....................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -//= assigment property handle <-> property name -//= used by the PropertySetAggregationHelper -//================================================================== - -class PropertyInfoService -{ - //.................................................................. - struct PropertyAssignment - { - ::rtl::OUString sName; - sal_Int32 nHandle; - - PropertyAssignment() { nHandle = -1; } - PropertyAssignment(const PropertyAssignment& _rSource) - :sName(_rSource.sName), nHandle(_rSource.nHandle) { } - PropertyAssignment(const ::rtl::OUString& _rName, sal_Int32 _nHandle) - :sName(_rName), nHandle(_nHandle) { } - - }; - - DECLARE_STL_VECTOR(PropertyAssignment, PropertyMap); - static PropertyMap s_AllKnownProperties; - - //.................................................................. - // comparing two PropertyAssignment's -public: - typedef PropertyAssignment PUBLIC_SOLARIS_COMPILER_HACK; - // did not get the following compiled under with SUNPRO 5 without this - // public typedef -private: - friend struct PropertyAssignmentNameCompareLess; - typedef ::std::binary_function< PUBLIC_SOLARIS_COMPILER_HACK, PUBLIC_SOLARIS_COMPILER_HACK, sal_Bool > PropertyAssignmentNameCompareLess_Base; - struct PropertyAssignmentNameCompareLess : public PropertyAssignmentNameCompareLess_Base - { - inline sal_Bool operator() (const PUBLIC_SOLARIS_COMPILER_HACK& _rL, const PUBLIC_SOLARIS_COMPILER_HACK& _rR) const - { - return (_rL.sName.compareTo(_rR.sName) < 0); - } - }; - -public: - PropertyInfoService() { } - -public: - static sal_Int32 getPropertyId(const ::rtl::OUString& _rName); - static ::rtl::OUString getPropertyName(sal_Int32 _nHandle); - -private: - static void initialize(); -}; - -//.................................................................. -// a class implementing the comphelper::IPropertyInfoService -class ConcreteInfoService : public ::comphelper::IPropertyInfoService -{ -public: - virtual sal_Int32 getPreferedPropertyId(const ::rtl::OUString& _rName); -}; - -//------------------------------------------------------------------------------ -#define DECL_PROP_IMPL(varname, type) \ - *pProperties++ = com::sun::star::beans::Property(PROPERTY_##varname, PROPERTY_ID_##varname, ::getCppuType(reinterpret_cast< type* >(NULL)), - -//------------------------------------------------------------------------------ -#define DECL_BOOL_PROP_IMPL(varname) \ - *pProperties++ = com::sun::star::beans::Property(PROPERTY_##varname, PROPERTY_ID_##varname, ::getBooleanCppuType(), - -//------------------------------------------------------------------------------ -#define DECL_IFACE_PROP_IMPL(varname, type) \ - *pProperties++ = com::sun::star::beans::Property(PROPERTY_##varname, PROPERTY_ID_##varname, ::getCppuType(reinterpret_cast< com::sun::star::uno::Reference< type >* >(NULL)), - -//------------------------------------------------------------------------------ -#define BEGIN_DESCRIBE_PROPERTIES( count, baseclass ) \ - baseclass::describeFixedProperties( _rProps ); \ - sal_Int32 nOldCount = _rProps.getLength(); \ - _rProps.realloc( nOldCount + ( count ) ); \ - ::com::sun::star::beans::Property* pProperties = _rProps.getArray() + nOldCount; \ - -//------------------------------------------------------------------------------ -#define BEGIN_DESCRIBE_BASE_PROPERTIES( count ) \ - _rProps.realloc( count ); \ - ::com::sun::star::beans::Property* pProperties = _rProps.getArray(); \ - -//------------------------------------------------------------------------------ -#define BEGIN_DESCRIBE_AGGREGATION_PROPERTIES( count, aggregate ) \ - _rProps.realloc( count ); \ - ::com::sun::star::beans::Property* pProperties = _rProps.getArray(); \ - \ - if (aggregate.is()) \ - _rAggregateProps = aggregate->getPropertySetInfo()->getProperties(); \ - -// === -//------------------------------------------------------------------------------ -#define DECL_PROP0(varname, type) \ - DECL_PROP_IMPL(varname, type) 0) - -//------------------------------------------------------------------------------ -#define DECL_PROP1(varname, type, attrib1) \ - DECL_PROP_IMPL(varname, type) com::sun::star::beans::PropertyAttribute::attrib1) - -//------------------------------------------------------------------------------ -#define DECL_PROP2(varname, type, attrib1, attrib2) \ - DECL_PROP_IMPL(varname, type) com::sun::star::beans::PropertyAttribute::attrib1 | com::sun::star::beans::PropertyAttribute::attrib2) - -//------------------------------------------------------------------------------ -#define DECL_PROP3(varname, type, attrib1, attrib2, attrib3) \ - DECL_PROP_IMPL(varname, type) com::sun::star::beans::PropertyAttribute::attrib1 | com::sun::star::beans::PropertyAttribute::attrib2 | com::sun::star::beans::PropertyAttribute::attrib3) - -//------------------------------------------------------------------------------ -#define DECL_PROP4(varname, type, attrib1, attrib2, attrib3, attrib4) \ - DECL_PROP_IMPL(varname, type) com::sun::star::beans::PropertyAttribute::attrib1 | com::sun::star::beans::PropertyAttribute::attrib2 | com::sun::star::beans::PropertyAttribute::attrib3 | com::sun::star::beans::PropertyAttribute::attrib4) - -// === some property types require special handling -// === such as interfaces -//------------------------------------------------------------------------------ -#define DECL_IFACE_PROP0(varname, type) \ - DECL_IFACE_PROP_IMPL(varname, type) 0) - -//------------------------------------------------------------------------------ -#define DECL_IFACE_PROP1(varname, type, attrib1) \ - DECL_IFACE_PROP_IMPL(varname, type) starbeans::PropertyAttribute::attrib1) - -//------------------------------------------------------------------------------ -#define DECL_IFACE_PROP2(varname, type, attrib1, attrib2) \ - DECL_IFACE_PROP_IMPL(varname, type) com::sun::star::beans::PropertyAttribute::attrib1 | com::sun::star::beans::PropertyAttribute::attrib2) - -//------------------------------------------------------------------------------ -#define DECL_IFACE_PROP3(varname, type, attrib1, attrib2, attrib3) \ - DECL_IFACE_PROP_IMPL(varname, type) starbeans::PropertyAttribute::attrib1 | starbeans::PropertyAttribute::attrib2 | starbeans::PropertyAttribute::attrib3) - -//------------------------------------------------------------------------------ -#define DECL_IFACE_PROP4(varname, type, attrib1, attrib2, attrib3, attrib4) \ - DECL_IFACE_PROP_IMPL(varname, type) starbeans::PropertyAttribute::attrib1 | starbeans::PropertyAttribute::attrib2 | starbeans::PropertyAttribute::attrib3 | PropertyAttribute::attrib4) - -// === or Boolean properties -//------------------------------------------------------------------------------ -#define DECL_BOOL_PROP0(varname) \ - DECL_BOOL_PROP_IMPL(varname) 0) - -//------------------------------------------------------------------------------ -#define DECL_BOOL_PROP1(varname, attrib1) \ - DECL_BOOL_PROP_IMPL(varname) com::sun::star::beans::PropertyAttribute::attrib1) - -//------------------------------------------------------------------------------ -#define DECL_BOOL_PROP2(varname, attrib1, attrib2) \ - DECL_BOOL_PROP_IMPL(varname) com::sun::star::beans::PropertyAttribute::attrib1 | com::sun::star::beans::PropertyAttribute::attrib2) - -//------------------------------------------------------------------------------ -#define DECL_BOOL_PROP3( varname, attrib1, attrib2, attrib3 ) \ - DECL_BOOL_PROP_IMPL(varname) com::sun::star::beans::PropertyAttribute::attrib1 | com::sun::star::beans::PropertyAttribute::attrib2 | com::sun::star::beans::PropertyAttribute::attrib3 ) - -// === -//------------------------------------------------------------------------------ -#define END_DESCRIBE_PROPERTIES() \ - DBG_ASSERT( pProperties == _rProps.getArray() + _rProps.getLength(), "<...>::describeFixedProperties/getInfoHelper: forgot to adjust the count ?"); \ - -//============================================================================== -//------------------------------------------------------------------------------ -#define REGISTER_PROP_1( prop, member, attrib1 ) \ - registerProperty( PROPERTY_##prop, PROPERTY_ID_##prop, PropertyAttribute::attrib1, \ - &member, ::getCppuType( &member ) ); - -#define REGISTER_PROP_2( prop, member, attrib1, attrib2 ) \ - registerProperty( PROPERTY_##prop, PROPERTY_ID_##prop, PropertyAttribute::attrib1 | PropertyAttribute::attrib2, \ - &member, ::getCppuType( &member ) ); - -#define REGISTER_PROP_3( prop, member, attrib1, attrib2, attrib3 ) \ - registerProperty( PROPERTY_##prop, PROPERTY_ID_##prop, PropertyAttribute::attrib1 | PropertyAttribute::attrib2 | PropertyAttribute::attrib3, \ - &member, ::getCppuType( &member ) ); - -//------------------------------------------------------------------------------ -#define REGISTER_VOID_PROP_1( prop, memberAny, type, attrib1 ) \ - registerMayBeVoidProperty( PROPERTY_##prop, PROPERTY_ID_##prop, PropertyAttribute::MAYBEVOID | PropertyAttribute::attrib1, \ - &memberAny, ::getCppuType( static_cast< type* >( NULL ) ) ); - -#define REGISTER_VOID_PROP_2( prop, memberAny, type, attrib1, attrib2 ) \ - registerMayBeVoidProperty( PROPERTY_##prop, PROPERTY_ID_##prop, PropertyAttribute::MAYBEVOID | PropertyAttribute::attrib1 | PropertyAttribute::attrib2, \ - &memberAny, ::getCppuType( static_cast< type* >( NULL ) ) ); - -//......................................................................... -} -//... namespace frm ....................................................... - -#endif // _FRM_PROPERTY_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/propertybaghelper.hxx b/forms/source/inc/propertybaghelper.hxx deleted file mode 100644 index b8c0fbe16..000000000 --- a/forms/source/inc/propertybaghelper.hxx +++ /dev/null @@ -1,168 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_PROPERTYBAGHELPER_HXX -#define FORMS_PROPERTYBAGHELPER_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/beans/PropertyValue.hpp> -/** === end UNO includes === **/ - -#include <comphelper/propertybag.hxx> -#include <comphelper/propagg.hxx> - -#include <boost/noncopyable.hpp> - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= class IPropertyBagHelperContext - //==================================================================== - class SAL_NO_VTABLE IPropertyBagHelperContext - { - public: - virtual ::osl::Mutex& getMutex() = 0; - - virtual void describeFixedAndAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rFixedProperties, - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rAggregateProperties - ) const = 0; - - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XMultiPropertySet > - getPropertiesInterface() = 0; - }; - - //==================================================================== - //= class PropertyBagHelper - //==================================================================== - class PropertyBagHelper : public ::boost::noncopyable - { - private: - IPropertyBagHelperContext& m_rContext; - ::comphelper::OPropertyArrayAggregationHelper* m_pPropertyArrayHelper; - ::comphelper::PropertyBag m_aDynamicProperties; - bool m_bDisposed; - - public: - PropertyBagHelper( IPropertyBagHelperContext& _rContext ); - ~PropertyBagHelper(); - - // XComponent equivalent - void dispose(); - - // OPropertySetHelper equivalent - inline ::comphelper::OPropertyArrayAggregationHelper& getInfoHelper() const; - - // XPropertyContainer equivalent - void addProperty( const ::rtl::OUString& _rName, ::sal_Int16 _nAttributes, const ::com::sun::star::uno::Any& _rInitialValue ); - void removeProperty( const ::rtl::OUString& _rName ); - - // XPropertyAccess equivalent - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getPropertyValues(); - void setPropertyValues( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rProps ); - - // forwards to m_aDynamicProperties - inline void getDynamicFastPropertyValue( sal_Int32 _nHandle, ::com::sun::star::uno::Any& _out_rValue ) const; - inline bool convertDynamicFastPropertyValue( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rNewValue, ::com::sun::star::uno::Any& _out_rConvertedValue, ::com::sun::star::uno::Any& _out_rCurrentValue ) const; - inline void setDynamicFastPropertyValue( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ); - inline void getDynamicPropertyDefaultByHandle( sal_Int32 _nHandle, ::com::sun::star::uno::Any& _out_rValue ) const; - inline bool hasDynamicPropertyByName( const ::rtl::OUString& _rName ) const; - inline bool hasDynamicPropertyByHandle( sal_Int32 _nHandle ) const; - - private: - void impl_nts_checkDisposed_throw() const; - - /** invalidates our property set info, so subsequent calls to impl_ts_getArrayHelper and thus - getInfoHelper will return a newly created instance - */ - void impl_nts_invalidatePropertySetInfo(); - - /** returns the IPropertyArrayHelper instance used by |this| - */ - ::comphelper::OPropertyArrayAggregationHelper& impl_ts_getArrayHelper() const; - - /** finds a free property handle - @param _rPropertyName - the name of the property to find a handle for. If possible, the handle as determined by - our ConcreteInfoService instance will be used - */ - sal_Int32 impl_findFreeHandle( const ::rtl::OUString& _rPropertyName ); - }; - - //-------------------------------------------------------------------- - inline ::comphelper::OPropertyArrayAggregationHelper& PropertyBagHelper::getInfoHelper() const - { - return impl_ts_getArrayHelper(); - } - - //-------------------------------------------------------------------- - inline void PropertyBagHelper::getDynamicFastPropertyValue( sal_Int32 _nHandle, ::com::sun::star::uno::Any& _out_rValue ) const - { - m_aDynamicProperties.getFastPropertyValue( _nHandle, _out_rValue ); - } - - //-------------------------------------------------------------------- - inline bool PropertyBagHelper::convertDynamicFastPropertyValue( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rNewValue, ::com::sun::star::uno::Any& _out_rConvertedValue, ::com::sun::star::uno::Any& _out_rCurrentValue ) const - { - return m_aDynamicProperties.convertFastPropertyValue( _nHandle, _rNewValue, _out_rConvertedValue, _out_rCurrentValue ); - } - - //-------------------------------------------------------------------- - inline void PropertyBagHelper::setDynamicFastPropertyValue( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) - { - m_aDynamicProperties.setFastPropertyValue( _nHandle, _rValue ); - } - - //-------------------------------------------------------------------- - inline void PropertyBagHelper::getDynamicPropertyDefaultByHandle( sal_Int32 _nHandle, ::com::sun::star::uno::Any& _out_rValue ) const - { - m_aDynamicProperties.getPropertyDefaultByHandle( _nHandle, _out_rValue ); - } - - //-------------------------------------------------------------------- - inline bool PropertyBagHelper::hasDynamicPropertyByName( const ::rtl::OUString& _rName ) const - { - return m_aDynamicProperties.hasPropertyByName( _rName ); - } - - //-------------------------------------------------------------------- - inline bool PropertyBagHelper::hasDynamicPropertyByHandle( sal_Int32 _nHandle ) const - { - return m_aDynamicProperties.hasPropertyByHandle( _nHandle ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_PROPERTYBAGHELPER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/resettable.hxx b/forms/source/inc/resettable.hxx deleted file mode 100644 index f40383e48..000000000 --- a/forms/source/inc/resettable.hxx +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * -************************************************************************/ - -#ifndef FORMS_RESETTABLE_HXX -#define FORMS_RESETTABLE_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/form/XResetListener.hpp> -/** === end UNO includes === **/ - -#include <cppuhelper/interfacecontainer.hxx> - -namespace cppu -{ - class OWeakObject; -} - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= ResetHelper - //==================================================================== - class ResetHelper - { - public: - ResetHelper( ::cppu::OWeakObject& _parent, ::osl::Mutex& _mutex ) - :m_rParent( _parent ) - ,m_aResetListeners( _mutex ) - { - } - - // XReset equivalents - void addResetListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener >& _listener ); - void removeResetListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener >& _listener ); - - // calling listeners - bool approveReset(); - void notifyResetted(); - void disposing(); - - private: - ::cppu::OWeakObject& m_rParent; - ::cppu::OInterfaceContainerHelper m_aResetListeners; - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_RESETTABLE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/services.hxx b/forms/source/inc/services.hxx deleted file mode 100644 index f71436ffb..000000000 --- a/forms/source/inc/services.hxx +++ /dev/null @@ -1,235 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_SERVICES_HXX_ -#define _FRM_SERVICES_HXX_ - -#include <rtl/ustring.hxx> -#include "frm_strings.hxx" - -//......................................................................... -namespace frm -{ -//......................................................................... - - FORMS_CONSTASCII_STRING( AWT_CONTROL_TEXTFIELD, "com.sun.star.awt.TextField" ); - - FORMS_CONSTASCII_STRING( VCL_CONTROL_EDIT, "stardiv.vcl.control.Edit" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_LISTBOX, "stardiv.vcl.control.ListBox" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_COMBOBOX, "stardiv.vcl.control.ComboBox" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_RADIOBUTTON, "stardiv.vcl.control.RadioButton" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_GROUPBOX, "stardiv.vcl.control.GroupBox" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_FIXEDTEXT, "stardiv.vcl.control.FixedText" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_COMMANDBUTTON, "stardiv.vcl.control.Button" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_CHECKBOX, "stardiv.vcl.control.CheckBox" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_IMAGEBUTTON, "stardiv.vcl.control.ImageButton" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_FILECONTROL, "stardiv.vcl.control.FileControl" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_TIMEFIELD, "stardiv.vcl.control.TimeField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_DATEFIELD, "stardiv.vcl.control.DateField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_NUMERICFIELD, "stardiv.vcl.control.NumericField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_CURRENCYFIELD, "stardiv.vcl.control.CurrencyField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_PATTERNFIELD, "stardiv.vcl.control.PatternField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_FORMATTEDFIELD, "stardiv.vcl.control.FormattedField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_IMAGECONTROL, "stardiv.vcl.control.ImageControl" ); - - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_EDIT, "stardiv.vcl.controlmodel.Edit" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_LISTBOX, "stardiv.vcl.controlmodel.ListBox" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_COMBOBOX, "stardiv.vcl.controlmodel.ComboBox" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_RADIOBUTTON, "stardiv.vcl.controlmodel.RadioButton" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_GROUPBOX, "stardiv.vcl.controlmodel.GroupBox" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_FIXEDTEXT, "stardiv.vcl.controlmodel.FixedText" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_COMMANDBUTTON, "stardiv.vcl.controlmodel.Button" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_CHECKBOX, "stardiv.vcl.controlmodel.CheckBox" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_IMAGEBUTTON, "stardiv.vcl.controlmodel.ImageButton" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_FILECONTROL, "stardiv.vcl.controlmodel.FileControl" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_TIMEFIELD, "stardiv.vcl.controlmodel.TimeField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_DATEFIELD, "stardiv.vcl.controlmodel.DateField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_NUMERICFIELD, "stardiv.vcl.controlmodel.NumericField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_CURRENCYFIELD, "stardiv.vcl.controlmodel.CurrencyField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_PATTERNFIELD, "stardiv.vcl.controlmodel.PatternField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_FORMATTEDFIELD, "stardiv.vcl.controlmodel.FormattedField" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_IMAGECONTROL, "stardiv.vcl.controlmodel.ImageControl" ); - - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_SCROLLBAR, "com.sun.star.awt.UnoControlScrollBarModel" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_SCROLLBAR, "com.sun.star.awt.UnoControlScrollBar" ); - FORMS_CONSTASCII_STRING( VCL_CONTROLMODEL_SPINBUTTON, "com.sun.star.awt.UnoControlSpinButtonModel" ); - FORMS_CONSTASCII_STRING( VCL_CONTROL_SPINBUTTON, "com.sun.star.awt.UnoControlSpinButton" ); - - // ----------------------- - // service names for compatibility - // ----------------------- - FORMS_CONSTASCII_STRING( FRM_COMPONENT_FORM, "stardiv.one.form.component.Form" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_EDIT, "stardiv.one.form.component.Edit" ); // compatibility - FORMS_CONSTASCII_STRING( FRM_COMPONENT_TEXTFIELD, "stardiv.one.form.component.TextField" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_LISTBOX, "stardiv.one.form.component.ListBox" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_COMBOBOX, "stardiv.one.form.component.ComboBox" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_RADIOBUTTON, "stardiv.one.form.component.RadioButton" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_GROUPBOX, "stardiv.one.form.component.GroupBox" ); // compatibility - FORMS_CONSTASCII_STRING( FRM_COMPONENT_FIXEDTEXT, "stardiv.one.form.component.FixedText" ); // compatibility - FORMS_CONSTASCII_STRING( FRM_COMPONENT_COMMANDBUTTON, "stardiv.one.form.component.CommandButton" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_CHECKBOX, "stardiv.one.form.component.CheckBox" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_GRID, "stardiv.one.form.component.Grid" ); // compatibility - FORMS_CONSTASCII_STRING( FRM_COMPONENT_GRIDCONTROL, "stardiv.one.form.component.GridControl" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_IMAGEBUTTON, "stardiv.one.form.component.ImageButton" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_FILECONTROL, "stardiv.one.form.component.FileControl" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_TIMEFIELD, "stardiv.one.form.component.TimeField" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_DATEFIELD, "stardiv.one.form.component.DateField" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_NUMERICFIELD, "stardiv.one.form.component.NumericField" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_CURRENCYFIELD, "stardiv.one.form.component.CurrencyField" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_PATTERNFIELD, "stardiv.one.form.component.PatternField" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_HIDDEN, "stardiv.one.form.component.Hidden" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_HIDDENCONTROL, "stardiv.one.form.component.HiddenControl" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_IMAGECONTROL, "stardiv.one.form.component.ImageControl" ); - FORMS_CONSTASCII_STRING( FRM_COMPONENT_FORMATTEDFIELD, "stardiv.one.form.component.FormattedField" ); - - // <compatibility_I> - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_COMMANDBUTTON, "stardiv.one.form.control.CommandButton" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_RADIOBUTTON, "stardiv.one.form.control.RadioButton" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_CHECKBOX, "stardiv.one.form.control.CheckBox" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_EDIT, "stardiv.one.form.control.Edit" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_LISTBOX, "stardiv.one.form.control.ListBox" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_COMBOBOX, "stardiv.one.form.control.ComboBox" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_GROUPBOX, "stardiv.one.form.control.GroupBox" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_TEXTFIELD, "stardiv.one.form.control.TextField" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_GRID, "stardiv.one.form.control.Grid" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_IMAGEBUTTON, "stardiv.one.form.control.ImageButton" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_TIMEFIELD, "stardiv.one.form.control.TimeField" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_DATEFIELD, "stardiv.one.form.control.DateField" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_NUMERICFIELD, "stardiv.one.form.control.NumericField" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_CURRENCYFIELD, "stardiv.one.form.control.CurrencyField" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_PATTERNFIELD, "stardiv.one.form.control.PatternField" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_IMAGECONTROL, "stardiv.one.form.control.ImageControl" ); - FORMS_CONSTASCII_STRING( STARDIV_ONE_FORM_CONTROL_FORMATTEDFIELD, "stardiv.one.form.control.FormattedField"); - // </compatibility_I> - - // ----------------------- - // new (sun) service names - // ----------------------- - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_FORM, "com.sun.star.form.component.Form" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_HTMLFORM, "com.sun.star.form.component.HTMLForm" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATAFORM, "com.sun.star.form.component.DataForm" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_TEXTFIELD, "com.sun.star.form.component.TextField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_LISTBOX, "com.sun.star.form.component.ListBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_COMBOBOX, "com.sun.star.form.component.ComboBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_RADIOBUTTON, "com.sun.star.form.component.RadioButton" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_GROUPBOX, "com.sun.star.form.component.GroupBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_FIXEDTEXT, "com.sun.star.form.component.FixedText" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_COMMANDBUTTON, "com.sun.star.form.component.CommandButton" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_CHECKBOX, "com.sun.star.form.component.CheckBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_GRIDCONTROL, "com.sun.star.form.component.GridControl" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_IMAGEBUTTON, "com.sun.star.form.component.ImageButton" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_FILECONTROL, "com.sun.star.form.component.FileControl" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_TIMEFIELD, "com.sun.star.form.component.TimeField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATEFIELD, "com.sun.star.form.component.DateField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_NUMERICFIELD, "com.sun.star.form.component.NumericField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_CURRENCYFIELD, "com.sun.star.form.component.CurrencyField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_PATTERNFIELD, "com.sun.star.form.component.PatternField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_HIDDENCONTROL, "com.sun.star.form.component.HiddenControl" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_FORMATTEDFIELD, "com.sun.star.form.component.FormattedField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_SCROLLBAR, "com.sun.star.form.component.ScrollBar" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_SPINBUTTON, "com.sun.star.form.component.SpinButton" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_RICHTEXTCONTROL, "com.sun.star.form.component.RichTextControl" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_NAVTOOLBAR, "com.sun.star.form.component.NavigationToolBar" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_SUBMITBUTTON, "com.sun.star.form.component.SubmitButton" ); - - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_IMAGECONTROL, "com.sun.star.form.component.DatabaseImageControl" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_RADIOBUTTON, "com.sun.star.form.component.DatabaseRadioButton" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_CHECKBOX, "com.sun.star.form.component.DatabaseCheckBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_LISTBOX, "com.sun.star.form.component.DatabaseListBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_COMBOBOX, "com.sun.star.form.component.DatabaseComboBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_FORMATTEDFIELD, "com.sun.star.form.component.DatabaseFormattedField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_TEXTFIELD, "com.sun.star.form.component.DatabaseTextField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_DATEFIELD, "com.sun.star.form.component.DatabaseDateField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_TIMEFIELD, "com.sun.star.form.component.DatabaseTimeField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_NUMERICFIELD, "com.sun.star.form.component.DatabaseNumericField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_CURRENCYFIELD, "com.sun.star.form.component.DatabaseCurrencyField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_COMPONENT_DATABASE_PATTERNFIELD, "com.sun.star.form.component.DatabasePatternField" ); - - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_TEXTFIELD, "com.sun.star.form.control.TextField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_LISTBOX, "com.sun.star.form.control.ListBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_COMBOBOX, "com.sun.star.form.control.ComboBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_RADIOBUTTON, "com.sun.star.form.control.RadioButton" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_GROUPBOX, "com.sun.star.form.control.GroupBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_FIXEDTEXT, "com.sun.star.form.control.FixedText" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_COMMANDBUTTON, "com.sun.star.form.control.CommandButton" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_CHECKBOX, "com.sun.star.form.control.CheckBox" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_GRIDCONTROL, "com.sun.star.form.control.GridControl" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_IMAGEBUTTON, "com.sun.star.form.control.ImageButton" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_TIMEFIELD, "com.sun.star.form.control.TimeField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_DATEFIELD, "com.sun.star.form.control.DateField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_NUMERICFIELD, "com.sun.star.form.control.NumericField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_CURRENCYFIELD, "com.sun.star.form.control.CurrencyField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_PATTERNFIELD, "com.sun.star.form.control.PatternField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_IMAGECONTROL, "com.sun.star.form.control.ImageControl" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_FORMATTEDFIELD, "com.sun.star.form.control.FormattedField" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_RICHTEXTCONTROL,"com.sun.star.form.control.RichTextControl" ); - FORMS_CONSTASCII_STRING( FRM_SUN_CONTROL_SUBMITBUTTON, "com.sun.star.form.control.SubmitButton" ); - - FORMS_CONSTASCII_STRING( FRM_SUN_FORMS_COLLECTION, "com.sun.star.form.Forms" ); - - FORMS_CONSTASCII_STRING( BINDABLE_DATABASE_CHECK_BOX, "com.sun.star.form.binding.BindableDatabaseCheckBox" ); - FORMS_CONSTASCII_STRING( BINDABLE_DATABASE_COMBO_BOX, "com.sun.star.form.binding.BindableDatabaseComboBox" ); - FORMS_CONSTASCII_STRING( BINDABLE_DATABASE_FORMATTED_FIELD,"com.sun.star.form.binding.BindableDatabaseFormattedField" ); - FORMS_CONSTASCII_STRING( BINDABLE_DATABASE_LIST_BOX, "com.sun.star.form.binding.BindableDatabaseListBox" ); - FORMS_CONSTASCII_STRING( BINDABLE_DATABASE_NUMERIC_FIELD, "com.sun.star.form.binding.BindableDatabaseNumericField" ); - FORMS_CONSTASCII_STRING( BINDABLE_DATABASE_RADIO_BUTTON, "com.sun.star.form.binding.BindableDatabaseRadioButton" ); - FORMS_CONSTASCII_STRING( BINDABLE_DATABASE_TEXT_FIELD, "com.sun.star.form.binding.BindableDatabaseTextField" ); - FORMS_CONSTASCII_STRING( BINDABLE_DATABASE_DATE_FIELD, "com.sun.star.form.binding.BindableDatabaseDateField" ); - FORMS_CONSTASCII_STRING( BINDABLE_DATABASE_TIME_FIELD, "com.sun.star.form.binding.BindableDatabaseTimeField" ); - - FORMS_CONSTASCII_STRING( BINDABLE_CONTROL_MODEL, "com.sun.star.form.binding.BindableControlModel" ); - FORMS_CONSTASCII_STRING( BINDABLE_INTEGER_VALUE_RANGE, "com.sun.star.form.binding.BindableIntegerValueRange" ); - FORMS_CONSTASCII_STRING( BINDABLE_DATA_AWARE_CONTROL_MODEL, "com.sun.star.form.binding.BindableDataAwareControlModel" ); - FORMS_CONSTASCII_STRING( DATA_AWARE_CONTROL_MODEL, "com.sun.star.form.binding.DataAwareControlModel" ); - FORMS_CONSTASCII_STRING( VALIDATABLE_CONTROL_MODEL, "com.sun.star.form.binding.ValidatableControlModel" ); - FORMS_CONSTASCII_STRING( VALIDATABLE_BINDABLE_CONTROL_MODEL,"com.sun.star.form.binding.ValidatableBindableControlModel" ); - - // ----------------------- - // common - // ----------------------- - FORMS_CONSTASCII_STRING( FRM_SUN_FORMCOMPONENT, "com.sun.star.form.FormComponent" ); - - // ----------------------- - // misc - // ----------------------- - FORMS_CONSTASCII_STRING( SRV_AWT_POINTER, "com.sun.star.awt.Pointer" ); - FORMS_CONSTASCII_STRING( SRV_AWT_IMAGEPRODUCER, "com.sun.star.awt.ImageProducer" ); - FORMS_CONSTASCII_STRING( FRM_NUMBER_FORMATTER, "com.sun.star.util.NumberFormatter" ); - FORMS_CONSTASCII_STRING( FRM_NUMBER_FORMATS_SUPPLIER, "com.sun.star.util.NumberFormatsSupplier" ); - - FORMS_CONSTASCII_STRING( SRV_SDB_ROWSET, "com.sun.star.sdb.RowSet" ); - FORMS_CONSTASCII_STRING( SRV_SDB_CONNECTION, "com.sun.star.sdb.Connection" ); - - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // _FRM_SERVICES_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/togglestate.hxx b/forms/source/inc/togglestate.hxx deleted file mode 100644 index 77076916b..000000000 --- a/forms/source/inc/togglestate.hxx +++ /dev/null @@ -1,47 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * -************************************************************************/ - -#ifndef FORMS_TOGGLESTATE_HXX -#define FORMS_TOGGLESTATE_HXX - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ - -//........................................................................ -namespace frm -{ -//........................................................................ - - enum ToggleState { STATE_NOCHECK = 0, STATE_CHECK = 1, STATE_DONTKNOW = 2 }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_TOGGLESTATE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/urltransformer.hxx b/forms/source/inc/urltransformer.hxx deleted file mode 100644 index aecc29541..000000000 --- a/forms/source/inc/urltransformer.hxx +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_INC_URLTRANSFORMER_HXX -#define FORMS_SOURCE_INC_URLTRANSFORMER_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/util/XURLTransformer.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/util/URL.hpp> -/** === end UNO includes === **/ - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= UrlTransformer - //==================================================================== - class UrlTransformer - { - private: - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > - m_xORB; - mutable ::com::sun::star::uno::Reference< ::com::sun::star::util::XURLTransformer > - m_xTransformer; - mutable bool m_bTriedToCreateTransformer; - - public: - UrlTransformer( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB ); - - /** returns an URL object for the given URL string - */ - ::com::sun::star::util::URL - getStrictURL( const ::rtl::OUString& _rURL ) const; - - /** returns an URL object for the given URL ASCII string - */ - ::com::sun::star::util::URL - getStrictURLFromAscii( const sal_Char* _pAsciiURL ) const; - - /** parses a given URL smartly, with a protocol given by ASCII string - */ - void - parseSmartWithAsciiProtocol( ::com::sun::star::util::URL& _rURL, const sal_Char* _pAsciiURL ) const; - - private: - /** ensures that we have an URLTransformer instance in <member>m_xTransformer</member> - - @return - <TRUE/> if and only if m_xTransformer is not <NULL/> - */ - bool implEnsureTransformer() const; - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_INC_URLTRANSFORMER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/inc/windowstateguard.hxx b/forms/source/inc/windowstateguard.hxx deleted file mode 100644 index b93959f26..000000000 --- a/forms/source/inc/windowstateguard.hxx +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_WINDOWSTATEGUARD_HXX -#define FORMS_WINDOWSTATEGUARD_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/awt/XWindow2.hpp> -#include <com/sun/star/awt/XControlModel.hpp> -/** === end UNO includes === **/ -#include <rtl/ref.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= WindowStateGuard - //==================================================================== - class WindowStateGuard_Impl; - - /** a helper class which monitors certain states of an XWindow2, and ensures - that they're consistent with respective properties at an XModel. - - For form controls, window states - such as "Enabled" - can be set by various - means. You can set the respective control model property, you can directly manipulate - the XWindow2, or the state can change implicitly due to VCL actions. In any case, - we need to ensure that the state does not contradict the model property "too much". - - As an example, consider a form control which, according to its model's property, is disabled. - Now when the parent VCL window of the control's VCL window is enabled, then the the control's - window is enabled, too - which contradicts the model property. - - A WindowStateGuard helps you preventing such inconsistent states. - - The class is not threadsafe. - */ - class WindowStateGuard - { - private: - ::rtl::Reference< WindowStateGuard_Impl > m_pImpl; - - public: - WindowStateGuard(); - ~WindowStateGuard(); - - void attach( - const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow2 >& _rxWindow, - const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel - ); - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_WINDOWSTATEGUARD_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/misc/InterfaceContainer.cxx b/forms/source/misc/InterfaceContainer.cxx deleted file mode 100644 index 6af924d7b..000000000 --- a/forms/source/misc/InterfaceContainer.cxx +++ /dev/null @@ -1,1358 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "frm_resource.hrc" -#include "frm_resource.hxx" -#include "InterfaceContainer.hxx" -#include "componenttools.hxx" -#include "property.hrc" -#include "services.hxx" - -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/container/XNamed.hpp> -#include <com/sun/star/io/WrongFormatException.hpp> -#include <com/sun/star/io/XMarkableStream.hpp> -#include <com/sun/star/lang/XComponent.hpp> -#include <com/sun/star/util/XCloneable.hpp> -#include <com/sun/star/form/XForm.hpp> - -#include <comphelper/container.hxx> -#include <comphelper/enumhelper.hxx> -#include <comphelper/eventattachermgr.hxx> -#include <comphelper/property.hxx> -#include <comphelper/sequence.hxx> -#include <comphelper/types.hxx> -#include <cppuhelper/exc_hlp.hxx> -#include <cppuhelper/queryinterface.hxx> -#include <rtl/logfile.hxx> -#include <tools/debug.hxx> -#include <tools/diagnose_ex.h> - -#include <algorithm> -#include <memory> - -//......................................................................... -#include <com/sun/star/frame/XModel.hpp> -#include <com/sun/star/document/XCodeNameQuery.hpp> -#include <ooo/vba/XVBAToOOEventDescGen.hpp> -#include <comphelper/processfactory.hxx> - -namespace frm -{ -//......................................................................... - -using namespace ::com::sun::star::frame; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::document; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::script; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::form; -using namespace ::com::sun::star::util; - -namespace -{ - //--------------------------------------------------------------------- - static void lcl_throwIllegalArgumentException() - { - throw IllegalArgumentException(); - } -} - -bool -lcl_hasVbaEvents( const Sequence< ScriptEventDescriptor >& sEvents ) -{ - const ScriptEventDescriptor* pDesc = sEvents.getConstArray(); - const ScriptEventDescriptor* pEnd = ( pDesc + sEvents.getLength() ); - for ( ; pDesc != pEnd; ++pDesc ) - { - if ( pDesc->ScriptType.equals( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VBAInterop") ) ) ) - return true; - } - return false; -} - -Sequence< ScriptEventDescriptor > -lcl_stripVbaEvents( const Sequence< ScriptEventDescriptor >& sEvents ) -{ - Sequence< ScriptEventDescriptor > sStripped( sEvents.getLength() ); - - const ScriptEventDescriptor* pDesc = sEvents.getConstArray(); - const ScriptEventDescriptor* pEnd = ( pDesc + sEvents.getLength() ); - sal_Int32 nCopied = 0; - for ( ; pDesc != pEnd; ++pDesc ) - { - if ( !pDesc->ScriptType.equals( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VBAInterop") ) ) ) - { - sStripped[ nCopied++ ] = *pDesc; - } - } - if ( nCopied ) - sStripped.realloc( nCopied ); - return sStripped; -} - -void OInterfaceContainer::impl_addVbEvents_nolck_nothrow( const sal_Int32 i_nIndex ) -{ - // we are dealing with form controls - try - { - do - { - Reference< XModel > xDoc( getXModel( static_cast< XContainer *> ( this ) ) ); - if ( !xDoc.is() ) - break; - - Reference< XMultiServiceFactory > xDocFac( xDoc, UNO_QUERY_THROW ); - Reference< XCodeNameQuery > xNameQuery( xDocFac->createInstance( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ooo.vba.VBACodeNameProvider") ) ), UNO_QUERY ); - if ( !xNameQuery.is() ) - break; - - ::osl::MutexGuard aGuard( m_rMutex ); - bool hasVBABindings = lcl_hasVbaEvents( m_xEventAttacher->getScriptEvents( i_nIndex ) ); - if ( hasVBABindings ) - break; - - Reference< XInterface > xElement( getByIndex( i_nIndex ) , UNO_QUERY_THROW ); - Reference< XForm > xElementAsForm( xElement, UNO_QUERY ); - if ( xElementAsForm.is() ) - break; - - ::rtl::OUString sCodeName( xNameQuery->getCodeNameForObject( xElement ) ); - - Reference< XPropertySet > xProps( xElement, UNO_QUERY_THROW ); - ::rtl::OUString sServiceName; - xProps->getPropertyValue( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultControl") ) ) >>= sServiceName; - - Reference< ooo::vba::XVBAToOOEventDescGen > xDescSupplier( m_xServiceFactory->createInstance( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ooo.vba.VBAToOOEventDesc") ) ), UNO_QUERY_THROW ); - Reference< XInterface > xInterface = m_xServiceFactory->createInstance( sServiceName ); - Sequence< ScriptEventDescriptor > vbaEvents = xDescSupplier->getEventDescriptions( xInterface, sCodeName ); - // register the vba script events - m_xEventAttacher->registerScriptEvents( i_nIndex, vbaEvents ); - - Reference< XComponent > xComponent( xInterface, UNO_QUERY ); - if ( xComponent.is() ) - { - xComponent->dispose(); - } - } - while ( false ); - } - catch ( const ServiceNotRegisteredException& ) - { - // silence this, not all document types support the ooo.vba.VBACodeNameProvider service - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - -} -//================================================================== -//= ElementDescription -//================================================================== -//------------------------------------------------------------------ -ElementDescription::ElementDescription( ) -{ -} - -//------------------------------------------------------------------ -ElementDescription::~ElementDescription() -{ -} - -//================================================================== -//= OInterfaceContainer -//================================================================== -//------------------------------------------------------------------ -OInterfaceContainer::OInterfaceContainer( - const Reference<XMultiServiceFactory>& _rxFactory, - ::osl::Mutex& _rMutex, - const Type& _rElementType) - :OInterfaceContainer_BASE() - ,m_rMutex(_rMutex) - ,m_aContainerListeners(_rMutex) - ,m_aElementType(_rElementType) - ,m_xServiceFactory(_rxFactory) -{ - impl_createEventAttacher_nothrow(); -} - -//------------------------------------------------------------------------------ -OInterfaceContainer::OInterfaceContainer( ::osl::Mutex& _rMutex, const OInterfaceContainer& _cloneSource ) - :OInterfaceContainer_BASE() - ,m_rMutex( _rMutex ) - ,m_aContainerListeners( _rMutex ) - ,m_aElementType( _cloneSource.m_aElementType ) - ,m_xServiceFactory( _cloneSource.m_xServiceFactory ) -{ - impl_createEventAttacher_nothrow(); -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::clonedFrom( const OInterfaceContainer& _cloneSource ) -{ - try - { - const Reference< XIndexAccess > xSourceHierarchy( const_cast< OInterfaceContainer* >( &_cloneSource ) ); - const sal_Int32 nCount = xSourceHierarchy->getCount(); - for ( sal_Int32 i=0; i<nCount; ++i ) - { - Reference< XCloneable > xCloneable( xSourceHierarchy->getByIndex( i ), UNO_QUERY_THROW ); - Reference< XInterface > xClone( xCloneable->createClone() ); - insertByIndex( i, makeAny( xClone ) ); - } - } - catch( const Exception& ) - { - throw WrappedTargetException( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Could not clone the given interface hierarchy." ) ), - static_cast< XIndexContainer* >( const_cast< OInterfaceContainer* >( &_cloneSource ) ), - ::cppu::getCaughtException() - ); - } -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::impl_createEventAttacher_nothrow() -{ - try - { - m_xEventAttacher.set( ::comphelper::createEventAttacherManager( m_xServiceFactory ), UNO_SET_THROW ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } -} - -//------------------------------------------------------------------------------ -OInterfaceContainer::~OInterfaceContainer() -{ -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::disposing() -{ - // dispose all elements - for (sal_Int32 i = m_aItems.size(); i > 0; --i) - { - Reference<XPropertySet> xSet(m_aItems[i - 1], UNO_QUERY); - if (xSet.is()) - xSet->removePropertyChangeListener(PROPERTY_NAME, this); - - // revoke event knittings - if ( m_xEventAttacher.is() ) - { - Reference< XInterface > xIfc( xSet, UNO_QUERY ); - m_xEventAttacher->detach( i - 1, xIfc ); - m_xEventAttacher->removeEntry( i - 1 ); - } - - Reference<XComponent> xComponent(xSet, UNO_QUERY); - if (xComponent.is()) - xComponent->dispose(); - } - m_aMap.clear(); - m_aItems.clear(); - - EventObject aEvt(static_cast<XContainer*>(this)); - m_aContainerListeners.disposeAndClear(aEvt); -} - -// XPersistObject -//------------------------------------------------------------------------------ -namespace -{ - //.......................................................................... - void lcl_saveEvents( ::std::vector< Sequence< ScriptEventDescriptor > >& _rSave, - const Reference< XEventAttacherManager >& _rxManager, const sal_Int32 _nItemCount ) - { - OSL_ENSURE( _rxManager.is(), "lcl_saveEvents: invalid event attacher manager!" ); - if ( !_rxManager.is() ) - return; - - // reserve the space needed - _rSave.reserve( _nItemCount ); - - // copy the events - for (sal_Int32 i=0; i<_nItemCount; ++i) - _rSave.push_back(_rxManager->getScriptEvents( i )); - } - - //.......................................................................... - void lcl_restoreEvents( const ::std::vector< Sequence< ScriptEventDescriptor > >& _rSave, - const Reference< XEventAttacherManager >& _rxManager ) - { - OSL_ENSURE( _rxManager.is(), "lcl_restoreEvents: invalid event attacher manager!" ); - if ( !_rxManager.is() ) - return; - - ::std::vector< Sequence< ScriptEventDescriptor > >::const_iterator aLoop = _rSave.begin(); - ::std::vector< Sequence< ScriptEventDescriptor > >::const_iterator aEnd = _rSave.end(); - for ( sal_Int32 i=0; aLoop != aEnd; ++aLoop, ++i ) - { - _rxManager->revokeScriptEvents( i ); - _rxManager->registerScriptEvents( i, *aLoop ); - } - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::writeEvents(const Reference<XObjectOutputStream>& _rxOutStream) -{ - // We're writing a document in SO 5.2 format (or even from earlier versions) - // -> convert the events from the new runtime format to the format of the 5.2 files - // but before, remember the current script events set for our children - ::std::vector< Sequence< ScriptEventDescriptor > > aSave; - if ( m_xEventAttacher.is() ) - lcl_saveEvents( aSave, m_xEventAttacher, m_aItems.size() ); - - transformEvents( efVersionSO5x ); - - try - { - Reference<XMarkableStream> xMark(_rxOutStream, UNO_QUERY); - sal_Int32 nMark = xMark->createMark(); - - sal_Int32 nObjLen = 0; - _rxOutStream->writeLong(nObjLen); - - Reference<XPersistObject> xScripts(m_xEventAttacher, UNO_QUERY); - if (xScripts.is()) - xScripts->write(_rxOutStream); - - // feststellen der Laenge - nObjLen = xMark->offsetToMark(nMark) - 4; - xMark->jumpToMark(nMark); - _rxOutStream->writeLong(nObjLen); - xMark->jumpToFurthest(); - xMark->deleteMark(nMark); - } - catch( const Exception& ) - { - // restore the events - if ( m_xEventAttacher.is() ) - lcl_restoreEvents( aSave, m_xEventAttacher ); - throw; - } - - // restore the events - if ( m_xEventAttacher.is() ) - lcl_restoreEvents( aSave, m_xEventAttacher ); -} - -//------------------------------------------------------------------------------ -struct TransformEventTo52Format : public ::std::unary_function< ScriptEventDescriptor, void > -{ - void operator()( ScriptEventDescriptor& _rDescriptor ) - { - if ( 0 == _rDescriptor.ScriptType.compareToAscii( "StarBasic" ) ) - { // it's a starbasic macro - sal_Int32 nPrefixLength = _rDescriptor.ScriptCode.indexOf( ':' ); - if ( 0 <= nPrefixLength ) - { // the macro name does not already contain a : -#ifdef DBG_UTIL - const ::rtl::OUString sPrefix = _rDescriptor.ScriptCode.copy( 0, nPrefixLength ); - DBG_ASSERT( 0 == sPrefix.compareToAscii( "document" ) - || 0 == sPrefix.compareToAscii( "application" ), - "TransformEventTo52Format: invalid (unknown) prefix!" ); -#endif - // cut the prefix - _rDescriptor.ScriptCode = _rDescriptor.ScriptCode.copy( nPrefixLength + 1 ); - } - } - } -}; - -//------------------------------------------------------------------------------ -struct TransformEventTo60Format : public ::std::unary_function< ScriptEventDescriptor, void > -{ - void operator()( ScriptEventDescriptor& _rDescriptor ) - { - if ( 0 == _rDescriptor.ScriptType.compareToAscii( "StarBasic" ) ) - { // it's a starbasic macro - if ( _rDescriptor.ScriptCode.indexOf( ':' ) < 0 ) - { // the macro name does not already contain a : - // -> default the type to "document" - ::rtl::OUString sNewScriptCode( RTL_CONSTASCII_USTRINGPARAM( "document:" ) ); - sNewScriptCode += _rDescriptor.ScriptCode; - _rDescriptor.ScriptCode = sNewScriptCode; - } - } - } -}; - -//------------------------------------------------------------------------------ -void OInterfaceContainer::transformEvents( const EventFormat _eTargetFormat ) -{ - OSL_ENSURE( m_xEventAttacher.is(), "OInterfaceContainer::transformEvents: no event attacher manager!" ); - if ( !m_xEventAttacher.is() ) - return; - - try - { - // loop through all our children - sal_Int32 nItems = m_aItems.size(); - Sequence< ScriptEventDescriptor > aChildEvents; - - for (sal_Int32 i=0; i<nItems; ++i) - { - // get the script events for this object - aChildEvents = m_xEventAttacher->getScriptEvents( i ); - - if ( aChildEvents.getLength() ) - { - // the "iterators" for the events for this child - ScriptEventDescriptor* pChildEvents = aChildEvents.getArray(); - ScriptEventDescriptor* pChildEventsEnd = pChildEvents + aChildEvents.getLength(); - - // do the transformation - if ( efVersionSO6x == _eTargetFormat ) - ::std::for_each( pChildEvents, pChildEventsEnd, TransformEventTo60Format() ); - else - ::std::for_each( pChildEvents, pChildEventsEnd, TransformEventTo52Format() ); - - // revoke the script events - m_xEventAttacher->revokeScriptEvents( i ); - // and re-register them - m_xEventAttacher->registerScriptEvents( i, aChildEvents ); - } - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::readEvents(const Reference<XObjectInputStream>& _rxInStream) -{ - ::osl::MutexGuard aGuard( m_rMutex ); - - // Scripting Info lesen - Reference<XMarkableStream> xMark(_rxInStream, UNO_QUERY); - sal_Int32 nObjLen = _rxInStream->readLong(); - if (nObjLen) - { - sal_Int32 nMark = xMark->createMark(); - Reference<XPersistObject> xObj(m_xEventAttacher, UNO_QUERY); - if (xObj.is()) - xObj->read(_rxInStream); - xMark->jumpToMark(nMark); - _rxInStream->skipBytes(nObjLen); - xMark->deleteMark(nMark); - } - - // Attachement lesen - if ( m_xEventAttacher.is() ) - { - OInterfaceArray::const_iterator aAttach = m_aItems.begin(); - OInterfaceArray::const_iterator aAttachEnd = m_aItems.end(); - for ( sal_Int32 i=0; aAttach != aAttachEnd; ++aAttach, ++i ) - { - Reference< XInterface > xAsIFace( *aAttach, UNO_QUERY ); // important to normalize this .... - Reference< XPropertySet > xAsSet( xAsIFace, UNO_QUERY ); - m_xEventAttacher->attach( i, xAsIFace, makeAny( xAsSet ) ); - } - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::write( const Reference< XObjectOutputStream >& _rxOutStream ) throw(IOException, RuntimeException) -{ - ::osl::MutexGuard aGuard( m_rMutex ); - sal_Int32 nLen = m_aItems.size(); - - // schreiben der laenge - _rxOutStream->writeLong(nLen); - - if (nLen) - { - // 1. Version - _rxOutStream->writeShort(0x0001); - - // 2. Objekte - for (sal_Int32 i = 0; i < nLen; i++) - { - Reference<XPersistObject> xObj(m_aItems[i], UNO_QUERY); - if (xObj.is()) - _rxOutStream->writeObject(xObj); - else - { - // ::com::sun::star::chaos::Error - } - } - - // 3. Scripts - writeEvents(_rxOutStream); - } -} - -//------------------------------------------------------------------------------ -namespace -{ - Reference< XPersistObject > lcl_createPlaceHolder( const Reference< XMultiServiceFactory >& _rxORB ) - { - Reference< XPersistObject > xObject( _rxORB->createInstance( FRM_COMPONENT_HIDDENCONTROL ), UNO_QUERY ); - DBG_ASSERT( xObject.is(), "lcl_createPlaceHolder: could not create a substitute for the unknown object!" ); - if ( xObject.is() ) - { - // set some properties describing what we did - Reference< XPropertySet > xObjProps( xObject, UNO_QUERY ); - if ( xObject.is() ) - { - try - { - xObjProps->setPropertyValue( PROPERTY_NAME, makeAny( FRM_RES_STRING( RID_STR_CONTROL_SUBSTITUTED_NAME ) ) ); - xObjProps->setPropertyValue( PROPERTY_TAG, makeAny( FRM_RES_STRING( RID_STR_CONTROL_SUBSTITUTED_EPXPLAIN ) ) ); - } - catch(Exception&) - { - } - } - } - return xObject; - } -} - -//------------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::read( const Reference< XObjectInputStream >& _rxInStream ) throw(IOException, RuntimeException) -{ - ::osl::MutexGuard aGuard( m_rMutex ); - - // after ::read the object is expected to be in the state it was when ::write was called, so we have - // to empty ourself here - while (getCount()) - removeByIndex(0); - - // Schreibt nur in Abhaengigkeit der Laenge - sal_Int32 nLen = _rxInStream->readLong(); - - if (nLen) - { - // 1. Version - sal_uInt16 nVersion = _rxInStream->readShort(); (void)nVersion; - - // 2. Objekte - for (sal_Int32 i = 0; i < nLen; i++) - { - Reference<XPersistObject> xObj; - try - { - xObj = _rxInStream->readObject(); - } - catch(WrongFormatException& e) - { - (void)e; // make compiler happy - // the object could not be read - // create a object (so the readEvents below will assign the events to the right controls) - xObj = lcl_createPlaceHolder( m_xServiceFactory ); - if ( !xObj.is() ) - // couldn't handle it - throw; - } - catch(Exception&) - { - // unsere Map leeren - while (!m_aItems.empty()) - removeElementsNoEvents(0); - - // und die Exception nach aussen - throw; - } - - if ( xObj.is() ) - { - Reference< XPropertySet > xElement( xObj, UNO_QUERY ); - try - { - implInsert( - m_aItems.size(), // position - xElement, // element to insert - sal_False, // no event attacher manager handling - NULL, // not yet approved - let implInsert do it - sal_True // fire the event - ); - } - catch( const Exception& ) - { - OSL_FAIL( "OInterfaceContainerHelper::read: reading succeeded, but not inserting!" ); - // create a placeholder - xElement = xElement.query( lcl_createPlaceHolder( m_xServiceFactory ) ); - if ( !xElement.is() ) - // couldn't handle it - throw; - // insert the placeholder - implInsert( m_aItems.size(), xElement, sal_False, NULL, sal_True ); - } - } - } - - readEvents(_rxInStream); - } - else - { - try - { - m_xEventAttacher = ::comphelper::createEventAttacherManager( m_xServiceFactory ); - OSL_ENSURE( m_xEventAttacher.is(), "OInterfaceContainer::read: could not create an event attacher manager!" ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } -} - -// XContainer -//------------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::addContainerListener(const Reference<XContainerListener>& _rxListener) throw( RuntimeException ) -{ - m_aContainerListeners.addInterface(_rxListener); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::removeContainerListener(const Reference<XContainerListener>& _rxListener) throw( RuntimeException ) -{ - m_aContainerListeners.removeInterface(_rxListener); -} - -// XEventListener -//------------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::disposing(const EventObject& _rSource) throw( RuntimeException ) -{ - ::osl::MutexGuard aGuard( m_rMutex ); - - Reference< XInterface > xSource( _rSource.Source, UNO_QUERY ); - // normalized source - - OInterfaceArray::iterator j; - for ( j = m_aItems.begin(); j != m_aItems.end(); ++j ) - { - DBG_ASSERT( j->get() == Reference< XInterface >( *j, UNO_QUERY ).get(), - "OInterfaceContainer::disposing: vector element not normalized!" ); - - if ( xSource.get() == j->get() ) - // found the element - break; - } - - if ( m_aItems.end() != j ) - { - m_aItems.erase(j); - - // look up in, and erase from, m_aMap, too - OInterfaceMap::iterator i = m_aMap.begin(); - while ( i != m_aMap.end() ) - { - DBG_ASSERT( i->second.get() == Reference< XInterface >( i->second, UNO_QUERY ).get(), - "OInterfaceContainer::disposing: map element not normalized!" ); - - if ( i->second.get() == xSource.get() ) - { - // found it - m_aMap.erase(i); - break; - } - - ++i; - - DBG_ASSERT( i != m_aMap.end(), "OInterfaceContainer::disposing: inconsistency: the element was in m_aItems, but not in m_aMap!" ); - } - } -} - -// XPropertyChangeListener -//------------------------------------------------------------------------------ -void OInterfaceContainer::propertyChange(const PropertyChangeEvent& evt) -throw (::com::sun::star::uno::RuntimeException) { - if (evt.PropertyName == PROPERTY_NAME) - { - ::osl::MutexGuard aGuard( m_rMutex ); - OInterfaceMap::iterator i = ::std::find(m_aMap.begin(), m_aMap.end(), - ::std::pair<const ::rtl::OUString, InterfaceRef >(::comphelper::getString(evt.OldValue),evt.Source)); - if (i != m_aMap.end()) - { - InterfaceRef xCorrectType((*i).second); - m_aMap.erase(i); - m_aMap.insert(::std::pair<const ::rtl::OUString, InterfaceRef >(::comphelper::getString(evt.NewValue),xCorrectType)); - } - } -} - -// XElementAccess -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OInterfaceContainer::hasElements() throw( RuntimeException ) -{ - return !m_aMap.empty(); -} - -//------------------------------------------------------------------------------ -Type SAL_CALL OInterfaceContainer::getElementType() throw(RuntimeException) -{ - return m_aElementType; -} - -// XEnumerationAccess -//------------------------------------------------------------------------------ -Reference<XEnumeration> SAL_CALL OInterfaceContainer::createEnumeration() throw( RuntimeException ) -{ - ::osl::MutexGuard aGuard( m_rMutex ); - return new ::comphelper::OEnumerationByIndex(static_cast<XIndexAccess*>(this)); -} - -// XNameAccess -//------------------------------------------------------------------------------ -Any SAL_CALL OInterfaceContainer::getByName( const ::rtl::OUString& _rName ) throw(NoSuchElementException, WrappedTargetException, RuntimeException) -{ - ::std::pair <OInterfaceMap::iterator, - OInterfaceMap::iterator> aPair = m_aMap.equal_range(_rName); - - if (aPair.first == aPair.second) - throw NoSuchElementException(); - - return (*aPair.first).second->queryInterface( m_aElementType ); -} - -//------------------------------------------------------------------------------ -StringSequence SAL_CALL OInterfaceContainer::getElementNames() throw(RuntimeException) -{ - StringSequence aNameList(m_aItems.size()); - ::rtl::OUString* pStringArray = aNameList.getArray(); - - for (OInterfaceMap::const_iterator i = m_aMap.begin(); i != m_aMap.end(); ++i, ++pStringArray) - { - *pStringArray = (*i).first; - } - return aNameList; -} - -//------------------------------------------------------------------------------ -sal_Bool SAL_CALL OInterfaceContainer::hasByName( const ::rtl::OUString& _rName ) throw(RuntimeException) -{ - ::std::pair <OInterfaceMap::iterator, - OInterfaceMap::iterator> aPair = m_aMap.equal_range(_rName); - return aPair.first != aPair.second; -} - -// XIndexAccess -//------------------------------------------------------------------------------ -sal_Int32 OInterfaceContainer::getCount() throw( RuntimeException ) -{ - return m_aItems.size(); -} - -//------------------------------------------------------------------------------ -Any OInterfaceContainer::getByIndex(sal_Int32 _nIndex) throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException ) -{ - if (_nIndex < 0 || (_nIndex >= (sal_Int32)m_aItems.size())) - throw IndexOutOfBoundsException(); - - return m_aItems[_nIndex]->queryInterface( m_aElementType ); -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::approveNewElement( const Reference< XPropertySet >& _rxObject, ElementDescription* _pElement ) -{ - // it has to be non-NULL - if ( !_rxObject.is() ) - throw IllegalArgumentException(FRM_RES_STRING(RID_STR_NEED_NON_NULL_OBJECT), static_cast<XContainer*>(this), 1); - - // it has to support our element type interface - Any aCorrectType = _rxObject->queryInterface( m_aElementType ); - if ( !aCorrectType.hasValue() ) - lcl_throwIllegalArgumentException(); - - // it has to have a "Name" property - if ( !hasProperty( PROPERTY_NAME, _rxObject ) ) - lcl_throwIllegalArgumentException(); - - // it has to be a child, and it must not have a parent already - Reference< XChild > xChild( _rxObject, UNO_QUERY ); - if ( !xChild.is() || xChild->getParent().is() ) - { - lcl_throwIllegalArgumentException(); - } - - // passed all tests. cache the information we have so far - DBG_ASSERT( _pElement, "OInterfaceContainer::approveNewElement: invalid event descriptor!" ); - if ( _pElement ) - { - _pElement->xPropertySet = _rxObject; - _pElement->xChild = xChild; - _pElement->aElementTypeInterface = aCorrectType; - _pElement->xInterface = Reference< XInterface >( _rxObject, UNO_QUERY ); // normalized XInterface - } -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::implInsert(sal_Int32 _nIndex, const Reference< XPropertySet >& _rxElement, - sal_Bool _bEvents, ElementDescription* _pApprovalResult, sal_Bool _bFire ) throw( IllegalArgumentException ) -{ - const bool bHandleEvents = _bEvents && m_xEventAttacher.is(); - - // SYNCHRONIZED -----> - ::osl::ClearableMutexGuard aGuard( m_rMutex ); - - ::std::auto_ptr< ElementDescription > aAutoDeleteMetaData; - ElementDescription* pElementMetaData = _pApprovalResult; - if ( !pElementMetaData ) - { // not yet approved by the caller -> do ourself - pElementMetaData = createElementMetaData(); - DBG_ASSERT( pElementMetaData, "OInterfaceContainer::implInsert: createElementMetaData returned nonsense!" ); - - // ensure that the meta data structure will be deleted later on - aAutoDeleteMetaData = ::std::auto_ptr< ElementDescription >( pElementMetaData ); - - // will throw an exception if necessary - approveNewElement( _rxElement, pElementMetaData ); - } - - - // approveNewElement (no matter if called here or outside) has ensure that all relevant interfaces - // exist - - // set the name, and add as change listener for the name - ::rtl::OUString sName; - _rxElement->getPropertyValue(PROPERTY_NAME) >>= sName; - _rxElement->addPropertyChangeListener(PROPERTY_NAME, this); - - // insert the object into our internal structures - if (_nIndex > (sal_Int32)m_aItems.size()) // ermitteln des tatsaechlichen Indexs - { - _nIndex = m_aItems.size(); - m_aItems.push_back( pElementMetaData->xInterface ); - } - else - m_aItems.insert( m_aItems.begin() + _nIndex, pElementMetaData->xInterface ); - - m_aMap.insert( ::std::pair< const ::rtl::OUString, InterfaceRef >( sName, pElementMetaData->xInterface ) ); - - // announce ourself as parent to the new element - pElementMetaData->xChild->setParent(static_cast<XContainer*>(this)); - - // handle the events - if ( bHandleEvents ) - { - m_xEventAttacher->insertEntry(_nIndex); - m_xEventAttacher->attach( _nIndex, pElementMetaData->xInterface, makeAny( _rxElement ) ); - } - - // notify derived classes - implInserted( pElementMetaData ); - - aGuard.clear(); - // <----- SYNCHRONIZED - - // insert faked VBA events? - if ( bHandleEvents ) - { - Reference< XEventAttacherManager > xMgr ( pElementMetaData->xInterface, UNO_QUERY ); - if ( xMgr.is() ) - { - OInterfaceContainer* pIfcMgr = dynamic_cast< OInterfaceContainer* >( xMgr.get() ); - sal_Int32 nLen = pIfcMgr->getCount(); - for ( sal_Int32 i = 0; (i < nLen) && pIfcMgr ; ++i ) - { - // add fake events to the control at index i - pIfcMgr->impl_addVbEvents_nolck_nothrow( i ); - } - } - else - { - // add fake events to the control at index i - impl_addVbEvents_nolck_nothrow( _nIndex ); - } - } - - // fire the notification about the change - if ( _bFire ) - { - // notify listeners - ContainerEvent aEvt; - aEvt.Source = static_cast<XContainer*>(this); - aEvt.Accessor <<= _nIndex; - aEvt.Element = pElementMetaData->aElementTypeInterface; - - aGuard.clear(); - m_aContainerListeners.notifyEach( &XContainerListener::elementInserted, aEvt ); - } -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::removeElementsNoEvents(sal_Int32 nIndex) -{ - OInterfaceArray::iterator i = m_aItems.begin() + nIndex; - InterfaceRef xElement(*i); - - OInterfaceMap::iterator j = m_aMap.begin(); - while (j != m_aMap.end() && (*j).second != xElement) ++j; - - m_aItems.erase(i); - m_aMap.erase(j); - - Reference<XPropertySet> xSet(xElement, UNO_QUERY); - if (xSet.is()) - xSet->removePropertyChangeListener(PROPERTY_NAME, this); - - Reference<XChild> xChild(xElement, UNO_QUERY); - if (xChild.is()) - xChild->setParent(InterfaceRef ()); -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::implInserted( const ElementDescription* /*_pElement*/ ) -{ - // not inrerested in -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::implRemoved( const InterfaceRef& /*_rxObject*/ ) -{ - // not inrerested in -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::impl_replacedElement( const ContainerEvent& _rEvent, ::osl::ClearableMutexGuard& _rInstanceLock ) -{ - _rInstanceLock.clear(); - m_aContainerListeners.notifyEach( &XContainerListener::elementReplaced, _rEvent ); -} - -// XIndexContainer -//------------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::insertByIndex( sal_Int32 _nIndex, const Any& _rElement ) throw(IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException) -{ - Reference< XPropertySet > xElement; - _rElement >>= xElement; - implInsert( _nIndex, xElement, sal_True /* event handling */ , NULL /* not yet approved */ , sal_True /* notification */ ); -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::implReplaceByIndex( const sal_Int32 _nIndex, const Any& _rNewElement, ::osl::ClearableMutexGuard& _rClearBeforeNotify ) -{ - OSL_PRECOND( ( _nIndex >= 0 ) && ( _nIndex < (sal_Int32)m_aItems.size() ), "OInterfaceContainer::implReplaceByIndex: precondition not met (index)!" ); - - // approve the new object - ::std::auto_ptr< ElementDescription > aElementMetaData( createElementMetaData() ); - DBG_ASSERT( aElementMetaData.get(), "OInterfaceContainer::implReplaceByIndex: createElementMetaData returned nonsense!" ); - { - Reference< XPropertySet > xElementProps; - _rNewElement >>= xElementProps; - approveNewElement( xElementProps, aElementMetaData.get() ); - } - - // get the old element - InterfaceRef xOldElement( m_aItems[ _nIndex ] ); - DBG_ASSERT( xOldElement.get() == Reference< XInterface >( xOldElement, UNO_QUERY ).get(), - "OInterfaceContainer::implReplaceByIndex: elements should be held normalized!" ); - - // locate the old element in the map - OInterfaceMap::iterator j = m_aMap.begin(); - while ( ( j != m_aMap.end() ) && ( j->second.get() != xOldElement.get() ) ) - ++j; - - // remove event knittings - if ( m_xEventAttacher.is() ) - { - InterfaceRef xNormalized( xOldElement, UNO_QUERY ); - m_xEventAttacher->detach( _nIndex, xNormalized ); - m_xEventAttacher->removeEntry( _nIndex ); - } - - // don't listen for property changes anymore - Reference<XPropertySet> xSet( xOldElement, UNO_QUERY ); - if (xSet.is()) - xSet->removePropertyChangeListener(PROPERTY_NAME, this); - - // give the old element a new (void) parent - Reference<XChild> xChild(xOldElement, UNO_QUERY); - if (xChild.is()) - xChild->setParent(InterfaceRef ()); - - // remove the old one - m_aMap.erase(j); - - // examine the new element - ::rtl::OUString sName; - DBG_ASSERT( aElementMetaData.get()->xPropertySet.is(), "OInterfaceContainer::implReplaceByIndex: what did approveNewElement do?" ); - - aElementMetaData.get()->xPropertySet->getPropertyValue(PROPERTY_NAME) >>= sName; - aElementMetaData.get()->xPropertySet->addPropertyChangeListener(PROPERTY_NAME, this); - - // insert the new one - m_aMap.insert( ::std::pair<const ::rtl::OUString, InterfaceRef >( sName, aElementMetaData.get()->xInterface ) ); - m_aItems[ _nIndex ] = aElementMetaData.get()->xInterface; - - aElementMetaData.get()->xChild->setParent(static_cast<XContainer*>(this)); - - if ( m_xEventAttacher.is() ) - { - m_xEventAttacher->insertEntry( _nIndex ); - m_xEventAttacher->attach( _nIndex, aElementMetaData.get()->xInterface, makeAny( aElementMetaData.get()->xPropertySet ) ); - } - - ContainerEvent aReplaceEvent; - aReplaceEvent.Source = static_cast< XContainer* >( this ); - aReplaceEvent.Accessor <<= _nIndex; - aReplaceEvent.Element = aElementMetaData.get()->xInterface->queryInterface( m_aElementType ); - aReplaceEvent.ReplacedElement = xOldElement->queryInterface( m_aElementType ); - - impl_replacedElement( aReplaceEvent, _rClearBeforeNotify ); -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::implCheckIndex( const sal_Int32 _nIndex ) SAL_THROW( ( ::com::sun::star::lang::IndexOutOfBoundsException ) ) -{ - if (_nIndex < 0 || _nIndex >= (sal_Int32)m_aItems.size()) - throw IndexOutOfBoundsException(); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::replaceByIndex(sal_Int32 _nIndex, const Any& Element) throw( IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException ) -{ - ::osl::ClearableMutexGuard aGuard( m_rMutex ); - // check the index - implCheckIndex( _nIndex ); - // do the replace - implReplaceByIndex( _nIndex, Element, aGuard ); -} - -//------------------------------------------------------------------------------ -void OInterfaceContainer::implRemoveByIndex( const sal_Int32 _nIndex, ::osl::ClearableMutexGuard& _rClearBeforeNotify ) -{ - OSL_PRECOND( ( _nIndex >= 0 ) && ( _nIndex < (sal_Int32)m_aItems.size() ), "OInterfaceContainer::implRemoveByIndex: precondition not met (index)!" ); - - OInterfaceArray::iterator i = m_aItems.begin() + _nIndex; - InterfaceRef xElement(*i); - - OInterfaceMap::iterator j = m_aMap.begin(); - while (j != m_aMap.end() && (*j).second != xElement) ++j; - - m_aItems.erase(i); - m_aMap.erase(j); - - // remove event knittings - if ( m_xEventAttacher.is() ) - { - InterfaceRef xNormalized( xElement, UNO_QUERY ); - m_xEventAttacher->detach( _nIndex, xNormalized ); - m_xEventAttacher->removeEntry( _nIndex ); - } - - Reference<XPropertySet> xSet(xElement, UNO_QUERY); - if (xSet.is()) - xSet->removePropertyChangeListener(PROPERTY_NAME, this); - - Reference<XChild> xChild(xElement, UNO_QUERY); - if (xChild.is()) - xChild->setParent(InterfaceRef ()); - - // notify derived classes - implRemoved(xElement); - - // notify listeners - ContainerEvent aEvt; - aEvt.Source = static_cast<XContainer*>(this); - aEvt.Element = xElement->queryInterface( m_aElementType ); - aEvt.Accessor <<= _nIndex; - - _rClearBeforeNotify.clear(); - m_aContainerListeners.notifyEach( &XContainerListener::elementRemoved, aEvt ); -} - -//------------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::removeByIndex(sal_Int32 _nIndex) throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException ) -{ - ::osl::ClearableMutexGuard aGuard( m_rMutex ); - // check the index - implCheckIndex( _nIndex ); - // do the removal - implRemoveByIndex( _nIndex, aGuard ); -} - -//------------------------------------------------------------------------ -ElementDescription* OInterfaceContainer::createElementMetaData( ) -{ - return new ElementDescription; -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::insertByName(const ::rtl::OUString& _rName, const Any& _rElement) throw( IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException ) -{ - Reference< XPropertySet > xElementProps; - - ::std::auto_ptr< ElementDescription > aElementMetaData( createElementMetaData() ); - DBG_ASSERT( aElementMetaData.get(), "OInterfaceContainer::insertByName: createElementMetaData returned nonsense!" ); - - // ensure the correct name of the element - try - { - _rElement >>= xElementProps; - approveNewElement( xElementProps, aElementMetaData.get() ); - - xElementProps->setPropertyValue( PROPERTY_NAME, makeAny( _rName ) ); - } - catch( const IllegalArgumentException& ) - { - throw; // allowed to leave - } - catch( const ElementExistException& ) - { - throw; // allowed to leave - } - catch( const Exception& ) - { - OSL_FAIL( "OInterfaceContainer::insertByName: caught an exception!" ); - } - implInsert( m_aItems.size(), xElementProps, sal_True, aElementMetaData.get(), sal_True ); -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::replaceByName(const ::rtl::OUString& Name, const Any& Element) throw( IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException ) -{ - ::osl::ClearableMutexGuard aGuard( m_rMutex ); - ::std::pair <OInterfaceMap::iterator, - OInterfaceMap::iterator> aPair = m_aMap.equal_range(Name); - if (aPair.first == aPair.second) - throw NoSuchElementException(); - - if (Element.getValueType().getTypeClass() != TypeClass_INTERFACE) - lcl_throwIllegalArgumentException(); - - Reference<XPropertySet> xSet; - Element >>= xSet; - if (xSet.is()) - { - if (!hasProperty(PROPERTY_NAME, xSet)) - lcl_throwIllegalArgumentException(); - - xSet->setPropertyValue(PROPERTY_NAME, makeAny(Name)); - } - - // determine the element pos - sal_Int32 nPos = ::std::find(m_aItems.begin(), m_aItems.end(), (*aPair.first).second) - m_aItems.begin(); - - implReplaceByIndex( nPos, Element, aGuard ); -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::removeByName(const ::rtl::OUString& Name) throw( NoSuchElementException, WrappedTargetException, RuntimeException ) -{ - ::osl::MutexGuard aGuard( m_rMutex ); - ::std::pair <OInterfaceMap::iterator, - OInterfaceMap::iterator> aPair = m_aMap.equal_range(Name); - if (aPair.first == aPair.second) - throw NoSuchElementException(); - - sal_Int32 nPos = ::std::find(m_aItems.begin(), m_aItems.end(), (*aPair.first).second) - m_aItems.begin(); - removeByIndex(nPos); -} - - -// XEventAttacherManager -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::registerScriptEvent( sal_Int32 nIndex, const ScriptEventDescriptor& aScriptEvent ) throw(IllegalArgumentException, RuntimeException) -{ - ::osl::ClearableMutexGuard aGuard( m_rMutex ); - if ( m_xEventAttacher.is() ) - { - m_xEventAttacher->registerScriptEvent( nIndex, aScriptEvent ); - aGuard.clear(); - impl_addVbEvents_nolck_nothrow( nIndex ); // add fake vba events - } -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::registerScriptEvents( sal_Int32 nIndex, const Sequence< ScriptEventDescriptor >& aScriptEvents ) throw(IllegalArgumentException, RuntimeException) -{ - ::osl::ClearableMutexGuard aGuard( m_rMutex ); - if ( m_xEventAttacher.is() ) - { - m_xEventAttacher->registerScriptEvents( nIndex, aScriptEvents ); - aGuard.clear(); - impl_addVbEvents_nolck_nothrow( nIndex ); // add fake vba events - } -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::revokeScriptEvent( sal_Int32 nIndex, const ::rtl::OUString& aListenerType, const ::rtl::OUString& aEventMethod, const ::rtl::OUString& aRemoveListenerParam ) throw(IllegalArgumentException, RuntimeException) -{ - if ( m_xEventAttacher.is() ) - m_xEventAttacher->revokeScriptEvent( nIndex, aListenerType, aEventMethod, aRemoveListenerParam ); -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::revokeScriptEvents( sal_Int32 nIndex ) throw(IllegalArgumentException, RuntimeException) -{ - if ( m_xEventAttacher.is() ) - m_xEventAttacher->revokeScriptEvents( nIndex ); -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::insertEntry( sal_Int32 nIndex ) throw(IllegalArgumentException, RuntimeException) -{ - if ( m_xEventAttacher.is() ) - m_xEventAttacher->insertEntry( nIndex ); -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::removeEntry( sal_Int32 nIndex ) throw(IllegalArgumentException, RuntimeException) -{ - if ( m_xEventAttacher.is() ) - m_xEventAttacher->removeEntry( nIndex ); -} - -//------------------------------------------------------------------------ -Sequence< ScriptEventDescriptor > SAL_CALL OInterfaceContainer::getScriptEvents( sal_Int32 nIndex ) throw(IllegalArgumentException, RuntimeException) -{ - Sequence< ScriptEventDescriptor > aReturn; - if ( m_xEventAttacher.is() ) - { - aReturn = m_xEventAttacher->getScriptEvents( nIndex ); - if ( lcl_hasVbaEvents( aReturn ) ) - { - aReturn = lcl_stripVbaEvents( aReturn ); - } - } - return aReturn; -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::attach( sal_Int32 nIndex, const Reference< XInterface >& xObject, const Any& aHelper ) throw(IllegalArgumentException, ServiceNotRegisteredException, RuntimeException) -{ - if ( m_xEventAttacher.is() ) - m_xEventAttacher->attach( nIndex, xObject, aHelper ); -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::detach( sal_Int32 nIndex, const Reference< XInterface >& xObject ) throw(IllegalArgumentException, RuntimeException) -{ - if ( m_xEventAttacher.is() ) - m_xEventAttacher->detach( nIndex, xObject ); -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::addScriptListener( const Reference< XScriptListener >& xListener ) throw(IllegalArgumentException, RuntimeException) -{ - if ( m_xEventAttacher.is() ) - m_xEventAttacher->addScriptListener( xListener ); -} - -//------------------------------------------------------------------------ -void SAL_CALL OInterfaceContainer::removeScriptListener( const Reference< XScriptListener >& xListener ) throw(IllegalArgumentException, RuntimeException) -{ - if ( m_xEventAttacher.is() ) - m_xEventAttacher->removeScriptListener( xListener ); -} - -//================================================================== -//= OFormComponents -//================================================================== -//------------------------------------------------------------------------------ -Any SAL_CALL OFormComponents::queryAggregation(const Type& _rType) throw(RuntimeException) -{ - Any aReturn = OFormComponents_BASE::queryInterface(_rType); - if (!aReturn.hasValue()) - { - aReturn = OInterfaceContainer::queryInterface(_rType); - - if (!aReturn.hasValue()) - aReturn = FormComponentsBase::queryAggregation(_rType); - } - - return aReturn; -} - -//------------------------------------------------------------------ -Sequence<Type> SAL_CALL OFormComponents::getTypes() throw(RuntimeException) -{ - return ::comphelper::concatSequences(OInterfaceContainer::getTypes(), FormComponentsBase::getTypes(), OFormComponents_BASE::getTypes()); -} - -//------------------------------------------------------------------------------ -OFormComponents::OFormComponents(const Reference<XMultiServiceFactory>& _rxFactory) - :FormComponentsBase( m_aMutex ) - ,OInterfaceContainer( _rxFactory, m_aMutex, XFormComponent::static_type() ) - ,OFormComponents_BASE() -{ -} - -//------------------------------------------------------------------------------ -OFormComponents::OFormComponents( const OFormComponents& _cloneSource ) - :FormComponentsBase( m_aMutex ) - ,OInterfaceContainer( m_aMutex, _cloneSource ) - ,OFormComponents_BASE() -{ -} - -//------------------------------------------------------------------------------ -OFormComponents::~OFormComponents() -{ - if (!FormComponentsBase::rBHelper.bDisposed) - { - acquire(); - dispose(); - } -} - -// OComponentHelper -//------------------------------------------------------------------------------ -void OFormComponents::disposing() -{ - OInterfaceContainer::disposing(); - FormComponentsBase::disposing(); - m_xParent = NULL; -} - -//XChild -//------------------------------------------------------------------------------ -void OFormComponents::setParent(const InterfaceRef& Parent) throw( NoSupportException, RuntimeException ) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - m_xParent = Parent; -} - -//------------------------------------------------------------------------------ -InterfaceRef OFormComponents::getParent() throw( RuntimeException ) -{ - return m_xParent; -} - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/misc/componenttools.cxx b/forms/source/misc/componenttools.cxx deleted file mode 100644 index f1e3fb058..000000000 --- a/forms/source/misc/componenttools.cxx +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "componenttools.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/container/XChild.hpp> -/** === end UNO includes === **/ - -#include <algorithm> -#include <iterator> - -//........................................................................ -namespace frm -{ -//........................................................................ - - /** === begin UNO using === **/ - using ::com::sun::star::frame::XModel; - using ::com::sun::star::uno::XInterface; - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::container::XChild; - /** === end UNO using === **/ - - //==================================================================== - //= TypeBag - //==================================================================== - //-------------------------------------------------------------------- - TypeBag::TypeBag( const TypeSequence& _rTypes1 ) - { - addTypes( _rTypes1 ); - } - - //-------------------------------------------------------------------- - TypeBag::TypeBag( const TypeSequence& _rTypes1, const TypeSequence& _rTypes2 ) - { - addTypes( _rTypes1 ); - addTypes( _rTypes2 ); - } - - //-------------------------------------------------------------------- - TypeBag::TypeBag( const TypeSequence& _rTypes1, const TypeSequence& _rTypes2, const TypeSequence& _rTypes3 ) - { - addTypes( _rTypes1 ); - addTypes( _rTypes2 ); - addTypes( _rTypes3 ); - } - - //-------------------------------------------------------------------- - void TypeBag::addTypes( const TypeSequence& _rTypes ) - { - ::std::copy( - _rTypes.getConstArray(), - _rTypes.getConstArray() + _rTypes.getLength(), - ::std::insert_iterator< TypeSet >( m_aTypes, m_aTypes.begin() ) - ); - } - - //-------------------------------------------------------------------- - void TypeBag::addType( const Type& i_rType ) - { - m_aTypes.insert( i_rType ); - } - - //-------------------------------------------------------------------- - void TypeBag::removeType( const TypeBag::Type& i_rType ) - { - m_aTypes.erase( i_rType ); - } - - //-------------------------------------------------------------------- - TypeBag::TypeSequence TypeBag::getTypes() const - { - TypeSequence aTypes( m_aTypes.size() ); - ::std::copy( m_aTypes.begin(), m_aTypes.end(), aTypes.getArray() ); - return aTypes; - } - - //==================================================================== - Reference< XModel > getXModel( const Reference< XInterface >& _rxComponent ) - { - Reference< XInterface > xParent = _rxComponent; - Reference< XModel > xModel( xParent, UNO_QUERY );; - while ( xParent.is() && !xModel.is() ) - { - Reference< XChild > xChild( xParent, UNO_QUERY ); - xParent.set( xChild.is() ? xChild->getParent() : Reference< XInterface >(), UNO_QUERY ); - xModel.set( xParent, UNO_QUERY ); - } - return xModel; - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/misc/frm_module.cxx b/forms/source/misc/frm_module.cxx deleted file mode 100644 index 684112b50..000000000 --- a/forms/source/misc/frm_module.cxx +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "frm_module.hxx" - -#define FORMS_MODULE_IMPLEMENTATION_INCLUDE_CONTEXT - #define FORMS_MODULE_NAMESPACE frm - #include "forms_module_impl.hxx" -#undef FORMS_MODULE_IMPLEMENTATION_INCLUDE_CONTEXT - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/misc/frm_strings.cxx b/forms/source/misc/frm_strings.cxx deleted file mode 100644 index f5650e832..000000000 --- a/forms/source/misc/frm_strings.cxx +++ /dev/null @@ -1,36 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#define FORMS_IMPLEMENT_STRINGS -#include "frm_strings.hxx" -#include "services.hxx" - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/misc/ids.cxx b/forms/source/misc/ids.cxx deleted file mode 100644 index ee0605790..000000000 --- a/forms/source/misc/ids.cxx +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - - -#include "ids.hxx" - -IMPLEMENT_IMPLEMENTATIONID_HELPER(frm, OImplementationIds) - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/misc/limitedformats.cxx b/forms/source/misc/limitedformats.cxx deleted file mode 100644 index d6ce99031..000000000 --- a/forms/source/misc/limitedformats.cxx +++ /dev/null @@ -1,404 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "limitedformats.hxx" -#include "services.hxx" -#include <osl/diagnose.h> -#include <comphelper/types.hxx> -#include <comphelper/extract.hxx> -#include <com/sun/star/form/FormComponentType.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::form; - using namespace ::com::sun::star::beans; - - sal_Int32 OLimitedFormats::s_nInstanceCount(0); - ::osl::Mutex OLimitedFormats::s_aMutex; - Reference< XNumberFormatsSupplier > OLimitedFormats::s_xStandardFormats; - - //===================================================================== - //= - //===================================================================== - //--------------------------------------------------------------------- - enum LocaleType - { - ltEnglishUS, - ltGerman, - ltSystem - }; - - //--------------------------------------------------------------------- - static const Locale& getLocale(LocaleType _eType) - { - static const Locale s_aEnglishUS( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("en") ), ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("us") ), ::rtl::OUString() ); - static const Locale s_aGerman( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("de") ), ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DE") ), ::rtl::OUString() ); - static const ::rtl::OUString s_sEmptyString; - static const Locale s_aSystem( s_sEmptyString, s_sEmptyString, s_sEmptyString ); - - switch (_eType) - { - case ltEnglishUS: - return s_aEnglishUS; - - case ltGerman: - return s_aGerman; - - case ltSystem: - return s_aSystem; - } - - OSL_FAIL("getLocale: invalid enum value!"); - return s_aSystem; - } - - //--------------------------------------------------------------------- - struct FormatEntry - { - const sal_Char* pDescription; - sal_Int32 nKey; - LocaleType eLocale; - }; - - //--------------------------------------------------------------------- - static const FormatEntry* lcl_getFormatTable(sal_Int16 nTableId) - { - switch (nTableId) - { - case FormComponentType::TIMEFIELD: - { - static FormatEntry s_aFormats[] = { - { "HH:MM", -1, ltEnglishUS }, - { "HH:MM:SS", -1, ltEnglishUS }, - { "HH:MM AM/PM", -1, ltEnglishUS }, - { "HH:MM:SS AM/PM", -1, ltEnglishUS }, - { NULL, -1, ltSystem } - }; - // don't switch this table here to const. The compiler could be tempted to really place this - // in a non-writeable segment, but we want to fill in the format keys later .... - return s_aFormats; - } - case FormComponentType::DATEFIELD: - { - static FormatEntry s_aFormats[] = { - { "T-M-JJ", -1, ltGerman }, - { "TT-MM-JJ", -1, ltGerman }, - { "TT-MM-JJJJ", -1, ltGerman }, - { "NNNNT. MMMM JJJJ", -1, ltGerman }, - - { "DD/MM/YY", -1, ltEnglishUS }, - { "MM/DD/YY", -1, ltEnglishUS }, - { "YY/MM/DD", -1, ltEnglishUS }, - { "DD/MM/YYYY", -1, ltEnglishUS }, - { "MM/DD/YYYY", -1, ltEnglishUS }, - { "YYYY/MM/DD", -1, ltEnglishUS }, - - { "JJ-MM-TT", -1, ltGerman }, - { "JJJJ-MM-TT", -1, ltGerman }, - - { NULL, -1, ltSystem } - }; - return s_aFormats; - } - } - - OSL_FAIL("lcl_getFormatTable: invalid id!"); - return NULL; - } - - //===================================================================== - //= OLimitedFormats - //===================================================================== - //--------------------------------------------------------------------- - OLimitedFormats::OLimitedFormats(const Reference< XMultiServiceFactory >& _rxORB, const sal_Int16 _nClassId) - :m_nFormatEnumPropertyHandle(-1) - ,m_nTableId(_nClassId) - { - OSL_ENSURE(_rxORB.is(), "OLimitedFormats::OLimitedFormats: invalid service factory!"); - acquireSupplier(_rxORB); - ensureTableInitialized(m_nTableId); - } - - //--------------------------------------------------------------------- - OLimitedFormats::~OLimitedFormats() - { - releaseSupplier(); - } - - //--------------------------------------------------------------------- - void OLimitedFormats::ensureTableInitialized(const sal_Int16 _nTableId) - { - const FormatEntry* pFormatTable = lcl_getFormatTable(_nTableId); - if (-1 == pFormatTable->nKey) - { - ::osl::MutexGuard aGuard(s_aMutex); - if (-1 == pFormatTable->nKey) - { - // initialize the keys - Reference<XNumberFormats> xStandardFormats; - if (s_xStandardFormats.is()) - xStandardFormats = s_xStandardFormats->getNumberFormats(); - OSL_ENSURE(xStandardFormats.is(), "OLimitedFormats::ensureTableInitialized: don't have a formats supplier!"); - - if (xStandardFormats.is()) - { - // loop through the table - FormatEntry* pLoopFormats = const_cast<FormatEntry*>(pFormatTable); - while (pLoopFormats->pDescription) - { - // get the key for the description - pLoopFormats->nKey = xStandardFormats->queryKey( - ::rtl::OUString::createFromAscii(pLoopFormats->pDescription), - getLocale(pLoopFormats->eLocale), - sal_False - ); - - if (-1 == pLoopFormats->nKey) - { - pLoopFormats->nKey = xStandardFormats->addNew( - ::rtl::OUString::createFromAscii(pLoopFormats->pDescription), - getLocale(pLoopFormats->eLocale) - ); -#ifdef DBG_UTIL - try - { - xStandardFormats->getByKey(pLoopFormats->nKey); - } - catch(const Exception&) - { - OSL_FAIL("OLimitedFormats::ensureTableInitialized: adding the key to the formats collection failed!"); - } -#endif - } - - // next - ++pLoopFormats; - } - } - } - } - } - - //--------------------------------------------------------------------- - void OLimitedFormats::clearTable(const sal_Int16 _nTableId) - { - ::osl::MutexGuard aGuard(s_aMutex); - const FormatEntry* pFormats = lcl_getFormatTable(_nTableId); - FormatEntry* pResetLoop = const_cast<FormatEntry*>(pFormats); - while (pResetLoop->pDescription) - { - pResetLoop->nKey = -1; - ++pResetLoop; - } - } - - //--------------------------------------------------------------------- - void OLimitedFormats::setAggregateSet(const Reference< XFastPropertySet >& _rxAggregate, sal_Int32 _nOriginalPropertyHandle) - { - // changes (NULL -> not NULL) and (not NULL -> NULL) are allowed - OSL_ENSURE(!m_xAggregate.is() || !_rxAggregate.is(), "OLimitedFormats::setAggregateSet: already have an aggregate!"); - OSL_ENSURE(_rxAggregate.is() || m_xAggregate.is(), "OLimitedFormats::setAggregateSet: invalid new aggregate!"); - - m_xAggregate = _rxAggregate; - m_nFormatEnumPropertyHandle = _nOriginalPropertyHandle; -#ifdef DBG_UTIL - if (m_xAggregate.is()) - { - try - { - m_xAggregate->getFastPropertyValue(m_nFormatEnumPropertyHandle); - } - catch(const Exception&) - { - OSL_FAIL("OLimitedFormats::setAggregateSet: invalid handle!"); - } - } -#endif - } - - //--------------------------------------------------------------------- - void OLimitedFormats::getFormatKeyPropertyValue( Any& _rValue ) const - { - _rValue.clear(); - - OSL_ENSURE(m_xAggregate.is() && (-1 != m_nFormatEnumPropertyHandle), "OLimitedFormats::getFormatKeyPropertyValue: not initialized!"); - if (m_xAggregate.is()) - { - // get the aggregate's enum property value - Any aEnumPropertyValue = m_xAggregate->getFastPropertyValue(m_nFormatEnumPropertyHandle); - sal_Int32 nValue = -1; - ::cppu::enum2int(nValue, aEnumPropertyValue); - - // get the translation table - const FormatEntry* pFormats = lcl_getFormatTable(m_nTableId); - - // seek to the nValue'th entry - sal_Int32 nLookup = 0; - for ( ; - (NULL != pFormats->pDescription) && (nLookup < nValue); - ++pFormats, ++nLookup - ) - ; - OSL_ENSURE(NULL != pFormats->pDescription, "OLimitedFormats::getFormatKeyPropertyValue: did not find the value!"); - if (pFormats->pDescription) - _rValue <<= pFormats->nKey; - } - - // TODO: should use a standard format for the control type we're working for - } - - //--------------------------------------------------------------------- - sal_Bool OLimitedFormats::convertFormatKeyPropertyValue(Any& _rConvertedValue, Any& _rOldValue, const Any& _rNewValue) - { - OSL_ENSURE(m_xAggregate.is() && (-1 != m_nFormatEnumPropertyHandle), "OLimitedFormats::convertFormatKeyPropertyValue: not initialized!"); - - if (m_xAggregate.is()) - { - // the new format key to set - sal_Int32 nNewFormat = 0; - if (!(_rNewValue >>= nNewFormat)) - throw IllegalArgumentException(); - - // get the old (enum) value from the aggregate - Any aEnumPropertyValue = m_xAggregate->getFastPropertyValue(m_nFormatEnumPropertyHandle); - sal_Int32 nOldEnumValue = -1; - ::cppu::enum2int(nOldEnumValue, aEnumPropertyValue); - - // get the translation table - const FormatEntry* pFormats = lcl_getFormatTable(m_nTableId); - - _rOldValue.clear(); - _rConvertedValue.clear(); - - // look for the entry with the given format key - sal_Int32 nTablePosition = 0; - for ( ; - (NULL != pFormats->pDescription) && (nNewFormat != pFormats->nKey); - ++pFormats, ++nTablePosition - ) - { - if (nTablePosition == nOldEnumValue) - _rOldValue <<= pFormats->nKey; - } - - sal_Bool bFoundIt = (NULL != pFormats->pDescription); - sal_Bool bModified = sal_False; - if (bFoundIt) - { - _rConvertedValue <<= (sal_Int16)nTablePosition; - bModified = nTablePosition != nOldEnumValue; - } - - if (!_rOldValue.hasValue()) - { // did not reach the end of the table (means we found nNewFormat) - // -> go to the end to ensure that _rOldValue is set - while (pFormats->pDescription) - { - if (nTablePosition == nOldEnumValue) - { - _rOldValue <<= pFormats->nKey; - break; - } - - ++pFormats; - ++nTablePosition; - } - } - - OSL_ENSURE(_rOldValue.hasValue(), "OLimitedFormats::convertFormatKeyPropertyValue: did not find the old enum value in the table!"); - - if (!bFoundIt) - { // somebody gave us an format which we can't translate - ::rtl::OUString sMessage (RTL_CONSTASCII_USTRINGPARAM("This control supports only a very limited number of formats.") ); - throw IllegalArgumentException(sMessage, NULL, 2); - } - - return bModified; - } - - return sal_False; - } - - //--------------------------------------------------------------------- - void OLimitedFormats::setFormatKeyPropertyValue( const Any& _rNewValue ) - { - OSL_ENSURE(m_xAggregate.is() && (-1 != m_nFormatEnumPropertyHandle), "OLimitedFormats::setFormatKeyPropertyValue: not initialized!"); - - if (m_xAggregate.is()) - { // this is to be called after convertFormatKeyPropertyValue, where - // we translated the format key into a enum value. - // So now we can simply forward this enum value to our aggreate - m_xAggregate->setFastPropertyValue(m_nFormatEnumPropertyHandle, _rNewValue); - } - } - - //--------------------------------------------------------------------- - void OLimitedFormats::acquireSupplier(const Reference< XMultiServiceFactory >& _rxORB) - { - ::osl::MutexGuard aGuard(s_aMutex); - if ((1 == ++s_nInstanceCount) && _rxORB.is()) - { // create the standard formatter - - Sequence< Any > aInit(1); - aInit[0] <<= getLocale(ltEnglishUS); - - Reference< XInterface > xSupplier = _rxORB->createInstanceWithArguments(FRM_NUMBER_FORMATS_SUPPLIER, aInit); - OSL_ENSURE(xSupplier.is(), "OLimitedFormats::OLimitedFormats: could not create a formats supplier!"); - - s_xStandardFormats = Reference< XNumberFormatsSupplier >(xSupplier, UNO_QUERY); - OSL_ENSURE(s_xStandardFormats.is() || !xSupplier.is(), "OLimitedFormats::OLimitedFormats: missing an interface!"); - } - } - - //--------------------------------------------------------------------- - void OLimitedFormats::releaseSupplier() - { - ::osl::MutexGuard aGuard(s_aMutex); - if (0 == --s_nInstanceCount) - { - ::comphelper::disposeComponent(s_xStandardFormats); - s_xStandardFormats = NULL; - - clearTable(FormComponentType::TIMEFIELD); - clearTable(FormComponentType::DATEFIELD); - } - } - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/misc/listenercontainers.cxx b/forms/source/misc/listenercontainers.cxx deleted file mode 100644 index 316bb1056..000000000 --- a/forms/source/misc/listenercontainers.cxx +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "listenercontainers.hxx" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::form; - - //==================================================================== - //= ResetListeners - //==================================================================== - //--------------------------------------------------------------------- - bool ResetListeners::implTypedNotify( const Reference< XResetListener >& _rxListener, - const EventObject& _rEvent ) SAL_THROW( ( Exception ) ) - { - switch ( m_eCurrentNotificationType ) - { - case eApproval: - if ( !_rxListener->approveReset( _rEvent ) ) - return false; - return true; - case eFinal: - _rxListener->resetted( _rEvent ); - break; - default: - OSL_FAIL( "ResetListeners::implNotify: invalid notification type!" ); - } - return true; - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/misc/property.cxx b/forms/source/misc/property.cxx deleted file mode 100644 index 4e95fa85c..000000000 --- a/forms/source/misc/property.cxx +++ /dev/null @@ -1,258 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "frm_strings.hxx" -#include "property.hxx" - -#include "property.hrc" -#include <cppuhelper/queryinterface.hxx> -#include <tools/debug.hxx> -#include <com/sun/star/beans/PropertyAttribute.hpp> - -#include <algorithm> - -//... namespace frm ....................................................... -namespace frm -{ -//......................................................................... - -//================================================================== -//= PropertyInfoService -//================================================================== -PropertyInfoService::PropertyMap PropertyInfoService::s_AllKnownProperties; -//------------------------------------------------------------------ -sal_Int32 PropertyInfoService::getPropertyId(const ::rtl::OUString& _rName) -{ - initialize(); - - PropertyAssignment aCompareName(_rName, -1); - - ::std::pair<PropertyMapIterator,PropertyMapIterator> aPair = ::std::equal_range( - s_AllKnownProperties.begin(), - s_AllKnownProperties.end(), - aCompareName, - PropertyAssignmentNameCompareLess()); - - sal_Int32 nHandle = -1; - if (aPair.first != aPair.second) - { // we found something _and_ we have an identity - nHandle = aPair.first->nHandle; - } - - return nHandle; -} - -//------------------------------------------------------------------ -sal_Int32 ConcreteInfoService::getPreferedPropertyId(const ::rtl::OUString& _rName) -{ - return PropertyInfoService::getPropertyId(_rName); -} - -//------------------------------------------------------------------ -#define ADD_PROP_ASSIGNMENT(varname) \ - s_AllKnownProperties.push_back(PropertyAssignment(PROPERTY_##varname, PROPERTY_ID_##varname)) -//.................................................................. -void PropertyInfoService::initialize() -{ - if (!s_AllKnownProperties.empty()) - return; - - s_AllKnownProperties.reserve(220); - - ADD_PROP_ASSIGNMENT(NAME); - ADD_PROP_ASSIGNMENT(TAG); - ADD_PROP_ASSIGNMENT(TABINDEX); - ADD_PROP_ASSIGNMENT(CLASSID); - ADD_PROP_ASSIGNMENT(ALIGN); - ADD_PROP_ASSIGNMENT(FETCHSIZE); - ADD_PROP_ASSIGNMENT(VALUE); - ADD_PROP_ASSIGNMENT(VALUEMIN); - ADD_PROP_ASSIGNMENT(VALUEMAX); - ADD_PROP_ASSIGNMENT(VALUESTEP); - ADD_PROP_ASSIGNMENT(TEXT); - ADD_PROP_ASSIGNMENT(LABEL); - ADD_PROP_ASSIGNMENT(NAVIGATION); - ADD_PROP_ASSIGNMENT(CYCLE); - ADD_PROP_ASSIGNMENT(CONTROLSOURCE); - ADD_PROP_ASSIGNMENT(ENABLED); - ADD_PROP_ASSIGNMENT(ENABLEVISIBLE); - ADD_PROP_ASSIGNMENT(SPIN); - ADD_PROP_ASSIGNMENT(READONLY); - ADD_PROP_ASSIGNMENT(FILTER); - ADD_PROP_ASSIGNMENT(WIDTH); - ADD_PROP_ASSIGNMENT(SEARCHABLE); - ADD_PROP_ASSIGNMENT(MULTILINE); - ADD_PROP_ASSIGNMENT(TARGET_URL); - ADD_PROP_ASSIGNMENT(DEFAULTCONTROL); - ADD_PROP_ASSIGNMENT(MAXTEXTLEN); - ADD_PROP_ASSIGNMENT(SIZE); - ADD_PROP_ASSIGNMENT(DATE); - ADD_PROP_ASSIGNMENT(TIME); - ADD_PROP_ASSIGNMENT(STATE); - ADD_PROP_ASSIGNMENT(TRISTATE); - ADD_PROP_ASSIGNMENT(HIDDEN_VALUE); - ADD_PROP_ASSIGNMENT(TARGET_FRAME); - ADD_PROP_ASSIGNMENT(BUTTONTYPE); - ADD_PROP_ASSIGNMENT(STRINGITEMLIST); - ADD_PROP_ASSIGNMENT(DEFAULT_TEXT); - ADD_PROP_ASSIGNMENT(DEFAULT_STATE); - ADD_PROP_ASSIGNMENT(DEFAULT_DATE); - ADD_PROP_ASSIGNMENT(DEFAULT_TIME); - ADD_PROP_ASSIGNMENT(DEFAULT_VALUE); - ADD_PROP_ASSIGNMENT(FORMATKEY); - ADD_PROP_ASSIGNMENT(FORMATSSUPPLIER); - ADD_PROP_ASSIGNMENT(SUBMIT_ACTION); - ADD_PROP_ASSIGNMENT(SUBMIT_TARGET); - ADD_PROP_ASSIGNMENT(SUBMIT_METHOD); - ADD_PROP_ASSIGNMENT(SUBMIT_ENCODING); - ADD_PROP_ASSIGNMENT(IMAGE_URL); - ADD_PROP_ASSIGNMENT(GRAPHIC); - ADD_PROP_ASSIGNMENT(EMPTY_IS_NULL); - ADD_PROP_ASSIGNMENT(LISTSOURCETYPE); - ADD_PROP_ASSIGNMENT(LISTSOURCE); - ADD_PROP_ASSIGNMENT(SELECT_SEQ); - ADD_PROP_ASSIGNMENT(VALUE_SEQ); - ADD_PROP_ASSIGNMENT(DEFAULT_SELECT_SEQ); - ADD_PROP_ASSIGNMENT(MULTISELECTION); - ADD_PROP_ASSIGNMENT(DECIMAL_ACCURACY); - ADD_PROP_ASSIGNMENT(EDITMASK); - ADD_PROP_ASSIGNMENT(ISREADONLY); - ADD_PROP_ASSIGNMENT(FIELDTYPE); - ADD_PROP_ASSIGNMENT(DECIMALS); - ADD_PROP_ASSIGNMENT(REFVALUE); - ADD_PROP_ASSIGNMENT(STRICTFORMAT); - ADD_PROP_ASSIGNMENT(DATASOURCE); - ADD_PROP_ASSIGNMENT(ALLOWADDITIONS); - ADD_PROP_ASSIGNMENT(ALLOWEDITS); - ADD_PROP_ASSIGNMENT(ALLOWDELETIONS); - ADD_PROP_ASSIGNMENT(MASTERFIELDS); - ADD_PROP_ASSIGNMENT(ISPASSTHROUGH); - ADD_PROP_ASSIGNMENT(QUERY); - ADD_PROP_ASSIGNMENT(LITERALMASK); - ADD_PROP_ASSIGNMENT(SHOWTHOUSANDSEP); - ADD_PROP_ASSIGNMENT(CURRENCYSYMBOL); - ADD_PROP_ASSIGNMENT(DATEFORMAT); - ADD_PROP_ASSIGNMENT(DATEMIN); - ADD_PROP_ASSIGNMENT(DATEMAX); - ADD_PROP_ASSIGNMENT(DATE_SHOW_CENTURY); - ADD_PROP_ASSIGNMENT(TIMEFORMAT); - ADD_PROP_ASSIGNMENT(TIMEMIN); - ADD_PROP_ASSIGNMENT(TIMEMAX); - ADD_PROP_ASSIGNMENT(LINECOUNT); - ADD_PROP_ASSIGNMENT(BOUNDCOLUMN); - ADD_PROP_ASSIGNMENT(HASNAVIGATION); - ADD_PROP_ASSIGNMENT(FONT); - ADD_PROP_ASSIGNMENT(BACKGROUNDCOLOR); - ADD_PROP_ASSIGNMENT(FILLCOLOR); - ADD_PROP_ASSIGNMENT(TEXTCOLOR); - ADD_PROP_ASSIGNMENT(LINECOLOR); - ADD_PROP_ASSIGNMENT(BORDER); - ADD_PROP_ASSIGNMENT(DROPDOWN); - ADD_PROP_ASSIGNMENT(HSCROLL); - ADD_PROP_ASSIGNMENT(VSCROLL); - ADD_PROP_ASSIGNMENT(TABSTOP); - ADD_PROP_ASSIGNMENT(AUTOCOMPLETE); - ADD_PROP_ASSIGNMENT(HARDLINEBREAKS); - ADD_PROP_ASSIGNMENT(PRINTABLE); - ADD_PROP_ASSIGNMENT(ECHO_CHAR); - ADD_PROP_ASSIGNMENT(ROWHEIGHT); - ADD_PROP_ASSIGNMENT(HELPTEXT); - ADD_PROP_ASSIGNMENT(FONT_NAME); - ADD_PROP_ASSIGNMENT(FONT_STYLENAME); - ADD_PROP_ASSIGNMENT(FONT_FAMILY); - ADD_PROP_ASSIGNMENT(FONT_CHARSET); - ADD_PROP_ASSIGNMENT(FONT_HEIGHT); - ADD_PROP_ASSIGNMENT(FONT_WEIGHT); - ADD_PROP_ASSIGNMENT(FONT_SLANT); - ADD_PROP_ASSIGNMENT(FONT_UNDERLINE); - ADD_PROP_ASSIGNMENT(FONT_WORDLINEMODE); - ADD_PROP_ASSIGNMENT(FONT_STRIKEOUT); - ADD_PROP_ASSIGNMENT(TEXTLINECOLOR); - ADD_PROP_ASSIGNMENT(FONTEMPHASISMARK); - ADD_PROP_ASSIGNMENT(FONTRELIEF); - ADD_PROP_ASSIGNMENT(HELPURL); - ADD_PROP_ASSIGNMENT(RECORDMARKER); - ADD_PROP_ASSIGNMENT(BOUNDFIELD); - ADD_PROP_ASSIGNMENT(INPUT_REQUIRED); - ADD_PROP_ASSIGNMENT(TREATASNUMERIC); - ADD_PROP_ASSIGNMENT(EFFECTIVE_VALUE); - ADD_PROP_ASSIGNMENT(EFFECTIVE_DEFAULT); - ADD_PROP_ASSIGNMENT(EFFECTIVE_MIN); - ADD_PROP_ASSIGNMENT(EFFECTIVE_MAX); - ADD_PROP_ASSIGNMENT(HIDDEN); - ADD_PROP_ASSIGNMENT(FILTERPROPOSAL); - ADD_PROP_ASSIGNMENT(FIELDSOURCE); - ADD_PROP_ASSIGNMENT(TABLENAME); - ADD_PROP_ASSIGNMENT(CONTROLLABEL); - ADD_PROP_ASSIGNMENT(CURRSYM_POSITION); - ADD_PROP_ASSIGNMENT(CURSORCOLOR); - ADD_PROP_ASSIGNMENT(ALWAYSSHOWCURSOR); - ADD_PROP_ASSIGNMENT(DISPLAYSYNCHRON); - ADD_PROP_ASSIGNMENT(ISMODIFIED); - ADD_PROP_ASSIGNMENT(ISNEW); - ADD_PROP_ASSIGNMENT(PRIVILEGES); - ADD_PROP_ASSIGNMENT(DETAILFIELDS); - ADD_PROP_ASSIGNMENT(COMMAND); - ADD_PROP_ASSIGNMENT(COMMANDTYPE); - ADD_PROP_ASSIGNMENT(RESULTSET_CONCURRENCY); - ADD_PROP_ASSIGNMENT(INSERTONLY); - ADD_PROP_ASSIGNMENT(RESULTSET_TYPE); - ADD_PROP_ASSIGNMENT(ESCAPE_PROCESSING); - ADD_PROP_ASSIGNMENT(APPLYFILTER); - ADD_PROP_ASSIGNMENT(ISNULLABLE); - ADD_PROP_ASSIGNMENT(ACTIVECOMMAND); - ADD_PROP_ASSIGNMENT(ISCURRENCY); - ADD_PROP_ASSIGNMENT(URL); - ADD_PROP_ASSIGNMENT(TITLE); - ADD_PROP_ASSIGNMENT(ACTIVE_CONNECTION); - ADD_PROP_ASSIGNMENT(SCALE); - ADD_PROP_ASSIGNMENT(SORT); - ADD_PROP_ASSIGNMENT(PERSISTENCE_MAXTEXTLENGTH); - ADD_PROP_ASSIGNMENT(SCROLL_VALUE); - ADD_PROP_ASSIGNMENT(SPIN_VALUE); - ADD_PROP_ASSIGNMENT(DEFAULT_SCROLL_VALUE); - ADD_PROP_ASSIGNMENT(DEFAULT_SPIN_VALUE); - ADD_PROP_ASSIGNMENT( WRITING_MODE ); - ADD_PROP_ASSIGNMENT( CONTEXT_WRITING_MODE ); - - // now sort the array by name - - std::sort( - s_AllKnownProperties.begin(), - s_AllKnownProperties.end(), - PropertyAssignmentNameCompareLess() - ); -} - -//......................................................................... -} -//... namespace frm ....................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/misc/services.cxx b/forms/source/misc/services.cxx deleted file mode 100644 index d3cd82dfb..000000000 --- a/forms/source/misc/services.cxx +++ /dev/null @@ -1,394 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "services.hxx" -#include "frm_module.hxx" -#include <cppuhelper/factory.hxx> -#include <uno/lbnames.h> -#include <osl/diagnose.h> -#include <uno/mapping.hxx> - -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::registry; - -//--------------------------------------------------------------------------------------- -//....................................................................................... -#define DECLARE_SERVICE_INFO(classImplName) \ - namespace frm { \ - extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> SAL_CALL classImplName##_CreateInstance(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory) throw (::com::sun::star::uno::RuntimeException); \ - } - -//--------------------------------------------------------------------------------------- -DECLARE_SERVICE_INFO(OFixedTextModel) -DECLARE_SERVICE_INFO(ORadioButtonModel) -DECLARE_SERVICE_INFO(ORadioButtonControl) -DECLARE_SERVICE_INFO(OCheckBoxModel) -DECLARE_SERVICE_INFO(OCheckBoxControl) -DECLARE_SERVICE_INFO(OHiddenModel) -DECLARE_SERVICE_INFO(OGroupBoxModel) -DECLARE_SERVICE_INFO(OGroupBoxControl) -DECLARE_SERVICE_INFO(OListBoxControl) -DECLARE_SERVICE_INFO(OListBoxModel) -DECLARE_SERVICE_INFO(OComboBoxControl) -DECLARE_SERVICE_INFO(OComboBoxModel) -DECLARE_SERVICE_INFO(OEditControl) -DECLARE_SERVICE_INFO(OEditModel) -DECLARE_SERVICE_INFO(ONumericControl) -DECLARE_SERVICE_INFO(ONumericModel) -DECLARE_SERVICE_INFO(OPatternControl) -DECLARE_SERVICE_INFO(OPatternModel) -DECLARE_SERVICE_INFO(OCurrencyControl) -DECLARE_SERVICE_INFO(OCurrencyModel) -DECLARE_SERVICE_INFO(ODateControl) -DECLARE_SERVICE_INFO(ODateModel) -DECLARE_SERVICE_INFO(OTimeControl) -DECLARE_SERVICE_INFO(OTimeModel) -DECLARE_SERVICE_INFO(OFormattedControl) -DECLARE_SERVICE_INFO(OFormattedModel) -DECLARE_SERVICE_INFO(OFileControlModel) -DECLARE_SERVICE_INFO(OButtonControl) -DECLARE_SERVICE_INFO(OButtonModel) -DECLARE_SERVICE_INFO(OImageButtonControl) -DECLARE_SERVICE_INFO(OImageButtonModel) - -DECLARE_SERVICE_INFO(OImageControlControl) -DECLARE_SERVICE_INFO(OImageControlModel) -DECLARE_SERVICE_INFO(OGridControlModel) - -// XForms objects -DECLARE_SERVICE_INFO(Binding) -DECLARE_SERVICE_INFO(Model) -DECLARE_SERVICE_INFO(XForms) - -// some special handling for the FormattedFieldWrapper which can act as FormattedModel or as EditModel -DECLARE_SERVICE_INFO(OFormattedFieldWrapper) - // this is for a service, which is instantiated through the EditModel service name - // and which acts mostly as Edit (mostly means : if somebody uses XPersistObject::read immediately after - // the object was instantiated and the stream contains a FormattedModel, it switches permanently to - // formatted.) -namespace frm { \ - extern Reference< XInterface > SAL_CALL OFormattedFieldWrapper_CreateInstance_ForceFormatted(const Reference<XMultiServiceFactory>& _rxFactory) throw (RuntimeException); \ -} - -DECLARE_SERVICE_INFO(OFormsCollection) -DECLARE_SERVICE_INFO(ImageProducer) - -//--------------------------------------------------------------------------------------- - -static Sequence< ::rtl::OUString > s_aClassImplementationNames; -static Sequence<Sequence< ::rtl::OUString > > s_aClassServiceNames; -static Sequence<sal_Int64> s_aFactories; - // need to use sal_Int64 instead of ComponentInstantiation, as ComponentInstantiation has no cppuType, so - // it can't be used with sequences - -//--------------------------------------------------------------------------------------- -void registerClassInfo( - ::rtl::OUString _rClassImplName, // the ImplName of the class - const Sequence< ::rtl::OUString >& _rServiceNames, // the services supported by this class - ::cppu::ComponentInstantiation _pCreateFunction // the method for instantiating such a class - ) -{ - sal_Int32 nCurrentLength = s_aClassImplementationNames.getLength(); - OSL_ENSURE((nCurrentLength == s_aClassServiceNames.getLength()) - && (nCurrentLength == s_aFactories.getLength()), - "forms::registerClassInfo : invalid class infos !"); - - s_aClassImplementationNames.realloc(nCurrentLength + 1); - s_aClassServiceNames.realloc(nCurrentLength + 1); - s_aFactories.realloc(nCurrentLength + 1); - - s_aClassImplementationNames.getArray()[nCurrentLength] = _rClassImplName; - s_aClassServiceNames.getArray()[nCurrentLength] = _rServiceNames; - s_aFactories.getArray()[nCurrentLength] = reinterpret_cast<sal_Int64>(_pCreateFunction); -} - -//--------------------------------------------------------------------------------------- -//....................................................................................... -#define REGISTER_CLASS_CORE(classImplName) \ - registerClassInfo( \ - ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.") ) + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(#classImplName)), \ - aServices, \ - frm::classImplName##_CreateInstance) - -//....................................................................................... -#define REGISTER_CLASS1(classImplName, service1) \ - aServices.realloc(1); \ - aServices.getArray()[0] = frm::service1; \ - REGISTER_CLASS_CORE(classImplName) - -//....................................................................................... -#define REGISTER_CLASS2(classImplName, service1, service2) \ - aServices.realloc(2); \ - aServices.getArray()[0] = frm::service1; \ - aServices.getArray()[1] = frm::service2; \ - REGISTER_CLASS_CORE(classImplName) - -//....................................................................................... -#define REGISTER_CLASS3(classImplName, service1, service2, service3) \ - aServices.realloc(3); \ - aServices.getArray()[0] = frm::service1; \ - aServices.getArray()[1] = frm::service2; \ - aServices.getArray()[2] = frm::service3; \ - REGISTER_CLASS_CORE(classImplName) - -//....................................................................................... -#define REGISTER_CLASS4(classImplName, service1, service2, service3, service4) \ - aServices.realloc(4); \ - aServices.getArray()[0] = frm::service1; \ - aServices.getArray()[1] = frm::service2; \ - aServices.getArray()[2] = frm::service3; \ - aServices.getArray()[3] = frm::service4; \ - REGISTER_CLASS_CORE(classImplName) - -//--------------------------------------------------------------------------------------- -void ensureClassInfos() -{ - if (s_aClassImplementationNames.getLength()) - // nothing to do - return; - Sequence< ::rtl::OUString > aServices; - - // ======================================================================== - // = ControlModels - // ------------------------------------------------------------------------ - // - FixedText - REGISTER_CLASS2(OFixedTextModel, FRM_COMPONENT_FIXEDTEXT, FRM_SUN_COMPONENT_FIXEDTEXT); - // - Hidden - REGISTER_CLASS3(OHiddenModel, FRM_COMPONENT_HIDDENCONTROL, FRM_SUN_COMPONENT_HIDDENCONTROL, FRM_COMPONENT_HIDDEN); - // - FileControl - REGISTER_CLASS2(OFileControlModel, FRM_COMPONENT_FILECONTROL, FRM_SUN_COMPONENT_FILECONTROL); - // - ImageButton - REGISTER_CLASS2(OImageButtonModel, FRM_COMPONENT_IMAGEBUTTON, FRM_SUN_COMPONENT_IMAGEBUTTON); - // - GridControl - REGISTER_CLASS3(OGridControlModel, FRM_COMPONENT_GRID /* compatibility */, FRM_COMPONENT_GRIDCONTROL, FRM_SUN_COMPONENT_GRIDCONTROL); - // - GroupBox - REGISTER_CLASS2(OGroupBoxModel, FRM_COMPONENT_GROUPBOX, FRM_SUN_COMPONENT_GROUPBOX); - - // - RadioButton - REGISTER_CLASS4( ORadioButtonModel, FRM_COMPONENT_RADIOBUTTON, FRM_SUN_COMPONENT_RADIOBUTTON, FRM_SUN_COMPONENT_DATABASE_RADIOBUTTON, BINDABLE_DATABASE_RADIO_BUTTON ); - // - CheckBox - REGISTER_CLASS4( OCheckBoxModel, FRM_COMPONENT_CHECKBOX, FRM_SUN_COMPONENT_CHECKBOX, FRM_SUN_COMPONENT_DATABASE_CHECKBOX, BINDABLE_DATABASE_CHECK_BOX ); - // - ListBox - REGISTER_CLASS4( OListBoxModel, FRM_COMPONENT_LISTBOX, FRM_SUN_COMPONENT_LISTBOX, FRM_SUN_COMPONENT_DATABASE_LISTBOX, BINDABLE_DATABASE_LIST_BOX ); - // - ComboBox - REGISTER_CLASS4( OComboBoxModel, FRM_COMPONENT_COMBOBOX, FRM_SUN_COMPONENT_COMBOBOX, FRM_SUN_COMPONENT_DATABASE_COMBOBOX, BINDABLE_DATABASE_COMBO_BOX ); - // - EditControl - REGISTER_CLASS4( OEditModel, FRM_COMPONENT_TEXTFIELD, FRM_SUN_COMPONENT_TEXTFIELD, FRM_SUN_COMPONENT_DATABASE_TEXTFIELD, BINDABLE_DATABASE_TEXT_FIELD ); - // - DateControl - REGISTER_CLASS3( ODateModel, FRM_COMPONENT_DATEFIELD, FRM_SUN_COMPONENT_DATEFIELD, FRM_SUN_COMPONENT_DATABASE_DATEFIELD ); - // - TimeControl - REGISTER_CLASS3( OTimeModel, FRM_COMPONENT_TIMEFIELD, FRM_SUN_COMPONENT_TIMEFIELD, FRM_SUN_COMPONENT_DATABASE_TIMEFIELD ); - // - NumericField - REGISTER_CLASS4( ONumericModel, FRM_COMPONENT_NUMERICFIELD, FRM_SUN_COMPONENT_NUMERICFIELD, FRM_SUN_COMPONENT_DATABASE_NUMERICFIELD, BINDABLE_DATABASE_NUMERIC_FIELD ); - // - CurrencyField - REGISTER_CLASS3( OCurrencyModel, FRM_COMPONENT_CURRENCYFIELD, FRM_SUN_COMPONENT_CURRENCYFIELD, FRM_SUN_COMPONENT_DATABASE_CURRENCYFIELD ); - // - PatternField - REGISTER_CLASS3( OPatternModel, FRM_COMPONENT_PATTERNFIELD, FRM_SUN_COMPONENT_PATTERNFIELD, FRM_SUN_COMPONENT_DATABASE_PATTERNFIELD ); - // - Button - REGISTER_CLASS2( OButtonModel, FRM_COMPONENT_COMMANDBUTTON, FRM_SUN_COMPONENT_COMMANDBUTTON ); - // - ImageControl - REGISTER_CLASS2( OImageControlModel, FRM_COMPONENT_IMAGECONTROL, FRM_SUN_COMPONENT_IMAGECONTROL ); - - // - FormattedField - REGISTER_CLASS1(OFormattedFieldWrapper, FRM_COMPONENT_EDIT); - // since SRC568 both OFormattedModel and OEditModel use FRM_COMPONENT_EDIT for persistence, - // and while reading a wrapper determines which kind of model it is - // register the wrapper for the FormattedField, as it handles the XPersistObject::write - // so that version <= 5.1 are able to read it - aServices.realloc(4); - aServices.getArray()[0] = frm::FRM_COMPONENT_FORMATTEDFIELD; - aServices.getArray()[1] = frm::FRM_SUN_COMPONENT_FORMATTEDFIELD; - aServices.getArray()[2] = frm::FRM_SUN_COMPONENT_DATABASE_FORMATTEDFIELD; - aServices.getArray()[3] = frm::BINDABLE_DATABASE_FORMATTED_FIELD; - - registerClassInfo(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.forms.OFormattedFieldWrapper_ForcedFormatted") ), - aServices, - frm::OFormattedFieldWrapper_CreateInstance_ForceFormatted); - - // ======================================================================== - // = Controls - // - RadioButton - REGISTER_CLASS2(ORadioButtonControl, STARDIV_ONE_FORM_CONTROL_RADIOBUTTON, FRM_SUN_CONTROL_RADIOBUTTON); - // - CheckBox - REGISTER_CLASS2(OCheckBoxControl, STARDIV_ONE_FORM_CONTROL_CHECKBOX, FRM_SUN_CONTROL_CHECKBOX); - // - GroupBox - REGISTER_CLASS2(OGroupBoxControl, STARDIV_ONE_FORM_CONTROL_GROUPBOX, FRM_SUN_CONTROL_GROUPBOX); - // - ListBox - REGISTER_CLASS2(OListBoxControl, STARDIV_ONE_FORM_CONTROL_LISTBOX, FRM_SUN_CONTROL_LISTBOX); - // - ComboBox - REGISTER_CLASS2(OComboBoxControl, STARDIV_ONE_FORM_CONTROL_COMBOBOX, FRM_SUN_CONTROL_COMBOBOX); - // - EditControl - REGISTER_CLASS3(OEditControl, STARDIV_ONE_FORM_CONTROL_TEXTFIELD, FRM_SUN_CONTROL_TEXTFIELD, STARDIV_ONE_FORM_CONTROL_EDIT); - // - DateControl - REGISTER_CLASS2(ODateControl, STARDIV_ONE_FORM_CONTROL_DATEFIELD, FRM_SUN_CONTROL_DATEFIELD); - // - TimeControl - REGISTER_CLASS2(OTimeControl, STARDIV_ONE_FORM_CONTROL_TIMEFIELD, FRM_SUN_CONTROL_TIMEFIELD); - // - NumericField - REGISTER_CLASS2(ONumericControl, STARDIV_ONE_FORM_CONTROL_NUMERICFIELD, FRM_SUN_CONTROL_NUMERICFIELD); - // - CurrencyField - REGISTER_CLASS2(OCurrencyControl, STARDIV_ONE_FORM_CONTROL_CURRENCYFIELD, FRM_SUN_CONTROL_CURRENCYFIELD); - // - PatternField - REGISTER_CLASS2(OPatternControl, STARDIV_ONE_FORM_CONTROL_PATTERNFIELD, FRM_SUN_CONTROL_PATTERNFIELD); - // - FormattedField - REGISTER_CLASS2(OFormattedControl, STARDIV_ONE_FORM_CONTROL_FORMATTEDFIELD, FRM_SUN_CONTROL_FORMATTEDFIELD); - // - Button - REGISTER_CLASS2(OButtonControl, STARDIV_ONE_FORM_CONTROL_COMMANDBUTTON, FRM_SUN_CONTROL_COMMANDBUTTON); - // - ImageButton - REGISTER_CLASS2(OImageButtonControl, STARDIV_ONE_FORM_CONTROL_IMAGEBUTTON, FRM_SUN_CONTROL_IMAGEBUTTON); - // - ImageControl - REGISTER_CLASS2(OImageControlControl, STARDIV_ONE_FORM_CONTROL_IMAGECONTROL, FRM_SUN_CONTROL_IMAGECONTROL); - - - // ======================================================================== - // = various - REGISTER_CLASS1(OFormsCollection, FRM_SUN_FORMS_COLLECTION); - REGISTER_CLASS1(ImageProducer, SRV_AWT_IMAGEPRODUCER); - - // ======================================================================== - // = XForms core -#define REGISTER_XFORMS_CLASS(name) \ - aServices.realloc(1); \ - aServices.getArray()[0] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xforms." #name )); \ - REGISTER_CLASS_CORE(name) - - REGISTER_XFORMS_CLASS(Model); - REGISTER_XFORMS_CLASS(XForms); - -} - -//======================================================================================= -extern "C" -{ - -//--------------------------------------------------------------------------------------- -void SAL_CALL createRegistryInfo_ODatabaseForm(); -void SAL_CALL createRegistryInfo_OFilterControl(); -void SAL_CALL createRegistryInfo_OScrollBarModel(); -void SAL_CALL createRegistryInfo_OSpinButtonModel(); -void SAL_CALL createRegistryInfo_ONavigationBarModel(); -void SAL_CALL createRegistryInfo_ONavigationBarControl(); -void SAL_CALL createRegistryInfo_ORichTextModel(); -void SAL_CALL createRegistryInfo_ORichTextControl(); -void SAL_CALL createRegistryInfo_CLibxml2XFormsExtension(); -void SAL_CALL createRegistryInfo_FormOperations(); - -//--------------------------------------------------------------------------------------- -void SAL_CALL createRegistryInfo_FORMS() -{ - static sal_Bool bInit = sal_False; - if (!bInit) - { - createRegistryInfo_ODatabaseForm(); - createRegistryInfo_OFilterControl(); - createRegistryInfo_OScrollBarModel(); - createRegistryInfo_OSpinButtonModel(); - createRegistryInfo_ONavigationBarModel(); - createRegistryInfo_ONavigationBarControl(); - createRegistryInfo_ORichTextModel(); - createRegistryInfo_ORichTextControl(); - createRegistryInfo_CLibxml2XFormsExtension(); - createRegistryInfo_FormOperations(); - bInit = sal_True; - } -} - -//--------------------------------------------------------------------------------------- -SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory(const sal_Char* _pImplName, XMultiServiceFactory* _pServiceManager, void* /*_pRegistryKey*/) -{ - if (!_pServiceManager || !_pImplName) - return NULL; - - // ======================================================================== - // a lot of stuff which is implemented "manually" here in this file - void* pRet = NULL; - - // collect the class infos - ensureClassInfos(); - - // both our static sequences should have the same length ... - sal_Int32 nClasses = s_aClassImplementationNames.getLength(); - OSL_ENSURE((s_aClassServiceNames.getLength() == nClasses) && - (s_aFactories.getLength() == nClasses), - "forms::component_getFactory : invalid class infos !"); - - // loop through the sequences and register the service providers - const ::rtl::OUString* pClasses = s_aClassImplementationNames.getConstArray(); - const Sequence< ::rtl::OUString >* pServices = s_aClassServiceNames.getConstArray(); - const sal_Int64* pFunctionsAsInts = s_aFactories.getConstArray(); - - for (sal_Int32 i=0; i<nClasses; ++i, ++pClasses, ++pServices, ++pFunctionsAsInts) - { - if (rtl_ustr_ascii_compare(pClasses->getStr(), _pImplName) == 0) - { - ::cppu::ComponentInstantiation aCurrentCreateFunction = - reinterpret_cast< ::cppu::ComponentInstantiation>(*pFunctionsAsInts); - - Reference<XSingleServiceFactory> xFactory( - ::cppu::createSingleFactory( - _pServiceManager, - *pClasses, - aCurrentCreateFunction, - *pServices - ) - ); - if (xFactory.is()) - { - xFactory->acquire(); - pRet = xFactory.get(); - break; - } - } - } - - // ======================================================================== - // the real way - use the OModule - if ( !pRet ) - { - createRegistryInfo_FORMS(); - { - // let the module look for the component - Reference< XInterface > xRet; - xRet = ::frm::OFormsModule::getComponentFactory( - ::rtl::OUString::createFromAscii( _pImplName ), - static_cast< XMultiServiceFactory* >( _pServiceManager ) ); - - if ( xRet.is() ) - xRet->acquire(); - pRet = xRet.get(); - } - } - - return pRet; -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/resource/frm_resource.cxx b/forms/source/resource/frm_resource.cxx deleted file mode 100644 index 87d2f9c10..000000000 --- a/forms/source/resource/frm_resource.cxx +++ /dev/null @@ -1,87 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "frm_resource.hxx" -#include <tools/simplerm.hxx> - -// ---- needed as long as we have no contexts for components --- -#include <vcl/svapp.hxx> -//--------------------------------------------------- - -#include <svl/solar.hrc> - -//......................................................................... -namespace frm -{ - - //================================================================== - //= ResourceManager - //================================================================== - SimpleResMgr* ResourceManager::m_pImpl = NULL; - - //------------------------------------------------------------------ - ResourceManager::EnsureDelete::~EnsureDelete() - { - delete ResourceManager::m_pImpl; - } - - //------------------------------------------------------------------ - void ResourceManager::ensureImplExists() - { - if (m_pImpl) - return; - - m_pImpl = SimpleResMgr::Create("frm", Application::GetSettings().GetUILocale()); - - if (m_pImpl) - { - // no that we have a impl class make sure it's deleted on unloading the library - static ResourceManager::EnsureDelete s_aDeleteTheImplClas; - } - } - - //------------------------------------------------------------------ - ::rtl::OUString ResourceManager::loadString(sal_uInt16 _nResId) - { - ::rtl::OUString sReturn; - - ensureImplExists(); - if (m_pImpl) - sReturn = m_pImpl->ReadString(_nResId); - - return sReturn; - } - -//......................................................................... -} -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/resource/strings.src b/forms/source/resource/strings.src deleted file mode 100644 index 54cf3d56a..000000000 --- a/forms/source/resource/strings.src +++ /dev/null @@ -1,161 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_RESOURCE_HRC_ -#include "frm_resource.hrc" -#endif - -String RID_BASELISTBOX_ERROR_FILLLIST -{ - Text [ en-US ] = "The contents of a combo box or list field could not be determined."; -}; - -String RID_STR_IMPORT_GRAPHIC -{ - Text [ en-US ] = "Insert graphics" ; -}; - -String RID_STR_CONTROL_SUBSTITUTED_NAME -{ - Text [ en-US ] = "substituted"; -}; - -String RID_STR_CONTROL_SUBSTITUTED_EPXPLAIN -{ - Text [ en-US ] = "An error occurred while this control was being loaded. It was therefore replaced with a placeholder."; -}; - -String RID_STR_READERROR -{ - Text [ en-US ] = "Error reading data from database" ; -}; - -String RID_STR_CONNECTERROR -{ - Text [ en-US ] = "Connection failed" ; -}; - -String RID_ERR_LOADING_FORM -{ - Text [ en-US ] = "The data content could not be loaded."; -}; - -String RID_ERR_REFRESHING_FORM -{ - Text [ en-US ] = "The data content could not be updated"; -}; - -String RID_STR_ERR_INSERTRECORD -{ - Text [ en-US ] = "Error inserting the new record"; -}; - -String RID_STR_ERR_UPDATERECORD -{ - Text [ en-US ] = "Error updating the current record"; -}; - -String RID_STR_ERR_DELETERECORD -{ - Text [ en-US ] = "Error deleting the current record"; -}; - -String RID_STR_ERR_DELETERECORDS -{ - Text [ en-US ] = "Error deleting the specified records"; -}; - -String RID_STR_NEED_NON_NULL_OBJECT -{ - Text [ en-US ] = "The object cannot be NULL."; -}; - -String RID_STR_OPEN_GRAPHICS -{ - Text [ en-US ] = "Insert graphics from..."; -}; - -String RID_STR_CLEAR_GRAPHICS -{ - Text [ en-US ] = "Remove graphics"; -}; - - -String RID_STR_INVALIDSTREAM -{ - Text [ en-US ] = "The given stream is invalid."; -}; - -String RID_STR_SYNTAXERROR -{ - Text [ en-US ] = "Syntax error in query expression" ; -}; - -String RID_STR_INCOMPATIBLE_TYPES -{ - Text [ en-US ] = "The value types supported by the binding cannot be used for exchanging data with this control."; -}; - -String RID_STR_LABEL_RECORD -{ - Text [ en-US ] = "Record"; -}; - -String RID_STR_INVALID_VALIDATOR -{ - Text [ en-US ] = "The control is connected to an external value binding, which at the same time acts as validator. You need to revoke the value binding, before you can set a new validator."; -}; - -String RID_STR_LABEL_OF -{ - Text [ en-US ] = "of"; -}; - -String RID_STR_QUERY_SAVE_MODIFIED_ROW -{ - Text [ en-US ] = "The content of the current form has been modified.\nDo you want to save your changes?"; -}; -String RID_STR_COULD_NOT_SET_ORDER -{ - Text [ en-US ] = "Error setting the sort criteria"; -}; -String RID_STR_COULD_NOT_SET_FILTER -{ - Text [ en-US ] = "Error setting the filter criteria"; -}; -String RID_STR_FEATURE_REQUIRES_PARAMETERS -{ - Text [ en-US ] = "To execute this function, parameters are needed."; -}; -String RID_STR_FEATURE_NOT_EXECUTABLE -{ - Text [ en-US ] = "This function cannot be executed, but is only for status queries."; -}; -String RID_STR_FEATURE_UNKNOWN -{ - Text [ en-US ] = "Unknown function."; -}; diff --git a/forms/source/resource/xforms.src b/forms/source/resource/xforms.src deleted file mode 100644 index b01f5c8cb..000000000 --- a/forms/source/resource/xforms.src +++ /dev/null @@ -1,196 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _FRM_RESOURCE_HRC_ -#include "frm_resource.hrc" -#endif - - -String RID_STR_XFORMS_NO_BINDING_EXPRESSION -{ - Text [ en-US ] = "Please enter a binding expression."; -}; - -String RID_STR_XFORMS_INVALID_BINDING_EXPRESSION -{ - Text [ en-US ] = "This is an invalid binding expression."; -}; - -String RID_STR_XFORMS_INVALID_VALUE -{ - Text [ en-US ] = "Value is invalid."; -}; - -String RID_STR_XFORMS_REQUIRED -{ - Text [ en-US ] = "A value is required."; -}; - -String RID_STR_XFORMS_INVALID_CONSTRAINT -{ - Text [ en-US ] = "The constraint '$1' not validated."; -}; - -String RID_STR_XFORMS_VALUE_IS_NOT_A -{ - Text [ en-US ] = "The value is not of the type '$2'."; -}; - -String RID_STR_XFORMS_VALUE_MAX_INCL -{ - Text [ en-US ] = "The value must be smaller than or equal to $2."; -}; - -String RID_STR_XFORMS_VALUE_MAX_EXCL -{ - Text [ en-US ] = "The value must be smaller than $2."; -}; - -String RID_STR_XFORMS_VALUE_MIN_INCL -{ - Text [ en-US ] = "The value must be greater than or equal to $2."; -}; - -String RID_STR_XFORMS_VALUE_MIN_EXCL -{ - Text [ en-US ] = "The value must be greater than $2."; -}; - -String RID_STR_XFORMS_VALUE_PATTERN -{ - Text [ en-US ] = "The value does not match the pattern '$2'."; -}; - -String RID_STR_XFORMS_VALUE_TOTAL_DIGITS -{ - Text [ en-US ] = "$2 digits allowed at most."; -}; - -String RID_STR_XFORMS_VALUE_FRACTION_DIGITS -{ - Text [ en-US ] = "$2 fraction digits allowed at most."; -}; - -String RID_STR_XFORMS_VALUE_LENGTH -{ - Text [ en-US ] = "The string must be $2 characters long."; -}; - -String RID_STR_XFORMS_VALUE_MIN_LENGTH -{ - Text [ en-US ] = "The string must be at least $2 characters long."; -}; - -String RID_STR_XFORMS_VALUE_MAX_LENGTH -{ - Text [ en-US ] = "The string can only be $2 characters long at most."; -}; - -String RID_STR_DATATYPE_STRING -{ - Text [ en-US ] = "String"; -}; - -String RID_STR_DATATYPE_URL -{ - Text [ en-US ] = "Hyperlink"; -}; - -String RID_STR_DATATYPE_BOOLEAN -{ - Text [ en-US ] = "True/False (Boolean)"; -}; - -String RID_STR_DATATYPE_DECIMAL -{ - Text [ en-US ] = "Decimal"; -}; - -String RID_STR_DATATYPE_FLOAT -{ - Text [ en-US ] = "Floating point"; -}; - -String RID_STR_DATATYPE_DOUBLE -{ - Text [ en-US ] = "Double"; -}; - -String RID_STR_DATATYPE_DATE -{ - Text [ en-US ] = "Date"; -}; - -String RID_STR_DATATYPE_TIME -{ - Text [ en-US ] = "Time"; -}; - -String RID_STR_DATATYPE_DATETIME -{ - Text [ en-US ] = "Date and Time"; -}; - -String RID_STR_DATATYPE_YEARMONTH -{ - Text [ en-US ] = "Month and year"; -}; - -String RID_STR_DATATYPE_YEAR -{ - Text [ en-US ] = "Year"; -}; - -String RID_STR_DATATYPE_MONTHDAY -{ - Text [ en-US ] = "Month and day"; -}; - -String RID_STR_DATATYPE_MONTH -{ - Text [ en-US ] = "Month"; -}; - -String RID_STR_DATATYPE_DAY -{ - Text [ en-US ] = "Day"; -}; - -String RID_STR_XFORMS_CANT_EVALUATE -{ - Text [ en-US ] = "Error during evaluation"; -}; - -String RID_STR_XFORMS_PATTERN_DOESNT_MATCH -{ - Text [ en-US ] = "The string '$1' does not match the required regular expression '$2'."; -}; - -String RID_STR_XFORMS_BINDING_UI_NAME -{ - Text [ en-US ] = "Binding" ; -}; diff --git a/forms/source/richtext/attributedispatcher.cxx b/forms/source/richtext/attributedispatcher.cxx deleted file mode 100644 index 88251a5d6..000000000 --- a/forms/source/richtext/attributedispatcher.cxx +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "attributedispatcher.hxx" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ -#include <editeng/editview.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::frame; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::beans; - - //==================================================================== - //= OAttributeDispatcher - //==================================================================== - //-------------------------------------------------------------------- - OAttributeDispatcher::OAttributeDispatcher( EditView& _rView, AttributeId _nAttributeId, const URL& _rURL, - IMultiAttributeDispatcher* _pMasterDispatcher ) - :ORichTextFeatureDispatcher( _rView, _rURL ) - ,m_pMasterDispatcher( _pMasterDispatcher ) - ,m_nAttributeId( _nAttributeId ) - { - OSL_ENSURE( m_pMasterDispatcher, "OAttributeDispatcher::OAttributeDispatcher: invalid master dispatcher!" ); - } - - //-------------------------------------------------------------------- - OAttributeDispatcher::~OAttributeDispatcher( ) - { - acquire(); - dispose(); - } - - //-------------------------------------------------------------------- - void OAttributeDispatcher::disposing( ::osl::ClearableMutexGuard& _rClearBeforeNotify ) - { - m_pMasterDispatcher = NULL; - ORichTextFeatureDispatcher::disposing( _rClearBeforeNotify ); - } - - //-------------------------------------------------------------------- - void OAttributeDispatcher::fillFeatureEventFromAttributeState( FeatureStateEvent& _rEvent, const AttributeState& _rState ) const - { - if ( _rState.eSimpleState == eChecked ) - _rEvent.State <<= (sal_Bool)sal_True; - else if ( _rState.eSimpleState == eUnchecked ) - _rEvent.State <<= (sal_Bool)sal_False; - } - - //-------------------------------------------------------------------- - FeatureStateEvent OAttributeDispatcher::buildStatusEvent() const - { - FeatureStateEvent aEvent( ORichTextFeatureDispatcher::buildStatusEvent() ); - aEvent.IsEnabled = getEditView() ? !getEditView()->IsReadOnly() : sal_False; - - AttributeState aState; - if ( m_pMasterDispatcher ) - aState = m_pMasterDispatcher->getState( m_nAttributeId ); - - fillFeatureEventFromAttributeState( aEvent, aState ); - - return aEvent; - } - - //-------------------------------------------------------------------- - void SAL_CALL OAttributeDispatcher::dispatch( const URL& _rURL, const Sequence< PropertyValue >& _rArguments ) throw (RuntimeException) - { - ::osl::MutexGuard aGuard( m_aMutex ); - - checkDisposed(); - - (void)_rURL; - (void)_rArguments; - - OSL_ENSURE( _rURL.Complete == getFeatureURL().Complete, "OAttributeDispatcher::dispatch: invalid URL!" ); -#if OSL_DEBUG_LEVEL > 0 - if ( _rArguments.getLength() ) - { - ::rtl::OString sMessage( "OAttributeDispatcher::dispatch: found arguments, but can't handle arguments at all" ); - sMessage += "\n (URL: "; - sMessage += ::rtl::OString( _rURL.Complete.getStr(), _rURL.Complete.getLength(), RTL_TEXTENCODING_ASCII_US ); - sMessage += ")"; - OSL_FAIL( sMessage.getStr() ); - } -#endif - - if ( m_pMasterDispatcher ) - m_pMasterDispatcher->executeAttribute( m_nAttributeId, NULL ); - } - - //-------------------------------------------------------------------- - void OAttributeDispatcher::onAttributeStateChanged( AttributeId _nAttributeId, const AttributeState& /*_rState*/ ) - { - OSL_ENSURE( _nAttributeId == m_nAttributeId, "OAttributeDispatcher::onAttributeStateChanged: wrong attribute!" ); - (void)_nAttributeId; - - FeatureStateEvent aEvent( buildStatusEvent() ); - ::cppu::OInterfaceIteratorHelper aIter( getStatusListeners() ); - while ( aIter.hasMoreElements() ) - doNotify( static_cast< XStatusListener* >( aIter.next() ), aEvent ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/attributedispatcher.hxx b/forms/source/richtext/attributedispatcher.hxx deleted file mode 100644 index df52d3bff..000000000 --- a/forms/source/richtext/attributedispatcher.hxx +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef FORMS_SOURCE_RICHTEXT_ATTRIBUTEDISPATCHER_HXX -#define FORMS_SOURCE_RICHTEXT_ATTRIBUTEDISPATCHER_HXX - -#include "featuredispatcher.hxx" -#include "rtattributes.hxx" -#include "textattributelistener.hxx" - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= OAttributeDispatcher - //==================================================================== - class OAttributeDispatcher :public ORichTextFeatureDispatcher - ,public ITextAttributeListener - { - protected: - IMultiAttributeDispatcher* m_pMasterDispatcher; - AttributeId m_nAttributeId; - - public: - /** ctor - @param _nAttributeId - the id of the attribute which this instance is responsible for - @param _rURL - the URL of the feature which this instance is responsible for - @param _pMasterDispatcher - the dispatcher which can execute the given attribute - @param _pConverter - an instance which is able to convert between SfxPoolItems and XDispatch-Parameters - If not <NULL/>, the parametrized version of IMultiAttributeDispatcher::executeAttribute - will be used. - */ - OAttributeDispatcher( - EditView& _rView, - AttributeId _nAttributeId, - const ::com::sun::star::util::URL& _rURL, - IMultiAttributeDispatcher* _pMasterDispatcher - ); - - /// notifies a new attribute state - void notifyAttributeState( const AttributeState& _rState ) SAL_THROW (()); - - protected: - ~OAttributeDispatcher( ); - - protected: - // XDispatch - virtual void SAL_CALL dispatch( const ::com::sun::star::util::URL& URL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& Arguments ) throw (::com::sun::star::uno::RuntimeException); - - // ITextAttributeListener - virtual void onAttributeStateChanged( AttributeId _nAttributeId, const AttributeState& _rState ); - - // ORichTextFeatureDispatcher - virtual void disposing( ::osl::ClearableMutexGuard& _rClearBeforeNotify ); - - // ORichTextFeatureDispatcher - virtual ::com::sun::star::frame::FeatureStateEvent buildStatusEvent() const; - - // own overridables - virtual void fillFeatureEventFromAttributeState( ::com::sun::star::frame::FeatureStateEvent& _rEvent, const AttributeState& _rState ) const; - - protected: - /// notifies our feature state to one particular listener - void notifyState( - const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxControl, - const AttributeState& _rState - ) SAL_THROW (()); - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_ATTRIBUTEDISPATCHER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/clipboarddispatcher.cxx b/forms/source/richtext/clipboarddispatcher.cxx deleted file mode 100644 index 3d689ae79..000000000 --- a/forms/source/richtext/clipboarddispatcher.cxx +++ /dev/null @@ -1,210 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "clipboarddispatcher.hxx" -#include <editeng/editview.hxx> - -/** === begin UNO includes === **/ -#include <com/sun/star/lang/DisposedException.hpp> -/** === end UNO includes === **/ -#include <svtools/cliplistener.hxx> -#include <svtools/transfer.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::frame; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::beans; - - //==================================================================== - namespace - { - static URL createClipboardURL( OClipboardDispatcher::ClipboardFunc _eFunc ) - { - URL aURL; - switch ( _eFunc ) - { - case OClipboardDispatcher::eCut: - aURL.Complete = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:Cut" ) ); - break; - case OClipboardDispatcher::eCopy: - aURL.Complete = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:Copy" ) ); - break; - case OClipboardDispatcher::ePaste: - aURL.Complete = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:Paste" ) ); - break; - } - return aURL; - } - } - - //==================================================================== - //= OClipboardDispatcher - //==================================================================== - //-------------------------------------------------------------------- - OClipboardDispatcher::OClipboardDispatcher( EditView& _rView, ClipboardFunc _eFunc ) - :ORichTextFeatureDispatcher( _rView, createClipboardURL( _eFunc ) ) - ,m_eFunc( _eFunc ) - ,m_bLastKnownEnabled( sal_True ) - { - } - - //-------------------------------------------------------------------- - sal_Bool OClipboardDispatcher::implIsEnabled( ) const - { - sal_Bool bEnabled = sal_False; - switch ( m_eFunc ) - { - case eCut: - bEnabled = !getEditView()->IsReadOnly() && getEditView()->HasSelection(); - break; - - case eCopy: - bEnabled = getEditView()->HasSelection(); - break; - - case ePaste: - bEnabled = !getEditView()->IsReadOnly(); - break; - } - return bEnabled; - } - - //-------------------------------------------------------------------- - FeatureStateEvent OClipboardDispatcher::buildStatusEvent() const - { - FeatureStateEvent aEvent( ORichTextFeatureDispatcher::buildStatusEvent() ); - aEvent.IsEnabled = implIsEnabled(); - return aEvent; - } - - //-------------------------------------------------------------------- - void OClipboardDispatcher::invalidateFeatureState_Broadcast() - { - sal_Bool bEnabled = implIsEnabled(); - if ( m_bLastKnownEnabled == bEnabled ) - // nothing changed -> no notification - return; - m_bLastKnownEnabled = bEnabled; - - ORichTextFeatureDispatcher::invalidateFeatureState_Broadcast(); - } - - //-------------------------------------------------------------------- - void SAL_CALL OClipboardDispatcher::dispatch( const URL& /*_rURL*/, const Sequence< PropertyValue >& /*Arguments*/ ) throw (RuntimeException) - { - ::osl::MutexGuard aGuard( m_aMutex ); - if ( !getEditView() ) - throw DisposedException(); - - switch ( m_eFunc ) - { - case eCut: - getEditView()->Cut(); - break; - - case eCopy: - getEditView()->Copy(); - break; - - case ePaste: - getEditView()->Paste(); - break; - } - } - - //==================================================================== - //= OPasteClipboardDispatcher - //==================================================================== - //-------------------------------------------------------------------- - OPasteClipboardDispatcher::OPasteClipboardDispatcher( EditView& _rView ) - :OClipboardDispatcher( _rView, ePaste ) - ,m_pClipListener( NULL ) - ,m_bPastePossible( sal_False ) - { - m_pClipListener = new TransferableClipboardListener( LINK( this, OPasteClipboardDispatcher, OnClipboardChanged ) ); - m_pClipListener->acquire(); - m_pClipListener->AddRemoveListener( _rView.GetWindow(), sal_True ); - - // initial state - TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( _rView.GetWindow() ) ); - m_bPastePossible = ( aDataHelper.HasFormat( SOT_FORMAT_STRING ) || aDataHelper.HasFormat( SOT_FORMAT_RTF ) ); - } - - //-------------------------------------------------------------------- - OPasteClipboardDispatcher::~OPasteClipboardDispatcher() - { - if ( !isDisposed() ) - { - acquire(); - dispose(); - } - } - - //-------------------------------------------------------------------- - IMPL_LINK( OPasteClipboardDispatcher, OnClipboardChanged, TransferableDataHelper*, _pDataHelper ) - { - OSL_ENSURE( _pDataHelper, "OPasteClipboardDispatcher::OnClipboardChanged: ooops!" ); - m_bPastePossible = _pDataHelper->HasFormat( SOT_FORMAT_STRING ) - || _pDataHelper->HasFormat( SOT_FORMAT_RTF ); - - invalidate(); - - return 0L; - } - - //-------------------------------------------------------------------- - void OPasteClipboardDispatcher::disposing( ::osl::ClearableMutexGuard& _rClearBeforeNotify ) - { - OSL_ENSURE( getEditView() && getEditView()->GetWindow(), "OPasteClipboardDispatcher::disposing: EditView should not (yet) be disfunctional here!" ); - if ( getEditView() && getEditView()->GetWindow() && m_pClipListener ) - m_pClipListener->AddRemoveListener( getEditView()->GetWindow(), sal_False ); - m_pClipListener->release(); - m_pClipListener = NULL; - - OClipboardDispatcher::disposing( _rClearBeforeNotify ); - } - - //-------------------------------------------------------------------- - sal_Bool OPasteClipboardDispatcher::implIsEnabled( ) const - { - return m_bPastePossible && OClipboardDispatcher::implIsEnabled(); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/clipboarddispatcher.hxx b/forms/source/richtext/clipboarddispatcher.hxx deleted file mode 100644 index 8019dda3c..000000000 --- a/forms/source/richtext/clipboarddispatcher.hxx +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_RICHTEXT_CLIPBOARDDISPATCHER_HXX -#define FORMS_SOURCE_RICHTEXT_CLIPBOARDDISPATCHER_HXX - -#include "featuredispatcher.hxx" -#include <tools/link.hxx> - -class TransferableClipboardListener; -class TransferableDataHelper; -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= OClipboardDispatcher - //==================================================================== - class OClipboardDispatcher : public ORichTextFeatureDispatcher - { - public: - enum ClipboardFunc - { - eCut, - eCopy, - ePaste - }; - - private: - ClipboardFunc m_eFunc; - sal_Bool m_bLastKnownEnabled; - - public: - OClipboardDispatcher( EditView& _rView, ClipboardFunc _eFunc ); - - protected: - // XDispatch - virtual void SAL_CALL dispatch( const ::com::sun::star::util::URL& URL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& Arguments ) throw (::com::sun::star::uno::RuntimeException); - - // ORichTextFeatureDispatcher - virtual void invalidateFeatureState_Broadcast(); - virtual ::com::sun::star::frame::FeatureStateEvent - buildStatusEvent() const; - - protected: - /** determines whether our functionality is currently available - to be overridden for ePaste - */ - virtual sal_Bool implIsEnabled( ) const; - }; - - //==================================================================== - //= OPasteClipboardDispatcher - //==================================================================== - class OPasteClipboardDispatcher : public OClipboardDispatcher - { - private: - TransferableClipboardListener* m_pClipListener; - sal_Bool m_bPastePossible; - - public: - OPasteClipboardDispatcher( EditView& _rView ); - - protected: - ~OPasteClipboardDispatcher(); - - // OClipboardDispatcher - virtual sal_Bool implIsEnabled( ) const; - - // ORichTextFeatureDispatcher - virtual void disposing( ::osl::ClearableMutexGuard& _rClearBeforeNotify ); - - private: - DECL_LINK( OnClipboardChanged, TransferableDataHelper* ); - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_CLIPBOARDDISPATCHER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/featuredispatcher.cxx b/forms/source/richtext/featuredispatcher.cxx deleted file mode 100644 index 4bca9d792..000000000 --- a/forms/source/richtext/featuredispatcher.cxx +++ /dev/null @@ -1,160 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "featuredispatcher.hxx" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::frame; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - - //==================================================================== - //= ORichTextFeatureDispatcher - //==================================================================== - //-------------------------------------------------------------------- - ORichTextFeatureDispatcher::ORichTextFeatureDispatcher( EditView& _rView, const URL& _rURL ) - :m_aFeatureURL( _rURL ) - ,m_aStatusListeners( m_aMutex ) - ,m_pEditView( &_rView ) - ,m_bDisposed( false ) - { - } - - //-------------------------------------------------------------------- - ORichTextFeatureDispatcher::~ORichTextFeatureDispatcher( ) - { - if ( !m_bDisposed ) - { - acquire(); - dispose(); - } - } - - //-------------------------------------------------------------------- - void ORichTextFeatureDispatcher::dispose() - { - EventObject aEvent( *this ); - m_aStatusListeners.disposeAndClear( aEvent ); - - ::osl::ClearableMutexGuard aGuard( m_aMutex ); - m_bDisposed = true; - disposing( aGuard ); - } - - //-------------------------------------------------------------------- - void ORichTextFeatureDispatcher::disposing( ::osl::ClearableMutexGuard& /*_rClearBeforeNotify*/ ) - { - m_pEditView = NULL; - } - - //-------------------------------------------------------------------- - void SAL_CALL ORichTextFeatureDispatcher::addStatusListener( const Reference< XStatusListener >& _rxControl, const URL& _rURL ) throw (RuntimeException) - { - OSL_ENSURE( !m_bDisposed, "ORichTextFeatureDispatcher::addStatusListener: already disposed!" ); - if ( m_bDisposed ) - throw DisposedException(); - - OSL_ENSURE( _rURL.Complete == getFeatureURL().Complete, "ORichTextFeatureDispatcher::addStatusListener: invalid URL!" ); - if ( _rURL.Complete == getFeatureURL().Complete ) - if ( _rxControl.is() ) - { - m_aStatusListeners.addInterface( _rxControl ); - newStatusListener( _rxControl ); - } - } - - //-------------------------------------------------------------------- - void SAL_CALL ORichTextFeatureDispatcher::removeStatusListener( const Reference< XStatusListener >& _rxControl, const URL& /*_rURL*/ ) throw (RuntimeException) - { - m_aStatusListeners.removeInterface( _rxControl ); - } - - //-------------------------------------------------------------------- - void ORichTextFeatureDispatcher::invalidate() - { - invalidateFeatureState_Broadcast(); - } - - //-------------------------------------------------------------------- - FeatureStateEvent ORichTextFeatureDispatcher::buildStatusEvent() const - { - FeatureStateEvent aEvent; - aEvent.IsEnabled = sal_False; - aEvent.Source = *const_cast< ORichTextFeatureDispatcher* >( this ); - aEvent.FeatureURL = getFeatureURL(); - aEvent.Requery = sal_False; - return aEvent; - } - - //-------------------------------------------------------------------- - void ORichTextFeatureDispatcher::invalidateFeatureState_Broadcast() - { - FeatureStateEvent aEvent( buildStatusEvent() ); - ::cppu::OInterfaceIteratorHelper aIter( getStatusListeners() ); - while ( aIter.hasMoreElements() ) - doNotify( static_cast< XStatusListener* >( aIter.next() ), aEvent ); - } - - //-------------------------------------------------------------------- - void ORichTextFeatureDispatcher::newStatusListener( const Reference< XStatusListener >& _rxListener ) - { - doNotify( _rxListener, buildStatusEvent() ); - } - - //-------------------------------------------------------------------- - void ORichTextFeatureDispatcher::doNotify( const Reference< XStatusListener >& _rxListener, const FeatureStateEvent& _rEvent ) const SAL_THROW(()) - { - OSL_PRECOND( _rxListener.is(), "ORichTextFeatureDispatcher::doNotify: invalid listener!" ); - if ( _rxListener.is() ) - { - try - { - _rxListener->statusChanged( _rEvent ); - } - catch( const Exception& ) - { - OSL_FAIL( "ORichTextFeatureDispatcher::doNotify: caught an exception!" ); - } - } - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/featuredispatcher.hxx b/forms/source/richtext/featuredispatcher.hxx deleted file mode 100644 index 5fff974d7..000000000 --- a/forms/source/richtext/featuredispatcher.hxx +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_RICHTEXT_FEATUREDISPATCHER_HXX -#define FORMS_SOURCE_RICHTEXT_FEATUREDISPATCHER_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/frame/XDispatch.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -/** === end UNO includes === **/ -#include <cppuhelper/interfacecontainer.hxx> -#include <cppuhelper/implbase1.hxx> -#include <comphelper/broadcasthelper.hxx> - -class EditView; -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= ORichTextFeatureDispatcher - //==================================================================== - typedef ::cppu::WeakImplHelper1 < ::com::sun::star::frame::XDispatch - > ORichTextFeatureDispatcher_Base; - - class ORichTextFeatureDispatcher :public ::comphelper::OBaseMutex - ,public ORichTextFeatureDispatcher_Base - { - private: - ::com::sun::star::util::URL m_aFeatureURL; - ::cppu::OInterfaceContainerHelper m_aStatusListeners; - EditView* m_pEditView; - bool m_bDisposed; - - protected: - EditView* getEditView() { return m_pEditView; } - const EditView* getEditView() const { return m_pEditView; } - - protected: - inline const ::com::sun::star::util::URL& getFeatureURL() const { return m_aFeatureURL; } - inline ::cppu::OInterfaceContainerHelper& getStatusListeners() { return m_aStatusListeners; } - inline bool isDisposed() const { return m_bDisposed; } - inline void checkDisposed() const { if ( isDisposed() ) throw ::com::sun::star::lang::DisposedException(); } - - protected: - ORichTextFeatureDispatcher( EditView& _rView, const ::com::sun::star::util::URL& _rURL ); - ~ORichTextFeatureDispatcher( ); - - public: - /// clean up resources associated with this instance - void dispose(); - - // invalidate the feature, re-retrieve it's state, and broadcast changes, if necessary - void invalidate(); - - protected: - // overridables - virtual void newStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxListener ); - virtual void disposing( ::osl::ClearableMutexGuard& _rClearBeforeNotify ); - virtual void invalidateFeatureState_Broadcast(); - - // to be overridden, and filled with the info special do your derived class - virtual ::com::sun::star::frame::FeatureStateEvent - buildStatusEvent() const; - - void doNotify( - const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxListener, - const ::com::sun::star::frame::FeatureStateEvent& _rEvent - ) const SAL_THROW(()); - - protected: - // XDispatch - virtual void SAL_CALL addStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxControl, const ::com::sun::star::util::URL& _rURL ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxControl, const ::com::sun::star::util::URL& _rURL ) throw (::com::sun::star::uno::RuntimeException); - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_FEATUREDISPATCHER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/parametrizedattributedispatcher.cxx b/forms/source/richtext/parametrizedattributedispatcher.cxx deleted file mode 100644 index 45ff2e5ab..000000000 --- a/forms/source/richtext/parametrizedattributedispatcher.cxx +++ /dev/null @@ -1,144 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "parametrizedattributedispatcher.hxx" -#include <editeng/editview.hxx> -#include <svl/itemset.hxx> -#include <svl/itempool.hxx> - -#include <svx/svxids.hrc> -#include <sfx2/sfxuno.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/beans/PropertyValue.hpp> - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::frame; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::beans; - - //==================================================================== - //= OParametrizedAttributeDispatcher - //==================================================================== - //-------------------------------------------------------------------- - OParametrizedAttributeDispatcher::OParametrizedAttributeDispatcher( EditView& _rView, AttributeId _nAttributeId, const URL& _rURL, IMultiAttributeDispatcher* _pMasterDispatcher ) - :OAttributeDispatcher( _rView, _nAttributeId, _rURL, _pMasterDispatcher ) - { - } - - //-------------------------------------------------------------------- - OParametrizedAttributeDispatcher::~OParametrizedAttributeDispatcher() - { - acquire(); - dispose(); - } - - //-------------------------------------------------------------------- - namespace - { - static SfxSlotId lcl_normalizeLatinScriptSlotId( SfxSlotId _nSlotId ) - { - switch ( _nSlotId ) - { - case SID_ATTR_CHAR_LATIN_FONT: return SID_ATTR_CHAR_FONT; - case SID_ATTR_CHAR_LATIN_LANGUAGE: return SID_ATTR_CHAR_LANGUAGE; - case SID_ATTR_CHAR_LATIN_POSTURE: return SID_ATTR_CHAR_POSTURE; - case SID_ATTR_CHAR_LATIN_WEIGHT: return SID_ATTR_CHAR_WEIGHT; - case SID_ATTR_CHAR_LATIN_FONTHEIGHT:return SID_ATTR_CHAR_FONTHEIGHT; - } - return _nSlotId; - } - } - - //-------------------------------------------------------------------- - void OParametrizedAttributeDispatcher::fillFeatureEventFromAttributeState( FeatureStateEvent& _rEvent, const AttributeState& _rState ) const - { - OSL_ENSURE( getEditView(), "OParametrizedAttributeDispatcher::notifyState: already disposed!" ); - if ( !getEditView() ) - return; - - SfxItemSet aEmptySet( const_cast< EditView* >( getEditView() )->GetEmptyItemSet() ); - Sequence< PropertyValue > aUnoStateDescription; - if ( _rState.getItem() ) - { - aEmptySet.Put( *_rState.getItem() ); - SfxSlotId nSlotId = aEmptySet.GetPool()->GetSlotId( _rState.getItem()->Which() ); - TransformItems( nSlotId, aEmptySet, aUnoStateDescription ); - _rEvent.State <<= aUnoStateDescription; - } - else - OAttributeDispatcher::fillFeatureEventFromAttributeState( _rEvent, _rState ); - } - - //-------------------------------------------------------------------- - const SfxPoolItem* OParametrizedAttributeDispatcher::convertDispatchArgsToItem( const Sequence< PropertyValue >& _rArguments ) - { - // get the real slot id. This may differ from our attribute id: for instance, both - // SID_ATTR_CHAR_HEIGHT and SID_ATTR_CHAR_LATIN_HEIGHT are mapped to the same which id - SfxSlotId nSlotId = lcl_normalizeLatinScriptSlotId( (SfxSlotId)m_nAttributeId ); - - SfxAllItemSet aParameterSet( getEditView()->GetEmptyItemSet() ); - TransformParameters( nSlotId, _rArguments, aParameterSet ); - - const SfxPoolItem* pArgument = NULL; - if ( aParameterSet.Count() ) - { - OSL_ENSURE( aParameterSet.Count() == 1, "OParametrizedAttributeDispatcher::convertDispatchArgsToItem: Arguments which form more than 1 item? How this?" ); - WhichId nAttributeWhich = aParameterSet.GetPool()->GetWhich( nSlotId ); - pArgument = aParameterSet.GetItem( nAttributeWhich ); - OSL_ENSURE( pArgument, "OParametrizedAttributeDispatcher::convertDispatchArgsToItem: suspicious: there were arguments, but they're not for my slot!" ); - } - - return pArgument; - } - - //-------------------------------------------------------------------- - void SAL_CALL OParametrizedAttributeDispatcher::dispatch( const URL& _rURL, const Sequence< PropertyValue >& _rArguments ) throw (RuntimeException) - { - ::osl::MutexGuard aGuard( m_aMutex ); - OSL_ENSURE( _rURL.Complete == getFeatureURL().Complete, "OParametrizedAttributeDispatcher::dispatch: invalid URL!" ); - (void)_rURL; - if ( m_pMasterDispatcher ) - { - const SfxPoolItem* pConvertedArgument = convertDispatchArgsToItem( _rArguments ); - m_pMasterDispatcher->executeAttribute( m_nAttributeId, pConvertedArgument ); - } - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/parametrizedattributedispatcher.hxx b/forms/source/richtext/parametrizedattributedispatcher.hxx deleted file mode 100644 index f5f91bd81..000000000 --- a/forms/source/richtext/parametrizedattributedispatcher.hxx +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_RICHTEXT_PARAMETRIZEDATTRIBUTEDISPATCHER_HXX -#define FORMS_SOURCE_RICHTEXT_PARAMETRIZEDATTRIBUTEDISPATCHER_HXX - -#include "attributedispatcher.hxx" - -class SfxPoolItem; -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= OParametrizedAttributeDispatcher - //==================================================================== - class OParametrizedAttributeDispatcher :public OAttributeDispatcher - { - public: - OParametrizedAttributeDispatcher( - EditView& _rView, - AttributeId _nAttributeId, - const ::com::sun::star::util::URL& _rURL, - IMultiAttributeDispatcher* _pMasterDispatcher - ); - - protected: - ~OParametrizedAttributeDispatcher(); - - // XDispatch - virtual void SAL_CALL dispatch( const ::com::sun::star::util::URL& URL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& Arguments ) throw (::com::sun::star::uno::RuntimeException); - - // OAttributeDispatcher - virtual void fillFeatureEventFromAttributeState( ::com::sun::star::frame::FeatureStateEvent& _rEvent, const AttributeState& _rState ) const; - - protected: - // own overridables - /** convert the arguments as got in a XDispatch::dispatch call into an SfxPoolItem, which can - be used with a IMultiAttributeDispatcher::executeAttribute - */ - virtual const SfxPoolItem* convertDispatchArgsToItem( - const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rArguments ); - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_PARAMETRIZEDATTRIBUTEDISPATCHER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextcontrol.cxx b/forms/source/richtext/richtextcontrol.cxx deleted file mode 100644 index 505420dda..000000000 --- a/forms/source/richtext/richtextcontrol.cxx +++ /dev/null @@ -1,766 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "richtextcontrol.hxx" -#include "frm_module.hxx" -#include "property.hrc" -#include "services.hxx" - -#include "richtextmodel.hxx" -#include "richtextvclcontrol.hxx" -#include "clipboarddispatcher.hxx" -#include "parametrizedattributedispatcher.hxx" -#include "specialdispatchers.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/awt/PosSize.hpp> -/** === end UNO includes === **/ - -#include <toolkit/helper/vclunohelper.hxx> -#include <tools/diagnose_ex.h> -#include <vcl/svapp.hxx> - -#include <svx/svxids.hrc> -#include <editeng/editview.hxx> -#include <svl/itemset.hxx> -#include <svl/itempool.hxx> -#include <sfx2/msgpool.hxx> - -//-------------------------------------------------------------------------- -extern "C" void SAL_CALL createRegistryInfo_ORichTextControl() -{ - static ::frm::OMultiInstanceAutoRegistration< ::frm::ORichTextControl > aAutoRegistration; -} - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::frame; - -#define FORWARD_TO_PEER_1( unoInterface, method, param1 ) \ - Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ - if ( xTypedPeer.is() ) \ - { \ - xTypedPeer->method( param1 ); \ - } - -#define FORWARD_TO_PEER_1_RET( returnType, unoInterface, method, param1 ) \ - returnType aReturn; \ - Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ - if ( xTypedPeer.is() ) \ - { \ - aReturn = xTypedPeer->method( param1 ); \ - } \ - return aReturn; - -#define FORWARD_TO_PEER_3( unoInterface, method, param1, param2, param3 ) \ - Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ - if ( xTypedPeer.is() ) \ - { \ - xTypedPeer->method( param1, param2, param3 ); \ - } - -#define FORWARD_TO_PEER_3_RET( returnType, unoInterface, method, param1, param2, param3 ) \ - returnType aReturn; \ - Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ - if ( xTypedPeer.is() ) \ - { \ - aReturn = xTypedPeer->method( param1, param2, param3 ); \ - } \ - return aReturn; - - //================================================================== - // ORichTextControl - //================================================================== - DBG_NAME( ORichTextControl ) - //------------------------------------------------------------------ - ORichTextControl::ORichTextControl( const Reference< XMultiServiceFactory >& _rxORB ) - :UnoEditControl( _rxORB ) - { - DBG_CTOR( ORichTextControl, NULL ); - } - - //------------------------------------------------------------------ - ORichTextControl::~ORichTextControl() - { - DBG_DTOR( ORichTextControl, NULL ); - } - - //------------------------------------------------------------------ - IMPLEMENT_FORWARD_XTYPEPROVIDER2( ORichTextControl, UnoEditControl, ORichTextControl_Base ) - - //------------------------------------------------------------------ - Any SAL_CALL ORichTextControl::queryAggregation( const Type& _rType ) throw ( RuntimeException ) - { - Any aReturn = UnoEditControl::queryAggregation( _rType ); - - if ( !aReturn.hasValue() ) - aReturn = ORichTextControl_Base::queryInterface( _rType ); - - return aReturn; - } - - //------------------------------------------------------------------ - namespace - { - //.............................................................. - static void implAdjustTriStateFlag( const Reference< XPropertySet >& _rxProps, const ::rtl::OUString& _rPropertyName, - WinBits& _rAllBits, WinBits _nPositiveFlag, WinBits nNegativeFlag ) - { - sal_Bool bFlagValue = sal_False; - if ( _rxProps->getPropertyValue( _rPropertyName ) >>= bFlagValue ) - _rAllBits |= ( bFlagValue ? _nPositiveFlag : nNegativeFlag ); - } - - //.............................................................. - static void implAdjustTwoStateFlag( const Any& _rValue, WinBits& _rAllBits, WinBits _nFlag, bool _bInvert = false ) - { - sal_Bool bFlagValue = sal_False; - if ( _rValue >>= bFlagValue ) - { - if ( _bInvert ) - bFlagValue = !bFlagValue; - if ( bFlagValue ) - _rAllBits |= _nFlag; - else - _rAllBits &= ~_nFlag; - } - } - - //.............................................................. - static void implAdjustTwoStateFlag( const Reference< XPropertySet >& _rxProps, const ::rtl::OUString& _rPropertyName, - WinBits& _rAllBits, WinBits _nFlag, bool _bInvert = false ) - { - implAdjustTwoStateFlag( _rxProps->getPropertyValue( _rPropertyName ), _rAllBits, _nFlag, _bInvert ); - } - - //.............................................................. - static void adjustTwoStateWinBit( Window* _pWindow, const Any& _rValue, WinBits _nFlag, bool _bInvert = false ) - { - WinBits nBits = _pWindow->GetStyle(); - implAdjustTwoStateFlag( _rValue, nBits, _nFlag, _bInvert ); - _pWindow->SetStyle( nBits ); - } - - //.............................................................. - static WinBits getWinBits( const Reference< XControlModel >& _rxModel, WinBits nBaseBits = 0 ) - { - WinBits nBits = nBaseBits; - try - { - Reference< XPropertySet > xProps( _rxModel, UNO_QUERY ); - if ( xProps.is() ) - { - sal_Int16 nBorder = 0; - xProps->getPropertyValue( PROPERTY_BORDER ) >>= nBorder; - if ( nBorder ) - nBits |= WB_BORDER; - - implAdjustTriStateFlag( xProps, PROPERTY_TABSTOP, nBits, WB_TABSTOP, WB_NOTABSTOP ); - implAdjustTwoStateFlag( xProps, PROPERTY_HSCROLL, nBits, WB_HSCROLL ); - implAdjustTwoStateFlag( xProps, PROPERTY_VSCROLL, nBits, WB_VSCROLL ); - implAdjustTwoStateFlag( xProps, PROPERTY_HARDLINEBREAKS, nBits, WB_WORDBREAK, true ); - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return nBits; - } - } - - //------------------------------------------------------------------ - void SAL_CALL ORichTextControl::createPeer( const Reference< XToolkit >& _rToolkit, const Reference< XWindowPeer >& _rParentPeer ) throw( RuntimeException ) - { - sal_Bool bReallyActAsRichText = sal_False; - try - { - Reference< XPropertySet > xModelProps( getModel(), UNO_QUERY_THROW ); - xModelProps->getPropertyValue( PROPERTY_RICH_TEXT ) >>= bReallyActAsRichText; - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - - if ( !bReallyActAsRichText ) - { - UnoEditControl::createPeer( _rToolkit, _rParentPeer ); - OControl::initFormControlPeer( getPeer() ); - return; - } - - SolarMutexGuard aGuard; - - if (!getPeer().is()) - { - mbCreatingPeer = sal_True; - - // determine the VLC window for the parent - Window* pParentWin = NULL; - if ( _rParentPeer.is() ) - { - VCLXWindow* pParentXWin = VCLXWindow::GetImplementation( _rParentPeer ); - if ( pParentXWin ) - pParentWin = pParentXWin->GetWindow(); - DBG_ASSERT( pParentWin, "ORichTextControl::createPeer: could not obtain the VCL-level parent window!" ); - } - - // create the peer - Reference< XControlModel > xModel( getModel() ); - ORichTextPeer* pPeer = ORichTextPeer::Create( xModel, pParentWin, getWinBits( xModel ) ); - DBG_ASSERT( pPeer, "ORichTextControl::createPeer: invalid peer returned!" ); - if ( pPeer ) - { - // by definition, the returned component is aquired once - pPeer->release(); - - // announce the peer to the base class - setPeer( pPeer ); - - // initialize ourself (and thus the peer) with the model properties - updateFromModel(); - - Reference< XView > xPeerView( getPeer(), UNO_QUERY ); - if ( xPeerView.is() ) - { - xPeerView->setZoom( maComponentInfos.nZoomX, maComponentInfos.nZoomY ); - xPeerView->setGraphics( mxGraphics ); - } - - // a lot of initial settings from our component infos - setPosSize( maComponentInfos.nX, maComponentInfos.nY, maComponentInfos.nWidth, maComponentInfos.nHeight, PosSize::POSSIZE ); - - pPeer->setVisible ( maComponentInfos.bVisible && !mbDesignMode ); - pPeer->setEnable ( maComponentInfos.bEnable ); - pPeer->setDesignMode( mbDesignMode ); - - peerCreated(); - } - - mbCreatingPeer = sal_False; - - OControl::initFormControlPeer( getPeer() ); - } - } - - //------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ORichTextControl::getImplementationName() throw( RuntimeException ) - { - return getImplementationName_Static(); - } - - //------------------------------------------------------------------ - Sequence< ::rtl::OUString > SAL_CALL ORichTextControl::getSupportedServiceNames() throw( RuntimeException ) - { - return getSupportedServiceNames_Static(); - } - - //------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ORichTextControl::getImplementationName_Static() - { - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.form.ORichTextControl" ) ); - } - - //------------------------------------------------------------------ - Sequence< ::rtl::OUString > SAL_CALL ORichTextControl::getSupportedServiceNames_Static() - { - Sequence< ::rtl::OUString > aServices( 3 ); - aServices[ 0 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControl" ) ); - aServices[ 1 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlEdit" ) ); - aServices[ 2 ] = FRM_SUN_CONTROL_RICHTEXTCONTROL; - return aServices; - } - - //------------------------------------------------------------------ - Reference< XInterface > SAL_CALL ORichTextControl::Create( const Reference< XMultiServiceFactory >& _rxFactory ) - { - return *( new ORichTextControl( _rxFactory ) ); - } - - //-------------------------------------------------------------------- - Reference< XDispatch > SAL_CALL ORichTextControl::queryDispatch( const ::com::sun::star::util::URL& _rURL, const ::rtl::OUString& _rTargetFrameName, sal_Int32 _nSearchFlags ) throw (RuntimeException) - { - FORWARD_TO_PEER_3_RET( Reference< XDispatch >, XDispatchProvider, queryDispatch, _rURL, _rTargetFrameName, _nSearchFlags ); - } - - //-------------------------------------------------------------------- - Sequence< Reference< XDispatch > > SAL_CALL ORichTextControl::queryDispatches( const Sequence< DispatchDescriptor >& _rRequests ) throw (RuntimeException) - { - FORWARD_TO_PEER_1_RET( Sequence< Reference< XDispatch > >, XDispatchProvider, queryDispatches, _rRequests ); - } - - //-------------------------------------------------------------------- - sal_Bool ORichTextControl::requiresNewPeer( const ::rtl::OUString& _rPropertyName ) const - { - return UnoControl::requiresNewPeer( _rPropertyName ) || _rPropertyName.equals( PROPERTY_RICH_TEXT ); - } - - //================================================================== - // ORichTextPeer - //================================================================== - DBG_NAME( ORichTextPeer ) - //------------------------------------------------------------------ - ORichTextPeer* ORichTextPeer::Create( const Reference< XControlModel >& _rxModel, Window* _pParentWindow, WinBits _nStyle ) - { - DBG_TESTSOLARMUTEX(); - - // the EditEngine of the model - RichTextEngine* pEngine = ORichTextModel::getEditEngine( _rxModel ); - OSL_ENSURE( pEngine, "ORichTextPeer::Create: could not obtaine the edit engine from the model!" ); - if ( !pEngine ) - return NULL; - - // the peer itself - ORichTextPeer* pPeer = new ORichTextPeer; - pPeer->acquire(); // by definition, the returned object is aquired once - - // the VCL control for the peer - RichTextControl* pRichTextControl = new RichTextControl( pEngine, _pParentWindow, _nStyle, NULL, pPeer ); - - // some knittings - pRichTextControl->SetComponentInterface( pPeer ); - - // outta here - return pPeer; - } - - //------------------------------------------------------------------ - ORichTextPeer::ORichTextPeer() - { - DBG_CTOR( ORichTextPeer, NULL ); - } - - //------------------------------------------------------------------ - ORichTextPeer::~ORichTextPeer() - { - DBG_DTOR( ORichTextPeer, NULL ); - } - - //------------------------------------------------------------------ - void ORichTextPeer::dispose( ) throw(RuntimeException) - { - { - SolarMutexGuard aGuard; - RichTextControl* pRichTextControl = static_cast< RichTextControl* >( GetWindow() ); - - if ( pRichTextControl ) - { - for ( AttributeDispatchers::iterator aDisposeLoop = m_aDispatchers.begin(); - aDisposeLoop != m_aDispatchers.end(); - ++aDisposeLoop - ) - { - pRichTextControl->disableAttributeNotification( aDisposeLoop->first ); - aDisposeLoop->second->dispose(); - } - } - - AttributeDispatchers aEmpty; - m_aDispatchers.swap( aEmpty ); - } - - VCLXWindow::dispose(); - } - - //-------------------------------------------------------------------- - void SAL_CALL ORichTextPeer::draw( sal_Int32 _nX, sal_Int32 _nY ) throw(::com::sun::star::uno::RuntimeException) - { - SolarMutexGuard aGuard; - - RichTextControl* pControl = static_cast< RichTextControl* >( GetWindow() ); - if ( !pControl ) - return; - - OutputDevice* pTargetDevice = VCLUnoHelper::GetOutputDevice( getGraphics() ); - OSL_ENSURE( pTargetDevice != NULL, "ORichTextPeer::draw: no graphics -> no drawing!" ); - if ( !pTargetDevice ) - return; - - ::Size aSize = pControl->GetSizePixel(); - const MapUnit eTargetUnit = pTargetDevice->GetMapMode().GetMapUnit(); - if ( eTargetUnit != MAP_PIXEL ) - aSize = pControl->PixelToLogic( aSize, eTargetUnit ); - - ::Point aPos( _nX, _nY ); - // the XView::draw API talks about pixels, always ... - if ( eTargetUnit != MAP_PIXEL ) - aPos = pTargetDevice->PixelToLogic( aPos ); - - pControl->Draw( pTargetDevice, aPos, aSize, WINDOW_DRAW_NOCONTROLS ); - } - - //-------------------------------------------------------------------- - void SAL_CALL ORichTextPeer::setProperty( const ::rtl::OUString& _rPropertyName, const Any& _rValue ) throw (RuntimeException) - { - if ( !GetWindow() ) - { - VCLXWindow::setProperty( _rPropertyName, _rValue ); - return; - } - - if ( _rPropertyName.equals( PROPERTY_BACKGROUNDCOLOR ) ) - { - RichTextControl* pControl = static_cast< RichTextControl* >( GetWindow() ); - if ( !_rValue.hasValue() ) - { - pControl->SetBackgroundColor( ); - } - else - { - sal_Int32 nColor = COL_TRANSPARENT; - _rValue >>= nColor; - pControl->SetBackgroundColor( Color( nColor ) ); - } - } - else if ( _rPropertyName.equals( PROPERTY_HSCROLL ) ) - { - adjustTwoStateWinBit( GetWindow(), _rValue, WB_HSCROLL ); - } - else if ( _rPropertyName.equals( PROPERTY_VSCROLL ) ) - { - adjustTwoStateWinBit( GetWindow(), _rValue, WB_VSCROLL ); - } - else if ( _rPropertyName.equals( PROPERTY_HARDLINEBREAKS ) ) - { - adjustTwoStateWinBit( GetWindow(), _rValue, WB_WORDBREAK, true ); - } - else if ( _rPropertyName.equals( PROPERTY_READONLY ) ) - { - RichTextControl* pControl = static_cast< RichTextControl* >( GetWindow() ); - sal_Bool bReadOnly( pControl->IsReadOnly() ); - OSL_VERIFY( _rValue >>= bReadOnly ); - pControl->SetReadOnly( bReadOnly ); - - // update the dispatchers - for ( AttributeDispatchers::iterator aDispatcherLoop = m_aDispatchers.begin(); - aDispatcherLoop != m_aDispatchers.end(); - ++aDispatcherLoop - ) - { - aDispatcherLoop->second->invalidate(); - } - } - else if ( _rPropertyName.equals( PROPERTY_HIDEINACTIVESELECTION ) ) - { - RichTextControl* pRichTextControl = static_cast< RichTextControl* >( GetWindow() ); - sal_Bool bHide = pRichTextControl->GetHideInactiveSelection(); - OSL_VERIFY( _rValue >>= bHide ); - pRichTextControl->SetHideInactiveSelection( bHide ); - } - else - VCLXWindow::setProperty( _rPropertyName, _rValue ); - } - - //------------------------------------------------------------------ - IMPLEMENT_FORWARD_XINTERFACE2( ORichTextPeer, VCLXWindow, ORichTextPeer_Base ) - - //------------------------------------------------------------------ - IMPLEMENT_FORWARD_XTYPEPROVIDER2( ORichTextPeer, VCLXWindow, ORichTextPeer_Base ) - - //-------------------------------------------------------------------- - namespace - { - static SfxSlotId lcl_translateConflictingSlot( SfxSlotId _nIDFromPool ) - { - // HACK HACK HACK - // unfortunately, some of our applications have some conflicting slots, - // i.e. slots which have the same UNO name as an existing other (common) - // slot. - // For instance, both the slots SID_SET_SUPER_SCRIPT (from SVX) and FN_SET_SUPER_SCRIPT - // (from SW) have the UNO name "SuperScript". - // Now, if the controls lives in a text document, and asks the SfxSlotPool for - // the id belonging to "SuperScript", it gets the FN_SET_SUPER_SCRIPT - which - // is completely unknown to the EditEngine. - // So, we need to translate such conflicting ids. - // - // Note that the real solution would be to fix the applications to - // *not* define conflicting slots. Alternatively, if SFX would provide a slot pool - // which is *static* (i.e. independent on the active application), then we - // would also never encounter such a conflict. - SfxSlotId nReturn( _nIDFromPool ); - switch ( _nIDFromPool ) - { - case 20411: /* FM_SET_SUPER_SCRIPT, originating in SW */ - nReturn = SID_SET_SUPER_SCRIPT; - break; - case 20412: /* FN_SET_SUB_SCRIPT, originating in SW */ - nReturn = SID_SET_SUB_SCRIPT; - break; - } - return nReturn; - } - } - - //-------------------------------------------------------------------- - ORichTextPeer::SingleAttributeDispatcher ORichTextPeer::implCreateDispatcher( SfxSlotId _nSlotId, const ::com::sun::star::util::URL& _rURL ) - { - RichTextControl* pRichTextControl = static_cast< RichTextControl* >( GetWindow() ); - OSL_PRECOND( pRichTextControl, "ORichTextPeer::implCreateDispatcher: invalid window!" ); - if ( !pRichTextControl ) - return SingleAttributeDispatcher( NULL ); - - ORichTextFeatureDispatcher* pDispatcher = NULL; - OAttributeDispatcher* pAttributeDispatcher = NULL; - switch ( _nSlotId ) - { - case SID_CUT: - pDispatcher = new OClipboardDispatcher( pRichTextControl->getView(), OClipboardDispatcher::eCut ); - break; - - case SID_COPY: - pDispatcher = new OClipboardDispatcher( pRichTextControl->getView(), OClipboardDispatcher::eCopy ); - break; - - case SID_PASTE: - pDispatcher = new OPasteClipboardDispatcher( pRichTextControl->getView() ); - break; - - case SID_SELECTALL: - pDispatcher = new OSelectAllDispatcher( pRichTextControl->getView(), _rURL ); - break; - - case SID_ATTR_PARA_LEFT_TO_RIGHT: - case SID_ATTR_PARA_RIGHT_TO_LEFT: - pAttributeDispatcher = new OParagraphDirectionDispatcher( pRichTextControl->getView(), _nSlotId, _rURL, pRichTextControl ); - break; - - case SID_TEXTDIRECTION_TOP_TO_BOTTOM: - case SID_TEXTDIRECTION_LEFT_TO_RIGHT: - pDispatcher = new OTextDirectionDispatcher( pRichTextControl->getView(), _rURL ); - break; - - case SID_ATTR_PARA_HANGPUNCTUATION: - case SID_ATTR_PARA_FORBIDDEN_RULES: - case SID_ATTR_PARA_SCRIPTSPACE: - pAttributeDispatcher = new OAsianFontLayoutDispatcher( pRichTextControl->getView(), _nSlotId, _rURL, pRichTextControl ); - break; - - default: - { - // is it a supported slot? - bool bSupportedSlot = false; - if ( !bSupportedSlot ) - { - const SfxItemPool& rPool = *pRichTextControl->getView().GetEmptyItemSet().GetPool(); - bSupportedSlot = rPool.IsInRange( rPool.GetWhich( _nSlotId ) ); - } - if ( !bSupportedSlot ) - bSupportedSlot = RichTextControl::isMappableSlot( _nSlotId ); - - if ( bSupportedSlot ) - { // it's really a slot which is supported by the EditEngine - - bool bNeedParametrizedDispatcher = true; - if ( ( _nSlotId == SID_ATTR_CHAR_POSTURE ) - || ( _nSlotId == SID_ATTR_CHAR_CJK_POSTURE ) - || ( _nSlotId == SID_ATTR_CHAR_CTL_POSTURE ) - || ( _nSlotId == SID_ATTR_CHAR_LATIN_POSTURE ) - || ( _nSlotId == SID_ATTR_CHAR_WEIGHT ) - || ( _nSlotId == SID_ATTR_CHAR_CJK_WEIGHT ) - || ( _nSlotId == SID_ATTR_CHAR_CTL_WEIGHT ) - || ( _nSlotId == SID_ATTR_CHAR_LATIN_WEIGHT ) - || ( _nSlotId == SID_ATTR_CHAR_LANGUAGE ) - || ( _nSlotId == SID_ATTR_CHAR_CJK_LANGUAGE ) - || ( _nSlotId == SID_ATTR_CHAR_CTL_LANGUAGE ) - || ( _nSlotId == SID_ATTR_CHAR_LATIN_LANGUAGE ) - || ( _nSlotId == SID_ATTR_CHAR_CONTOUR ) - || ( _nSlotId == SID_ATTR_CHAR_SHADOWED ) - || ( _nSlotId == SID_ATTR_CHAR_WORDLINEMODE ) - || ( _nSlotId == SID_ATTR_CHAR_COLOR ) - || ( _nSlotId == SID_ATTR_CHAR_RELIEF ) - || ( _nSlotId == SID_ATTR_CHAR_KERNING ) - || ( _nSlotId == SID_ATTR_CHAR_AUTOKERN ) - || ( _nSlotId == SID_ATTR_CHAR_SCALEWIDTH ) - ) - { - bNeedParametrizedDispatcher = true; - } - else if ( ( _nSlotId == SID_ATTR_PARA_HANGPUNCTUATION ) - || ( _nSlotId == SID_ATTR_PARA_FORBIDDEN_RULES ) - || ( _nSlotId == SID_ATTR_PARA_SCRIPTSPACE ) - ) - { - bNeedParametrizedDispatcher = false; - } - else - { - SfxSlotPool& rSlotPool = SfxSlotPool::GetSlotPool( NULL ); - const SfxSlot* pSlot = rSlotPool.GetSlot( _nSlotId ); - const SfxType* pType = pSlot ? pSlot->GetType() : NULL; - if ( pType ) - { - bNeedParametrizedDispatcher = ( pType->nAttribs > 0 ); - } - } - - if ( bNeedParametrizedDispatcher ) - { - #if OSL_DEBUG_LEVEL > 0 - ::rtl::OString sTrace( "ORichTextPeer::implCreateDispatcher: creating *parametrized* dispatcher for " ); - sTrace += ::rtl::OString( _rURL.Complete.getStr(), _rURL.Complete.getLength(), RTL_TEXTENCODING_ASCII_US ); - OSL_TRACE( "%s", sTrace.getStr() ); - #endif - pAttributeDispatcher = new OParametrizedAttributeDispatcher( pRichTextControl->getView(), _nSlotId, _rURL, pRichTextControl ); - } - else - { - #if OSL_DEBUG_LEVEL > 0 - ::rtl::OString sTrace( "ORichTextPeer::implCreateDispatcher: creating *normal* dispatcher for " ); - sTrace += ::rtl::OString( _rURL.Complete.getStr(), _rURL.Complete.getLength(), RTL_TEXTENCODING_ASCII_US ); - OSL_TRACE( "%s", sTrace.getStr() ); - #endif - pAttributeDispatcher = new OAttributeDispatcher( pRichTextControl->getView(), _nSlotId, _rURL, pRichTextControl ); - } - } - #if OSL_DEBUG_LEVEL > 0 - else - { - ::rtl::OString sTrace( "ORichTextPeer::implCreateDispatcher: not creating dispatcher (unsupported slot) for " ); - sTrace += ::rtl::OString( _rURL.Complete.getStr(), _rURL.Complete.getLength(), RTL_TEXTENCODING_ASCII_US ); - OSL_TRACE( "%s", sTrace.getStr() ); - } - #endif - } - break; - } - - SingleAttributeDispatcher xDispatcher( pDispatcher ); - if ( pAttributeDispatcher ) - { - xDispatcher = SingleAttributeDispatcher( pAttributeDispatcher ); - pRichTextControl->enableAttributeNotification( _nSlotId, pAttributeDispatcher ); - } - - return xDispatcher; - } - - //-------------------------------------------------------------------- - namespace - { - SfxSlotId lcl_getSlotFromUnoName( SfxSlotPool& _rSlotPool, const ::rtl::OUString& _rUnoSlotName ) - { - const SfxSlot* pSlot = _rSlotPool.GetUnoSlot( _rUnoSlotName ); - if ( pSlot ) - { - // okay, there's a slot with the given UNO name - return lcl_translateConflictingSlot( pSlot->GetSlotId() ); - } - - // some hard-coded slots, which do not have a UNO name at SFX level, but which - // we nevertheless need to transport via UNO mechanisms, so we need a name - if ( _rUnoSlotName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "AllowHangingPunctuation" ) ) ) - return SID_ATTR_PARA_HANGPUNCTUATION; - if ( _rUnoSlotName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "ApplyForbiddenCharacterRules" ) ) ) - return SID_ATTR_PARA_FORBIDDEN_RULES; - if ( _rUnoSlotName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "UseScriptSpacing" ) ) ) - return SID_ATTR_PARA_SCRIPTSPACE; - - OSL_ENSURE( pSlot, "lcl_getSlotFromUnoName: unknown UNO slot name!" ); - return 0; - } - } - - //-------------------------------------------------------------------- - Reference< XDispatch > SAL_CALL ORichTextPeer::queryDispatch( const ::com::sun::star::util::URL& _rURL, const ::rtl::OUString& /*_rTargetFrameName*/, sal_Int32 /*_nSearchFlags*/ ) throw (RuntimeException) - { - Reference< XDispatch > xReturn; - if ( !GetWindow() ) - { - OSL_FAIL( "ORichTextPeer::queryDispatch: already disposed?" ); - return xReturn; - } - - // is it an UNO slot? - ::rtl::OUString sUnoProtocolPrefix( RTL_CONSTASCII_USTRINGPARAM( ".uno:" ) ); - if ( 0 == _rURL.Complete.compareTo( sUnoProtocolPrefix, sUnoProtocolPrefix.getLength() ) ) - { - ::rtl::OUString sUnoSlotName = _rURL.Complete.copy( sUnoProtocolPrefix.getLength() ); - SfxSlotId nSlotId = lcl_getSlotFromUnoName( SfxSlotPool::GetSlotPool( NULL ), sUnoSlotName ); - if ( nSlotId > 0 ) - { - // do we already have a dispatcher for this? - AttributeDispatchers::const_iterator aDispatcherPos = m_aDispatchers.find( nSlotId ); - if ( aDispatcherPos == m_aDispatchers.end() ) - { - SingleAttributeDispatcher pDispatcher = implCreateDispatcher( nSlotId, _rURL ); - if ( pDispatcher.is() ) - { - aDispatcherPos = m_aDispatchers.insert( AttributeDispatchers::value_type( nSlotId, pDispatcher ) ).first; - } - } - - if ( aDispatcherPos != m_aDispatchers.end() ) - xReturn = aDispatcherPos->second.getRef(); - } - } - - return xReturn; - } - - //-------------------------------------------------------------------- - Sequence< Reference< XDispatch > > SAL_CALL ORichTextPeer::queryDispatches( const Sequence< DispatchDescriptor >& _rRequests ) throw (RuntimeException) - { - Sequence< Reference< XDispatch > > aReturn( _rRequests.getLength() ); - Reference< XDispatch >* pReturn = aReturn.getArray(); - - const DispatchDescriptor* pRequest = _rRequests.getConstArray(); - const DispatchDescriptor* pRequestEnd = pRequest + _rRequests.getLength(); - for ( ; pRequest != pRequestEnd; ++pRequest, ++pReturn ) - { - *pReturn = queryDispatch( pRequest->FeatureURL, pRequest->FrameName, pRequest->SearchFlags ); - } - return aReturn; - } - - //-------------------------------------------------------------------- - void ORichTextPeer::onSelectionChanged( const ESelection& /*_rSelection*/ ) - { - AttributeDispatchers::iterator aDispatcherPos = m_aDispatchers.find( SID_COPY ); - if ( aDispatcherPos != m_aDispatchers.end() ) - aDispatcherPos->second.get()->invalidate(); - - aDispatcherPos = m_aDispatchers.find( SID_CUT ); - if ( aDispatcherPos != m_aDispatchers.end() ) - aDispatcherPos->second.get()->invalidate(); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextcontrol.hxx b/forms/source/richtext/richtextcontrol.hxx deleted file mode 100644 index fbe4a9087..000000000 --- a/forms/source/richtext/richtextcontrol.hxx +++ /dev/null @@ -1,161 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_RICHTEXT_RICHTEXTCONTROL_HXX -#define FORMS_SOURCE_RICHTEXT_RICHTEXTCONTROL_HXX - -#include <toolkit/controls/unocontrols.hxx> -#include <toolkit/awt/vclxwindow.hxx> - -/** === begin UNO includes === **/ -#include <com/sun/star/frame/XDispatchProvider.hpp> -/** === end UNO includes === **/ -#include <comphelper/uno3.hxx> -#include <comphelper/implementationreference.hxx> -#include <cppuhelper/implbase1.hxx> -#include <tools/wintypes.hxx> -#include "rtattributes.hxx" -#include "attributedispatcher.hxx" - -#include <map> - -//......................................................................... -namespace frm -{ -//......................................................................... - - class ORichTextFeatureDispatcher; - class RichTextControl; - - //================================================================== - // ORichTextControl - //================================================================== - typedef ::cppu::ImplHelper1 < ::com::sun::star::frame::XDispatchProvider - > ORichTextControl_Base; - class ORichTextControl :public UnoEditControl - ,public ORichTextControl_Base - { - public: - ORichTextControl( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB - ); - - protected: - ~ORichTextControl(); - - public: - // XServiceInfo - static version - static ::rtl::OUString SAL_CALL getImplementationName_Static(); - static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static(); - static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory ); - - protected: - // UNO - DECLARE_UNO3_AGG_DEFAULTS( ORichTextControl, UnoEditControl ); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw ( ::com::sun::star::uno::RuntimeException ); - - // XControl - virtual void SAL_CALL createPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& _rToolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& _rParent ) throw( ::com::sun::star::uno::RuntimeException ); - - // XServiceInfo - virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // XTypeProvider - DECLARE_XTYPEPROVIDER() - - // XDispatchProvider - virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL queryDispatch( const ::com::sun::star::util::URL& _rURL, const ::rtl::OUString& _rTargetFrameName, sal_Int32 _rSearchFlags ) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL queryDispatches( const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& Requests ) throw (::com::sun::star::uno::RuntimeException); - - // UnoControl - virtual sal_Bool requiresNewPeer( const ::rtl::OUString& _rPropertyName ) const; - }; - - //================================================================== - // ORichTextPeer - //================================================================== - typedef ::cppu::ImplHelper1 < ::com::sun::star::frame::XDispatchProvider - > ORichTextPeer_Base; - class ORichTextPeer :public VCLXWindow - ,public ORichTextPeer_Base - ,public ITextSelectionListener - { - private: - typedef ::comphelper::ImplementationReference< ORichTextFeatureDispatcher, ::com::sun::star::frame::XDispatch > SingleAttributeDispatcher; - typedef ::std::map< SfxSlotId, SingleAttributeDispatcher > AttributeDispatchers; - AttributeDispatchers m_aDispatchers; - - public: - /** factory method - @return - a new ORichTextPeer instance, which has been aquired once! - */ - static ORichTextPeer* Create( - const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel, - Window* _pParentWindow, - WinBits _nStyle - ); - - // XInterface - DECLARE_XINTERFACE( ) - - protected: - ORichTextPeer(); - ~ORichTextPeer(); - - // XView - void SAL_CALL draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno::RuntimeException); - - // XVclWindowPeer - virtual void SAL_CALL setProperty( const ::rtl::OUString& _rPropertyName, const ::com::sun::star::uno::Any& _rValue ) throw (::com::sun::star::uno::RuntimeException); - - // XTypeProvider - DECLARE_XTYPEPROVIDER( ) - - // XComponent - virtual void SAL_CALL dispose( ) throw(::com::sun::star::uno::RuntimeException); - - // XDispatchProvider - virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL queryDispatch( const ::com::sun::star::util::URL& _rURL, const ::rtl::OUString& _rTargetFrameName, sal_Int32 _rSearchFlags ) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL queryDispatches( const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& Requests ) throw (::com::sun::star::uno::RuntimeException); - - // ITextSelectionListener - virtual void onSelectionChanged( const ESelection& _rSelection ); - - private: - SingleAttributeDispatcher implCreateDispatcher( SfxSlotId _nSlotId, const ::com::sun::star::util::URL& _rURL ); - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_SOURCE_RICHTEXT_RICHTEXTCONTROL_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextengine.cxx b/forms/source/richtext/richtextengine.cxx deleted file mode 100644 index 538ec9121..000000000 --- a/forms/source/richtext/richtextengine.cxx +++ /dev/null @@ -1,163 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "richtextengine.hxx" -#include <svl/itempool.hxx> -#include <editeng/eeitem.hxx> -#include <editeng/editobj.hxx> -#define ITEMID_FONTHEIGHT EE_CHAR_FONTHEIGHT -#include <editeng/fhgtitem.hxx> -#define ITEMID_FONT EE_CHAR_FONTHEIGHT -#include <editeng/fontitem.hxx> -#define ITEMID_LANGUAGE EE_CHAR_LANGUAGE -#include <editeng/langitem.hxx> -#include <vcl/svapp.hxx> -#include <tools/mapunit.hxx> -#include <vcl/mapmod.hxx> -#include <vcl/outdev.hxx> -#include <unotools/lingucfg.hxx> -#include <svl/undo.hxx> -#include <osl/mutex.hxx> - -#include <algorithm> -#include <functional> - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= RichTextEngine - //==================================================================== - //-------------------------------------------------------------------- - RichTextEngine* RichTextEngine::Create() - { - SfxItemPool* pPool = EditEngine::CreatePool(); - pPool->FreezeIdRanges(); - - RichTextEngine* pReturn = new RichTextEngine( pPool ); - OutputDevice* pOutputDevice = pReturn->GetRefDevice(); - MapMode aDeviceMapMode( pOutputDevice->GetMapMode() ); - - pReturn->SetStatusEventHdl( LINK( pReturn, RichTextEngine, EditEngineStatusChanged ) ); - - pPool->SetDefaultMetric( (SfxMapUnit)( aDeviceMapMode.GetMapUnit() ) ); - - // defaults - Font aFont = Application::GetSettings().GetStyleSettings().GetAppFont(); - aFont.SetName( String( RTL_CONSTASCII_USTRINGPARAM( "Times New Roman" ) ) ); - pPool->SetPoolDefaultItem( SvxFontItem( aFont.GetFamily(), aFont.GetName(), String(), aFont.GetPitch(), aFont.GetCharSet(), EE_CHAR_FONTINFO ) ); - - // 12 pt font size - MapMode aPointMapMode( MAP_POINT ); - Size a12PointSize( OutputDevice::LogicToLogic( Size( 12, 0 ), aPointMapMode, aDeviceMapMode ) ); - pPool->SetPoolDefaultItem( SvxFontHeightItem( a12PointSize.Width(), 100, EE_CHAR_FONTHEIGHT ) ); - - // font languages - SvtLinguOptions aLinguOpt; - pPool->SetPoolDefaultItem( SvxLanguageItem( aLinguOpt.nDefaultLanguage, EE_CHAR_LANGUAGE ) ); - pPool->SetPoolDefaultItem( SvxLanguageItem( aLinguOpt.nDefaultLanguage_CJK, EE_CHAR_LANGUAGE_CJK ) ); - pPool->SetPoolDefaultItem( SvxLanguageItem( aLinguOpt.nDefaultLanguage_CTL, EE_CHAR_LANGUAGE_CTL ) ); - - return pReturn; - } - - //-------------------------------------------------------------------- - RichTextEngine* RichTextEngine::Clone() - { - RichTextEngine* pClone( NULL ); - { - SolarMutexGuard aGuard; - EditTextObject* pMyText = CreateTextObject(); - OSL_ENSURE( pMyText, "RichTextEngine::Clone: CreateTextObject returned nonsense!" ); - - pClone = Create(); - - if ( pMyText ) - pClone->SetText( *pMyText ); - delete pMyText; - } - - return pClone; - } - - DBG_NAME(RichTextEngine) - //-------------------------------------------------------------------- - RichTextEngine::RichTextEngine( SfxItemPool* _pPool ) - :EditEngine( _pPool ) - ,m_pEnginePool( _pPool ) - { - DBG_CTOR(RichTextEngine,NULL); - } - - //-------------------------------------------------------------------- - RichTextEngine::~RichTextEngine( ) - { - DBG_DTOR(RichTextEngine,NULL); - } - - //-------------------------------------------------------------------- - void RichTextEngine::registerEngineStatusListener( IEngineStatusListener* _pListener ) - { - OSL_ENSURE( _pListener, "RichTextEngine::registerEngineStatusListener: invalid listener!" ); - if ( _pListener ) - m_aStatusListeners.push_back( _pListener ); - } - - //-------------------------------------------------------------------- - void RichTextEngine::revokeEngineStatusListener( IEngineStatusListener* _pListener ) - { - ::std::vector< IEngineStatusListener* >::iterator aPos = ::std::find_if( - m_aStatusListeners.begin(), - m_aStatusListeners.end(), - ::std::bind2nd( ::std::equal_to< IEngineStatusListener* >( ), _pListener ) - ); - OSL_ENSURE( aPos != m_aStatusListeners.end(), "RichTextEngine::revokeEngineStatusListener: listener not registered!" ); - if ( aPos != m_aStatusListeners.end() ) - m_aStatusListeners.erase( aPos ); - } - - //-------------------------------------------------------------------- - IMPL_LINK( RichTextEngine, EditEngineStatusChanged, EditStatus*, _pStatus ) - { - for ( ::std::vector< IEngineStatusListener* >::const_iterator aLoop = m_aStatusListeners.begin(); - aLoop != m_aStatusListeners.end(); - ++aLoop - ) - (*aLoop)->EditEngineStatusChanged( *_pStatus ); - return 0L; - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextengine.hxx b/forms/source/richtext/richtextengine.hxx deleted file mode 100644 index 0c24d28c1..000000000 --- a/forms/source/richtext/richtextengine.hxx +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef FORMS_SOURCE_RICHTEXT_RICHTEXTENGINE_HXX -#define FORMS_SOURCE_RICHTEXT_RICHTEXTENGINE_HXX - -#include <editeng/editeng.hxx> -#include <tools/link.hxx> - -#include <vector> - -class SfxItemPool; -class EditStatus; -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= IEngineStatusListener - //==================================================================== - class IEngineStatusListener - { - public: - virtual void EditEngineStatusChanged( const EditStatus& _rStatus ) = 0; - }; - - //==================================================================== - //= RichTextEngine - //==================================================================== - class RichTextEngine : public EditEngine - { - private: - SfxItemPool* m_pEnginePool; - ::std::vector< IEngineStatusListener* > m_aStatusListeners; - - public: - static RichTextEngine* Create(); - RichTextEngine* Clone(); - - ~RichTextEngine( ); - - // for multiplexing the StatusChanged events of the edit engine - void registerEngineStatusListener( IEngineStatusListener* _pListener ); - void revokeEngineStatusListener( IEngineStatusListener* _pListener ); - - inline SfxItemPool* getPool() { return m_pEnginePool; } - - protected: - /** constructs a new RichTextEngine. The instances takes the ownership of the given SfxItemPool - */ - RichTextEngine( SfxItemPool* _pPool ); - - private: - RichTextEngine( ); // never implemented - RichTextEngine( const RichTextEngine& ); // never implemented - RichTextEngine& operator=( const RichTextEngine& ); // never implemented - - private: - DECL_LINK( EditEngineStatusChanged, EditStatus* ); - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_RICHTEXTENGINE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextimplcontrol.cxx b/forms/source/richtext/richtextimplcontrol.cxx deleted file mode 100644 index a900c8ace..000000000 --- a/forms/source/richtext/richtextimplcontrol.cxx +++ /dev/null @@ -1,680 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "richtextimplcontrol.hxx" -#include "textattributelistener.hxx" -#include "richtextengine.hxx" -#include <editeng/editeng.hxx> -#include <editeng/editview.hxx> -#include <editeng/eeitem.hxx> -#include <editeng/editstat.hxx> -#include <svx/svxids.hrc> -#include <editeng/scripttypeitem.hxx> - -#include <editeng/editobj.hxx> -#include <svl/itempool.hxx> -#include <svl/itemset.hxx> -#include <tools/mapunit.hxx> -#include <vcl/window.hxx> -#include <vcl/svapp.hxx> - -#include <memory> - -#define EMPTY_PAPER_SIZE 0x7FFFFFFF - -//........................................................................ -namespace frm -{ -//........................................................................ - //==================================================================== - //= RichTextControlImpl - //==================================================================== - //-------------------------------------------------------------------- - RichTextControlImpl::RichTextControlImpl( Control* _pAntiImpl, RichTextEngine* _pEngine, ITextAttributeListener* _pTextAttrListener, ITextSelectionListener* _pSelectionListener ) - :m_pAntiImpl ( _pAntiImpl ) - ,m_pViewport ( NULL ) - ,m_pHScroll ( NULL ) - ,m_pVScroll ( NULL ) - ,m_pScrollCorner ( NULL ) - ,m_pEngine ( _pEngine ) - ,m_pView ( NULL ) - ,m_pTextAttrListener ( _pTextAttrListener ) - ,m_pSelectionListener ( _pSelectionListener ) - ,m_bHasEverBeenShown ( false ) - { - OSL_ENSURE( m_pAntiImpl, "RichTextControlImpl::RichTextControlImpl: invalid window!" ); - OSL_ENSURE( m_pEngine, "RichTextControlImpl::RichTextControlImpl: invalid edit engine! This will *definately* crash!" ); - - m_pViewport = new RichTextViewPort( m_pAntiImpl ); - m_pViewport->setAttributeInvalidationHandler( LINK( this, RichTextControlImpl, OnInvalidateAllAttributes ) ); - m_pViewport->Show(); - - // ensure that both the window and the reference device have the same map unit - MapMode aRefDeviceMapMode( m_pEngine->GetRefDevice()->GetMapMode() ); - m_pAntiImpl->SetMapMode( aRefDeviceMapMode ); - m_pViewport->SetMapMode( aRefDeviceMapMode ); - - m_pView = new EditView( m_pEngine, m_pViewport ); - m_pEngine->InsertView( m_pView ); - m_pViewport->setView( *m_pView ); - - m_pEngine->registerEngineStatusListener( this ); - - { - sal_uLong nViewControlWord = m_pView->GetControlWord(); - nViewControlWord |= EV_CNTRL_AUTOSCROLL; - m_pView->SetControlWord( nViewControlWord ); - } - - // ensure that it's initially scrolled to the upper left - m_pView->SetVisArea( Rectangle( Point( ), m_pViewport->GetOutputSize() ) ); - - ensureScrollbars(); - - m_pAntiImpl->SetBackground( Wallpaper( m_pAntiImpl->GetSettings().GetStyleSettings().GetFieldColor() ) ); - } - - //-------------------------------------------------------------------- - RichTextControlImpl::~RichTextControlImpl( ) - { - m_pEngine->RemoveView( m_pView ); - m_pEngine->revokeEngineStatusListener( this ); - delete m_pView; - delete m_pViewport; - delete m_pHScroll; - delete m_pVScroll; - delete m_pScrollCorner; - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::implUpdateAttribute( AttributeHandlerPool::const_iterator _pHandler ) - { - if ( ( _pHandler->first == SID_ATTR_CHAR_WEIGHT ) - || ( _pHandler->first == SID_ATTR_CHAR_POSTURE ) - || ( _pHandler->first == SID_ATTR_CHAR_FONT ) - || ( _pHandler->first == SID_ATTR_CHAR_FONTHEIGHT ) - ) - { - // these are attributes whose value depends on the current script type. - // I.e., in real, there are *three* items in the ItemSet: One for each script - // type (Latin, Asian, Complex). However, if we have an observer who is interested - // in the state of this attribute, we have to kind of *merge* the three attributes - // to only one. - // This is usefull in case the observer is for instance a toolbox which contains only - // an, e.g., "bold" slot, and thus not interested in the particular script type of the - // current selection. - SvxScriptSetItem aNormalizedSet( (WhichId)_pHandler->first, *m_pView->GetAttribs().GetPool() ); - normalizeScriptDependentAttribute( aNormalizedSet ); - - implCheckUpdateCache( _pHandler->first, _pHandler->second->getState( aNormalizedSet.GetItemSet() ) ); - } - else - implCheckUpdateCache( _pHandler->first, _pHandler->second->getState( m_pView->GetAttribs() ) ); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::updateAttribute( AttributeId _nAttribute ) - { - AttributeHandlerPool::const_iterator pHandler = m_aAttributeHandlers.find( _nAttribute ); - if ( pHandler != m_aAttributeHandlers.end() ) - implUpdateAttribute( pHandler ); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::updateAllAttributes( ) - { - for ( AttributeHandlerPool::const_iterator pHandler = m_aAttributeHandlers.begin(); - pHandler != m_aAttributeHandlers.end(); - ++pHandler - ) - { - implUpdateAttribute( pHandler ); - } - - // notify changes of the selection, if necessary - if ( m_pSelectionListener && m_pView ) - { - ESelection aCurrentSelection = m_pView->GetSelection(); - if ( !aCurrentSelection.IsEqual( m_aLastKnownSelection ) ) - { - m_aLastKnownSelection = aCurrentSelection; - m_pSelectionListener->onSelectionChanged( m_aLastKnownSelection ); - } - } - } - - //-------------------------------------------------------------------- - AttributeState RichTextControlImpl::getAttributeState( AttributeId _nAttributeId ) const - { - StateCache::const_iterator aCachedStatePos = m_aLastKnownStates.find( _nAttributeId ); - if ( aCachedStatePos == m_aLastKnownStates.end() ) - { - OSL_FAIL( "RichTextControlImpl::getAttributeState: Don't ask for the state of an attribute which I never encountered!" ); - return AttributeState( eIndetermined ); - } - return aCachedStatePos->second; - } - - //-------------------------------------------------------------------- - bool RichTextControlImpl::executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rAttribs, AttributeId _nAttribute, const SfxPoolItem* _pArgument, ScriptType _nForScriptType ) - { - // let's see whether we have a handler for this attribute - AttributeHandlerPool::const_iterator aHandlerPos = m_aAttributeHandlers.find( _nAttribute ); - if ( aHandlerPos != m_aAttributeHandlers.end() ) - { - aHandlerPos->second->executeAttribute( _rCurrentAttribs, _rAttribs, _pArgument, _nForScriptType ); - return true; - } - return false; - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::enableAttributeNotification( AttributeId _nAttributeId, ITextAttributeListener* _pListener ) - { - AttributeHandlerPool::const_iterator aHandlerPos = m_aAttributeHandlers.find( _nAttributeId ); - if ( aHandlerPos == m_aAttributeHandlers.end() ) - { - ::rtl::Reference< IAttributeHandler > aHandler = AttributeHandlerFactory::getHandlerFor( _nAttributeId, *m_pEngine->GetEmptyItemSet().GetPool() ); - OSL_ENSURE( aHandler.is(), "RichTextControlImpl::enableAttributeNotification: no handler available for this attribute!" ); - if ( !aHandler.is() ) - return; - OSL_POSTCOND( _nAttributeId == aHandler->getAttributeId(), "RichTextControlImpl::enableAttributeNotification: suspicious handler!" ); - - aHandlerPos = m_aAttributeHandlers.insert( AttributeHandlerPool::value_type( _nAttributeId , aHandler ) ).first; - } - - // remember the listener - if ( _pListener ) - m_aAttributeListeners.insert( AttributeListenerPool::value_type( _nAttributeId, _pListener ) ); - - // update (and broadcast) the state of this attribute - updateAttribute( _nAttributeId ); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::disableAttributeNotification( AttributeId _nAttributeId ) - { - // forget the handler for this attribute - AttributeHandlerPool::iterator aHandlerPos = m_aAttributeHandlers.find( _nAttributeId ); - if ( aHandlerPos != m_aAttributeHandlers.end() ) - m_aAttributeHandlers.erase( aHandlerPos ); - - // as well as the listener - AttributeListenerPool::iterator aListenerPos = m_aAttributeListeners.find( _nAttributeId ); - if ( aListenerPos != m_aAttributeListeners.end() ) - m_aAttributeListeners.erase( aListenerPos ); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::normalizeScriptDependentAttribute( SvxScriptSetItem& _rScriptSetItem ) - { - _rScriptSetItem.GetItemSet().Put( m_pView->GetAttribs(), sal_False ); - const SfxPoolItem* pNormalizedItem = _rScriptSetItem.GetItemOfScript( getSelectedScriptType() ); - - WhichId nNormalizedWhichId = _rScriptSetItem.GetItemSet().GetPool()->GetWhich( _rScriptSetItem.Which() ); - if ( pNormalizedItem ) - { - SfxPoolItem* pProperWhich = pNormalizedItem->Clone(); - pProperWhich->SetWhich( nNormalizedWhichId ); - _rScriptSetItem.GetItemSet().Put( *pProperWhich ); - DELETEZ( pProperWhich ); - } - else - _rScriptSetItem.GetItemSet().InvalidateItem( nNormalizedWhichId ); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::implCheckUpdateCache( AttributeId _nAttribute, const AttributeState& _rState ) - { - StateCache::iterator aCachePos = m_aLastKnownStates.find( _nAttribute ); - if ( aCachePos == m_aLastKnownStates.end() ) - { // nothing known about this attribute, yet - m_aLastKnownStates.insert( StateCache::value_type( _nAttribute, _rState ) ); - } - else - { - if ( aCachePos->second == _rState ) - { - // nothing to do - return; - } - aCachePos->second = _rState; - } - - // is there a dedicated listener for this particular attribute? - AttributeListenerPool::const_iterator aListenerPos = m_aAttributeListeners.find( _nAttribute ); - if ( aListenerPos != m_aAttributeListeners.end( ) ) - aListenerPos->second->onAttributeStateChanged( _nAttribute, _rState ); - - // call our global listener, if there is one - if ( m_pTextAttrListener ) - m_pTextAttrListener->onAttributeStateChanged( _nAttribute, _rState ); - } - - //-------------------------------------------------------------------- - ScriptType RichTextControlImpl::getSelectedScriptType() const - { - ScriptType nScript = m_pView->GetSelectedScriptType(); - if ( !nScript ) - nScript = SvtLanguageOptions::GetScriptTypeOfLanguage( Application::GetSettings().GetLanguage() ); - return nScript; - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::EditEngineStatusChanged( const EditStatus& _rStatus ) - { - sal_uLong nStatusWord( _rStatus.GetStatusWord() ); - if ( ( nStatusWord & EE_STAT_TEXTWIDTHCHANGED ) - || ( nStatusWord & EE_STAT_TEXTHEIGHTCHANGED ) - ) - { - if ( ( nStatusWord & EE_STAT_TEXTHEIGHTCHANGED ) && windowHasAutomaticLineBreak() ) - m_pEngine->SetPaperSize( Size( m_pEngine->GetPaperSize().Width(), m_pEngine->GetTextHeight() ) ); - - updateScrollbars(); - } - - bool bHScroll = 0 != ( nStatusWord & EE_STAT_HSCROLL ); - bool bVScroll = 0 != ( nStatusWord & EE_STAT_VSCROLL ); - - // In case of *no* automatic line breaks, we also need to check for the *range* here. - // Normally, we would do this only after a EE_STAT_TEXTWIDTHCHANGED. However, due to a bug - // in the EditEngine (I believe so) this is not fired when the engine does not have - // the AutoPaperSize bits set. - // So in order to be properly notified, we would need the AutoPaperSize. But, with - // AutoPaperSize, other things do not work anymore: Either, when we set a MaxAutoPaperSize, - // then the view does automatic soft line breaks at the paper end - which we definately do - // want. Or, if we did not set a MaxAutoPaperSize, then the view does not automatically scroll - // anymore in horizontal direction. - // So this is some kind of lose-lose situation ... :( - if ( !windowHasAutomaticLineBreak() && bHScroll ) - { - updateScrollbars(); - return; - } - - if ( bHScroll && m_pHScroll ) - m_pHScroll->SetThumbPos( m_pView->GetVisArea().Left() ); - if ( bVScroll && m_pVScroll ) - m_pVScroll->SetThumbPos( m_pView->GetVisArea().Top() ); - } - - //-------------------------------------------------------------------- - IMPL_LINK( RichTextControlImpl, OnInvalidateAllAttributes, void*, /*_pNotInterestedIn*/ ) - { - updateAllAttributes(); - return 0L; - } - - //-------------------------------------------------------------------- - IMPL_LINK( RichTextControlImpl, OnHScroll, ScrollBar*, _pScrollbar ) - { - m_pView->Scroll( -_pScrollbar->GetDelta(), 0, RGCHK_PAPERSZ1 ); - return 0L; - } - - //-------------------------------------------------------------------- - IMPL_LINK( RichTextControlImpl, OnVScroll, ScrollBar*, _pScrollbar ) - { - m_pView->Scroll( 0, -_pScrollbar->GetDelta(), RGCHK_PAPERSZ1 ); - return 0L; - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::ensureScrollbars() - { - bool bNeedVScroll = 0 != ( m_pAntiImpl->GetStyle() & WB_VSCROLL ); - bool bNeedHScroll = 0 != ( m_pAntiImpl->GetStyle() & WB_HSCROLL ); - - if ( ( bNeedVScroll == hasVScrollBar() ) && ( bNeedHScroll == hasHScrollBar( ) ) ) - // nothing to do - return; - - // create or delete the scrollbars, as necessary - if ( !bNeedVScroll ) - { - delete m_pVScroll; - m_pVScroll = NULL; - } - else - { - m_pVScroll = new ScrollBar( m_pAntiImpl, WB_VSCROLL | WB_DRAG | WB_REPEAT ); - m_pVScroll->SetScrollHdl ( LINK( this, RichTextControlImpl, OnVScroll ) ); - m_pVScroll->Show(); - } - - if ( !bNeedHScroll ) - { - delete m_pHScroll; - m_pHScroll = NULL; - } - else - { - m_pHScroll = new ScrollBar( m_pAntiImpl, WB_HSCROLL | WB_DRAG | WB_REPEAT ); - m_pHScroll->SetScrollHdl ( LINK( this, RichTextControlImpl, OnHScroll ) ); - m_pHScroll->Show(); - } - - if ( m_pHScroll && m_pVScroll ) - { - delete m_pScrollCorner; - m_pScrollCorner = new ScrollBarBox( m_pAntiImpl ); - m_pScrollCorner->Show(); - } - else - { - delete m_pScrollCorner; - m_pScrollCorner = NULL; - } - - layoutWindow(); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::ensureLineBreakSetting() - { - if ( !windowHasAutomaticLineBreak() ) - m_pEngine->SetPaperSize( Size( EMPTY_PAPER_SIZE, EMPTY_PAPER_SIZE ) ); - - layoutWindow(); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::layoutWindow() - { - if ( !m_bHasEverBeenShown ) - // no need to do anything. Especially, no need to set the paper size on the - // EditEngine to anything .... - return; - - const StyleSettings& rStyleSettings = m_pAntiImpl->GetSettings().GetStyleSettings(); - - long nScrollBarWidth = m_pVScroll ? rStyleSettings.GetScrollBarSize() : 0; - long nScrollBarHeight = m_pHScroll ? rStyleSettings.GetScrollBarSize() : 0; - - if ( m_pAntiImpl->IsZoom() ) - { - nScrollBarWidth = m_pAntiImpl->CalcZoom( nScrollBarWidth ); - nScrollBarHeight = m_pAntiImpl->CalcZoom( nScrollBarHeight ); - } - - // the overall size we can use - Size aPlaygroundSizePixel( m_pAntiImpl->GetOutputSizePixel() ); - - // the size of the viewport - note that the viewport does *not* occupy all the place - // which is left when subtracting the scrollbar width/height - Size aViewportPlaygroundPixel( aPlaygroundSizePixel ); - aViewportPlaygroundPixel.Width() = ::std::max( long( 10 ), long( aViewportPlaygroundPixel.Width() - nScrollBarWidth ) ); - aViewportPlaygroundPixel.Height() = ::std::max( long( 10 ), long( aViewportPlaygroundPixel.Height() - nScrollBarHeight ) ); - Size aViewportPlaygroundLogic( m_pViewport->PixelToLogic( aViewportPlaygroundPixel ) ); - - const long nOffset = 2; - Size aViewportSizePixel( aViewportPlaygroundPixel.Width() - 2 * nOffset, aViewportPlaygroundPixel.Height() - 2 * nOffset ); - Size aViewportSizeLogic( m_pViewport->PixelToLogic( aViewportSizePixel ) ); - - // position the viewport - m_pViewport->SetPosSizePixel( Point( nOffset, nOffset ), aViewportSizePixel ); - // position the scrollbars - if ( m_pVScroll ) - m_pVScroll->SetPosSizePixel( Point( aViewportPlaygroundPixel.Width(), 0 ), Size( nScrollBarWidth, aViewportPlaygroundPixel.Height() ) ); - if ( m_pHScroll ) - m_pHScroll->SetPosSizePixel( Point( 0, aViewportPlaygroundPixel.Height() ), Size( aViewportPlaygroundPixel.Width(), nScrollBarHeight ) ); - if ( m_pScrollCorner ) - m_pScrollCorner->SetPosSizePixel( Point( aViewportPlaygroundPixel.Width(), aViewportPlaygroundPixel.Height() ), Size( nScrollBarWidth, nScrollBarHeight ) ); - - // paper size - if ( windowHasAutomaticLineBreak() ) - m_pEngine->SetPaperSize( Size( aViewportSizeLogic.Width(), m_pEngine->GetTextHeight() ) ); - - // output area of the view - m_pView->SetOutputArea( Rectangle( Point( ), aViewportSizeLogic ) ); - m_pView->SetVisArea( Rectangle( Point( ), aViewportSizeLogic ) ); - - if ( m_pVScroll ) - { - m_pVScroll->SetVisibleSize( aViewportPlaygroundLogic.Height() ); - - // the default height of a text line .... - long nFontHeight = m_pEngine->GetStandardFont(0).GetSize().Height(); - // ... is the scroll size for the vertical scrollbar - m_pVScroll->SetLineSize( nFontHeight ); - // the viewport width, minus one line, is the page scroll size - m_pVScroll->SetPageSize( ::std::max( nFontHeight, aViewportPlaygroundLogic.Height() - nFontHeight ) ); - } - - // the font width - if ( m_pHScroll ) - { - m_pHScroll->SetVisibleSize( aViewportPlaygroundLogic.Width() ); - - long nFontWidth = m_pEngine->GetStandardFont(0).GetSize().Width(); - if ( !nFontWidth ) - { - m_pViewport->Push( PUSH_FONT ); - m_pViewport->SetFont( m_pEngine->GetStandardFont(0) ); - nFontWidth = m_pViewport->GetTextWidth( String( RTL_CONSTASCII_USTRINGPARAM( "x" ) ) ); - m_pViewport->Pop(); - } - // ... is the scroll size for the horizontal scrollbar - m_pHScroll->SetLineSize( 5 * nFontWidth ); - // the viewport height, minus one character, is the page scroll size - m_pHScroll->SetPageSize( ::std::max( nFontWidth, aViewportPlaygroundLogic.Width() - nFontWidth ) ); - } - - // update range and position of the scrollbars - updateScrollbars(); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::updateScrollbars() - { - if ( m_pVScroll ) - { - long nOverallTextHeight = m_pEngine->GetTextHeight(); - m_pVScroll->SetRange( Range( 0, nOverallTextHeight ) ); - m_pVScroll->SetThumbPos( m_pView->GetVisArea().Top() ); - } - - if ( m_pHScroll ) - { - Size aPaperSize( m_pEngine->GetPaperSize() ); - long nOverallTextWidth = ( aPaperSize.Width() == EMPTY_PAPER_SIZE ) ? m_pEngine->CalcTextWidth() : aPaperSize.Width(); - m_pHScroll->SetRange( Range( 0, nOverallTextWidth ) ); - m_pHScroll->SetThumbPos( m_pView->GetVisArea().Left() ); - } - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::notifyInitShow() - { - if ( !m_bHasEverBeenShown ) - { - m_bHasEverBeenShown = true; - layoutWindow(); - } - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::notifyStyleChanged() - { - ensureScrollbars(); - ensureLineBreakSetting(); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::notifyZoomChanged() - { - const Fraction& rZoom = m_pAntiImpl->GetZoom(); - - MapMode aMapMode( m_pAntiImpl->GetMapMode() ); - aMapMode.SetScaleX( rZoom ); - aMapMode.SetScaleY( rZoom ); - m_pAntiImpl->SetMapMode( aMapMode ); - - m_pViewport->SetZoom( rZoom ); - m_pViewport->SetMapMode( aMapMode ); - - layoutWindow(); - } - - //-------------------------------------------------------------------- - bool RichTextControlImpl::windowHasAutomaticLineBreak() - { - return ( m_pAntiImpl->GetStyle() & WB_WORDBREAK ) != 0; - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::SetReadOnly( bool _bReadOnly ) - { - m_pView->SetReadOnly( _bReadOnly ); - } - - //-------------------------------------------------------------------- - bool RichTextControlImpl::IsReadOnly() const - { - return m_pView->IsReadOnly( ); - } - - //-------------------------------------------------------------------- - namespace - { - static void lcl_inflate( Rectangle& _rRect, long _nInflateX, long _nInflateY ) - { - _rRect.Left() -= _nInflateX; - _rRect.Right() += _nInflateX; - _rRect.Top() -= _nInflateY; - _rRect.Bottom() += _nInflateY; - } - } - //-------------------------------------------------------------------- - long RichTextControlImpl::HandleCommand( const CommandEvent& _rEvent ) - { - if ( ( _rEvent.GetCommand() == COMMAND_WHEEL ) - || ( _rEvent.GetCommand() == COMMAND_STARTAUTOSCROLL ) - || ( _rEvent.GetCommand() == COMMAND_AUTOSCROLL ) - ) - { - m_pAntiImpl->HandleScrollCommand( _rEvent, m_pHScroll, m_pVScroll ); - return 1; - } - return 0; - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::Draw( OutputDevice* _pDev, const Point& _rPos, const Size& _rSize, sal_uLong /*_nFlags*/ ) - { - // need to normalize the map mode of the device - every paint operation on any device needs - // to use the same map mode - _pDev->Push( PUSH_MAPMODE | PUSH_LINECOLOR | PUSH_FILLCOLOR ); - - // enforce our "normalize map mode" on the device - MapMode aRefMapMode( m_pEngine->GetRefDevice()->GetMapMode() ); - MapMode aOriginalMapMode( _pDev->GetMapMode() ); - MapMode aNormalizedMapMode( aRefMapMode.GetMapUnit(), aRefMapMode.GetOrigin(), aOriginalMapMode.GetScaleX(), aOriginalMapMode.GetScaleY() ); - _pDev->SetMapMode( aNormalizedMapMode ); - - // translate coordinates - Point aPos( _rPos ); - Size aSize( _rSize ); - if ( aOriginalMapMode.GetMapUnit() == MAP_PIXEL ) - { - aPos = _pDev->PixelToLogic( _rPos, aNormalizedMapMode ); - aSize = _pDev->PixelToLogic( _rSize, aNormalizedMapMode ); - } - else - { - aPos = OutputDevice::LogicToLogic( _rPos, aOriginalMapMode, aNormalizedMapMode ); - aSize = OutputDevice::LogicToLogic( _rSize, aOriginalMapMode, aNormalizedMapMode ); - } - - Rectangle aPlayground( aPos, aSize ); - Size aOnePixel( _pDev->PixelToLogic( Size( 1, 1 ) ) ); - aPlayground.Right() -= aOnePixel.Width(); - aPlayground.Bottom() -= aOnePixel.Height(); - - // background - _pDev->SetLineColor(); - _pDev->DrawRect( aPlayground ); - - // do we need to draw a border? - bool bBorder = ( m_pAntiImpl->GetStyle() & WB_BORDER ); - if ( bBorder ) - _pDev->SetLineColor( m_pAntiImpl->GetSettings().GetStyleSettings().GetMonoColor() ); - else - _pDev->SetLineColor(); - _pDev->SetFillColor( m_pAntiImpl->GetBackground().GetColor() ); - _pDev->DrawRect( aPlayground ); - - if ( bBorder ) - // don't draw the text over the border - lcl_inflate( aPlayground, -aOnePixel.Width(), -aOnePixel.Height() ); - - // leave a space of one pixel between the "surroundings" of the control - // and the content - lcl_inflate( aPlayground, -aOnePixel.Width(), -aOnePixel.Height() ); - lcl_inflate( aPlayground, -aOnePixel.Width(), -aOnePixel.Height() ); - - // actually draw the content - m_pEngine->Draw( _pDev, aPlayground, Point(), sal_True ); - - _pDev->Pop(); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::SetBackgroundColor( ) - { - SetBackgroundColor( Application::GetSettings().GetStyleSettings().GetFieldColor() ); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::SetBackgroundColor( const Color& _rColor ) - { - Wallpaper aWallpaper( _rColor ); - m_pAntiImpl->SetBackground( aWallpaper ); - m_pViewport->SetBackground( aWallpaper ); - } - - //-------------------------------------------------------------------- - void RichTextControlImpl::SetHideInactiveSelection( bool _bHide ) - { - m_pViewport->SetHideInactiveSelection( _bHide ); - } - - //-------------------------------------------------------------------- - bool RichTextControlImpl::GetHideInactiveSelection() const - { - return m_pViewport->GetHideInactiveSelection( ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextimplcontrol.hxx b/forms/source/richtext/richtextimplcontrol.hxx deleted file mode 100644 index e3206e389..000000000 --- a/forms/source/richtext/richtextimplcontrol.hxx +++ /dev/null @@ -1,198 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef FORMS_SOURCE_RICHTEXT_RICHTEXTIMPLCONTOL_HXX -#define FORMS_SOURCE_RICHTEXT_RICHTEXTIMPLCONTOL_HXX - -#include "rtattributehandler.hxx" -#include "richtextviewport.hxx" -#include "richtextengine.hxx" -#include <vcl/scrbar.hxx> -#include <editeng/editdata.hxx> - -#include <map> - -class EditView; -class EditStatus; -class Window; -class SvxScriptSetItem; -//........................................................................ -namespace frm -{ -//........................................................................ - - class ITextAttributeListener; - class ITextSelectionListener; - class RichTextViewPort; - //==================================================================== - //= RichTextControlImpl - //==================================================================== - class RichTextControlImpl : public IEngineStatusListener - { - typedef ::std::map< AttributeId, AttributeState > StateCache; - typedef ::std::map< AttributeId, ::rtl::Reference< IAttributeHandler > > AttributeHandlerPool; - typedef ::std::map< AttributeId, ITextAttributeListener* > AttributeListenerPool; - - StateCache m_aLastKnownStates; - AttributeHandlerPool m_aAttributeHandlers; - AttributeListenerPool m_aAttributeListeners; - - ESelection m_aLastKnownSelection; - - Control* m_pAntiImpl; - RichTextViewPort* m_pViewport; - ScrollBar* m_pHScroll; - ScrollBar* m_pVScroll; - ScrollBarBox* m_pScrollCorner; - RichTextEngine* m_pEngine; - EditView* m_pView; - ITextAttributeListener* m_pTextAttrListener; - ITextSelectionListener* m_pSelectionListener; - bool m_bHasEverBeenShown; - - public: - struct GrantAccess { friend class RichTextControl; private: GrantAccess() { } }; - inline EditView* getView( const GrantAccess& ) const { return m_pView; } - inline RichTextEngine* getEngine( const GrantAccess& ) const { return m_pEngine; } - inline Window* getViewport( const GrantAccess& ) const { return m_pViewport; } - - public: - RichTextControlImpl( Control* _pAntiImpl, RichTextEngine* _pEngine, - ITextAttributeListener* _pTextAttrListener, ITextSelectionListener* _pSelectionListener ); - virtual ~RichTextControlImpl(); - - /** updates the cache with the state of all attribute values from the given set, notifies - the listener if the state changed - */ - void updateAllAttributes( ); - - /** updates the cache with the state of the attribute given by which id, notifies - the listener if the state changed - */ - void updateAttribute( AttributeId _nAttribute ); - - /// enables the callback for a particular attribute - void enableAttributeNotification( AttributeId _nAttributeId, ITextAttributeListener* _pListener = NULL ); - - /// disables the change notifications for a particular attribute - void disableAttributeNotification( AttributeId _nAttributeId ); - - /// executes a toggle of the given attribute - bool executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, AttributeId _nAttribute, const SfxPoolItem* _pArgument, ScriptType _nForScriptType ); - - /// retrieves the state of the given attribute from the cache - AttributeState getAttributeState( AttributeId _nAttributeId ) const; - - /** normalizes the given item so that the state of script dependent attributes - is correct considering the current script type - - There are some attributes which are script dependent, e.g. the CharPosture. This means - that in real, there are 3 attributes for this, one for every possible script type (latin, - asian, complex). However, to the out world, we behave as if there is only one attribute: - E.g., if the outter world asks for the state of the "CharPosture" attribute, we return - the state of either CharPostureLatin, CharPostureAsian, or CharPostureComplex, depending - on the script type of the current selection. (In real, it may be more complex since - the current selection may contain more than one script type.) - - This method normalizes a script dependent attribute, so that it's state takes into account - the currently selected script type. - */ - void normalizeScriptDependentAttribute( SvxScriptSetItem& _rScriptSetItem ); - - // gets the script type of the selection in our edit view (with fallback) - ScriptType getSelectedScriptType() const; - - /** re-arranges the view and the scrollbars - */ - void layoutWindow(); - - /** to be called when the style of our window changed - */ - void notifyStyleChanged(); - - /** to be called when the zoom of our window changed - */ - void notifyZoomChanged(); - - /** to be called when the STATE_CHANGE_INITSHOW event arrives - */ - void notifyInitShow(); - - // VCL "overrides" - void SetBackgroundColor( ); - void SetBackgroundColor( const Color& _rColor ); - - void SetReadOnly( bool _bReadOnly ); - bool IsReadOnly() const; - - void SetHideInactiveSelection( bool _bHide ); - bool GetHideInactiveSelection() const; - - /// draws the control onto a given output device - void Draw( OutputDevice* _pDev, const Point& _rPos, const Size& _rSize, sal_uLong _nFlags ); - - /// handles command events arrived at the anti-impl control - long HandleCommand( const CommandEvent& _rEvent ); - - private: - // updates the cache with the state provided by the given attribut handler - void implUpdateAttribute( AttributeHandlerPool::const_iterator _pHandler ); - - // updates the cache with the given state, and calls listeners (if necessary) - void implCheckUpdateCache( AttributeId _nAttribute, const AttributeState& _rState ); - - // updates range and position of our scrollbars - void updateScrollbars(); - - // determines whether automatic (soft) line breaks are ON - bool windowHasAutomaticLineBreak(); - - /// hides or shows our scrollbars, according to the current WinBits of the window - void ensureScrollbars(); - - /// ensures that our "automatic line break" setting matches the current WinBits of the window - void ensureLineBreakSetting(); - - inline bool hasVScrollBar( ) const { return m_pVScroll != NULL; } - inline bool hasHScrollBar( ) const { return m_pHScroll != NULL; } - - // IEngineStatusListener overridables - virtual void EditEngineStatusChanged( const EditStatus& _rStatus ); - - private: - DECL_LINK( OnInvalidateAllAttributes, void* ); - DECL_LINK( OnHScroll, ScrollBar* ); - DECL_LINK( OnVScroll, ScrollBar* ); - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_RICHTEXTIMPLCONTOL_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextmodel.cxx b/forms/source/richtext/richtextmodel.cxx deleted file mode 100644 index 4b3c5b758..000000000 --- a/forms/source/richtext/richtextmodel.cxx +++ /dev/null @@ -1,641 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#ifndef FORMS_SOURCE_RICHTEXT_RICHTEXTMODEL_CXX -#include "richtextmodel.hxx" -#endif -#include "richtextengine.hxx" -#include "richtextunowrapper.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/awt/LineEndFormat.hpp> -#include <com/sun/star/text/WritingMode2.hpp> -#include <com/sun/star/style/VerticalAlignment.hpp> -/** === end UNO includes === **/ - -#include <cppuhelper/typeprovider.hxx> -#include <comphelper/guarding.hxx> -#include <toolkit/awt/vclxdevice.hxx> -#include <toolkit/helper/vclunohelper.hxx> -#include <editeng/editstat.hxx> -#include <vcl/outdev.hxx> -#include <vcl/svapp.hxx> - -//-------------------------------------------------------------------------- -extern "C" void SAL_CALL createRegistryInfo_ORichTextModel() -{ - static ::frm::OMultiInstanceAutoRegistration< ::frm::ORichTextModel > aRegisterModel; -} - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::io; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::form; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::style; - - namespace WritingMode2 = ::com::sun::star::text::WritingMode2; - - //==================================================================== - //= ORichTextModel - //==================================================================== - DBG_NAME( ORichTextModel ) - //-------------------------------------------------------------------- - ORichTextModel::ORichTextModel( const Reference< XMultiServiceFactory >& _rxFactory ) - :OControlModel ( _rxFactory, ::rtl::OUString() ) - ,FontControlModel ( true ) - ,m_pEngine ( RichTextEngine::Create() ) - ,m_bSettingEngineText( false ) - ,m_aModifyListeners ( m_aMutex ) - { - DBG_CTOR( ORichTextModel, NULL ); - m_nClassId = FormComponentType::TEXTFIELD; - - getPropertyDefaultByHandle( PROPERTY_ID_DEFAULTCONTROL ) >>= m_sDefaultControl; - getPropertyDefaultByHandle( PROPERTY_ID_BORDER ) >>= m_nBorder; - getPropertyDefaultByHandle( PROPERTY_ID_ENABLED ) >>= m_bEnabled; - getPropertyDefaultByHandle( PROPERTY_ID_ENABLEVISIBLE ) >>= m_bEnableVisible; - getPropertyDefaultByHandle( PROPERTY_ID_HARDLINEBREAKS ) >>= m_bHardLineBreaks; - getPropertyDefaultByHandle( PROPERTY_ID_HSCROLL ) >>= m_bHScroll; - getPropertyDefaultByHandle( PROPERTY_ID_VSCROLL ) >>= m_bVScroll; - getPropertyDefaultByHandle( PROPERTY_ID_READONLY ) >>= m_bReadonly; - getPropertyDefaultByHandle( PROPERTY_ID_PRINTABLE ) >>= m_bPrintable; - getPropertyDefaultByHandle( PROPERTY_ID_ALIGN ) >>= m_aAlign; - getPropertyDefaultByHandle( PROPERTY_ID_ECHO_CHAR ) >>= m_nEchoChar; - getPropertyDefaultByHandle( PROPERTY_ID_MAXTEXTLEN ) >>= m_nMaxTextLength; - getPropertyDefaultByHandle( PROPERTY_ID_MULTILINE ) >>= m_bMultiLine; - getPropertyDefaultByHandle( PROPERTY_ID_RICH_TEXT ) >>= m_bReallyActAsRichText; - getPropertyDefaultByHandle( PROPERTY_ID_HIDEINACTIVESELECTION ) >>= m_bHideInactiveSelection; - getPropertyDefaultByHandle( PROPERTY_ID_LINEEND_FORMAT ) >>= m_nLineEndFormat; - getPropertyDefaultByHandle( PROPERTY_ID_WRITING_MODE ) >>= m_nTextWritingMode; - getPropertyDefaultByHandle( PROPERTY_ID_CONTEXT_WRITING_MODE ) >>= m_nContextWritingMode; - - implInit(); - } - - //------------------------------------------------------------------ - ORichTextModel::ORichTextModel( const ORichTextModel* _pOriginal, const Reference< XMultiServiceFactory >& _rxFactory ) - :OControlModel ( _pOriginal, _rxFactory, sal_False ) - ,FontControlModel ( _pOriginal ) - ,m_pEngine ( NULL ) - ,m_bSettingEngineText( false ) - ,m_aModifyListeners ( m_aMutex ) - { - DBG_CTOR( ORichTextModel, NULL ); - - m_aTabStop = _pOriginal->m_aTabStop; - m_aBackgroundColor = _pOriginal->m_aBackgroundColor; - m_aBorderColor = _pOriginal->m_aBorderColor; - m_aVerticalAlignment = _pOriginal->m_aVerticalAlignment; - m_sDefaultControl = _pOriginal->m_sDefaultControl; - m_sHelpText = _pOriginal->m_sHelpText; - m_sHelpURL = _pOriginal->m_sHelpURL; - m_nBorder = _pOriginal->m_nBorder; - m_bEnabled = _pOriginal->m_bEnabled; - m_bEnableVisible = _pOriginal->m_bEnableVisible; - m_bHardLineBreaks = _pOriginal->m_bHardLineBreaks; - m_bHScroll = _pOriginal->m_bHScroll; - m_bVScroll = _pOriginal->m_bVScroll; - m_bReadonly = _pOriginal->m_bReadonly; - m_bPrintable = _pOriginal->m_bPrintable; - m_bReallyActAsRichText = _pOriginal->m_bReallyActAsRichText; - m_bHideInactiveSelection = _pOriginal->m_bHideInactiveSelection; - m_nLineEndFormat = _pOriginal->m_nLineEndFormat; - m_nTextWritingMode = _pOriginal->m_nTextWritingMode; - m_nContextWritingMode = _pOriginal->m_nContextWritingMode; - - m_aAlign = _pOriginal->m_aAlign; - m_nEchoChar = _pOriginal->m_nEchoChar; - m_nMaxTextLength = _pOriginal->m_nMaxTextLength; - m_bMultiLine = _pOriginal->m_bMultiLine; - - m_pEngine.reset(_pOriginal->m_pEngine->Clone()); - m_sLastKnownEngineText = m_pEngine->GetText(); - - implInit(); - } - - //------------------------------------------------------------------ - void ORichTextModel::implInit() - { - OSL_ENSURE( m_pEngine.get(), "ORichTextModel::implInit: where's the engine?" ); - if ( m_pEngine.get() ) - { - m_pEngine->SetModifyHdl( LINK( this, ORichTextModel, OnEngineContentModified ) ); - - sal_uLong nEngineControlWord = m_pEngine->GetControlWord(); - nEngineControlWord = nEngineControlWord & ~EE_CNTRL_AUTOPAGESIZE; - m_pEngine->SetControlWord( nEngineControlWord ); - - VCLXDevice* pUnoRefDevice = new VCLXDevice; - pUnoRefDevice->SetOutputDevice( m_pEngine->GetRefDevice() ); - m_xReferenceDevice = pUnoRefDevice; - } - - implDoAggregation(); - implRegisterProperties(); - } - - //------------------------------------------------------------------ - void ORichTextModel::implDoAggregation() - { - increment( m_refCount ); - - { - m_xAggregate = new ORichTextUnoWrapper( *m_pEngine, this ); - setAggregation( m_xAggregate ); - doSetDelegator(); - } - - decrement( m_refCount ); - } - - //------------------------------------------------------------------ - void ORichTextModel::implRegisterProperties() - { - REGISTER_PROP_2( DEFAULTCONTROL, m_sDefaultControl, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( HELPTEXT, m_sHelpText, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( HELPURL, m_sHelpURL, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( ENABLED, m_bEnabled, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( ENABLEVISIBLE, m_bEnableVisible, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( BORDER, m_nBorder, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( HARDLINEBREAKS, m_bHardLineBreaks, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( HSCROLL, m_bHScroll, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( VSCROLL, m_bVScroll, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( READONLY, m_bReadonly, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( PRINTABLE, m_bPrintable, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( REFERENCE_DEVICE, m_xReferenceDevice, BOUND, TRANSIENT ); - REGISTER_PROP_2( RICH_TEXT, m_bReallyActAsRichText, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( HIDEINACTIVESELECTION, m_bHideInactiveSelection, BOUND, MAYBEDEFAULT ); - - REGISTER_VOID_PROP_2( TABSTOP, m_aTabStop, sal_Bool, BOUND, MAYBEDEFAULT ); - REGISTER_VOID_PROP_2( BACKGROUNDCOLOR, m_aBackgroundColor, sal_Int32, BOUND, MAYBEDEFAULT ); - REGISTER_VOID_PROP_2( BORDERCOLOR, m_aBorderColor, sal_Int32, BOUND, MAYBEDEFAULT ); - REGISTER_VOID_PROP_2( VERTICAL_ALIGN, m_aVerticalAlignment, VerticalAlignment, BOUND, MAYBEDEFAULT ); - - // properties which exist only for compatibility with the css.swt.UnoControlEditModel, - // since we replace the default implementation for this service - REGISTER_PROP_2( ECHO_CHAR, m_nEchoChar, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( MAXTEXTLEN, m_nMaxTextLength, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( MULTILINE, m_bMultiLine, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( TEXT, m_sLastKnownEngineText, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( LINEEND_FORMAT, m_nLineEndFormat, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_2( WRITING_MODE, m_nTextWritingMode, BOUND, MAYBEDEFAULT ); - REGISTER_PROP_3( CONTEXT_WRITING_MODE, m_nContextWritingMode, BOUND, MAYBEDEFAULT, TRANSIENT ); - - REGISTER_VOID_PROP_2( ALIGN, m_aAlign, sal_Int16, BOUND, MAYBEDEFAULT ); - } - - //-------------------------------------------------------------------- - ORichTextModel::~ORichTextModel( ) - { - if ( !OComponentHelper::rBHelper.bDisposed ) - { - acquire(); - dispose(); - } - if ( m_pEngine.get() ) - { - SfxItemPool* pPool = m_pEngine->getPool(); - m_pEngine.reset(); - SfxItemPool::Free(pPool); - } - - - DBG_DTOR( ORichTextModel, NULL ); - } - - //------------------------------------------------------------------ - Any SAL_CALL ORichTextModel::queryAggregation( const Type& _rType ) throw ( RuntimeException ) - { - Any aReturn = ORichTextModel_BASE::queryInterface( _rType ); - - if ( !aReturn.hasValue() ) - aReturn = OControlModel::queryAggregation( _rType ); - - return aReturn; - } - - //------------------------------------------------------------------ - IMPLEMENT_FORWARD_XTYPEPROVIDER2( ORichTextModel, OControlModel, ORichTextModel_BASE ) - - //-------------------------------------------------------------------- - IMPLEMENT_SERVICE_REGISTRATION_8( ORichTextModel, OControlModel, - FRM_SUN_COMPONENT_RICHTEXTCONTROL, - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.text.TextRange" ) ), - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.CharacterProperties" ) ), - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.ParagraphProperties" ) ), - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.CharacterPropertiesAsian" ) ), - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.CharacterPropertiesComplex" ) ), - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.ParagraphPropertiesAsian" ) ), - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.ParagraphPropertiesComplex" ) ) - ) - - //------------------------------------------------------------------------------ - IMPLEMENT_DEFAULT_CLONING( ORichTextModel ) - - //------------------------------------------------------------------------------ - void SAL_CALL ORichTextModel::disposing() - { - m_aModifyListeners.disposeAndClear( EventObject( *this ) ); - OControlModel::disposing(); - } - - //------------------------------------------------------------------------------ - namespace - { - void lcl_removeProperty( Sequence< Property >& _rSeq, const ::rtl::OUString& _rPropertyName ) - { - Property* pLoop = _rSeq.getArray(); - Property* pEnd = _rSeq.getArray() + _rSeq.getLength(); - while ( pLoop != pEnd ) - { - if ( pLoop->Name == _rPropertyName ) - { - ::std::copy( pLoop + 1, pEnd, pLoop ); - _rSeq.realloc( _rSeq.getLength() - 1 ); - break; - } - ++pLoop; - } - } - } - //------------------------------------------------------------------------------ - void ORichTextModel::describeFixedProperties( Sequence< Property >& _rProps ) const - { - BEGIN_DESCRIBE_PROPERTIES( 1, OControlModel ) - DECL_PROP2( TABINDEX, sal_Int16, BOUND, MAYBEDEFAULT ); - END_DESCRIBE_PROPERTIES(); - - // properties which the OPropertyContainerHelper is responsible for - Sequence< Property > aContainedProperties; - describeProperties( aContainedProperties ); - - // properties which the FontControlModel is responsible for - Sequence< Property > aFontProperties; - describeFontRelatedProperties( aFontProperties ); - - _rProps = concatSequences( aContainedProperties, aFontProperties, _rProps ); - } - - //------------------------------------------------------------------------------ - void ORichTextModel::describeAggregateProperties( Sequence< Property >& _rAggregateProps ) const - { - OControlModel::describeAggregateProperties( _rAggregateProps ); - - // our aggregate (the SvxUnoText) declares a FontDescriptor property, as does - // our FormControlFont base class. We remove it from the base class' sequence - // here, and later on care for both instances being in sync - lcl_removeProperty( _rAggregateProps, PROPERTY_FONT ); - - // similar, the WritingMode property is declared in our aggregate, too, but we override - // it, since the aggregate does no proper PropertyState handling. - lcl_removeProperty( _rAggregateProps, PROPERTY_WRITING_MODE ); - } - - //-------------------------------------------------------------------- - void SAL_CALL ORichTextModel::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const - { - if ( isRegisteredProperty( _nHandle ) ) - { - OPropertyContainerHelper::getFastPropertyValue( _rValue, _nHandle ); - } - else if ( isFontRelatedProperty( _nHandle ) ) - { - FontControlModel::getFastPropertyValue( _rValue, _nHandle ); - } - else - { - OControlModel::getFastPropertyValue( _rValue, _nHandle ); - } - } - - //-------------------------------------------------------------------- - sal_Bool SAL_CALL ORichTextModel::convertFastPropertyValue( Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue ) throw( IllegalArgumentException ) - { - sal_Bool bModified = sal_False; - - if ( isRegisteredProperty( _nHandle ) ) - { - bModified = OPropertyContainerHelper::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ); - } - else if ( isFontRelatedProperty( _nHandle ) ) - { - bModified = FontControlModel::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ); - } - else - { - bModified = OControlModel::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ); - } - - return bModified; - } - - //-------------------------------------------------------------------- - void SAL_CALL ORichTextModel::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const Any& _rValue ) throw ( Exception) - { - if ( isRegisteredProperty( _nHandle ) ) - { - OPropertyContainerHelper::setFastPropertyValue( _nHandle, _rValue ); - - switch ( _nHandle ) - { - case PROPERTY_ID_REFERENCE_DEVICE: - { - #if OSL_DEBUG_LEVEL > 0 - MapMode aOldMapMode = m_pEngine->GetRefDevice()->GetMapMode(); - #endif - - OutputDevice* pRefDevice = VCLUnoHelper::GetOutputDevice( m_xReferenceDevice ); - OSL_ENSURE( pRefDevice, "ORichTextModel::setFastPropertyValue_NoBroadcast: empty reference device?" ); - m_pEngine->SetRefDevice( pRefDevice ); - - #if OSL_DEBUG_LEVEL > 0 - MapMode aNewMapMode = m_pEngine->GetRefDevice()->GetMapMode(); - OSL_ENSURE( aNewMapMode.GetMapUnit() == aOldMapMode.GetMapUnit(), - "ORichTextModel::setFastPropertyValue_NoBroadcast: You should not tamper with the MapUnit of the ref device!" ); - // if this assertion here is triggered, then we would need to adjust all - // items in all text portions in all paragraphs in the attributes of the EditEngine, - // as long as they are MapUnit-dependent. This holds at least for the FontSize. - #endif - } - break; - - case PROPERTY_ID_TEXT: - { - MutexRelease aReleaseMutex( m_aMutex ); - impl_smlock_setEngineText( m_sLastKnownEngineText ); - } - break; - } // switch ( _nHandle ) - } - else if ( isFontRelatedProperty( _nHandle ) ) - { - FontDescriptor aOldFont( getFont() ); - - FontControlModel::setFastPropertyValue_NoBroadcast( _nHandle, _rValue ); - - if ( isFontAggregateProperty( _nHandle ) ) - firePropertyChange( PROPERTY_ID_FONT, makeAny( getFont() ), makeAny( aOldFont ) ); - } - else - { - switch ( _nHandle ) - { - case PROPERTY_ID_WRITING_MODE: - { - // forward to our aggregate, so the EditEngine knows about it - if ( m_xAggregateSet.is() ) - m_xAggregateSet->setPropertyValue( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "WritingMode" ) ), _rValue ); - } - break; - - default: - OControlModel::setFastPropertyValue_NoBroadcast( _nHandle, _rValue ); - break; - } - } - } - - //-------------------------------------------------------------------- - Any ORichTextModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const - { - Any aDefault; - - switch ( _nHandle ) - { - case PROPERTY_ID_WRITING_MODE: - case PROPERTY_ID_CONTEXT_WRITING_MODE: - aDefault <<= WritingMode2::CONTEXT; - break; - - case PROPERTY_ID_LINEEND_FORMAT: - aDefault <<= (sal_Int16)LineEndFormat::LINE_FEED; - break; - - case PROPERTY_ID_ECHO_CHAR: - case PROPERTY_ID_ALIGN: - case PROPERTY_ID_MAXTEXTLEN: - aDefault <<= (sal_Int16)0; - break; - - case PROPERTY_ID_TABSTOP: - case PROPERTY_ID_BACKGROUNDCOLOR: - case PROPERTY_ID_BORDERCOLOR: - case PROPERTY_ID_VERTICAL_ALIGN: - /* void */ - break; - - case PROPERTY_ID_ENABLED: - case PROPERTY_ID_ENABLEVISIBLE: - case PROPERTY_ID_PRINTABLE: - case PROPERTY_ID_HIDEINACTIVESELECTION: - aDefault <<= (sal_Bool)sal_True; - break; - - case PROPERTY_ID_HARDLINEBREAKS: - case PROPERTY_ID_HSCROLL: - case PROPERTY_ID_VSCROLL: - case PROPERTY_ID_READONLY: - case PROPERTY_ID_MULTILINE: - case PROPERTY_ID_RICH_TEXT: - aDefault <<= (sal_Bool)sal_False; - break; - - case PROPERTY_ID_DEFAULTCONTROL: - aDefault <<= (::rtl::OUString)FRM_SUN_CONTROL_RICHTEXTCONTROL; - break; - - case PROPERTY_ID_HELPTEXT: - case PROPERTY_ID_HELPURL: - case PROPERTY_ID_TEXT: - aDefault <<= ::rtl::OUString(); - break; - - case PROPERTY_ID_BORDER: - aDefault <<= (sal_Int16)1; - break; - - default: - if ( isFontRelatedProperty( _nHandle ) ) - aDefault = FontControlModel::getPropertyDefaultByHandle( _nHandle ); - else - aDefault = OControlModel::getPropertyDefaultByHandle( _nHandle ); - } - - return aDefault; - } - - //-------------------------------------------------------------------- - void ORichTextModel::impl_smlock_setEngineText( const ::rtl::OUString& _rText ) - { - if ( m_pEngine.get() ) - { - SolarMutexGuard aSolarGuard; - m_bSettingEngineText = true; - m_pEngine->SetText( _rText ); - m_bSettingEngineText = false; - } - } - - //-------------------------------------------------------------------- - ::rtl::OUString SAL_CALL ORichTextModel::getServiceName() throw ( RuntimeException) - { - return FRM_SUN_COMPONENT_RICHTEXTCONTROL; - } - - //-------------------------------------------------------------------- - void SAL_CALL ORichTextModel::write(const Reference< XObjectOutputStream >& _rxOutStream) throw ( IOException, RuntimeException) - { - OControlModel::write( _rxOutStream ); - // TODO: place your code here - } - - //-------------------------------------------------------------------- - void SAL_CALL ORichTextModel::read(const Reference< XObjectInputStream >& _rxInStream) throw ( IOException, RuntimeException) - { - OControlModel::read( _rxInStream ); - // TODO: place your code here - } - - //-------------------------------------------------------------------- - RichTextEngine* ORichTextModel::getEditEngine( const Reference< XControlModel >& _rxModel ) - { - RichTextEngine* pEngine = NULL; - - Reference< XUnoTunnel > xTunnel( _rxModel, UNO_QUERY ); - OSL_ENSURE( xTunnel.is(), "ORichTextModel::getEditEngine: invalid model!" ); - if ( xTunnel.is() ) - { - try - { - pEngine = reinterpret_cast< RichTextEngine* >( xTunnel->getSomething( getEditEngineTunnelId() ) ); - } - catch( const Exception& ) - { - OSL_FAIL( "ORichTextModel::getEditEngine: caught an exception!" ); - } - } - return pEngine; - } - - //-------------------------------------------------------------------- - Sequence< sal_Int8 > ORichTextModel::getEditEngineTunnelId() - { - static ::cppu::OImplementationId * pId = 0; - if (! pId) - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - if (! pId) - { - static ::cppu::OImplementationId aId; - pId = &aId; - } - } - return pId->getImplementationId(); - } - - //-------------------------------------------------------------------- - IMPL_LINK( ORichTextModel, OnEngineContentModified, void*, /*_pNotInterestedIn*/ ) - { - if ( !m_bSettingEngineText ) - { - m_aModifyListeners.notifyEach( &XModifyListener::modified, EventObject( *this ) ); - - potentialTextChange(); - // is this a good idea? It may become expensive in case of larger texts, - // and this method here is called for every single changed character ... - // On the other hand, the API *requires* us to notify changes in the "Text" - // property immediately ... - } - - return 0L; - } - - //-------------------------------------------------------------------- - sal_Int64 SAL_CALL ORichTextModel::getSomething( const Sequence< sal_Int8 >& _rId ) throw (RuntimeException) - { - Sequence< sal_Int8 > aEditEngineAccessId( getEditEngineTunnelId() ); - if ( ( _rId.getLength() == aEditEngineAccessId.getLength() ) - && ( 0 == rtl_compareMemory( aEditEngineAccessId.getConstArray(), _rId.getConstArray(), _rId.getLength() ) ) - ) - return reinterpret_cast< sal_Int64 >( m_pEngine.get() ); - - Reference< XUnoTunnel > xAggTunnel; - if ( query_aggregation( m_xAggregate, xAggTunnel ) ) - return xAggTunnel->getSomething( _rId ); - - return 0; - } - - //-------------------------------------------------------------------- - void SAL_CALL ORichTextModel::addModifyListener( const Reference< XModifyListener >& _rxListener ) throw (RuntimeException) - { - m_aModifyListeners.addInterface( _rxListener ); - } - - //-------------------------------------------------------------------- - void SAL_CALL ORichTextModel::removeModifyListener( const Reference< XModifyListener >& _rxListener ) throw (RuntimeException) - { - m_aModifyListeners.removeInterface( _rxListener ); - } - - //-------------------------------------------------------------------- - void ORichTextModel::potentialTextChange( ) - { - ::rtl::OUString sCurrentEngineText; - if ( m_pEngine.get() ) - sCurrentEngineText = m_pEngine->GetText(); - - if ( sCurrentEngineText != m_sLastKnownEngineText ) - { - sal_Int32 nHandle = PROPERTY_ID_TEXT; - Any aOldValue; aOldValue <<= m_sLastKnownEngineText; - Any aNewValue; aNewValue <<= sCurrentEngineText; - fire( &nHandle, &aNewValue, &aOldValue, 1, sal_False ); - - m_sLastKnownEngineText = sCurrentEngineText; - } - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextmodel.hxx b/forms/source/richtext/richtextmodel.hxx deleted file mode 100644 index 6be38c040..000000000 --- a/forms/source/richtext/richtextmodel.hxx +++ /dev/null @@ -1,196 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef FORMS_SOURCE_RICHTEXT_RICHTEXTMODEL_HXX -#define FORMS_SOURCE_RICHTEXT_RICHTEXTMODEL_HXX - -#include "FormComponent.hxx" -#include "frm_module.hxx" -#include "formcontrolfont.hxx" -#include "richtextunowrapper.hxx" -#include <comphelper/propertycontainerhelper.hxx> -#include <comphelper/listenernotification.hxx> - -/** === begin UNO includes === **/ -#include <com/sun/star/awt/XDevice.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> -/** === end UNO includes === **/ -#include <cppuhelper/implbase3.hxx> -#include <tools/link.hxx> -#include <memory> - -class EditEngine; -//........................................................................ -namespace frm -{ -//........................................................................ - - class RichTextEngine; - //==================================================================== - //= ORichTextModel - //==================================================================== - typedef ::cppu::ImplHelper3 < ::com::sun::star::awt::XControlModel - , ::com::sun::star::lang::XUnoTunnel - , ::com::sun::star::util::XModifyBroadcaster - > ORichTextModel_BASE; - - class ORichTextModel - :public OControlModel - ,public FontControlModel - ,public IEngineTextChangeListener - ,public ::comphelper::OPropertyContainerHelper - ,public ORichTextModel_BASE - { - private: - // <properties> - ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDevice > - m_xReferenceDevice; - ::com::sun::star::uno::Any m_aTabStop; - ::com::sun::star::uno::Any m_aBackgroundColor; - ::com::sun::star::uno::Any m_aBorderColor; - ::com::sun::star::uno::Any m_aVerticalAlignment; - ::rtl::OUString m_sDefaultControl; - ::rtl::OUString m_sHelpText; - ::rtl::OUString m_sHelpURL; - ::rtl::OUString m_sLastKnownEngineText; - sal_Int16 m_nLineEndFormat; - sal_Int16 m_nTextWritingMode; - sal_Int16 m_nContextWritingMode; - sal_Int16 m_nBorder; - sal_Bool m_bEnabled; - sal_Bool m_bEnableVisible; - sal_Bool m_bHardLineBreaks; - sal_Bool m_bHScroll; - sal_Bool m_bVScroll; - sal_Bool m_bReadonly; - sal_Bool m_bPrintable; - sal_Bool m_bReallyActAsRichText; // despite the class name, the RichTextControl later on - // will create "ordinary" text peers depending on this property - sal_Bool m_bHideInactiveSelection; - // </properties> - - // <properties_for_awt_edit_compatibility> - ::com::sun::star::uno::Any m_aAlign; - sal_Int16 m_nEchoChar; - sal_Int16 m_nMaxTextLength; - sal_Bool m_bMultiLine; - // </properties_for_awt_edit_compatibility> - - ::std::auto_ptr<RichTextEngine> - m_pEngine; - bool m_bSettingEngineText; - - ::cppu::OInterfaceContainerHelper - m_aModifyListeners; - - public: - static RichTextEngine* getEditEngine( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel ); - - protected: - DECLARE_DEFAULT_LEAF_XTOR( ORichTextModel ); - - // UNO - DECLARE_UNO3_AGG_DEFAULTS( ORichTextModel, OControlModel ); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException); - - // XServiceInfo - DECLARE_SERVICE_REGISTRATION( ORichTextModel ) - - // XPersistObject - DECLARE_XPERSISTOBJECT() - - // XTypeProvider - DECLARE_XTYPEPROVIDER() - - // XCloneable - DECLARE_XCLONEABLE(); - - // XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw (::com::sun::star::uno::RuntimeException); - - // XModifyBroadcaster - virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); - - // XPropertySet and friends - virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; - virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, - sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) - throw(::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue) throw ( ::com::sun::star::uno::Exception); - virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle( sal_Int32 nHandle ) const; - - // OControlModel's property handling - virtual void describeFixedProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps - ) const; - virtual void describeAggregateProperties( - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps - ) const; - - // prevent method hiding - using OControlModel::disposing; - using OControlModel::getFastPropertyValue; - - // OComponentHelper - virtual void SAL_CALL disposing(); - - // IEngineTextChangeListener - virtual void potentialTextChange( ); - - private: - void implInit(); - void implDoAggregation(); - void implRegisterProperties(); - - /** propagates a new text to the EditEngine - - This method needs to lock the global solar mutex, so our own mutex must not - be locked when calling. - - @precond - our mutex is not locked - */ - void impl_smlock_setEngineText( const ::rtl::OUString& _rText ); - - DECL_LINK( OnEngineContentModified, void* ); - - static ::com::sun::star::uno::Sequence< sal_Int8 > getEditEngineTunnelId(); - - private: - ORichTextModel(); // never implemented - ORichTextModel( const ORichTextModel& ); // never implemented - ORichTextModel& operator=( const ORichTextModel& ); // never implemented - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_RICHTEXTMODEL_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextunowrapper.cxx b/forms/source/richtext/richtextunowrapper.cxx deleted file mode 100644 index a6b0dbd7c..000000000 --- a/forms/source/richtext/richtextunowrapper.cxx +++ /dev/null @@ -1,138 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "richtextunowrapper.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/container/XNameContainer.hpp> -/** === end UNO includes === **/ -#include <editeng/unofored.hxx> -#include <editeng/editview.hxx> -#include <editeng/unoipset.hxx> -#include <svx/svdpool.hxx> -#include <svx/svdobj.hxx> -#include <editeng/unoprnms.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::container; - - //==================================================================== - namespace - { - const SvxItemPropertySet* getTextEnginePropertySet() - { - // Propertymap fuer einen Outliner Text - static const SfxItemPropertyMapEntry aTextEnginePropertyMap[] = - { - SVX_UNOEDIT_CHAR_PROPERTIES, - SVX_UNOEDIT_FONT_PROPERTIES, - SVX_UNOEDIT_PARA_PROPERTIES, - { MAP_CHAR_LEN("TextUserDefinedAttributes"), EE_CHAR_XMLATTRIBS, &::getCppuType( static_cast< const Reference< XNameContainer >* >( NULL ) ), 0, 0 }, - { MAP_CHAR_LEN("ParaUserDefinedAttributes"), EE_PARA_XMLATTRIBS, &::getCppuType( static_cast< const Reference< XNameContainer >* >( NULL ) ), 0, 0 }, - { NULL, 0, 0, NULL, 0, 0 } - }; - static SvxItemPropertySet aTextEnginePropertySet( aTextEnginePropertyMap, SdrObject::GetGlobalDrawObjectItemPool() ); - return &aTextEnginePropertySet; - } - } - - //==================================================================== - //= ORichTextUnoWrapper - //==================================================================== - //-------------------------------------------------------------------- - ORichTextUnoWrapper::ORichTextUnoWrapper( EditEngine& _rEngine, IEngineTextChangeListener* _pTextChangeListener ) - :SvxUnoText( getTextEnginePropertySet() ) - { - SetEditSource( new RichTextEditSource( _rEngine, _pTextChangeListener ) ); - } - - //-------------------------------------------------------------------- - ORichTextUnoWrapper::~ORichTextUnoWrapper() throw() - { - } - - //==================================================================== - //= RichTextEditSource - //==================================================================== - //-------------------------------------------------------------------- - RichTextEditSource::RichTextEditSource( EditEngine& _rEngine, IEngineTextChangeListener* _pTextChangeListener ) - :m_rEngine ( _rEngine ) - ,m_pTextForwarder ( new SvxEditEngineForwarder( _rEngine ) ) - ,m_pTextChangeListener ( _pTextChangeListener ) - { - } - - //-------------------------------------------------------------------- - RichTextEditSource::~RichTextEditSource() - { - delete m_pTextForwarder; - } - - //-------------------------------------------------------------------- - SvxEditSource* RichTextEditSource::Clone() const - { - return new RichTextEditSource( m_rEngine, m_pTextChangeListener ); - } - - //-------------------------------------------------------------------- - SvxTextForwarder* RichTextEditSource::GetTextForwarder() - { - return m_pTextForwarder; - } - - //-------------------------------------------------------------------- - void RichTextEditSource::UpdateData() - { - // this means that the content of the EditEngine changed via the UNO API - // to reflect this in the views, we need to update them - sal_uInt16 viewCount = m_rEngine.GetViewCount(); - for ( sal_uInt16 view = 0; view < viewCount; ++view ) - { - EditView* pView = m_rEngine.GetView( view ); - if ( pView ) - pView->ForceUpdate(); - } - - if ( m_pTextChangeListener ) - m_pTextChangeListener->potentialTextChange(); - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextunowrapper.hxx b/forms/source/richtext/richtextunowrapper.hxx deleted file mode 100644 index 9605156b2..000000000 --- a/forms/source/richtext/richtextunowrapper.hxx +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_RICHTEXT_RICHTEXTUNOWRAPPER_HXX -#define FORMS_SOURCE_RICHTEXT_RICHTEXTUNOWRAPPER_HXX - -#include <editeng/unotext.hxx> -#include <editeng/unoedsrc.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= IEngineTextChangeListener - //==================================================================== - class IEngineTextChangeListener - { - public: - virtual void potentialTextChange( ) = 0; - }; - - //==================================================================== - //= ORichTextUnoWrapper - //==================================================================== - class ORichTextUnoWrapper : public SvxUnoText - { - public: - ORichTextUnoWrapper( EditEngine& _rEngine, IEngineTextChangeListener* _pTextChangeListener ); - - protected: - ~ORichTextUnoWrapper() throw(); - - - private: - ORichTextUnoWrapper(); // never implemented - ORichTextUnoWrapper( const ORichTextUnoWrapper& ); // never implemented - ORichTextUnoWrapper& operator=( const ORichTextUnoWrapper& ); // never implemented - }; - - //==================================================================== - //= RichTextEditSource - //==================================================================== - class RichTextEditSource : public SvxEditSource - { - private: - EditEngine& m_rEngine; - SvxTextForwarder* m_pTextForwarder; - IEngineTextChangeListener* m_pTextChangeListener; - - public: - RichTextEditSource( EditEngine& _rEngine, IEngineTextChangeListener* _pTextChangeListener ); - - // SvxEditSource - virtual SvxEditSource* Clone() const; - virtual SvxTextForwarder* GetTextForwarder(); - virtual void UpdateData(); - - protected: - ~RichTextEditSource(); - - private: - RichTextEditSource( ); // never implemented - RichTextEditSource( const RichTextEditSource& _rSource ); // never implemented - RichTextEditSource& operator=( const RichTextEditSource& ); // never implemented - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_RICHTEXTUNOWRAPPER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextvclcontrol.cxx b/forms/source/richtext/richtextvclcontrol.cxx deleted file mode 100644 index 7e0261a14..000000000 --- a/forms/source/richtext/richtextvclcontrol.cxx +++ /dev/null @@ -1,394 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "richtextvclcontrol.hxx" -#include "richtextimplcontrol.hxx" -#include <svl/itempool.hxx> -#include <svl/itemset.hxx> -#include <svl/languageoptions.hxx> -#if OSL_DEBUG_LEVEL > 0 - #ifndef _TOOLS_TEMPFILE_HXX - #include <tools/tempfile.hxx> - #endif - #ifndef _UNTOOLS_UCBSTREAMHELPER_HXX - #include <unotools/ucbstreamhelper.hxx> - #endif - #ifndef _SV_MSGBOX_HXX - #include <vcl/msgbox.hxx> - #endif - #ifndef _FILEDLGHELPER_HXX - #include <sfx2/filedlghelper.hxx> - #endif - #ifndef _URLOBJ_HXX - #include <tools/urlobj.hxx> - #endif - #include "com/sun/star/ui/dialogs/TemplateDescription.hpp" -#endif -#include <editeng/scripttypeitem.hxx> -#include <editeng/editeng.hxx> -#include <editeng/editview.hxx> -#include <editeng/eeitem.hxx> -#include <editeng/fontitem.hxx> -#include <editeng/fhgtitem.hxx> -#include <editeng/editids.hrc> -#include <svx/svxids.hrc> -#include <memory> - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::awt; - - //==================================================================== - //= RichTextControl - //==================================================================== - //-------------------------------------------------------------------- - RichTextControl::RichTextControl( RichTextEngine* _pEngine, Window* _pParent, WinBits _nStyle, - ITextAttributeListener* _pTextAttribListener, ITextSelectionListener* _pSelectionListener ) - :Control( _pParent, implInitStyle( _nStyle ) ) - ,m_pImpl( NULL ) - { - implInit( _pEngine, _pTextAttribListener, _pSelectionListener ); - } - - //-------------------------------------------------------------------- - void RichTextControl::implInit( RichTextEngine* _pEngine, ITextAttributeListener* _pTextAttribListener, ITextSelectionListener* _pSelectionListener ) - { - m_pImpl = new RichTextControlImpl( this, _pEngine, _pTextAttribListener, _pSelectionListener ); - SetCompoundControl( sal_True ); - } - - //-------------------------------------------------------------------- - RichTextControl::~RichTextControl( ) - { - delete m_pImpl; - } - - //-------------------------------------------------------------------- - AttributeState RichTextControl::getState( AttributeId _nAttributeId ) const - { - return m_pImpl->getAttributeState( _nAttributeId ); - } - - //-------------------------------------------------------------------- - void RichTextControl::executeAttribute( AttributeId _nAttributeId, const SfxPoolItem* _pArgument ) - { - SfxItemSet aToApplyAttributes( getView().GetEmptyItemSet() ); - if ( !m_pImpl->executeAttribute( getView().GetAttribs(), aToApplyAttributes, _nAttributeId, _pArgument, m_pImpl->getSelectedScriptType() ) ) - { - OSL_FAIL( "RichTextControl::executeAttribute: cannot handle the given attribute!" ); - return; - } - - applyAttributes( aToApplyAttributes ); - } - - //-------------------------------------------------------------------- - void RichTextControl::applyAttributes( const SfxItemSet& _rAttributesToApply ) - { - // apply - if ( HasChildPathFocus() ) - getView().HideCursor(); - - sal_Bool bOldUpdateMode = getEngine().GetUpdateMode(); // TODO: guard? - getEngine().SetUpdateMode( sal_False ); - - getView().SetAttribs( _rAttributesToApply ); - - getEngine().SetUpdateMode( bOldUpdateMode ); - getView().Invalidate(); - - if ( HasChildPathFocus() ) - getView().ShowCursor(); - - m_pImpl->updateAllAttributes(); - // TODO: maybe we should have a list of attributes which need to be updated - // (the handler for the just executed attribute should know) - } - - //-------------------------------------------------------------------- - void RichTextControl::enableAttributeNotification( AttributeId _nAttributeId, ITextAttributeListener* _pListener ) - { - m_pImpl->enableAttributeNotification( _nAttributeId, _pListener ); - } - - //-------------------------------------------------------------------- - void RichTextControl::disableAttributeNotification( AttributeId _nAttributeId ) - { - m_pImpl->disableAttributeNotification( _nAttributeId ); - } - - //-------------------------------------------------------------------- - bool RichTextControl::isMappableSlot( SfxSlotId _nSlotId ) - { - switch ( _nSlotId ) - { - case SID_ATTR_PARA_ADJUST_LEFT: - case SID_ATTR_PARA_ADJUST_CENTER: - case SID_ATTR_PARA_ADJUST_RIGHT: - case SID_ATTR_PARA_ADJUST_BLOCK: - case SID_SET_SUPER_SCRIPT: - case SID_SET_SUB_SCRIPT: - case SID_ATTR_PARA_LINESPACE_10: - case SID_ATTR_PARA_LINESPACE_15: - case SID_ATTR_PARA_LINESPACE_20: - case SID_ATTR_PARA_LEFT_TO_RIGHT: - case SID_ATTR_PARA_RIGHT_TO_LEFT: - case SID_TEXTDIRECTION_TOP_TO_BOTTOM: - case SID_TEXTDIRECTION_LEFT_TO_RIGHT: - case SID_ATTR_CHAR_LATIN_FONT: - case SID_ATTR_CHAR_LATIN_FONTHEIGHT: - case SID_ATTR_CHAR_LATIN_LANGUAGE: - case SID_ATTR_CHAR_LATIN_POSTURE: - case SID_ATTR_CHAR_LATIN_WEIGHT: - return true; - } - return false; - } - - //-------------------------------------------------------------------- - void RichTextControl::Resize() - { - m_pImpl->layoutWindow(); - Invalidate(); - } - - //-------------------------------------------------------------------- - void RichTextControl::GetFocus() - { - getViewport().GrabFocus(); - } - - //-------------------------------------------------------------------- - WinBits RichTextControl::implInitStyle( WinBits nStyle ) - { - if ( !( nStyle & WB_NOTABSTOP ) ) - nStyle |= WB_TABSTOP; - return nStyle; - } - - //-------------------------------------------------------------------- - void RichTextControl::StateChanged( StateChangedType _nStateChange ) - { - if ( _nStateChange == STATE_CHANGE_STYLE ) - { - SetStyle( implInitStyle( GetStyle() ) ); - m_pImpl->notifyStyleChanged(); - } - else if ( _nStateChange == STATE_CHANGE_ZOOM ) - { - m_pImpl->notifyZoomChanged(); - } - else if ( _nStateChange == STATE_CHANGE_INITSHOW ) - { - m_pImpl->notifyInitShow(); - } - Control::StateChanged( _nStateChange ); - } - - //-------------------------------------------------------------------- - long RichTextControl::PreNotify( NotifyEvent& _rNEvt ) - { - if ( IsWindowOrChild( _rNEvt.GetWindow() ) ) - { - if ( EVENT_KEYINPUT == _rNEvt.GetType() ) - { - const ::KeyEvent* pKeyEvent = _rNEvt.GetKeyEvent(); - - sal_uInt16 nCode = pKeyEvent->GetKeyCode().GetCode(); - sal_Bool bShift = pKeyEvent->GetKeyCode().IsShift(); - sal_Bool bCtrl = pKeyEvent->GetKeyCode().IsMod1(); - sal_Bool bAlt = pKeyEvent->GetKeyCode().IsMod2(); - if ( ( KEY_TAB == nCode ) && bCtrl && !bAlt ) - { - // Ctrl-Tab is used to step out of the control - // -> build a new key event without the Ctrl-key, and let the very base class handle it - KeyCode aNewCode( KEY_TAB, bShift, sal_False, sal_False, sal_False ); - ::KeyEvent aNewEvent( pKeyEvent->GetCharCode(), aNewCode ); - Control::KeyInput( aNewEvent ); - return 1; // handled - } - -#if OSL_DEBUG_LEVEL > 0 - if ( ( ( KEY_F12 == nCode ) - || ( KEY_F11 == nCode ) - ) - && bCtrl - && bAlt - ) - { - bool bLoad = KEY_F11 == nCode; - struct - { - const sal_Char* pDescription; - const sal_Char* pExtension; - EETextFormat eFormat; - } aExportFormats[] = - { - { "OASIS OpenDocument (*.xml)", "*.xml", EE_FORMAT_XML }, - { "HyperText Markup Language (*.html)", "*.html", EE_FORMAT_HTML }, - { "Rich Text format (*.rtf)", "*.rtf", EE_FORMAT_RTF }, - { "Text (*.txt)", "*.txt", EE_FORMAT_TEXT } - }; - - ::sfx2::FileDialogHelper aFP( bLoad ? com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE : com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_AUTOEXTENSION, 0, this ); - - for ( size_t i = 0; i < SAL_N_ELEMENTS( aExportFormats ); ++i ) - { - aFP.AddFilter( - String::CreateFromAscii( aExportFormats[i].pDescription ), - String::CreateFromAscii( aExportFormats[i].pExtension ) ); - } - ErrCode nResult = aFP.Execute(); - if ( nResult == 0 ) - { - String sFileName = aFP.GetPath(); - SvStream* pStream = ::utl::UcbStreamHelper::CreateStream( - sFileName, ( bLoad ? STREAM_READ : STREAM_WRITE | STREAM_TRUNC ) | STREAM_SHARE_DENYALL - ); - if ( pStream ) - { - EETextFormat eFormat = EE_FORMAT_XML; - String sFilter = aFP.GetCurrentFilter(); - for ( size_t i = 0; i < SAL_N_ELEMENTS( aExportFormats ); ++i ) - { - if ( sFilter.EqualsAscii( aExportFormats[i].pDescription ) ) - { - eFormat = aExportFormats[i].eFormat; - break; - } - } - if ( bLoad ) - { - INetURLObject aURL( sFileName ); - aURL.removeSegment(); - getEngine().Read( *pStream, aURL.GetMainURL( INetURLObject::NO_DECODE ), eFormat ); - } - else - { - getEngine().Write( *pStream, eFormat ); - } - } - DELETEZ( pStream ); - } - return 1; // handled - } -#endif - } - } - return Control::PreNotify( _rNEvt ); - } - - //-------------------------------------------------------------------- - long RichTextControl::Notify( NotifyEvent& _rNEvt ) - { - long nDone = 0; - if ( _rNEvt.GetType() == EVENT_COMMAND ) - { - const CommandEvent& rEvent = *_rNEvt.GetCommandEvent(); - nDone = m_pImpl->HandleCommand( rEvent ); - } - return nDone ? nDone : Control::Notify( _rNEvt ); - } - - //-------------------------------------------------------------------- - void RichTextControl::Draw( OutputDevice* _pDev, const Point& _rPos, const Size& _rSize, sal_uLong _nFlags ) - { - m_pImpl->Draw( _pDev, _rPos, _rSize, _nFlags ); - } - - //-------------------------------------------------------------------- - EditView& RichTextControl::getView() - { - return *m_pImpl->getView( RichTextControlImpl::GrantAccess() ); - } - - //-------------------------------------------------------------------- - const EditView& RichTextControl::getView() const - { - return *m_pImpl->getView( RichTextControlImpl::GrantAccess() ); - } - - //-------------------------------------------------------------------- - EditEngine& RichTextControl::getEngine() const - { - return *m_pImpl->getEngine( RichTextControlImpl::GrantAccess() ); - } - - //-------------------------------------------------------------------- - Window& RichTextControl::getViewport() const - { - return *m_pImpl->getViewport( RichTextControlImpl::GrantAccess() ); - } - - //-------------------------------------------------------------------- - void RichTextControl::SetReadOnly( bool _bReadOnly ) - { - m_pImpl->SetReadOnly( _bReadOnly ); - } - - //-------------------------------------------------------------------- - bool RichTextControl::IsReadOnly() const - { - return m_pImpl->IsReadOnly(); - } - - //-------------------------------------------------------------------- - void RichTextControl::SetBackgroundColor( ) - { - m_pImpl->SetBackgroundColor( ); - } - - //-------------------------------------------------------------------- - void RichTextControl::SetBackgroundColor( const Color& _rColor ) - { - m_pImpl->SetBackgroundColor( _rColor ); - } - - //-------------------------------------------------------------------- - void RichTextControl::SetHideInactiveSelection( bool _bHide ) - { - m_pImpl->SetHideInactiveSelection( _bHide ); - } - - //-------------------------------------------------------------------- - bool RichTextControl::GetHideInactiveSelection() const - { - return m_pImpl->GetHideInactiveSelection( ); - } - -//........................................................................ -} // namespace frm -//........................................................................ - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextvclcontrol.hxx b/forms/source/richtext/richtextvclcontrol.hxx deleted file mode 100644 index 51b21bbf9..000000000 --- a/forms/source/richtext/richtextvclcontrol.hxx +++ /dev/null @@ -1,143 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef FORMS_SOURCE_RICHTEXT_RICHTEXTVCLCONTROL_HXX -#define FORMS_SOURCE_RICHTEXT_RICHTEXTVCLCONTROL_HXX - -#include <vcl/dialog.hxx> -#include <vcl/fixed.hxx> -#include <vcl/button.hxx> -#include <vcl/toolbox.hxx> -#include <com/sun/star/awt/FontDescriptor.hpp> -#include "rtattributes.hxx" -#include "textattributelistener.hxx" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ - -class EditView; -class EditEngine; -class SfxItemSet; -//........................................................................ -namespace frm -{ -//........................................................................ - - class RichTextControlImpl; - class RichTextEngine; - //==================================================================== - //= RichTextControl - //==================================================================== - class RichTextControl : public Control, public IMultiAttributeDispatcher - { - private: - RichTextControlImpl* m_pImpl; - - public: - RichTextControl( - RichTextEngine* _pEngine, - Window* _pParent, - WinBits _nStyle, - ITextAttributeListener* _pTextAttribListener, - ITextSelectionListener* _pSelectionListener - ); - - ~RichTextControl( ); - - /* enables the change notifications for a particular attribute - - If you want to be notified of any changes in the state of an attribute, you need to call enableAttributeNotification. - - If you provide a dedicated listener for this attribute, this listener is called for every change in the state of - the attribute. - - No matter whether you provide such a dedicated listener, the "global" listener which you specified - in the constructor of the control is also called for all changes in the attribute state. - - If you previously already enabled the notification for this attribute, and specified a different listener, - then the previous listener will be replaced with the new listener, provided the latter is not <NULL/>. - */ - void enableAttributeNotification( AttributeId _nAttributeId, ITextAttributeListener* _pListener = NULL ); - - /** disables the change notifications for a particular attribute - - If there was a listener dedicated to this attribute, it will not be referenced and used anymore - after this method had been called - */ - void disableAttributeNotification( AttributeId _nAttributeId ); - - /** determines whether a given slot can be mapped to an aspect of an attribute of the EditEngine - - E.g. SID_ATTR_PARA_ADJUST_LEFT can, though it's not part of the EditEngine pool, be mapped - to the SID_ATTR_PARA_ADJUST slot, which in fact *is* usable with the EditEngine. - */ - static bool isMappableSlot( SfxSlotId _nSlotId ); - - // IMultiAttributeDispatcher - virtual AttributeState getState( AttributeId _nAttributeId ) const; - virtual void executeAttribute( AttributeId _nAttributeId, const SfxPoolItem* _pArgument ); - - void SetBackgroundColor( ); - void SetBackgroundColor( const Color& _rColor ); - - void SetReadOnly( bool _bReadOnly ); - bool IsReadOnly() const; - - void SetHideInactiveSelection( bool _bHide ); - bool GetHideInactiveSelection() const; - - const EditView& getView() const; - EditView& getView(); - - // Window overridables - virtual void Draw( OutputDevice* _pDev, const Point& _rPos, const Size& _rSize, sal_uLong _nFlags ); - - protected: - // Window overridables - virtual void Resize(); - virtual void GetFocus(); - virtual void StateChanged( StateChangedType nStateChange ); - virtual long PreNotify( NotifyEvent& _rNEvt ); - virtual long Notify( NotifyEvent& _rNEvt ); - - private: - void applyAttributes( const SfxItemSet& _rAttributesToApply ); - void implInit( RichTextEngine* _pEngine, ITextAttributeListener* _pTextAttribListener, ITextSelectionListener* _pSelectionListener ); - static WinBits implInitStyle( WinBits nStyle ); - - private: - EditEngine& getEngine() const; - Window& getViewport() const; - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_RICHTEXTVCLCONTROL_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextviewport.cxx b/forms/source/richtext/richtextviewport.cxx deleted file mode 100644 index 1743f3cd2..000000000 --- a/forms/source/richtext/richtextviewport.cxx +++ /dev/null @@ -1,130 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "richtextviewport.hxx" -#include <editeng/editview.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= RichTextViewPort - //==================================================================== - //-------------------------------------------------------------------- - RichTextViewPort::RichTextViewPort( Window* _pParent ) - :Control ( _pParent ) - ,m_bHideInactiveSelection( true ) - { - } - - //-------------------------------------------------------------------- - void RichTextViewPort::setView( EditView& _rView ) - { - m_pView = &_rView; - SetPointer( _rView.GetPointer() ); - } - - //-------------------------------------------------------------------- - void RichTextViewPort::Paint( const Rectangle& _rRect ) - { - m_pView->Paint( _rRect ); - } - - //-------------------------------------------------------------------- - void RichTextViewPort::GetFocus() - { - Control::GetFocus(); - m_pView->SetSelectionMode( EE_SELMODE_STD ); - m_pView->ShowCursor( sal_True ); - } - - //-------------------------------------------------------------------- - void RichTextViewPort::LoseFocus() - { - m_pView->HideCursor(); - m_pView->SetSelectionMode( m_bHideInactiveSelection ? EE_SELMODE_HIDDEN : EE_SELMODE_STD ); - Control::LoseFocus(); - } - - //-------------------------------------------------------------------- - void RichTextViewPort::KeyInput( const KeyEvent& _rKEvt ) - { - if ( !m_pView->PostKeyEvent( _rKEvt ) ) - Control::KeyInput( _rKEvt ); - else - implInvalidateAttributes(); - } - - //-------------------------------------------------------------------- - void RichTextViewPort::MouseMove( const MouseEvent& _rMEvt ) - { - Control::MouseMove( _rMEvt ); - m_pView->MouseMove( _rMEvt ); - } - - //-------------------------------------------------------------------- - void RichTextViewPort::MouseButtonDown( const MouseEvent& _rMEvt ) - { - Control::MouseButtonDown( _rMEvt ); - m_pView->MouseButtonDown( _rMEvt ); - GrabFocus(); - } - - //-------------------------------------------------------------------- - void RichTextViewPort::MouseButtonUp( const MouseEvent& _rMEvt ) - { - Control::MouseButtonUp( _rMEvt ); - m_pView->MouseButtonUp( _rMEvt ); - implInvalidateAttributes(); - } - - //-------------------------------------------------------------------- - void RichTextViewPort::SetHideInactiveSelection( bool _bHide ) - { - if ( m_bHideInactiveSelection == _bHide ) - return; - m_bHideInactiveSelection = _bHide; - if ( !HasFocus() ) - m_pView->SetSelectionMode( m_bHideInactiveSelection ? EE_SELMODE_HIDDEN : EE_SELMODE_STD ); - } - - //-------------------------------------------------------------------- - bool RichTextViewPort::GetHideInactiveSelection() const - { - return m_bHideInactiveSelection; - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/richtextviewport.hxx b/forms/source/richtext/richtextviewport.hxx deleted file mode 100644 index b99320c06..000000000 --- a/forms/source/richtext/richtextviewport.hxx +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef FORMS_SOURCE_RICHTEXT_RICHTEXTVIEWPORT_HXX -#define FORMS_SOURCE_RICHTEXT_RICHTEXTVIEWPORT_HXX - -#include <vcl/ctrl.hxx> - -class EditView; -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= RichTextViewPort - //==================================================================== - class RichTextViewPort : public Control - { - private: - EditView* m_pView; - Link m_aInvalidationHandler; - bool m_bHideInactiveSelection; - - public: - RichTextViewPort( Window* _pParent ); - - void setView( EditView& _rView ); - - inline void setAttributeInvalidationHandler( const Link& _rHandler ) { m_aInvalidationHandler = _rHandler; } - - void SetHideInactiveSelection( bool _bHide ); - bool GetHideInactiveSelection() const; - - protected: - virtual void Paint( const Rectangle& rRect ); - virtual void GetFocus(); - virtual void LoseFocus(); - virtual void KeyInput( const KeyEvent& _rKEvt ); - virtual void MouseMove( const MouseEvent& _rMEvt ); - virtual void MouseButtonDown( const MouseEvent& _rMEvt ); - virtual void MouseButtonUp( const MouseEvent& _rMEvt ); - - private: - inline void implInvalidateAttributes() const - { - if ( m_aInvalidationHandler.IsSet() ) - m_aInvalidationHandler.Call( NULL ); - } - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_RICHTEXTVIEWPORT_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/rtattributehandler.cxx b/forms/source/richtext/rtattributehandler.cxx deleted file mode 100644 index 105f4fb28..000000000 --- a/forms/source/richtext/rtattributehandler.cxx +++ /dev/null @@ -1,533 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "rtattributehandler.hxx" - -#include <svx/svxids.hrc> -#include <editeng/eeitem.hxx> -#include <svl/itemset.hxx> -#include <svl/itempool.hxx> -#include <tools/mapunit.hxx> -#include <vcl/mapmod.hxx> -#include <vcl/outdev.hxx> - -#define ITEMID_ADJUST EE_PARA_JUST -#include <editeng/adjitem.hxx> -#define ITEMID_WEIGHT EE_CHAR_WEIGHT -#include <editeng/wghtitem.hxx> -#define ITEMID_ESCAPEMENT EE_CHAR_ESCAPEMENT -#include <editeng/escpitem.hxx> -#define ITEMID_LINESPACING EE_PARA_SBL -#include <editeng/lspcitem.hxx> -#define ITEMID_FONTHEIGHT EE_CHAR_FONTHEIGHT -#include <editeng/fhgtitem.hxx> -#define ITEMID_FRAMEDIR EE_PARA_WRITINGDIR -#include <editeng/frmdiritem.hxx> -#include <editeng/scripttypeitem.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - //==================================================================== - //= ReferenceBase - //==================================================================== - //-------------------------------------------------------------------- - oslInterlockedCount SAL_CALL ReferenceBase::acquire() - { - return osl_incrementInterlockedCount( &m_refCount ); - } - - //-------------------------------------------------------------------- - oslInterlockedCount SAL_CALL ReferenceBase::release() - { - return osl_decrementInterlockedCount( &m_refCount ); - } - - //-------------------------------------------------------------------- - ReferenceBase::~ReferenceBase() - { - } - - //==================================================================== - //= AttributeHandler - //==================================================================== - //-------------------------------------------------------------------- - AttributeHandler::AttributeHandler( AttributeId _nAttributeId, WhichId _nWhichId ) - :m_nAttribute( _nAttributeId ) - ,m_nWhich ( _nWhichId ) - { - } - - //-------------------------------------------------------------------- - AttributeHandler::~AttributeHandler() - { - } - - //-------------------------------------------------------------------- - oslInterlockedCount SAL_CALL AttributeHandler::acquire() - { - return ReferenceBase::acquire(); - } - - //-------------------------------------------------------------------- - oslInterlockedCount SAL_CALL AttributeHandler::release() - { - return ReferenceBase::release(); - } - - //-------------------------------------------------------------------- - AttributeId AttributeHandler::getAttributeId( ) const - { - return getAttribute(); - } - - //-------------------------------------------------------------------- - AttributeCheckState AttributeHandler::implGetCheckState( const SfxPoolItem& /*_rItem*/ ) const - { - OSL_FAIL( "AttributeHandler::implGetCheckState: not to be called!" ); - return eIndetermined; - } - - //-------------------------------------------------------------------- - void AttributeHandler::putItemForScript( SfxItemSet& _rAttribs, const SfxPoolItem& _rItem, ScriptType _nForScriptType ) const - { - SvxScriptSetItem aSetItem( (WhichId)getAttributeId(), *_rAttribs.GetPool() ); - aSetItem.PutItemForScriptType( _nForScriptType, _rItem ); - _rAttribs.Put( aSetItem.GetItemSet(), sal_False ); - } - - //-------------------------------------------------------------------- - AttributeCheckState AttributeHandler::getCheckState( const SfxItemSet& _rAttribs ) const - { - AttributeCheckState eSimpleState( eIndetermined ); - const SfxPoolItem* pItem = _rAttribs.GetItem( getWhich() ); - if ( pItem ) - eSimpleState = implGetCheckState( *pItem ); - return eSimpleState; - } - - //-------------------------------------------------------------------- - AttributeState AttributeHandler::getState( const SfxItemSet& _rAttribs ) const - { - AttributeState aState( eIndetermined ); - aState.eSimpleState = getCheckState( _rAttribs ); - return aState; - } - - //==================================================================== - //= AttributeHandlerFactory - //==================================================================== - //-------------------------------------------------------------------- - namespace - { - static WhichId lcl_implGetWhich( const SfxItemPool& _rPool, AttributeId _nAttributeId ) - { - WhichId nWhich = 0; - switch ( _nAttributeId ) - { - case SID_ATTR_CHAR_LATIN_FONTHEIGHT:nWhich = EE_CHAR_FONTHEIGHT;break; - case SID_ATTR_CHAR_LATIN_FONT: nWhich = EE_CHAR_FONTINFO; break; - case SID_ATTR_CHAR_LATIN_LANGUAGE: nWhich = EE_CHAR_LANGUAGE; break; - case SID_ATTR_CHAR_LATIN_POSTURE: nWhich = EE_CHAR_ITALIC; break; - case SID_ATTR_CHAR_LATIN_WEIGHT: nWhich = EE_CHAR_WEIGHT; break; - - default: - nWhich = _rPool.GetWhich( (SfxSlotId)_nAttributeId ); - } - return nWhich; - } - } - //-------------------------------------------------------------------- - ::rtl::Reference< IAttributeHandler > AttributeHandlerFactory::getHandlerFor( AttributeId _nAttributeId, const SfxItemPool& _rEditEnginePool ) - { - ::rtl::Reference< IAttributeHandler > pReturn; - switch ( _nAttributeId ) - { - case SID_ATTR_PARA_ADJUST_LEFT : - case SID_ATTR_PARA_ADJUST_CENTER: - case SID_ATTR_PARA_ADJUST_RIGHT : - case SID_ATTR_PARA_ADJUST_BLOCK : - pReturn = new ParaAlignmentHandler( _nAttributeId ); - break; - - case SID_ATTR_PARA_LINESPACE_10: - case SID_ATTR_PARA_LINESPACE_15: - case SID_ATTR_PARA_LINESPACE_20: - pReturn = new LineSpacingHandler( _nAttributeId ); - break; - - case SID_SET_SUPER_SCRIPT: - case SID_SET_SUB_SCRIPT: - pReturn = new EscapementHandler( _nAttributeId ); - break; - - case SID_ATTR_CHAR_FONTHEIGHT: - case SID_ATTR_CHAR_CTL_FONTHEIGHT: - case SID_ATTR_CHAR_CJK_FONTHEIGHT: - case SID_ATTR_CHAR_LATIN_FONTHEIGHT: - pReturn = new FontSizeHandler( _nAttributeId, lcl_implGetWhich( _rEditEnginePool, _nAttributeId ) ); - break; - - case SID_ATTR_PARA_LEFT_TO_RIGHT: - case SID_ATTR_PARA_RIGHT_TO_LEFT: - pReturn = new ParagraphDirectionHandler( _nAttributeId ); - break; - - case SID_ATTR_PARA_HANGPUNCTUATION: - case SID_ATTR_PARA_FORBIDDEN_RULES: - case SID_ATTR_PARA_SCRIPTSPACE: - pReturn = new BooleanHandler( _nAttributeId, lcl_implGetWhich( _rEditEnginePool, _nAttributeId ) ); - break; - - default: - pReturn = new SlotHandler( (SfxSlotId)_nAttributeId, lcl_implGetWhich( _rEditEnginePool, _nAttributeId ) ); - break; - - } - - return pReturn; - } - - //==================================================================== - //= ParaAlignmentHandler - //==================================================================== - //-------------------------------------------------------------------- - ParaAlignmentHandler::ParaAlignmentHandler( AttributeId _nAttributeId ) - :AttributeHandler( _nAttributeId, EE_PARA_JUST ) - ,m_eAdjust( SVX_ADJUST_CENTER ) - { - switch ( getAttribute() ) - { - case SID_ATTR_PARA_ADJUST_LEFT : m_eAdjust = SVX_ADJUST_LEFT; break; - case SID_ATTR_PARA_ADJUST_CENTER: m_eAdjust = SVX_ADJUST_CENTER; break; - case SID_ATTR_PARA_ADJUST_RIGHT : m_eAdjust = SVX_ADJUST_RIGHT; break; - case SID_ATTR_PARA_ADJUST_BLOCK : m_eAdjust = SVX_ADJUST_BLOCK; break; - default: - OSL_FAIL( "ParaAlignmentHandler::ParaAlignmentHandler: invalid slot!" ); - break; - } - } - - //-------------------------------------------------------------------- - AttributeCheckState ParaAlignmentHandler::implGetCheckState( const SfxPoolItem& _rItem ) const - { - OSL_ENSURE( _rItem.ISA( SvxAdjustItem ), "ParaAlignmentHandler::implGetCheckState: invalid pool item!" ); - SvxAdjust eAdjust = static_cast< const SvxAdjustItem& >( _rItem ).GetAdjust(); - return ( eAdjust == m_eAdjust ) ? eChecked : eUnchecked; - } - - //-------------------------------------------------------------------- - void ParaAlignmentHandler::executeAttribute( const SfxItemSet& /*_rCurrentAttribs*/, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType /*_nForScriptType*/ ) const - { - OSL_ENSURE( !_pAdditionalArg, "ParaAlignmentHandler::executeAttribute: this is a simple toggle attribute - no args possible!" ); - (void)_pAdditionalArg; - _rNewAttribs.Put( SvxAdjustItem( m_eAdjust, getWhich() ) ); - } - - //==================================================================== - //= LineSpacingHandler - //==================================================================== - //-------------------------------------------------------------------- - LineSpacingHandler::LineSpacingHandler( AttributeId _nAttributeId ) - :AttributeHandler( _nAttributeId, EE_PARA_SBL ) - ,m_nLineSpace( 100 ) - { - switch ( getAttribute() ) - { - case SID_ATTR_PARA_LINESPACE_10: m_nLineSpace = 100; break; - case SID_ATTR_PARA_LINESPACE_15: m_nLineSpace = 150; break; - case SID_ATTR_PARA_LINESPACE_20: m_nLineSpace = 200; break; - default: - OSL_FAIL( "LineSpacingHandler::LineSpacingHandler: invalid slot!" ); - break; - } - } - - //-------------------------------------------------------------------- - AttributeCheckState LineSpacingHandler::implGetCheckState( const SfxPoolItem& _rItem ) const - { - OSL_ENSURE( _rItem.ISA( SvxLineSpacingItem ), "LineSpacingHandler::implGetCheckState: invalid pool item!" ); - sal_uInt16 nLineSpace = static_cast< const SvxLineSpacingItem& >( _rItem ).GetPropLineSpace(); - return ( nLineSpace == m_nLineSpace ) ? eChecked : eUnchecked; - } - - //-------------------------------------------------------------------- - void LineSpacingHandler::executeAttribute( const SfxItemSet& /*_rCurrentAttribs*/, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType /*_nForScriptType*/ ) const - { - OSL_ENSURE( !_pAdditionalArg, "LineSpacingHandler::executeAttribute: this is a simple toggle attribute - no args possible!" ); - (void)_pAdditionalArg; - - SvxLineSpacingItem aLineSpacing( m_nLineSpace, getWhich() ); - aLineSpacing.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO; - if ( 100 == m_nLineSpace ) - aLineSpacing.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF; - else - aLineSpacing.SetPropLineSpace( (sal_uInt8)m_nLineSpace ); - - _rNewAttribs.Put( aLineSpacing ); - } - - //==================================================================== - //= EscapementHandler - //==================================================================== - //-------------------------------------------------------------------- - EscapementHandler::EscapementHandler( AttributeId _nAttributeId ) - :AttributeHandler( _nAttributeId, EE_CHAR_ESCAPEMENT ) - ,m_eEscapement( SVX_ESCAPEMENT_OFF ) - { - switch ( getAttribute() ) - { - case SID_SET_SUPER_SCRIPT : m_eEscapement = SVX_ESCAPEMENT_SUPERSCRIPT; break; - case SID_SET_SUB_SCRIPT : m_eEscapement = SVX_ESCAPEMENT_SUBSCRIPT; break; - default: - OSL_FAIL( "EscapementHandler::EscapementHandler: invalid slot!" ); - break; - } - } - - //-------------------------------------------------------------------- - AttributeCheckState EscapementHandler::implGetCheckState( const SfxPoolItem& _rItem ) const - { - OSL_ENSURE( _rItem.ISA( SvxEscapementItem ), "EscapementHandler::getState: invalid pool item!" ); - SvxEscapement eEscapement = static_cast< const SvxEscapementItem& >( _rItem ).GetEscapement(); - return ( eEscapement == m_eEscapement ) ? eChecked : eUnchecked; - } - - //-------------------------------------------------------------------- - void EscapementHandler::executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType /*_nForScriptType*/ ) const - { - OSL_ENSURE( !_pAdditionalArg, "EscapementHandler::executeAttribute: this is a simple toggle attribute - no args possible!" ); - // well, in theory we could allow an SvxEscapementItem here, but this is not needed - (void)_pAdditionalArg; - - bool bIsChecked = getCheckState( _rCurrentAttribs ) == eChecked; - _rNewAttribs.Put( SvxEscapementItem( bIsChecked ? SVX_ESCAPEMENT_OFF : m_eEscapement, getWhich() ) ); - } - - //==================================================================== - //= SlotHandler - //==================================================================== - //-------------------------------------------------------------------- - SlotHandler::SlotHandler( AttributeId _nAttributeId, WhichId _nWhichId ) - :AttributeHandler( _nAttributeId, _nWhichId ) - ,m_bScriptDependent( false ) - { - m_bScriptDependent = ( SID_ATTR_CHAR_WEIGHT == _nAttributeId ) - || ( SID_ATTR_CHAR_POSTURE == _nAttributeId ) - || ( SID_ATTR_CHAR_FONT == _nAttributeId ); - } - - //-------------------------------------------------------------------- - AttributeState SlotHandler::getState( const SfxItemSet& _rAttribs ) const - { - AttributeState aState( eIndetermined ); - - const SfxPoolItem* pItem = _rAttribs.GetItem( getWhich() ); - if ( pItem ) - aState.setItem( pItem->Clone() ); - - return aState; - } - - //-------------------------------------------------------------------- - void SlotHandler::executeAttribute( const SfxItemSet& /*_rCurrentAttribs*/, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const - { - if ( _pAdditionalArg ) - { - SfxPoolItem* pCorrectWich = _pAdditionalArg->Clone(); - pCorrectWich->SetWhich( getWhich() ); - - if ( m_bScriptDependent ) - putItemForScript( _rNewAttribs, *pCorrectWich, _nForScriptType ); - else - _rNewAttribs.Put( *pCorrectWich ); - DELETEZ( pCorrectWich ); - } - else - OSL_FAIL( "SlotHandler::executeAttribute: need attributes to do something!" ); - } - - //==================================================================== - //= FontSizeHandler - //==================================================================== - //-------------------------------------------------------------------- - FontSizeHandler::FontSizeHandler( AttributeId _nAttributeId, WhichId _nWhichId ) - :AttributeHandler( _nAttributeId, _nWhichId ) - { - OSL_ENSURE( ( _nAttributeId == SID_ATTR_CHAR_FONTHEIGHT ) || ( _nAttributeId == SID_ATTR_CHAR_CTL_FONTHEIGHT ) - || ( _nAttributeId == SID_ATTR_CHAR_CJK_FONTHEIGHT ) || ( _nAttributeId == SID_ATTR_CHAR_LATIN_FONTHEIGHT ), - "FontSizeHandler::FontSizeHandler: invalid attribute id!" ); - } - - //-------------------------------------------------------------------- - AttributeState FontSizeHandler::getState( const SfxItemSet& _rAttribs ) const - { - AttributeState aState( eIndetermined ); - - const SfxPoolItem* pItem = _rAttribs.GetItem( getWhich() ); - const SvxFontHeightItem* pFontHeightItem = PTR_CAST( SvxFontHeightItem, pItem ); - OSL_ENSURE( pFontHeightItem || !pItem, "FontSizeHandler::getState: invalid item!" ); - if ( pFontHeightItem ) - { - // by definition, the item should have the unit twip - sal_uLong nHeight = pFontHeightItem->GetHeight(); - if ( _rAttribs.GetPool()->GetMetric( getWhich() ) != SFX_MAPUNIT_TWIP ) - { - nHeight = OutputDevice::LogicToLogic( - Size( 0, nHeight ), - MapMode( (MapUnit)( _rAttribs.GetPool()->GetMetric( getWhich() ) ) ), - MapMode( MAP_TWIP ) - ).Height(); - } - - SvxFontHeightItem* pNewItem = new SvxFontHeightItem( nHeight, 100, getWhich() ); - pNewItem->SetProp( pFontHeightItem->GetProp(), pFontHeightItem->GetPropUnit() ); - aState.setItem( pNewItem ); - } - - return aState; - } - - //-------------------------------------------------------------------- - void FontSizeHandler::executeAttribute( const SfxItemSet& /*_rCurrentAttribs*/, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const - { - const SvxFontHeightItem* pFontHeightItem = PTR_CAST( SvxFontHeightItem, _pAdditionalArg ); - OSL_ENSURE( pFontHeightItem, "FontSizeHandler::executeAttribute: need a FontHeightItem!" ); - - if ( pFontHeightItem ) - { - // corect measurement units - SfxMapUnit eItemMapUnit = pFontHeightItem->GetPropUnit(); (void)eItemMapUnit; - sal_uLong nHeight = pFontHeightItem->GetHeight(); - if ( _rNewAttribs.GetPool()->GetMetric( getWhich() ) != SFX_MAPUNIT_TWIP ) - { - nHeight = OutputDevice::LogicToLogic( - Size( 0, nHeight ), - MapMode( (MapUnit)( SFX_MAPUNIT_TWIP ) ), - MapMode( (MapUnit)( _rNewAttribs.GetPool()->GetMetric( getWhich() ) ) ) - ).Height(); - } - - SvxFontHeightItem aNewItem( nHeight, 100, getWhich() ); - aNewItem.SetProp( pFontHeightItem->GetProp(), pFontHeightItem->GetPropUnit() ); - - if ( ( getAttributeId() == SID_ATTR_CHAR_FONTHEIGHT ) && _nForScriptType ) - putItemForScript( _rNewAttribs, aNewItem, _nForScriptType ); - else - _rNewAttribs.Put( aNewItem ); - } - } - - //==================================================================== - //= ParagraphDirectionHandler - //==================================================================== - //-------------------------------------------------------------------- - ParagraphDirectionHandler::ParagraphDirectionHandler( AttributeId _nAttributeId ) - :AttributeHandler( _nAttributeId, EE_PARA_WRITINGDIR ) - ,m_eParagraphDirection( FRMDIR_HORI_LEFT_TOP ) - ,m_eDefaultAdjustment( SVX_ADJUST_RIGHT ) - ,m_eOppositeDefaultAdjustment( SVX_ADJUST_LEFT ) - { - switch ( getAttributeId() ) - { - case SID_ATTR_PARA_LEFT_TO_RIGHT: m_eParagraphDirection = FRMDIR_HORI_LEFT_TOP; m_eDefaultAdjustment = SVX_ADJUST_LEFT; break; - case SID_ATTR_PARA_RIGHT_TO_LEFT: m_eParagraphDirection = FRMDIR_HORI_RIGHT_TOP; m_eDefaultAdjustment = SVX_ADJUST_RIGHT; break; - default: - OSL_FAIL( "ParagraphDirectionHandler::ParagraphDirectionHandler: invalid attribute id!" ); - } - - if ( SVX_ADJUST_RIGHT == m_eDefaultAdjustment ) - m_eOppositeDefaultAdjustment = SVX_ADJUST_LEFT; - else - m_eOppositeDefaultAdjustment = SVX_ADJUST_RIGHT; - } - - //-------------------------------------------------------------------- - AttributeCheckState ParagraphDirectionHandler::implGetCheckState( const SfxPoolItem& _rItem ) const - { - OSL_ENSURE( _rItem.ISA( SvxFrameDirectionItem ), "ParagraphDirectionHandler::implGetCheckState: invalid pool item!" ); - SvxFrameDirection eDirection = static_cast< SvxFrameDirection >( static_cast< const SvxFrameDirectionItem& >( _rItem ).GetValue() ); - return ( eDirection == m_eParagraphDirection ) ? eChecked : eUnchecked; - } - - //-------------------------------------------------------------------- - void ParagraphDirectionHandler::executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* /*_pAdditionalArg*/, ScriptType /*_nForScriptType*/ ) const - { - _rNewAttribs.Put( SvxFrameDirectionItem( m_eParagraphDirection, getWhich() ) ); - - // if the current adjustment of the was the default adjustment for the *previous* text direction, - // then we toggle the adjustment, too - SvxAdjust eCurrentAdjustment = SVX_ADJUST_LEFT; - const SfxPoolItem* pCurrentAdjustment = NULL; - if ( SFX_ITEM_ON == _rCurrentAttribs.GetItemState( EE_PARA_JUST, sal_True, &pCurrentAdjustment ) ) - eCurrentAdjustment = static_cast< const SvxAdjustItem* >( pCurrentAdjustment )->GetAdjust(); - - if ( eCurrentAdjustment == m_eOppositeDefaultAdjustment ) - _rNewAttribs.Put( SvxAdjustItem( m_eDefaultAdjustment, EE_PARA_JUST ) ); - } - - //==================================================================== - //= BooleanHandler - //==================================================================== - //-------------------------------------------------------------------- - BooleanHandler::BooleanHandler( AttributeId _nAttributeId, WhichId _nWhichId ) - :AttributeHandler( _nAttributeId, _nWhichId ) - { - } - - //-------------------------------------------------------------------- - AttributeCheckState BooleanHandler::implGetCheckState( const SfxPoolItem& _rItem ) const - { - OSL_ENSURE( _rItem.ISA( SfxBoolItem ), "BooleanHandler::implGetCheckState: invalid item!" ); - if ( _rItem.ISA( SfxBoolItem ) ) - return static_cast< const SfxBoolItem& >( _rItem ).GetValue() ? eChecked : eUnchecked; - - return eIndetermined; - } - - //-------------------------------------------------------------------- - void BooleanHandler::executeAttribute( const SfxItemSet& /*_rCurrentAttribs*/, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType /*_nForScriptType*/ ) const - { - OSL_ENSURE( _pAdditionalArg && _pAdditionalArg->ISA( SfxBoolItem ), "BooleanHandler::executeAttribute: invalid argument!" ); - if ( _pAdditionalArg ) - { - SfxPoolItem* pCorrectWich = _pAdditionalArg->Clone(); - pCorrectWich->SetWhich( getWhich() ); - _rNewAttribs.Put( *pCorrectWich ); - DELETEZ( pCorrectWich ); - } - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/rtattributehandler.hxx b/forms/source/richtext/rtattributehandler.hxx deleted file mode 100644 index 4886fb391..000000000 --- a/forms/source/richtext/rtattributehandler.hxx +++ /dev/null @@ -1,242 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_COMPONENT_RTATTRIBUTEHANDLER_HXX -#define FORMS_SOURCE_COMPONENT_RTATTRIBUTEHANDLER_HXX - -#include "rtattributes.hxx" -#include <rtl/ref.hxx> -#include <editeng/svxenum.hxx> -#include <editeng/frmdir.hxx> - -class SfxItemSet; -class SfxPoolItem; -class SfxItemPool; -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= ReferenceBase - //==================================================================== - class ReferenceBase : public ::rtl::IReference - { - protected: - oslInterlockedCount m_refCount; - - public: - // IReference - virtual oslInterlockedCount SAL_CALL acquire(); - virtual oslInterlockedCount SAL_CALL release(); - - protected: - virtual ~ReferenceBase(); - }; - - //==================================================================== - //= IAttributeHandler - //==================================================================== - class IAttributeHandler : public ::rtl::IReference - { - public: - virtual AttributeId getAttributeId( ) const = 0; - virtual AttributeState getState( const SfxItemSet& _rAttribs ) const = 0; - virtual void executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const = 0; - }; - - //==================================================================== - //= AttributeHandler - //==================================================================== - class AttributeHandler :public ReferenceBase - ,public IAttributeHandler - { - private: - AttributeId m_nAttribute; - WhichId m_nWhich; - - protected: - AttributeId getAttribute() const { return m_nAttribute; } - WhichId getWhich() const { return m_nWhich; } - - public: - AttributeHandler( AttributeId _nAttributeId, WhichId _nWhichId ); - - // IAttributeHandler - virtual AttributeId getAttributeId( ) const; - virtual AttributeState getState( const SfxItemSet& _rAttribs ) const; - virtual void executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const = 0; - - protected: - /// helper method calling implGetCheckState - AttributeCheckState getCheckState( const SfxItemSet& _rAttribs ) const; - - /// helper method putting an item into a set, respecting a script type - void putItemForScript( SfxItemSet& _rAttribs, const SfxPoolItem& _rItem, ScriptType _nForScriptType ) const; - - // pseudo-abstract - virtual AttributeCheckState implGetCheckState( const SfxPoolItem& _rItem ) const; - - // disambiguate IReference - virtual oslInterlockedCount SAL_CALL acquire(); - virtual oslInterlockedCount SAL_CALL release(); - - protected: - virtual ~AttributeHandler(); - }; - - //==================================================================== - //= AttributeHandlerFactory - //==================================================================== - class AttributeHandlerFactory - { - public: - static ::rtl::Reference< IAttributeHandler > getHandlerFor( AttributeId _nAttributeId, const SfxItemPool& _rEditEnginePool ); - - private: - AttributeHandlerFactory(); // never implemented - AttributeHandlerFactory( const AttributeHandlerFactory& ); // never implemented - AttributeHandlerFactory& operator=( const AttributeHandlerFactory& ); // never implemented - ~AttributeHandlerFactory(); // never implemented - }; - - //==================================================================== - //= ParaAlignmentHandler - //==================================================================== - class ParaAlignmentHandler : public AttributeHandler - { - private: - SvxAdjust m_eAdjust; - - public: - ParaAlignmentHandler( AttributeId _nAttributeId ); - - public: - virtual AttributeCheckState implGetCheckState( const SfxPoolItem& _rItem ) const; - virtual void executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const; - }; - - //==================================================================== - //= LineSpacingHandler - //==================================================================== - class LineSpacingHandler : public AttributeHandler - { - private: - sal_uInt16 m_nLineSpace; - - public: - LineSpacingHandler( AttributeId _nAttributeId ); - - public: - virtual AttributeCheckState implGetCheckState( const SfxPoolItem& _rItem ) const; - virtual void executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const; - }; - - //==================================================================== - //= EscapementHandler - //==================================================================== - class EscapementHandler : public AttributeHandler - { - private: - SvxEscapement m_eEscapement; - - public: - EscapementHandler( AttributeId _nAttributeId ); - - public: - virtual AttributeCheckState implGetCheckState( const SfxPoolItem& _rItem ) const; - virtual void executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const; - }; - - //==================================================================== - //= SlotHandler - //==================================================================== - class SlotHandler : public AttributeHandler - { - private: - bool m_bScriptDependent; - - public: - SlotHandler( AttributeId _nAttributeId, WhichId _nWhichId ); - - public: - virtual AttributeState getState( const SfxItemSet& _rAttribs ) const; - virtual void executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const; - }; - - //==================================================================== - //= BooleanHandler - //==================================================================== - class BooleanHandler : public AttributeHandler - { - public: - BooleanHandler( AttributeId _nAttributeId, WhichId _nWhichId ); - - public: - virtual AttributeCheckState implGetCheckState( const SfxPoolItem& _rItem ) const; - virtual void executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const; - }; - - //==================================================================== - //= FontSizeHandler - //==================================================================== - class FontSizeHandler : public AttributeHandler - { - public: - FontSizeHandler( AttributeId _nAttributeId, WhichId _nWhichId ); - - public: - virtual AttributeState getState( const SfxItemSet& _rAttribs ) const; - virtual void executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const; - }; - - //==================================================================== - //= ParagraphDirectionHandler - //==================================================================== - class ParagraphDirectionHandler : public AttributeHandler - { - private: - SvxFrameDirection m_eParagraphDirection; - SvxAdjust m_eDefaultAdjustment; - SvxAdjust m_eOppositeDefaultAdjustment; - - public: - ParagraphDirectionHandler( AttributeId _nAttributeId ); - - public: - virtual AttributeCheckState implGetCheckState( const SfxPoolItem& _rItem ) const; - virtual void executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const; - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_COMPONENT_RTATTRIBUTEHANDLER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/rtattributes.hxx b/forms/source/richtext/rtattributes.hxx deleted file mode 100644 index c682fab35..000000000 --- a/forms/source/richtext/rtattributes.hxx +++ /dev/null @@ -1,174 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_RICHTEXT_RTATTRIBUTES_HXX -#define FORMS_SOURCE_RICHTEXT_RTATTRIBUTES_HXX - -#include <tools/solar.h> -#include <sal/types.h> -#include <svl/poolitem.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= misc - //==================================================================== - /// the id of an attribute - typedef sal_Int32 AttributeId; - /// the "which id" of an item in an SfxItemSet - typedef sal_uInt16 WhichId; - /// a SFX slot id - typedef sal_uInt16 SfxSlotId; - /// a script type - typedef sal_uInt16 ScriptType; - - //==================================================================== - //= AttributeCheckState - //==================================================================== - enum AttributeCheckState - { - eChecked, - eUnchecked, - eIndetermined - }; - - //==================================================================== - //= AttributeState - //==================================================================== - struct AttributeState - { - private: - SfxItemHandle* pItemHandle; - - public: - AttributeCheckState eSimpleState; - - //................................................................ - inline AttributeState( ); - inline explicit AttributeState( AttributeCheckState _eCheckState ); - inline AttributeState( const AttributeState& _rSource ); - - inline AttributeState& operator=( const AttributeState& _rSource ); - - inline bool operator==( const AttributeState& _rRHS ); - - inline const SfxPoolItem* getItem() const; - inline void setItem( const SfxPoolItem* _pItem ); - }; - - //==================================================================== - //= AttributeState (inline implementation) - //==================================================================== - //................................................................ - inline AttributeState::AttributeState( ) - :pItemHandle( NULL ) - ,eSimpleState( eIndetermined ) - { - } - - //................................................................ - inline AttributeState::AttributeState( AttributeCheckState _eCheckState ) - :pItemHandle( NULL ) - ,eSimpleState( _eCheckState ) - { - } - - //................................................................ - inline AttributeState::AttributeState( const AttributeState& _rSource ) - :pItemHandle( NULL ) - ,eSimpleState( eIndetermined ) - { - operator=( _rSource ); - } - - //................................................................ - inline AttributeState& AttributeState::operator=( const AttributeState& _rSource ) - { - if ( &_rSource == this ) - return *this; - - eSimpleState = _rSource.eSimpleState; - setItem( _rSource.getItem() ); - return *this; - } - - //................................................................ - inline const SfxPoolItem* AttributeState::getItem() const - { - return pItemHandle ? &pItemHandle->GetItem() : NULL; - } - - //................................................................ - inline void AttributeState::setItem( const SfxPoolItem* _pItem ) - { - if ( pItemHandle ) - delete pItemHandle; - if ( _pItem ) - pItemHandle = new SfxItemHandle( *const_cast< SfxPoolItem* >( _pItem ) ); - else - pItemHandle = NULL; - } - - //................................................................ - inline bool AttributeState::operator==( const AttributeState& _rRHS ) - { - if ( eSimpleState != _rRHS.eSimpleState ) - return false; - - if ( pItemHandle && !_rRHS.pItemHandle ) - return false; - - if ( !pItemHandle && _rRHS.pItemHandle ) - return false; - - if ( !pItemHandle && !_rRHS.pItemHandle ) - return true; - - return ( pItemHandle->GetItem() == _rRHS.pItemHandle->GetItem() ); - } - - //==================================================================== - //= IMultiAttributeDispatcher - //==================================================================== - class IMultiAttributeDispatcher - { - public: - virtual AttributeState getState( AttributeId _nAttributeId ) const = 0; - virtual void executeAttribute( AttributeId _nAttributeId, const SfxPoolItem* _pArgument ) = 0; - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_RTATTRIBUTES_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/specialdispatchers.cxx b/forms/source/richtext/specialdispatchers.cxx deleted file mode 100644 index f0eaa1842..000000000 --- a/forms/source/richtext/specialdispatchers.cxx +++ /dev/null @@ -1,200 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "specialdispatchers.hxx" -#include <editeng/editeng.hxx> -#include <editeng/editview.hxx> -#include <svx/svxids.hrc> -#define ITEMID_SCRIPTSPACE SID_ATTR_PARA_SCRIPTSPACE -#include <editeng/scriptspaceitem.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::util; - using namespace ::com::sun::star::frame; - using namespace ::com::sun::star::beans; - - //==================================================================== - //= OSelectAllDispatcher - //==================================================================== - //-------------------------------------------------------------------- - OSelectAllDispatcher::OSelectAllDispatcher( EditView& _rView, const URL& _rURL ) - :ORichTextFeatureDispatcher( _rView, _rURL ) - { - } - - //-------------------------------------------------------------------- - OSelectAllDispatcher::~OSelectAllDispatcher( ) - { - if ( !isDisposed() ) - { - acquire(); - dispose(); - } - } - - //-------------------------------------------------------------------- - void SAL_CALL OSelectAllDispatcher::dispatch( const URL& _rURL, const Sequence< PropertyValue >& /*_rArguments*/ ) throw (RuntimeException) - { - ::osl::MutexGuard aGuard( m_aMutex ); - OSL_ENSURE( _rURL.Complete == getFeatureURL().Complete, "OSelectAllDispatcher::dispatch: invalid URL!" ); - (void)_rURL; - - checkDisposed(); - - EditEngine* pEngine = getEditView() ? getEditView()->GetEditEngine() : NULL; - OSL_ENSURE( pEngine, "OSelectAllDispatcher::dispatch: no edit engine - but not yet disposed?" ); - if ( !pEngine ) - return; - - sal_uInt16 nParagraphs = pEngine->GetParagraphCount(); - if ( nParagraphs ) - { - sal_uInt16 nLastParaNumber = nParagraphs - 1; - xub_StrLen nParaLen = pEngine->GetTextLen( nLastParaNumber ); - getEditView()->SetSelection( ESelection( 0, 0, nLastParaNumber, nParaLen ) ); - } - } - - //-------------------------------------------------------------------- - FeatureStateEvent OSelectAllDispatcher::buildStatusEvent() const - { - FeatureStateEvent aEvent( ORichTextFeatureDispatcher::buildStatusEvent() ); - aEvent.IsEnabled = sal_True; - return aEvent; - } - - //==================================================================== - //= OParagraphDirectionDispatcher - //==================================================================== - //-------------------------------------------------------------------- - OParagraphDirectionDispatcher::OParagraphDirectionDispatcher( EditView& _rView, AttributeId _nAttributeId, const URL& _rURL, - IMultiAttributeDispatcher* _pMasterDispatcher ) - :OAttributeDispatcher( _rView, _nAttributeId, _rURL, _pMasterDispatcher ) - { - } - - //-------------------------------------------------------------------- - FeatureStateEvent OParagraphDirectionDispatcher::buildStatusEvent() const - { - FeatureStateEvent aEvent( OAttributeDispatcher::buildStatusEvent() ); - - EditEngine* pEngine = getEditView() ? getEditView()->GetEditEngine() : NULL; - OSL_ENSURE( pEngine, "OParagraphDirectionDispatcher::dispatch: no edit engine - but not yet disposed?" ); - if ( pEngine && pEngine->IsVertical() ) - aEvent.IsEnabled = sal_False; - - return aEvent; - } - - //==================================================================== - //= OTextDirectionDispatcher - //==================================================================== - //-------------------------------------------------------------------- - OTextDirectionDispatcher::OTextDirectionDispatcher( EditView& _rView, const URL& _rURL ) - :ORichTextFeatureDispatcher( _rView, _rURL ) - { - } - - //-------------------------------------------------------------------- - void SAL_CALL OTextDirectionDispatcher::dispatch( const URL& _rURL, const Sequence< PropertyValue >& /*_rArguments*/ ) throw (RuntimeException) - { - ::osl::MutexGuard aGuard( m_aMutex ); - OSL_ENSURE( _rURL.Complete == getFeatureURL().Complete, "OTextDirectionDispatcher::dispatch: invalid URL!" ); - (void)_rURL; - - checkDisposed(); - - EditEngine* pEngine = getEditView() ? getEditView()->GetEditEngine() : NULL; - OSL_ENSURE( pEngine, "OTextDirectionDispatcher::dispatch: no edit engine - but not yet disposed?" ); - if ( !pEngine ) - return; - - pEngine->SetVertical( !pEngine->IsVertical() ); - } - - //-------------------------------------------------------------------- - FeatureStateEvent OTextDirectionDispatcher::buildStatusEvent() const - { - FeatureStateEvent aEvent( ORichTextFeatureDispatcher::buildStatusEvent() ); - - EditEngine* pEngine = getEditView() ? getEditView()->GetEditEngine() : NULL; - OSL_ENSURE( pEngine, "OTextDirectionDispatcher::dispatch: no edit engine - but not yet disposed?" ); - - aEvent.IsEnabled = sal_True; - aEvent.State <<= (sal_Bool)( pEngine && pEngine->IsVertical() ); - - return aEvent; - } - - //==================================================================== - //= OAsianFontLayoutDispatcher - //==================================================================== - //-------------------------------------------------------------------- - OAsianFontLayoutDispatcher::OAsianFontLayoutDispatcher( EditView& _rView, AttributeId _nAttributeId, const URL& _rURL, IMultiAttributeDispatcher* _pMasterDispatcher ) - :OParametrizedAttributeDispatcher( _rView, _nAttributeId, _rURL, _pMasterDispatcher ) - { - } - - //-------------------------------------------------------------------- - const SfxPoolItem* OAsianFontLayoutDispatcher::convertDispatchArgsToItem( const Sequence< PropertyValue >& _rArguments ) - { - // look for the "Enable" parameter - const PropertyValue* pLookup = _rArguments.getConstArray(); - const PropertyValue* pLookupEnd = _rArguments.getConstArray() + _rArguments.getLength(); - while ( pLookup != pLookupEnd ) - { - if ( pLookup->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Enable" ) ) ) - break; - ++pLookup; - } - if ( pLookup != pLookupEnd ) - { - sal_Bool bEnable = sal_True; - OSL_VERIFY( pLookup->Value >>= bEnable ); - if ( m_nAttributeId == SID_ATTR_PARA_SCRIPTSPACE ) - return new SvxScriptSpaceItem( bEnable, (WhichId)m_nAttributeId ); - return new SfxBoolItem( (WhichId)m_nAttributeId, bEnable ); - } - - OSL_FAIL( "OAsianFontLayoutDispatcher::convertDispatchArgsToItem: did not find the one and only argument!" ); - return NULL; - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/specialdispatchers.hxx b/forms/source/richtext/specialdispatchers.hxx deleted file mode 100644 index e050f024a..000000000 --- a/forms/source/richtext/specialdispatchers.hxx +++ /dev/null @@ -1,116 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_RICHTEXT_SPECIALDISPATCHERS_HXX -#define FORMS_SOURCE_RICHTEXT_SPECIALDISPATCHERS_HXX - -#include "parametrizedattributedispatcher.hxx" - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= OSelectAllDispatcher - //==================================================================== - class OSelectAllDispatcher : public ORichTextFeatureDispatcher - { - public: - OSelectAllDispatcher( EditView& _rView, const ::com::sun::star::util::URL& _rURL ); - - protected: - ~OSelectAllDispatcher(); - - // XDispatch - virtual void SAL_CALL dispatch( const ::com::sun::star::util::URL& URL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& Arguments ) throw (::com::sun::star::uno::RuntimeException); - - // ORichTextFeatureDispatcher - virtual ::com::sun::star::frame::FeatureStateEvent buildStatusEvent() const; - }; - - //==================================================================== - //= OParagraphDirectionDispatcher - //==================================================================== - class OParagraphDirectionDispatcher : public OAttributeDispatcher - { - public: - OParagraphDirectionDispatcher( - EditView& _rView, - AttributeId _nAttributeId, - const ::com::sun::star::util::URL& _rURL, - IMultiAttributeDispatcher* _pMasterDispatcher - ); - - protected: - // ORichTextFeatureDispatcher - virtual ::com::sun::star::frame::FeatureStateEvent buildStatusEvent() const; - }; - - //==================================================================== - //= OTextDirectionDispatcher - //==================================================================== - class OTextDirectionDispatcher : public ORichTextFeatureDispatcher - { - public: - OTextDirectionDispatcher( EditView& _rView, const ::com::sun::star::util::URL& _rURL ); - - protected: - // XDispatch - virtual void SAL_CALL dispatch( const ::com::sun::star::util::URL& URL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& Arguments ) throw (::com::sun::star::uno::RuntimeException); - - // ORichTextFeatureDispatcher - virtual ::com::sun::star::frame::FeatureStateEvent buildStatusEvent() const; - }; - - //==================================================================== - //= OAsianFontLayoutDispatcher - //==================================================================== - class OAsianFontLayoutDispatcher : public OParametrizedAttributeDispatcher - { - public: - OAsianFontLayoutDispatcher( - EditView& _rView, - AttributeId _nAttributeId, - const ::com::sun::star::util::URL& _rURL, - IMultiAttributeDispatcher* _pMasterDispatcher - ); - - protected: - // OParametrizedAttributeDispatcher - virtual const SfxPoolItem* convertDispatchArgsToItem( - const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rArguments ); - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_SPECIALDISPATCHERS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/richtext/textattributelistener.hxx b/forms/source/richtext/textattributelistener.hxx deleted file mode 100644 index 2febc3a45..000000000 --- a/forms/source/richtext/textattributelistener.hxx +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef FORMS_SOURCE_RICHTEXT_TEXTATTRIBUTELISTENER_HXX -#define FORMS_SOURCE_RICHTEXT_TEXTATTRIBUTELISTENER_HXX - -#include "rtattributes.hxx" - -struct ESelection; -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= ITextAttributeListener - //==================================================================== - class ITextAttributeListener - { - public: - virtual void onAttributeStateChanged( AttributeId _nAttributeId, const AttributeState& _rState ) = 0; - }; - - //==================================================================== - //= ITextAttributeListener - //==================================================================== - class ITextSelectionListener - { - public: - virtual void onSelectionChanged( const ESelection& _rSelection ) = 0; - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_SOURCE_RICHTEXT_TEXTATTRIBUTELISTENER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/runtime/formoperations.cxx b/forms/source/runtime/formoperations.cxx deleted file mode 100644 index eb0f83902..000000000 --- a/forms/source/runtime/formoperations.cxx +++ /dev/null @@ -1,1742 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "formoperations.hxx" -#include "frm_strings.hxx" -#include "frm_resource.hxx" -#include "frm_resource.hrc" -#include "frm_module.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/ucb/AlreadyInitializedException.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> -#include <com/sun/star/form/runtime/FormFeature.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/awt/XControl.hpp> -#include <com/sun/star/form/XGrid.hpp> -#include <com/sun/star/form/XBoundControl.hpp> -#include <com/sun/star/form/XBoundComponent.hpp> -#include <com/sun/star/sdbcx/XRowLocate.hpp> -#include <com/sun/star/form/XConfirmDeleteListener.hpp> -#include <com/sun/star/sdb/RowChangeEvent.hpp> -#include <com/sun/star/sdb/RowChangeAction.hpp> -#include <com/sun/star/sdb/SQLFilterOperator.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/form/XReset.hpp> -#include <com/sun/star/beans/XMultiPropertySet.hpp> -#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> -#include <com/sun/star/util/XRefreshable.hpp> -/** === end UNO includes === **/ - -#include <connectivity/dbtools.hxx> -#include <connectivity/dbexception.hxx> -#include <vcl/svapp.hxx> -#include <vcl/stdtext.hxx> -#include <vcl/msgbox.hxx> -#include <vcl/waitobj.hxx> -#include <tools/diagnose_ex.h> -#include <comphelper/container.hxx> -#include <comphelper/property.hxx> -#include <comphelper/namedvaluecollection.hxx> -#include <cppuhelper/exc_hlp.hxx> -#include <osl/mutex.hxx> -#include <sal/macros.h> - -//-------------------------------------------------------------------------- -extern "C" void SAL_CALL createRegistryInfo_FormOperations() -{ - static ::frm::OMultiInstanceAutoRegistration< ::frm::FormOperations > aAutoRegistration; -} - -//........................................................................ -namespace frm -{ -//........................................................................ - - using ::dbtools::SQLExceptionInfo; - /** === begin UNO using === **/ - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::XComponentContext; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::XInterface; - using ::com::sun::star::sdbc::XRowSet; - using ::com::sun::star::sdbc::XResultSetUpdate; - using ::com::sun::star::form::runtime::XFormController; - using ::com::sun::star::form::runtime::XFeatureInvalidation; - using ::com::sun::star::form::runtime::FeatureState; - using ::com::sun::star::lang::IllegalArgumentException; - using ::com::sun::star::sdbc::SQLException; - using namespace ::com::sun::star::sdbc; - using ::com::sun::star::form::XForm; - using ::com::sun::star::ucb::AlreadyInitializedException; - using ::com::sun::star::util::XModifyBroadcaster; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::lang::EventObject; - using ::com::sun::star::beans::PropertyChangeEvent; - using ::com::sun::star::lang::XMultiServiceFactory; - using ::com::sun::star::lang::DisposedException; - using ::com::sun::star::beans::XPropertySet; - using ::com::sun::star::awt::XControl; - using ::com::sun::star::form::XGrid; - using ::com::sun::star::container::XIndexAccess; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::form::XBoundControl; - using ::com::sun::star::form::XBoundComponent; - using ::com::sun::star::sdbcx::XRowLocate; - using ::com::sun::star::form::XConfirmDeleteListener; - using ::com::sun::star::sdb::RowChangeEvent; - using namespace ::com::sun::star::sdb; - using ::com::sun::star::form::XReset; - using ::com::sun::star::beans::XMultiPropertySet; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::lang::WrappedTargetException; - using ::com::sun::star::beans::PropertyValue; - using ::com::sun::star::ui::dialogs::XExecutableDialog; - using ::com::sun::star::beans::NamedValue; - - using ::com::sun::star::util::XRefreshable; - using ::com::sun::star::awt::XControlModel; - /** === end UNO using === **/ - namespace FormFeature = ::com::sun::star::form::runtime::FormFeature; - namespace RowChangeAction = ::com::sun::star::sdb::RowChangeAction; - - //==================================================================== - //= FormOperations - //==================================================================== - //-------------------------------------------------------------------- - FormOperations::FormOperations( const Reference< XMultiServiceFactory >& _rxContext ) - :FormOperations_Base( m_aMutex ) - ,m_aContext( _rxContext ) - ,m_bInitializedParser( false ) - ,m_bActiveControlModified( false ) - ,m_bConstructed( false ) - #ifdef DBG_UTIL - ,m_nMethodNestingLevel( false ) - #endif - { - } - - //-------------------------------------------------------------------- - FormOperations::~FormOperations() - { - } - - //-------------------------------------------------------------------- - ::rtl::OUString FormOperations::getImplementationName_Static( ) throw(RuntimeException) - { - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.forms.FormOperations" ) ); - } - - //-------------------------------------------------------------------- - Sequence< ::rtl::OUString > FormOperations::getSupportedServiceNames_Static( ) throw(RuntimeException) - { - Sequence< ::rtl::OUString > aNames(1); - aNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.runtime.FormOperations" ) ); - return aNames; - } - - //-------------------------------------------------------------------- - Reference< XInterface > SAL_CALL FormOperations::Create(const Reference< XMultiServiceFactory >& _rxFactory ) - { - return *new FormOperations( _rxFactory ); - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::initialize( const Sequence< Any >& _arguments ) throw (Exception, RuntimeException) - { - if ( m_bConstructed ) - throw AlreadyInitializedException(); - - if ( _arguments.getLength() == 1 ) - { - Reference< XFormController > xController; - Reference< XForm > xForm; - if ( _arguments[0] >>= xController ) - createWithFormController( xController ); - else if ( _arguments[0] >>= xForm ) - createWithForm( xForm ); - else - throw IllegalArgumentException( ::rtl::OUString(), *this, 1 ); - return; - } - - throw IllegalArgumentException( ::rtl::OUString(), *this, 0 ); - } - - //-------------------------------------------------------------------- - ::rtl::OUString SAL_CALL FormOperations::getImplementationName( ) throw (RuntimeException) - { - return getImplementationName_Static(); - } - - //-------------------------------------------------------------------- - ::sal_Bool SAL_CALL FormOperations::supportsService( const ::rtl::OUString& _ServiceName ) throw (RuntimeException) - { - Sequence< ::rtl::OUString > aSupportedServiceNames( getSupportedServiceNames() ); - const ::rtl::OUString* pBegin = aSupportedServiceNames.getConstArray(); - const ::rtl::OUString* pEnd = aSupportedServiceNames.getConstArray() + aSupportedServiceNames.getLength(); - return ::std::find( pBegin, pEnd, _ServiceName ) != pEnd; - } - - //-------------------------------------------------------------------- - Sequence< ::rtl::OUString > SAL_CALL FormOperations::getSupportedServiceNames( ) throw (RuntimeException) - { - return getSupportedServiceNames_Static(); - } - - //-------------------------------------------------------------------- - Reference< XRowSet > SAL_CALL FormOperations::getCursor() throw (RuntimeException) - { - MethodGuard aGuard( *this ); - return m_xCursor; - } - - //-------------------------------------------------------------------- - Reference< XResultSetUpdate > SAL_CALL FormOperations::getUpdateCursor() throw (RuntimeException) - { - MethodGuard aGuard( *this ); - return m_xUpdateCursor; - } - - //-------------------------------------------------------------------- - Reference< XFormController > SAL_CALL FormOperations::getController() throw (RuntimeException) - { - MethodGuard aGuard( *this ); - return m_xController; - } - - //-------------------------------------------------------------------- - Reference< XFeatureInvalidation > SAL_CALL FormOperations::getFeatureInvalidation() throw (RuntimeException) - { - MethodGuard aGuard( *this ); - return m_xFeatureInvalidation; - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::setFeatureInvalidation( const Reference< XFeatureInvalidation > & _rxFeatureInvalidation ) throw (RuntimeException) - { - MethodGuard aGuard( *this ); - m_xFeatureInvalidation = _rxFeatureInvalidation; - } - - //-------------------------------------------------------------------- - FeatureState SAL_CALL FormOperations::getState( ::sal_Int16 _nFeature ) throw (RuntimeException) - { - MethodGuard aGuard( *this ); - - FeatureState aState; - aState.Enabled = sal_False; - - try - { - // some checks for basic pre-requisites - if ( !m_xLoadableForm.is() - || !m_xLoadableForm->isLoaded() - || !m_xCursorProperties.is() - ) - { - return aState; - } - - switch ( _nFeature ) - { - case FormFeature::MoveToFirst: - case FormFeature::MoveToPrevious: - aState.Enabled = impl_canMoveLeft_throw( ); - break; - - case FormFeature::MoveToNext: - aState.Enabled = impl_canMoveRight_throw(); - break; - - case FormFeature::MoveToLast: - aState.Enabled = impl_getRowCount_throw() && ( !m_xCursor->isLast() || impl_isInsertionRow_throw() ); - break; - - case FormFeature::DeleteRecord: - // already deleted ? - if ( m_xCursor->rowDeleted() ) - aState.Enabled = sal_False; - else - { - // allowed to delete the row ? - aState.Enabled = !impl_isInsertionRow_throw() && ::dbtools::canDelete( m_xCursorProperties ); - } - break; - - case FormFeature::MoveToInsertRow: - // if we are inserting we can move to the next row if the current record or control is modified - aState.Enabled = impl_isInsertionRow_throw() - ? impl_isModifiedRow_throw() || m_bActiveControlModified - : ::dbtools::canInsert( m_xCursorProperties ); - break; - - case FormFeature::ReloadForm: - { - // there must be an active connection - Reference< XRowSet > xCursorRowSet( m_xCursor, UNO_QUERY ); - aState.Enabled = ::dbtools::getConnection( xCursorRowSet ).is(); - - // and an active command - ::rtl::OUString sActiveCommand; - m_xCursorProperties->getPropertyValue( PROPERTY_ACTIVECOMMAND ) >>= sActiveCommand; - aState.Enabled &= sActiveCommand.getLength() > 0; - } - break; - - case FormFeature::RefreshCurrentControl: - { - Reference< XRefreshable > xControlModelRefresh( impl_getCurrentControlModel_throw(), UNO_QUERY ); - aState.Enabled = xControlModelRefresh.is(); - } - break; - - case FormFeature::SaveRecordChanges: - case FormFeature::UndoRecordChanges: - aState.Enabled = impl_isModifiedRow_throw() || m_bActiveControlModified; - break; - - case FormFeature::RemoveFilterAndSort: - if ( impl_isParseable_throw() && impl_hasFilterOrOrder_throw() ) - aState.Enabled = !impl_isInsertOnlyForm_throw(); - break; - - case FormFeature::SortAscending: - case FormFeature::SortDescending: - case FormFeature::AutoFilter: - if ( m_xController.is() && impl_isParseable_throw() ) - { - sal_Bool bIsDeleted = m_xCursor->rowDeleted(); - - if ( !bIsDeleted && !impl_isInsertOnlyForm_throw() ) - { - Reference< XPropertySet > xBoundField = impl_getCurrentBoundField_nothrow( ); - if ( xBoundField.is() ) - xBoundField->getPropertyValue( PROPERTY_SEARCHABLE ) >>= aState.Enabled; - } - } - break; - - case FormFeature::InteractiveSort: - case FormFeature::InteractiveFilter: - if ( impl_isParseable_throw() ) - aState.Enabled = !impl_isInsertOnlyForm_throw(); - break; - - case FormFeature::ToggleApplyFilter: - { - ::rtl::OUString sFilter; - m_xCursorProperties->getPropertyValue( PROPERTY_FILTER ) >>= sFilter; - if ( sFilter.getLength() ) - { - aState.State = m_xCursorProperties->getPropertyValue( PROPERTY_APPLYFILTER ); - aState.Enabled = !impl_isInsertOnlyForm_throw(); - } - else - aState.State <<= (sal_Bool)sal_False; - } - break; - - case FormFeature::MoveAbsolute: - { - sal_Int32 nPosition = m_xCursor->getRow(); - sal_Bool bIsNew = impl_isInsertionRow_throw(); - sal_Int32 nCount = impl_getRowCount_throw(); - sal_Bool bFinalCount = impl_isRowCountFinal_throw(); - - if ( ( nPosition >= 0 ) || bIsNew ) - { - if ( bFinalCount ) - { - // special case: there are no records at all, and we - // can't insert records -> disabled - if ( !nCount && !::dbtools::canInsert( m_xCursorProperties ) ) - { - aState.Enabled = sal_False; - } - else - { - if ( bIsNew ) - nPosition = ++nCount; - aState.State <<= (sal_Int32)nPosition; - aState.Enabled = sal_True; - } - } - else - { - aState.State <<= (sal_Int32)nPosition; - aState.Enabled = sal_True; - } - } - } - break; - - case FormFeature::TotalRecords: - { - sal_Bool bIsNew = impl_isInsertionRow_throw(); - sal_Int32 nCount = impl_getRowCount_throw(); - sal_Bool bFinalCount = impl_isRowCountFinal_throw(); - - if ( bIsNew ) - ++nCount; - - ::rtl::OUString sValue = ::rtl::OUString::valueOf( sal_Int32( nCount ) ); - if ( !bFinalCount ) - sValue += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" *") ); - - aState.State <<= sValue; - aState.Enabled = sal_True; - } - break; - - default: - OSL_FAIL( "FormOperations::getState: unknown feature id!" ); - break; - } - } - catch( const Exception& ) - { - OSL_FAIL( "FormOperations::getState: caught an exception!" ); - } - - return aState; - } - - //-------------------------------------------------------------------- - ::sal_Bool SAL_CALL FormOperations::isEnabled( ::sal_Int16 _nFeature ) throw (RuntimeException) - { - MethodGuard aGuard( *this ); - - FeatureState aState( getState( _nFeature ) ); - return aState.Enabled; - } - - //-------------------------------------------------------------------- - namespace - { - static bool lcl_needConfirmCommit( sal_Int32 _nFeature ) - { - return ( ( _nFeature == FormFeature::ReloadForm ) - || ( _nFeature == FormFeature::RemoveFilterAndSort ) - || ( _nFeature == FormFeature::ToggleApplyFilter ) - || ( _nFeature == FormFeature::SortAscending ) - || ( _nFeature == FormFeature::SortDescending ) - || ( _nFeature == FormFeature::AutoFilter ) - || ( _nFeature == FormFeature::InteractiveSort ) - || ( _nFeature == FormFeature::InteractiveFilter ) - ); - } - static bool lcl_requiresArguments( sal_Int32 _nFeature ) - { - return ( _nFeature == FormFeature::MoveAbsolute ); - } - static bool lcl_isExecutableFeature( sal_Int32 _nFeature ) - { - return ( _nFeature != FormFeature::TotalRecords ); - } - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::execute( ::sal_Int16 _nFeature ) throw (RuntimeException, IllegalArgumentException, SQLException, WrappedTargetException) - { - SolarMutexGuard aSolarGuard; - MethodGuard aGuard( *this ); - - if ( ( _nFeature != FormFeature::DeleteRecord ) && ( _nFeature != FormFeature::UndoRecordChanges ) ) - { - // if we have a controller, commit the current control - if ( m_xController.is() ) - if ( !impl_commitCurrentControl_throw() ) - return; - - // commit the current record - bool bCommitCurrentRecord = true; - // (but before, let the user confirm if necessary) - if ( impl_isModifiedRow_throw() ) - { - if ( lcl_needConfirmCommit( _nFeature ) ) - { - // TODO: shouldn't this be done with an interaction handler? - QueryBox aQuery( NULL, WB_YES_NO_CANCEL | WB_DEF_YES, FRM_RES_STRING( RID_STR_QUERY_SAVE_MODIFIED_ROW ) ); - switch ( aQuery.Execute() ) - { - case RET_NO: bCommitCurrentRecord = false; break; - case RET_CANCEL: return; - } - } - } - - if ( bCommitCurrentRecord && !impl_commitCurrentRecord_throw() ) - return; - } - - try - { - switch ( _nFeature ) - { - case FormFeature::MoveToFirst: - m_xCursor->first(); - break; - - case FormFeature::MoveToNext: - impl_moveRight_throw( ); - break; - - case FormFeature::MoveToPrevious: - impl_moveLeft_throw( ); - break; - - case FormFeature::MoveToLast: - { -/* - // TODO: re-implement this ..... - // run in an own thread if ... - // ... the data source is thread safe ... - sal_Bool bAllowOwnThread = sal_False; - if ( ::comphelper::hasProperty( PROPERTY_THREADSAFE, m_xCursorProperties ) ) - m_xCursorProperties->getPropertyValue( PROPERTY_THREADSAFE ) >>= bAllowOwnThread; - - // ... the record count is unknown - sal_Bool bNeedOwnThread sal_False; - if ( ::comphelper::hasProperty( PROPERTY_ROWCOUNTFINAL, m_xCursorProperties ) ) - m_xCursorProperties->getPropertyValue( PROPERTY_ROWCOUNTFINAL ) >>= bNeedOwnThread; - - if ( bNeedOwnThread && bAllowOwnThread ) - ; - else -*/ - m_xCursor->last(); - } - break; - - case FormFeature::ReloadForm: - if ( m_xLoadableForm.is() ) - { - WaitObject aWO( NULL ); - m_xLoadableForm->reload(); - - // refresh all controls in the form (and sub forms) which can be refreshed - // #i90914# - ::comphelper::IndexAccessIterator aIter( m_xLoadableForm ); - Reference< XInterface > xElement( aIter.Next() ); - while ( xElement.is() ) - { - Reference< XRefreshable > xRefresh( xElement, UNO_QUERY ); - if ( xRefresh.is() ) - xRefresh->refresh(); - xElement = aIter.Next(); - } - } - break; - - case FormFeature::RefreshCurrentControl: - { - Reference< XRefreshable > xControlModelRefresh( impl_getCurrentControlModel_throw(), UNO_QUERY ); - OSL_ENSURE( xControlModelRefresh.is(), "FormOperations::execute: how did you reach this?" ); - if ( xControlModelRefresh.is() ) - xControlModelRefresh->refresh(); - } - break; - - case FormFeature::DeleteRecord: - { - sal_uInt32 nCount = impl_getRowCount_throw(); - - // next position - sal_Bool bLeft = m_xCursor->isLast() && ( nCount > 1 ); - sal_Bool bRight= !m_xCursor->isLast(); - sal_Bool bSuccess = sal_False; - try - { - // ask for confirmation - Reference< XConfirmDeleteListener > xConfirmDelete( m_xController, UNO_QUERY ); - - if ( xConfirmDelete.is() ) - { - RowChangeEvent aEvent; - aEvent.Source = Reference< XInterface >( m_xCursor, UNO_QUERY ); - aEvent.Action = RowChangeAction::DELETE; - aEvent.Rows = 1; - bSuccess = xConfirmDelete->confirmDelete( aEvent ); - } - - // delete it - if ( bSuccess ) - m_xUpdateCursor->deleteRow(); - } - catch( const Exception& ) - { - bSuccess = sal_False; - } - - if ( bSuccess ) - { - if ( bLeft || bRight ) - m_xCursor->relative( bRight ? 1 : -1 ); - else - { - sal_Bool bCanInsert = ::dbtools::canInsert( m_xCursorProperties ); - // is it possible to insert another record? - if ( bCanInsert ) - m_xUpdateCursor->moveToInsertRow(); - else - // move record to update stati - m_xCursor->first(); - } - } - } - break; - - case FormFeature::SaveRecordChanges: - case FormFeature::UndoRecordChanges: - { - sal_Bool bInserting = impl_isInsertionRow_throw(); - - if ( FormFeature::UndoRecordChanges == _nFeature ) - { - if ( !bInserting ) - m_xUpdateCursor->cancelRowUpdates(); - - // reset all controls for this form - impl_resetAllControls_nothrow( ); - - if ( bInserting ) // back to insertion mode for this form - m_xUpdateCursor->moveToInsertRow(); - } - else - { - if ( bInserting ) - { - m_xUpdateCursor->insertRow(); - m_xCursor->last(); - } - else - m_xUpdateCursor->updateRow(); - } - } - break; - - case FormFeature::MoveToInsertRow: - // move to the last row before moving to the insert row - m_xCursor->last(); - m_xUpdateCursor->moveToInsertRow(); - break; - - case FormFeature::RemoveFilterAndSort: - { - // simultaneously reset Filter and Order property - Reference< XMultiPropertySet > xProperties( m_xCursorProperties, UNO_QUERY ); - OSL_ENSURE( xProperties.is(), "FormOperations::execute: no multi property access!" ); - if ( xProperties.is() ) - { - Sequence< ::rtl::OUString > aNames( 2 ); - aNames[0] = PROPERTY_FILTER; - aNames[1] = PROPERTY_SORT; - - Sequence< Any> aValues( 2 ); - aValues[0] <<= ::rtl::OUString(); - aValues[1] <<= ::rtl::OUString(); - - WaitObject aWO( NULL ); - xProperties->setPropertyValues( aNames, aValues ); - - if ( m_xLoadableForm.is() ) - m_xLoadableForm->reload(); - } - } - break; - - case FormFeature::ToggleApplyFilter: - if ( impl_commitCurrentControl_throw() && impl_commitCurrentRecord_throw() ) - { - // simply toggle the value - sal_Bool bApplied = sal_False; - m_xCursorProperties->getPropertyValue( PROPERTY_APPLYFILTER ) >>= bApplied; - m_xCursorProperties->setPropertyValue( PROPERTY_APPLYFILTER, makeAny( (sal_Bool)!bApplied ) ); - - // and reload - WaitObject aWO( NULL ); - m_xLoadableForm->reload(); - } - break; - - case FormFeature::SortAscending: - impl_executeAutoSort_throw( true ); - break; - - case FormFeature::SortDescending: - impl_executeAutoSort_throw( false ); - break; - - case FormFeature::AutoFilter: - impl_executeAutoFilter_throw(); - break; - - case FormFeature::InteractiveSort: - impl_executeFilterOrSort_throw( false ); - break; - - case FormFeature::InteractiveFilter: - impl_executeFilterOrSort_throw( true ); - break; - - default: - { - sal_uInt16 nErrorResourceId = RID_STR_FEATURE_UNKNOWN; - if ( lcl_requiresArguments( _nFeature ) ) - nErrorResourceId = RID_STR_FEATURE_REQUIRES_PARAMETERS; - else if ( !lcl_isExecutableFeature( _nFeature ) ) - nErrorResourceId = RID_STR_FEATURE_NOT_EXECUTABLE; - throw IllegalArgumentException( FRM_RES_STRING( nErrorResourceId ), *this, 1 ); - } - } // switch - } - catch( const RuntimeException& ) { throw; } - catch( const SQLException& ) { throw; } - catch( const IllegalArgumentException& ) { throw; } - catch( const Exception& ) - { - throw WrappedTargetException( ::rtl::OUString(), *const_cast< FormOperations* >( this ), ::cppu::getCaughtException() ); - } - - impl_invalidateAllSupportedFeatures_nothrow( aGuard ); - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::executeWithArguments( ::sal_Int16 _nFeature, const Sequence< NamedValue >& _rArguments ) throw (RuntimeException, IllegalArgumentException, SQLException, WrappedTargetException) - { - if ( !lcl_requiresArguments( _nFeature ) ) - { - execute( _nFeature ); - return; - } - - SolarMutexGuard aSolarGuard; - MethodGuard aGuard( *this ); - - // at the moment we have only one feature which supports execution parameters - if ( !lcl_isExecutableFeature( _nFeature ) ) - throw IllegalArgumentException( FRM_RES_STRING( RID_STR_FEATURE_NOT_EXECUTABLE ), *this, 1 ); - - switch ( _nFeature ) - { - case FormFeature::MoveAbsolute: - { - sal_Int32 nPosition = -1; - - ::comphelper::NamedValueCollection aArguments( _rArguments ); - aArguments.get_ensureType( "Position", nPosition ); - - if ( nPosition < 1 ) - nPosition = 1; - - try - { - // commit before doing anything else - if ( m_xController.is() && !impl_commitCurrentControl_throw() ) - return; - if ( !impl_commitCurrentRecord_throw() ) - return; - - sal_Int32 nCount = impl_getRowCount_throw(); - sal_Bool bFinalCount = impl_isRowCountFinal_throw(); - - if ( bFinalCount && ( (sal_Int32)nPosition > nCount ) ) - nPosition = nCount; - - m_xCursor->absolute( nPosition ); - } - catch( const RuntimeException& ) { throw; } - catch( const SQLException& ) { throw; } - catch( const Exception& ) - { - throw WrappedTargetException( ::rtl::OUString(), *this, ::cppu::getCaughtException() ); - } - } - break; - default: - throw IllegalArgumentException( FRM_RES_STRING( RID_STR_FEATURE_UNKNOWN ), *this, 1 ); - } // switch - } - - //-------------------------------------------------------------------- - ::sal_Bool SAL_CALL FormOperations::commitCurrentRecord( ::sal_Bool& _out_rRecordInserted ) throw (RuntimeException, SQLException) - { - MethodGuard aGuard( *this ); - _out_rRecordInserted = sal_False; - - return impl_commitCurrentRecord_throw( &_out_rRecordInserted ); - } - - //-------------------------------------------------------------------- - bool FormOperations::impl_commitCurrentRecord_throw( ::sal_Bool* _pRecordInserted ) const - { - DBG_ASSERT( m_nMethodNestingLevel, "FormOperations::impl_commitCurrentRecord_throw: to be called within a MethodGuard'ed section only!" ); - - if ( !impl_hasCursor_nothrow() ) - return false; - - // nothing to do if the record is not modified - sal_Bool bResult = !impl_isModifiedRow_throw(); - if ( !bResult ) - { - // insert respectively update the row - if ( impl_isInsertionRow_throw() ) - { - m_xUpdateCursor->insertRow(); - if ( _pRecordInserted ) - *_pRecordInserted = sal_True; - } - else - m_xUpdateCursor->updateRow(); - bResult = true; - } - return bResult; - } - - //-------------------------------------------------------------------- - ::sal_Bool SAL_CALL FormOperations::commitCurrentControl() throw (RuntimeException, SQLException) - { - MethodGuard aGuard( *this ); - return impl_commitCurrentControl_throw(); - } - - //-------------------------------------------------------------------- - bool FormOperations::impl_commitCurrentControl_throw() const - { - DBG_ASSERT( m_nMethodNestingLevel, "FormOperations::impl_commitCurrentRecord_throw: to be called within a MethodGuard'ed section only!" ); - OSL_PRECOND( m_xController.is(), "FormOperations::commitCurrentControl: no controller!" ); - if ( !m_xController.is() ) - return false; - - bool bSuccess = false; - try - { - Reference< XControl > xCurrentControl( m_xController->getCurrentControl() ); - - // check whether the control is locked - Reference< XBoundControl > xCheckLock( xCurrentControl, UNO_QUERY ); - sal_Bool bControlIsLocked = xCheckLock.is() && xCheckLock->getLock(); - - // commit if necessary - bSuccess = true; - if ( xCurrentControl.is() && !bControlIsLocked ) - { - // both the control and it's model can be committable, so try both - Reference< XBoundComponent > xBound( xCurrentControl, UNO_QUERY ); - if ( !xBound.is() ) - xBound = xBound.query( xCurrentControl->getModel() ); - // and now really commit - if ( xBound.is() ) - bSuccess = xBound->commit(); - } - - } - catch( const RuntimeException& ) { throw; } - catch( const SQLException& ) { throw; } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - bSuccess = false; - } - - return bSuccess; - } - - //-------------------------------------------------------------------- - ::sal_Bool SAL_CALL FormOperations::isInsertionRow() throw (RuntimeException, WrappedTargetException) - { - sal_Bool bIs = sal_False; - try - { - bIs = impl_isInsertionRow_throw(); - } - catch( const RuntimeException& ) { throw; } - catch( const Exception& ) - { - throw WrappedTargetException( ::rtl::OUString(), *this, ::cppu::getCaughtException() ); - } - return bIs; - } - - //-------------------------------------------------------------------- - ::sal_Bool SAL_CALL FormOperations::isModifiedRow() throw (RuntimeException, WrappedTargetException) - { - sal_Bool bIs = sal_False; - try - { - bIs = impl_isModifiedRow_throw(); - } - catch( const RuntimeException& ) { throw; } - catch( const Exception& ) - { - throw WrappedTargetException( ::rtl::OUString(), *this, ::cppu::getCaughtException() ); - } - return bIs; - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::cursorMoved( const EventObject& /*_Event*/ ) throw (RuntimeException) - { - MethodGuard aGuard( *this ); - m_bActiveControlModified = sal_False; - - impl_invalidateAllSupportedFeatures_nothrow( aGuard ); - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::rowChanged( const EventObject& /*_Event*/ ) throw (RuntimeException) - { - // not interested in - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::rowSetChanged( const EventObject& /*_Event*/ ) throw (RuntimeException) - { - // not interested in - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::modified( const EventObject& /*_Source*/ ) throw( RuntimeException ) - { - MethodGuard aGuard( *this ); - - OSL_ENSURE( m_xCursor.is(), "FormOperations::modified: already disposed!" ); - if ( !m_bActiveControlModified ) - { - m_bActiveControlModified = sal_True; - impl_invalidateModifyDependentFeatures_nothrow( aGuard ); - } - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::propertyChange( const PropertyChangeEvent& _rEvent ) throw (RuntimeException) - { - MethodGuard aGuard( *this ); - - if ( m_xCursor.is() && ( m_xCursor == _rEvent.Source ) ) - { - sal_Bool bIs = sal_False; - if ( ( _rEvent.PropertyName == PROPERTY_ISMODIFIED ) - || ( _rEvent.PropertyName == PROPERTY_ISNEW ) - ) - { - if ( ( _rEvent.NewValue >>= bIs ) && !bIs ) - m_bActiveControlModified = sal_False; - } - impl_invalidateAllSupportedFeatures_nothrow( aGuard ); - } - - if ( m_xParser.is() && ( m_xCursor == _rEvent.Source ) ) - { - try - { - ::rtl::OUString sNewValue; - _rEvent.NewValue >>= sNewValue; - if ( _rEvent.PropertyName == PROPERTY_ACTIVECOMMAND ) - { - m_xParser->setElementaryQuery( sNewValue ); - } - else if ( _rEvent.PropertyName == PROPERTY_FILTER ) - { - if ( m_xParser->getFilter() != sNewValue ) - m_xParser->setFilter( sNewValue ); - } - else if ( _rEvent.PropertyName == PROPERTY_SORT ) - { - _rEvent.NewValue >>= sNewValue; - if ( m_xParser->getOrder() != sNewValue ) - m_xParser->setOrder( sNewValue ); - } - } - catch( Exception& ) - { - OSL_FAIL( "FormOperations::propertyChange: caught an exception while updating the parser!" ); - } - impl_invalidateAllSupportedFeatures_nothrow( aGuard ); - } - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::disposing( const EventObject& /*_Source*/ ) throw (RuntimeException) - { - // TODO: should we react on this? Or is this the responsibility of our owner to dispose us? - } - - //-------------------------------------------------------------------- - void SAL_CALL FormOperations::disposing() - { - ::osl::MutexGuard aGuard( m_aMutex ); - - impl_disposeParser_nothrow(); - - try - { - // revoke various listeners - if ( m_xCursor.is() ) - m_xCursor->removeRowSetListener( this ); - - if ( m_xCursorProperties.is() ) - { - m_xCursorProperties->removePropertyChangeListener( PROPERTY_ISMODIFIED,this ); - m_xCursorProperties->removePropertyChangeListener( PROPERTY_ISNEW, this ); - } - - Reference< XModifyBroadcaster > xBroadcaster( m_xController, UNO_QUERY ); - if ( xBroadcaster.is() ) - xBroadcaster->removeModifyListener( this ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - - m_xController.clear(); - m_xCursor.clear(); - m_xUpdateCursor.clear(); - m_xCursorProperties.clear(); - m_xLoadableForm.clear(); - m_xFeatureInvalidation.clear(); - - m_bActiveControlModified = true; - } - - //-------------------------------------------------------------------- - void FormOperations::impl_checkDisposed_throw() const - { - if ( impl_isDisposed_nothrow() ) - throw DisposedException( ::rtl::OUString(), *const_cast< FormOperations* >( this ) ); - } - - //-------------------------------------------------------------------- - void FormOperations::impl_initFromController_throw() - { - OSL_PRECOND( m_xController.is(), "FormOperations::impl_initFromController_throw: invalid controller!" ); - m_xCursor = m_xCursor.query( m_xController->getModel() ); - if ( !m_xCursor.is() ) - throw IllegalArgumentException( ::rtl::OUString(), *this, 0 ); - - impl_initFromForm_throw(); - - Reference< XModifyBroadcaster > xBroadcaster( m_xController, UNO_QUERY ); - if ( xBroadcaster.is() ) - xBroadcaster->addModifyListener( this ); - } - - //-------------------------------------------------------------------- - void FormOperations::impl_initFromForm_throw() - { - OSL_PRECOND( m_xCursor.is(), "FormOperations::impl_initFromForm_throw: invalid form!" ); - m_xCursorProperties = m_xCursorProperties.query ( m_xCursor ); - m_xUpdateCursor = m_xUpdateCursor.query ( m_xCursor ); - m_xLoadableForm = m_xLoadableForm.query ( m_xCursor ); - - if ( !m_xCursor.is() || !m_xCursorProperties.is() || !m_xLoadableForm.is() ) - throw IllegalArgumentException( ::rtl::OUString(), *this, 0 ); - - m_xCursor->addRowSetListener( this ); - m_xCursorProperties->addPropertyChangeListener( PROPERTY_ISMODIFIED,this ); - m_xCursorProperties->addPropertyChangeListener( PROPERTY_ISNEW, this ); - } - - //-------------------------------------------------------------------- - void FormOperations::createWithFormController( const Reference< XFormController >& _rxController ) - { - m_xController = _rxController; - if ( !m_xController.is() ) - throw IllegalArgumentException( ::rtl::OUString(), *this, 0 ); - - impl_initFromController_throw(); - - m_bConstructed = true; - } - - //-------------------------------------------------------------------- - void FormOperations::createWithForm( const Reference< XForm >& _rxForm ) - { - m_xCursor = m_xCursor.query( _rxForm ); - if ( !m_xCursor.is() ) - throw IllegalArgumentException( ::rtl::OUString(), *this, 0 ); - - impl_initFromForm_throw(); - - m_bConstructed = true; - } - - //------------------------------------------------------------------------------ - void FormOperations::impl_invalidateAllSupportedFeatures_nothrow( MethodGuard& _rClearForCallback ) const - { - if ( !m_xFeatureInvalidation.is() ) - // nobody's interested in ... - return; - - Reference< XFeatureInvalidation > xInvalidation = m_xFeatureInvalidation; - _rClearForCallback.clear(); - xInvalidation->invalidateAllFeatures(); - } - - //------------------------------------------------------------------------------ - void FormOperations::impl_invalidateModifyDependentFeatures_nothrow( MethodGuard& _rClearForCallback ) const - { - if ( !m_xFeatureInvalidation.is() ) - // nobody's interested in ... - return; - - static Sequence< sal_Int16 > s_aModifyDependentFeatures; - if ( s_aModifyDependentFeatures.getLength() == 0 ) - { - sal_Int16 pModifyDependentFeatures[] = - { - FormFeature::MoveToNext, - FormFeature::MoveToInsertRow, - FormFeature::SaveRecordChanges, - FormFeature::UndoRecordChanges - }; - size_t nFeatureCount = SAL_N_ELEMENTS( pModifyDependentFeatures ); - s_aModifyDependentFeatures = Sequence< sal_Int16 >( pModifyDependentFeatures, nFeatureCount ); - } - - Reference< XFeatureInvalidation > xInvalidation = m_xFeatureInvalidation; - _rClearForCallback.clear(); - - xInvalidation->invalidateFeatures( s_aModifyDependentFeatures ); - } - - //-------------------------------------------------------------------- - void FormOperations::impl_ensureInitializedParser_nothrow() - { - OSL_PRECOND( m_xCursorProperties.is(), "FormOperations::impl_ensureInitializedParser_nothrow: we're disposed!" ); - if ( m_bInitializedParser ) - return; - - try - { - sal_Bool bUseEscapeProcessing = sal_False; - m_xCursorProperties->getPropertyValue( PROPERTY_ESCAPE_PROCESSING ) >>= bUseEscapeProcessing; - if ( bUseEscapeProcessing ) - { - Reference< XMultiServiceFactory > xFactory( ::dbtools::getConnection( m_xCursor ), UNO_QUERY ); - if ( xFactory.is() ) - { - m_xParser.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.SingleSelectQueryComposer" ) ) ), UNO_QUERY ); - OSL_ENSURE( m_xParser.is(), "FormOperations::impl_ensureInitializedParser_nothrow: factory did not create a parser for us!" ); - } - } - - if ( m_xParser.is() ) - { - if ( m_xLoadableForm.is() && m_xLoadableForm->isLoaded() ) - { - ::rtl::OUString sStatement; - ::rtl::OUString sFilter; - ::rtl::OUString sSort; - - m_xCursorProperties->getPropertyValue( PROPERTY_ACTIVECOMMAND ) >>= sStatement; - m_xCursorProperties->getPropertyValue( PROPERTY_FILTER ) >>= sFilter; - m_xCursorProperties->getPropertyValue( PROPERTY_SORT ) >>= sSort; - - m_xParser->setElementaryQuery( sStatement ); - m_xParser->setFilter ( sFilter ); - m_xParser->setOrder ( sSort ); - } - - // start listening at the order/sort properties at the form, so - // we can keep our parser in sync - m_xCursorProperties->addPropertyChangeListener( PROPERTY_ACTIVECOMMAND, this ); - m_xCursorProperties->addPropertyChangeListener( PROPERTY_FILTER, this ); - m_xCursorProperties->addPropertyChangeListener( PROPERTY_SORT, this ); - } - } - catch( const Exception& ) - { - OSL_FAIL( "FormOperations::impl_ensureInitializedParser_nothrow: caught an exception!" ); - } - - m_bInitializedParser = true; - } - - //-------------------------------------------------------------------- - void FormOperations::impl_disposeParser_nothrow() - { - try - { - // if we have a parser (and a cursor), then we're listening at the cursor's - // properties to keep the parser in sync with the cursor - if ( m_xParser.is() && m_xCursorProperties.is() ) - { - m_xCursorProperties->removePropertyChangeListener( PROPERTY_FILTER, this ); - m_xCursorProperties->removePropertyChangeListener( PROPERTY_ACTIVECOMMAND, this ); - m_xCursorProperties->removePropertyChangeListener( PROPERTY_SORT, this ); - } - - Reference< XComponent > xParserComp( m_xParser, UNO_QUERY ); - if ( xParserComp.is() ) - xParserComp->dispose(); - m_xParser.clear(); - - m_bInitializedParser = false; - } - catch( const Exception& ) - { - OSL_FAIL( "FormOperations::impl_disposeParser_nothrow: caught an exception!" ); - } - } - - //-------------------------------------------------------------------- - bool FormOperations::impl_canMoveLeft_throw( ) const - { - if ( !impl_hasCursor_nothrow() ) - return false; - - return impl_getRowCount_throw() && ( !m_xCursor->isFirst() || impl_isInsertionRow_throw() ); - } - - //-------------------------------------------------------------------- - bool FormOperations::impl_canMoveRight_throw( ) const - { - if ( !impl_hasCursor_nothrow() ) - return false; - - bool bIsNew = impl_isInsertionRow_throw(); - - if ( impl_getRowCount_throw() && !m_xCursor->isLast() && !bIsNew ) - return true; - - if ( ::dbtools::canInsert( m_xCursorProperties ) ) - if ( !bIsNew || impl_isModifiedRow_throw() ) - return true; - - if ( bIsNew && m_bActiveControlModified ) - return true; - - return false; - } - - //-------------------------------------------------------------------- - namespace - { - template < typename TYPE > - TYPE lcl_safeGetPropertyValue_throw( const Reference< XPropertySet >& _rxProperties, const ::rtl::OUString& _rPropertyName, TYPE _Default ) - { - TYPE value( _Default ); - OSL_PRECOND( _rxProperties.is(), "FormOperations::<foo>: no cursor (already disposed?)!" ); - if ( _rxProperties.is() ) - OSL_VERIFY( _rxProperties->getPropertyValue( _rPropertyName ) >>= value ); - return value; - } - } - - //-------------------------------------------------------------------- - bool FormOperations::impl_isInsertionRow_throw() const - { - return lcl_safeGetPropertyValue_throw( m_xCursorProperties, PROPERTY_ISNEW, false ); - } - - //-------------------------------------------------------------------- - sal_Int32 FormOperations::impl_getRowCount_throw() const - { - return lcl_safeGetPropertyValue_throw( m_xCursorProperties, PROPERTY_ROWCOUNT, (sal_Int32)0 ); - } - //-------------------------------------------------------------------- - bool FormOperations::impl_isRowCountFinal_throw() const - { - return lcl_safeGetPropertyValue_throw( m_xCursorProperties, PROPERTY_ROWCOUNTFINAL, false ); - } - - //-------------------------------------------------------------------- - bool FormOperations::impl_isModifiedRow_throw() const - { - return lcl_safeGetPropertyValue_throw( m_xCursorProperties, PROPERTY_ISMODIFIED, false ); - } - - //-------------------------------------------------------------------- - bool FormOperations::impl_isParseable_throw() const - { - const_cast< FormOperations* >( this )->impl_ensureInitializedParser_nothrow(); - return m_xParser.is() && m_xParser->getQuery().getLength(); - } - - //-------------------------------------------------------------------- - bool FormOperations::impl_hasFilterOrOrder_throw() const - { - return impl_isParseable_throw() && ( m_xParser->getFilter().getLength() || m_xParser->getOrder().getLength() ); - } - - //-------------------------------------------------------------------- - bool FormOperations::impl_isInsertOnlyForm_throw() const - { - return lcl_safeGetPropertyValue_throw( m_xCursorProperties, PROPERTY_INSERTONLY, true ); - } - - //------------------------------------------------------------------------------ - Reference< XControlModel > FormOperations::impl_getCurrentControlModel_throw() const - { - Reference< XControl > xControl( m_xController->getCurrentControl() ); - - // special handling for grid controls - Reference< XGrid > xGrid( xControl, UNO_QUERY ); - Reference< XControlModel > xControlModel; - - if ( xGrid.is() ) - { - Reference< XIndexAccess > xColumns( xControl->getModel(), UNO_QUERY_THROW ); - sal_Int16 nCurrentPos = xGrid->getCurrentColumnPosition(); - nCurrentPos = impl_gridView2ModelPos_nothrow( xColumns, nCurrentPos ); - - if ( nCurrentPos != (sal_Int16)-1 ) - xColumns->getByIndex( nCurrentPos ) >>= xControlModel; - } - else if ( xControl.is() ) - { - xControlModel = xControl->getModel(); - } - return xControlModel; - } - - //------------------------------------------------------------------------------ - Reference< XPropertySet > FormOperations::impl_getCurrentBoundField_nothrow( ) const - { - OSL_PRECOND( m_xController.is(), "FormOperations::impl_getCurrentBoundField_nothrow: no controller -> no control!" ); - if ( !m_xController.is() ) - return NULL; - - Reference< XPropertySet > xField; - try - { - Reference< XPropertySet > xControlModel( impl_getCurrentControlModel_throw(), UNO_QUERY ); - - if ( xControlModel.is() && ::comphelper::hasProperty( PROPERTY_BOUNDFIELD, xControlModel ) ) - xControlModel->getPropertyValue( PROPERTY_BOUNDFIELD ) >>= xField; - - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - - return xField; - } - - //------------------------------------------------------------------------------ - sal_Int16 FormOperations::impl_gridView2ModelPos_nothrow( const Reference< XIndexAccess >& _rxColumns, sal_Int16 _nViewPos ) const - { - OSL_PRECOND( _rxColumns.is(), "FormOperations::impl_gridView2ModelPos_nothrow: invalid columns container!" ); - try - { - // loop through all columns - sal_Int16 col = 0; - Reference< XPropertySet > xCol; - bool bHidden( false ); - for ( col = 0; col < _rxColumns->getCount(); ++col ) - { - _rxColumns->getByIndex( col ) >>= xCol; - OSL_VERIFY( xCol->getPropertyValue( PROPERTY_HIDDEN ) >>= bHidden ); - if ( bHidden ) - continue; - - // for every visible col : if nViewPos is greater zero, decrement it, else we - // have found the model position - if ( !_nViewPos ) - break; - else - --_nViewPos; - } - if ( col < _rxColumns->getCount() ) - return col; - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return (sal_Int16)-1; - } - - //------------------------------------------------------------------------------ - bool FormOperations::impl_moveLeft_throw( ) const - { - OSL_PRECOND( impl_hasCursor_nothrow(), "FormOperations::impl_moveLeft_throw: no cursor!" ); - if ( !impl_hasCursor_nothrow() ) - return false; - - sal_Bool bRecordInserted = sal_False; - sal_Bool bSuccess = impl_commitCurrentRecord_throw( &bRecordInserted ); - - if ( !bSuccess ) - return false; - - if ( bRecordInserted ) - { - // retrieve the bookmark of the new record and move to the record preceding this bookmark - Reference< XRowLocate > xLocate( m_xCursor, UNO_QUERY ); - OSL_ENSURE( xLocate.is(), "FormOperations::impl_moveLeft_throw: no XRowLocate!" ); - if ( xLocate.is() ) - xLocate->moveRelativeToBookmark( xLocate->getBookmark(), -1 ); - } - else - { - if ( impl_isInsertionRow_throw() ) - { - // we assume that the inserted record is now the last record in the - // result set - m_xCursor->last(); - } - else - m_xCursor->previous(); - } - - return true; - } - - //-------------------------------------------------------------------- - bool FormOperations::impl_moveRight_throw( ) const - { - OSL_PRECOND( impl_hasCursor_nothrow(), "FormOperations::impl_moveRight_throw: no cursor!" ); - if ( !impl_hasCursor_nothrow() ) - return false; - - sal_Bool bRecordInserted = sal_False; - sal_Bool bSuccess = impl_commitCurrentRecord_throw( &bRecordInserted ); - - if ( !bSuccess ) - return false; - - if ( bRecordInserted ) - { - // go to insert row - m_xUpdateCursor->moveToInsertRow(); - } - else - { - if ( m_xCursor->isLast() ) - m_xUpdateCursor->moveToInsertRow(); - else - m_xCursor->next(); - } - - return true; - } - - //-------------------------------------------------------------------- - void FormOperations::impl_resetAllControls_nothrow() const - { - Reference< XIndexAccess > xContainer( m_xCursor, UNO_QUERY ); - if ( !xContainer.is() ) - return; - - try - { - Reference< XReset > xReset; - sal_Int32 nCount( xContainer->getCount() ); - for ( sal_Int32 i = 0; i < nCount; ++i ) - { - if ( xContainer->getByIndex( i ) >>= xReset ) - { - // no resets on sub forms - Reference< XForm > xAsForm( xReset, UNO_QUERY ); - if ( !xAsForm.is() ) - xReset->reset(); - } - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - //------------------------------------------------------------------------------ - void FormOperations::impl_executeAutoSort_throw( bool _bUp ) const - { - OSL_PRECOND( m_xController.is(), "FormOperations::impl_executeAutoSort_throw: need a controller for this!" ); - OSL_PRECOND( impl_hasCursor_nothrow(), "FormOperations::impl_executeAutoSort_throw: need a cursor for this!" ); - OSL_PRECOND( impl_isParseable_throw(), "FormOperations::impl_executeAutoSort_throw: need a parseable statement for this!" ); - if ( !m_xController.is() || !impl_hasCursor_nothrow() || !impl_isParseable_throw() ) - return; - - try - { - Reference< XControl > xControl = m_xController->getCurrentControl(); - if ( !xControl.is() || !impl_commitCurrentControl_throw() || !impl_commitCurrentRecord_throw() ) - return; - - Reference< XPropertySet > xBoundField( impl_getCurrentBoundField_nothrow() ); - if ( !xBoundField.is() ) - return; - - ::rtl::OUString sOriginalSort; - m_xCursorProperties->getPropertyValue( PROPERTY_SORT ) >>= sOriginalSort; - - // automatic sort by field is expected to always resets the previous sort order - m_xParser->setOrder( ::rtl::OUString() ); - - param_appendOrderByColumn aParam; - aParam.xField = xBoundField; - aParam.bUp = _bUp; - impl_doActionInSQLContext_throw( - (Action)&FormOperations::impl_appendOrderByColumn_throw, - static_cast< const void* >( &aParam ), - (sal_uInt16)RID_STR_COULD_NOT_SET_ORDER - ); - - WaitObject aWO( NULL ); - try - { - m_xCursorProperties->setPropertyValue( PROPERTY_SORT, makeAny( m_xParser->getOrder() ) ); - m_xLoadableForm->reload(); - } - catch( const Exception& ) - { - OSL_FAIL( "FormOperations::impl_executeAutoSort_throw: caught an exception while setting the parser properties!" ); - } - - - if ( !m_xLoadableForm->isLoaded() ) - { // something went wrong -> restore the original state - try - { - m_xParser->setOrder( sOriginalSort ); - m_xCursorProperties->setPropertyValue( PROPERTY_SORT, makeAny( m_xParser->getOrder() ) ); - m_xLoadableForm->reload(); - } - catch( const Exception& ) - { - OSL_FAIL( "FormOperations::impl_executeAutoSort_throw: could not reset the form to it's original state!" ); - } - - } - } - catch( const RuntimeException& ) { throw; } - catch( const SQLException& ) { throw; } - catch( const Exception& ) - { - throw WrappedTargetException( ::rtl::OUString(), *const_cast< FormOperations* >( this ), ::cppu::getCaughtException() ); - } - } - - //------------------------------------------------------------------------------ - void FormOperations::impl_executeAutoFilter_throw( ) const - { - OSL_PRECOND( m_xController.is(), "FormOperations::impl_executeAutoFilter_throw: need a controller for this!" ); - OSL_PRECOND( impl_hasCursor_nothrow(), "FormOperations::impl_executeAutoFilter_throw: need a cursor for this!" ); - OSL_PRECOND( impl_isParseable_throw(), "FormOperations::impl_executeAutoFilter_throw: need a parseable statement for this!" ); - if ( !m_xController.is() || !impl_hasCursor_nothrow() || !impl_isParseable_throw() ) - return; - - try - { - Reference< XControl > xControl = m_xController->getCurrentControl(); - if ( !xControl.is() || !impl_commitCurrentControl_throw() || !impl_commitCurrentRecord_throw() ) - return; - - Reference< XPropertySet > xBoundField( impl_getCurrentBoundField_nothrow() ); - if ( !xBoundField.is() ) - return; - - ::rtl::OUString sOriginalFilter; - m_xCursorProperties->getPropertyValue( PROPERTY_FILTER ) >>= sOriginalFilter; - sal_Bool bApplied = sal_True; - m_xCursorProperties->getPropertyValue( PROPERTY_APPLYFILTER ) >>= bApplied; - - // if we have a filter, but it's not applied, then we have to overwrite it, else append one - if ( !bApplied ) - m_xParser->setFilter( ::rtl::OUString() ); - - param_appendFilterByColumn aParam; - aParam.xField = xBoundField; - impl_doActionInSQLContext_throw( - (Action)&FormOperations::impl_appendFilterByColumn_throw, - static_cast< const void* >( &aParam ), - (sal_uInt16)RID_STR_COULD_NOT_SET_FILTER - ); - - WaitObject aWO( NULL ); - try - { - m_xCursorProperties->setPropertyValue( PROPERTY_FILTER, makeAny( m_xParser->getFilter() ) ); - m_xCursorProperties->setPropertyValue( PROPERTY_APPLYFILTER, makeAny( (sal_Bool)sal_True ) ); - - m_xLoadableForm->reload(); - } - catch( const Exception& ) - { - OSL_FAIL( "FormOperations::impl_executeAutoFilter_throw: caught an exception while setting the parser properties!" ); - } - - - if ( !m_xLoadableForm->isLoaded() ) - { // something went wrong -> restore the original state - try - { - m_xParser->setOrder( sOriginalFilter ); - m_xCursorProperties->setPropertyValue( PROPERTY_APPLYFILTER, makeAny( (sal_Bool)bApplied ) ); - m_xCursorProperties->setPropertyValue( PROPERTY_FILTER, makeAny( m_xParser->getFilter() ) ); - m_xLoadableForm->reload(); - } - catch( const Exception& ) - { - OSL_FAIL( "FormOperations::impl_executeAutoFilter_throw: could not reset the form to it's original state!" ); - } - - } - } - catch( const RuntimeException& ) { throw; } - catch( const SQLException& ) { throw; } - catch( const Exception& ) - { - throw WrappedTargetException( ::rtl::OUString(), *const_cast< FormOperations* >( this ), ::cppu::getCaughtException() ); - } - } - - //-------------------------------------------------------------------- - void FormOperations::impl_executeFilterOrSort_throw( bool _bFilter ) const - { - OSL_PRECOND( m_xController.is(), "FormOperations::impl_executeFilterOrSort_throw: need a controller for this!" ); - OSL_PRECOND( impl_hasCursor_nothrow(), "FormOperations::impl_executeFilterOrSort_throw: need a cursor for this!" ); - OSL_PRECOND( impl_isParseable_throw(), "FormOperations::impl_executeFilterOrSort_throw: need a parseable statement for this!" ); - if ( !m_xController.is() || !impl_hasCursor_nothrow() || !impl_isParseable_throw() ) - return; - - if ( !impl_commitCurrentControl_throw() || !impl_commitCurrentRecord_throw() ) - return; - try - { - PropertyValue aFirst; - aFirst.Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "QueryComposer" ) ); - aFirst.Value <<= m_xParser; - - PropertyValue aSecond; - aSecond.Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RowSet" ) ); - aSecond.Value <<= m_xCursorProperties; - - Sequence<Any> aInit(2); - aInit[0] <<= aFirst; - aInit[1] <<= aSecond; - - ::rtl::OUString sDialogServiceName; - if ( _bFilter ) - sDialogServiceName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.FilterDialog" ) ); - else - sDialogServiceName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.OrderDialog" ) ); - - Reference< XExecutableDialog> xDialog; - m_aContext.createComponentWithArguments( sDialogServiceName, aInit, xDialog ); - - if ( !xDialog.is() ) - { - ShowServiceNotAvailableError( NULL, sDialogServiceName, sal_True ); - return; - } - - if ( RET_OK == xDialog->execute() ) - { - WaitObject aWO( NULL ); - if ( _bFilter ) - m_xCursorProperties->setPropertyValue( PROPERTY_FILTER, makeAny( m_xParser->getFilter() ) ); - else - m_xCursorProperties->setPropertyValue( PROPERTY_SORT, makeAny( m_xParser->getOrder() ) ); - m_xLoadableForm->reload(); - } - - } - catch( const RuntimeException& ) { throw; } - catch( const SQLException& ) { throw; } - catch( const Exception& ) - { - throw WrappedTargetException( ::rtl::OUString(), *const_cast< FormOperations* >( this ), ::cppu::getCaughtException() ); - } - } - - //------------------------------------------------------------------------------ - void FormOperations::impl_appendOrderByColumn_throw( const void* _pActionParam ) const - { - const param_appendOrderByColumn* pParam = static_cast< const param_appendOrderByColumn* >( _pActionParam ); - m_xParser->appendOrderByColumn( pParam->xField, pParam->bUp ); - } - - //------------------------------------------------------------------------------ - void FormOperations::impl_appendFilterByColumn_throw( const void* _pActionParam ) const - { - const param_appendFilterByColumn* pParam = static_cast< const param_appendFilterByColumn* >( _pActionParam ); - sal_Int32 nOp = SQLFilterOperator::EQUAL; - if ( pParam->xField.is() ) - { - sal_Int32 nType = 0; - pParam->xField->getPropertyValue(PROPERTY_FIELDTYPE) >>= nType; - switch(nType) - { - case DataType::VARCHAR: - case DataType::CHAR: - case DataType::LONGVARCHAR: - nOp = SQLFilterOperator::LIKE; - break; - default: - nOp = SQLFilterOperator::EQUAL; - } - } - m_xParser->appendFilterByColumn( pParam->xField, sal_True,nOp ); - } - - //------------------------------------------------------------------------------ - void FormOperations::impl_doActionInSQLContext_throw( Action _pAction, const void* _pParam, sal_uInt16 _nErrorResourceId ) const - { - try - { - (this->*_pAction)( _pParam ); - } - catch( const SQLException& e ) - { - (void)e; - if ( !_nErrorResourceId ) - // no information to prepend - throw; - - SQLExceptionInfo aInfo( ::cppu::getCaughtException() ); - ::rtl::OUString sAdditionalError( FRM_RES_STRING( _nErrorResourceId ) ); - aInfo.prepend( sAdditionalError ); - aInfo.doThrow(); - } - catch( const RuntimeException& ) { throw; } - catch( const Exception& ) - { - ::rtl::OUString sAdditionalError( FRM_RES_STRING( _nErrorResourceId ) ); - throw WrappedTargetException( sAdditionalError, *const_cast< FormOperations* >( this ), ::cppu::getCaughtException() ); - } - } - -//........................................................................ -} // namespace frm -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/runtime/formoperations.hxx b/forms/source/runtime/formoperations.hxx deleted file mode 100644 index 1d6d028fd..000000000 --- a/forms/source/runtime/formoperations.hxx +++ /dev/null @@ -1,382 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_FORMOPERATIONS_HXX -#define FORMS_FORMOPERATIONS_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/form/runtime/XFormOperations.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/form/XForm.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/form/XLoadable.hpp> -#include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp> -#include <com/sun/star/util/XModifyListener.hpp> -#include <com/sun/star/container/XIndexAccess.hpp> -#include <com/sun/star/lang/XInitialization.hpp> -/** === end UNO includes === **/ - -#include <comphelper/componentcontext.hxx> - -#include <cppuhelper/basemutex.hxx> -#include <cppuhelper/compbase6.hxx> - -//........................................................................ -namespace frm -{ -//........................................................................ - - //==================================================================== - //= FormOperations - //==================================================================== - typedef ::cppu::WeakComponentImplHelper6 < ::com::sun::star::form::runtime::XFormOperations - , ::com::sun::star::lang::XInitialization - , ::com::sun::star::lang::XServiceInfo - , ::com::sun::star::beans::XPropertyChangeListener - , ::com::sun::star::util::XModifyListener - , ::com::sun::star::sdbc::XRowSetListener - > FormOperations_Base; - - class FormOperations :public ::cppu::BaseMutex - ,public FormOperations_Base - { - public: - class MethodGuard; - - private: - ::comphelper::ComponentContext m_aContext; - ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > m_xController; - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet > m_xCursor; - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetUpdate > m_xUpdateCursor; - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xCursorProperties; - ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadable > m_xLoadableForm; - ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFeatureInvalidation > - m_xFeatureInvalidation; - mutable ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer > - m_xParser; - - bool m_bInitializedParser; - bool m_bActiveControlModified; - bool m_bConstructed; - #ifdef DBG_UTIL - mutable long - m_nMethodNestingLevel; - #endif - - public: - FormOperations( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxContext ); - - // XServiceInfo - static versions - static ::rtl::OUString getImplementationName_Static( ) throw(::com::sun::star::uno::RuntimeException); - static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static( ) throw(::com::sun::star::uno::RuntimeException); - static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL - Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&); - - struct MethodAccess { friend class MethodGuard; private: MethodAccess() { } }; - - inline void enterMethod( MethodAccess ) const - { - m_aMutex.acquire(); - impl_checkDisposed_throw(); - #ifdef DBG_UTIL - ++m_nMethodNestingLevel; - #endif - } - - inline void leaveMethod( MethodAccess ) const - { - m_aMutex.release(); - #ifdef DBG_UTIL - --m_nMethodNestingLevel; - #endif - } - - protected: - virtual ~FormOperations(); - - // XInitialization - virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); - - // XServiceInfo - virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); - - // XFormOperations - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet > SAL_CALL getCursor() throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetUpdate > SAL_CALL getUpdateCursor() throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > SAL_CALL getController() throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFeatureInvalidation > SAL_CALL getFeatureInvalidation() throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setFeatureInvalidation(const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFeatureInvalidation > & the_value) throw (::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::form::runtime::FeatureState SAL_CALL getState(::sal_Int16 Feature) throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Bool SAL_CALL isEnabled(::sal_Int16 Feature) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL execute(::sal_Int16 Feature) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::sdbc::SQLException, ::com::sun::star::lang::WrappedTargetException); - virtual void SAL_CALL executeWithArguments(::sal_Int16 Feature, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& Arguments) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::sdbc::SQLException, ::com::sun::star::lang::WrappedTargetException); - virtual ::sal_Bool SAL_CALL commitCurrentRecord(::sal_Bool & RecordInserted) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::sdbc::SQLException); - virtual ::sal_Bool SAL_CALL commitCurrentControl() throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::sdbc::SQLException); - virtual ::sal_Bool SAL_CALL isInsertionRow() throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::WrappedTargetException); - virtual ::sal_Bool SAL_CALL isModifiedRow() throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::WrappedTargetException); - - // XRowSetListener - virtual void SAL_CALL cursorMoved( const ::com::sun::star::lang::EventObject& event ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL rowChanged( const ::com::sun::star::lang::EventObject& event ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL rowSetChanged( const ::com::sun::star::lang::EventObject& event ) throw (::com::sun::star::uno::RuntimeException); - - // XModifyListener - virtual void SAL_CALL modified( const ::com::sun::star::lang::EventObject& _rSource ) throw( ::com::sun::star::uno::RuntimeException ); - - // XPropertyChangeListener - virtual void SAL_CALL propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw (::com::sun::star::uno::RuntimeException); - - // XEventListener - virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); - - // XComponent/OComponentHelper - virtual void SAL_CALL disposing(); - - private: - // service constructors - void createWithFormController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _rxController ); - void createWithForm( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm ); - - /** determines whether or not we're already disposed - */ - inline bool impl_isDisposed_nothrow() const { return !m_xCursor.is(); } - - /** checks whether the instance is already disposed, and throws an exception if so - */ - void impl_checkDisposed_throw() const; - - /** initializes the instance after m_xController has been set - @precond - m_xController is not <NULL/> - */ - void impl_initFromController_throw(); - - /** initializes the instance after m_xCursor has been set - @precond - m_xCursor is not <NULL/> - */ - void impl_initFromForm_throw(); - - /// invalidate the full palette of features which we know - void impl_invalidateAllSupportedFeatures_nothrow( MethodGuard& _rClearForCallback ) const; - - /** invalidate the features which depend on the "modified" state of the current control - of our controller - */ - void impl_invalidateModifyDependentFeatures_nothrow( MethodGuard& _rClearForCallback ) const; - - /** ensures that our parse is initialized, or at least that we attempted to do so - @precond - we're not disposed - */ - void impl_ensureInitializedParser_nothrow(); - - /// disposes our parser, if we have one - void impl_disposeParser_nothrow(); - - /** determines whether our cursor can be moved left - @precond hasCursor() - */ - bool impl_canMoveLeft_throw() const; - - /** determines whether our cursor can be moved right - @precond hasCursor() - */ - bool impl_canMoveRight_throw() const; - - /// determines whether we're positioned on the insertion row - bool impl_isInsertionRow_throw() const; - - /// retrieves the RowCount property of the form - sal_Int32 impl_getRowCount_throw() const; - - /// retrieves the RowCountFinal property of the form - bool impl_isRowCountFinal_throw() const; - - /// retrieves the IsModified property of the form - bool impl_isModifiedRow_throw() const; - - /// determines whether we can parse the query of our form - bool impl_isParseable_throw() const; - - /// determines if we have an active filter or order condition - bool impl_hasFilterOrOrder_throw() const; - - /// determines whether our form is in "insert-only" mode - bool impl_isInsertOnlyForm_throw() const; - - /** retrieces the column to which the current control of our controller is bound - @precond - m_xController.is() - */ - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > - impl_getCurrentBoundField_nothrow( ) const; - - /** returns the control model of the current control - - If the current control is a grid control, then the returned model is the - model of the current <em>column</em> in the grid. - - @precond - m_xController.is() - */ - ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > - impl_getCurrentControlModel_throw() const; - - /// determines if we have a valid cursor - inline bool impl_hasCursor_nothrow() const { return m_xCursorProperties.is(); } - - /** determines the model position from a grid control column's view position - - A grid control can have columns which are currently hidden, so the index of a - column in the view is not necessarily the same as its index in the model. - */ - sal_Int16 impl_gridView2ModelPos_nothrow( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& _rxColumns, sal_Int16 _nViewPos ) const; - - /** moves our cursor one position to the left, caring for different possible - cursor states. - - Before the movement is done, the current row is saved, if necessary. - - @precond - canMoveLeft() - */ - bool impl_moveLeft_throw() const; - - /** moves our cursor one position to the right, caring for different possible - cursor states. - - Before the movement is done, the current row is saved, if necessary. - - @precond - canMoveRight() - */ - bool impl_moveRight_throw( ) const; - - /** impl-version of commitCurrentRecord, which can be called without caring for - an output parameter, and within const-contexts - - @precond - our mutex is locked - */ - bool impl_commitCurrentRecord_throw( sal_Bool* _pRecordInserted = NULL ) const; - - /** impl-version of commitCurrentControl, which can be called in const-contexts - - @precond - our mutex is locked - */ - bool impl_commitCurrentControl_throw() const; - - /// resets all control models in our own form - void impl_resetAllControls_nothrow() const; - - /// executes the "auto sort ascending" and "auto sort descending" features - void impl_executeAutoSort_throw( bool _bUp ) const; - - /// executes the "auto filter" feature - void impl_executeAutoFilter_throw( ) const; - - /// executes the interactive sort resp. filter feature - void impl_executeFilterOrSort_throw( bool _bFilter ) const; - - private: - /// typedef for member method of this class - typedef void (FormOperations::*Action)( const void* ) const; - - /** calls a member function, catches SQLExceptions, extends them with additional context information, - and rethrows them - - @param _pAction - the member function to call - @param _pParam - the parameters to pass to the member function - @param _nErrorResourceId - the id of the resources string to use as error message - */ - void impl_doActionInSQLContext_throw( Action _pAction, const void* _pParam, sal_uInt16 _nErrorResourceId ) const; - - // parameter structure for appendOrderByColumn - struct param_appendOrderByColumn - { - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > - xField; - bool bUp; - }; - void impl_appendOrderByColumn_throw( const void* _pActionParam ) const; - - // parameter structure for appendFilterByColumn - struct param_appendFilterByColumn - { - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > - xField; - }; - void impl_appendFilterByColumn_throw( const void* _pActionParam ) const; - - private: - FormOperations(); // never implemented - FormOperations( const FormOperations& ); // never implemented - FormOperations& operator=( const FormOperations& ); // never implemented - - public: - class MethodGuard - { - FormOperations& m_rOwner; - bool m_bCleared; - - public: - inline MethodGuard( FormOperations& _rOwner ) - :m_rOwner( _rOwner ) - ,m_bCleared( false ) - { - m_rOwner.enterMethod( FormOperations::MethodAccess() ); - } - - inline ~MethodGuard() - { - clear(); - } - - inline void clear() - { - if ( !m_bCleared ) - m_rOwner.leaveMethod( FormOperations::MethodAccess() ); - m_bCleared = true; - } - }; - }; - -//........................................................................ -} // namespace frm -//........................................................................ - -#endif // FORMS_FORMOPERATIONS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/solar/component/navbarcontrol.cxx b/forms/source/solar/component/navbarcontrol.cxx deleted file mode 100644 index c3c86b121..000000000 --- a/forms/source/solar/component/navbarcontrol.cxx +++ /dev/null @@ -1,567 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "navbarcontrol.hxx" -#include "frm_strings.hxx" -#include "frm_module.hxx" -#include "FormComponent.hxx" -#include "componenttools.hxx" -#include "navtoolbar.hxx" -#include "commandimageprovider.hxx" -#include "commanddescriptionprovider.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/awt/XView.hpp> -#include <com/sun/star/awt/PosSize.hpp> -#include <com/sun/star/form/runtime/FormFeature.hpp> -#include <com/sun/star/awt/XControlModel.hpp> -#include <com/sun/star/graphic/XGraphic.hpp> -/** === end UNO includes === **/ - -#include <tools/debug.hxx> -#include <tools/diagnose_ex.h> -#include <vcl/svapp.hxx> - -//-------------------------------------------------------------------------- -extern "C" void SAL_CALL createRegistryInfo_ONavigationBarControl() -{ - static ::frm::OMultiInstanceAutoRegistration< ::frm::ONavigationBarControl > aAutoRegistration; -} - -//......................................................................... -namespace frm -{ -//......................................................................... - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::awt; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::frame; - using namespace ::com::sun::star::graphic; - namespace FormFeature = ::com::sun::star::form::runtime::FormFeature; - -#define FORWARD_TO_PEER_1( unoInterface, method, param1 ) \ - Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ - if ( xTypedPeer.is() ) \ - { \ - xTypedPeer->method( param1 ); \ - } - -#define FORWARD_TO_PEER_1_RET( returnType, unoInterface, method, param1 ) \ - returnType aReturn; \ - Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ - if ( xTypedPeer.is() ) \ - { \ - aReturn = xTypedPeer->method( param1 ); \ - } \ - return aReturn; - -#define FORWARD_TO_PEER_3( unoInterface, method, param1, param2, param3 ) \ - Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ - if ( xTypedPeer.is() ) \ - { \ - xTypedPeer->method( param1, param2, param3 ); \ - } - -#define FORWARD_TO_PEER_3_RET( returnType, unoInterface, method, param1, param2, param3 ) \ - returnType aReturn; \ - Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ - if ( xTypedPeer.is() ) \ - { \ - aReturn = xTypedPeer->method( param1, param2, param3 ); \ - } \ - return aReturn; - - //================================================================== - // ONavigationBarControl - //================================================================== - DBG_NAME( ONavigationBarControl ) - //------------------------------------------------------------------ - ONavigationBarControl::ONavigationBarControl( const Reference< XMultiServiceFactory >& _rxORB ) - :UnoControl( _rxORB ) - { - DBG_CTOR( ONavigationBarControl, NULL ); - } - - //------------------------------------------------------------------ - ONavigationBarControl::~ONavigationBarControl() - { - DBG_DTOR( ONavigationBarControl, NULL ); - } - - //------------------------------------------------------------------ - IMPLEMENT_FORWARD_XTYPEPROVIDER2( ONavigationBarControl, UnoControl, ONavigationBarControl_Base ) - - //------------------------------------------------------------------ - Any SAL_CALL ONavigationBarControl::queryAggregation( const Type& _rType ) throw ( RuntimeException ) - { - Any aReturn = UnoControl::queryAggregation( _rType ); - - if ( !aReturn.hasValue() ) - aReturn = ONavigationBarControl_Base::queryInterface( _rType ); - - return aReturn; - } - - //------------------------------------------------------------------ - namespace - { - //.............................................................. - static WinBits lcl_getWinBits_nothrow( const Reference< XControlModel >& _rxModel ) - { - WinBits nBits = 0; - try - { - Reference< XPropertySet > xProps( _rxModel, UNO_QUERY ); - if ( xProps.is() ) - { - sal_Int16 nBorder = 0; - xProps->getPropertyValue( PROPERTY_BORDER ) >>= nBorder; - if ( nBorder ) - nBits |= WB_BORDER; - - sal_Bool bTabStop = sal_False; - if ( xProps->getPropertyValue( PROPERTY_TABSTOP ) >>= bTabStop ) - nBits |= ( bTabStop ? WB_TABSTOP : WB_NOTABSTOP ); - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return nBits; - } - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarControl::createPeer( const Reference< XToolkit >& /*_rToolkit*/, const Reference< XWindowPeer >& _rParentPeer ) throw( RuntimeException ) - { - SolarMutexGuard aGuard; - - if (!getPeer().is()) - { - mbCreatingPeer = sal_True; - - // determine the VLC window for the parent - Window* pParentWin = NULL; - if ( _rParentPeer.is() ) - { - VCLXWindow* pParentXWin = VCLXWindow::GetImplementation( _rParentPeer ); - if ( pParentXWin ) - pParentWin = pParentXWin->GetWindow(); - DBG_ASSERT( pParentWin, "ONavigationBarControl::createPeer: could not obtain the VCL-level parent window!" ); - } - - // create the peer - ONavigationBarPeer* pPeer = ONavigationBarPeer::Create( maContext.getLegacyServiceFactory(), pParentWin, getModel() ); - DBG_ASSERT( pPeer, "ONavigationBarControl::createPeer: invalid peer returned!" ); - if ( pPeer ) - // by definition, the returned component is aquired once - pPeer->release(); - - // announce the peer to the base class - setPeer( pPeer ); - - // initialize ourself (and thus the peer) with the model properties - updateFromModel(); - - Reference< XView > xPeerView( getPeer(), UNO_QUERY ); - if ( xPeerView.is() ) - { - xPeerView->setZoom( maComponentInfos.nZoomX, maComponentInfos.nZoomY ); - xPeerView->setGraphics( mxGraphics ); - } - - // a lot of initial settings from our component infos - setPosSize( maComponentInfos.nX, maComponentInfos.nY, maComponentInfos.nWidth, maComponentInfos.nHeight, PosSize::POSSIZE ); - - pPeer->setVisible ( maComponentInfos.bVisible && !mbDesignMode ); - pPeer->setEnable ( maComponentInfos.bEnable ); - pPeer->setDesignMode( mbDesignMode ); - - peerCreated(); - - mbCreatingPeer = sal_False; - - OControl::initFormControlPeer( getPeer() ); - } - } - - //------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ONavigationBarControl::getImplementationName() throw( RuntimeException ) - { - return getImplementationName_Static(); - } - - //------------------------------------------------------------------ - Sequence< ::rtl::OUString > SAL_CALL ONavigationBarControl::getSupportedServiceNames() throw( RuntimeException ) - { - return getSupportedServiceNames_Static(); - } - - //------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ONavigationBarControl::getImplementationName_Static() - { - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.form.ONavigationBarControl" ) ); - } - - //------------------------------------------------------------------ - Sequence< ::rtl::OUString > SAL_CALL ONavigationBarControl::getSupportedServiceNames_Static() - { - Sequence< ::rtl::OUString > aServices( 2 ); - aServices[ 0 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControl" ) ); - aServices[ 1 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.control.NavigationToolBar" ) ); - return aServices; - } - - //------------------------------------------------------------------ - Reference< XInterface > SAL_CALL ONavigationBarControl::Create( const Reference< XMultiServiceFactory >& _rxFactory ) - { - return *( new ONavigationBarControl( _rxFactory ) ); - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarControl::registerDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException) - { - FORWARD_TO_PEER_1( XDispatchProviderInterception, registerDispatchProviderInterceptor, _rxInterceptor ); - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarControl::releaseDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException) - { - FORWARD_TO_PEER_1( XDispatchProviderInterception, releaseDispatchProviderInterceptor, _rxInterceptor ); - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarControl::setDesignMode( sal_Bool _bOn ) throw( RuntimeException ) - { - UnoControl::setDesignMode( _bOn ); - FORWARD_TO_PEER_1( XVclWindowPeer, setDesignMode, _bOn ); - } - - //================================================================== - // ONavigationBarPeer - //================================================================== - DBG_NAME( ONavigationBarPeer ) - //------------------------------------------------------------------ - ONavigationBarPeer* ONavigationBarPeer::Create( const Reference< XMultiServiceFactory >& _rxORB, - Window* _pParentWindow, const Reference< XControlModel >& _rxModel ) - { - DBG_TESTSOLARMUTEX(); - - // the peer itself - ONavigationBarPeer* pPeer = new ONavigationBarPeer( _rxORB ); - pPeer->acquire(); // by definition, the returned object is aquired once - - // the VCL control for the peer - Reference< XModel > xContextDocument( getXModel( _rxModel ) ); - NavigationToolBar* pNavBar = new NavigationToolBar( - _pParentWindow, - lcl_getWinBits_nothrow( _rxModel ), - createDocumentCommandImageProvider( _rxORB, xContextDocument ), - createDocumentCommandDescriptionProvider( _rxORB, xContextDocument ) - ); - - // some knittings - pNavBar->setDispatcher( pPeer ); - pNavBar->SetComponentInterface( pPeer ); - - // we want a faster repeating rate for the slots in this - // toolbox - AllSettings aSettings = pNavBar->GetSettings(); - MouseSettings aMouseSettings = aSettings.GetMouseSettings(); - aMouseSettings.SetButtonRepeat( 10 ); - aSettings.SetMouseSettings( aMouseSettings ); - pNavBar->SetSettings( aSettings, sal_True ); - - // outta here - return pPeer; - } - - //------------------------------------------------------------------ - ONavigationBarPeer::ONavigationBarPeer( const Reference< XMultiServiceFactory >& _rxORB ) - :OFormNavigationHelper( _rxORB ) - { - DBG_CTOR( ONavigationBarPeer, NULL ); - } - - //------------------------------------------------------------------ - ONavigationBarPeer::~ONavigationBarPeer() - { - DBG_DTOR( ONavigationBarPeer, NULL ); - } - - //------------------------------------------------------------------ - IMPLEMENT_FORWARD_XINTERFACE2( ONavigationBarPeer, VCLXWindow, OFormNavigationHelper ) - - //------------------------------------------------------------------ - IMPLEMENT_FORWARD_XTYPEPROVIDER2( ONavigationBarPeer, VCLXWindow, OFormNavigationHelper ) - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarPeer::dispose( ) throw( RuntimeException ) - { - VCLXWindow::dispose(); - OFormNavigationHelper::dispose(); - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarPeer::setProperty( const ::rtl::OUString& _rPropertyName, const Any& _rValue ) throw( RuntimeException ) - { - SolarMutexGuard aGuard; - - NavigationToolBar* pNavBar = static_cast< NavigationToolBar* >( GetWindow() ); - if ( !pNavBar ) - { - VCLXWindow::setProperty( _rPropertyName, _rValue ); - return; - } - - bool bVoid = !_rValue.hasValue(); - - sal_Bool bBoolValue = sal_False; - sal_Int32 nColor = COL_TRANSPARENT; - - // TODO: more generic mechanisms for this (the grid control implementation, - // when used herein, will do the same stuff for lot of these) - - if ( _rPropertyName.equals( PROPERTY_BACKGROUNDCOLOR ) ) - { - Wallpaper aTest = pNavBar->GetBackground(); - if ( bVoid ) - { - pNavBar->SetBackground( pNavBar->GetSettings().GetStyleSettings().GetFaceColor() ); - pNavBar->SetControlBackground(); - } - else - { - OSL_VERIFY( _rValue >>= nColor ); - Color aColor( nColor ); - pNavBar->SetBackground( aColor ); - pNavBar->SetControlBackground( aColor ); - } - } - else if ( _rPropertyName.equals( PROPERTY_TEXTLINECOLOR ) ) - { - if ( bVoid ) - { - pNavBar->SetTextLineColor(); - } - else - { - OSL_VERIFY( _rValue >>= nColor ); - Color aColor( nColor ); - pNavBar->SetTextLineColor( nColor ); - } - } - else if ( _rPropertyName.equals( PROPERTY_ICONSIZE ) ) - { - sal_Int16 nInt16Value = 0; - OSL_VERIFY( _rValue >>= nInt16Value ); - pNavBar->SetImageSize( nInt16Value ? NavigationToolBar::eLarge : NavigationToolBar::eSmall ); - } - else if ( _rPropertyName.equals( PROPERTY_SHOW_POSITION ) ) - { - OSL_VERIFY( _rValue >>= bBoolValue ); - pNavBar->ShowFunctionGroup( NavigationToolBar::ePosition, bBoolValue ); - } - else if ( _rPropertyName.equals( PROPERTY_SHOW_NAVIGATION ) ) - { - OSL_VERIFY( _rValue >>= bBoolValue ); - pNavBar->ShowFunctionGroup( NavigationToolBar::eNavigation, bBoolValue ); - } - else if ( _rPropertyName.equals( PROPERTY_SHOW_RECORDACTIONS ) ) - { - OSL_VERIFY( _rValue >>= bBoolValue ); - pNavBar->ShowFunctionGroup( NavigationToolBar::eRecordActions, bBoolValue ); - } - else if ( _rPropertyName.equals( PROPERTY_SHOW_FILTERSORT ) ) - { - OSL_VERIFY( _rValue >>= bBoolValue ); - pNavBar->ShowFunctionGroup( NavigationToolBar::eFilterSort, bBoolValue ); - } - else - { - VCLXWindow::setProperty( _rPropertyName, _rValue ); - } - } - - //------------------------------------------------------------------ - Any SAL_CALL ONavigationBarPeer::getProperty( const ::rtl::OUString& _rPropertyName ) throw( RuntimeException ) - { - SolarMutexGuard aGuard; - - Any aReturn; - NavigationToolBar* pNavBar = static_cast< NavigationToolBar* >( GetWindow() ); - - if ( _rPropertyName.equals( PROPERTY_BACKGROUNDCOLOR ) ) - { - aReturn <<= (sal_Int32)pNavBar->GetControlBackground().GetColor(); - } - else if ( _rPropertyName.equals( PROPERTY_TEXTLINECOLOR ) ) - { - aReturn <<= (sal_Int32)pNavBar->GetTextLineColor().GetColor(); - } - else if ( _rPropertyName.equals( PROPERTY_ICONSIZE ) ) - { - sal_Int16 nIconType = ( NavigationToolBar::eLarge == pNavBar->GetImageSize() ) - ? 1 : 0; - aReturn <<= nIconType; - } - else if ( _rPropertyName.equals( PROPERTY_SHOW_POSITION ) ) - { - aReturn <<= (sal_Bool)( pNavBar->IsFunctionGroupVisible( NavigationToolBar::ePosition ) ); - } - else if ( _rPropertyName.equals( PROPERTY_SHOW_NAVIGATION ) ) - { - aReturn <<= (sal_Bool)( pNavBar->IsFunctionGroupVisible( NavigationToolBar::eNavigation ) ); - } - else if ( _rPropertyName.equals( PROPERTY_SHOW_RECORDACTIONS ) ) - { - aReturn <<= (sal_Bool)( pNavBar->IsFunctionGroupVisible( NavigationToolBar::eRecordActions ) ); - } - else if ( _rPropertyName.equals( PROPERTY_SHOW_FILTERSORT ) ) - { - aReturn <<= (sal_Bool)( pNavBar->IsFunctionGroupVisible( NavigationToolBar::eFilterSort ) ); - } - else - aReturn = VCLXWindow::getProperty( _rPropertyName ); - - return aReturn; - } - - //------------------------------------------------------------------ - void ONavigationBarPeer::interceptorsChanged( ) - { - if ( isDesignMode() ) - // not interested in if we're in design mode - return; - - OFormNavigationHelper::interceptorsChanged(); - } - - //------------------------------------------------------------------ - void ONavigationBarPeer::featureStateChanged( sal_Int16 _nFeatureId, sal_Bool _bEnabled ) - { - // enable this button on the toolbox - NavigationToolBar* pNavBar = static_cast< NavigationToolBar* >( GetWindow() ); - if ( pNavBar ) - { - pNavBar->enableFeature( _nFeatureId, _bEnabled ); - - // is it a feature with additional state information? - if ( _nFeatureId == FormFeature::ToggleApplyFilter ) - { // additional boolean state - pNavBar->checkFeature( _nFeatureId, getBooleanState( _nFeatureId ) ); - } - else if ( _nFeatureId == FormFeature::TotalRecords ) - { - pNavBar->setFeatureText( _nFeatureId, getStringState( _nFeatureId ) ); - } - else if ( _nFeatureId == FormFeature::MoveAbsolute ) - { - pNavBar->setFeatureText( _nFeatureId, String::CreateFromInt32( getIntegerState( _nFeatureId ) ) ); - } - } - - // base class - OFormNavigationHelper::featureStateChanged( _nFeatureId, _bEnabled ); - } - - //------------------------------------------------------------------ - void ONavigationBarPeer::allFeatureStatesChanged( ) - { - // force the control to update it's states - NavigationToolBar* pNavBar = static_cast< NavigationToolBar* >( GetWindow() ); - if ( pNavBar ) - pNavBar->setDispatcher( this ); - - // base class - OFormNavigationHelper::allFeatureStatesChanged( ); - } - - //------------------------------------------------------------------ - bool ONavigationBarPeer::isEnabled( sal_Int16 _nFeatureId ) const - { - if ( const_cast< ONavigationBarPeer* >( this )->isDesignMode() ) - return false; - - return OFormNavigationHelper::isEnabled( _nFeatureId ); - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarPeer::setDesignMode( sal_Bool _bOn ) throw( RuntimeException ) - { - VCLXWindow::setDesignMode( _bOn ); - - if ( _bOn ) - disconnectDispatchers(); - else - connectDispatchers(); - // this will connect if not already connected and just update else - } - - //------------------------------------------------------------------ - void SAL_CALL ONavigationBarPeer::disposing( const EventObject& _rSource ) throw (RuntimeException) - { - VCLXWindow::disposing( _rSource ); - OFormNavigationHelper::disposing( _rSource ); - } - - //------------------------------------------------------------------ - void ONavigationBarPeer::getSupportedFeatures( ::std::vector< sal_Int16 >& _rFeatureIds ) - { - _rFeatureIds.push_back( FormFeature::MoveAbsolute ); - _rFeatureIds.push_back( FormFeature::TotalRecords ); - _rFeatureIds.push_back( FormFeature::MoveToFirst ); - _rFeatureIds.push_back( FormFeature::MoveToPrevious ); - _rFeatureIds.push_back( FormFeature::MoveToNext ); - _rFeatureIds.push_back( FormFeature::MoveToLast ); - _rFeatureIds.push_back( FormFeature::SaveRecordChanges ); - _rFeatureIds.push_back( FormFeature::UndoRecordChanges ); - _rFeatureIds.push_back( FormFeature::MoveToInsertRow ); - _rFeatureIds.push_back( FormFeature::DeleteRecord ); - _rFeatureIds.push_back( FormFeature::ReloadForm ); - _rFeatureIds.push_back( FormFeature::RefreshCurrentControl ); - _rFeatureIds.push_back( FormFeature::SortAscending ); - _rFeatureIds.push_back( FormFeature::SortDescending ); - _rFeatureIds.push_back( FormFeature::InteractiveSort ); - _rFeatureIds.push_back( FormFeature::AutoFilter ); - _rFeatureIds.push_back( FormFeature::InteractiveFilter ); - _rFeatureIds.push_back( FormFeature::ToggleApplyFilter ); - _rFeatureIds.push_back( FormFeature::RemoveFilterAndSort ); - } - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/solar/component/navbarcontrol.hxx b/forms/source/solar/component/navbarcontrol.hxx deleted file mode 100644 index 366f6889a..000000000 --- a/forms/source/solar/component/navbarcontrol.hxx +++ /dev/null @@ -1,161 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_NAVBARCONTROL_HXX -#define FORMS_NAVBARCONTROL_HXX - -#include "formnavigation.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/frame/XDispatchProviderInterception.hpp> -#include <com/sun/star/frame/XStatusListener.hpp> -/** === end UNO includes === **/ - -#include <toolkit/controls/unocontrol.hxx> -#include <toolkit/awt/vclxwindow.hxx> -#include <comphelper/uno3.hxx> -#include <cppuhelper/implbase1.hxx> -#include <tools/wintypes.hxx> - -//......................................................................... -namespace frm -{ -//......................................................................... - - //================================================================== - // ONavigationBarControl - //================================================================== - typedef ::cppu::ImplHelper1 < ::com::sun::star::frame::XDispatchProviderInterception - > ONavigationBarControl_Base; - - class ONavigationBarControl - :public UnoControl - ,public ONavigationBarControl_Base - { - public: - ONavigationBarControl( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB - ); - - protected: - ~ONavigationBarControl(); - - public: - // XServiceInfo - static version - static ::rtl::OUString SAL_CALL getImplementationName_Static(); - static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static(); - static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory ); - - protected: - // UNO - DECLARE_UNO3_AGG_DEFAULTS( ONavigationBarControl, UnoControl ); - virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw ( ::com::sun::star::uno::RuntimeException ); - - // XControl - virtual void SAL_CALL createPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& _rToolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& _rParent ) throw( ::com::sun::star::uno::RuntimeException ); - - // XServiceInfo - virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); - - // XTypeProvider - DECLARE_XTYPEPROVIDER() - - // XVclWindowPeer - virtual void SAL_CALL setDesignMode( sal_Bool _bOn ) throw( ::com::sun::star::uno::RuntimeException ); - - // XDispatchProviderInterception - virtual void SAL_CALL registerDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL releaseDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException); - }; - - //================================================================== - // ONavigationBarPeer - //================================================================== - class ONavigationBarPeer - :public VCLXWindow - ,public OFormNavigationHelper - { - public: - /** factory method - @return - a new ONavigationBarPeer instance, which has been aquired once! - */ - static ONavigationBarPeer* Create( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB, - Window* _pParentWindow, - const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel - ); - - protected: - ONavigationBarPeer( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB - ); - ~ONavigationBarPeer(); - - public: - // XInterface - DECLARE_XINTERFACE( ) - - // XVclWindowPeer - virtual void SAL_CALL setDesignMode( sal_Bool _bOn ) throw( ::com::sun::star::uno::RuntimeException ); - - // XWindow2 - using VCLXWindow::isEnabled; - - protected: - // XTypeProvider - DECLARE_XTYPEPROVIDER( ) - - // XComponent - void SAL_CALL dispose( ) throw( ::com::sun::star::uno::RuntimeException ); - - // XVclWindowPeer - void SAL_CALL setProperty( const ::rtl::OUString& _rPropertyName, const ::com::sun::star::uno::Any& _rValue ) throw( ::com::sun::star::uno::RuntimeException ); - ::com::sun::star::uno::Any SAL_CALL getProperty( const ::rtl::OUString& _rPropertyName ) throw(::com::sun::star::uno::RuntimeException); - - // XEventListener - virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); - - // OFormNavigationHelper overriables - virtual void interceptorsChanged( ); - virtual void featureStateChanged( sal_Int16 _nFeatureId, sal_Bool _bEnabled ); - virtual void allFeatureStatesChanged( ); - virtual void getSupportedFeatures( ::std::vector< sal_Int16 >& /* [out] */ _rFeatureIds ); - - // IFeatureDispatcher overriables - virtual bool isEnabled( sal_Int16 _nFeatureId ) const; - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_NAVBARCONTROL_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/solar/control/navtoolbar.cxx b/forms/source/solar/control/navtoolbar.cxx deleted file mode 100644 index 5112bb442..000000000 --- a/forms/source/solar/control/navtoolbar.cxx +++ /dev/null @@ -1,732 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "navtoolbar.hxx" -#include "frm_resource.hxx" -#include "featuredispatcher.hxx" -#include "frm_resource.hrc" -#include "commandimageprovider.hxx" -#include "commanddescriptionprovider.hxx" - -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/form/runtime/FormFeature.hpp> - -#include <sfx2/imgmgr.hxx> -#include <vcl/fixed.hxx> - -#include <memory> -#include <sal/macros.h> - -#define LID_RECORD_LABEL 1000 -#define LID_RECORD_FILLER 1001 - -//......................................................................... -namespace frm -{ -//......................................................................... - - using ::com::sun::star::uno::makeAny; - namespace FormFeature = ::com::sun::star::form::runtime::FormFeature; - - //===================================================================== - //..................................................................... - namespace - { - static bool isArtificialItem( sal_Int16 _nFeatureId ) - { - return ( _nFeatureId == LID_RECORD_LABEL ) - || ( _nFeatureId == LID_RECORD_FILLER ); - } - - static String getLabelString( sal_uInt16 _nResId ) - { - String sLabel = String::CreateFromAscii( " " ); - sLabel += String( FRM_RES_STRING( _nResId ) ); - sLabel += String::CreateFromAscii( " " ); - return sLabel; - } - - ::rtl::OUString lcl_getCommandURL( const sal_Int16 _nFormFeature ) - { - const sal_Char* pAsciiCommandName = NULL; - switch ( _nFormFeature ) - { - case FormFeature::MoveAbsolute : pAsciiCommandName = "AbsoluteRecord"; break; - case FormFeature::TotalRecords : pAsciiCommandName = "RecTotal"; break; - case FormFeature::MoveToFirst : pAsciiCommandName = "FirstRecord"; break; - case FormFeature::MoveToPrevious : pAsciiCommandName = "PrevRecord"; break; - case FormFeature::MoveToNext : pAsciiCommandName = "NextRecord"; break; - case FormFeature::MoveToLast : pAsciiCommandName = "LastRecord"; break; - case FormFeature::SaveRecordChanges : pAsciiCommandName = "RecSave"; break; - case FormFeature::UndoRecordChanges : pAsciiCommandName = "RecUndo"; break; - case FormFeature::MoveToInsertRow : pAsciiCommandName = "NewRecord"; break; - case FormFeature::DeleteRecord : pAsciiCommandName = "DeleteRecord"; break; - case FormFeature::ReloadForm : pAsciiCommandName = "Refresh"; break; - case FormFeature::RefreshCurrentControl : pAsciiCommandName = "RefreshFormControl"; break; - case FormFeature::SortAscending : pAsciiCommandName = "Sortup"; break; - case FormFeature::SortDescending : pAsciiCommandName = "SortDown"; break; - case FormFeature::InteractiveSort : pAsciiCommandName = "OrderCrit"; break; - case FormFeature::AutoFilter : pAsciiCommandName = "AutoFilter"; break; - case FormFeature::InteractiveFilter : pAsciiCommandName = "FilterCrit"; break; - case FormFeature::ToggleApplyFilter : pAsciiCommandName = "FormFiltered"; break; - case FormFeature::RemoveFilterAndSort : pAsciiCommandName = "RemoveFilterSort"; break; - } - if ( pAsciiCommandName != NULL ) - return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:" ) ) + ::rtl::OUString::createFromAscii( pAsciiCommandName ); - - OSL_FAIL( "lcl_getCommandURL: unknown FormFeature!" ); - return ::rtl::OUString(); - } - } - - //===================================================================== - //= ImplNavToolBar - //===================================================================== - class ImplNavToolBar : public ToolBox - { - protected: - const IFeatureDispatcher* m_pDispatcher; - - public: - ImplNavToolBar( Window* _pParent ) - :ToolBox( _pParent, WB_3DLOOK ) - ,m_pDispatcher( NULL ) - { - } - - void setDispatcher( const IFeatureDispatcher* _pDispatcher ) - { - m_pDispatcher = _pDispatcher; - } - - protected: - // ToolBox overridables - virtual void Select(); - - }; - - //--------------------------------------------------------------------- - void ImplNavToolBar::Select() - { - if ( m_pDispatcher ) - { - if ( !m_pDispatcher->isEnabled( GetCurItemId() ) ) - // the toolbox is a little bit buggy: With TIB_REPEAT, it sometimes - // happens that a select is reported, even though the respective - // item has just been disabled. - return; - m_pDispatcher->dispatch( GetCurItemId() ); - } - } - - //===================================================================== - //= NavigationToolBar - //===================================================================== - DBG_NAME( NavigationToolBar ) - //--------------------------------------------------------------------- - NavigationToolBar::NavigationToolBar( Window* _pParent, WinBits _nStyle, const PCommandImageProvider& _pImageProvider, - const PCommandDescriptionProvider& _pDescriptionProvider ) - :Window( _pParent, _nStyle ) - ,m_pDispatcher( NULL ) - ,m_pImageProvider( _pImageProvider ) - ,m_pDescriptionProvider( _pDescriptionProvider ) - ,m_eImageSize( eSmall ) - ,m_pToolbar( NULL ) - { - DBG_CTOR( NavigationToolBar, NULL ); - implInit( ); - } - - //--------------------------------------------------------------------- - NavigationToolBar::~NavigationToolBar( ) - { - for ( ::std::vector< Window* >::iterator loopChildWins = m_aChildWins.begin(); - loopChildWins != m_aChildWins.end(); - ++loopChildWins - ) - { - delete *loopChildWins; - } - delete m_pToolbar; - DBG_DTOR( NavigationToolBar, NULL ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::setDispatcher( const IFeatureDispatcher* _pDispatcher ) - { - m_pDispatcher = _pDispatcher; - - m_pToolbar->setDispatcher( _pDispatcher ); - - RecordPositionInput* pPositionWindow = static_cast< RecordPositionInput* >( m_pToolbar->GetItemWindow( FormFeature::MoveAbsolute ) ); - OSL_ENSURE( pPositionWindow, "NavigationToolBar::setDispatcher: can't forward the dispatcher to the position window!" ); - if ( pPositionWindow ) - pPositionWindow->setDispatcher( _pDispatcher ); - - updateFeatureStates( ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::updateFeatureStates( ) - { - for ( sal_uInt16 nPos = 0; nPos < m_pToolbar->GetItemCount(); ++nPos ) - { - sal_uInt16 nItemId = m_pToolbar->GetItemId( nPos ); - - if ( ( nItemId == LID_RECORD_LABEL ) || ( nItemId == LID_RECORD_FILLER ) ) - continue; - - // is this item enabled? - bool bEnabled = m_pDispatcher ? m_pDispatcher->isEnabled( nItemId ) : false; - implEnableItem( nItemId, bEnabled ); - } - } - - //--------------------------------------------------------------------- - void NavigationToolBar::implEnableItem( sal_uInt16 _nItemId, bool _bEnabled ) - { - m_pToolbar->EnableItem( _nItemId, _bEnabled ); - - if ( _nItemId == FormFeature::MoveAbsolute ) - m_pToolbar->EnableItem( LID_RECORD_LABEL, _bEnabled ); - - if ( _nItemId == FormFeature::TotalRecords ) - m_pToolbar->EnableItem( LID_RECORD_FILLER, _bEnabled ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::enableFeature( sal_Int16 _nFeatureId, bool _bEnabled ) - { - DBG_ASSERT( m_pToolbar->GetItemPos( (sal_uInt16)_nFeatureId ) != TOOLBOX_ITEM_NOTFOUND, - "NavigationToolBar::enableFeature: invalid id!" ); - - implEnableItem( (sal_uInt16)_nFeatureId, _bEnabled ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::checkFeature( sal_Int16 _nFeatureId, bool _bEnabled ) - { - DBG_ASSERT( m_pToolbar->GetItemPos( (sal_uInt16)_nFeatureId ) != TOOLBOX_ITEM_NOTFOUND, - "NavigationToolBar::checkFeature: invalid id!" ); - - m_pToolbar->CheckItem( (sal_uInt16)_nFeatureId, _bEnabled ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::setFeatureText( sal_Int16 _nFeatureId, const ::rtl::OUString& _rText ) - { - DBG_ASSERT( m_pToolbar->GetItemPos( (sal_uInt16)_nFeatureId ) != TOOLBOX_ITEM_NOTFOUND, - "NavigationToolBar::checkFeature: invalid id!" ); - - Window* pItemWindow = m_pToolbar->GetItemWindow( (sal_uInt16)_nFeatureId ); - if ( pItemWindow ) - pItemWindow->SetText( _rText ); - else - m_pToolbar->SetItemText( (sal_uInt16)_nFeatureId, _rText ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::implInit( ) - { - m_pToolbar = new ImplNavToolBar( this ); - m_pToolbar->SetOutStyle( TOOLBOX_STYLE_FLAT ); - m_pToolbar->Show(); - - // need the SfxApplication for retrieving informations about our - // items. We could duplicate all the information here in our lib - // (such as the item text and the image), but why should we? - - struct FeatureDescription - { - sal_uInt16 nId; - bool bRepeat; - bool bItemWindow; - } aSupportedFeatures[] = - { - { LID_RECORD_LABEL, false, true }, - { FormFeature::MoveAbsolute, false, true }, - { LID_RECORD_FILLER, false, true }, - { FormFeature::TotalRecords, false, true }, - { FormFeature::MoveToFirst, true, false }, - { FormFeature::MoveToPrevious, true, false }, - { FormFeature::MoveToNext, true, false }, - { FormFeature::MoveToLast, true, false }, - { FormFeature::MoveToInsertRow, false, false }, - { 0, false, false }, - { FormFeature::SaveRecordChanges, false, false }, - { FormFeature::UndoRecordChanges, false, false }, - { FormFeature::DeleteRecord, false, false }, - { FormFeature::ReloadForm, false, false }, - { FormFeature::RefreshCurrentControl, false, false }, - { 0, false, false }, - { FormFeature::SortAscending, false, false }, - { FormFeature::SortDescending, false, false }, - { FormFeature::InteractiveSort, false, false }, - { FormFeature::AutoFilter, false, false }, - { FormFeature::InteractiveFilter, false, false }, - { FormFeature::ToggleApplyFilter, false, false }, - { FormFeature::RemoveFilterAndSort, false, false }, - }; - - size_t nSupportedFeatures = SAL_N_ELEMENTS( aSupportedFeatures ); - FeatureDescription* pSupportedFeatures = aSupportedFeatures; - FeatureDescription* pSupportedFeaturesEnd = aSupportedFeatures + nSupportedFeatures; - for ( ; pSupportedFeatures < pSupportedFeaturesEnd; ++pSupportedFeatures ) - { - if ( pSupportedFeatures->nId ) - { // it's _not_ a separator - - // insert the entry - m_pToolbar->InsertItem( pSupportedFeatures->nId, String(), pSupportedFeatures->bRepeat ? TIB_REPEAT : 0 ); - m_pToolbar->SetQuickHelpText( pSupportedFeatures->nId, String() ); // TODO - - if ( !isArtificialItem( pSupportedFeatures->nId ) ) - { - ::rtl::OUString sCommandURL( lcl_getCommandURL( pSupportedFeatures->nId ) ); - m_pToolbar->SetItemCommand( pSupportedFeatures->nId, sCommandURL ); - if ( m_pDescriptionProvider ) - m_pToolbar->SetQuickHelpText( pSupportedFeatures->nId, m_pDescriptionProvider->getCommandDescription( sCommandURL ) ); - } - - if ( pSupportedFeatures->bItemWindow ) - { - Window* pItemWindow = NULL; - if ( FormFeature::MoveAbsolute == pSupportedFeatures->nId ) - { - pItemWindow = new RecordPositionInput( m_pToolbar ); - static_cast< RecordPositionInput* >( pItemWindow )->setDispatcher( m_pDispatcher ); - } - else if ( LID_RECORD_FILLER == pSupportedFeatures->nId ) - { - pItemWindow = new FixedText( m_pToolbar, WB_CENTER | WB_VCENTER ); - pItemWindow->SetBackground(Wallpaper(Color(COL_TRANSPARENT))); - } - else - { - pItemWindow = new FixedText( m_pToolbar, WB_VCENTER ); - pItemWindow->SetBackground(); - pItemWindow->SetPaintTransparent(sal_True); - } - m_aChildWins.push_back( pItemWindow ); - - switch ( pSupportedFeatures->nId ) - { - case LID_RECORD_LABEL: - pItemWindow->SetText( getLabelString( RID_STR_LABEL_RECORD ) ); - break; - - case LID_RECORD_FILLER: - pItemWindow->SetText( getLabelString( RID_STR_LABEL_OF ) ); - break; - } - - m_pToolbar->SetItemWindow( pSupportedFeatures->nId, pItemWindow ); - } - } - else - { // a separator - m_pToolbar->InsertSeparator( ); - } - } - - forEachItemWindow( &NavigationToolBar::adjustItemWindowWidth, NULL ); - - implUpdateImages(); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::implUpdateImages() - { - OSL_ENSURE( m_pImageProvider, "NavigationToolBar::implUpdateImages: no image provider => no images!" ); - if ( !m_pImageProvider ) - return; - - const sal_uInt16 nItemCount = m_pToolbar->GetItemCount(); - - // collect the FormFeatures in the toolbar - typedef ::std::vector< sal_Int16 > FormFeatures; - FormFeatures aFormFeatures; - aFormFeatures.reserve( nItemCount ); - - for ( sal_uInt16 i=0; i<nItemCount; ++i ) - { - sal_uInt16 nId = m_pToolbar->GetItemId( i ); - if ( ( TOOLBOXITEM_BUTTON == m_pToolbar->GetItemType( i ) ) && !isArtificialItem( nId ) ) - aFormFeatures.push_back( nId ); - } - - // translate them into command URLs - CommandURLs aCommandURLs( aFormFeatures.size() ); - for ( FormFeatures::const_iterator formFeature = aFormFeatures.begin(); - formFeature != aFormFeatures.end(); - ++formFeature - ) - { - aCommandURLs[ formFeature - aFormFeatures.begin() ] = lcl_getCommandURL( *formFeature ); - } - - // retrieve the images for the command URLs - CommandImages aCommandImages = m_pImageProvider->getCommandImages( aCommandURLs, m_eImageSize == eLarge ); - - // and set them at the toolbar - CommandImages::const_iterator commandImage = aCommandImages.begin(); - for ( FormFeatures::const_iterator formFeature = aFormFeatures.begin(); - formFeature != aFormFeatures.end(); - ++formFeature, ++commandImage - ) - { - m_pToolbar->SetItemImage( *formFeature, *commandImage ); - } - - // parts of our layout is dependent on the size of our icons - Resize(); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::implSetImageSize( ImageSize _eSize ) - { - if ( _eSize != m_eImageSize ) - { - m_eImageSize = _eSize; - implUpdateImages(); - } - } - - //--------------------------------------------------------------------- - void NavigationToolBar::SetImageSize( ImageSize _eSize ) - { - implSetImageSize( _eSize ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::ShowFunctionGroup( FunctionGroup _eGroup, bool _bShow ) - { - const sal_uInt16* pGroupIds = NULL; - - switch ( _eGroup ) - { - case ePosition: - { - static const sal_uInt16 aPositionIds[] = { - LID_RECORD_LABEL, FormFeature::MoveAbsolute, LID_RECORD_FILLER, FormFeature::TotalRecords, 0 - }; - pGroupIds = aPositionIds; - } - break; - case eNavigation: - { - static const sal_uInt16 aNavigationIds[] = { - FormFeature::MoveToFirst, FormFeature::MoveToPrevious, FormFeature::MoveToNext, FormFeature::MoveToLast, FormFeature::MoveToInsertRow, 0 - }; - pGroupIds = aNavigationIds; - } - break; - case eRecordActions: - { - static const sal_uInt16 aActionIds[] = { - FormFeature::SaveRecordChanges, FormFeature::UndoRecordChanges, FormFeature::DeleteRecord, FormFeature::ReloadForm, FormFeature::RefreshCurrentControl, 0 - }; - pGroupIds = aActionIds; - } - break; - case eFilterSort: - { - static const sal_uInt16 aFilterSortIds[] = { - FormFeature::SortAscending, FormFeature::SortDescending, FormFeature::InteractiveSort, FormFeature::AutoFilter, FormFeature::InteractiveFilter, FormFeature::ToggleApplyFilter, FormFeature::RemoveFilterAndSort, 0 - }; - pGroupIds = aFilterSortIds; - } - break; - default: - OSL_FAIL( "NavigationToolBar::ShowFunctionGroup: invalid group id!" ); - } - - if ( pGroupIds ) - while ( *pGroupIds ) - m_pToolbar->ShowItem( *pGroupIds++, _bShow ); - } - - //--------------------------------------------------------------------- - bool NavigationToolBar::IsFunctionGroupVisible( FunctionGroup _eGroup ) - { - sal_uInt16 nIndicatorItem = 0; - switch ( _eGroup ) - { - case ePosition : nIndicatorItem = LID_RECORD_LABEL; break; - case eNavigation : nIndicatorItem = FormFeature::MoveToFirst; break; - case eRecordActions : nIndicatorItem = FormFeature::SaveRecordChanges; break; - case eFilterSort : nIndicatorItem = FormFeature::SortAscending; break; - default: - OSL_FAIL( "NavigationToolBar::IsFunctionGroupVisible: invalid group id!" ); - } - - return m_pToolbar->IsItemVisible( nIndicatorItem ); - } - - //------------------------------------------------------------------------------ - void NavigationToolBar::StateChanged( StateChangedType nType ) - { - Window::StateChanged( nType ); - - switch ( nType ) - { - case STATE_CHANGE_ZOOM: -// m_pToolbar->SetZoom( GetZoom() ); -// forEachItemWindow( setItemWindowZoom, NULL ); - // the ToolBox class is not zoomable at the moment, so - // we better have no zoom at all instead of only half a zoom ... - break; - - case STATE_CHANGE_CONTROLFONT: - forEachItemWindow( &NavigationToolBar::setItemControlFont, NULL ); - forEachItemWindow( &NavigationToolBar::adjustItemWindowWidth, NULL ); - break; - - case STATE_CHANGE_CONTROLFOREGROUND: - forEachItemWindow( &NavigationToolBar::setItemControlForeground, NULL ); - break; - - case STATE_CHANGE_MIRRORING: - { - sal_Bool bIsRTLEnabled( IsRTLEnabled() ); - m_pToolbar->EnableRTL( bIsRTLEnabled ); - forEachItemWindow( &NavigationToolBar::enableItemRTL, &bIsRTLEnabled ); - Resize(); - } - break; - } - } - - //--------------------------------------------------------------------- - void NavigationToolBar::Resize() - { - // resize/position the toolbox as a whole - sal_Int32 nToolbarHeight = m_pToolbar->CalcWindowSizePixel().Height(); - - sal_Int32 nMyHeight = GetOutputSizePixel().Height(); - m_pToolbar->SetPosSizePixel( Point( 0, ( nMyHeight - nToolbarHeight ) / 2 ), - Size( GetSizePixel().Width(), nToolbarHeight ) ); - - Window::Resize(); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::SetControlBackground() - { - Window::SetControlBackground(); - m_pToolbar->SetControlBackground(); - forEachItemWindow( &NavigationToolBar::setItemBackground, NULL ); - - implUpdateImages(); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::SetControlBackground( const Color& _rColor ) - { - Window::SetControlBackground( _rColor ); - m_pToolbar->SetControlBackground( _rColor ); - forEachItemWindow( &NavigationToolBar::setItemBackground, &_rColor ); - - implUpdateImages(); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::SetTextLineColor( ) - { - Window::SetTextLineColor( ); - m_pToolbar->SetTextLineColor( ); - forEachItemWindow( &NavigationToolBar::setTextLineColor, NULL ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::SetTextLineColor( const Color& _rColor ) - { - Window::SetTextLineColor( _rColor ); - m_pToolbar->SetTextLineColor( _rColor ); - forEachItemWindow( &NavigationToolBar::setTextLineColor, &_rColor ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::forEachItemWindow( ItemWindowHandler _handler, const void* _pParam ) - { - for ( sal_uInt16 item = 0; item < m_pToolbar->GetItemCount(); ++item ) - { - sal_uInt16 nItemId = m_pToolbar->GetItemId( item ); - Window* pItemWindow = m_pToolbar->GetItemWindow( nItemId ); - if ( pItemWindow ) - (this->*_handler)( nItemId, pItemWindow, _pParam ); - } - } - - //--------------------------------------------------------------------- - void NavigationToolBar::setItemBackground( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* _pColor ) const - { - if ( _pColor ) - _pItemWindow->SetControlBackground( *static_cast< const Color* >( _pColor ) ); - else - _pItemWindow->SetControlBackground(); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::setTextLineColor( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* _pColor ) const - { - if ( _pColor ) - _pItemWindow->SetTextLineColor( *static_cast< const Color* >( _pColor ) ); - else - _pItemWindow->SetTextLineColor(); - } -#if 0 - //--------------------------------------------------------------------- - void NavigationToolBar::setItemWindowZoom( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* /* _pParam */ ) const - { - _pItemWindow->SetZoom( GetZoom() ); - _pItemWindow->SetZoomedPointFont( IsControlFont() ? GetControlFont() : GetPointFont() ); - } -#endif - //--------------------------------------------------------------------- - void NavigationToolBar::setItemControlFont( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* /* _pParam */ ) const - { - if ( IsControlFont() ) - _pItemWindow->SetControlFont( GetControlFont() ); - else - _pItemWindow->SetControlFont( ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::setItemControlForeground( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* /* _pParam */ ) const - { - if ( IsControlForeground() ) - _pItemWindow->SetControlForeground( GetControlForeground() ); - else - _pItemWindow->SetControlForeground( ); - _pItemWindow->SetTextColor( GetTextColor() ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::adjustItemWindowWidth( sal_uInt16 _nItemId, Window* _pItemWindow, const void* /* _pParam */ ) const - { - String sItemText; - switch ( _nItemId ) - { - case LID_RECORD_LABEL: - sItemText = getLabelString( RID_STR_LABEL_RECORD ); - break; - - case LID_RECORD_FILLER: - sItemText = getLabelString( RID_STR_LABEL_OF ); - break; - - case FormFeature::MoveAbsolute: - sItemText = String::CreateFromAscii( "12345678" ); - break; - - case FormFeature::TotalRecords: - sItemText = String::CreateFromAscii( "123456" ); - break; - } - - Size aSize( _pItemWindow->GetTextWidth( sItemText ), /* _pItemWindow->GetSizePixel( ).Height() */ _pItemWindow->GetTextHeight() + 4 ); - aSize.Width() += 6; - _pItemWindow->SetSizePixel( aSize ); - - m_pToolbar->SetItemWindow( _nItemId, _pItemWindow ); - } - - //--------------------------------------------------------------------- - void NavigationToolBar::enableItemRTL( sal_uInt16 /*_nItemId*/, Window* _pItemWindow, const void* _pIsRTLEnabled ) const - { - _pItemWindow->EnableRTL( *static_cast< const sal_Bool* >( _pIsRTLEnabled ) ); - } - - //===================================================================== - //= RecordPositionInput - //===================================================================== - //--------------------------------------------------------------------- - RecordPositionInput::RecordPositionInput( Window* _pParent ) - :NumericField( _pParent, WB_BORDER | WB_VCENTER ) - ,m_pDispatcher( NULL ) - { - SetMin( 1 ); - SetFirst( 1 ); - SetSpinSize( 1 ); - SetDecimalDigits( 0 ); - SetStrictFormat( sal_True ); - SetBorderStyle( WINDOW_BORDER_MONO ); - } - - //--------------------------------------------------------------------- - RecordPositionInput::~RecordPositionInput() - { - } - - //--------------------------------------------------------------------- - void RecordPositionInput::setDispatcher( const IFeatureDispatcher* _pDispatcher ) - { - m_pDispatcher = _pDispatcher; - } - - //--------------------------------------------------------------------- - void RecordPositionInput::FirePosition( sal_Bool _bForce ) - { - if ( _bForce || ( GetText() != GetSavedValue() ) ) - { - sal_Int64 nRecord = GetValue(); - if ( nRecord < GetMin() || nRecord > GetMax() ) - return; - - if ( m_pDispatcher ) - m_pDispatcher->dispatchWithArgument( FormFeature::MoveAbsolute, "Position", makeAny( (sal_Int32)nRecord ) ); - - SaveValue(); - } - } - - //--------------------------------------------------------------------- - void RecordPositionInput::LoseFocus() - { - FirePosition( sal_False ); - } - - //--------------------------------------------------------------------- - void RecordPositionInput::KeyInput( const KeyEvent& rKeyEvent ) - { - if( rKeyEvent.GetKeyCode() == KEY_RETURN && GetText().Len() ) - FirePosition( sal_True ); - else - NumericField::KeyInput( rKeyEvent ); - } - - -//......................................................................... -} // namespace frm -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/solar/inc/navtoolbar.hxx b/forms/source/solar/inc/navtoolbar.hxx deleted file mode 100644 index f497c2ffb..000000000 --- a/forms/source/solar/inc/navtoolbar.hxx +++ /dev/null @@ -1,197 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOLAR_CONTROL_NAVTOOLBAR_HXX -#define FORMS_SOLAR_CONTROL_NAVTOOLBAR_HXX - -#include <vcl/toolbox.hxx> -#include <vcl/field.hxx> - -#include <boost/shared_ptr.hpp> - -//......................................................................... -namespace frm -{ -//......................................................................... - - class IFeatureDispatcher; - class ICommandImageProvider; - class ICommandDescriptionProvider; - - class ImplNavToolBar; - - //===================================================================== - //= NavigationToolBar - //===================================================================== - class NavigationToolBar : public Window - { - public: - enum ImageSize - { - eSmall, - eLarge - }; - - enum FunctionGroup - { - ePosition, - eNavigation, - eRecordActions, - eFilterSort - }; - - private: - const IFeatureDispatcher* m_pDispatcher; - const ::boost::shared_ptr< const ICommandImageProvider > - m_pImageProvider; - const ::boost::shared_ptr< const ICommandDescriptionProvider > - m_pDescriptionProvider; - ImageSize m_eImageSize; - ImplNavToolBar* m_pToolbar; - ::std::vector< Window* > m_aChildWins; - - public: - NavigationToolBar( - Window* _pParent, - WinBits _nStyle, - const ::boost::shared_ptr< const ICommandImageProvider >& _pImageProvider, - const ::boost::shared_ptr< const ICommandDescriptionProvider >& _pDescriptionProvider - ); - ~NavigationToolBar( ); - - /** sets the dispatcher which is to be used for the features - - If the dispatcher is the same as the one which is currently set, - then the states of the features are updated - - @param _pDispatcher - the new (or old) dispatcher. The caller is reponsible for - ensuring the life time of the object does exceed the life time - of the tool bar instance. - */ - void setDispatcher( const IFeatureDispatcher* _pDispatcher ); - - /// enables or disables a given feature - void enableFeature( sal_Int16 _nFeatureId, bool _bEnabled ); - - /// checks or unchecks a given feature - void checkFeature( sal_Int16 _nFeatureId, bool _bEnabled ); - - /// sets the text of a given feature - void setFeatureText( sal_Int16 _nFeatureId, const ::rtl::OUString& _rText ); - - /** retrieves the current image size - */ - inline ImageSize GetImageSize( ) const { return m_eImageSize; } - - /** sets the size of the images - */ - void SetImageSize( ImageSize _eSize ); - - /** shows or hides a function group - */ - void ShowFunctionGroup( FunctionGroup _eGroup, bool _bShow ); - - /** determines whether or not a given function group is currently visible - */ - bool IsFunctionGroupVisible( FunctionGroup _eGroup ); - - // Window "overridables" (hiding the respective Window methods) - void SetControlBackground(); - void SetControlBackground( const Color& rColor ); - void SetTextLineColor( ); - void SetTextLineColor( const Color& rColor ); - - protected: - // Window overridables - virtual void Resize(); - virtual void StateChanged( StateChangedType nType ); - - /// ctor implementation - void implInit( ); - - /// impl version of SetImageSize - void implSetImageSize( ImageSize _eSize ); - - /// updates the images of our items - void implUpdateImages(); - - /// enables or disables an item, plus possible dependent items - void implEnableItem( sal_uInt16 _nItemId, bool _bEnabled ); - - /** update the states of all features, using the callback - */ - void updateFeatureStates( ); - - // iterating through item windows - typedef void (NavigationToolBar::*ItemWindowHandler) (sal_uInt16, Window*, const void*) const; - void forEachItemWindow( ItemWindowHandler _handler, const void* _pParam ); - - void setItemBackground( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* _pColor ) const; - void setTextLineColor( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* _pColor ) const; -#if 0 - void setItemWindowZoom( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* /* _pParam */ ) const; -#endif - void setItemControlFont( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* /* _pParam */ ) const; - void setItemControlForeground( sal_uInt16 /* _nItemId */, Window* _pItemWindow, const void* /* _pParam */ ) const; - void adjustItemWindowWidth( sal_uInt16 _nItemId, Window* _pItemWindow, const void* /* _pParam */ ) const; - void enableItemRTL( sal_uInt16 /*_nItemId*/, Window* _pItemWindow, const void* _pIsRTLEnabled ) const; - }; - - //===================================================================== - //= RecordPositionInput - //===================================================================== - class RecordPositionInput : public NumericField - { - private: - const IFeatureDispatcher* m_pDispatcher; - - public: - RecordPositionInput( Window* _pParent ); - ~RecordPositionInput(); - - /** sets the dispatcher which is to be used for the features - */ - void setDispatcher( const IFeatureDispatcher* _pDispatcher ); - - protected: - // Window overridables - virtual void LoseFocus(); - virtual void KeyInput( const KeyEvent& rKeyEvent ); - - private: - void FirePosition( sal_Bool _bForce ); - }; - -//......................................................................... -} // namespace frm -//......................................................................... - -#endif // FORMS_SOLAR_CONTROL_NAVTOOLBAR_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/NameContainer.hxx b/forms/source/xforms/NameContainer.hxx deleted file mode 100644 index fe8a6a480..000000000 --- a/forms/source/xforms/NameContainer.hxx +++ /dev/null @@ -1,224 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _NAMECONTAINER_HXX -#define _NAMECONTAINER_HXX - -#include <cppuhelper/implbase1.hxx> -#include <map> - -#include <com/sun/star/container/XNameContainer.hpp> -#include <com/sun/star/container/NoSuchElementException.hpp> -#include <com/sun/star/lang/IllegalArgumentException.hpp> -#include <com/sun/star/lang/WrappedTargetException.hpp> -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/RuntimeException.hpp> -#include <com/sun/star/uno/Type.hxx> - -typedef cppu::WeakImplHelper1< - com::sun::star::container::XNameContainer -> NameContainer_t; - -template<class T> -class NameContainer : public NameContainer_t -{ -protected: - typedef std::map<rtl::OUString,T> map_t; - map_t maItems; - - - bool hasItems() - { - return ! maItems.empty(); - } - - typename map_t::const_iterator findItem( const rtl::OUString& rName ) - { - return maItems.find( rName ); - } - - bool hasItem( const rtl::OUString& rName ) - { - return findItem( rName ) != maItems.end(); - } - - T getItem( const rtl::OUString& rName ) - { - OSL_ENSURE( hasItem( rName ), "can't get non-existant item" ); - return maItems[ rName ]; - } - - - void replace( const rtl::OUString& rName, - const T& aElement ) - { - OSL_ENSURE( hasItem( rName ), "unknown item" ); - maItems[ rName ] = aElement; - } - - void insert( const rtl::OUString& rName, - const T& aElement ) - { - OSL_ENSURE( ! hasItem( rName ), "item already in set" ); - maItems[ rName ] = aElement; - } - - void remove( const rtl::OUString& rName ) - { - OSL_ENSURE( hasItem( rName ), "item not in set" ); - maItems.erase( rName ); - } - - -public: - - NameContainer() {} - virtual ~NameContainer() {} - - // - // methods for XElementAccess - // - - virtual com::sun::star::uno::Type SAL_CALL getElementType() - throw( com::sun::star::uno::RuntimeException ) - { - return getCppuType( static_cast<T*>( NULL ) ); - } - - virtual sal_Bool SAL_CALL hasElements() - throw( com::sun::star::uno::RuntimeException ) - { - return hasItems(); - } - - - // - // methods for XNameAccess (inherits XElementAccess) - // - - virtual com::sun::star::uno::Any SAL_CALL getByName( - const rtl::OUString& rName ) - throw( com::sun::star::container::NoSuchElementException, - com::sun::star::lang::WrappedTargetException, - com::sun::star::uno::RuntimeException ) - { - typename map_t::const_iterator aIter = findItem( rName ); - if( aIter == maItems.end() ) - throw com::sun::star::container::NoSuchElementException(); - else - return com::sun::star::uno::makeAny( aIter->second ); - } - - virtual com::sun::star::uno::Sequence<rtl::OUString> SAL_CALL getElementNames() - throw( com::sun::star::uno::RuntimeException ) - { - com::sun::star::uno::Sequence<rtl::OUString> aSequence( maItems.size() ); - typename map_t::const_iterator aIter = maItems.begin(); - rtl::OUString* pStrings = aSequence.getArray(); - while( aIter != maItems.end() ) - { - *pStrings = aIter->first; - ++aIter; - ++pStrings; - } - OSL_ENSURE( pStrings == aSequence.getArray() + aSequence.getLength(), - "sequence not of right size; possible buffer overflow" ); - return aSequence; - } - - virtual sal_Bool SAL_CALL hasByName( - const rtl::OUString& rName ) - throw( com::sun::star::uno::RuntimeException ) - { - return hasItem( rName ); - } - - - // - // methods for XNameReplace (inherits XNameAccess) - // - - virtual void SAL_CALL replaceByName( - const rtl::OUString& rName, - const com::sun::star::uno::Any& aElement ) - throw( com::sun::star::lang::IllegalArgumentException, - com::sun::star::container::NoSuchElementException, - com::sun::star::lang::WrappedTargetException, - com::sun::star::uno::RuntimeException) - { - T aItem; - if( aElement >>= aItem ) - if( hasByName( rName ) ) - replace( rName, aItem ); - else - throw com::sun::star::container::NoSuchElementException(); - else - throw com::sun::star::lang::IllegalArgumentException(); - } - - - // - // methods for XNameContainer (inherits XNameReplace) - // - - virtual void SAL_CALL insertByName( - const rtl::OUString& rName, - 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 ) - { - T aItem; - if( aElement >>= aItem ) - if( ! hasByName( rName ) ) - insert( rName, aItem ); - else - throw com::sun::star::container::ElementExistException(); - else - throw com::sun::star::lang::IllegalArgumentException(); - } - - virtual void SAL_CALL removeByName( - const rtl::OUString& rName ) - throw( com::sun::star::container::NoSuchElementException, - com::sun::star::lang::WrappedTargetException, - com::sun::star::uno::RuntimeException) - { - if( hasByName( rName ) ) - remove( rName ); - else - throw com::sun::star::container::NoSuchElementException(); - } - -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/binding.cxx b/forms/source/xforms/binding.cxx deleted file mode 100644 index 4c08e36cf..000000000 --- a/forms/source/xforms/binding.cxx +++ /dev/null @@ -1,1412 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "binding.hxx" - -#include "model.hxx" -#include "unohelper.hxx" -#include "NameContainer.hxx" -#include "evaluationcontext.hxx" -#include "convert.hxx" -#include "resourcehelper.hxx" -#include "xmlhelper.hxx" -#include "xformsevent.hxx" - -#include <rtl/ustrbuf.hxx> -#include <osl/diagnose.h> - -#include <tools/diagnose_ex.h> - -#include <algorithm> -#include <functional> - -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/xml/dom/XNodeList.hpp> -#include <com/sun/star/xml/dom/XNode.hpp> -#include <com/sun/star/xml/dom/XDocument.hpp> -#include <com/sun/star/xml/dom/XElement.hpp> -#include <com/sun/star/xml/dom/NodeType.hpp> -#include <com/sun/star/xml/dom/events/XEventTarget.hpp> -#include <com/sun/star/xml/dom/events/XEventListener.hpp> -#include <com/sun/star/xml/dom/events/XDocumentEvent.hpp> -#include <com/sun/star/lang/XUnoTunnel.hpp> -#include <com/sun/star/lang/IndexOutOfBoundsException.hpp> -#include <com/sun/star/container/XSet.hpp> -#include <com/sun/star/container/XNameContainer.hpp> - -#include <comphelper/propertysetinfo.hxx> -#include <unotools/textsearch.hxx> -#include <cppuhelper/typeprovider.hxx> - -using namespace com::sun::star::xml::xpath; -using namespace com::sun::star::xml::dom::events; - -using rtl::OUString; -using rtl::OUStringBuffer; -using std::vector; -using xforms::Binding; -using xforms::MIP; -using xforms::Model; -using xforms::getResource; -using xforms::EvaluationContext; -using com::sun::star::beans::PropertyVetoException; -using com::sun::star::beans::UnknownPropertyException; -using com::sun::star::beans::XPropertySet; -using com::sun::star::container::XSet; -using com::sun::star::container::XNameAccess; -using com::sun::star::form::binding::IncompatibleTypesException; -using com::sun::star::form::binding::InvalidBindingStateException; -using com::sun::star::form::binding::XValueBinding; -using com::sun::star::lang::EventObject; -using com::sun::star::lang::IllegalArgumentException; -using com::sun::star::lang::IndexOutOfBoundsException; -using com::sun::star::lang::NoSupportException; -using com::sun::star::lang::NullPointerException; -using com::sun::star::lang::WrappedTargetException; -using com::sun::star::lang::XUnoTunnel; -using com::sun::star::uno::Any; -using com::sun::star::uno::Reference; -using com::sun::star::uno::RuntimeException; -using com::sun::star::uno::Sequence; -using com::sun::star::uno::UNO_QUERY; -using com::sun::star::uno::UNO_QUERY_THROW; -using com::sun::star::uno::XInterface; -using com::sun::star::uno::Exception; -using com::sun::star::uno::makeAny; -using com::sun::star::util::XModifyListener; -using com::sun::star::xforms::XDataTypeRepository; -using com::sun::star::xml::dom::NodeType_ATTRIBUTE_NODE; -using com::sun::star::xml::dom::NodeType_TEXT_NODE; -using com::sun::star::xml::dom::XNode; -using com::sun::star::xml::dom::XNodeList; -using com::sun::star::xml::dom::events::XEventListener; -using com::sun::star::xml::dom::events::XEventTarget; -using com::sun::star::xsd::XDataType; - - - - -#define EXCEPT(msg) OUSTRING(msg),static_cast<XValueBinding*>(this) - -#define HANDLE_BindingID 0 -#define HANDLE_BindingExpression 1 -#define HANDLE_Model 2 -#define HANDLE_ModelID 3 -#define HANDLE_BindingNamespaces 4 -#define HANDLE_ReadonlyExpression 5 -#define HANDLE_RelevantExpression 6 -#define HANDLE_RequiredExpression 7 -#define HANDLE_ConstraintExpression 8 -#define HANDLE_CalculateExpression 9 -#define HANDLE_Type 10 -#define HANDLE_ReadOnly 11 // from com.sun.star.form.binding.ValueBinding, for interaction with a bound form control -#define HANDLE_Relevant 12 // from com.sun.star.form.binding.ValueBinding, for interaction with a bound form control -#define HANDLE_ModelNamespaces 13 -#define HANDLE_ExternalData 14 - - -Binding::Binding() : - mxModel(), - msBindingID(), - maBindingExpression(), - maReadonly(), - mxNamespaces( new NameContainer<OUString>() ), - mbInCalculate( false ), - mnDeferModifyNotifications( 0 ), - mbValueModified( false ), - mbBindingModified( false ) - -{ - initializePropertySet(); -} - -Binding::~Binding() throw() -{ - _setModel(NULL); -} - - -Binding::Model_t Binding::getModel() const -{ - return mxModel; -} - -void Binding::_setModel( const Model_t& xModel ) -{ - PropertyChangeNotifier aNotifyModelChange( *this, HANDLE_Model ); - PropertyChangeNotifier aNotifyModelIDChange( *this, HANDLE_ModelID ); - - // prepare binding for removal of old model - clear(); // remove all cached data (e.g. XPath evaluation results) - XNameContainer_t xNamespaces = getModelNamespaces(); // save namespaces - - mxModel = xModel; - - // set namespaces (and move to model, if appropriate) - setBindingNamespaces( xNamespaces ); - _checkBindingID(); - - notifyAndCachePropertyValue( HANDLE_ExternalData ); -} - - -OUString Binding::getModelID() const -{ - Model* pModel = getModelImpl(); - return ( pModel == NULL ) ? OUString() : pModel->getID(); -} - - -Binding::XNodeList_t Binding::getXNodeList() -{ - // first make sure we are bound - if( ! maBindingExpression.hasValue() ) - bind( sal_False ); - - return maBindingExpression.getXNodeList(); -} - -bool Binding::isSimpleBinding() const -{ - return maBindingExpression.isSimpleExpression() - && maReadonly.isSimpleExpression() - && maRelevant.isSimpleExpression() - && maRequired.isSimpleExpression() - && maConstraint.isSimpleExpression() - && maCalculate.isSimpleExpression(); -} - -bool Binding::isSimpleBindingExpression() const -{ - return maBindingExpression.isSimpleExpression(); -} - -void Binding::update() -{ - // clear all expressions (to remove cached node references) - maBindingExpression.clear(); - maReadonly.clear(); - maRelevant.clear(); - maRequired.clear(); - maConstraint.clear(); - maCalculate.clear(); - - // let's just pretend the binding has been modified -> full rebind() - bindingModified(); -} - -void Binding::deferNotifications( bool bDefer ) -{ - mnDeferModifyNotifications += ( bDefer ? 1 : -1 ); - OSL_ENSURE( mnDeferModifyNotifications >= 0, "you're deferring too much" ); - - if( mnDeferModifyNotifications == 0 ) - { - if( mbBindingModified ) - bindingModified(); - if( mbValueModified ) - valueModified(); - } - - OSL_ENSURE( ( mnDeferModifyNotifications > 0 ) - || ( ! mbBindingModified && ! mbValueModified ), - "deferred modifications not delivered?" ); -} - -bool Binding::isValid() -{ - // TODO: determine whether node is suitable, not just whether it exists - return maBindingExpression.getNode().is() && - isValid_DataType() && - maMIP.isConstraint() && - ( ! maMIP.isRequired() || - ( maBindingExpression.hasValue() && - maBindingExpression.getString().getLength() > 0 ) ); -} - -bool Binding::isUseful() -{ - // we are useful, if - // 0) we don't have a model - // (at least, in this case we shouldn't be removed from the model) - // 1) we have a proper name - // 2) we have some MIPs, - // 3) we are bound to some control - // (this can be assumed if some listeners are set) - bool bUseful = - getModelImpl() == NULL -// || msBindingID.getLength() > 0 - || msTypeName.getLength() > 0 - || ! maReadonly.isEmptyExpression() - || ! maRelevant.isEmptyExpression() - || ! maRequired.isEmptyExpression() - || ! maConstraint.isEmptyExpression() - || ! maCalculate.isEmptyExpression() - || ! maModifyListeners.empty() - || ! maListEntryListeners.empty() - || ! maValidityListeners.empty(); - - return bUseful; -} - -OUString Binding::explainInvalid() -{ - OUString sReason; - if( ! maBindingExpression.getNode().is() ) - { - sReason = ( maBindingExpression.getExpression().getLength() == 0 ) - ? getResource( RID_STR_XFORMS_NO_BINDING_EXPRESSION ) - : getResource( RID_STR_XFORMS_INVALID_BINDING_EXPRESSION ); - } - else if( ! isValid_DataType() ) - { - sReason = explainInvalid_DataType(); - if( sReason.getLength() == 0 ) - { - // no explanation given by data type? Then give generic message - sReason = getResource( RID_STR_XFORMS_INVALID_VALUE, - maMIP.getTypeName() ); - } - } - else if( ! maMIP.isConstraint() ) - { - sReason = maMIP.getConstraintExplanation(); - } - else if( maMIP.isRequired() && maBindingExpression.hasValue() && - ( maBindingExpression.getString().getLength() == 0 ) ) - { - sReason = getResource( RID_STR_XFORMS_REQUIRED ); - } - // else: no explanation given; should only happen if data is valid - - OSL_ENSURE( ( sReason.getLength() == 0 ) == isValid(), - "invalid data should have an explanation!" ); - - return sReason; -} - - - -EvaluationContext Binding::getEvaluationContext() const -{ - OSL_ENSURE( getModelImpl() != NULL, "need model impl" ); - EvaluationContext aContext = getModelImpl()->getEvaluationContext(); - aContext.mxNamespaces = getBindingNamespaces(); - return aContext; -} - -::std::vector<EvaluationContext> Binding::getMIPEvaluationContexts() -{ - OSL_ENSURE( getModelImpl() != NULL, "need model impl" ); - - // bind (in case we were not bound before) - bind( sal_False ); - return _getMIPEvaluationContexts(); -} - - -Binding::IntSequence_t Binding::getUnoTunnelID() -{ - static cppu::OImplementationId aImplementationId; - return aImplementationId.getImplementationId(); -} - -Binding* SAL_CALL Binding::getBinding( const Reference<XPropertySet>& xPropertySet ) -{ - Reference<XUnoTunnel> xTunnel( xPropertySet, UNO_QUERY ); - return xTunnel.is() - ? reinterpret_cast<Binding*>( xTunnel->getSomething(getUnoTunnelID())) - : NULL; -} - - - - -OUString Binding::getBindingID() const -{ - return msBindingID; -} - -void Binding::setBindingID( const OUString& sBindingID ) -{ - msBindingID = sBindingID; -} - -OUString Binding::getBindingExpression() const -{ - return maBindingExpression.getExpression(); -} - -void Binding::setBindingExpression( const OUString& sBindingExpression) -{ - maBindingExpression.setExpression( sBindingExpression ); - bindingModified(); -} - -OUString Binding::getReadonlyExpression() const -{ - return maReadonly.getExpression(); -} - -void Binding::setReadonlyExpression( const OUString& sReadonly) -{ - maReadonly.setExpression( sReadonly ); - bindingModified(); -} - -OUString Binding::getRelevantExpression() const -{ - return maRelevant.getExpression(); -} - -void Binding::setRelevantExpression( const OUString& sRelevant ) -{ - maRelevant.setExpression( sRelevant ); - bindingModified(); -} - -OUString Binding::getRequiredExpression() const -{ - return maRequired.getExpression(); -} - -void Binding::setRequiredExpression( const OUString& sRequired ) -{ - maRequired.setExpression( sRequired ); - bindingModified(); -} - -OUString Binding::getConstraintExpression() const -{ - return maConstraint.getExpression(); -} - -void Binding::setConstraintExpression( const OUString& sConstraint ) -{ - maConstraint.setExpression( sConstraint ); - msExplainConstraint = getResource( RID_STR_XFORMS_INVALID_CONSTRAINT, - sConstraint ); - - // TODO: This should only re-evaluate the constraint, and notify - // the validity constraint listeners; instead we currently pretend - // the entire binding was notified, which does a little too much. - bindingModified(); -} - -OUString Binding::getCalculateExpression() const -{ - return maCalculate.getExpression(); -} - -void Binding::setCalculateExpression( const OUString& sCalculate ) -{ - maCalculate.setExpression( sCalculate ); - bindingModified(); -} - -OUString Binding::getType() const -{ - return msTypeName; -} - -void Binding::setType( const OUString& sTypeName ) -{ - msTypeName = sTypeName; - bindingModified(); -} - -Binding::XNameContainer_t Binding::getBindingNamespaces() const -{ - // return _getNamespaces(); - return mxNamespaces; -} - -void Binding::setBindingNamespaces( const XNameContainer_t& rNamespaces ) -{ - _setNamespaces( rNamespaces, true ); -} - -Binding::XNameContainer_t Binding::getModelNamespaces() const -{ - return _getNamespaces(); -} - -void Binding::setModelNamespaces( const XNameContainer_t& rNamespaces ) -{ - _setNamespaces( rNamespaces, false ); -} - -bool Binding::getReadOnly() const -{ - return maMIP.isReadonly(); -} - -bool Binding::getRelevant() const -{ - return maMIP.isRelevant(); -} - -bool Binding::getExternalData() const -{ - bool bExternalData = true; - if ( !mxModel.is() ) - return bExternalData; - - try - { - Reference< XPropertySet > xModelProps( mxModel, UNO_QUERY_THROW ); - OSL_VERIFY( - xModelProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ExternalData" ) ) ) >>= bExternalData ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return bExternalData; -} - - -void Binding::checkLive() - throw( RuntimeException ) -{ - if( ! isLive() ) - throw RuntimeException( EXCEPT("Binding not initialized") ); -} - -void Binding::checkModel() - throw( RuntimeException ) -{ - if( ! mxModel.is() ) - throw RuntimeException( EXCEPT("Binding has no Model") ); -} - -bool Binding::isLive() const -{ - const Model* pModel = getModelImpl(); - return ( pModel != NULL ) ? pModel->isInitialized() : false; -} - -Model* Binding::getModelImpl() const -{ - return getModelImpl( mxModel ); -} - -Model* Binding::getModelImpl( const Model_t& xModel ) const -{ - Reference<XUnoTunnel> xTunnel( xModel, UNO_QUERY ); - Model* pModel = xTunnel.is() - ? reinterpret_cast<Model*>( - xTunnel->getSomething( Model::getUnoTunnelID() ) ) - : NULL; - return pModel; -} - -void lcl_addListenerToNode( Reference<XNode> xNode, - Reference<XEventListener> xListener ) -{ - Reference<XEventTarget> xTarget( xNode, UNO_QUERY ); - if( xTarget.is() ) - { - xTarget->addEventListener( OUSTRING("DOMCharacterDataModified"), - xListener, false ); - xTarget->addEventListener( OUSTRING("DOMCharacterDataModified"), - xListener, true ); - xTarget->addEventListener( OUSTRING("DOMAttrModified"), - xListener, false ); - xTarget->addEventListener( OUSTRING("DOMAttrModified"), - xListener, true ); - xTarget->addEventListener( OUSTRING("DOMAttrModified"), - xListener, true ); - xTarget->addEventListener( OUSTRING("xforms-generic"), - xListener, true ); - } -} - -void lcl_removeListenerFromNode( Reference<XNode> xNode, - Reference<XEventListener> xListener ) -{ - Reference<XEventTarget> xTarget( xNode, UNO_QUERY ); - if( xTarget.is() ) - { - xTarget->removeEventListener( OUSTRING("DOMCharacterDataModified"), - xListener, false ); - xTarget->removeEventListener( OUSTRING("DOMCharacterDataModified"), - xListener, true ); - xTarget->removeEventListener( OUSTRING("DOMAttrModified"), - xListener, false ); - xTarget->removeEventListener( OUSTRING("DOMAttrModified"), - xListener, true ); - xTarget->removeEventListener( OUSTRING("xforms-generic"), - xListener, true ); - } -} - -::std::vector<EvaluationContext> Binding::_getMIPEvaluationContexts() const -{ - OSL_ENSURE( getModelImpl() != NULL, "need model impl" ); - - // iterate over nodes of bind expression and create - // EvaluationContext for each - PathExpression::NodeVector_t aNodes = maBindingExpression.getNodeList(); - ::std::vector<EvaluationContext> aVector; - sal_Int32 nCount = 0; // count nodes for context position - for( PathExpression::NodeVector_t::iterator aIter = aNodes.begin(); - aIter != aNodes.end(); - ++aIter, ++nCount ) - { - OSL_ENSURE( aIter->is(), "no node?" ); - - // create proper evaluation context for this MIP - aVector.push_back( EvaluationContext( *aIter, getModel(), - getBindingNamespaces(), - nCount, aNodes.size() ) ); - } - return aVector; -} - -void Binding::bind( bool bForceRebind ) -{ - checkModel(); - - // bind() will evaluate this binding as follows: - // 1) evaluate the binding expression - // 1b) if necessary, create node according to 'lazy author' rules - // 2) register suitable listeners on the instance (and remove old ones) - // 3) remove old MIPs defined by this binding - // 4) for every node in the binding nodeset do: - // 1) create proper evaluation context for this MIP - // 2) evaluate calculate expression (and push value into instance) - // 3) evaluate remaining MIPs - // 4) evaluate the locally defined MIPs, and push them to the model - - - // 1) evaluate the binding expression - EvaluationContext aContext = getEvaluationContext(); - maBindingExpression.evaluate( aContext ); - if( ! maBindingExpression.getNode().is() ) - { - // 1b) create node (if valid element name) - if( isValidQName( maBindingExpression.getExpression(), - aContext.mxNamespaces ) ) - { - aContext.mxContextNode->appendChild( - Reference<XNode>( - aContext.mxContextNode->getOwnerDocument()->createElement( - maBindingExpression.getExpression() ), - UNO_QUERY ) ); - maBindingExpression.evaluate( aContext ); - OSL_ENSURE( maBindingExpression.getNode().is(), - "we should bind to the newly inserted node!" ); - } - } - PathExpression::NodeVector_t aNodes = maBindingExpression.getNodeList(); - - // 2) register suitable listeners on the instance (and remove old ones) - if( maEventNodes.empty() || bForceRebind ) - { - for( XNodes_t::iterator aIter = maEventNodes.begin(); - aIter != maEventNodes.end(); - ++aIter ) - lcl_removeListenerFromNode( *aIter, this ); - maEventNodes.clear(); - if( isSimpleBinding() ) - for( PathExpression::NodeVector_t::iterator aIter = aNodes.begin(); - aIter != aNodes.end(); - ++aIter ) - maEventNodes.push_back( *aIter ); - else - maEventNodes.push_back( - Reference<XNode>( aContext.mxContextNode->getOwnerDocument(), - UNO_QUERY_THROW ) ); - for( PathExpression::NodeVector_t::iterator aIter2 = maEventNodes.begin(); - aIter2 != maEventNodes.end(); - ++aIter2 ) - lcl_addListenerToNode( *aIter2, this ); - } - - // 3) remove old MIPs defined by this binding - Model* pModel = getModelImpl(); - OSL_ENSURE( pModel != NULL, "need model" ); - pModel->removeMIPs( this ); - - // 4) calculate all MIPs - ::std::vector<EvaluationContext> aMIPContexts = _getMIPEvaluationContexts(); - for( ::std::vector<EvaluationContext>::iterator aIter = aMIPContexts.begin(); - aIter != aMIPContexts.end(); - aIter++ ) - { - EvaluationContext& rContext = *aIter; - - // evaluate calculate expression (and push value into instance) - // (prevent recursion using mbInCalculate - if( ! maCalculate.isEmptyExpression() ) - { - if( ! mbInCalculate ) - { - mbInCalculate = true; - maCalculate.evaluate( rContext ); - pModel->setSimpleContent( rContext.mxContextNode, - maCalculate.getString() ); - mbInCalculate = false; - } - } - - // now evaluate remaining MIPs in the apropriate context - maReadonly.evaluate( rContext ); - maRelevant.evaluate( rContext ); - maRequired.evaluate( rContext ); - maConstraint.evaluate( rContext ); - // type is static; does not need updating - - // evaluate the locally defined MIPs, and push them to the model - pModel->addMIP( this, rContext.mxContextNode, getLocalMIP() ); - } -} - - -// helper for Binding::valueModified -void lcl_modified( const Binding::XModifyListener_t xListener, - const Reference<XInterface> xSource ) -{ - OSL_ENSURE( xListener.is(), "no listener?" ); - xListener->modified( EventObject( xSource ) ); -} - -// helper for Binding::valueModified -void lcl_listentry( const Binding::XListEntryListener_t xListener, - const Reference<XInterface> xSource ) -{ - OSL_ENSURE( xListener.is(), "no listener?" ); - // TODO: send fine granular events - xListener->allEntriesChanged( EventObject( xSource ) ); -} - -// helper for Binding::valueModified -void lcl_validate( const Binding::XValidityConstraintListener_t xListener, - const Reference<XInterface> xSource ) -{ - OSL_ENSURE( xListener.is(), "no listener?" ); - xListener->validityConstraintChanged( EventObject( xSource ) ); -} - - -void Binding::valueModified() -{ - // defer notifications, if so desired - if( mnDeferModifyNotifications > 0 ) - { - mbValueModified = true; - return; - } - mbValueModified = false; - - // query MIP used by our first node (also note validity) - Reference<XNode> xNode = maBindingExpression.getNode(); - maMIP = getModelImpl()->queryMIP( xNode ); - - // distribute MIPs _used_ by this binding - if( xNode.is() ) - { - notifyAndCachePropertyValue( HANDLE_ReadOnly ); - notifyAndCachePropertyValue( HANDLE_Relevant ); - } - - // iterate over _value_ listeners and send each a modified signal, - // using this object as source (will also update validity, because - // control will query once the value has changed) - Reference<XInterface> xSource = static_cast<XPropertySet*>( this ); - ::std::for_each( maModifyListeners.begin(), - maModifyListeners.end(), - ::std::bind2nd( ::std::ptr_fun( lcl_modified ), xSource ) ); - ::std::for_each( maListEntryListeners.begin(), - maListEntryListeners.end(), - ::std::bind2nd( ::std::ptr_fun( lcl_listentry ), xSource ) ); - ::std::for_each( maValidityListeners.begin(), - maValidityListeners.end(), - ::std::bind2nd( ::std::ptr_fun( lcl_validate ), xSource ) ); - - // now distribute MIPs to childs - if( xNode.is() ) - distributeMIP( xNode->getFirstChild() ); -} - -void Binding::distributeMIP( const XNode_t & rxNode ) { - - typedef com::sun::star::xforms::XFormsEventConcrete XFormsEvent_t; - OUString sEventName( RTL_CONSTASCII_USTRINGPARAM("xforms-generic") ); - XFormsEvent_t *pEvent = new XFormsEvent_t; - pEvent->initXFormsEvent(sEventName, sal_True, sal_False); - Reference<XEvent> xEvent(pEvent); - - // naive depth-first traversal - XNode_t xNode( rxNode ); - while(xNode.is()) { - - // notifications should be triggered at the - // leaf nodes first, bubbling upwards the hierarchy. - XNode_t child(xNode->getFirstChild()); - if(child.is()) - distributeMIP(child); - - // we're standing at a particular node somewhere - // below the one which changed a property (MIP). - // bindings which are listening at this node will receive - // a notification message about what exactly happened. - Reference< XEventTarget > target(xNode,UNO_QUERY); - target->dispatchEvent(xEvent); - - xNode = xNode->getNextSibling(); - }; -} - -void Binding::bindingModified() -{ - // defer notifications, if so desired - if( mnDeferModifyNotifications > 0 ) - { - mbBindingModified = true; - return; - } - mbBindingModified = false; - - // rebind (if live); then call valueModified - // A binding should be inert until its model is fully constructed. - if( isLive() ) - { - bind( true ); - valueModified(); - } -} - - -MIP Binding::getLocalMIP() const -{ - MIP aMIP; - - if( maReadonly.hasValue() ) - aMIP.setReadonly( maReadonly.getBool( false ) ); - if( maRelevant.hasValue() ) - aMIP.setRelevant( maRelevant.getBool( true ) ); - if( maRequired.hasValue() ) - aMIP.setRequired( maRequired.getBool( false ) ); - if( maConstraint.hasValue() ) - { - aMIP.setConstraint( maConstraint.getBool( true ) ); - if( ! aMIP.isConstraint() ) - aMIP.setConstraintExplanation( msExplainConstraint ); - } - if( msTypeName.getLength() > 0 ) - aMIP.setTypeName( msTypeName ); - - // calculate: only handle presence of calculate; value set elsewhere - aMIP.setHasCalculate( !maCalculate.isEmptyExpression() ); - - return aMIP; -} - -Binding::XDataType_t Binding::getDataType() -{ - OSL_ENSURE( getModel().is(), "need model" ); - OSL_ENSURE( getModel()->getDataTypeRepository().is(), "need types" ); - - Reference<XDataTypeRepository> xRepository( - getModel()->getDataTypeRepository(), UNO_QUERY ); - OUString sTypeName = maMIP.getTypeName(); - - return ( xRepository.is() && xRepository->hasByName( sTypeName ) ) - ? Reference<XDataType>( xRepository->getByName( sTypeName ), UNO_QUERY) - : Reference<XDataType>( NULL ); -} - -bool Binding::isValid_DataType() -{ - Reference<XDataType> xDataType = getDataType(); - return xDataType.is() - ? xDataType->validate( maBindingExpression.getString() ) - : true; -} - -rtl::OUString Binding::explainInvalid_DataType() -{ - Reference<XDataType> xDataType = getDataType(); - return xDataType.is() - ? xDataType->explainInvalid( maBindingExpression.getString() ) - : OUString(); -} - -void Binding::clear() -{ - // remove MIPs contributed by this binding - Model* pModel = getModelImpl(); - if( pModel != NULL ) - pModel->removeMIPs( this ); - - // remove all references - for( XNodes_t::iterator aIter = maEventNodes.begin(); - aIter != maEventNodes.end(); - ++aIter ) - lcl_removeListenerFromNode( *aIter, this ); - maEventNodes.clear(); - - // clear expressions - maBindingExpression.clear(); - maReadonly.clear(); - maRelevant.clear(); - maRequired.clear(); - maConstraint.clear(); - maCalculate.clear(); - - // TODO: what about our listeners? -} - - -void lcl_removeOtherNamespaces( const Binding::XNameContainer_t& xFrom, - Binding::XNameContainer_t& xTo ) -{ - OSL_ENSURE( xFrom.is(), "no source" ); - OSL_ENSURE( xTo.is(), "no target" ); - - // iterate over name in source - Sequence<OUString> aNames = xTo->getElementNames(); - sal_Int32 nNames = aNames.getLength(); - const OUString* pNames = aNames.getConstArray(); - for( sal_Int32 i = 0; i < nNames; i++ ) - { - const OUString& rName = pNames[i]; - - if( ! xFrom->hasByName( rName ) ) - xTo->removeByName( rName ); - } -} - -/** copy namespaces from one namespace container into another - * @param bOverwrite true: overwrite namespaces in target - * false: do not overwrite namespaces in target - * @param bMove true: move namespaces (i.e., delete in source) - * false: copy namespaces (do not modify source) - * @param bFromSource true: use elements from source - * false: use only elements from target - */ -void lcl_copyNamespaces( const Binding::XNameContainer_t& xFrom, - Binding::XNameContainer_t& xTo, - bool bOverwrite ) -{ - OSL_ENSURE( xFrom.is(), "no source" ); - OSL_ENSURE( xTo.is(), "no target" ); - - // iterate over name in source - Sequence<OUString> aNames = xFrom->getElementNames(); - sal_Int32 nNames = aNames.getLength(); - const OUString* pNames = aNames.getConstArray(); - for( sal_Int32 i = 0; i < nNames; i++ ) - { - const OUString& rName = pNames[i]; - - // determine whether to copy the value, and whether to delete - // it in the source: - - bool bInTarget = xTo->hasByName( rName ); - - // we copy: if property is in target, and - // if bOverwrite is set, or when the namespace prefix is free - bool bCopy = bOverwrite || ! bInTarget; - - // and now... ACTION! - if( bCopy ) - { - if( bInTarget ) - xTo->replaceByName( rName, xFrom->getByName( rName ) ); - else - xTo->insertByName( rName, xFrom->getByName( rName ) ); - } - } -} - -// implement get*Namespaces() -// (identical for both variants) -Binding::XNameContainer_t Binding::_getNamespaces() const -{ - XNameContainer_t xNamespaces = new NameContainer<OUString>(); - lcl_copyNamespaces( mxNamespaces, xNamespaces, true ); - - // merge model's with binding's own namespaces - Model* pModel = getModelImpl(); - if( pModel != NULL ) - lcl_copyNamespaces( pModel->getNamespaces(), xNamespaces, false ); - - return xNamespaces; -} - -// implement set*Namespaces() -// bBinding = true: setBindingNamespaces, otherwise: setModelNamespaces -void Binding::_setNamespaces( const XNameContainer_t& rNamespaces, - bool bBinding ) -{ - Model* pModel = getModelImpl(); - XNameContainer_t xModelNamespaces = ( pModel != NULL ) - ? pModel->getNamespaces() - : NULL; - OSL_ENSURE( ( pModel != NULL ) == xModelNamespaces.is(), "no model nmsp?"); - - // remove deleted namespaces - lcl_removeOtherNamespaces( rNamespaces, mxNamespaces ); - if( !bBinding && xModelNamespaces.is() ) - lcl_removeOtherNamespaces( rNamespaces, xModelNamespaces ); - - // copy namespaces as appropriate - Sequence<OUString> aNames = rNamespaces->getElementNames(); - sal_Int32 nNames = aNames.getLength(); - const OUString* pNames = aNames.getConstArray(); - for( sal_Int32 i = 0; i < nNames; i++ ) - { - const OUString& rName = pNames[i]; - Any aValue = rNamespaces->getByName( rName ); - - // determine whether the namespace should go into model's or - // into binding's namespaces - bool bLocal = - ! xModelNamespaces.is() - || mxNamespaces->hasByName( rName ) - || ( bBinding - && xModelNamespaces.is() - && xModelNamespaces->hasByName( rName ) ); - - // write namespace into the appropriate namespace container - XNameContainer_t& rWhich = bLocal ? mxNamespaces : xModelNamespaces; - OSL_ENSURE( rWhich.is(), "whoops" ); - if( rWhich->hasByName( rName ) ) - rWhich->replaceByName( rName, aValue ); - else - rWhich->insertByName( rName, aValue ); - - // always 'promote' namespaces from binding to model, if equal - if( xModelNamespaces.is() - && xModelNamespaces->hasByName( rName ) - && mxNamespaces->hasByName( rName ) - && xModelNamespaces->getByName( rName ) == mxNamespaces->getByName( rName ) ) - { - mxNamespaces->removeByName( rName ); - } - } - - // ... done. But we modified the binding! - bindingModified(); -} - -void Binding::_checkBindingID() -{ - if( getModel().is() ) - { - Reference<XNameAccess> xBindings( getModel()->getBindings(), UNO_QUERY_THROW ); - if( msBindingID.getLength() == 0 ) - { - // no binding ID? then make one up! - OUString sIDPrefix = getResource( RID_STR_XFORMS_BINDING_UI_NAME ); - sIDPrefix += String::CreateFromAscii( " " ); - sal_Int32 nNumber = 0; - OUString sName; - do - { - nNumber++; - sName = sIDPrefix + OUString::valueOf( nNumber ); - } - while( xBindings->hasByName( sName ) ); - setBindingID( sName ); - } - } -} - - - - -// -// XValueBinding -// - -Binding::Sequence_Type_t Binding::getSupportedValueTypes() - throw( RuntimeException ) -{ - return Convert::get().getTypes(); -} - -sal_Bool Binding::supportsType( const Type_t& rType ) - throw( RuntimeException ) -{ - return Convert::get().hasType( rType ); -} - -Binding::Any_t Binding::getValue( const Type_t& rType ) - throw( IncompatibleTypesException, - RuntimeException ) -{ - // first, check for model - checkLive(); - - // second, check for type - if( ! supportsType( rType ) ) - throw IncompatibleTypesException( EXCEPT( "type unsupported" ) ); - - // return string value (if present; else return empty Any) - Binding::Any_t result = Any(); - if(maBindingExpression.hasValue()) { - rtl::OUString pathExpr(maBindingExpression.getString()); - Convert &rConvert = Convert::get(); - result = rConvert.toAny(pathExpr,rType); - } - -// return maBindingExpression.hasValue() - // ? Convert::get().toAny( maBindingExpression.getString(), rType ) - // : Any(); - - return result; -} - -void Binding::setValue( const Any_t& aValue ) - throw( IncompatibleTypesException, - InvalidBindingStateException, - NoSupportException, - RuntimeException ) -{ - // first, check for model - checkLive(); - - // check for supported type - if( ! supportsType( aValue.getValueType() ) ) - throw IncompatibleTypesException( EXCEPT( "type unsupported" ) ); - - if( maBindingExpression.hasValue() ) - { - Binding::XNode_t xNode = maBindingExpression.getNode(); - if( xNode.is() ) - { - OUString sValue = Convert::get().toXSD( aValue ); - bool bSuccess = getModelImpl()->setSimpleContent( xNode, sValue ); - if( ! bSuccess ) - throw InvalidBindingStateException( EXCEPT( "can't set value" ) ); - } - else - throw InvalidBindingStateException( EXCEPT( "no suitable node found" ) ); - } - else - throw InvalidBindingStateException( EXCEPT( "no suitable node found" ) ); -} - - -// -// XListEntry Source -// - -sal_Int32 Binding::getListEntryCount() - throw( RuntimeException ) -{ - // first, check for model - checkLive(); - - // return size of node list - return maBindingExpression.getNodeList().size(); -} - -void lcl_getString( const Reference<XNode>& xNode, OUStringBuffer& rBuffer ) -{ - if( xNode->getNodeType() == NodeType_TEXT_NODE - || xNode->getNodeType() == NodeType_ATTRIBUTE_NODE ) - { - rBuffer.append( xNode->getNodeValue() ); - } - else - { - for( Reference<XNode> xChild = xNode->getFirstChild(); - xChild.is(); - xChild = xChild->getNextSibling() ) - { - lcl_getString( xChild, rBuffer ); - } - } -} - -OUString lcl_getString( const Reference<XNode>& xNode ) -{ - OUStringBuffer aBuffer; - lcl_getString( xNode, aBuffer ); - return aBuffer.makeStringAndClear(); -} - -OUString Binding::getListEntry( sal_Int32 nPosition ) - throw( IndexOutOfBoundsException, - RuntimeException ) -{ - // first, check for model - checkLive(); - - // check bounds and return proper item - PathExpression::NodeVector_t aNodes = maBindingExpression.getNodeList(); - if( nPosition < 0 || nPosition >= static_cast<sal_Int32>( aNodes.size() ) ) - throw IndexOutOfBoundsException( EXCEPT("") ); - return lcl_getString( aNodes[ nPosition ] ); -} - -Sequence<OUString> Binding::getAllListEntries() - throw( RuntimeException ) -{ - // first, check for model - checkLive(); - - // create sequence of string values - PathExpression::NodeVector_t aNodes = maBindingExpression.getNodeList(); - Sequence<OUString> aSequence( aNodes.size() ); - OUString* pSequence = aSequence.getArray(); - for( sal_Int32 n = 0; n < aSequence.getLength(); n++ ) - { - pSequence[n] = lcl_getString( aNodes[n] ); - } - - return aSequence; -} - -void Binding::addListEntryListener( const XListEntryListener_t& xListener ) - throw( NullPointerException, - RuntimeException ) -{ - OSL_ENSURE( xListener.is(), "need listener!" ); - if( ::std::find( maListEntryListeners.begin(), - maListEntryListeners.end(), - xListener) - == maListEntryListeners.end() ) - maListEntryListeners.push_back( xListener ); -} - -void Binding::removeListEntryListener( const XListEntryListener_t& xListener ) - throw( NullPointerException, - RuntimeException ) -{ - XListEntryListeners_t::iterator aIter = - ::std::find( maListEntryListeners.begin(), maListEntryListeners.end(), - xListener ); - if( aIter != maListEntryListeners.end() ) - maListEntryListeners.erase( aIter ); -} - - -// -// XValidator -// - -sal_Bool Binding::isValid( const Any_t& ) - throw( RuntimeException ) -{ - // first, check for model - checkLive(); - - // ignore value; determine validate only on current data - return isValid(); -} - -rtl::OUString Binding::explainInvalid( - const Any_t& /*Value*/ ) - throw( RuntimeException ) -{ - // first, check for model - checkLive(); - - // ignore value; determine explanation only on current data - return explainInvalid(); -} - -void Binding::addValidityConstraintListener( - const XValidityConstraintListener_t& xListener ) - throw( NullPointerException, - RuntimeException ) -{ - OSL_ENSURE( xListener.is(), "need listener!" ); - if( ::std::find(maValidityListeners.begin(), maValidityListeners.end(), xListener) - == maValidityListeners.end() ) - maValidityListeners.push_back( xListener ); -} - -void Binding::removeValidityConstraintListener( - const XValidityConstraintListener_t& xListener ) - throw( NullPointerException, - RuntimeException ) -{ - XValidityConstraintListeners_t::iterator aIter = - ::std::find( maValidityListeners.begin(), maValidityListeners.end(), - xListener ); - if( aIter != maValidityListeners.end() ) - maValidityListeners.erase( aIter ); -} - - - -// -// xml::dom::event::XEventListener -// - -void Binding::handleEvent( const XEvent_t& xEvent ) - throw( RuntimeException ) -{ - OUString sType(xEvent->getType()); - //OUString sEventMIPChanged(RTL_CONSTASCII_USTRINGPARAM("xforms-generic")); - //if(sType.equals(sEventMIPChanged)) { - if(!sType.compareToAscii("xforms-generic")) { - - // the modification of the 'mnDeferModifyNotifications'-member - // is necessary to prevent infinite notication looping. - // This can happend in case the binding which caused - // the notification chain is listening to those events - // as well... - bool bPreserveValueModified = mbValueModified; - mnDeferModifyNotifications++; - valueModified(); - --mnDeferModifyNotifications; - mbValueModified = bPreserveValueModified; - return; - } - - // if we're a dynamic binding, we better re-bind, too! - bind( false ); - - // our value was maybe modified - valueModified(); -} - - -// -// lang::XUnoTunnel -// - -sal_Int64 Binding::getSomething( const IntSequence_t& xId ) - throw( RuntimeException ) -{ - return reinterpret_cast<sal_Int64>( ( xId == getUnoTunnelID() ) ? this : NULL ); -} - -// -// XCloneable -// - -Binding::XCloneable_t SAL_CALL Binding::createClone() - throw( RuntimeException ) -{ - Reference< XPropertySet > xClone; - - Model* pModel = getModelImpl(); - if ( pModel ) - xClone = pModel->cloneBinding( this ); - else - { - xClone = new Binding; - copy( this, xClone ); - } - return XCloneable_t( xClone, UNO_QUERY ); -} - -// -// property set implementations -// - -#define REGISTER_PROPERTY( property, type ) \ - registerProperty( PROPERTY( property, type ), \ - new DirectPropertyAccessor< Binding, type >( this, &Binding::set##property, &Binding::get##property ) ); - -#define REGISTER_PROPERTY_RO( property, type ) \ - registerProperty( PROPERTY_RO( property, type ), \ - new DirectPropertyAccessor< Binding, type >( this, NULL, &Binding::get##property ) ); - -#define REGISTER_BOOL_PROPERTY_RO( property ) \ - registerProperty( PROPERTY_RO( property, sal_Bool ), \ - new BooleanPropertyAccessor< Binding, bool >( this, NULL, &Binding::get##property ) ); - -void Binding::initializePropertySet() -{ - REGISTER_PROPERTY ( BindingID, OUString ); - REGISTER_PROPERTY ( BindingExpression, OUString ); - REGISTER_PROPERTY_RO ( Model, Model_t ); - REGISTER_PROPERTY ( BindingNamespaces, XNameContainer_t ); - REGISTER_PROPERTY ( ModelNamespaces, XNameContainer_t ); - REGISTER_PROPERTY_RO ( ModelID, OUString ); - REGISTER_PROPERTY ( ReadonlyExpression, OUString ); - REGISTER_PROPERTY ( RelevantExpression, OUString ); - REGISTER_PROPERTY ( RequiredExpression, OUString ); - REGISTER_PROPERTY ( ConstraintExpression, OUString ); - REGISTER_PROPERTY ( CalculateExpression, OUString ); - REGISTER_PROPERTY ( Type, OUString ); - REGISTER_PROPERTY_RO ( ReadOnly, bool ); - REGISTER_PROPERTY_RO ( Relevant, bool ); - REGISTER_BOOL_PROPERTY_RO( ExternalData ); - - initializePropertyValueCache( HANDLE_ReadOnly ); - initializePropertyValueCache( HANDLE_Relevant ); - initializePropertyValueCache( HANDLE_ExternalData ); -} - -void Binding::addModifyListener( - const XModifyListener_t& xListener ) - throw( RuntimeException ) -{ - OSL_ENSURE( xListener.is(), "need listener!" ); - if( ::std::find( maModifyListeners.begin(), maModifyListeners.end(), xListener ) - == maModifyListeners.end() ) - maModifyListeners.push_back( xListener ); - - // HACK: currently, we have to 'push' some MIPs to the control - // (read-only, relevant, etc.) To enable this, we need to update - // the control at least once when it registers here. - valueModified(); -} - -void Binding::removeModifyListener( - const XModifyListener_t& xListener ) - throw( RuntimeException ) -{ - ModifyListeners_t::iterator aIter = - ::std::find( maModifyListeners.begin(), maModifyListeners.end(), xListener ); - if( aIter != maModifyListeners.end() ) - maModifyListeners.erase( aIter ); -} - - - - -rtl::OUString Binding::getName() - throw( RuntimeException ) -{ - return getBindingID(); -} - -void SAL_CALL Binding::setName( const rtl::OUString& rName ) - throw( RuntimeException ) -{ - // use the XPropertySet methods, so the change in the name is notified to the - // property listeners - setFastPropertyValue( HANDLE_BindingID, makeAny( rName ) ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/binding.hxx b/forms/source/xforms/binding.hxx deleted file mode 100644 index b61a5597d..000000000 --- a/forms/source/xforms/binding.hxx +++ /dev/null @@ -1,530 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _BINDING_HXX -#define _BINDING_HXX - -#include <com/sun/star/uno/Reference.hxx> - -// forward declaractions -namespace xforms -{ - class Model; - class EvaluationContext; -} -namespace com { namespace sun { namespace star { - namespace xml { - namespace xpath { class XXPathAPI; } - namespace dom - { - class XNode; - class XNodeList; - } - } - namespace container { class XNameContainer; } - namespace xforms { class XModel; } - namespace xsd { class XDataType; } -} } } - -// includes for parent classes -#include <cppuhelper/implbase8.hxx> -#include <propertysetbase.hxx> -#include <com/sun/star/form/binding/XValueBinding.hpp> -#include <com/sun/star/form/binding/XListEntrySource.hpp> -#include <com/sun/star/form/validation/XValidator.hpp> -#include <com/sun/star/util/XModifyBroadcaster.hpp> -#include <com/sun/star/container/XNamed.hpp> -#include <com/sun/star/xml/dom/events/XEventListener.hpp> -#include <com/sun/star/lang/XUnoTunnel.hpp> -#include <com/sun/star/util/XCloneable.hpp> - -// includes for member variables -#include "pathexpression.hxx" -#include "boolexpression.hxx" -#include "mip.hxx" -#include <rtl/ustring.hxx> -#include <vector> -#include <memory> // auto_ptr - - - -namespace xforms -{ - -/** An XForms Binding. Contains: - * # a connection to its model - * # an ID - * # an binding expression - * # model item properties - * # (NOT YET IMPLEMENTED) child bindings (sequence of) - * - * See http://www.w3.org/TR/xforms/ for more information. - */ - -typedef cppu::ImplInheritanceHelper8< - PropertySetBase, - com::sun::star::form::binding::XValueBinding, - com::sun::star::form::binding::XListEntrySource, - com::sun::star::form::validation::XValidator, - com::sun::star::util::XModifyBroadcaster, - com::sun::star::container::XNamed, - com::sun::star::xml::dom::events::XEventListener, - com::sun::star::lang::XUnoTunnel, - com::sun::star::util::XCloneable -> Binding_t; - -class Binding : public Binding_t -{ -public: - typedef com::sun::star::uno::Reference<com::sun::star::xforms::XModel> Model_t; - typedef com::sun::star::uno::Reference<com::sun::star::util::XModifyListener> XModifyListener_t; - typedef std::vector<XModifyListener_t> ModifyListeners_t; - typedef com::sun::star::uno::Reference<com::sun::star::form::validation::XValidityConstraintListener> XValidityConstraintListener_t; - typedef std::vector<XValidityConstraintListener_t> XValidityConstraintListeners_t; - typedef com::sun::star::uno::Reference<com::sun::star::form::binding::XListEntryListener> XListEntryListener_t; - typedef std::vector<XListEntryListener_t> XListEntryListeners_t; - typedef com::sun::star::uno::Reference<com::sun::star::container::XNameContainer> XNameContainer_t; - typedef com::sun::star::uno::Reference<com::sun::star::xml::dom::XNode> XNode_t; - typedef com::sun::star::uno::Reference<com::sun::star::xml::dom::XNodeList> XNodeList_t; - typedef com::sun::star::uno::Reference<com::sun::star::util::XCloneable> XCloneable_t; - typedef com::sun::star::uno::Sequence<sal_Int8> IntSequence_t; - typedef com::sun::star::uno::Sequence<rtl::OUString> StringSequence_t; - typedef std::vector<MIP> MIPs_t; - typedef std::vector<XNode_t> XNodes_t; - - - -private: - - /// the Model to which this Binding belongs; may be NULL - Model_t mxModel; - - /// binding-ID. A document-wide unique ID for this binding element. - rtl::OUString msBindingID; - - /// an XPath-expression to be instantiated on the data instance - PathExpression maBindingExpression; - - /// an XPath-expression to determine read-only status - BoolExpression maReadonly; - - /// an XPath-expression to determine relevance - BoolExpression maRelevant; - - /// an XPath-expression to determine if item is required - BoolExpression maRequired; - - /// an XPath-expression to determine if item is valid - BoolExpression maConstraint; - - /// user-readable explanation of the constraint - rtl::OUString msExplainConstraint; - - /// an XPath-expression to calculate values - ComputedExpression maCalculate; - - /// the XML namespaces used for XML names/XPath-expressions in this binding - XNameContainer_t mxNamespaces; - - /// a type name - rtl::OUString msTypeName; - - /// modify listeners - ModifyListeners_t maModifyListeners; - - /// list entry listener - XListEntryListeners_t maListEntryListeners; - - /// validity listeners; - XValidityConstraintListeners_t maValidityListeners; - - /// nodes on which we are listening for events - XNodes_t maEventNodes; - - /// the current MIP object for the first node we are bound to - MIP maMIP; - - /// flag to detect recursions in calculate - bool mbInCalculate; - - // flags to manage deferred notifications: - /// if >0, valueModified() and bindingModified() will only set flags - sal_Int32 mnDeferModifyNotifications; - bool mbValueModified; /// if true, valueModified needs to be called - bool mbBindingModified; /// if true, bindingModified needs to be called - - - void initializePropertySet(); - - -public: - Binding(); - virtual ~Binding() throw(); - - // - // property methods: get/set value - // - - Model_t getModel() const; /// get XForms model - void _setModel( const Model_t& ); /// set XForms model (only called by Model) - - - rtl::OUString getModelID() const; /// get ID of XForms model - - rtl::OUString getBindingID() const; /// get ID for this binding - void setBindingID( const rtl::OUString& ); /// set ID for this binding - - rtl::OUString getBindingExpression() const; /// get binding expression - void setBindingExpression( const rtl::OUString& ); /// set binding exp. - - // MIPs (model item properties) - - rtl::OUString getReadonlyExpression() const; /// get read-only MIP - void setReadonlyExpression( const rtl::OUString& ); /// set read-only MIP - - rtl::OUString getRelevantExpression() const; /// get relevant MIP - void setRelevantExpression( const rtl::OUString& ); /// set relevant MIP - - rtl::OUString getRequiredExpression() const; /// get required MIP - void setRequiredExpression( const rtl::OUString& ); /// set required MIP - - rtl::OUString getConstraintExpression() const; /// get constraint MIP - void setConstraintExpression( const rtl::OUString& );/// set constraint MIP - - rtl::OUString getCalculateExpression() const; /// get calculate MIP - void setCalculateExpression( const rtl::OUString& ); /// set calculate MIP - - rtl::OUString getType() const; /// get type name MIP (static) - void setType( const rtl::OUString& ); /// set type name MIP (static) - - // a binding expression can only be interpreted with respect to - // suitable namespace declarations. We collect those in the model and in a binding. - - // access to a binding's namespace - // (set-method only changes local namespaces (but may add to model)) - XNameContainer_t getBindingNamespaces() const; /// set binding namespaces - void setBindingNamespaces( const XNameContainer_t& ); /// get binding nmsp. - - // access to the model's namespaces - // (set-method changes model's namespaces (unless a local one is present)) - XNameContainer_t getModelNamespaces() const; /// set model namespaces - void setModelNamespaces( const XNameContainer_t& ); /// get model nmsp. - - - // read-only properties that map MIPs to control data source properties - bool getReadOnly() const; // MIP readonly - bool getRelevant() const; // MIP relevant - bool getExternalData() const; // mapped from model's ExternalData property - - - // missing binding properties: - // - type (static; default: xsd:string) - // - minOccurs/maxOccurs (computed XPath; default: 0/inf) - // - p3ptype (static; no default) - - - - - /// get this binding's context node - xforms::EvaluationContext getEvaluationContext() const; - - /// get evalation contexts for this binding's MIPs - std::vector<xforms::EvaluationContext> getMIPEvaluationContexts(); - - /// get nodeset the bind is bound to - XNodeList_t getXNodeList(); - - /// heuristically determine whether this binding is simple binding - /// (here: simple binding == does not depend on other parts of the - /// instance, it's not a 'dynamic' binding) - bool isSimpleBinding() const; - - /// heuristically determine whether this binding's binding - /// expression is simple - bool isSimpleBindingExpression() const; - - /// update this binding (e.g. called by model for refresh ) - void update(); - - /// prevent change notifications being sent to controls - void deferNotifications( bool ); - - /// is this binding valid? (are constraint, type and required MIPs ok?) - bool isValid(); - - /// determine whether this binding currently performs a useful - /// function, r whether is may be discarded - bool isUseful(); - - /// explain why binding is invalid - rtl::OUString explainInvalid(); - - - // the ID for XUnoTunnel calls - static IntSequence_t getUnoTunnelID(); - static Binding* getBinding( const com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet>& ); - - // - // class-scoped typedef for easy-to-read UNO interfaces - // - - // basic types - typedef com::sun::star::uno::Any Any_t; - typedef com::sun::star::uno::Sequence<com::sun::star::uno::Type> Sequence_Type_t; - typedef com::sun::star::uno::Type Type_t; - - // reference types - typedef com::sun::star::uno::Reference<com::sun::star::beans::XPropertyChangeListener> XPropertyChangeListener_t; - typedef com::sun::star::uno::Reference<com::sun::star::beans::XPropertySetInfo> XPropertySetInfo_t; - typedef com::sun::star::uno::Reference<com::sun::star::beans::XVetoableChangeListener> XVetoableChangeListener_t; - typedef com::sun::star::uno::Reference<com::sun::star::xml::xpath::XXPathAPI> XXPathAPI_t; - typedef com::sun::star::uno::Reference<com::sun::star::xml::dom::events::XEvent> XEvent_t; - typedef com::sun::star::uno::Reference<com::sun::star::xsd::XDataType> XDataType_t; - - // exceptions - typedef com::sun::star::beans::PropertyVetoException PropertyVetoException_t; - typedef com::sun::star::beans::UnknownPropertyException UnknownPropertyException_t; - typedef com::sun::star::lang::IllegalArgumentException IllegalArgumentException_t; - typedef com::sun::star::lang::NoSupportException NoSupportException_t; - typedef com::sun::star::lang::WrappedTargetException WrappedTargetException_t; - typedef com::sun::star::uno::RuntimeException RuntimeException_t; - typedef com::sun::star::form::binding::IncompatibleTypesException IncompatibleTypesException_t; - typedef com::sun::star::form::binding::InvalidBindingStateException InvalidBindingStateException_t; - typedef com::sun::star::lang::NullPointerException NullPointerException_t; - typedef com::sun::star::lang::IndexOutOfBoundsException IndexOutOfBoundsException_t; - - - -private: - /// check whether object is live, and throw suitable exception if not - /// (to be used be API methods before acting on the object) - void checkLive() throw( RuntimeException_t ); - - /// check whether binding has a model, and throw exception if not - /// (to be used be API methods before acting on the object) - void checkModel() throw( RuntimeException_t ); - - /// determine whether object is live - /// live: has model, and model has been initialized - bool isLive() const; - - /// get the model implementation - xforms::Model* getModelImpl() const; - xforms::Model* getModelImpl( const Model_t& xModel ) const; - - /// get MIP evaluation contexts - /// (only valid if control has already been bound) - std::vector<xforms::EvaluationContext> _getMIPEvaluationContexts() const; - - /// bind this binding, and pre-compute the affected nodes - void bind( bool bForceRebind = false ); - - /// the binding value has been changed: - /// trigger a modified event on all modified listeners - void valueModified(); - - /// the binding itself has changed: - /// force rebind, then call valueModified() - void bindingModified(); - - - /// register the event listeners for - void registerListeners(); - - /// set MIPs defined by this binding on MIP item - MIP getLocalMIP() const; - - /// get the data type that applies to this binding - XDataType_t getDataType(); - - /// determine whether binding is valid according to the given data type - bool isValid_DataType(); - - /// explain validity of binding with respect to the given data type - rtl::OUString explainInvalid_DataType(); - - /// 'clear' this binding - remove all listeners, etc. - void clear(); - - /// distribute MIPs from current node recursively to childs - void distributeMIP( const XNode_t &rxNode ); - - /// implement get*Namespaces() - XNameContainer_t _getNamespaces() const; - - /// implement set*Namespaces() - void _setNamespaces( const XNameContainer_t&, bool bBinding ); - - /// set a useful default binding ID (if none is set) - void _checkBindingID(); - -public: - /// for debugging purposes only: get the MIPs defined by this binding - const MIP* _getMIP(); - - - - - - // - // XValueBinding: - // - -public: - - virtual Sequence_Type_t SAL_CALL getSupportedValueTypes() - throw( RuntimeException_t ); - - virtual sal_Bool SAL_CALL supportsType( const Type_t& aType ) - throw( RuntimeException_t ); - - virtual Any_t SAL_CALL getValue( const Type_t& aType ) - throw( IncompatibleTypesException_t, - RuntimeException_t ); - - virtual void SAL_CALL setValue( const Any_t& aValue ) - throw( IncompatibleTypesException_t, - InvalidBindingStateException_t, - NoSupportException_t, - RuntimeException_t ); - - - - // - // XListEntry Source - // - - virtual sal_Int32 SAL_CALL getListEntryCount() - throw( RuntimeException_t ); - - virtual rtl::OUString SAL_CALL getListEntry( sal_Int32 nPosition ) - throw( IndexOutOfBoundsException_t, - RuntimeException_t ); - - virtual StringSequence_t SAL_CALL getAllListEntries() - throw( RuntimeException_t ); - - virtual void SAL_CALL addListEntryListener( const XListEntryListener_t& ) - throw( NullPointerException_t, - RuntimeException_t ); - - virtual void SAL_CALL removeListEntryListener( const XListEntryListener_t&) - throw( NullPointerException_t, - RuntimeException_t ); - - - - // - // XValidator: - // - - virtual sal_Bool SAL_CALL isValid( - const Any_t& ) - throw( RuntimeException_t ); - - virtual rtl::OUString SAL_CALL explainInvalid( - const Any_t& ) - throw( RuntimeException_t ); - - virtual void SAL_CALL addValidityConstraintListener( - const XValidityConstraintListener_t& xListener ) - throw( NullPointerException_t, - RuntimeException_t ); - - virtual void SAL_CALL removeValidityConstraintListener( - const XValidityConstraintListener_t& xListener ) - throw( NullPointerException_t, - RuntimeException_t ); - - - // - // XModifyBroadcaster & friends: - // inform listeners about changes in our values - // - -public: - - virtual void SAL_CALL addModifyListener( - const XModifyListener_t& xListener ) - throw( RuntimeException_t ); - - virtual void SAL_CALL removeModifyListener( - const XModifyListener_t& xListener ) - throw( RuntimeException_t ); - - - - - // - // XNamed: - // get/set name - // - -public: - - virtual rtl::OUString SAL_CALL getName() - throw( RuntimeException_t ); - - virtual void SAL_CALL setName( const rtl::OUString& ) - throw( RuntimeException_t ); - - - - // - // xml::dom::event::XEventListener - // receive an event if our node changed - // - - virtual void SAL_CALL handleEvent( - const XEvent_t& xEvent ) - throw( RuntimeException_t ); - - - - // - // XUnoTunnel - // - - virtual sal_Int64 SAL_CALL getSomething( const IntSequence_t& ) - throw( RuntimeException_t ); - - - // - // XCloneable - // - - virtual XCloneable_t SAL_CALL createClone() - throw( RuntimeException_t ); -}; - - -} // namespace xforms - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/boolexpression.cxx b/forms/source/xforms/boolexpression.cxx deleted file mode 100644 index 6a8750121..000000000 --- a/forms/source/xforms/boolexpression.cxx +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "boolexpression.hxx" - - -namespace xforms -{ - -/** BoolExpression represents a computed XPath expression that returns - * a bool value and caches the results. - * - * As this class has no virtual methods, it should never be used - * polymorphically. */ - -BoolExpression::BoolExpression() : ComputedExpression() -{ -} - -BoolExpression::~BoolExpression() -{ -} - -void BoolExpression::setExpression( const rtl::OUString& rExpression ) -{ - ComputedExpression::setExpression( rExpression ); - mbIsSimple = _checkExpression( " *(true)|(false) *\\( *\\) *" ); -} - - -} // namespace xforms - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/boolexpression.hxx b/forms/source/xforms/boolexpression.hxx deleted file mode 100644 index 1419ad431..000000000 --- a/forms/source/xforms/boolexpression.hxx +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _BOOLEXPRESSION_HXX -#define _BOOLEXPRESSION_HXX - -// include for parent class -#include "computedexpression.hxx" - -namespace xforms -{ - -/** BoolExpression represents a computed XPath expression that returns - * a bool value and caches the results. - * - * As this class has no virtual methods, it should never be used - * polymorphically. */ -class BoolExpression : public ComputedExpression -{ -public: - BoolExpression(); - ~BoolExpression(); - - /// set the expression string - /// (overridden for new definition of a simple expression) - void setExpression( const rtl::OUString& rExpression ); -}; - -} // namespace xforms - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/collection.hxx b/forms/source/xforms/collection.hxx deleted file mode 100644 index cebe52417..000000000 --- a/forms/source/xforms/collection.hxx +++ /dev/null @@ -1,340 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _COLLECTION_HXX -#define _COLLECTION_HXX - -#include "enumeration.hxx" - -#include <cppuhelper/implbase3.hxx> -#include <com/sun/star/container/ElementExistException.hpp> -#include <com/sun/star/container/NoSuchElementException.hpp> -#include <com/sun/star/container/XEnumeration.hpp> -#include <com/sun/star/container/XIndexReplace.hpp> -#include <com/sun/star/container/XSet.hpp> -#include <com/sun/star/container/XContainer.hpp> -#include <com/sun/star/container/XContainerListener.hpp> -#include <com/sun/star/lang/IllegalArgumentException.hpp> -#include <com/sun/star/lang/IndexOutOfBoundsException.hpp> -#include <com/sun/star/lang/WrappedTargetException.hpp> -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/RuntimeException.hpp> -#include <com/sun/star/uno/Type.hxx> -#include <vector> -#include <algorithm> - - -typedef cppu::WeakImplHelper3< - com::sun::star::container::XIndexReplace, - com::sun::star::container::XSet, - com::sun::star::container::XContainer> -Collection_t; - -template<class ELEMENT_TYPE> -class Collection : public Collection_t -{ -public: - typedef ELEMENT_TYPE T; - typedef com::sun::star::uno::Reference<com::sun::star::container::XContainerListener> XContainerListener_t; - typedef std::vector<XContainerListener_t> Listeners_t; - -protected: - std::vector<T> maItems; - Listeners_t maListeners; - -public: - - Collection() {} - virtual ~Collection() {} - - const T& getItem( sal_Int32 n ) const - { - OSL_ENSURE( isValidIndex(n), "invalid index" ); - OSL_ENSURE( isValid( maItems[n] ), "invalid item found" ); - return maItems[n]; - } - - void setItem( sal_Int32 n, const T& t) - { - OSL_ENSURE( isValidIndex(n), "invalid index" ); - OSL_ENSURE( isValid ( t ), "invalid item" ); - - T& aRef = maItems[ n ]; - _elementReplaced( n, t ); - _remove( aRef ); - aRef = t; - _insert( t ); - } - - bool hasItem( const T& t ) const - { - return maItems.end() != std::find( maItems.begin(), maItems.end(), t ); - } - - sal_Int32 addItem( const T& t ) - { - OSL_ENSURE( !hasItem( t ), "item to be added already present" ); - OSL_ENSURE( isValid( t ), "invalid item" ); - - maItems.push_back( t ); - _insert( t ); - _elementInserted( maItems.size() - 1 ); - return ( maItems.size() - 1 ); - } - - void removeItem( const T& t ) - { - OSL_ENSURE( hasItem( t ), "item to be removed not present" ); - OSL_ENSURE( isValid( t ), "an invalid item, funny that!" ); - - _elementRemoved( t ); - _remove( t ); - maItems.erase( std::find( maItems.begin(), maItems.end(), t ) ); - } - - bool hasItems() const - { - return maItems.size() != 0; - } - - sal_Int32 countItems() const - { - return static_cast<sal_Int32>( maItems.size() ); - } - - bool isValidIndex( sal_Int32 n ) const - { - return n >= 0 && n < static_cast<sal_Int32>( maItems.size() ); - } - - - // the following method may be overriden by sub-classes for - // customized behaviour - - /// called before insertion to determine whether item is valid - virtual bool isValid( const T& ) const { return true; } - - -protected: - - // the following methods may be overriden by sub-classes for - // customized behaviour - - /// called after item has been inserted into the collection - virtual void _insert( const T& ) { } - - /// called before item is removed from the collection - virtual void _remove( const T& ) { } - -public: - - typedef com::sun::star::uno::Type Type_t; - typedef com::sun::star::uno::Any Any_t; - typedef com::sun::star::uno::RuntimeException RuntimeException_t; - typedef com::sun::star::lang::IllegalArgumentException IllegalArgumentException_t; - typedef com::sun::star::container::NoSuchElementException NoSuchElementException_t; - typedef com::sun::star::lang::IndexOutOfBoundsException IndexOutOfBoundsException_t; - typedef com::sun::star::uno::Reference<com::sun::star::container::XEnumeration> XEnumeration_t; - typedef com::sun::star::lang::WrappedTargetException WrappedTargetException_t; - typedef com::sun::star::container::ElementExistException ElementExistException_t; - - - // XElementAccess - virtual Type_t SAL_CALL getElementType() - throw( RuntimeException_t ) - { - return getCppuType( static_cast<T*>( NULL ) ); - } - - virtual sal_Bool SAL_CALL hasElements() - throw( RuntimeException_t ) - { - return hasItems(); - } - - // XIndexAccess : XElementAccess - virtual sal_Int32 SAL_CALL getCount() - throw( RuntimeException_t ) - { - return countItems(); - } - - virtual Any_t SAL_CALL getByIndex( sal_Int32 nIndex ) - throw( IndexOutOfBoundsException_t, - WrappedTargetException_t, - RuntimeException_t) - { - if( isValidIndex( nIndex ) ) - return com::sun::star::uno::makeAny( getItem( nIndex ) ); - else - throw IndexOutOfBoundsException_t(); - } - - // XIndexReplace : XIndexAccess - virtual void SAL_CALL replaceByIndex( sal_Int32 nIndex, - const Any_t& aElement ) - throw( IllegalArgumentException_t, - IndexOutOfBoundsException_t, - WrappedTargetException_t, - RuntimeException_t) - { - T t; - if( isValidIndex( nIndex) ) - if( ( aElement >>= t ) && isValid( t ) ) - setItem( nIndex, t ); - else - throw IllegalArgumentException_t(); - else - throw IndexOutOfBoundsException_t(); - } - - // XEnumerationAccess : XElementAccess - virtual XEnumeration_t SAL_CALL createEnumeration() - throw( RuntimeException_t ) - { - return new Enumeration( this ); - } - - - // XSet : XEnumerationAccess - virtual sal_Bool SAL_CALL has( const Any_t& aElement ) - throw( RuntimeException_t ) - { - T t; - return ( aElement >>= t ) ? hasItem( t ) : sal_False; - } - - virtual void SAL_CALL insert( const Any_t& aElement ) - throw( IllegalArgumentException_t, - ElementExistException_t, - RuntimeException_t ) - { - T t; - if( ( aElement >>= t ) && isValid( t ) ) - if( ! hasItem( t ) ) - addItem( t ); - else - throw ElementExistException_t(); - else - throw IllegalArgumentException_t(); - } - - virtual void SAL_CALL remove( const Any_t& aElement ) - throw( IllegalArgumentException_t, - NoSuchElementException_t, - RuntimeException_t ) - { - T t; - if( aElement >>= t ) - if( hasItem( t ) ) - removeItem( t ); - else - throw NoSuchElementException_t(); - else - throw IllegalArgumentException_t(); - } - - - // XContainer - virtual void SAL_CALL addContainerListener( - const XContainerListener_t& xListener ) - throw( RuntimeException_t ) - { - OSL_ENSURE( xListener.is(), "need listener!" ); - if( std::find( maListeners.begin(), maListeners.end(), xListener) - == maListeners.end() ) - maListeners.push_back( xListener ); - } - - virtual void SAL_CALL removeContainerListener( - const XContainerListener_t& xListener ) - throw( RuntimeException_t ) - { - OSL_ENSURE( xListener.is(), "need listener!" ); - Listeners_t::iterator aIter = - std::find( maListeners.begin(), maListeners.end(), xListener ); - if( aIter != maListeners.end() ) - maListeners.erase( aIter ); - } - -protected: - - // call listeners: - void _elementInserted( sal_Int32 nPos ) - { - OSL_ENSURE( isValidIndex(nPos), "invalid index" ); - com::sun::star::container::ContainerEvent aEvent( - static_cast<com::sun::star::container::XIndexReplace*>( this ), - com::sun::star::uno::makeAny( nPos ), - com::sun::star::uno::makeAny( getItem( nPos ) ), - com::sun::star::uno::Any() ); - for( Listeners_t::iterator aIter = maListeners.begin(); - aIter != maListeners.end(); - aIter++ ) - { - (*aIter)->elementInserted( aEvent ); - } - } - - void _elementRemoved( const T& aOld ) - { - com::sun::star::container::ContainerEvent aEvent( - static_cast<com::sun::star::container::XIndexReplace*>( this ), - com::sun::star::uno::Any(), - com::sun::star::uno::makeAny( aOld ), - com::sun::star::uno::Any() ); - for( Listeners_t::iterator aIter = maListeners.begin(); - aIter != maListeners.end(); - aIter++ ) - { - (*aIter)->elementRemoved( aEvent ); - } - } - - void _elementReplaced( const sal_Int32 nPos, const T& aNew ) - { - OSL_ENSURE( isValidIndex(nPos), "invalid index" ); - com::sun::star::container::ContainerEvent aEvent( - static_cast<com::sun::star::container::XIndexReplace*>( this ), - com::sun::star::uno::makeAny( nPos ), - com::sun::star::uno::makeAny( getItem( nPos ) ), - com::sun::star::uno::makeAny( aNew ) ); - for( Listeners_t::iterator aIter = maListeners.begin(); - aIter != maListeners.end(); - aIter++ ) - { - (*aIter)->elementReplaced( aEvent ); - } - } - -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/computedexpression.cxx b/forms/source/xforms/computedexpression.cxx deleted file mode 100644 index 353741cf3..000000000 --- a/forms/source/xforms/computedexpression.cxx +++ /dev/null @@ -1,249 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "computedexpression.hxx" -#include "unohelper.hxx" -#include "evaluationcontext.hxx" -#include "NameContainer.hxx" - -#include <com/sun/star/container/XNameContainer.hpp> -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/xml/dom/NodeType.hpp> -#include <com/sun/star/xml/dom/XNode.hpp> -#include <com/sun/star/xml/xpath/XXPathAPI.hpp> -#include <com/sun/star/xml/xpath/XXPathObject.hpp> -#include <com/sun/star/xml/xpath/XXPathExtension.hpp> -#include <com/sun/star/beans/NamedValue.hpp> -#include <com/sun/star/lang/XInitialization.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/util/SearchAlgorithms.hpp> - -#include <unotools/textsearch.hxx> -#include <comphelper/processfactory.hxx> - -using rtl::OUString; -using com::sun::star::beans::NamedValue; -using com::sun::star::uno::Any; -using com::sun::star::uno::Reference; -using com::sun::star::uno::Sequence; -using com::sun::star::lang::XInitialization; -using com::sun::star::lang::XMultiServiceFactory; -using com::sun::star::xml::dom::XNode; -using com::sun::star::container::XNameContainer; -using com::sun::star::xml::xpath::XXPathAPI; -using com::sun::star::xml::xpath::XXPathExtension; -using com::sun::star::xml::xpath::XXPathObject; -using com::sun::star::uno::RuntimeException; -using com::sun::star::uno::Exception; -using com::sun::star::uno::UNO_QUERY_THROW; -using com::sun::star::xml::xpath::XPathObjectType_XPATH_UNDEFINED; -using com::sun::star::util::SearchOptions; -using com::sun::star::util::SearchAlgorithms_REGEXP; - - -namespace xforms -{ - -ComputedExpression::ComputedExpression() - : msExpression(), - mbIsEmpty( true ), - mbIsSimple( true ), - mxResult() -{ -} - -ComputedExpression::~ComputedExpression() -{ -} - - -OUString ComputedExpression::getExpression() const -{ - return msExpression; -} - -void ComputedExpression::setExpression( const OUString& rExpression ) -{ - // set new expression, and clear pre-computed results - msExpression = rExpression; - mbIsEmpty = _checkExpression( " *" ); - mbIsSimple = false; - mxResult.clear(); -} - - -bool ComputedExpression::_checkExpression( const sal_Char* pExpression ) const -{ - OSL_ENSURE( pExpression != NULL, "no expression?" ); - - // call RegExp engine - SearchOptions aSearchOptions; - aSearchOptions.algorithmType = SearchAlgorithms_REGEXP; - aSearchOptions.searchString = String( pExpression, RTL_TEXTENCODING_ASCII_US ); - utl::TextSearch aTextSearch( aSearchOptions ); - - xub_StrLen nLength = - static_cast<xub_StrLen>( msExpression.getLength() ); - xub_StrLen nStart = 0; - xub_StrLen nEnd = nLength; - int nSearch = aTextSearch.SearchFrwrd( msExpression, &nStart, &nEnd ); - - // our expression is static only if 1) we found our regexp, and 2) - // the regexp goes from beginning to end. - return ( nLength == 0 || nSearch != 0 ) - && ( nStart == 0 && nEnd == nLength ); -} - -/// do we have an actual expression? -bool ComputedExpression::isEmptyExpression() const -{ - return mbIsEmpty; -} - -bool ComputedExpression::isSimpleExpression() const -{ - // actual work is done by setExpression - return mbIsEmpty || mbIsSimple; -} - - -const OUString ComputedExpression::_getExpressionForEvaluation() const -{ - // the default implementation is to do nothing... - return msExpression; -} - -bool ComputedExpression::_evaluate( - const xforms::EvaluationContext& rContext, - const OUString& sExpression ) -{ - OSL_ENSURE( rContext.mxContextNode.is(), "no context node in context" ); - - // obtain value by evaluating XPath expression - mxResult.clear(); - try - { - mxResult = _getXPathAPI(rContext)->eval( rContext.mxContextNode, - sExpression ); - } - catch( const Exception& ) - { - ; // ignore exception -> mxResult will be empty - } - - return hasValue(); -} - -bool ComputedExpression::evaluate( const EvaluationContext& rContext ) -{ - // for simple expression we don't need to re-evaluate (if we have - // an older result); neither for empty expressions - if( mbIsEmpty || (mxResult.is() && mbIsSimple) ) - return true; - - return _evaluate( rContext, _getExpressionForEvaluation() ); -} - - -bool ComputedExpression::hasValue() const -{ - return mxResult.is() && - mxResult->getObjectType() != XPathObjectType_XPATH_UNDEFINED; -} - -void ComputedExpression::clear() -{ - mxResult.clear(); -} - -Reference<XXPathObject> ComputedExpression::getXPath() const -{ - return mxResult; -} - -OUString ComputedExpression::getString( const rtl::OUString& rDefault ) const -{ - return mxResult.is() ? mxResult->getString() : rDefault; -} - -bool ComputedExpression::getBool( bool bDefault ) const -{ - return mxResult.is() ? mxResult->getBoolean() : bDefault; -} - - - - -Reference<XXPathAPI> ComputedExpression::_getXPathAPI(const xforms::EvaluationContext& aContext) -{ - // create XPath API, then register namespaces - Reference<XXPathAPI> xXPath( createInstance( - OUSTRING( "com.sun.star.xml.xpath.XPathAPI" ) ), - UNO_QUERY_THROW ); - OSL_ENSURE( xXPath.is(), "cannot get XPath API" ); - - // register xforms extension# - Sequence< Any > aSequence(2); - NamedValue aValue; - aValue.Name = OUSTRING("Model"); - aValue.Value <<= aContext.mxModel; - aSequence[0] <<= aValue; - aValue.Name = OUSTRING("ContextNode"); - aValue.Value <<= aContext.mxContextNode; - aSequence[1] <<= aValue; - Reference<XMultiServiceFactory> aFactory = comphelper::getProcessServiceFactory(); - Reference< XXPathExtension > aExtension( aFactory->createInstanceWithArguments( - OUSTRING( "com.sun.star.comp.xml.xpath.XFormsExtension"), aSequence), UNO_QUERY_THROW); - xXPath->registerExtensionInstance(aExtension); - - // register namespaces - if( aContext.mxNamespaces.is() ) - { - Sequence<OUString> aPrefixes =aContext.mxNamespaces->getElementNames(); - sal_Int32 nCount = aPrefixes.getLength(); - const OUString* pPrefixes = aPrefixes.getConstArray(); - for( sal_Int32 i = 0; i < nCount; i++ ) - { - const OUString* pNamePrefix = &pPrefixes[i]; - OUString sNameURL; - aContext.mxNamespaces->getByName( *pNamePrefix ) >>= sNameURL; - xXPath->registerNS( *pNamePrefix, sNameURL ); - } - } - - // done, so return xXPath-object - return xXPath; -} - - -} // namespace xforms - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/computedexpression.hxx b/forms/source/xforms/computedexpression.hxx deleted file mode 100644 index 04c584ca8..000000000 --- a/forms/source/xforms/computedexpression.hxx +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _COMPUTEDEXPRESSION_HXX -#define _COMPUTEDEXPRESSION_HXX - - -// includes for member variables -#include <rtl/ustring.hxx> -#include <com/sun/star/uno/Reference.hxx> - -// forward declaractions -namespace com { namespace sun { namespace star -{ - namespace xml - { - namespace dom { class XNode; } - namespace dom { class XNodeset; } - namespace xpath { class XXPathAPI; } - namespace xpath { class XXPathObject; } - } - namespace container { class XNameContainer; } -} } } -namespace xforms { class EvaluationContext; } - - - -namespace xforms -{ - -/** ComputedExpression represents an XPath Expression and caches results. - * - * As this class has no virtual methods, it should never be used - * polymorphically. */ -class ComputedExpression -{ - /// the expression string - rtl::OUString msExpression; - - /// is msExpression empty? - bool mbIsEmpty; - -protected: - /// is msExpression a simple expression? - bool mbIsSimple; - - /// the result from the last bind - com::sun::star::uno::Reference<com::sun::star::xml::xpath::XXPathObject> mxResult; - - - /// implementation of isSimpleExpression - bool _checkExpression( const sal_Char* pExpression ) const; - - /// allow manipulation of the expression before it is evaluated - const rtl::OUString _getExpressionForEvaluation() const; - - /// obtain a (suitable) XPathAPI implementation - com::sun::star::uno::Reference<com::sun::star::xml::xpath::XXPathAPI> _getXPathAPI(const xforms::EvaluationContext& aContext); - - /// evaluate the expression relative to the content node. - bool _evaluate( const xforms::EvaluationContext& rContext, - const rtl::OUString& sExpression ); - - -public: - ComputedExpression(); - ~ComputedExpression(); - - - /// get the expression string - rtl::OUString getExpression() const; - - /// set a new expression string - void setExpression( const rtl::OUString& rExpression ); - - /// get the namespaces that are used to interpret the expression string - com::sun::star::uno::Reference<com::sun::star::container::XNameContainer> getNamespaces() const; - - /// set the namespaces that are used to interpret the expression string - void setNamespaces( const com::sun::star::uno::Reference<com::sun::star::container::XNameContainer>& ); - - /// do we have an actual expression? - bool isEmptyExpression() const; - - /// heuristically determine whether this expression is 'simple', - /// i.e. whether its value will change depending on the values - /// of other nodes - bool isSimpleExpression() const; - - - /// evaluate the expression relative to the content node. - bool evaluate( const xforms::EvaluationContext& rContext ); - - - /// does this expression have a value? - bool hasValue() const; - - - /// remove value/evaluate results - void clear(); - - - // get the result of this expression as string/bool/... - // (Results will be based on the last call of evaluate(..). The caller - // must call evaluate to ensure current results.) - com::sun::star::uno::Reference<com::sun::star::xml::xpath::XXPathObject> getXPath() const; - bool getBool( bool bDefault = false ) const; - rtl::OUString getString( const rtl::OUString& rDefault = rtl::OUString() ) const; - -}; - -} // namespace xforms - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/convert.cxx b/forms/source/xforms/convert.cxx deleted file mode 100644 index 065f097f1..000000000 --- a/forms/source/xforms/convert.cxx +++ /dev/null @@ -1,632 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "convert.hxx" - -#include "unohelper.hxx" -#include <memory> -#include <algorithm> -#include <functional> -#include <o3tl/compat_functional.hxx> -#include <rtl/math.hxx> -#include <rtl/ustrbuf.hxx> -#include <tools/date.hxx> -#include <com/sun/star/uno/Type.hxx> -#include <com/sun/star/xsd/WhiteSpaceTreatment.hpp> -#include <com/sun/star/util/Date.hpp> -#include <com/sun/star/util/DateTime.hpp> -#include <com/sun/star/util/Time.hpp> - -using xforms::Convert; -using ::rtl::OUString; -using ::rtl::OUStringBuffer; -using com::sun::star::uno::Any; -using com::sun::star::uno::makeAny; -using com::sun::star::util::Time; -using namespace std; -using namespace o3tl; - -typedef com::sun::star::util::Date UNODate; -typedef com::sun::star::util::Time UNOTime; -typedef com::sun::star::util::DateTime UNODateTime; - -Convert::Convert() - : maMap() -{ - init(); -} - -#define ADD_ENTRY(XCONVERT,TYPE) XCONVERT->maMap[ getCppuType( static_cast<TYPE*>( NULL ) ) ] = Convert_t( &lcl_toXSD_##TYPE, &lcl_toAny_##TYPE ) - -namespace -{ - // ======================================================================== - struct StringToken - { - private: - ::rtl::OUString m_sString; - sal_Int32 m_nTokenStart; - sal_Int32 m_nTokenEnd; - - public: - StringToken() : m_sString(), m_nTokenStart( 0 ), m_nTokenEnd( 0 ) { } - StringToken( const ::rtl::OUString& _rString, sal_Int32 _nTokenStart, sal_Int32 _nTokenEnd ); - StringToken( const StringToken& ); - StringToken& operator=( const StringToken& ); - - inline bool isEmpty() const { return m_nTokenEnd <= m_nTokenStart; } - inline sal_Int32 getLength() const { return isEmpty() ? 0 : m_nTokenEnd - m_nTokenStart - 1; } - inline const sal_Unicode* begin() const { return m_sString.getStr() + m_nTokenStart; } - inline const sal_Unicode* end() const { return m_sString.getStr() + m_nTokenEnd; } - - bool toInt32( sal_Int32& _rValue ) const; - }; - - // ------------------------------------------------------------------------ - StringToken::StringToken( const ::rtl::OUString& _rString, sal_Int32 _nTokenStart, sal_Int32 _nTokenEnd ) - :m_sString( _rString ) - ,m_nTokenStart( _nTokenStart ) - ,m_nTokenEnd( _nTokenEnd ) - { - OSL_ENSURE( ( m_nTokenStart >= 0 ) && ( m_nTokenStart <= m_sString.getLength() ), "StringToken::StringToken: invalid token start!" ); - OSL_ENSURE( ( m_nTokenEnd >= 0 ) && ( m_nTokenEnd <= m_sString.getLength() ), "StringToken::StringToken: invalid token end!" ); - } - - // ------------------------------------------------------------------------ - StringToken::StringToken( const StringToken& _rRHS ) - { - *this = _rRHS; - } - - // ------------------------------------------------------------------------ - StringToken& StringToken::operator=( const StringToken& _rRHS ) - { - if ( this == &_rRHS ) - return *this; - - m_sString = _rRHS.m_sString; - m_nTokenStart = _rRHS.m_nTokenStart; - m_nTokenEnd = _rRHS.m_nTokenEnd; - - return *this; - } - - // ------------------------------------------------------------------------ - bool StringToken::toInt32( sal_Int32& _rValue ) const - { - if ( isEmpty() ) - return false; - - _rValue = 0; - const sal_Unicode* pStr = begin(); - while ( pStr < end() ) - { - if ( ( *pStr < '0' ) || ( *pStr > '9' ) ) - return false; - - _rValue *= 10; - _rValue += ( *pStr - '0' ); - - ++pStr; - } - - return true; - } - - // ======================================================================== - class StringTokenizer - { - private: - ::rtl::OUString m_sString; - const sal_Unicode m_nTokenSeparator; - sal_Int32 m_nTokenStart; - - public: - /** constructs a tokenizer - @param _rString the string to tokenize - @param _nTokenSeparator the token value. May be 0, in this case the tokenizer - will recognize exactly one token, being the whole string. - This may make sense if you want to apply <type>StringToken</type> - methods to a whole string. - */ - StringTokenizer( const ::rtl::OUString& _rString, sal_Unicode _nTokenSeparator = ';' ); - - /// resets the tokenizer to the beginning of the string - void reset(); - - /// determines whether there is a next token - bool hasNextToken() const; - - /// retrieves the next token - StringToken - getNextToken(); - }; - - // ------------------------------------------------------------------------ - StringTokenizer::StringTokenizer( const ::rtl::OUString& _rString, sal_Unicode _nTokenSeparator ) - :m_sString( _rString ) - ,m_nTokenSeparator( _nTokenSeparator ) - { - reset(); - } - - // ------------------------------------------------------------------------ - void StringTokenizer::reset() - { - m_nTokenStart = 0; - } - - // ------------------------------------------------------------------------ - bool StringTokenizer::hasNextToken() const - { - return ( m_nTokenStart < m_sString.getLength() ); - } - - // ------------------------------------------------------------------------ - StringToken StringTokenizer::getNextToken() - { - OSL_PRECOND( hasNextToken(), "StringTokenizer::getNextToken: there is no next token!" ); - if ( !hasNextToken() ) - return StringToken(); - - // determine the end of the current token - sal_Int32 nTokenEnd = m_nTokenSeparator ? m_sString.indexOf( m_nTokenSeparator, m_nTokenStart ) : m_sString.getLength(); - bool bLastToken = !m_nTokenSeparator || ( nTokenEnd == -1 ); - - // construct a new token - StringToken aToken( m_sString, m_nTokenStart, bLastToken ? m_sString.getLength() : nTokenEnd ); - // advance - m_nTokenStart = bLastToken ? m_sString.getLength() : nTokenEnd + 1; - // outta here - return aToken; - } - - // ======================================================================== - // ------------------------------------------------------------------------ - OUString lcl_toXSD_OUString( const Any& rAny ) - { OUString sStr; rAny >>= sStr; return sStr; } - - // ------------------------------------------------------------------------ - Any lcl_toAny_OUString( const OUString& rStr ) - { Any aAny; aAny <<= rStr; return aAny; } - - // ------------------------------------------------------------------------ - OUString lcl_toXSD_bool( const Any& rAny ) - { bool b = false; rAny >>= b; return b ? OUSTRING("true") : OUSTRING("false"); } - - // ------------------------------------------------------------------------ - Any lcl_toAny_bool( const OUString& rStr ) - { - bool b = ( rStr == OUSTRING("true") || rStr == OUSTRING("1") ); - return makeAny( b ); - } - - // ------------------------------------------------------------------------ - OUString lcl_toXSD_double( const Any& rAny ) - { - double f = 0.0; - rAny >>= f; - - return rtl::math::isFinite( f ) - ? rtl::math::doubleToUString( f, rtl_math_StringFormat_Automatic, - rtl_math_DecimalPlaces_Max, '.', - sal_True ) - : OUString(); - } - - // ------------------------------------------------------------------------ - Any lcl_toAny_double( const OUString& rString ) - { - rtl_math_ConversionStatus eStatus; - double f = rtl::math::stringToDouble( - rString, sal_Unicode('.'), sal_Unicode(','), &eStatus, NULL ); - return ( eStatus == rtl_math_ConversionStatus_Ok ) ? makeAny( f ) : Any(); - } - - // ------------------------------------------------------------------------ - void lcl_appendInt32ToBuffer( const sal_Int32 _nValue, ::rtl::OUStringBuffer& _rBuffer, sal_Int16 _nMinDigits ) - { - if ( ( _nMinDigits >= 4 ) && ( _nValue < 1000 ) ) - _rBuffer.append( (sal_Unicode)'0' ); - if ( ( _nMinDigits >= 3 ) && ( _nValue < 100 ) ) - _rBuffer.append( (sal_Unicode)'0' ); - if ( ( _nMinDigits >= 2 ) && ( _nValue < 10 ) ) - _rBuffer.append( (sal_Unicode)'0' ); - _rBuffer.append( _nValue ); - } - - // ------------------------------------------------------------------------ - OUString lcl_toXSD_UNODate_typed( const UNODate& rDate ) - { - - ::rtl::OUStringBuffer sInfo; - lcl_appendInt32ToBuffer( rDate.Year, sInfo, 4 ); - sInfo.appendAscii( "-" ); - lcl_appendInt32ToBuffer( rDate.Month, sInfo, 2 ); - sInfo.appendAscii( "-" ); - lcl_appendInt32ToBuffer( rDate.Day, sInfo, 2 ); - - return sInfo.makeStringAndClear(); - } - - // ------------------------------------------------------------------------ - OUString lcl_toXSD_UNODate( const Any& rAny ) - { - UNODate aDate; - OSL_VERIFY( rAny >>= aDate ); - return lcl_toXSD_UNODate_typed( aDate ); - } - - // ------------------------------------------------------------------------ - UNODate lcl_toUNODate( const OUString& rString ) - { - bool bWellformed = true; - - UNODate aDate( 1, 1, 1900 ); - - sal_Int32 nToken = 0; - StringTokenizer aTokenizer( rString, '-' ); - while ( aTokenizer.hasNextToken() ) - { - sal_Int32 nTokenValue = 0; - if ( !aTokenizer.getNextToken().toInt32( nTokenValue ) ) - { - bWellformed = false; - break; - } - - if ( nToken == 0 ) - aDate.Year = (sal_uInt16)nTokenValue; - else if ( nToken == 1 ) - aDate.Month = (sal_uInt16)nTokenValue; - else if ( nToken == 2 ) - aDate.Day = (sal_uInt16)nTokenValue; - else - { - bWellformed = false; - break; - } - ++nToken; - } - - // sanity checks - if ( ( aDate.Year > 9999 ) || ( aDate.Month < 1 ) || ( aDate.Month > 12 ) || ( aDate.Day < 1 ) || ( aDate.Day > 31 ) ) - bWellformed = false; - else - { - ::Date aDateCheck( 1, aDate.Month, aDate.Year ); - if ( aDate.Day > aDateCheck.GetDaysInMonth() ) - bWellformed = false; - } - - // all okay? - if ( !bWellformed ) - return UNODate( 1, 1, 1900 ); - - return aDate; - } - - // ------------------------------------------------------------------------ - Any lcl_toAny_UNODate( const OUString& rString ) - { - return makeAny( lcl_toUNODate( rString ) ); - } - - // ------------------------------------------------------------------------ - OUString lcl_toXSD_UNOTime_typed( const UNOTime& rTime ) - { - - ::rtl::OUStringBuffer sInfo; - lcl_appendInt32ToBuffer( rTime.Hours, sInfo, 2 ); - sInfo.appendAscii( ":" ); - lcl_appendInt32ToBuffer( rTime.Minutes, sInfo, 2 ); - sInfo.appendAscii( ":" ); - lcl_appendInt32ToBuffer( rTime.Seconds, sInfo, 2 ); - if ( rTime.HundredthSeconds ) - { - sInfo.appendAscii( "." ); - lcl_appendInt32ToBuffer( rTime.HundredthSeconds, sInfo, 2 ); - } - - return sInfo.makeStringAndClear(); - } - - // ------------------------------------------------------------------------ - OUString lcl_toXSD_UNOTime( const Any& rAny ) - { - UNOTime aTime; - OSL_VERIFY( rAny >>= aTime ); - return lcl_toXSD_UNOTime_typed( aTime ); - } - - // ------------------------------------------------------------------------ - UNOTime lcl_toUNOTime( const OUString& rString ) - { - bool bWellformed = true; - - UNOTime aTime( 0, 0, 0, 0 ); - - ::rtl::OUString sString( rString ); - // see if there's a decimal separator for the seconds, - // and if so, handle it separately - sal_Int32 nDecimalSepPos = rString.indexOf( '.' ); - if ( nDecimalSepPos == -1 ) - // ISO 8601 allows for both a comma and a dot - nDecimalSepPos = rString.indexOf( ',' ); - if ( nDecimalSepPos != -1 ) - { - // handle fractional seconds - ::rtl::OUString sFractional = sString.copy( nDecimalSepPos + 1 ); - if ( sFractional.getLength() > 2 ) - // our precision is HundrethSeconds - it's all a css.util.Time can hold - sFractional = sFractional.copy( 0, 2 ); - sal_Int32 nFractional = 0; - if ( sFractional.getLength() ) - { - if ( StringTokenizer( sFractional, 0 ).getNextToken().toInt32( nFractional ) ) - { - aTime.HundredthSeconds = (sal_uInt16)nFractional; - if ( nFractional < 10 ) - aTime.HundredthSeconds *= 10; - } - else - bWellformed = false; - } - - // strip the fraction before further processing - sString = sString.copy( 0, nDecimalSepPos ); - } - - // split into the tokens which are separated by colon - sal_Int32 nToken = 0; - StringTokenizer aTokenizer( sString, ':' ); - while ( aTokenizer.hasNextToken() ) - { - sal_Int32 nTokenValue = 0; - if ( !aTokenizer.getNextToken().toInt32( nTokenValue ) ) - { - bWellformed = false; - break; - } - - if ( nToken == 0 ) - aTime.Hours = (sal_uInt16)nTokenValue; - else if ( nToken == 1 ) - aTime.Minutes = (sal_uInt16)nTokenValue; - else if ( nToken == 2 ) - aTime.Seconds = (sal_uInt16)nTokenValue; - else - { - bWellformed = false; - break; - } - ++nToken; - } - - // sanity checks - // note that Seconds == 60 denotes leap seconds. Normally, they're not allowed everywhere, - // but we accept them all the time for simplicity reasons - if ( ( aTime.Hours > 24 ) - || ( aTime.Minutes > 59 ) - || ( aTime.Seconds > 60 ) - ) - bWellformed = false; - - if ( bWellformed - && ( aTime.Hours == 24 ) - && ( ( aTime.Minutes != 0 ) - || ( aTime.Seconds != 0 ) - || ( aTime.HundredthSeconds != 0 ) - ) - ) - bWellformed = false; - - // all okay? - if ( !bWellformed ) - return UNOTime( 0, 0, 0, 0 ); - - return aTime; - } - - // ------------------------------------------------------------------------ - Any lcl_toAny_UNOTime( const OUString& rString ) - { - return makeAny( lcl_toUNOTime( rString ) ); - } - - // ------------------------------------------------------------------------ - OUString lcl_toXSD_UNODateTime( const Any& rAny ) - { - UNODateTime aDateTime; - OSL_VERIFY( rAny >>= aDateTime ); - - UNODate aDate( aDateTime.Day, aDateTime.Month, aDateTime.Year ); - ::rtl::OUString sDate = lcl_toXSD_UNODate_typed( aDate ); - - UNOTime aTime( aDateTime.HundredthSeconds, aDateTime.Seconds, aDateTime.Minutes, aDateTime.Hours ); - ::rtl::OUString sTime = lcl_toXSD_UNOTime_typed( aTime ); - - ::rtl::OUStringBuffer sInfo; - sInfo.append( sDate ); - sInfo.append( (sal_Unicode) 'T' ); - sInfo.append( sTime ); - return sInfo.makeStringAndClear(); - } - - // ------------------------------------------------------------------------ - Any lcl_toAny_UNODateTime( const OUString& rString ) - { - // separate the date from the time part - sal_Int32 nDateTimeSep = rString.indexOf( 'T' ); - if ( nDateTimeSep == -1 ) - nDateTimeSep = rString.indexOf( 't' ); - - UNODate aDate; - UNOTime aTime; - if ( nDateTimeSep == -1 ) - { // no time part - aDate = lcl_toUNODate( rString ); - aTime = UNOTime( 0, 0, 0, 0 ); - } - else - { - aDate = lcl_toUNODate( rString.copy( 0, nDateTimeSep ) ); - aTime = lcl_toUNOTime( rString.copy( nDateTimeSep + 1 ) ); - } - UNODateTime aDateTime( - aTime.HundredthSeconds, aTime.Seconds, aTime.Minutes, aTime.Hours, - aDate.Day, aDate.Month, aDate.Year - ); - return makeAny( aDateTime ); - } -} - -// ============================================================================ -void Convert::init() -{ - ADD_ENTRY( this, OUString ); - ADD_ENTRY( this, bool ); - ADD_ENTRY( this, double ); - ADD_ENTRY( this, UNODate ); - ADD_ENTRY( this, UNOTime ); - ADD_ENTRY( this, UNODateTime ); -} - - -Convert& Convert::get() -{ - // create our Singleton instance on demand - static Convert* pConvert = NULL; - if( pConvert == NULL ) - pConvert = new Convert(); - - OSL_ENSURE( pConvert != NULL, "no converter?" ); - return *pConvert; -} - -bool Convert::hasType( const Type_t& rType ) -{ - return maMap.find( rType ) != maMap.end(); -} - -Convert::Types_t Convert::getTypes() -{ - Types_t aTypes( maMap.size() ); - transform( maMap.begin(), maMap.end(), aTypes.getArray(), - o3tl::select1st<Map_t::value_type>() ); - return aTypes; -} - -rtl::OUString Convert::toXSD( const Any_t& rAny ) -{ - Map_t::iterator aIter = maMap.find( rAny.getValueType() ); - return aIter != maMap.end() ? aIter->second.first( rAny ) : OUString(); -} - -Convert::Any_t Convert::toAny( const rtl::OUString& rValue, - const Type_t& rType ) -{ - Map_t::iterator aIter = maMap.find( rType ); - return aIter != maMap.end() ? aIter->second.second( rValue ) : Any_t(); -} - -//------------------------------------------------------------------------ -::rtl::OUString Convert::convertWhitespace( const ::rtl::OUString& _rString, sal_Int16 _nWhitespaceTreatment ) -{ - ::rtl::OUString sConverted; - switch( _nWhitespaceTreatment ) - { - default: - OSL_FAIL( "Convert::convertWhitespace: invalid whitespace treatment constant!" ); - // NO break - case com::sun::star::xsd::WhiteSpaceTreatment::Preserve: - sConverted = _rString; - break; - case com::sun::star::xsd::WhiteSpaceTreatment::Replace: - sConverted = replaceWhitespace( _rString ); - break; - case com::sun::star::xsd::WhiteSpaceTreatment::Collapse: - sConverted = collapseWhitespace( _rString ); - break; - } - return sConverted; -} - -//------------------------------------------------------------------------ -::rtl::OUString Convert::replaceWhitespace( const ::rtl::OUString& _rString ) -{ - OUStringBuffer aBuffer( _rString ); - sal_Int32 nLength = aBuffer.getLength(); - const sal_Unicode* pBuffer = aBuffer.getStr(); - for( sal_Int32 i = 0; i < nLength; i++ ) - { - sal_Unicode c = pBuffer[i]; - if( c == sal_Unicode(0x08) || - c == sal_Unicode(0x0A) || - c == sal_Unicode(0x0D) ) - aBuffer.setCharAt( i, sal_Unicode(0x20) ); - } - return aBuffer.makeStringAndClear(); -} - -//------------------------------------------------------------------------ -::rtl::OUString Convert::collapseWhitespace( const ::rtl::OUString& _rString ) -{ - sal_Int32 nLength = _rString.getLength(); - OUStringBuffer aBuffer( nLength ); - const sal_Unicode* pStr = _rString.getStr(); - bool bStrip = true; - for( sal_Int32 i = 0; i < nLength; i++ ) - { - sal_Unicode c = pStr[i]; - if( c == sal_Unicode(0x08) || - c == sal_Unicode(0x0A) || - c == sal_Unicode(0x0D) || - c == sal_Unicode(0x20) ) - { - if( ! bStrip ) - { - aBuffer.append( sal_Unicode(0x20) ); - bStrip = true; - } - } - else - { - bStrip = false; - aBuffer.append( c ); - } - } - if( aBuffer[ aBuffer.getLength() - 1 ] == sal_Unicode( 0x20 ) ) - aBuffer.setLength( aBuffer.getLength() - 1 ); - return aBuffer.makeStringAndClear(); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/convert.hxx b/forms/source/xforms/convert.hxx deleted file mode 100644 index 61a2a070d..000000000 --- a/forms/source/xforms/convert.hxx +++ /dev/null @@ -1,116 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _CONVERT_HXX -#define _CONVERT_HXX - -#include <com/sun/star/uno/Sequence.hxx> -#include <map> - -namespace com { namespace sun { namespace star { namespace uno -{ - class Any; - class Type; -} } } } -namespace rtl { class OUString; } -class ConvertImpl; - -namespace xforms -{ - -struct TypeLess -{ - bool operator()( const com::sun::star::uno::Type& rType1, - const com::sun::star::uno::Type& rType2 ) const - { return rType1.getTypeName() < rType2.getTypeName(); } -}; - -class Convert -{ - typedef com::sun::star::uno::Type Type_t; - typedef com::sun::star::uno::Sequence<com::sun::star::uno::Type> Types_t; - typedef com::sun::star::uno::Any Any_t; - - // hold conversion objects - typedef rtl::OUString (*fn_toXSD)( const Any_t& ); - typedef Any_t (*fn_toAny)( const rtl::OUString& ); - typedef std::pair<fn_toXSD,fn_toAny> Convert_t; - typedef std::map<Type_t,Convert_t,TypeLess> Map_t; - Map_t maMap; - - Convert(); - - void init(); - -public: - /** get/create Singleton class */ - static Convert& get(); - - /// can we convert this type? - bool hasType( const Type_t& ); - - /// get list of convertable types - Types_t getTypes(); - - /// convert any to XML representation - rtl::OUString toXSD( const Any_t& rAny ); - - /// convert XML representation to Any of given type - Any_t toAny( const rtl::OUString&, const Type_t& ); - - /** translates the whitespaces in a given string, according - to a given <type scope="com::sun::star::xsd">WhiteSpaceTreatment</type>. - - @param _rString - the string to convert - @param _nWhitespaceTreatment - a constant from the <type scope="com::sun::star::xsd">WhiteSpaceTreatment</type> group, specifying - how to handle whitespaces - @return - the converted string - */ - static ::rtl::OUString convertWhitespace( - const ::rtl::OUString& _rString, - sal_Int16 _nWhitespaceTreatment - ); - - /** replace all occurrences 0x08, 0x0A, 0x0D with 0x20 - */ - static ::rtl::OUString replaceWhitespace( const ::rtl::OUString& _rString ); - - /** replace all sequences of 0x08, 0x0A, 0x0D, 0x20 with a single 0x20. - also strip leading/trailing whitespace. - */ - static ::rtl::OUString collapseWhitespace( const ::rtl::OUString& _rString ); -}; - -} // namespace xforms - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/datatyperepository.cxx b/forms/source/xforms/datatyperepository.cxx deleted file mode 100644 index 517403c5e..000000000 --- a/forms/source/xforms/datatyperepository.cxx +++ /dev/null @@ -1,295 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "datatyperepository.hxx" -#include "datatypes.hxx" -#include "frm_resource.hrc" -#include "frm_resource.hxx" -#include "frm_strings.hxx" -#include "property.hrc" - -/** === begin UNO includes === **/ -/** === end UNO includes === **/ -#include <tools/debug.hxx> -#include <comphelper/enumhelper.hxx> - -#include <functional> -#include <algorithm> -#include <o3tl/compat_functional.hxx> - -//........................................................................ -namespace xforms -{ -//........................................................................ - - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::Type; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::util::VetoException; - using ::com::sun::star::container::NoSuchElementException; - using ::com::sun::star::container::ElementExistException; - using ::com::sun::star::container::XEnumeration; - using ::com::sun::star::lang::WrappedTargetException; - using ::com::sun::star::xsd::XDataType; - using namespace frm; - - //==================================================================== - //= ODataTypeRepository - //==================================================================== - DBG_NAME( ODataTypeRepository ) - //-------------------------------------------------------------------- - ODataTypeRepository::ODataTypeRepository( ) - { - DBG_CTOR( ODataTypeRepository, NULL ); - - // insert some basic types - ::rtl::OUString sName( FRM_RES_STRING( RID_STR_DATATYPE_STRING ) ); - m_aRepository[ sName ] = new OStringType( sName, ::com::sun::star::xsd::DataTypeClass::STRING ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_URL ); - m_aRepository[ sName ] = new OStringType( sName, ::com::sun::star::xsd::DataTypeClass::anyURI ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_BOOLEAN ); - m_aRepository[ sName ] = new OBooleanType( sName ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_DECIMAL ); - m_aRepository[ sName ] = new ODecimalType( sName, ::com::sun::star::xsd::DataTypeClass::DECIMAL ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_FLOAT ); - m_aRepository[ sName ] = new ODecimalType( sName, ::com::sun::star::xsd::DataTypeClass::FLOAT ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_DOUBLE ); - m_aRepository[ sName ] = new ODecimalType( sName, ::com::sun::star::xsd::DataTypeClass::DOUBLE ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_DATE ); - m_aRepository[ sName ] = new ODateType( sName ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_TIME ); - m_aRepository[ sName ] = new OTimeType( sName ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_DATETIME ); - m_aRepository[ sName ] = new ODateTimeType( sName ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_YEAR ); - m_aRepository[ sName ] = new OShortIntegerType( sName, ::com::sun::star::xsd::DataTypeClass::gYear ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_MONTH ); - m_aRepository[ sName ] = new OShortIntegerType( sName, ::com::sun::star::xsd::DataTypeClass::gMonth ); - - sName = FRM_RES_STRING( RID_STR_DATATYPE_DAY ); - m_aRepository[ sName ] = new OShortIntegerType( sName, ::com::sun::star::xsd::DataTypeClass::gDay ); - } - - //-------------------------------------------------------------------- - ODataTypeRepository::~ODataTypeRepository( ) - { - DBG_DTOR( ODataTypeRepository, NULL ); - } - - //-------------------------------------------------------------------- - ODataTypeRepository::Repository::iterator ODataTypeRepository::implLocate( const ::rtl::OUString& _rName, bool _bAllowMiss ) SAL_THROW( ( NoSuchElementException ) ) - { - Repository::iterator aTypePos = m_aRepository.find( _rName ); - if ( aTypePos == m_aRepository.end() && !_bAllowMiss ) - throw NoSuchElementException( ::rtl::OUString(), *this ); - - return aTypePos; - } - - //-------------------------------------------------------------------- - Reference< XDataType > SAL_CALL ODataTypeRepository::getBasicDataType( sal_Int16 dataTypeClass ) throw (NoSuchElementException, RuntimeException) - { - Reference< XDataType > xReturn; - - for ( Repository::const_iterator lookup = m_aRepository.begin(); - ( lookup != m_aRepository.end() ) && ! xReturn.is(); - ++lookup - ) - { - if ( lookup->second->getIsBasic() && ( lookup->second->getTypeClass() == dataTypeClass ) ) - xReturn = lookup->second.get(); - } - - if ( !xReturn.is() ) - throw NoSuchElementException( ::rtl::OUString(), *this ); - - return xReturn; - } - - //-------------------------------------------------------------------- - Reference< XDataType > SAL_CALL ODataTypeRepository::cloneDataType( const ::rtl::OUString& sourceName, const ::rtl::OUString& newName ) throw (NoSuchElementException, ElementExistException, RuntimeException) - { - ::osl::MutexGuard aGuard( m_aMutex ); - - Repository::iterator aTypePos = implLocate( newName, true ); - if ( aTypePos != m_aRepository.end() ) - throw ElementExistException( ::rtl::OUString(), *this ); - - aTypePos = implLocate( sourceName ); - OXSDDataType* pClone = aTypePos->second->clone( newName ); - m_aRepository[ newName ] = pClone; - - return pClone; - } - - //-------------------------------------------------------------------- - void SAL_CALL ODataTypeRepository::revokeDataType( const ::rtl::OUString& typeName ) throw (NoSuchElementException, VetoException, RuntimeException) - { - ::osl::MutexGuard aGuard( m_aMutex ); - - Repository::iterator aTypePos = implLocate( typeName ); - if ( aTypePos->second->getIsBasic() ) - throw VetoException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "This is a built-in type and cannot be removed." ) ), *this ); - // TODO: localize this error message - - m_aRepository.erase( aTypePos ); - } - - //-------------------------------------------------------------------- - Reference< XDataType > SAL_CALL ODataTypeRepository::getDataType( const ::rtl::OUString& typeName ) throw (NoSuchElementException, RuntimeException) - { - ::osl::MutexGuard aGuard( m_aMutex ); - return implLocate( typeName, false )->second.get(); - } - - - //-------------------------------------------------------------------- - Reference< XEnumeration > SAL_CALL ODataTypeRepository::createEnumeration( ) throw (RuntimeException) - { - return new ::comphelper::OEnumerationByName( this ); - } - - //-------------------------------------------------------------------- - Any SAL_CALL ODataTypeRepository::getByName( const ::rtl::OUString& aName ) throw (NoSuchElementException, WrappedTargetException, RuntimeException) - { - return makeAny( getDataType( aName ) ); - } - - //-------------------------------------------------------------------- - Sequence< ::rtl::OUString > SAL_CALL ODataTypeRepository::getElementNames( ) throw (RuntimeException) - { - ::osl::MutexGuard aGuard( m_aMutex ); - - Sequence< ::rtl::OUString > aNames( m_aRepository.size() ); - ::std::transform( - m_aRepository.begin(), - m_aRepository.end(), - aNames.getArray(), - ::o3tl::select1st< Repository::value_type >() - ); - return aNames; - } - - //-------------------------------------------------------------------- - sal_Bool SAL_CALL ODataTypeRepository::hasByName( const ::rtl::OUString& aName ) throw (RuntimeException) - { - ::osl::MutexGuard aGuard( m_aMutex ); - return m_aRepository.find( aName ) != m_aRepository.end(); - } - - //-------------------------------------------------------------------- - Type SAL_CALL ODataTypeRepository::getElementType( ) throw (RuntimeException) - { - return ::getCppuType( static_cast< Reference< XDataType >* >( NULL ) ); - } - - //-------------------------------------------------------------------- - sal_Bool SAL_CALL ODataTypeRepository::hasElements( ) throw (RuntimeException) - { - return !m_aRepository.empty(); - } - - //-------------------------------------------------------------------- - // type specific implementation of registerProperties, using explicit - // template instantiations - - template<> - void OValueLimitedType<com::sun::star::util::Date>::registerProperties() - { - OValueLimitedType_Base::registerProperties(); - - REGISTER_VOID_PROP( XSD_MAX_INCLUSIVE_DATE, m_aMaxInclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MAX_EXCLUSIVE_DATE, m_aMaxExclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MIN_INCLUSIVE_DATE, m_aMinInclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MIN_EXCLUSIVE_DATE, m_aMinExclusive, ValueType ); - } - - template<> - void OValueLimitedType<com::sun::star::util::Time>::registerProperties() - { - OValueLimitedType_Base::registerProperties(); - - REGISTER_VOID_PROP( XSD_MAX_INCLUSIVE_TIME, m_aMaxInclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MAX_EXCLUSIVE_TIME, m_aMaxExclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MIN_INCLUSIVE_TIME, m_aMinInclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MIN_EXCLUSIVE_TIME, m_aMinExclusive, ValueType ); - } - - template<> - void OValueLimitedType<com::sun::star::util::DateTime>::registerProperties() - { - OValueLimitedType_Base::registerProperties(); - - REGISTER_VOID_PROP( XSD_MAX_INCLUSIVE_DATE_TIME, m_aMaxInclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MAX_EXCLUSIVE_DATE_TIME, m_aMaxExclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MIN_INCLUSIVE_DATE_TIME, m_aMinInclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MIN_EXCLUSIVE_DATE_TIME, m_aMinExclusive, ValueType ); - } - - template<> - void OValueLimitedType<double>::registerProperties() - { - OValueLimitedType_Base::registerProperties(); - - REGISTER_VOID_PROP( XSD_MAX_INCLUSIVE_DOUBLE, m_aMaxInclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MAX_EXCLUSIVE_DOUBLE, m_aMaxExclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MIN_INCLUSIVE_DOUBLE, m_aMinInclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MIN_EXCLUSIVE_DOUBLE, m_aMinExclusive, ValueType ); - } - - template<> - void OValueLimitedType<sal_Int16>::registerProperties() - { - OValueLimitedType_Base::registerProperties(); - - REGISTER_VOID_PROP( XSD_MAX_INCLUSIVE_INT, m_aMaxInclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MAX_EXCLUSIVE_INT, m_aMaxExclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MIN_INCLUSIVE_INT, m_aMinInclusive, ValueType ); - REGISTER_VOID_PROP( XSD_MIN_EXCLUSIVE_INT, m_aMinExclusive, ValueType ); - } -//........................................................................ -} // namespace xforms -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/datatyperepository.hxx b/forms/source/xforms/datatyperepository.hxx deleted file mode 100644 index 07e09d3cc..000000000 --- a/forms/source/xforms/datatyperepository.hxx +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef OFFAPI_COM_SUN_STAR_XFORMS_DATATYPEREPOSITORY_HXX -#define OFFAPI_COM_SUN_STAR_XFORMS_DATATYPEREPOSITORY_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/xforms/XDataTypeRepository.hpp> -/** === end UNO includes === **/ -#include <cppuhelper/implbase1.hxx> -#include <rtl/ref.hxx> - -#include <map> - -//........................................................................ -namespace xforms -{ -//........................................................................ - - class OXSDDataType; - //==================================================================== - //= ODataTypeRepository - //==================================================================== - typedef ::cppu::WeakImplHelper1 < ::com::sun::star::xforms::XDataTypeRepository - > ODataTypeRepository_Base; - class ODataTypeRepository : public ODataTypeRepository_Base - { - private: - typedef ::rtl::Reference< OXSDDataType > DataType; - typedef ::std::map< ::rtl::OUString, DataType > Repository; - - ::osl::Mutex m_aMutex; - Repository m_aRepository; - - public: - ODataTypeRepository( ); - - protected: - ~ODataTypeRepository( ); - - // XDataTypeRepository - virtual ::com::sun::star::uno::Reference< ::com::sun::star::xsd::XDataType > SAL_CALL getBasicDataType( sal_Int16 dataTypeClass ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::xsd::XDataType > SAL_CALL cloneDataType( const ::rtl::OUString& sourceName, const ::rtl::OUString& newName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::container::ElementExistException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL revokeDataType( const ::rtl::OUString& typeName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::util::VetoException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::xsd::XDataType > SAL_CALL getDataType( const ::rtl::OUString& typeName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); - - // XEnumerationAccess (base of XDataTypeRepository) - virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createEnumeration( ) throw (::com::sun::star::uno::RuntimeException); - - // XNameAccess (base of XDataTypeRepository) - virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames( ) throw (::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw (::com::sun::star::uno::RuntimeException); - - // XElementAccess (base of XEnumerationAccess and XNameAccess) - virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw (::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException); - - private: - ODataTypeRepository( const ODataTypeRepository& ); // never implemented - ODataTypeRepository& operator=( const ODataTypeRepository& ); // never implemented - - private: - /** locates the type with the given name in our repository, or throws an exception if there is no such type - */ - Repository::iterator implLocate( const ::rtl::OUString& _rName, bool _bAllowMiss = false ) SAL_THROW( ( ::com::sun::star::container::NoSuchElementException ) ); - }; - -//........................................................................ -} // namespace xforms -//........................................................................ - -#endif // OFFAPI_COM_SUN_STAR_XFORMS_DATATYPEREPOSITORY_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/datatypes.cxx b/forms/source/xforms/datatypes.cxx deleted file mode 100644 index 00be8663b..000000000 --- a/forms/source/xforms/datatypes.cxx +++ /dev/null @@ -1,993 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "datatypes.hxx" -#include "resourcehelper.hxx" -#include "property.hrc" -#include "convert.hxx" - -#include <com/sun/star/xsd/WhiteSpaceTreatment.hpp> -#include <tools/debug.hxx> -#include <tools/datetime.hxx> -#include <rtl/math.hxx> - -//........................................................................ -namespace xforms -{ -//........................................................................ - - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::makeAny; - using ::com::sun::star::uno::Type; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::util::VetoException; - using ::com::sun::star::util::Date; - using ::com::sun::star::util::Time; - using ::com::sun::star::util::DateTime; - using ::com::sun::star::lang::IllegalArgumentException; - using ::com::sun::star::lang::WrappedTargetException; - using ::com::sun::star::beans::UnknownPropertyException; - using ::com::sun::star::beans::PropertyVetoException; - using ::com::sun::star::beans::XPropertyChangeListener; - using ::com::sun::star::beans::XVetoableChangeListener; - - using ::com::sun::star::beans::PropertyAttribute::BOUND; - using ::com::sun::star::beans::PropertyAttribute::READONLY; - - using namespace ::com::sun::star::xsd; - using namespace ::frm; - U_NAMESPACE_USE - - //==================================================================== - //= OXSDDataType - //==================================================================== - //-------------------------------------------------------------------- - OXSDDataType::OXSDDataType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ) - :OXSDDataType_PBase( m_aBHelper ) - ,m_bIsBasic( sal_True ) - ,m_nTypeClass( _nTypeClass ) - ,m_sName( _rName ) - ,m_nWST( WhiteSpaceTreatment::Preserve ) - ,m_bPatternMatcherDirty( true ) - { - } - - //-------------------------------------------------------------------- - OXSDDataType::~OXSDDataType() - { - } - - //-------------------------------------------------------------------- - void OXSDDataType::registerProperties() - { - registerProperty( PROPERTY_NAME, PROPERTY_ID_NAME, BOUND, &m_sName, ::getCppuType( &m_sName ) ); - registerProperty( PROPERTY_XSD_WHITESPACE, PROPERTY_ID_XSD_WHITESPACE, BOUND, &m_nWST, ::getCppuType( &m_nWST ) ); - registerProperty( PROPERTY_XSD_PATTERN, PROPERTY_ID_XSD_PATTERN, BOUND, &m_sPattern, ::getCppuType( &m_sPattern ) ); - - registerProperty( PROPERTY_XSD_IS_BASIC, PROPERTY_ID_XSD_IS_BASIC, READONLY, &m_bIsBasic, ::getCppuType( &m_bIsBasic ) ); - registerProperty( PROPERTY_XSD_TYPE_CLASS, PROPERTY_ID_XSD_TYPE_CLASS, READONLY, &m_nTypeClass, ::getCppuType( &m_nTypeClass ) ); - } - - //-------------------------------------------------------------------- - void OXSDDataType::initializeClone( const OXSDDataType& _rCloneSource ) - { - m_bIsBasic = sal_False; - m_nTypeClass = _rCloneSource.m_nTypeClass; - m_sPattern = _rCloneSource.m_sPattern; - m_nWST = _rCloneSource.m_nWST; - } - - //-------------------------------------------------------------------- - OXSDDataType* OXSDDataType::clone( const ::rtl::OUString& _rNewName ) const - { - OXSDDataType* pClone = createClone( _rNewName ); - pClone->initializeClone( *this ); - return pClone; - } - - //-------------------------------------------------------------------- - IMPLEMENT_FORWARD_XINTERFACE2( OXSDDataType, OXSDDataType_Base, ::comphelper::OPropertyContainer ) - - //-------------------------------------------------------------------- - IMPLEMENT_FORWARD_XTYPEPROVIDER2( OXSDDataType, OXSDDataType_Base, ::comphelper::OPropertyContainer ) - -#define SET_PROPERTY( propertyid, value, member ) \ - setFastPropertyValue( PROPERTY_ID_##propertyid, makeAny( value ) ); \ - OSL_POSTCOND( member == value, "OXSDDataType::setFoo: inconsistency!" ); - - //-------------------------------------------------------------------- - ::rtl::OUString SAL_CALL OXSDDataType::getName( ) throw (RuntimeException) - { - return m_sName; - } - - //-------------------------------------------------------------------- - void SAL_CALL OXSDDataType::setName( const ::rtl::OUString& aName ) throw (RuntimeException, VetoException) - { - // TODO: check the name for conflicts in the repository - SET_PROPERTY( NAME, aName, m_sName ); - } - - //-------------------------------------------------------------------- - ::rtl::OUString SAL_CALL OXSDDataType::getPattern() throw (RuntimeException) - { - return m_sPattern; - } - - //-------------------------------------------------------------------- - void SAL_CALL OXSDDataType::setPattern( const ::rtl::OUString& _pattern ) throw (RuntimeException) - { - SET_PROPERTY( XSD_PATTERN, _pattern, m_sPattern ); - } - - //-------------------------------------------------------------------- - sal_Int16 SAL_CALL OXSDDataType::getWhiteSpaceTreatment() throw (RuntimeException) - { - return m_nWST; - } - - //-------------------------------------------------------------------- - void SAL_CALL OXSDDataType::setWhiteSpaceTreatment( sal_Int16 _whitespacetreatment ) throw (RuntimeException, IllegalArgumentException) - { - SET_PROPERTY( XSD_WHITESPACE, _whitespacetreatment, m_nWST ); - } - - //-------------------------------------------------------------------- - sal_Bool SAL_CALL OXSDDataType::getIsBasic() throw (RuntimeException) - { - return m_bIsBasic; - } - - - //-------------------------------------------------------------------- - sal_Int16 SAL_CALL OXSDDataType::getTypeClass() throw (RuntimeException) - { - return m_nTypeClass; - } - - //-------------------------------------------------------------------- - sal_Bool OXSDDataType::validate( const ::rtl::OUString& sValue ) throw( RuntimeException ) - { - return ( _validate( sValue ) == 0 ); - } - - //-------------------------------------------------------------------- - ::rtl::OUString OXSDDataType::explainInvalid( const ::rtl::OUString& sValue ) throw( RuntimeException ) - { - // get reason - sal_uInt16 nReason = _validate( sValue ); - - // get resource and return localized string - return ( nReason == 0 ) - ? ::rtl::OUString() - : getResource( nReason, sValue, - _explainInvalid( nReason ) ); - } - - //-------------------------------------------------------------------- - ::rtl::OUString OXSDDataType::_explainInvalid( sal_uInt16 nReason ) - { - if ( RID_STR_XFORMS_PATTERN_DOESNT_MATCH == nReason ) - { - OSL_ENSURE( m_sPattern.getLength(), "OXSDDataType::_explainInvalid: how can this error occur without a regular expression?" ); - return m_sPattern; - } - return ::rtl::OUString(); - } - - //-------------------------------------------------------------------- - namespace - { - static void lcl_initializePatternMatcher( ::std::auto_ptr< RegexMatcher >& _rpMatcher, const ::rtl::OUString& _rPattern ) - { - UErrorCode nMatchStatus = U_ZERO_ERROR; - UnicodeString aIcuPattern( reinterpret_cast<const UChar *>(_rPattern.getStr()), _rPattern.getLength() ); // UChar != sal_Unicode in MinGW - _rpMatcher.reset( new RegexMatcher( aIcuPattern, 0, nMatchStatus ) ); - OSL_ENSURE( U_SUCCESS( nMatchStatus ), "lcl_initializePatternMatcher: invalid pattern property!" ); - // if asserts, then something changed our pattern without going to convertFastPropertyValue/checkPropertySanity - } - - static bool lcl_matchString( RegexMatcher& _rMatcher, const ::rtl::OUString& _rText ) - { - UErrorCode nMatchStatus = U_ZERO_ERROR; - UnicodeString aInput( reinterpret_cast<const UChar *>(_rText.getStr()), _rText.getLength() ); // UChar != sal_Unicode in MinGW - _rMatcher.reset( aInput ); - if ( _rMatcher.matches( nMatchStatus ) ) - { - int32_t nStart = _rMatcher.start( nMatchStatus ); - int32_t nEnd = _rMatcher.end ( nMatchStatus ); - if ( ( nStart == 0 ) && ( nEnd == _rText.getLength() ) ) - return true; - } - - return false; - } - } - - //-------------------------------------------------------------------- - sal_uInt16 OXSDDataType::_validate( const ::rtl::OUString& _rValue ) - { - // care for the whitespaces - ::rtl::OUString sConverted = Convert::convertWhitespace( _rValue, m_nWST ); - - // care for the regular expression - if ( m_sPattern.getLength() ) - { - // ensure our pattern matcher is up to date - if ( m_bPatternMatcherDirty ) - { - lcl_initializePatternMatcher( m_pPatternMatcher, m_sPattern ); - m_bPatternMatcherDirty = false; - } - - // let it match the string - if ( !lcl_matchString( *m_pPatternMatcher.get(), _rValue ) ) - return RID_STR_XFORMS_PATTERN_DOESNT_MATCH; - } - - return 0; - } - - //-------------------------------------------------------------------- - sal_Bool OXSDDataType::convertFastPropertyValue( Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue ) throw(IllegalArgumentException) - { - // let the base class do the conversion - if ( !OXSDDataType_PBase::convertFastPropertyValue( _rConvertedValue, _rOldValue, _nHandle, _rValue ) ) - return sal_False; - - // sanity checks - ::rtl::OUString sErrorMessage; - if ( !checkPropertySanity( _nHandle, _rConvertedValue, sErrorMessage ) ) - { - IllegalArgumentException aException; - aException.Message = sErrorMessage; - aException.Context = *this; - throw IllegalArgumentException( aException ); - } - - return sal_True; - } - - //-------------------------------------------------------------------- - void SAL_CALL OXSDDataType::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const Any& _rValue ) throw (Exception) - { - OXSDDataType_PBase::setFastPropertyValue_NoBroadcast( _nHandle, _rValue ); - if ( _nHandle == PROPERTY_ID_XSD_PATTERN ) - m_bPatternMatcherDirty = true; - } - - //-------------------------------------------------------------------- - bool OXSDDataType::checkPropertySanity( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rNewValue, ::rtl::OUString& _rErrorMessage ) - { - if ( _nHandle == PROPERTY_ID_XSD_PATTERN ) - { - ::rtl::OUString sPattern; - OSL_VERIFY( _rNewValue >>= sPattern ); - - UnicodeString aIcuPattern( reinterpret_cast<const UChar *>(sPattern.getStr()), sPattern.getLength() ); // UChar != sal_Unicode in MinGW - UErrorCode nMatchStatus = U_ZERO_ERROR; - RegexMatcher aMatcher( aIcuPattern, 0, nMatchStatus ); - if ( U_FAILURE( nMatchStatus ) ) - { - _rErrorMessage = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "This is no valid pattern." ) ); - return false; - } - } - return true; - } - - //-------------------------------------------------------------------- - void SAL_CALL OXSDDataType::setPropertyValue( const ::rtl::OUString& aPropertyName, const Any& aValue ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) - { - OXSDDataType_PBase::setPropertyValue( aPropertyName, aValue ); - } - - //-------------------------------------------------------------------- - Any SAL_CALL OXSDDataType::getPropertyValue( const ::rtl::OUString& PropertyName ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) - { - return OXSDDataType_PBase::getPropertyValue( PropertyName ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OXSDDataType::addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const Reference< XPropertyChangeListener >& xListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) - { - OXSDDataType_PBase::addPropertyChangeListener( aPropertyName, xListener ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OXSDDataType::removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const Reference< XPropertyChangeListener >& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) - { - OXSDDataType_PBase::removePropertyChangeListener( aPropertyName, aListener ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OXSDDataType::addVetoableChangeListener( const ::rtl::OUString& PropertyName, const Reference< XVetoableChangeListener >& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) - { - OXSDDataType_PBase::addVetoableChangeListener( PropertyName, aListener ); - } - - //-------------------------------------------------------------------- - void SAL_CALL OXSDDataType::removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const Reference< XVetoableChangeListener >& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) - { - OXSDDataType_PBase::removeVetoableChangeListener( PropertyName, aListener ); - } - - //==================================================================== - //= OValueLimitedType_Base - //==================================================================== - OValueLimitedType_Base::OValueLimitedType_Base( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ) - :OXSDDataType( _rName, _nTypeClass ) - ,m_fCachedMaxInclusive( 0 ) - ,m_fCachedMaxExclusive( 0 ) - ,m_fCachedMinInclusive( 0 ) - ,m_fCachedMinExclusive( 0 ) - { - } - - //-------------------------------------------------------------------- - void OValueLimitedType_Base::initializeClone( const OXSDDataType& _rCloneSource ) - { - OXSDDataType::initializeClone( _rCloneSource ); - initializeTypedClone( static_cast< const OValueLimitedType_Base& >( _rCloneSource ) ); - } - - //-------------------------------------------------------------------- - void OValueLimitedType_Base::initializeTypedClone( const OValueLimitedType_Base& _rCloneSource ) - { - m_aMaxInclusive = _rCloneSource.m_aMaxInclusive; - m_aMaxExclusive = _rCloneSource.m_aMaxExclusive; - m_aMinInclusive = _rCloneSource.m_aMinInclusive; - m_aMinExclusive = _rCloneSource.m_aMinExclusive; - m_fCachedMaxInclusive = _rCloneSource.m_fCachedMaxInclusive; - m_fCachedMaxExclusive = _rCloneSource.m_fCachedMaxExclusive; - m_fCachedMinInclusive = _rCloneSource.m_fCachedMinInclusive; - m_fCachedMinExclusive = _rCloneSource.m_fCachedMinExclusive; - } - - //-------------------------------------------------------------------- - void SAL_CALL OValueLimitedType_Base::setFastPropertyValue_NoBroadcast( - sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) throw (::com::sun::star::uno::Exception) - { - OXSDDataType::setFastPropertyValue_NoBroadcast( _nHandle, _rValue ); - - // if one of our limit properties has been set, translate it into a double - // value, for later efficient validation - switch ( _nHandle ) - { - case PROPERTY_ID_XSD_MAX_INCLUSIVE_INT: - case PROPERTY_ID_XSD_MAX_INCLUSIVE_DOUBLE: - case PROPERTY_ID_XSD_MAX_INCLUSIVE_DATE: - case PROPERTY_ID_XSD_MAX_INCLUSIVE_TIME: - case PROPERTY_ID_XSD_MAX_INCLUSIVE_DATE_TIME: - if ( m_aMaxInclusive.hasValue() ) - normalizeValue( m_aMaxInclusive, m_fCachedMaxInclusive ); - else - m_fCachedMaxInclusive = 0; - break; - case PROPERTY_ID_XSD_MAX_EXCLUSIVE_INT: - case PROPERTY_ID_XSD_MAX_EXCLUSIVE_DOUBLE: - case PROPERTY_ID_XSD_MAX_EXCLUSIVE_DATE: - case PROPERTY_ID_XSD_MAX_EXCLUSIVE_TIME: - case PROPERTY_ID_XSD_MAX_EXCLUSIVE_DATE_TIME: - if ( m_aMaxExclusive.hasValue() ) - normalizeValue( m_aMaxExclusive, m_fCachedMaxExclusive ); - else - m_fCachedMaxExclusive = 0; - break; - case PROPERTY_ID_XSD_MIN_INCLUSIVE_INT: - case PROPERTY_ID_XSD_MIN_INCLUSIVE_DOUBLE: - case PROPERTY_ID_XSD_MIN_INCLUSIVE_DATE: - case PROPERTY_ID_XSD_MIN_INCLUSIVE_TIME: - case PROPERTY_ID_XSD_MIN_INCLUSIVE_DATE_TIME: - if ( m_aMinInclusive.hasValue() ) - normalizeValue( m_aMinInclusive, m_fCachedMinInclusive ); - else - m_fCachedMinInclusive = 0; - break; - case PROPERTY_ID_XSD_MIN_EXCLUSIVE_INT: - case PROPERTY_ID_XSD_MIN_EXCLUSIVE_DOUBLE: - case PROPERTY_ID_XSD_MIN_EXCLUSIVE_DATE: - case PROPERTY_ID_XSD_MIN_EXCLUSIVE_TIME: - case PROPERTY_ID_XSD_MIN_EXCLUSIVE_DATE_TIME: - if ( m_aMinExclusive.hasValue() ) - normalizeValue( m_aMinExclusive, m_fCachedMinExclusive ); - else - m_fCachedMinExclusive = 0; - break; - } - } - - //-------------------------------------------------------------------- - bool OValueLimitedType_Base::_getValue( const ::rtl::OUString& rValue, double& fValue ) - { - // convert to double - rtl_math_ConversionStatus eStatus; - sal_Int32 nEnd; - double f = ::rtl::math::stringToDouble( - rValue, sal_Unicode('.'), sal_Unicode(0), &eStatus, &nEnd ); - - // error checking... - bool bReturn = false; - if( eStatus == rtl_math_ConversionStatus_Ok - && nEnd == rValue.getLength() ) - { - bReturn = true; - fValue = f; - } - return bReturn; - } - - //-------------------------------------------------------------------- - sal_uInt16 OValueLimitedType_Base::_validate( const ::rtl::OUString& rValue ) - { - sal_uInt16 nReason = OXSDDataType::_validate( rValue ); - if( nReason == 0 ) - { - - // convert value and check format - double f; - if( ! _getValue( rValue, f ) ) - nReason = RID_STR_XFORMS_VALUE_IS_NOT_A; - - // check range - else if( ( m_aMaxInclusive.hasValue() ) && f > m_fCachedMaxInclusive ) - nReason = RID_STR_XFORMS_VALUE_MAX_INCL; - else if( ( m_aMaxExclusive.hasValue() ) && f >= m_fCachedMaxExclusive ) - nReason = RID_STR_XFORMS_VALUE_MAX_EXCL; - else if( ( m_aMinInclusive.hasValue() ) && f < m_fCachedMinInclusive ) - nReason = RID_STR_XFORMS_VALUE_MIN_INCL; - else if( ( m_aMinExclusive.hasValue() ) && f <= m_fCachedMinExclusive ) - nReason = RID_STR_XFORMS_VALUE_MIN_EXCL; - } - return nReason; - } - - //-------------------------------------------------------------------- - ::rtl::OUString OValueLimitedType_Base::_explainInvalid( sal_uInt16 nReason ) - { - ::rtl::OUStringBuffer sInfo; - switch( nReason ) - { - case 0: - // nothing to do! - break; - - case RID_STR_XFORMS_VALUE_IS_NOT_A: - sInfo.append( getName() ); - break; - - case RID_STR_XFORMS_VALUE_MAX_INCL: - sInfo.append( typedValueAsHumanReadableString( m_aMaxInclusive ) ); - break; - - case RID_STR_XFORMS_VALUE_MAX_EXCL: - sInfo.append( typedValueAsHumanReadableString( m_aMaxExclusive ) ); - break; - - case RID_STR_XFORMS_VALUE_MIN_INCL: - sInfo.append( typedValueAsHumanReadableString( m_aMinInclusive ) ); - break; - - case RID_STR_XFORMS_VALUE_MIN_EXCL: - sInfo.append( typedValueAsHumanReadableString( m_aMinExclusive ) ); - break; - - default: - OSL_FAIL( "OValueLimitedType::_explainInvalid: unknown reason!" ); - break; - } - - return sInfo.makeStringAndClear(); - } - - //==================================================================== - //= OStringType - //==================================================================== - //-------------------------------------------------------------------- - OStringType::OStringType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ) - :OStringType_Base( _rName, _nTypeClass ) - { - } - - //-------------------------------------------------------------------- - void OStringType::registerProperties() - { - OStringType_Base::registerProperties(); - - REGISTER_VOID_PROP( XSD_LENGTH, m_aLength, sal_Int32 ); - REGISTER_VOID_PROP( XSD_MIN_LENGTH, m_aMinLength, sal_Int32 ); - REGISTER_VOID_PROP( XSD_MAX_LENGTH, m_aMaxLength, sal_Int32 ); - } - - //-------------------------------------------------------------------- - IMPLEMENT_DEFAULT_TYPED_CLONING( OStringType, OStringType_Base ) - - //-------------------------------------------------------------------- - void OStringType::initializeTypedClone( const OStringType& _rCloneSource ) - { - m_aLength = _rCloneSource.m_aLength; - m_aMinLength = _rCloneSource.m_aMinLength; - m_aMaxLength = _rCloneSource.m_aMaxLength; - } - - //-------------------------------------------------------------------- - bool OStringType::checkPropertySanity( sal_Int32 _nHandle, const Any& _rNewValue, ::rtl::OUString& _rErrorMessage ) - { - // let the base class do the conversion - if ( !OStringType_Base::checkPropertySanity( _nHandle, _rNewValue, _rErrorMessage ) ) - return false; - - _rErrorMessage = ::rtl::OUString(); - switch ( _nHandle ) - { - case PROPERTY_ID_XSD_LENGTH: - case PROPERTY_ID_XSD_MIN_LENGTH: - case PROPERTY_ID_XSD_MAX_LENGTH: - { - sal_Int32 nValue( 0 ); - OSL_VERIFY( _rNewValue >>= nValue ); - if ( nValue <= 0 ) - _rErrorMessage = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Length limits must denote positive integer values." ) ); - // TODO/eforms: localize the error message - } - break; - } - - return _rErrorMessage.getLength() == 0; - } - - //-------------------------------------------------------------------- - sal_uInt16 OStringType::_validate( const ::rtl::OUString& rValue ) - { - // check regexp, whitespace etc. in parent class - sal_uInt16 nReason = OStringType_Base::_validate( rValue ); - - if( nReason == 0 ) - { - // check string constraints - sal_Int32 nLength = rValue.getLength(); - sal_Int32 nLimit = 0; - if ( m_aLength >>= nLimit ) - { - if ( nLimit != nLength ) - nReason = RID_STR_XFORMS_VALUE_LENGTH; - } - else - { - if ( ( m_aMaxLength >>= nLimit ) && ( nLength > nLimit ) ) - nReason = RID_STR_XFORMS_VALUE_MAX_LENGTH; - else if ( ( m_aMinLength >>= nLimit ) && ( nLength < nLimit ) ) - nReason = RID_STR_XFORMS_VALUE_MIN_LENGTH; - } - } - return nReason; - } - - //-------------------------------------------------------------------- - ::rtl::OUString OStringType::_explainInvalid( sal_uInt16 nReason ) - { - sal_Int32 nValue = 0; - ::rtl::OUStringBuffer sInfo; - switch( nReason ) - { - case 0: - // nothing to do! - break; - - case RID_STR_XFORMS_VALUE_LENGTH: - if( m_aLength >>= nValue ) - sInfo.append( nValue ); - break; - - case RID_STR_XFORMS_VALUE_MAX_LENGTH: - if( m_aMaxLength >>= nValue ) - sInfo.append( nValue ); - break; - - case RID_STR_XFORMS_VALUE_MIN_LENGTH: - if( m_aMinLength >>= nValue ) - sInfo.append( nValue ); - break; - - default: - sInfo.append( OStringType_Base::_explainInvalid( nReason ) ); - break; - } - return sInfo.makeStringAndClear(); - } - - //==================================================================== - //= OBooleanType - //==================================================================== - //-------------------------------------------------------------------- - OBooleanType::OBooleanType( const ::rtl::OUString& _rName ) - :OBooleanType_Base( _rName, DataTypeClass::BOOLEAN ) - { - } - - //-------------------------------------------------------------------- - IMPLEMENT_DEFAULT_CLONING( OBooleanType, OBooleanType_Base ) - - //-------------------------------------------------------------------- - void OBooleanType::initializeTypedClone( const OBooleanType& /*_rCloneSource*/ ) - { - } - - //-------------------------------------------------------------------- - sal_uInt16 OBooleanType::_validate( const ::rtl::OUString& sValue ) - { - sal_uInt16 nInvalidityReason = OBooleanType_Base::_validate( sValue ); - if ( nInvalidityReason ) - return nInvalidityReason; - - bool bValid = - sValue.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("0")) || - sValue.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("1")) || - sValue.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("true")) || - sValue.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("false")); - return bValid ? 0 : RID_STR_XFORMS_INVALID_VALUE; - } - - //-------------------------------------------------------------------- - ::rtl::OUString OBooleanType::_explainInvalid( sal_uInt16 nReason ) - { - return ( nReason == 0 ) ? ::rtl::OUString() : getName(); - } - - //==================================================================== - //= ODecimalType - //==================================================================== - //-------------------------------------------------------------------- - ODecimalType::ODecimalType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ) - :ODecimalType_Base( _rName, _nTypeClass ) - { - } - - //-------------------------------------------------------------------- - IMPLEMENT_DEFAULT_TYPED_CLONING( ODecimalType, ODecimalType_Base ) - - //-------------------------------------------------------------------- - void ODecimalType::initializeTypedClone( const ODecimalType& _rCloneSource ) - { - m_aTotalDigits = _rCloneSource.m_aTotalDigits; - m_aFractionDigits = _rCloneSource.m_aFractionDigits; - } - - //-------------------------------------------------------------------- - void ODecimalType::registerProperties() - { - ODecimalType_Base::registerProperties(); - - REGISTER_VOID_PROP( XSD_TOTAL_DIGITS, m_aTotalDigits, sal_Int32 ); - REGISTER_VOID_PROP( XSD_FRACTION_DIGITS, m_aFractionDigits, sal_Int32 ); - } - - //-------------------------------------------------------------------- - - // validate decimals and return code for which facets failed - // to be used by: ODecimalType::validate and ODecimalType::explainInvalid - sal_uInt16 ODecimalType::_validate( const ::rtl::OUString& rValue ) - { - sal_Int16 nReason = ODecimalType_Base::_validate( rValue ); - - // check digits (if no other cause is available so far) - if( nReason == 0 ) - { - sal_Int32 nLength = rValue.getLength(); - sal_Int32 n = 0; - sal_Int32 nTotalDigits = 0; - sal_Int32 nFractionDigits = 0; - const sal_Unicode* pValue = rValue.getStr(); - for( ; pValue[n] != sal_Unicode('.') && n < nLength; n++ ) - if( pValue[n] >= sal_Unicode('0') - && pValue[n] <= sal_Unicode('9')) - nTotalDigits++; - for( ; n < nLength; n++ ) - if( pValue[n] >= sal_Unicode('0') - && pValue[n] <= sal_Unicode('9')) - nFractionDigits++; - nTotalDigits += nFractionDigits; - - sal_Int32 nValue = 0; - if( ( m_aTotalDigits >>= nValue ) && nTotalDigits > nValue ) - nReason = RID_STR_XFORMS_VALUE_TOTAL_DIGITS; - else if( ( m_aFractionDigits >>= nValue ) && - ( nFractionDigits > nValue ) ) - nReason = RID_STR_XFORMS_VALUE_FRACTION_DIGITS; - } - - return nReason; - } - - //-------------------------------------------------------------------- - ::rtl::OUString ODecimalType::_explainInvalid( sal_uInt16 nReason ) - { - sal_Int32 nValue = 0; - ::rtl::OUStringBuffer sInfo; - switch( nReason ) - { - case RID_STR_XFORMS_VALUE_TOTAL_DIGITS: - if( m_aTotalDigits >>= nValue ) - sInfo.append( nValue ); - break; - - case RID_STR_XFORMS_VALUE_FRACTION_DIGITS: - if( m_aFractionDigits >>= nValue ) - sInfo.append( nValue ); - break; - - default: - sInfo.append( ODecimalType_Base::_explainInvalid( nReason ) ); - break; - } - return sInfo.makeStringAndClear(); - } - - //-------------------------------------------------------------------- - ::rtl::OUString ODecimalType::typedValueAsHumanReadableString( const Any& _rValue ) const - { - double fValue( 0 ); - normalizeValue( _rValue, fValue ); - return ::rtl::OUString::valueOf( fValue ); - } - - //-------------------------------------------------------------------- - void ODecimalType::normalizeValue( const Any& _rValue, double& _rDoubleValue ) const - { - OSL_VERIFY( _rValue >>= _rDoubleValue ); - } - - //==================================================================== - //= - //==================================================================== -#define DEFAULT_IMPLEMNENT_SUBTYPE( classname, typeclass ) \ - classname::classname( const ::rtl::OUString& _rName ) \ - :classname##_Base( _rName, DataTypeClass::typeclass ) \ - { \ - } \ - \ - IMPLEMENT_DEFAULT_CLONING( classname, classname##_Base ) \ - \ - void classname::initializeTypedClone( const classname& /*_rCloneSource*/ ) \ - { \ - } \ - - - //==================================================================== - //= ODateType - //==================================================================== - //-------------------------------------------------------------------- - DEFAULT_IMPLEMNENT_SUBTYPE( ODateType, DATE ) - - //-------------------------------------------------------------------- - sal_uInt16 ODateType::_validate( const ::rtl::OUString& _rValue ) - { - return ODateType_Base::_validate( _rValue ); - } - - //-------------------------------------------------------------------- - bool ODateType::_getValue( const ::rtl::OUString& value, double& fValue ) - { - Any aTypeValue = Convert::get().toAny( value, getCppuType() ); - - Date aValue; - if ( !( aTypeValue >>= aValue ) ) - return false; - - ::Date aToolsDate( aValue.Day, aValue.Month, aValue.Year ); - fValue = aToolsDate.GetDate(); - return true; - } - - //-------------------------------------------------------------------- - ::rtl::OUString ODateType::typedValueAsHumanReadableString( const Any& _rValue ) const - { - OSL_PRECOND( _rValue.getValueType().equals( getCppuType() ), "ODateType::typedValueAsHumanReadableString: unexpected type" ); - return Convert::get().toXSD( _rValue ); - } - - //-------------------------------------------------------------------- - void ODateType::normalizeValue( const Any& _rValue, double& _rDoubleValue ) const - { - Date aValue; - OSL_VERIFY( _rValue >>= aValue ); - ::Date aToolsDate( aValue.Day, aValue.Month, aValue.Year ); - _rDoubleValue = aToolsDate.GetDate(); - } - - //==================================================================== - //= OTimeType - //==================================================================== - //-------------------------------------------------------------------- - DEFAULT_IMPLEMNENT_SUBTYPE( OTimeType, TIME ) - - //-------------------------------------------------------------------- - sal_uInt16 OTimeType::_validate( const ::rtl::OUString& _rValue ) - { - return OTimeType_Base::_validate( _rValue ); - } - - //-------------------------------------------------------------------- - bool OTimeType::_getValue( const ::rtl::OUString& value, double& fValue ) - { - Any aTypedValue = Convert::get().toAny( value, getCppuType() ); - - Time aValue; - if ( !( aTypedValue >>= aValue ) ) - return false; - - ::Time aToolsTime( aValue.Hours, aValue.Minutes, aValue.Seconds, aValue.HundredthSeconds ); - fValue = aToolsTime.GetTime(); - return true; - } - - //-------------------------------------------------------------------- - ::rtl::OUString OTimeType::typedValueAsHumanReadableString( const Any& _rValue ) const - { - OSL_PRECOND( _rValue.getValueType().equals( getCppuType() ), "OTimeType::typedValueAsHumanReadableString: unexpected type" ); - return Convert::get().toXSD( _rValue ); - } - - //-------------------------------------------------------------------- - void OTimeType::normalizeValue( const Any& _rValue, double& _rDoubleValue ) const - { - Time aValue; - OSL_VERIFY( _rValue >>= aValue ); - ::Time aToolsTime( aValue.Hours, aValue.Minutes, aValue.Seconds, aValue.HundredthSeconds ); - _rDoubleValue = aToolsTime.GetTime(); - } - - //==================================================================== - //= ODateTimeType - //==================================================================== - //-------------------------------------------------------------------- - DEFAULT_IMPLEMNENT_SUBTYPE( ODateTimeType, DATETIME ) - - //-------------------------------------------------------------------- - sal_uInt16 ODateTimeType::_validate( const ::rtl::OUString& _rValue ) - { - return ODateTimeType_Base::_validate( _rValue ); - } - - //-------------------------------------------------------------------- - namespace - { - double lcl_normalizeDateTime( const DateTime& _rValue ) - { - ::DateTime aToolsValue( - ::Date( _rValue.Day, _rValue.Month, _rValue.Year ), - ::Time( _rValue.Hours, _rValue.Minutes, _rValue.Seconds, _rValue.HundredthSeconds ) - ); - - double fValue = 0; - // days since 1.1.1900 (which is relatively arbitrary but fixed date) - fValue += ::Date( aToolsValue ) - ::Date( 1, 1, 1900 ); - // time - fValue += aToolsValue.GetTimeInDays(); - return fValue; - } - } - - //-------------------------------------------------------------------- - bool ODateTimeType::_getValue( const ::rtl::OUString& value, double& fValue ) - { - Any aTypedValue = Convert::get().toAny( value, getCppuType() ); - - DateTime aValue; - if ( !( aTypedValue >>= aValue ) ) - return false; - - fValue = lcl_normalizeDateTime( aValue ); - return true; - } - - //-------------------------------------------------------------------- - ::rtl::OUString ODateTimeType::typedValueAsHumanReadableString( const Any& _rValue ) const - { - OSL_PRECOND( _rValue.getValueType().equals( getCppuType() ), "OTimeType::typedValueAsHumanReadableString: unexpected type" ); - ::rtl::OUString sString = Convert::get().toXSD( _rValue ); - - // ISO 8601 notation has a "T" to separate between date and time. Our only concession - // to the "human readable" in the method name is to replace this T with a whitespace. - OSL_ENSURE( sString.indexOf( 'T' ) != -1, "ODateTimeType::typedValueAsHumanReadableString: hmm - no ISO notation?" ); - return sString.replace( 'T', ' ' ); - } - - //-------------------------------------------------------------------- - void ODateTimeType::normalizeValue( const Any& _rValue, double& _rDoubleValue ) const - { - DateTime aValue; - OSL_VERIFY( _rValue >>= aValue ); - _rDoubleValue = lcl_normalizeDateTime( aValue ); - } - - //==================================================================== - //= OShortIntegerType - //==================================================================== - //-------------------------------------------------------------------- - OShortIntegerType::OShortIntegerType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ) - :OShortIntegerType_Base( _rName, _nTypeClass ) - { - } - - //-------------------------------------------------------------------- - IMPLEMENT_DEFAULT_TYPED_CLONING( OShortIntegerType, OShortIntegerType_Base ) - - //-------------------------------------------------------------------- - void OShortIntegerType::initializeTypedClone( const OShortIntegerType& /*_rCloneSource*/ ) - { - } - - //-------------------------------------------------------------------- - bool OShortIntegerType::_getValue( const ::rtl::OUString& value, double& fValue ) - { - fValue = (double)(sal_Int16)value.toInt32(); - // TODO/eforms - // this does not care for values which do not fit into a sal_Int16, but simply - // cuts them down. A better implementation here should probably return <FALSE/> - // for those values. - // Else, we may have a situation where the UI claims an input to be valid - // (say "12345678"), while internally, and at submission time, this is cut to - // some smaller value. - // - // Additionally, this of course does not care for strings which are no numers ... - return true; - } - - //-------------------------------------------------------------------- - ::rtl::OUString OShortIntegerType::typedValueAsHumanReadableString( const Any& _rValue ) const - { - sal_Int16 nValue( 0 ); - OSL_VERIFY( _rValue >>= nValue ); - return ::rtl::OUString::valueOf( (sal_Int32)nValue ); - } - - //-------------------------------------------------------------------- - void OShortIntegerType::normalizeValue( const Any& _rValue, double& _rDoubleValue ) const - { - sal_Int16 nValue( 0 ); - OSL_VERIFY( _rValue >>= nValue ); - _rDoubleValue = nValue; - } - //==================================================================== - //==================================================================== - -#define DATATYPES_INCLUDED_BY_MASTER_HEADER -#include "datatypes_impl.hxx" -#undef DATATYPES_INCLUDED_BY_MASTER_HEADER - -//........................................................................ -} // namespace xforms -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/datatypes.hxx b/forms/source/xforms/datatypes.hxx deleted file mode 100644 index f38484127..000000000 --- a/forms/source/xforms/datatypes.hxx +++ /dev/null @@ -1,426 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef FORMS_SOURCE_XFORMS_DATATYPES_HXX -#define FORMS_SOURCE_XFORMS_DATATYPES_HXX - -/** === begin UNO includes === **/ -#include <com/sun/star/beans/PropertyAttribute.hpp> -#include <com/sun/star/util/Date.hpp> -#include <com/sun/star/util/Time.hpp> -#include <com/sun/star/util/DateTime.hpp> -#include <com/sun/star/xsd/XDataType.hpp> -#include <com/sun/star/xsd/DataTypeClass.hpp> -/** === end UNO includes === **/ -#include <cppuhelper/implbase1.hxx> -#include <comphelper/uno3.hxx> -#include <comphelper/propertycontainer.hxx> -#include <comphelper/proparrhlp.hxx> -#include <comphelper/broadcasthelper.hxx> -#include "warnings_guard_unicode_regex.h" - -#include <memory> - -//........................................................................ -namespace xforms -{ -//........................................................................ - - //==================================================================== - //= OXSDDataType - //==================================================================== - typedef ::cppu::WeakImplHelper1 < ::com::sun::star::xsd::XDataType - > OXSDDataType_Base; - typedef ::comphelper::OMutexAndBroadcastHelper OXSDDataType_BBase; - typedef ::comphelper::OPropertyContainer OXSDDataType_PBase; - - class OXSDDataType :public OXSDDataType_Base - ,public OXSDDataType_BBase // order matters: OMutexAndBroadcastHelper before - ,public OXSDDataType_PBase // OPropertyContainer - { - private: - // <properties> - sal_Bool m_bIsBasic; - sal_Int16 m_nTypeClass; - ::rtl::OUString m_sName; - ::rtl::OUString m_sPattern; - sal_uInt16 m_nWST; - // </properties> - - ::std::auto_ptr< U_NAMESPACE_QUALIFIER RegexMatcher > - m_pPatternMatcher; - bool m_bPatternMatcherDirty; - - protected: - - sal_Bool isBasic() const { return m_bIsBasic; } - sal_Int16 getTypeClass() const { return m_nTypeClass; } - const ::rtl::OUString& - getName() const { return m_sName; } - - private: - OXSDDataType( ); // never implemented - OXSDDataType( const OXSDDataType& ); // never implemented - OXSDDataType& operator=( const OXSDDataType& ); // never implemented - - protected: - // create basic data type - OXSDDataType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ); - ~OXSDDataType(); - - public: - DECLARE_XINTERFACE() - DECLARE_XTYPEPROVIDER() - - virtual ::rtl::OUString SAL_CALL getName( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setName( const ::rtl::OUString& aName ) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::util::VetoException); - virtual ::rtl::OUString SAL_CALL getPattern() throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setPattern( const ::rtl::OUString& _pattern ) throw (::com::sun::star::uno::RuntimeException); - virtual sal_Int16 SAL_CALL getWhiteSpaceTreatment() throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setWhiteSpaceTreatment( sal_Int16 _whitespacetreatment ) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IllegalArgumentException); - virtual sal_Bool SAL_CALL getIsBasic() throw (::com::sun::star::uno::RuntimeException); - virtual sal_Int16 SAL_CALL getTypeClass() throw (::com::sun::star::uno::RuntimeException); - - virtual sal_Bool SAL_CALL validate( const ::rtl::OUString& value ) throw (::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL explainInvalid( const ::rtl::OUString& value ) throw (::com::sun::star::uno::RuntimeException); - - // XPropertySet - is a base of XDataType and needs to be disambiguated - virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - - public: - OXSDDataType* clone( const ::rtl::OUString& _rNewName ) const; - - protected: - // XPropertySet and friends - virtual sal_Bool SAL_CALL convertFastPropertyValue( ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) throw(::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( - sal_Int32 nHandle, - const ::com::sun::star::uno::Any& rValue - ) - throw (::com::sun::star::uno::Exception); - - // --- own overridables --- - // helper for implementing cloning of data types - virtual OXSDDataType* createClone( const ::rtl::OUString& _rName ) const = 0; - virtual void initializeClone( const OXSDDataType& _rCloneSource ); - - // helper method for validate and explainInvalid - virtual sal_uInt16 _validate( const ::rtl::OUString& value ); - virtual ::rtl::OUString _explainInvalid( sal_uInt16 nReason ); - - // helper method for checking properties values which are to be set - virtual bool checkPropertySanity( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rNewValue, ::rtl::OUString& _rErrorMessage ); - - // register properties implemented by this instance - call the base class when overriding - virtual void registerProperties(); - }; - - //==================================================================== - //= helper for deriving from OXSDDataType - //==================================================================== -#define DECLARE_DEFAULT_CLONING( classname ) \ - virtual OXSDDataType* createClone( const ::rtl::OUString& _rName ) const; \ - virtual void initializeClone( const OXSDDataType& _rCloneSource ); \ - void initializeTypedClone( const classname& _rCloneSource ); - -#define IMPLEMENT_DEFAULT_CLONING( classname, baseclass ) \ - OXSDDataType* classname::createClone( const ::rtl::OUString& _rName ) const \ - { \ - return new classname( _rName ); \ - } \ - void classname::initializeClone( const OXSDDataType& _rCloneSource ) \ - { \ - baseclass::initializeClone( _rCloneSource ); \ - initializeTypedClone( static_cast< const classname& >( _rCloneSource ) ); \ - } \ - -#define IMPLEMENT_DEFAULT_TYPED_CLONING( classname, baseclass ) \ - OXSDDataType* classname::createClone( const ::rtl::OUString& _rName ) const \ - { \ - return new classname( _rName, getTypeClass() ); \ - } \ - void classname::initializeClone( const OXSDDataType& _rCloneSource ) \ - { \ - baseclass::initializeClone( _rCloneSource ); \ - initializeTypedClone( static_cast< const classname& >( _rCloneSource ) ); \ - } \ - -#define REGISTER_VOID_PROP( prop, memberAny, type ) \ - registerMayBeVoidProperty( PROPERTY_##prop, PROPERTY_ID_##prop, ::com::sun::star::beans::PropertyAttribute::BOUND | ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, \ - &memberAny, ::getCppuType( static_cast< type* >( NULL ) ) ); - - //==================================================================== - //= OValueLimitedType_Base - //==================================================================== - class OValueLimitedType_Base : public OXSDDataType - { - protected: - ::com::sun::star::uno::Any m_aMaxInclusive; - ::com::sun::star::uno::Any m_aMaxExclusive; - ::com::sun::star::uno::Any m_aMinInclusive; - ::com::sun::star::uno::Any m_aMinExclusive; - - double m_fCachedMaxInclusive; - double m_fCachedMaxExclusive; - double m_fCachedMinInclusive; - double m_fCachedMinExclusive; - - protected: - OValueLimitedType_Base( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ); - - virtual void initializeClone( const OXSDDataType& _rCloneSource ); - void initializeTypedClone( const OValueLimitedType_Base& _rCloneSource ); - - // XPropertySet and friends - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( - sal_Int32 nHandle, - const ::com::sun::star::uno::Any& rValue - ) - throw (::com::sun::star::uno::Exception); - - // OXSDDataType overridables - virtual bool _getValue( const ::rtl::OUString& value, double& fValue ); - virtual sal_uInt16 _validate( const ::rtl::OUString& value ); - virtual ::rtl::OUString _explainInvalid( sal_uInt16 nReason ); - - // own overridables - /** translate a given value into a human-readable string - - The value is guaranteed to be not <NULL/>, and is of type <member>ValueType</member> - */ - virtual ::rtl::OUString typedValueAsHumanReadableString( const ::com::sun::star::uno::Any& _rValue ) const = 0; - - /** translates a <member>ValueType</member> value into a double value - - The normalization must respect the "<" and "==" relations on the value - space. That is, if two values are equal, their normalizations must be equal, too. - Similarily, if <code>foo</code> is less than <code>bar</code>, the same - must hold for their normalizations. - - @param _rValue - the value to translate. Guranteed to be not <NULL/>, and of type <member>ValueType</member> - @param _rDoubleValue - output parameter to hold the resulting double value - */ - virtual void normalizeValue( const ::com::sun::star::uno::Any& _rValue, double& _rDoubleValue ) const = 0; - }; - - //==================================================================== - //= OValueLimitedType - //==================================================================== - template < typename VALUE_TYPE > - class OValueLimitedType : public OValueLimitedType_Base - { - protected: - typedef VALUE_TYPE ValueType; - inline const ::com::sun::star::uno::Type& - getCppuType() const { return ::getCppuType( static_cast< ValueType* >( NULL ) ); } - - protected: - OValueLimitedType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ); - - // OXSDDataType overridables - virtual void registerProperties(); - }; - - //==================================================================== - //= ODerivedDataType - //==================================================================== - /** helper class for implementing interfaces derived from XDataType - */ - template< typename CONCRETE_DATA_TYPE_IMPL, typename SUPERCLASS = OXSDDataType > - class ODerivedDataType :public SUPERCLASS - ,::comphelper::OPropertyArrayUsageHelper< CONCRETE_DATA_TYPE_IMPL > - { - private: - bool m_bPropertiesRegistered; - - protected: - ODerivedDataType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ); - - protected: - // OPropertyArrayUsageHelper - virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const; - - // XPropertySet - virtual com::sun::star::uno::Reference<com::sun::star::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw(com::sun::star::uno::RuntimeException); - virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper(); - }; - - //==================================================================== - //= OBooleanType - //==================================================================== - class OBooleanType; - typedef ODerivedDataType< OBooleanType > OBooleanType_Base; - class OBooleanType : public OBooleanType_Base - { - public: - OBooleanType( const ::rtl::OUString& _rName ); - - protected: - DECLARE_DEFAULT_CLONING( OBooleanType ) - - // OXSDDataType overridables - virtual sal_uInt16 _validate( const ::rtl::OUString& value ); - virtual ::rtl::OUString _explainInvalid( sal_uInt16 nReason ); - }; - - //==================================================================== - //= OStringType - //==================================================================== - class OStringType; - typedef ODerivedDataType< OStringType > OStringType_Base; - class OStringType :public OStringType_Base - { - protected: - // <properties> - ::com::sun::star::uno::Any m_aLength; - ::com::sun::star::uno::Any m_aMinLength; - ::com::sun::star::uno::Any m_aMaxLength; - // </properties> - - public: - OStringType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass /* = ::com::sun::star::xsd::DataTypeClass::STRING */ ); - - protected: - DECLARE_DEFAULT_CLONING( OStringType ) - - // OXSDDataType overridables - virtual sal_uInt16 _validate( const ::rtl::OUString& value ); - virtual ::rtl::OUString _explainInvalid( sal_uInt16 nReason ); - virtual bool checkPropertySanity( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rNewValue, ::rtl::OUString& _rErrorMessage ); - virtual void registerProperties(); - }; - - //==================================================================== - //= ODecimalType - //==================================================================== - class ODecimalType; - typedef ODerivedDataType< ODecimalType, OValueLimitedType< double > > ODecimalType_Base; - class ODecimalType : public ODecimalType_Base - { - protected: - ::com::sun::star::uno::Any m_aTotalDigits; - ::com::sun::star::uno::Any m_aFractionDigits; - - public: - ODecimalType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass /* = ::com::sun::star::xsd::DataTypeClass::DECIMAL */ ); - - protected: - DECLARE_DEFAULT_CLONING( ODecimalType ) - - // OXSDDataType overridables - virtual sal_uInt16 _validate( const ::rtl::OUString& value ); - virtual ::rtl::OUString _explainInvalid( sal_uInt16 nReason ); - virtual void registerProperties(); - - // OValueLimitedType overridables - virtual ::rtl::OUString typedValueAsHumanReadableString( const ::com::sun::star::uno::Any& _rValue ) const; - virtual void normalizeValue( const ::com::sun::star::uno::Any& _rValue, double& _rDoubleValue ) const; - - private: - using ODecimalType_Base::initializeTypedClone; - }; - - //==================================================================== - //= - //==================================================================== -#define DEFAULT_DECLARE_SUBTYPE( classname, valuetype ) \ - class classname; \ - typedef ODerivedDataType< classname, OValueLimitedType< valuetype > > classname##_Base; \ - class classname : public classname##_Base \ - { \ - public: \ - classname( const ::rtl::OUString& _rName ); \ - \ - protected: \ - DECLARE_DEFAULT_CLONING( classname ) \ - \ - /* OXSDDataType overridables */ \ - virtual sal_uInt16 _validate( const ::rtl::OUString& value ); \ - virtual bool _getValue( const ::rtl::OUString& value, double& fValue ); \ - \ - /* OValueLimitedType overridables */ \ - virtual ::rtl::OUString typedValueAsHumanReadableString( const ::com::sun::star::uno::Any& _rValue ) const; \ - virtual void normalizeValue( const ::com::sun::star::uno::Any& _rValue, double& _rDoubleValue ) const; \ - \ - private: \ - using classname##_Base::initializeTypedClone; \ - }; - - //==================================================================== - //= ODateType - //==================================================================== - DEFAULT_DECLARE_SUBTYPE( ODateType, ::com::sun::star::util::Date ) - - //==================================================================== - //= OTimeType - //==================================================================== - DEFAULT_DECLARE_SUBTYPE( OTimeType, ::com::sun::star::util::Time ) - - //==================================================================== - //= ODateTimeType - //==================================================================== - DEFAULT_DECLARE_SUBTYPE( ODateTimeType, ::com::sun::star::util::DateTime ) - - //==================================================================== - //= OShortIntegerType - //==================================================================== - class OShortIntegerType; - typedef ODerivedDataType< OShortIntegerType, OValueLimitedType< sal_Int16 > > OShortIntegerType_Base; - class OShortIntegerType : public OShortIntegerType_Base - { - public: - OShortIntegerType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ); - - protected: - DECLARE_DEFAULT_CLONING( OShortIntegerType ) - - // OXSDDataType overridables - virtual bool _getValue( const ::rtl::OUString& value, double& fValue ); - - // OValueLimitedType overridables - virtual ::rtl::OUString typedValueAsHumanReadableString( const ::com::sun::star::uno::Any& _rValue ) const; - virtual void normalizeValue( const ::com::sun::star::uno::Any& _rValue, double& _rDoubleValue ) const; - - private: - using OShortIntegerType_Base::initializeTypedClone; - }; - -//........................................................................ -} // namespace xforms -//........................................................................ - -#endif // FORMS_SOURCE_XFORMS_DATATYPES_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/datatypes_impl.hxx b/forms/source/xforms/datatypes_impl.hxx deleted file mode 100644 index 4ebd822a2..000000000 --- a/forms/source/xforms/datatypes_impl.hxx +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef DATATYPES_INCLUDED_BY_MASTER_HEADER - #error "not to be included directly!" -#endif - -//-------------------------------------------------------------------- -template< typename CONCRETE_DATA_TYPE_IMPL, typename SUPERCLASS > -ODerivedDataType< CONCRETE_DATA_TYPE_IMPL, SUPERCLASS >::ODerivedDataType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ) - :SUPERCLASS( _rName, _nTypeClass ) - ,m_bPropertiesRegistered( false ) -{ -} - -//-------------------------------------------------------------------- -template< typename CONCRETE_DATA_TYPE_IMPL, typename SUPERCLASS > -::cppu::IPropertyArrayHelper* ODerivedDataType< CONCRETE_DATA_TYPE_IMPL, SUPERCLASS >::createArrayHelper( ) const -{ - ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property > aProps; - ODerivedDataType< CONCRETE_DATA_TYPE_IMPL, SUPERCLASS >::describeProperties( aProps ); - return new ::cppu::OPropertyArrayHelper( aProps ); -} - -//-------------------------------------------------------------------- -template< typename CONCRETE_DATA_TYPE_IMPL, typename SUPERCLASS > -::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL ODerivedDataType< CONCRETE_DATA_TYPE_IMPL, SUPERCLASS >::getPropertySetInfo() throw( ::com::sun::star::uno::RuntimeException ) -{ - return ::cppu::OPropertySetHelper::createPropertySetInfo( getInfoHelper() ); -} - -//-------------------------------------------------------------------- -template< typename CONCRETE_DATA_TYPE_IMPL, typename SUPERCLASS > -::cppu::IPropertyArrayHelper& SAL_CALL ODerivedDataType< CONCRETE_DATA_TYPE_IMPL, SUPERCLASS >::getInfoHelper() -{ - if ( !m_bPropertiesRegistered ) - { - const_cast< ODerivedDataType* >( this )->registerProperties(); - const_cast< ODerivedDataType* >( this )->m_bPropertiesRegistered = true; - } - - return *ODerivedDataType< CONCRETE_DATA_TYPE_IMPL, SUPERCLASS >::getArrayHelper(); -} - - -//-------------------------------------------------------------------- -template< typename VALUE_TYPE > -OValueLimitedType< VALUE_TYPE >::OValueLimitedType( const ::rtl::OUString& _rName, sal_Int16 _nTypeClass ) - :OValueLimitedType_Base( _rName, _nTypeClass ) -{ -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/enumeration.cxx b/forms/source/xforms/enumeration.cxx deleted file mode 100644 index 8187d5d0f..000000000 --- a/forms/source/xforms/enumeration.cxx +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "enumeration.hxx" - -#include <com/sun/star/container/NoSuchElementException.hpp> -#include <com/sun/star/container/XIndexAccess.hpp> -#include <com/sun/star/lang/WrappedTargetException.hpp> -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/uno/RuntimeException.hpp> - -using com::sun::star::container::NoSuchElementException; -using com::sun::star::container::XIndexAccess; -using com::sun::star::lang::WrappedTargetException; -using com::sun::star::uno::Any; -using com::sun::star::uno::Reference; -using com::sun::star::uno::RuntimeException; - - -Enumeration::Enumeration( XIndexAccess* pContainer ) - : mxContainer( pContainer ), - mnIndex( 0 ) -{ - OSL_ENSURE( mxContainer.is(), "no container?" ); -} - -sal_Bool Enumeration::hasMoreElements() - throw( RuntimeException ) -{ - if( ! mxContainer.is() ) - throw RuntimeException(); - - return mnIndex < mxContainer->getCount(); -} - -Any Enumeration::nextElement() - throw( NoSuchElementException, - WrappedTargetException, - RuntimeException ) -{ - if( ! mxContainer.is() ) - throw RuntimeException(); - if( mnIndex >= mxContainer->getCount() ) - throw NoSuchElementException(); - - return mxContainer->getByIndex( mnIndex++ ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/enumeration.hxx b/forms/source/xforms/enumeration.hxx deleted file mode 100644 index c2b08db42..000000000 --- a/forms/source/xforms/enumeration.hxx +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _ENUMERATION_HXX -#define _ENUMERATION_HXX - - -#include <cppuhelper/implbase1.hxx> -#include <com/sun/star/container/XEnumeration.hpp> -#include <com/sun/star/uno/Reference.hxx> - -namespace com { namespace sun { namespace star { - namespace container { class XIndexAccess; } - namespace uno { class Any; } - namespace container { class NoSuchElementException; } - namespace lang { class WrappedTargetException; } - namespace uno { class RuntimeException; } -} } } - -/** implement XEnumeration based on container::XIndexAccess */ -class Enumeration - : public cppu::WeakImplHelper1<com::sun::star::container::XEnumeration> -{ - com::sun::star::uno::Reference<com::sun::star::container::XIndexAccess> mxContainer; - sal_Int32 mnIndex; - -public: - Enumeration( com::sun::star::container::XIndexAccess* ); - - virtual sal_Bool SAL_CALL hasMoreElements() - throw( com::sun::star::uno::RuntimeException ); - - virtual com::sun::star::uno::Any SAL_CALL nextElement() - throw( com::sun::star::container::NoSuchElementException, - com::sun::star::lang::WrappedTargetException, - com::sun::star::uno::RuntimeException ); -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/evaluationcontext.hxx b/forms/source/xforms/evaluationcontext.hxx deleted file mode 100644 index 9cbfea858..000000000 --- a/forms/source/xforms/evaluationcontext.hxx +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _EVALUATIONCONTEXT_HXX -#define _EVALUATIONCONTEXT_HXX - -#include <com/sun/star/xml/dom/XNode.hpp> -#include <com/sun/star/container/XNameContainer.hpp> -#include <com/sun/star/xforms/XModel.hpp> - -namespace xforms -{ - - -/** define the context for the evaluation of an XPath expression */ -class EvaluationContext -{ -public: - EvaluationContext() - : mxContextNode(), - mxModel(), - mxNamespaces(), - mnContextPosition( 0 ), - mnContextSize( 0 ) - { } - - EvaluationContext( - const com::sun::star::uno::Reference<com::sun::star::xml::dom::XNode>& xContextNode, - const com::sun::star::uno::Reference<com::sun::star::xforms::XModel>& xModel, - const com::sun::star::uno::Reference<com::sun::star::container::XNameContainer>& xNamespaces, - sal_Int32 nPosition, - sal_Int32 nSize ) - : mxContextNode( xContextNode ), - mxModel( xModel ), - mxNamespaces( xNamespaces ), - mnContextPosition( nPosition ), - mnContextSize( nSize ) - { } - - com::sun::star::uno::Reference<com::sun::star::xml::dom::XNode> mxContextNode; - com::sun::star::uno::Reference<com::sun::star::xforms::XModel> mxModel; - com::sun::star::uno::Reference<com::sun::star::container::XNameContainer> mxNamespaces; - - sal_Int32 mnContextPosition; - sal_Int32 mnContextSize; -}; - - -} // namespace xforms - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/mip.cxx b/forms/source/xforms/mip.cxx deleted file mode 100644 index 0a645d3b7..000000000 --- a/forms/source/xforms/mip.cxx +++ /dev/null @@ -1,129 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "mip.hxx" - - -namespace xforms -{ - - -MIP::MIP() -{ - resetReadonly(); - resetRequired(); - resetRelevant(); - resetConstraint(); - resetCalculate(); - resetTypeName(); -} - -MIP::~MIP() {} - -void MIP::inherit( const MIP& rMip ) -{ - if( ! mbHasReadonly ) - { - mbHasReadonly = rMip.hasReadonly(); - mbReadonly = rMip.isReadonly(); - } - if( ! mbHasRequired ) - { - mbHasRequired = rMip.hasRequired(); - mbRequired = rMip.isRequired(); - } - if( ! mbHasRelevant ) - { - mbHasRelevant = rMip.hasRelevant(); - mbRelevant = rMip.isRelevant(); - } - if( ! mbHasConstraint ) - { - mbHasConstraint = rMip.hasConstraint(); - mbConstraint = rMip.isConstraint(); - msConstraintExplanation = rMip.getConstraintExplanation(); - } - if( ! mbHasCalculate ) - { - mbHasCalculate = rMip.hasCalculate(); - } - if( ! mbHasTypeName ) - { - mbHasTypeName = rMip.hasTypeName(); - msTypeName = rMip.getTypeName(); - } -} - -void MIP::join( const MIP& rMip ) -{ - // TODO: inherit only inheritable MIPs... - inherit( rMip ); -} - -bool MIP::hasReadonly() const { return mbHasReadonly; } -bool MIP::isReadonly() const { return mbHasReadonly ? mbReadonly : mbHasCalculate; } -void MIP::setReadonly( bool b ) { mbHasReadonly = true; mbReadonly = b; } -void MIP::resetReadonly() { mbHasReadonly = false; mbReadonly = false; } - -bool MIP::hasRequired() const { return mbHasRequired; } -bool MIP::isRequired() const { return mbRequired; } -void MIP::setRequired( bool b ) { mbHasRequired = true; mbRequired = b; } -void MIP::resetRequired() { mbHasRequired = false; mbRequired = false; } - -bool MIP::hasRelevant() const { return mbHasRelevant; } -bool MIP::isRelevant() const { return mbRelevant; } -void MIP::setRelevant( bool b ) { mbHasRelevant = true; mbRelevant = b; } -void MIP::resetRelevant() { mbHasRelevant = false; mbRelevant = true; } - -bool MIP::hasConstraint() const { return mbHasConstraint; } -bool MIP::isConstraint() const { return mbConstraint; } -void MIP::setConstraint( bool b ) { mbHasConstraint = true; mbConstraint = b; msConstraintExplanation = rtl::OUString(); } -void MIP::resetConstraint() { mbHasConstraint = false; mbConstraint = true; msConstraintExplanation = rtl::OUString(); } - -void MIP::setConstraintExplanation( const rtl::OUString& s ) { msConstraintExplanation = s; } -rtl::OUString MIP::getConstraintExplanation() const { return msConstraintExplanation; } - - -bool MIP::hasCalculate() const { return mbHasCalculate; } -void MIP::setHasCalculate( bool b ) { mbHasCalculate = b; } -void MIP::resetCalculate() { mbHasCalculate = false; } - -bool MIP::hasTypeName() const { return mbHasTypeName; } - rtl::OUString MIP::getTypeName() const { return msTypeName; } -void MIP::setTypeName( const rtl::OUString& s ) { msTypeName = s; mbHasTypeName = true; } -void MIP::resetTypeName() { msTypeName = rtl::OUString(); mbHasTypeName = false; } - - - - -} // namespace xforms - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/mip.hxx b/forms/source/xforms/mip.hxx deleted file mode 100644 index 3ce4d1c50..000000000 --- a/forms/source/xforms/mip.hxx +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _MIP_HXX -#define _MIP_HXX - -#include <rtl/ustring.hxx> - -namespace xforms -{ - -/** represents the XForms *m*odel *i*tem *p*roperties (MIPs) for a - * given XNode in the instance data at a given point in time. The - * values will not be updated; for updated values new MIP objects have - * to be created/queried. */ -class MIP -{ - bool mbHasReadonly; - bool mbReadonly; - - bool mbHasRequired; - bool mbRequired; - - bool mbHasRelevant; - bool mbRelevant; - - bool mbHasConstraint; - bool mbConstraint; - - bool mbHasCalculate; - - bool mbHasTypeName; - rtl::OUString msTypeName; - - rtl::OUString msConstraintExplanation; - -public: - MIP(); - ~MIP(); - - /// inherit from upper-level MIPs - void inherit( const MIP& ); - - /// join with same-level MIPs - void join( const MIP& ); - - - // - type (static; default: xsd:string) - // (currently default implemented as empty string) - bool hasTypeName() const; - rtl::OUString getTypeName() const; - void setTypeName( const rtl::OUString& ); - void resetTypeName(); - - // - readonly (computed XPath; default: false; true if calculate exists) - bool hasReadonly() const; - bool isReadonly() const; - void setReadonly( bool ); - void resetReadonly(); - - // - required (computed XPath; default: false) - bool hasRequired() const; - bool isRequired() const; - void setRequired( bool ); - void resetRequired(); - - // - relevant (computed XPath; default: true) - bool hasRelevant() const; - bool isRelevant() const; - void setRelevant( bool ); - void resetRelevant(); - - // - constraing (computed XPath; default: true) - bool hasConstraint() const; - bool isConstraint() const; - void setConstraint( bool ); - void resetConstraint(); - - // explain _why_ a constraint failed - void setConstraintExplanation( const rtl::OUString& ); - rtl::OUString getConstraintExplanation() const; - - // - calculate (computed XPath; default: has none (false)) - // (for calculate, we only store whether a calculate MIP is present; - // the actual calculate value is handled my changing the instance - // directly) - bool hasCalculate() const; - void setHasCalculate( bool ); - void resetCalculate(); - - // - minOccurs/maxOccurs (computed XPath; default: 0/inf) - // - p3ptype (static; no default) - -}; - -} // namespace xforms - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/model.cxx b/forms/source/xforms/model.cxx deleted file mode 100644 index dd9eb90a6..000000000 --- a/forms/source/xforms/model.cxx +++ /dev/null @@ -1,722 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "model.hxx" - -#include "model_helper.hxx" -#include "unohelper.hxx" -#include "binding.hxx" -#include "submission.hxx" -#include "mip.hxx" -#include "evaluationcontext.hxx" -#include "xmlhelper.hxx" -#include "datatyperepository.hxx" -#include "NameContainer.hxx" - -#include <rtl/ustring.hxx> -#include <rtl/ustrbuf.hxx> -#include <tools/debug.hxx> - -#include <comphelper/propertysetinfo.hxx> -#include <cppuhelper/typeprovider.hxx> - -#include <algorithm> - -// UNO classes -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/lang/IndexOutOfBoundsException.hpp> -#include <com/sun/star/lang/IllegalArgumentException.hpp> -#include <com/sun/star/xml/dom/XDocument.hpp> -#include <com/sun/star/xml/dom/XCharacterData.hpp> -#include <com/sun/star/xml/dom/NodeType.hpp> -#include <com/sun/star/xml/dom/XDocumentBuilder.hpp> -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/beans/PropertyValue.hpp> -#include <com/sun/star/ucb/XSimpleFileAccess.hpp> -#include <com/sun/star/io/XInputStream.hpp> - - -using com::sun::star::lang::XMultiServiceFactory; -using com::sun::star::lang::XUnoTunnel; -using com::sun::star::beans::XPropertySet; -using com::sun::star::beans::PropertyValue; -using rtl::OUString; -using rtl::OUStringBuffer; -using com::sun::star::beans::PropertyVetoException; -using com::sun::star::beans::UnknownPropertyException; -using com::sun::star::util::VetoException; -using com::sun::star::lang::WrappedTargetException; -using com::sun::star::lang::IllegalArgumentException; -using com::sun::star::ucb::XSimpleFileAccess; -using com::sun::star::io::XInputStream; - -using namespace com::sun::star::uno; -using namespace com::sun::star::xml::dom; -using namespace xforms; - - -#if OSL_DEBUG_LEVEL > 1 -#define DBG_INVARIANT_TYPE(TYPE) class DBG_##TYPE { const TYPE* mpT; void check() { mpT->dbg_assertInvariant(); } public: DBG_##TYPE(const TYPE* pT) : mpT(pT) { check(); } ~DBG_##TYPE() { check(); } } _DBG_##TYPE(this); - -#define DBG_INVARIANT() DBG_INVARIANT_TYPE(Model) -#else -#define DBG_INVARIANT_TYPE(TYPE) -#define DBG_INVARIANT() -#endif - - - -// -// The Model -// - -void Model::ensureAtLeastOneInstance() -{ - if( ! mpInstances->hasItems() ) - { - // create a default instance - newInstance( OUString(), OUString(), true ); - } -} - - - -/** Model default constructor; create empty model */ -Model::Model() : - msID(), - mpBindings( NULL ), - mpSubmissions( NULL ), - mpInstances( new InstanceCollection ), - mxNamespaces( new NameContainer<OUString>() ), - mxBindings( mpBindings ), - mxSubmissions( mpSubmissions ), - mxInstances( mpInstances ), - mbInitialized( false ), - mbExternalData( true ) -{ - initializePropertySet(); - - // initialize bindings collections - // (not in initializer list to avoid use of incomplete 'this') - mpBindings = new BindingCollection( this ); - mxBindings = mpBindings; - - mpSubmissions = new SubmissionCollection( this ); - mxSubmissions = mpSubmissions; - - // invariant only holds after construction - DBG_INVARIANT(); -} - -Model::~Model() throw() -{ - // give up bindings & submissions; the mxBindings/mxSubmissions - // references will then delete them - mpBindings = NULL; - mpSubmissions = NULL; -} - -Model* lcl_getModel( const Reference<XUnoTunnel>& xTunnel ) -{ - Model* pModel = NULL; - if( xTunnel.is() ) - pModel = reinterpret_cast<Model*>( - xTunnel->getSomething( Model::getUnoTunnelID() ) ); - return pModel; -} - -Model* Model::getModel( const Reference<XModel>& xModel ) -{ - return lcl_getModel( Reference<XUnoTunnel>( xModel, UNO_QUERY ) ); -} - -EvaluationContext Model::getEvaluationContext() -{ - // the default context is the top-level element node. A default - // node (instanceData' is inserted when there is no default node - Reference<XDocument> xInstance = getDefaultInstance(); - Reference<XNode> xElement( xInstance->getDocumentElement(), UNO_QUERY ); - - // no element found? Then insert default element 'instanceData' - if( ! xElement.is() ) - { - xElement = Reference<XNode>( - xInstance->createElement( OUSTRING("instanceData") ), - UNO_QUERY_THROW ); - Reference<XNode>( xInstance, UNO_QUERY_THROW)->appendChild( xElement ); - } - - OSL_ENSURE( xElement.is() && - xElement->getNodeType() == NodeType_ELEMENT_NODE, - "no element in evaluation context" ); - - return EvaluationContext( xElement, this, mxNamespaces, 0, 1 ); -} - - -Model::IntSequence_t Model::getUnoTunnelID() -{ - static cppu::OImplementationId aImplementationId; - return aImplementationId.getImplementationId(); -} - -Model::XDocument_t Model::getForeignSchema() const -{ - return mxForeignSchema; -} - -void Model::setForeignSchema( const XDocument_t& rDocument ) -{ - mxForeignSchema = rDocument; -} - -rtl::OUString Model::getSchemaRef() const -{ - return msSchemaRef; -} - -void Model::setSchemaRef( const rtl::OUString& rSchemaRef ) -{ - msSchemaRef = rSchemaRef; -} - -Model::XNameContainer_t Model::getNamespaces() const -{ - return mxNamespaces; -} - -void Model::setNamespaces( const XNameContainer_t& rNamespaces ) -{ - if( rNamespaces.is() ) - mxNamespaces = rNamespaces; -} - -bool Model::getExternalData() const -{ - return mbExternalData; -} - -void Model::setExternalData( bool _bData ) -{ - mbExternalData = _bData; -} - -#if OSL_DEBUG_LEVEL > 1 -void Model::dbg_assertInvariant() const -{ - OSL_ENSURE( mpInstances != NULL, "no instances found" ); - OSL_ENSURE( mxInstances.is(), "No instance container!" ); - - OSL_ENSURE( mpBindings != NULL, "no bindings element" ); - OSL_ENSURE( mxBindings.is(), "No Bindings container" ); - - OSL_ENSURE( mpSubmissions != NULL, "no submissions element" ); - OSL_ENSURE( mxSubmissions.is(), "No Submission container" ); -} -#endif - - -// -// MIP managment -// - -void Model::addMIP( void* pTag, const XNode_t& xNode, const MIP& rMIP ) -{ - OSL_ENSURE( pTag != NULL, "empty tag?" ); - OSL_ENSURE( xNode.is(), "no node" ); - - MIPs_t::value_type aValue( xNode, ::std::pair<void*,MIP>( pTag, rMIP ) ); - maMIPs.insert( aValue ); -} - -void Model::removeMIPs( void* pTag ) -{ - OSL_ENSURE( pTag != NULL, "empty tag?" ); - - for( MIPs_t::iterator aIter = maMIPs.begin(); - aIter != maMIPs.end(); ) - { - if( aIter->second.first == pTag ) - { - MIPs_t::iterator next( aIter ); ++next; - maMIPs.erase( aIter ); - aIter = next; - } - else - ++aIter; - } -} - -MIP Model::queryMIP( const XNode_t& xNode ) const -{ - // travel up inheritance chain and inherit MIPs - MIP aRet; - for( XNode_t xCurrent = xNode; - xCurrent.is(); - xCurrent = xCurrent->getParentNode() ) - { - // iterate over all MIPs for this node, and join MIPs - MIP aMIP; - MIPs_t::const_iterator aEnd = maMIPs.upper_bound( xCurrent ); - MIPs_t::const_iterator aIter = maMIPs.lower_bound( xCurrent ); - for( ; aIter != aEnd; ++aIter ) - aMIP.join( aIter->second.second ); - - // inherit from current node (or set if we are at the start node) - if( xCurrent == xNode ) - aRet = aMIP; - else - aRet.inherit( aMIP ); - } - - return aRet; -} - - - -void Model::rebind() -{ - OSL_ENSURE( mpBindings != NULL, "bindings?" ); - - // iterate over all bindings and call update - sal_Int32 nCount = mpBindings->countItems(); - for( sal_Int32 i = 0; i < nCount; i++ ) - { - Binding* pBind = Binding::getBinding( mpBindings->Collection<XPropertySet_t>::getItem( i ) ); - OSL_ENSURE( pBind != NULL, "binding?" ); - pBind->update(); - } -} - - - -void Model::deferNotifications( bool bDefer ) -{ - // iterate over all bindings and defer notifications - sal_Int32 nCount = mpBindings->countItems(); - for( sal_Int32 i = 0; i < nCount; i++ ) - { - Binding* pBind = Binding::getBinding( mpBindings->Collection<XPropertySet_t>::getItem( i ) ); - OSL_ENSURE( pBind != NULL, "binding?" ); - pBind->deferNotifications( bDefer ); - } -} - - -bool Model::setSimpleContent( const XNode_t& xConstNode, - const rtl::OUString& sValue ) -{ - OSL_ENSURE( xConstNode.is(), "need node to set data" ); - - bool bRet = false; - if( xConstNode.is() ) - { - // non-const node reference so we can assign children (if necessary) - XNode_t xNode( xConstNode ); - - switch( xNode->getNodeType() ) - { - case NodeType_ELEMENT_NODE: - { - // find first text node child - Reference<XNode> xChild; - for( xChild = xNode->getFirstChild(); - xChild.is() && xChild->getNodeType() != NodeType_TEXT_NODE; - xChild = xChild->getNextSibling() ) - ; // empty loop; only find first text node child - - // create text node, if none is found - if( ! xChild.is() ) - { - xChild = Reference<XNode>( - xNode->getOwnerDocument()->createTextNode( OUString() ), - UNO_QUERY_THROW ); - xNode->appendChild( xChild ); - } - xNode = xChild; - - OSL_ENSURE( xNode.is() && - xNode->getNodeType() == NodeType_TEXT_NODE, - "text node creation failed?" ); - } - // no break; continue as with text node: - - case NodeType_TEXT_NODE: - case NodeType_ATTRIBUTE_NODE: - { - // set the node value (defer notifications) - if( xNode->getNodeValue() != sValue ) - { - deferNotifications( true ); - xNode->setNodeValue( sValue ); - deferNotifications( false ); - } - bRet = true; - } - break; - - default: - { - OSL_FAIL( "bound to unknown node type?" ); - } - break; - - } - } - return bRet; -} - -void Model::loadInstance( sal_Int32 nInstance ) -{ - Sequence<PropertyValue> aSequence = mpInstances->getItem( nInstance ); - - // find URL from instance - OUString sURL; - bool bOnce = false; - getInstanceData( aSequence, NULL, NULL, &sURL, &bOnce ); - - // if we have a URL, load the document and set it into the instance - if( sURL.getLength() > 0 ) - { - try - { - Reference<XInputStream> xInput = - Reference<XSimpleFileAccess>( - createInstance( - OUSTRING("com.sun.star.ucb.SimpleFileAccess") ), - UNO_QUERY_THROW )->openFileRead( sURL ); - if( xInput.is() ) - { - Reference<XDocument> xInstance = - getDocumentBuilder()->parse( xInput ); - if( xInstance.is() ) - { - OUString sEmpty; - setInstanceData( aSequence, NULL, &xInstance, - bOnce ? &sEmpty : &sURL, NULL); - mpInstances->setItem( nInstance, aSequence ); - } - } - } - catch( const Exception& ) - { - // couldn't load the instance -> ignore! - } - } -} - -void Model::loadInstances() -{ - // iterate over instance array to get PropertyValue-Sequence - const sal_Int32 nInstances = mpInstances->countItems(); - for( sal_Int32 nInstance = 0; nInstance < nInstances; nInstance++ ) - { - loadInstance( nInstance ); - } -} - -bool Model::isInitialized() const -{ - return mbInitialized; -} - -bool Model::isValid() const -{ - bool bValid = true; - sal_Int32 nCount = mpBindings->countItems(); - for( sal_Int32 i = 0; bValid && i < nCount; i++ ) - { - Binding* pBind = Binding::getBinding( mpBindings->Collection<XPropertySet_t>::getItem( i ) ); - OSL_ENSURE( pBind != NULL, "binding?" ); - bValid = pBind->isValid(); - } - return bValid; -} - - - -// -// implement xforms::XModel -// - -rtl::OUString Model::getID() - throw( RuntimeException ) -{ - DBG_INVARIANT(); - return msID; -} - -void Model::setID( const rtl::OUString& sID ) - throw( RuntimeException ) -{ - DBG_INVARIANT(); - msID = sID; -} - -void Model::initialize() - throw( RuntimeException ) -{ - DBG_ASSERT( ! mbInitialized, "model already initialized" ); - - // load instances - loadInstances(); - - // let's pretend we're initialized and rebind all bindings - mbInitialized = true; - rebind(); -} - -void Model::rebuild() - throw( RuntimeException ) -{ - if( ! mbInitialized ) - initialize(); - else - rebind(); -} - -void Model::recalculate() - throw( RuntimeException ) -{ - rebind(); -} - -void Model::revalidate() - throw( RuntimeException ) -{ - // do nothing. We don't validate anyways! -} - -void Model::refresh() - throw( RuntimeException ) -{ - rebind(); -} - - -void SAL_CALL Model::submitWithInteraction( - const rtl::OUString& sID, - const XInteractionHandler_t& _rxHandler ) - throw( VetoException, - WrappedTargetException, - RuntimeException ) -{ - DBG_INVARIANT(); - - if( mpSubmissions->hasItem( sID ) ) - { - Submission* pSubmission = - Submission::getSubmission( mpSubmissions->getItem( sID ) ); - OSL_ENSURE( pSubmission != NULL, "no submission?" ); - OSL_ENSURE( pSubmission->getModel() == Reference<XModel>( this ), - "wrong model" ); - - // submit. All exceptions are allowed to leave. - pSubmission->submitWithInteraction( _rxHandler ); - } -} - -void Model::submit( const rtl::OUString& sID ) - throw( VetoException, WrappedTargetException, RuntimeException ) -{ - submitWithInteraction( sID, NULL ); -} - -Model::XDataTypeRepository_t SAL_CALL Model::getDataTypeRepository( ) - throw( RuntimeException ) -{ - if ( !mxDataTypes.is() ) - mxDataTypes = new ODataTypeRepository; - - return mxDataTypes; -} - -// -// instance management -// - -Model::XSet_t Model::getInstances() - throw( RuntimeException ) -{ - return mxInstances; -} - -Model::XDocument_t Model::getInstanceDocument( const rtl::OUString& rName ) - throw( RuntimeException ) -{ - ensureAtLeastOneInstance(); - Reference<XDocument> aInstance; - sal_Int32 nInstance = lcl_findInstance( mpInstances, rName ); - if( nInstance != -1 ) - getInstanceData( mpInstances->getItem( nInstance ), - NULL, &aInstance, NULL, NULL ); - return aInstance; -} - -Model::XDocument_t SAL_CALL Model::getDefaultInstance() - throw( RuntimeException ) -{ - ensureAtLeastOneInstance(); - DBG_ASSERT( mpInstances->countItems() > 0, "no instance?" ); - Reference<XDocument> aInstance; - getInstanceData( mpInstances->getItem( 0 ), NULL, &aInstance, NULL, NULL ); - return aInstance; -} - - - -// -// bindings management -// - -Model::XPropertySet_t SAL_CALL Model::createBinding() - throw( RuntimeException ) -{ - DBG_INVARIANT(); - return new Binding(); -} - -Model::XPropertySet_t Model::cloneBinding( const XPropertySet_t& xBinding ) - throw( RuntimeException ) -{ - DBG_INVARIANT(); - XPropertySet_t xNewBinding = createBinding(); - copy( xBinding, xNewBinding ); - return xNewBinding; -} - -Model::XPropertySet_t Model::getBinding( const rtl::OUString& sId ) - throw( RuntimeException ) -{ - DBG_INVARIANT(); - return mpBindings->hasItem( sId ) ? mpBindings->getItem( sId ) : NULL; -} - -Model::XSet_t Model::getBindings() - throw( RuntimeException ) -{ - DBG_INVARIANT(); - return mxBindings; -} - - - -// -// submission management -// - -Model::XSubmission_t Model::createSubmission() - throw( RuntimeException ) -{ - DBG_INVARIANT(); - return new Submission(); -} - -Model::XSubmission_t Model::cloneSubmission(const XPropertySet_t& xSubmission) - throw( RuntimeException ) -{ - DBG_INVARIANT(); - XSubmission_t xNewSubmission = createSubmission(); - XPropertySet_t xAsPropertySet( xNewSubmission.get() ); - copy( xSubmission.get(), xAsPropertySet ); - return xNewSubmission; -} - -Model::XSubmission_t Model::getSubmission( const rtl::OUString& sId ) - throw( RuntimeException ) -{ - DBG_INVARIANT(); - XSubmission_t xSubmission; - if ( mpSubmissions->hasItem( sId ) ) - xSubmission = xSubmission.query( mpSubmissions->getItem( sId ) ); - return xSubmission; -} - -Model::XSet_t Model::getSubmissions() - throw( RuntimeException ) -{ - DBG_INVARIANT(); - return mxSubmissions; -} - -// -// implement XPropertySet & friends -// - -#define HANDLE_ID 0 -#define HANDLE_Instance 1 -#define HANDLE_InstanceURL 2 -#define HANDLE_ForeignSchema 3 -#define HANDLE_SchemaRef 4 -#define HANDLE_Namespaces 5 -#define HANDLE_ExternalData 6 - -#define REGISTER_PROPERTY( property, type ) \ - registerProperty( PROPERTY( property, type ), \ - new DirectPropertyAccessor< Model, type >( this, &Model::set##property, &Model::get##property ) ); - -#define REGISTER_PROPERTY_API( property, type ) \ - registerProperty( PROPERTY( property, type ), \ - new APIPropertyAccessor< Model, type >( this, &Model::set##property, &Model::get##property ) ); - -#define REGISTER_BOOL_PROPERTY( property ) \ - registerProperty( PROPERTY( property, sal_Bool ), \ - new BooleanPropertyAccessor< Model, bool >( this, &Model::set##property, &Model::get##property ) ); - -void Model::initializePropertySet() -{ - REGISTER_PROPERTY_API ( ID, OUString ); - REGISTER_PROPERTY ( ForeignSchema, XDocument_t ); - REGISTER_PROPERTY ( SchemaRef, OUString ); - REGISTER_PROPERTY ( Namespaces, XNameContainer_t ); - REGISTER_BOOL_PROPERTY( ExternalData ); -} - -void Model::update() - throw( RuntimeException ) -{ - rebuild(); -} - - -sal_Int64 Model::getSomething( const IntSequence_t& xId ) - throw( RuntimeException ) -{ - return reinterpret_cast<sal_Int64>( ( xId == getUnoTunnelID() ) ? this : NULL ); -} - -Sequence<sal_Int8> Model::getImplementationId() - throw( RuntimeException ) -{ - return getUnoTunnelID(); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/model.hxx b/forms/source/xforms/model.hxx deleted file mode 100644 index e395d7211..000000000 --- a/forms/source/xforms/model.hxx +++ /dev/null @@ -1,434 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _MODEL_HXX -#define _MODEL_HXX - - -// include for parent class(es) -#include <cppuhelper/implbase4.hxx> -#include <propertysetbase.hxx> -#include <com/sun/star/xforms/XModel.hpp> -#include <com/sun/star/xforms/XFormsUIHelper1.hpp> -#include <com/sun/star/util/XUpdatable.hpp> -#include <com/sun/star/lang/XUnoTunnel.hpp> - - -// includes for member variables -#include <com/sun/star/uno/Reference.hxx> -#include <map> - - -// forward declaractions -namespace com { namespace sun { namespace star -{ - namespace xml { namespace dom { class XDocument; } } - namespace xml { namespace dom { class XNode; } } - namespace uno { template<typename T> class Sequence; } - namespace lang { class IndexOutOfBoundsException; } - namespace lang { class IllegalArgumentException; } - namespace beans { class XPropertySet; } - namespace container { class XSet; } - namespace container { class XNameContainer; } - namespace frame { class XModel; } -} } } -namespace rtl { class OUString; } -namespace xforms -{ - class Binding; - class MIP; - class BindingCollection; - class SubmissionCollection; - class InstanceCollection; - class EvaluationContext; -} - - -namespace xforms -{ - -/** An XForms Model. Contains: - * # (set of) instance data (XML DOM tree) - * # (set of) bindings - * # (set of) submissions - * # (NOT YET IMPLEMENTED) actions (set of) - * - * See http://www.w3.org/TR/xforms/ for more information. - */ -typedef cppu::ImplInheritanceHelper4< - PropertySetBase, - com::sun::star::xforms::XModel, - com::sun::star::xforms::XFormsUIHelper1, - com::sun::star::util::XUpdatable, - com::sun::star::lang::XUnoTunnel -> Model_t; -class Model : public Model_t -{ - // a number of local typedefs, to make the remaining header readable - typedef com::sun::star::uno::Reference<com::sun::star::xml::dom::XDocument> XDocument_t; - typedef com::sun::star::uno::Reference<com::sun::star::xml::dom::XNode> XNode_t; - typedef com::sun::star::lang::IndexOutOfBoundsException IndexOutOfBoundsException_t; - typedef com::sun::star::lang::IllegalArgumentException IllegalArgumentException_t; - typedef com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> XPropertySet_t; - typedef com::sun::star::uno::Reference<com::sun::star::xforms::XDataTypeRepository> XDataTypeRepository_t; - typedef com::sun::star::uno::Reference<com::sun::star::container::XNameContainer> XNameContainer_t; - typedef com::sun::star::uno::Reference<com::sun::star::xforms::XSubmission> XSubmission_t; - typedef com::sun::star::uno::Reference<com::sun::star::frame::XModel> Frame_XModel_t; - typedef com::sun::star::uno::Reference<com::sun::star::xforms::XModel> XModel_t; - typedef com::sun::star::uno::Reference<com::sun::star::task::XInteractionHandler> XInteractionHandler_t; - - typedef com::sun::star::uno::Reference<com::sun::star::container::XSet> XSet_t; - typedef com::sun::star::beans::PropertyVetoException PropertyVetoException_t; - typedef com::sun::star::beans::UnknownPropertyException UnknownPropertyException_t; - typedef com::sun::star::util::VetoException VetoException_t; - typedef com::sun::star::lang::WrappedTargetException WrappedTargetException_t; - typedef com::sun::star::uno::RuntimeException RuntimeException_t; - typedef com::sun::star::uno::Any Any_t; - typedef com::sun::star::uno::Sequence<sal_Int8> IntSequence_t; - typedef std::multimap<XNode_t,std::pair<void*,MIP> > MIPs_t; - - -private: - - rtl::OUString msID; /// the model ID - BindingCollection* mpBindings; /// the bindings - SubmissionCollection* mpSubmissions; /// the submissions - InstanceCollection* mpInstances; /// the instance(s) - - XDataTypeRepository_t mxDataTypes; /// the XSD data-types used - XDocument_t mxForeignSchema; /// the XSD-schema part we cannot - /// map onto data types - rtl::OUString msSchemaRef; /// xforms:model/@schema attribute - - XNameContainer_t mxNamespaces; /// namespaces for entire model - - - // references to mpBindings/mpSubmissions, for UNO reference counting - XSet_t mxBindings; - XSet_t mxSubmissions; - XSet_t mxInstances; - - MIPs_t maMIPs; /// map nodes to their MIPs - - bool mbInitialized; /// has model been initialized ? - bool mbExternalData; /// is the data of this model to be considered an ingegral part of the document? - - void initializePropertySet(); - - void ensureAtLeastOneInstance(); - - -public: - - /// create a new model with an empty, default instance - Model(); - virtual ~Model() throw(); - - // get Model implementation from API object - static Model* getModel( const com::sun::star::uno::Reference<com::sun::star::xforms::XModel>& ); - - xforms::EvaluationContext getEvaluationContext(); - - - static IntSequence_t getUnoTunnelID(); - - - // get/set that part of the schema, that we can't interpret as data types - XDocument_t getForeignSchema() const; - void setForeignSchema( const XDocument_t& ); - - // get/set the xforms:model/@schema attribute - rtl::OUString getSchemaRef() const; - void setSchemaRef( const rtl::OUString& ); - - // get/set namespaces for entire model - XNameContainer_t getNamespaces() const; - void setNamespaces( const XNameContainer_t& ); - - // get/set the ExternalData property - bool getExternalData() const; - void setExternalData( bool _bData ); - - -#if OSL_DEBUG_LEVEL > 1 - void dbg_assertInvariant() const; -#endif - - - // - // MIP (model item property) management - // - - // register MIPs which apply to a given node; only to be called by bindings - // (The pTag parameter serves only to be able to remove the MIPs - // that were added using the same tag. No functions will be - // performed on it; hence the void* type.) - void addMIP( void* pTag, const XNode_t&, const MIP& ); - void removeMIPs( void* pTag ); - - /// query which MIPs appy to the given node - MIP queryMIP( const XNode_t& xNode ) const; - - /// re-bind all bindings - void rebind(); - - /// call defer notifications on all bindings - void deferNotifications( bool ); - - /// set a data value in the instance - /// (also defers notifications) - bool setSimpleContent( const XNode_t&, const rtl::OUString& ); - - /// load instance data - void loadInstance( sal_Int32 nInstance ); - void loadInstances(); - - /// has model been initialized? - bool isInitialized() const; - - /// is model currently valid (for submission)? - bool isValid() const; - - - - // - // XModel - // implement the xforms::XModel implementation - // - - - virtual rtl::OUString SAL_CALL getID() - throw( RuntimeException_t ); - - virtual void SAL_CALL setID( const rtl::OUString& sID ) - throw( RuntimeException_t ); - - virtual void SAL_CALL initialize() - throw( RuntimeException_t ); - - virtual void SAL_CALL rebuild() - throw( RuntimeException_t ); - - virtual void SAL_CALL recalculate() - throw( RuntimeException_t ); - - virtual void SAL_CALL revalidate() - throw( RuntimeException_t ); - - virtual void SAL_CALL refresh() - throw( RuntimeException_t ); - - virtual void SAL_CALL submit( const rtl::OUString& sID ) - throw( VetoException_t, WrappedTargetException_t, RuntimeException_t ); - - virtual void SAL_CALL submitWithInteraction( const ::rtl::OUString& id, const XInteractionHandler_t& _rxHandler ) - throw( VetoException_t, WrappedTargetException_t, RuntimeException_t ); - - virtual XDataTypeRepository_t SAL_CALL getDataTypeRepository( ) - throw( RuntimeException_t ); - - - // XModel: instance management - - virtual XSet_t SAL_CALL getInstances() - throw( RuntimeException_t ); - - virtual XDocument_t SAL_CALL getInstanceDocument( const rtl::OUString& ) - throw( RuntimeException_t ); - - virtual XDocument_t SAL_CALL getDefaultInstance() - throw( RuntimeException_t ); - - - - // XModel: binding management - - virtual XPropertySet_t SAL_CALL createBinding() - throw( RuntimeException_t ); - - virtual XPropertySet_t SAL_CALL cloneBinding( const XPropertySet_t& ) - throw( RuntimeException_t ); - - virtual XPropertySet_t SAL_CALL getBinding( const rtl::OUString& ) - throw( RuntimeException_t ); - - virtual XSet_t SAL_CALL getBindings() - throw( RuntimeException_t ); - - - // XModel: submission management - - virtual XSubmission_t SAL_CALL createSubmission() - throw( RuntimeException_t ); - - virtual XSubmission_t SAL_CALL cloneSubmission( const XPropertySet_t& ) - throw( RuntimeException_t ); - - virtual XSubmission_t SAL_CALL getSubmission( const rtl::OUString& ) - throw( RuntimeException_t ); - - virtual XSet_t SAL_CALL getSubmissions() - throw( RuntimeException_t ); - - - - // - // XFormsUIHelper1 & friends: - // (implementation in model_ui.cxx) - // - - /// determine a reasonable control service for a given node - /// (based on data type MIP assigned to the node) - virtual rtl::OUString SAL_CALL getDefaultServiceNameForNode( const XNode_t& xNode ) throw (RuntimeException_t); - - /// call getDefaultBindingExpressionForNode with default evaluation context - virtual rtl::OUString SAL_CALL getDefaultBindingExpressionForNode( const XNode_t& xNode ) throw (RuntimeException_t); - - /// determine a reasonable default binding expression for a given node - /// and a given evaluation context - /// @returns expression, or empty string if no expression could be derived - rtl::OUString getDefaultBindingExpressionForNode( - const XNode_t&, - const EvaluationContext& ); - - virtual rtl::OUString SAL_CALL getNodeDisplayName( const XNode_t&, - sal_Bool bDetail ) - throw( RuntimeException_t ); - - virtual rtl::OUString SAL_CALL getNodeName( const XNode_t& ) - throw( RuntimeException_t ); - - virtual rtl::OUString SAL_CALL getBindingName( const XPropertySet_t&, - sal_Bool bDetail ) - throw( RuntimeException_t ); - - virtual rtl::OUString SAL_CALL getSubmissionName( const XPropertySet_t&, - sal_Bool bDetail ) - throw( RuntimeException_t ); - - virtual XPropertySet_t SAL_CALL cloneBindingAsGhost( const XPropertySet_t& ) - throw( RuntimeException_t ); - - virtual void SAL_CALL removeBindingIfUseless( const XPropertySet_t& ) - throw( RuntimeException_t ); - - virtual XDocument_t SAL_CALL newInstance( const rtl::OUString& sName, - const rtl::OUString& sURL, - sal_Bool bURLOnce ) - throw( RuntimeException_t ); - - virtual void SAL_CALL renameInstance( const rtl::OUString& sFrom, - const rtl::OUString& sTo, - const rtl::OUString& sURL, - sal_Bool bURLOnce ) - throw( RuntimeException_t ); - - virtual void SAL_CALL removeInstance( const rtl::OUString& sName ) - throw( RuntimeException_t ); - - - virtual XModel_t SAL_CALL newModel( const Frame_XModel_t& xComponent, - const rtl::OUString& sName ) - throw( RuntimeException_t ); - virtual void SAL_CALL renameModel( const Frame_XModel_t& xComponent, - const rtl::OUString& sFrom, - const rtl::OUString& sTo ) - throw( RuntimeException_t ); - - virtual void SAL_CALL removeModel( const Frame_XModel_t& xComponent, - const rtl::OUString& sName ) - throw( RuntimeException_t ); - - - virtual XNode_t SAL_CALL createElement( const XNode_t& xParent, - const rtl::OUString& sName ) - throw( RuntimeException_t ); - - virtual XNode_t SAL_CALL createAttribute( const XNode_t& xParent, - const rtl::OUString& sName ) - throw( RuntimeException_t ); - - virtual XNode_t SAL_CALL renameNode( const XNode_t& xNode, - const rtl::OUString& sName ) - throw( RuntimeException_t ); - - virtual XPropertySet_t SAL_CALL getBindingForNode( const XNode_t&, - sal_Bool bCreate ) - throw( RuntimeException_t ); - - virtual void SAL_CALL removeBindingForNode( const XNode_t& ) - throw( RuntimeException_t ); - - virtual rtl::OUString SAL_CALL getResultForExpression( - const XPropertySet_t& xBinding, - sal_Bool bIsBindingExpression, - const rtl::OUString& sExpression ) - throw( RuntimeException_t ); - - virtual sal_Bool SAL_CALL isValidXMLName( const rtl::OUString& sName ) - throw( RuntimeException_t ); - - virtual sal_Bool SAL_CALL isValidPrefixName( const rtl::OUString& sName ) - throw( RuntimeException_t ); - - virtual void SAL_CALL setNodeValue( - const XNode_t& xNode, - const rtl::OUString& sValue ) - throw( RuntimeException_t ); - - - // - // XUpdatable - // - -public: - virtual void SAL_CALL update() - throw( RuntimeException_t ); - - // - // XUnoTunnel - // - -public: - virtual sal_Int64 SAL_CALL getSomething( const IntSequence_t& ) - throw( RuntimeException_t ); - - // - // XTypeProvider::getImplementationId - // - -public: - virtual IntSequence_t SAL_CALL getImplementationId() - throw( RuntimeException_t ); - -}; - -} // namespace -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/model_helper.hxx b/forms/source/xforms/model_helper.hxx deleted file mode 100644 index d010296c4..000000000 --- a/forms/source/xforms/model_helper.hxx +++ /dev/null @@ -1,170 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef _MODEL_HELPER_HXX -#define _MODEL_HELPER_HXX - -// -// some helper definitions that must be available for model.cxx and -// model_ui.cxx -// - -#include "namedcollection.hxx" -#include "binding.hxx" -#include "submission.hxx" -#include "unohelper.hxx" - -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/lang/XUnoTunnel.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/beans/PropertyValue.hpp> - -namespace xforms -{ - class Model; -} - -// -// BindingCollection -// - -namespace xforms -{ - -class BindingCollection : public NamedCollection<com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> > -{ - Model* mpModel; - -public: - BindingCollection( Model* pModel ) : mpModel( pModel ) {} - virtual ~BindingCollection() {} - - virtual bool isValid( const T& t ) const - { - return Binding::getBinding( t ) != NULL; - } - -protected: - virtual void _insert( const T& t ) - { - OSL_ENSURE( Binding::getBinding( t ) != NULL, "invalid item?" ); - Binding::getBinding( t )->_setModel( Binding::Model_t( mpModel ) ); - } - - virtual void _remove( const T& t ) - { - OSL_ENSURE( Binding::getBinding( t ) != NULL, "invalid item?" ); - Binding::getBinding( t )->_setModel( Binding::Model_t() ); - } -}; - - - -// -// SubmissionCollection -// - -class SubmissionCollection : public NamedCollection<com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> > -{ - Model* mpModel; - -public: - SubmissionCollection( Model* pModel ) : mpModel( pModel ) {} - virtual ~SubmissionCollection() {} - -public: - virtual bool isValid( const T& t ) const - { - return Submission::getSubmission( t ) != NULL; - } - -protected: - virtual void _insert( const T& t ) - { - OSL_ENSURE( Submission::getSubmission( t ) != NULL, "invalid item?" ); - Submission::getSubmission( t )->setModel( com::sun::star::uno::Reference<com::sun::star::xforms::XModel>( mpModel ) ); - } - - virtual void _remove( const T& t ) - { - OSL_ENSURE( Submission::getSubmission( t ) != NULL, "invalid item?" ); - Submission::getSubmission( t )->setModel( com::sun::star::uno::Reference<com::sun::star::xforms::XModel>( ) ); - } -}; - - -// -// InstanceCollection -// - -class InstanceCollection : public Collection<com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> > -{ -public: - virtual bool isValid( const T& t ) const - { - const com::sun::star::beans::PropertyValue* pValues = t.getConstArray(); - rtl::OUString sInstance( OUSTRING("Instance") ); - sal_Bool bFound = sal_False; - for( sal_Int32 i = 0; ( ! bFound ) && ( i < t.getLength() ); i++ ) - { - bFound |= ( pValues[i].Name == sInstance ); - } - return bFound ? true : false; - } -}; - - -// -// helper functions -// - -sal_Int32 lcl_findInstance( const InstanceCollection*, - const rtl::OUString& ); - - -// get values from Sequence<PropertyValue> describing an Instance -void getInstanceData( - const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&, - rtl::OUString* pID, - com::sun::star::uno::Reference<com::sun::star::xml::dom::XDocument>*, - rtl::OUString* pURL, - bool* pURLOnce ); - -// set values on Sequence<PropertyValue> for an Instance -void setInstanceData( - com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&, - const rtl::OUString* pID, - const com::sun::star::uno::Reference<com::sun::star::xml::dom::XDocument>*, - const rtl::OUString* pURL, - const bool* pURLOnce ); - -} // namespace xforms - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/model_ui.cxx b/forms/source/xforms/model_ui.cxx deleted file mode 100644 index 198b60601..000000000 --- a/forms/source/xforms/model_ui.cxx +++ /dev/null @@ -1,1069 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "model.hxx" -#include "model_helper.hxx" -#include "mip.hxx" -#include "evaluationcontext.hxx" -#include "unohelper.hxx" -#include "submission/serialization_app_xml.hxx" -#include "resourcehelper.hxx" -#include "xmlhelper.hxx" -#include "convert.hxx" - -#include <rtl/ustring.hxx> -#include <rtl/ustrbuf.hxx> -#include <tools/debug.hxx> - -// UNO classes -#include <com/sun/star/xml/dom/XNode.hpp> -#include <com/sun/star/xml/dom/XDocumentBuilder.hpp> -#include <com/sun/star/xml/dom/XDocumentFragment.hpp> -#include <com/sun/star/xml/dom/XNamedNodeMap.hpp> -#include <com/sun/star/xml/xpath/XXPathObject.hpp> -#include <com/sun/star/xml/xpath/XPathObjectType.hpp> -#include <com/sun/star/beans/PropertyValue.hpp> -#include <com/sun/star/io/XInputStream.hpp> -#include <com/sun/star/io/XActiveDataSink.hpp> -#include <com/sun/star/io/XTextInputStream.hpp> -#include <com/sun/star/container/XEnumeration.hpp> -#include <com/sun/star/container/XNameContainer.hpp> -#include <com/sun/star/frame/XModel.hpp> -#include <com/sun/star/xforms/XFormsSupplier.hpp> -#include <com/sun/star/xforms/XDataTypeRepository.hpp> -#include <com/sun/star/xsd/XDataType.hpp> -#include <com/sun/star/xsd/DataTypeClass.hpp> - - -using rtl::OUString; -using rtl::OUStringBuffer; -using com::sun::star::beans::PropertyValue; -using com::sun::star::io::XInputStream; -using com::sun::star::io::XActiveDataSink; -using com::sun::star::io::XTextInputStream; -using com::sun::star::container::XEnumeration; -using com::sun::star::container::XNameContainer; -using com::sun::star::xforms::XFormsSupplier; - -using namespace xforms; -using namespace com::sun::star::uno; -using namespace com::sun::star::xml::dom; -using namespace com::sun::star::xml::xpath; - - - -// -// implement XFormsUIHelper1 -// - -OUString Model::getDefaultServiceNameForNode( const XNode_t& xNode ) - throw( RuntimeException ) -{ - // determine service for control. string/text field is default. - OUString sService = OUSTRING("com.sun.star.form.component.TextField"); - - // query repository for suitable type - OSL_ENSURE( mxDataTypes.is(), "no type repository?" ); - OUString sTypeName = queryMIP( xNode ).getTypeName(); - if( mxDataTypes->hasByName( sTypeName ) ) - { - OSL_ENSURE( mxDataTypes->getDataType( sTypeName ).is(), - "has or has not?" ); - - switch( mxDataTypes->getDataType( sTypeName )->getTypeClass() ) - { - case com::sun::star::xsd::DataTypeClass::BOOLEAN: - sService = OUSTRING("com.sun.star.form.component.CheckBox"); - break; - case com::sun::star::xsd::DataTypeClass::DOUBLE: - case com::sun::star::xsd::DataTypeClass::DECIMAL: - case com::sun::star::xsd::DataTypeClass::FLOAT: - sService = OUSTRING("com.sun.star.form.component.NumericField"); - break; - - case com::sun::star::xsd::DataTypeClass::STRING: - case com::sun::star::xsd::DataTypeClass::DURATION: - case com::sun::star::xsd::DataTypeClass::DATETIME: - case com::sun::star::xsd::DataTypeClass::TIME: - case com::sun::star::xsd::DataTypeClass::DATE: - case com::sun::star::xsd::DataTypeClass::gYearMonth: - case com::sun::star::xsd::DataTypeClass::gYear: - case com::sun::star::xsd::DataTypeClass::gMonthDay: - case com::sun::star::xsd::DataTypeClass::gDay: - case com::sun::star::xsd::DataTypeClass::gMonth: - case com::sun::star::xsd::DataTypeClass::hexBinary: - case com::sun::star::xsd::DataTypeClass::base64Binary: - case com::sun::star::xsd::DataTypeClass::anyURI: - case com::sun::star::xsd::DataTypeClass::QName: - case com::sun::star::xsd::DataTypeClass::NOTATION: - default: - // keep default - break; - } - } - - return sService; -} - - -void lcl_OutPosition( OUStringBuffer& rBuffer, - const Reference<XNode>& xNode ) -{ - OSL_ENSURE( xNode->getParentNode().is(), "need parent" ); - - // count # of occurrences of this node - sal_Int32 nFound = 0; - sal_Int32 nPosition = -1; - if( xNode->getParentNode().is() ) - { - for( Reference<XNode> xIter = xNode->getParentNode()->getFirstChild(); - xIter != NULL; - xIter = xIter->getNextSibling() ) - { - if( xIter->getNodeType() == xNode->getNodeType() && - xIter->getNodeName() == xNode->getNodeName() && - xIter->getNamespaceURI() == xNode->getNamespaceURI() ) - { - nFound++; - if( xIter == xNode ) - nPosition = nFound; - } - } - } - OSL_ENSURE( nFound > 0 && nPosition > 0, "node not found???" ); - - // output position (if necessary) - if( nFound > 1 ) - { - rBuffer.insert( 0, sal_Unicode(']') ); - rBuffer.insert( 0, nPosition ); - rBuffer.insert( 0, sal_Unicode('[') ); - } -} - -void lcl_OutName( OUStringBuffer& rBuffer, - const Reference<XNode>& xNode ) -{ - rBuffer.insert( 0, xNode->getNodeName() ); - OUString sPrefix = xNode->getPrefix(); - if( sPrefix.getLength() > 0 ) - { - rBuffer.insert( 0, sal_Unicode(':') ); - rBuffer.insert( 0, sPrefix ); - } -} - -void lcl_OutInstance( OUStringBuffer& rBuffer, - const Reference<XNode>& xNode, - Model* pModel ) -{ - Reference<XDocument> xDoc = xNode->getOwnerDocument(); - - if( xDoc != pModel->getDefaultInstance() ) - { - rBuffer.insert( 0, OUSTRING("')") ); - - // iterate over instances, and find the right one - OUString sInstanceName; - Reference<XEnumeration> xEnum = - pModel->getInstances()->createEnumeration(); - while( ( sInstanceName.getLength() == 0 ) && xEnum->hasMoreElements() ) - { - Sequence<PropertyValue> aValues; - xEnum->nextElement() >>= aValues; - - // get ID and instance - OUString sId; - Reference<XDocument> xInstance; - getInstanceData( aValues, &sId, &xInstance, NULL, NULL ); - - // now check whether this was our instance: - if( xInstance == xDoc ) - sInstanceName = sId; - } - - rBuffer.insert( 0, sInstanceName ); - rBuffer.insert( 0, OUSTRING("instance('") ); - } -} - -OUString Model::getDefaultBindingExpressionForNode( - const XNode_t& xNode, - const EvaluationContext& rContext) -{ - OSL_ENSURE( xNode.is(), "need node" ); - - // iterate upwards and put sections into the expression buffer. - // Stop iteration either at context node (relative expression) or - // at document root, whichever occurs first. - OUStringBuffer aBuffer; - for( Reference<XNode> xCurrent = xNode; - xCurrent.is() && xCurrent != rContext.mxContextNode; - xCurrent = xCurrent->getParentNode() ) - { - // insert a '/' for every step except the first - if( aBuffer.getLength() > 0 ) - aBuffer.insert( 0, sal_Unicode('/') ); - - switch( xCurrent->getNodeType() ) - { - case NodeType_ELEMENT_NODE: - lcl_OutPosition( aBuffer, xCurrent ); - lcl_OutName( aBuffer, xCurrent ); - break; - - case NodeType_TEXT_NODE: - lcl_OutPosition( aBuffer, xCurrent ); - aBuffer.insert( 0, OUSTRING("text()") ); - break; - - case NodeType_ATTRIBUTE_NODE: - lcl_OutName( aBuffer, xCurrent ); - aBuffer.insert( 0, sal_Unicode('@') ); - break; - - case NodeType_DOCUMENT_NODE: - // check for which instance we have - lcl_OutInstance( aBuffer, xCurrent, this ); - break; - - default: - // unknown type? fail! - OSL_FAIL( "unknown node type!" ); - xCurrent.set( NULL ); - aBuffer.makeStringAndClear(); - // we'll remove the slash below - aBuffer.insert( 0, sal_Unicode('/') ); - break; - } - } - - return aBuffer.makeStringAndClear(); -} - - - -OUString Model::getDefaultBindingExpressionForNode( const XNode_t& xNode ) - throw( RuntimeException ) -{ - return getDefaultBindingExpressionForNode( xNode, getEvaluationContext() ); -} - -bool lcl_isWhitespace( const OUString& rString ) -{ - sal_Int32 nLength = rString.getLength(); - const sal_Unicode* pStr = rString.getStr(); - - bool bWhitespace = true; - for( sal_Int32 i = 0; bWhitespace && ( i < nLength ); i++ ) - { - sal_Unicode c = pStr[i]; - bWhitespace = ( c == sal_Unicode(0x09) || - c == sal_Unicode(0x0A) || - c == sal_Unicode(0x0D) || - c == sal_Unicode(0x20) ); - } - return bWhitespace; -} - -OUString Model::getNodeDisplayName( const XNode_t& xNode, - sal_Bool bDetail ) - throw( RuntimeException ) -{ - OUStringBuffer aBuffer; - - switch( xNode->getNodeType() ) - { - case NodeType_ELEMENT_NODE: - lcl_OutName( aBuffer, xNode ); - break; - - case NodeType_TEXT_NODE: - { - OUString sContent = xNode->getNodeValue(); - if( bDetail || ! lcl_isWhitespace( sContent ) ) - { - aBuffer.append( sal_Unicode('"') ); - aBuffer.append( Convert::collapseWhitespace( sContent ) ); - aBuffer.append( sal_Unicode('"') ); - } - } - break; - - case NodeType_ATTRIBUTE_NODE: - lcl_OutName( aBuffer, xNode ); - aBuffer.insert( 0, sal_Unicode('@') ); - break; - - case NodeType_DOCUMENT_NODE: - if( xNode == getDefaultInstance() ) - aBuffer.append( sal_Unicode('/') ); - else - lcl_OutInstance( aBuffer, xNode, this ); - break; - - default: - // unknown type? fail! - OSL_FAIL( "unknown node type!" ); - break; - } - - return aBuffer.makeStringAndClear(); -} - -OUString Model::getNodeName( const XNode_t& xNode ) - throw( RuntimeException ) -{ - OUStringBuffer aBuffer; - - switch( xNode->getNodeType() ) - { - case NodeType_ELEMENT_NODE: - case NodeType_ATTRIBUTE_NODE: - lcl_OutName( aBuffer, xNode ); - break; - - case NodeType_TEXT_NODE: - case NodeType_DOCUMENT_NODE: - default: - // unknown type? fail! - OSL_FAIL( "no name for this node type!" ); - break; - } - - return aBuffer.makeStringAndClear(); -} - -OUString Model::getBindingName( const XPropertySet_t& xBinding, - sal_Bool /*bDetail*/ ) - throw( RuntimeException ) -{ - OUString sID; - xBinding->getPropertyValue( OUSTRING("BindingID" ) ) >>= sID; - OUString sExpression; - xBinding->getPropertyValue( OUSTRING("BindingExpression" ) ) >>= sExpression; - - OUStringBuffer aBuffer; - if( sID.getLength() > 0 ) - { - aBuffer.append( sID ); - aBuffer.append( OUSTRING(" (" )); - aBuffer.append( sExpression ); - aBuffer.append( OUSTRING(")" )); - } - else - aBuffer.append( sExpression ); - - return aBuffer.makeStringAndClear(); -} - -OUString Model::getSubmissionName( const XPropertySet_t& xSubmission, - sal_Bool /*bDetail*/ ) - throw( RuntimeException ) -{ - OUString sID; - xSubmission->getPropertyValue( OUSTRING("ID") ) >>= sID; - return sID; -} - -Model::XPropertySet_t Model::cloneBindingAsGhost( const XPropertySet_t &xBinding ) - throw( RuntimeException ) -{ - // Create a new binding instance first... - Binding *pBinding = new Binding(); - - // ...and bump up the "defered notification counter" - // to prevent this binding from contributing to the - // MIPs table... - pBinding->deferNotifications(true); - - // Copy the propertyset and return result... - XPropertySet_t xNewBinding(pBinding); - copy( xBinding, xNewBinding ); - return xNewBinding; -} - -void Model::removeBindingIfUseless( const XPropertySet_t& xBinding ) - throw( RuntimeException ) -{ - Binding* pBinding = Binding::getBinding( xBinding ); - if( pBinding != NULL ) - { - if( ! pBinding->isUseful() ) - mpBindings->removeItem( pBinding ); - } -} - -Model::XDocument_t Model::newInstance( const rtl::OUString& sName, - const rtl::OUString& sURL, - sal_Bool bURLOnce ) - throw( RuntimeException ) -{ - // create a default instance with <instanceData> element - XDocument_t xInstance = getDocumentBuilder()->newDocument(); - DBG_ASSERT( xInstance.is(), "failed to create DOM instance" ); - - Reference<XNode>( xInstance, UNO_QUERY_THROW )->appendChild( - Reference<XNode>( xInstance->createElement( OUSTRING("instanceData") ), - UNO_QUERY_THROW ) ); - - Sequence<PropertyValue> aSequence; - bool bOnce = bURLOnce; // bool, so we can take address in setInstanceData - setInstanceData( aSequence, &sName, &xInstance, &sURL, &bOnce ); - sal_Int32 nInstance = mpInstances->addItem( aSequence ); - loadInstance( nInstance ); - - return xInstance; -} - -sal_Int32 lcl_findProp( const PropertyValue* pValues, - sal_Int32 nLength, - const rtl::OUString& rName ) -{ - bool bFound = false; - sal_Int32 n = 0; - for( ; !bFound && n < nLength; n++ ) - { - bFound = ( pValues[n].Name == rName ); - } - return bFound ? ( n - 1) : -1; -} - -sal_Int32 xforms::lcl_findInstance( const InstanceCollection* pInstances, - const rtl::OUString& rName ) -{ - sal_Int32 nLength = pInstances->countItems(); - sal_Int32 n = 0; - bool bFound = false; - for( ; !bFound && n < nLength; n++ ) - { - OUString sName; - getInstanceData( pInstances->getItem( n ), &sName, NULL, NULL, NULL ); - bFound = ( sName == rName ); - } - return bFound ? ( n - 1 ) : -1; -} - -void Model::renameInstance( const rtl::OUString& sFrom, - const rtl::OUString& sTo, - const rtl::OUString& sURL, - sal_Bool bURLOnce ) - throw( RuntimeException ) -{ - sal_Int32 nPos = lcl_findInstance( mpInstances, sFrom ); - if( nPos != -1 ) - { - Sequence<PropertyValue> aSeq = mpInstances->getItem( nPos ); - PropertyValue* pSeq = aSeq.getArray(); - sal_Int32 nLength = aSeq.getLength(); - - sal_Int32 nProp = lcl_findProp( pSeq, nLength, OUSTRING("ID") ); - if( nProp == -1 ) - { - // add name property - aSeq.realloc( nLength + 1 ); - pSeq = aSeq.getArray(); - pSeq[ nLength ].Name = OUSTRING("ID"); - nProp = nLength; - } - - // change name - pSeq[ nProp ].Value <<= sTo; - - // change url - nProp = lcl_findProp( pSeq, nLength, OUSTRING("URL") ); - if(nProp != -1) - pSeq[ nProp ].Value <<= sURL; - - // change urlonce - nProp = lcl_findProp( pSeq, nLength, OUSTRING("URLOnce") ); - if(nProp != -1) - pSeq[ nProp ].Value <<= bURLOnce; - - // set instance - mpInstances->setItem( nPos, aSeq ); - } -} - -void Model::removeInstance( const rtl::OUString& sName ) - throw( RuntimeException ) -{ - sal_Int32 nPos = lcl_findInstance( mpInstances, sName ); - if( nPos != -1 ) - mpInstances->removeItem( mpInstances->getItem( nPos ) ); -} - -Reference<XNameContainer> lcl_getModels( - const Reference<com::sun::star::frame::XModel>& xComponent ) -{ - Reference<XNameContainer> xRet; - Reference<XFormsSupplier> xSupplier( xComponent, UNO_QUERY ); - if( xSupplier.is() ) - { - xRet = xSupplier->getXForms(); - } - return xRet; -} - -Model::XModel_t Model::newModel( const Reference<com::sun::star::frame::XModel>& xCmp, - const OUString& sName ) - throw( RuntimeException ) -{ - Model::XModel_t xModel; - Reference<XNameContainer> xModels = lcl_getModels( xCmp ); - if( xModels.is() - && ! xModels->hasByName( sName ) ) - { - Model* pModel = new Model(); - xModel.set( pModel ); - - pModel->setID( sName ); - pModel->newInstance( OUString(), OUString(), sal_False ); - pModel->initialize(); - xModels->insertByName( sName, makeAny( xModel ) ); - } - - return xModel; -} - -void Model::renameModel( const Reference<com::sun::star::frame::XModel>& xCmp, - const OUString& sFrom, - const OUString& sTo ) - throw( RuntimeException ) -{ - Reference<XNameContainer> xModels = lcl_getModels( xCmp ); - if( xModels.is() - && xModels->hasByName( sFrom ) - && ! xModels->hasByName( sTo ) ) - { - Reference<XModel> xModel( xModels->getByName( sFrom ), UNO_QUERY ); - xModel->setID( sTo ); - xModels->insertByName( sTo, makeAny( xModel ) ); - xModels->removeByName( sFrom ); - } -} - -void Model::removeModel( const Reference<com::sun::star::frame::XModel>& xCmp, - const OUString& sName ) - throw( RuntimeException ) -{ - Reference<XNameContainer> xModels = lcl_getModels( xCmp ); - if( xModels.is() - && xModels->hasByName( sName ) ) - { - xModels->removeByName( sName ); - } -} - -Model::XNode_t Model::createElement( const XNode_t& xParent, - const OUString& sName ) - throw( RuntimeException ) -{ - Reference<XNode> xNode; - if( xParent.is() - && isValidXMLName( sName ) ) - { - // TODO: implement proper namespace handling - xNode.set( xParent->getOwnerDocument()->createElement( sName ), - UNO_QUERY ); - } - return xNode; -} - -Model::XNode_t Model::createAttribute( const XNode_t& xParent, - const OUString& sName ) - throw( RuntimeException ) -{ - Reference<XNode> xNode; - Reference<XElement> xElement( xParent, UNO_QUERY ); - if( xParent.is() - && xElement.is() - && isValidXMLName( sName ) ) - { - // handle case where attribute already exists - sal_Int32 nCount = 0; - OUString sUniqueName = sName; - while( xElement->hasAttribute( sUniqueName ) ) - { - nCount++; - sUniqueName = sName + OUString::valueOf( nCount ); - } - - // TODO: implement proper namespace handling - xNode.set( xParent->getOwnerDocument()->createAttribute( sUniqueName ), - UNO_QUERY ); - } - return xNode; -} - -Model::XNode_t Model::renameNode( const XNode_t& xNode, - const rtl::OUString& sName ) - throw( RuntimeException ) -{ - // early out if we don't have to change the name - if( xNode->getNodeName() == sName ) - return xNode; - - // refuse to change name if its an attribute, and the name is already used - if( xNode->getNodeType() == NodeType_ATTRIBUTE_NODE - && xNode->getParentNode().is() - && Reference<XElement>(xNode->getParentNode(), UNO_QUERY_THROW)->hasAttribute( sName ) ) - return xNode; - - // note old binding expression so we can adjust bindings below - OUString sOldDefaultBindingExpression = - getDefaultBindingExpressionForNode( xNode ); - - Reference<XDocument> xDoc = xNode->getOwnerDocument(); - Reference<XNode> xNew; - if( xNode->getNodeType() == NodeType_ELEMENT_NODE ) - { - Reference<XElement> xElem = xDoc->createElement( sName ); - xNew.set( xElem, UNO_QUERY ); - - // iterate over all attributes and append them to the new element - Reference<XElement> xOldElem( xNode, UNO_QUERY ); - OSL_ENSURE( xNode.is(), "no element?" ); - - Reference<XNamedNodeMap> xMap = xNode->getAttributes(); - sal_Int32 nLength = xMap.is() ? xMap->getLength() : 0; - for( sal_Int32 n = 0; n < nLength; n++ ) - { - Reference<XAttr> xAttr( xMap->item(n), UNO_QUERY ); - xElem->setAttributeNode( xOldElem->removeAttributeNode( xAttr ) ); - } - - // iterate over all children and append them to the new element - for( Reference<XNode> xCurrent = xNode->getFirstChild(); - xCurrent.is(); - xCurrent = xNode->getFirstChild() ) - { - xNew->appendChild( xNode->removeChild( xCurrent ) ); - } - - xNode->getParentNode()->replaceChild( xNew, xNode ); - } - else if( xNode->getNodeType() == NodeType_ATTRIBUTE_NODE ) - { - // create new attribute - Reference<XAttr> xAttr = xDoc->createAttribute( sName ); - xAttr->setValue( xNode->getNodeValue() ); - - // replace node - Reference<XNode> xParent = xNode->getParentNode(); - xParent->removeChild( xNode ); - xNew = xParent->appendChild( Reference<XNode>( xAttr, UNO_QUERY ) ); - } - else - { - OSL_FAIL( "can't rename this node type" ); - } - - // adjust bindings (if necessary): - if( xNew.is() ) - { - // iterate over bindings and replace default expressions - OUString sNewDefaultBindingExpression = - getDefaultBindingExpressionForNode( xNew ); - for( sal_Int32 n = 0; n < mpBindings->countItems(); n++ ) - { - Binding* pBinding = Binding::getBinding( - mpBindings->Collection<XPropertySet_t>::getItem( n ) ); - - if( pBinding->getBindingExpression() - == sOldDefaultBindingExpression ) - pBinding->setBindingExpression( sNewDefaultBindingExpression ); - } - } - - // return node; return old node if renaming failed - return xNew.is() ? xNew : xNode; -} - -Model::XPropertySet_t Model::getBindingForNode( const XNode_t& xNode, - sal_Bool bCreate ) - throw( RuntimeException ) -{ - OSL_ENSURE( xNode.is(), "no node?" ); - - // We will iterate over all bindings and determine the - // appropriateness of the respective binding for this node. The - // best one will be used. If we don't find any and bCreate is set, - // then we will create a suitable binding. - Binding* pBestBinding = NULL; - sal_Int32 nBestScore = 0; - - for( sal_Int32 n = 0; n < mpBindings->countItems(); n++ ) - { - Binding* pBinding = Binding::getBinding( - mpBindings->Collection<XPropertySet_t>::getItem( n ) ); - - OSL_ENSURE( pBinding != NULL, "no binding?" ); - Reference<XNodeList> xNodeList = pBinding->getXNodeList(); - - sal_Int32 nNodes = xNodeList.is() ? xNodeList->getLength() : 0; - if( nNodes > 0 && xNodeList->item( 0 ) == xNode ) - { - // allright, we found a suitable node. Let's determine how - // well it fits. Score: - // - bind to exactly this node is better than whole nodeset - // - simple binding expressions is better than complex ones - sal_Int32 nScore = 0; - if( nNodes == 1 ) - nScore ++; - if( pBinding->isSimpleBindingExpression() ) - nScore ++; - - // if we found a better binding, remember it - if( nScore > nBestScore ) - { - pBestBinding = pBinding; - nBestScore = nScore; - } - } - } - - // create binding, if none was found and bCreate is set - OSL_ENSURE( ( nBestScore == 0 ) == ( pBestBinding == NULL ), - "score != binding?" ); - if( bCreate && pBestBinding == NULL ) - { - pBestBinding = new Binding(); - pBestBinding->setBindingExpression( - getDefaultBindingExpressionForNode( xNode ) ); - mpBindings->addItem( pBestBinding ); - } - - return pBestBinding; -} - -void Model::removeBindingForNode( const XNode_t& ) - throw( RuntimeException ) -{ - // determine whether suitable binding is still used -} - -OUString lcl_serializeForDisplay( const Reference< XAttr >& _rxAttrNode ) -{ - ::rtl::OUString sResult; - OSL_ENSURE( _rxAttrNode.is(), "lcl_serializeForDisplay( attr ): invalid argument!" ); - if ( _rxAttrNode.is() ) - { - ::rtl::OUStringBuffer aBuffer; - aBuffer.append( _rxAttrNode->getName() ); - aBuffer.appendAscii( "=" ); - ::rtl::OUString sValue = _rxAttrNode->getValue(); - sal_Unicode nQuote = '"'; - if ( sValue.indexOf( nQuote ) >= 0 ) - nQuote = '\''; - aBuffer.append( nQuote ); - aBuffer.append( sValue ); - aBuffer.append( nQuote ); - aBuffer.append( (sal_Unicode)' ' ); - sResult = aBuffer.makeStringAndClear(); - } - return sResult; -} - -OUString lcl_serializeForDisplay( const Reference<XNodeList>& xNodes ) -{ - ::rtl::OUString sResult; - - // create document fragment - Reference<XDocument> xDocument( getDocumentBuilder()->newDocument() ); - Reference<XDocumentFragment> xFragment( - xDocument->createDocumentFragment() ); - Reference<XNode> xNode( xFragment, UNO_QUERY ); - OSL_ENSURE( xFragment.is(), "xFragment" ); - OSL_ENSURE( xNode.is(), "xNode" ); - - sal_Int32 nAttributeNodes = 0; - - // attach nodelist to fragment - sal_Int32 nLength = xNodes->getLength(); - for( sal_Int32 i = 0; i < nLength; i++ ) - { - Reference<XNode> xCurrent = xNodes->item( i ); - - switch ( xCurrent->getNodeType() ) - { - case NodeType_DOCUMENT_NODE: - // special-case documents: use top-level element instead - xCurrent = xCurrent->getFirstChild(); - break; - case NodeType_ATTRIBUTE_NODE: - { - Reference< XAttr > xAttr( xCurrent, UNO_QUERY ); - if ( xAttr.is() ) - { - sResult += lcl_serializeForDisplay( xAttr ); - ++nAttributeNodes; - } - } - continue; - - default: - break; - } - - // append node - xNode->appendChild( xDocument->importNode( xCurrent, sal_True ) ); - } - OSL_ENSURE( ( nAttributeNodes == 0 ) || ( nAttributeNodes == nLength ), - "lcl_serializeForDisplay: mixed attribute and non-attribute nodes?" ); - if ( nAttributeNodes ) - // had only attribute nodes - return sResult; - - // serialize fragment - CSerializationAppXML aSerialization; - aSerialization.setSource( xFragment ); - aSerialization.serialize(); - - // copy stream into buffer - Reference<XTextInputStream> xTextInputStream( - createInstance( OUSTRING("com.sun.star.io.TextInputStream") ), - UNO_QUERY ); - Reference<XActiveDataSink>( xTextInputStream, UNO_QUERY_THROW ) - ->setInputStream( aSerialization.getInputStream() ); - - /* WORK AROUND for problem in serialization: currently, multiple - XML delarations (<?xml...?>) are being written out and we don't - want them. When this is fixed, the code below is nice and - simple. The current code filters out the declarations. - OUString sResult = xTextInputStream->readString( Sequence<sal_Unicode>(), - sal_True ); - */ - - // well, the serialization prepends XML header(s) that we need to - // remove first. - OUStringBuffer aBuffer; - while( ! xTextInputStream->isEOF() ) - { - OUString sLine = xTextInputStream->readLine(); - if( sLine.getLength() > 0 - && sLine.compareToAscii( "<?xml", 5 ) != 0 ) - { - aBuffer.append( sLine ); - aBuffer.append( sal_Unicode('\n') ); - } - } - sResult = aBuffer.makeStringAndClear(); - - return sResult; -} - -OUString lcl_serializeForDisplay( const Reference<XXPathObject>& xResult ) -{ - // error handling first - if( ! xResult.is() ) - return getResource( RID_STR_XFORMS_CANT_EVALUATE ); - - - // TODO: localize - OUStringBuffer aBuffer; - - switch( xResult->getObjectType() ) - { - case XPathObjectType_XPATH_BOOLEAN: - aBuffer.append( xResult->getBoolean() - ? OUSTRING("true") - : OUSTRING("false") ); - break; - - case XPathObjectType_XPATH_STRING: - aBuffer.append( sal_Unicode('"') ); - aBuffer.append( xResult->getString() ); - aBuffer.append( sal_Unicode('"') ); - break; - - case XPathObjectType_XPATH_NODESET: - aBuffer.append( lcl_serializeForDisplay( xResult->getNodeList() ) ); - break; - - case XPathObjectType_XPATH_NUMBER: - aBuffer.append( xResult->getDouble() ); - break; - - case XPathObjectType_XPATH_UNDEFINED: - case XPathObjectType_XPATH_POINT: - case XPathObjectType_XPATH_RANGE: - case XPathObjectType_XPATH_LOCATIONSET: - case XPathObjectType_XPATH_USERS: - case XPathObjectType_XPATH_XSLT_TREE: - default: - // TODO: localized error message? - break; - } - - return aBuffer.makeStringAndClear(); -} - -OUString Model::getResultForExpression( - const XPropertySet_t& xBinding, - sal_Bool bIsBindingExpression, - const OUString& sExpression ) - throw( RuntimeException ) -{ - Binding* pBinding = Binding::getBinding( xBinding ); - if( pBinding == NULL ) - throw RuntimeException(); - - // prepare & evaluate expression - OUStringBuffer aBuffer; - ComputedExpression aExpression; - aExpression.setExpression( sExpression ); - if( bIsBindingExpression ) - { - // binding: use binding context and evaluation - aExpression.evaluate( pBinding->getEvaluationContext() ); - aBuffer.append( lcl_serializeForDisplay( aExpression.getXPath() ) ); - } - else - { - // MIP (not binding): iterate over bindings contexts - std::vector<EvaluationContext> aContext = - pBinding->getMIPEvaluationContexts(); - for( std::vector<EvaluationContext>::iterator aIter = aContext.begin(); - aIter != aContext.end(); - ++aIter ) - { - aExpression.evaluate( *aIter ); - aBuffer.append( lcl_serializeForDisplay(aExpression.getXPath()) ); - aBuffer.append( sal_Unicode('\n') ); - } - } - return aBuffer.makeStringAndClear(); -} - -sal_Bool Model::isValidXMLName( const OUString& sName ) - throw( RuntimeException ) -{ - return isValidQName( sName, NULL ); -} - -sal_Bool Model::isValidPrefixName( const OUString& sName ) - throw( RuntimeException ) -{ - return ::isValidPrefixName( sName, NULL ); -} - -void Model::setNodeValue( - const XNode_t& xNode, - const rtl::OUString& sValue ) - throw( RuntimeException ) -{ - setSimpleContent( xNode, sValue ); -} - - -// -// helper functions from model_helper.hxx -// - -void xforms::getInstanceData( - const Sequence<PropertyValue>& aValues, - OUString* pID, - Reference<XDocument>* pInstance, - OUString* pURL, - bool* pURLOnce ) -{ - sal_Int32 nValues = aValues.getLength(); - const PropertyValue* pValues = aValues.getConstArray(); - for( sal_Int32 n = 0; n < nValues; n++ ) - { - const PropertyValue& rValue = pValues[n]; -#define PROP(NAME) \ - if( p##NAME != NULL && \ - rValue.Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(#NAME)) ) \ - rValue.Value >>= (*p##NAME) - PROP(ID); - PROP(Instance); - PROP(URL); - PROP(URLOnce); -#undef PROP - } -} - -void xforms::setInstanceData( - Sequence<PropertyValue>& aSequence, - const OUString* _pID, - const Reference<XDocument>* _pInstance, - const OUString* _pURL, - const bool* _pURLOnce ) -{ - // get old instance data - OUString sID; - Reference<XDocument> xInstance; - OUString sURL; - bool bURLOnce = false; - getInstanceData( aSequence, &sID, &xInstance, &sURL, &bURLOnce ); - const OUString* pID = ( sID.getLength() > 0 ) ? &sID : NULL; - const Reference<XDocument>* pInstance = xInstance.is() ? &xInstance : NULL; - const OUString* pURL = ( sURL.getLength() > 0 ) ? &sURL : NULL; - const bool* pURLOnce = ( bURLOnce && pURL != NULL ) ? &bURLOnce : NULL; - - // determine new instance data -#define PROP(NAME) if( _p##NAME != NULL ) p##NAME = _p##NAME - PROP(ID); - PROP(Instance); - PROP(URL); - PROP(URLOnce); -#undef PROP - - // count # of values we want to set - sal_Int32 nCount = 0; -#define PROP(NAME) if( p##NAME != NULL ) nCount++ - PROP(ID); - PROP(Instance); - PROP(URL); - PROP(URLOnce); -#undef PROP - - // realloc sequence and enter values; - aSequence.realloc( nCount ); - PropertyValue* pSequence = aSequence.getArray(); - sal_Int32 nIndex = 0; -#define PROP(NAME) \ - if( p##NAME != NULL ) \ - { \ - pSequence[ nIndex ].Name = OUSTRING(#NAME); \ - pSequence[ nIndex ].Value <<= *p##NAME; \ - nIndex++; \ - } - PROP(ID); - PROP(Instance); - PROP(URL); - PROP(URLOnce); -#undef PROP -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/namedcollection.hxx b/forms/source/xforms/namedcollection.hxx deleted file mode 100644 index cba79e2f0..000000000 --- a/forms/source/xforms/namedcollection.hxx +++ /dev/null @@ -1,145 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _NAMEDCOLLECTION_HXX -#define _NAMEDCOLLECTION_HXX - -#include <collection.hxx> -#include <cppuhelper/implbase1.hxx> -#include <com/sun/star/container/XNameAccess.hpp> - -#include <algorithm> - -template<class T> -class NamedCollection : public cppu::ImplInheritanceHelper1< - Collection<T>, - com::sun::star::container::XNameAccess> -{ - using Collection<T>::maItems; - using Collection<T>::getItem; - using Collection<T>::hasItem; - -public: - NamedCollection() {} - virtual ~NamedCollection() {} - - const T& getItem( const rtl::OUString& rName ) const - { - OSL_ENSURE( hasItem( rName ), "invalid name" ); - return *findItem( rName ); - } - - bool hasItem( const rtl::OUString& rName ) const - { - return findItem( rName ) != maItems.end(); - } - - typedef com::sun::star::uno::Sequence<rtl::OUString> Names_t; - Names_t getNames() const - { - // iterate over members, and collect all those that have names - std::vector<rtl::OUString> aNames; - for( typename std::vector<T>::const_iterator aIter = maItems.begin(); - aIter != maItems.end(); - aIter++ ) - { - com::sun::star::uno::Reference<com::sun::star::container::XNamed> - xNamed( *aIter, com::sun::star::uno::UNO_QUERY ); - if( xNamed.is() ) - aNames.push_back( xNamed->getName() ); - } - - // copy names to Sequence and return - Names_t aResult( aNames.size() ); - rtl::OUString* pStrings = aResult.getArray(); - std::copy( aNames.begin(), aNames.end(), pStrings ); - - return aResult; - } - -protected: - typename std::vector<T>::const_iterator findItem( const rtl::OUString& rName ) const - { - for( typename std::vector<T>::const_iterator aIter = maItems.begin(); - aIter != maItems.end(); - aIter++ ) - { - com::sun::star::uno::Reference<com::sun::star::container::XNamed> - xNamed( *aIter, com::sun::star::uno::UNO_QUERY ); - if( xNamed.is() && xNamed->getName() == rName ) - return aIter; - } - return maItems.end(); - } - -public: - - // XElementAccess - virtual typename Collection<T>::Type_t SAL_CALL getElementType() - throw( typename Collection<T>::RuntimeException_t ) - { - return Collection<T>::getElementType(); - } - - virtual sal_Bool SAL_CALL hasElements() - throw( typename Collection<T>::RuntimeException_t ) - { - return Collection<T>::hasElements(); - } - - // XNameAccess : XElementAccess - virtual typename Collection<T>::Any_t SAL_CALL getByName( - const rtl::OUString& aName ) - throw( typename Collection<T>::NoSuchElementException_t, - typename Collection<T>::WrappedTargetException_t, - typename Collection<T>::RuntimeException_t ) - { - if( hasItem( aName ) ) - return com::sun::star::uno::makeAny( getItem( aName ) ); - else - throw typename Collection<T>::NoSuchElementException_t(); - - } - - virtual Names_t SAL_CALL getElementNames() - throw( typename Collection<T>::RuntimeException_t ) - { - return getNames(); - } - - virtual sal_Bool SAL_CALL hasByName( - const rtl::OUString& aName ) - throw( typename Collection<T>::RuntimeException_t ) - { - return hasItem( aName ) ? sal_True : sal_False; - } -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/pathexpression.cxx b/forms/source/xforms/pathexpression.cxx deleted file mode 100644 index 8115aa1ab..000000000 --- a/forms/source/xforms/pathexpression.cxx +++ /dev/null @@ -1,157 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "pathexpression.hxx" -#include "unohelper.hxx" -#include "evaluationcontext.hxx" -#include "NameContainer.hxx" - -#include <com/sun/star/xml/dom/XNode.hpp> -#include <com/sun/star/xml/dom/XNodeList.hpp> -#include <com/sun/star/xml/dom/NodeType.hpp> -#include <com/sun/star/xml/dom/events/XEventListener.hpp> -#include <com/sun/star/xml/dom/events/XEventTarget.hpp> -#include <com/sun/star/xml/xpath/XXPathObject.hpp> -#include <com/sun/star/container/XNameContainer.hpp> -#include <com/sun/star/uno/Sequence.hxx> -#include <rtl/ustrbuf.hxx> - -#include <unotools/textsearch.hxx> - -#include <algorithm> -#include <functional> - - -using rtl::OUString; -using rtl::OUStringBuffer; -using com::sun::star::uno::Reference; -using com::sun::star::uno::Sequence; -using com::sun::star::xml::dom::XNode; -using com::sun::star::xml::dom::XNodeList; -using com::sun::star::xml::dom::events::XEventListener; -using com::sun::star::xml::dom::events::XEventTarget; -using com::sun::star::container::XNameContainer; -using com::sun::star::xml::xpath::XXPathObject; -using com::sun::star::uno::RuntimeException; -using com::sun::star::uno::UNO_QUERY; -using com::sun::star::uno::UNO_QUERY_THROW; -using com::sun::star::xml::dom::NodeType_TEXT_NODE; -using com::sun::star::xml::xpath::XPathObjectType_XPATH_UNDEFINED; -using namespace std; - - - - -namespace xforms -{ - -PathExpression::PathExpression() - : ComputedExpression(), - maNodes() -{ -} - -PathExpression::~PathExpression() -{ -} - - - -void PathExpression::setExpression( const OUString& rExpression ) -{ - // set new expression, and clear pre-computed results - ComputedExpression::setExpression( rExpression ); - - // check expression against regular expression to determine - // whether it contains only 'simple' (i.e. static) conditions. For - // now, we check whether it only contains number positions. - // (TODO: Only works for names containing only ASCII letters+digits.) - mbIsSimple = - _checkExpression( "( */@?[a-zA-Z0-9:]+( *\\[ *[0-9 ]+ *\\] *)?)+" ); - - maNodes.clear(); -} - -const rtl::OUString PathExpression::_getExpressionForEvaluation() const -{ - OUString sExpr = ComputedExpression::_getExpressionForEvaluation(); - if( sExpr.getLength() == 0 ) - sExpr = OUSTRING("."); - return sExpr; -} - -bool PathExpression::evaluate( const EvaluationContext& rContext ) -{ - // for simple expression we don't need to re-bind (if we were bound before) - // (we will evaluate empty expressions, since they are interpreted as ".") - if( mxResult.is() && isSimpleExpression() ) - return true; - - bool bResult = _evaluate( rContext, _getExpressionForEvaluation() ); - - // clear old result, and copy new - maNodes.clear(); - if( mxResult.is() ) - { - // copy node list - Reference<XNodeList> xNodeList = mxResult->getNodeList(); - OSL_ENSURE( xNodeList.is(), "empty object (instead of empty list)" ); - sal_Int32 nLength = xNodeList.is() ? xNodeList->getLength() : 0; - for( sal_Int32 n = 0; n < nLength; n++ ) - maNodes.push_back( xNodeList->item( n ) ); - } - - return bResult; -} - - -Reference<XNode> PathExpression::getNode() const -{ - Reference<XNode> xResult; - if( ! maNodes.empty() ) - xResult = *maNodes.begin(); - return xResult; -} - -const PathExpression::NodeVector_t PathExpression::getNodeList() const -{ - return maNodes; -} - -Reference<XNodeList> PathExpression::getXNodeList() const -{ - return mxResult.is() ? mxResult->getNodeList() : Reference<XNodeList>(); -} - - -} // namespace xforms - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/pathexpression.hxx b/forms/source/xforms/pathexpression.hxx deleted file mode 100644 index 72363edcd..000000000 --- a/forms/source/xforms/pathexpression.hxx +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _PATHEXPRESSION_HXX -#define _PATHEXPRESSION_HXX - - -// include for parent class -#include "computedexpression.hxx" - -// includes for member variables -#include <vector> - -// forward declaractions -namespace com { namespace sun { namespace star -{ - namespace xml { namespace dom - { - class XNodeList; - namespace events { class XEventListener; } - } } -} } } - - - -namespace xforms -{ - -/** PathExpression represents an XPath Expression and caches results */ -class PathExpression : public ComputedExpression -{ -public: - typedef std::vector<com::sun::star::uno::Reference<com::sun::star::xml::dom::XNode> > NodeVector_t; - -private: - /// the node-list result from the last bind (cached from mxResult) - NodeVector_t maNodes; - -protected: - /// get expression for evaluation - const rtl::OUString _getExpressionForEvaluation() const; - - -public: - PathExpression(); - ~PathExpression(); - - /// set the expression string - /// (overridden to do remove old listeners) - /// (also defines simple expressions) - void setExpression( const rtl::OUString& rExpression ); - - - /// evaluate the expression relative to the content node. - bool evaluate( const xforms::EvaluationContext& rContext ); - - - // get the result of this expression as node/node list/... - com::sun::star::uno::Reference<com::sun::star::xml::dom::XNode> getNode() const; - const NodeVector_t getNodeList() const; - com::sun::star::uno::Reference<com::sun::star::xml::dom::XNodeList> getXNodeList() const; - -}; - -} // namespace xforms - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/propertysetbase.cxx b/forms/source/xforms/propertysetbase.cxx deleted file mode 100644 index 1c1888997..000000000 --- a/forms/source/xforms/propertysetbase.cxx +++ /dev/null @@ -1,195 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "propertysetbase.hxx" - -#include <cppuhelper/typeprovider.hxx> // for getImplementationId() - -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/beans/XMultiPropertySet.hpp> -#include <com/sun/star/beans/XPropertyState.hpp> -#include <com/sun/star/uno/Reference.hxx> -#include <tools/debug.hxx> - -#include <vector> - -using com::sun::star::uno::Any; -using com::sun::star::uno::Type; -using com::sun::star::uno::Sequence; -using com::sun::star::uno::Reference; -using com::sun::star::uno::Exception; -using com::sun::star::uno::RuntimeException; -using com::sun::star::lang::IllegalArgumentException; -using com::sun::star::beans::Property; -using com::sun::star::beans::XPropertySetInfo; - -oslInterlockedCount SAL_CALL PropertyAccessorBase::acquire() -{ - return ++m_refCount; -} - -oslInterlockedCount SAL_CALL PropertyAccessorBase::release() -{ - if ( --m_refCount == 0 ) - { - delete this; - return 0; - } - return m_refCount; -} - -PropertySetBase::PropertySetBase( ) - :m_pProperties( NULL ) -{ -} - -PropertySetBase::~PropertySetBase( ) -{ - DELETEZ( m_pProperties ); -} - -cppu::IPropertyArrayHelper& SAL_CALL PropertySetBase::getInfoHelper() -{ - if ( !m_pProperties ) - { - OSL_ENSURE( !m_aProperties.empty(), "PropertySetBase::getInfoHelper: no registered properties!" ); - m_pProperties = new cppu::OPropertyArrayHelper( &m_aProperties[0], m_aProperties.size(), sal_False ); - } - return *m_pProperties; -} - -Reference< XPropertySetInfo > SAL_CALL PropertySetBase::getPropertySetInfo( ) throw(RuntimeException) -{ - return cppu::OPropertySetHelper::createPropertySetInfo( getInfoHelper() ); -} - -void PropertySetBase::registerProperty( const Property& rProperty, - const ::rtl::Reference< PropertyAccessorBase >& rAccessor ) -{ - OSL_ENSURE( rAccessor.get(), "PropertySetBase::registerProperty: invalid property accessor, this will crash!" ); - m_aAccessors.insert( PropertyAccessors::value_type( rProperty.Handle, rAccessor ) ); - - OSL_ENSURE( ( rAccessor->isWriteable() == true ) - == ( ( rProperty.Attributes & com::sun::star::beans::PropertyAttribute::READONLY ) == 0 ), - "PropertySetBase::registerProperty: inconsistence!" ); - - m_aProperties.push_back( rProperty ); -} - -void PropertySetBase::notifyAndCachePropertyValue( sal_Int32 nHandle ) -{ - ::osl::ClearableMutexGuard aGuard( GetMutex() ); - - PropertyValueCache::iterator aPos = m_aCache.find( nHandle ); - if ( aPos == m_aCache.end() ) - { // method has never before been invoked for this property - try - { - // determine the type of this property - ::cppu::IPropertyArrayHelper& rPropertyMetaData = getInfoHelper(); - ::rtl::OUString sPropName; - OSL_VERIFY( rPropertyMetaData.fillPropertyMembersByHandle( &sPropName, NULL, nHandle ) ); - Property aProperty = rPropertyMetaData.getPropertyByName( sPropName ); - // default construct a value of this type - Any aEmptyValue( NULL, aProperty.Type ); - // insert into the cache - aPos = m_aCache.insert( PropertyValueCache::value_type( nHandle, aEmptyValue ) ).first; - } - catch( Exception& ) - { - OSL_FAIL( "PropertySetBase::notifyAndCachePropertyValue: this is not expected to fail!" ); - } - } - Any aOldValue = aPos->second; - // determine the current value - Any aNewValue; - getFastPropertyValue( aNewValue, nHandle ); - // remember the old value - aPos->second = aNewValue; - - aGuard.clear(); - if ( aNewValue != aOldValue ) - firePropertyChange( nHandle, aNewValue, aOldValue ); -} - -void PropertySetBase::initializePropertyValueCache( sal_Int32 nHandle ) -{ - Any aCurrentValue; - getFastPropertyValue( aCurrentValue, nHandle ); - -#if OSL_DEBUG_LEVEL > 0 - ::std::pair< PropertyValueCache::iterator, bool > aInsertResult = -#endif - m_aCache.insert( PropertyValueCache::value_type( nHandle, aCurrentValue ) ); - OSL_ENSURE( aInsertResult.second, "PropertySetBase::initializePropertyValueCache: already cached a value for this property!" ); -} - -PropertyAccessorBase& PropertySetBase::locatePropertyHandler( sal_Int32 nHandle ) const -{ - PropertyAccessors::const_iterator aPropertyPos = m_aAccessors.find( nHandle ); - OSL_ENSURE( aPropertyPos != m_aAccessors.end() && aPropertyPos->second.get(), - "PropertySetBase::locatePropertyHandler: accessor map is corrupted!" ); - // neither should this be called for handles where there is no accessor, nor should a - // NULL accssor be in the map - return *aPropertyPos->second; -} - -sal_Bool SAL_CALL PropertySetBase::convertFastPropertyValue( Any& rConvertedValue, Any& rOldValue, sal_Int32 nHandle, - const Any& rValue ) - throw (IllegalArgumentException) -{ - PropertyAccessorBase& rAccessor = locatePropertyHandler( nHandle ); - if ( !rAccessor.approveValue( rValue ) ) - throw IllegalArgumentException( ::rtl::OUString(), *this, 0 ); - - rAccessor.getValue( rOldValue ); - if ( rOldValue != rValue ) - { - rConvertedValue = rValue; // no conversion at all - return sal_True; - } - return sal_False; -} - -void SAL_CALL PropertySetBase::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& rValue ) - throw (Exception) -{ - PropertyAccessorBase& rAccessor = locatePropertyHandler( nHandle ); - rAccessor.setValue( rValue ); -} - -void SAL_CALL PropertySetBase::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) const -{ - PropertyAccessorBase& rAccessor = locatePropertyHandler( nHandle ); - rAccessor.getValue( rValue ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/propertysetbase.hxx b/forms/source/xforms/propertysetbase.hxx deleted file mode 100644 index 62987dea2..000000000 --- a/forms/source/xforms/propertysetbase.hxx +++ /dev/null @@ -1,374 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef _PROPERTYSETBASE_HXX -#define _PROPERTYSETBASE_HXX - - -// include for parent class -#include <cppuhelper/weak.hxx> -#include <com/sun/star/lang/XTypeProvider.hpp> -#include <comphelper/propstate.hxx> -#include <comphelper/propertysetinfo.hxx> -#include <comphelper/proparrhlp.hxx> -#include <rtl/ref.hxx> - -// include for inlined helper function below -#include <com/sun/star/lang/IllegalArgumentException.hpp> -#include <com/sun/star/beans/PropertyAttribute.hpp> - -#include <map> - -// forward declarations for method arguments -namespace com { namespace sun { namespace star { namespace uno { - class Any; - class Type; - class RuntimeException; - template<class T> class Sequence; -} } } } - -/** base class which encapsulates accessing (reading/writing) concrete property values -*/ -class PropertyAccessorBase : public ::rtl::IReference -{ -private: - oslInterlockedCount m_refCount; - -protected: - PropertyAccessorBase() : m_refCount( 0 ) { } - -public: - virtual oslInterlockedCount SAL_CALL acquire(); - virtual oslInterlockedCount SAL_CALL release(); - - virtual bool approveValue( const com::sun::star::uno::Any& rValue ) const = 0; - virtual void setValue( const com::sun::star::uno::Any& rValue ) = 0; - virtual void getValue( com::sun::star::uno::Any& rValue ) const = 0; - virtual bool isWriteable() const = 0; -}; - - -/** helper class for implementing property accessors through public member functions -*/ -template< typename CLASS, typename VALUE, class WRITER, class READER > -class GenericPropertyAccessor : public PropertyAccessorBase -{ -public: - typedef WRITER Writer; - typedef READER Reader; - -private: - CLASS* m_pInstance; - Writer m_pWriter; - Reader m_pReader; - -public: - GenericPropertyAccessor( CLASS* pInstance, Writer pWriter, Reader pReader ) - :m_pInstance( pInstance ) - ,m_pWriter( pWriter ) - ,m_pReader( pReader ) - { - } - - virtual bool approveValue( const com::sun::star::uno::Any& rValue ) const - { - VALUE aVal; - return ( rValue >>= aVal ); - } - - virtual void setValue( const com::sun::star::uno::Any& rValue ) - { - VALUE aTypedVal = VALUE(); - OSL_VERIFY( rValue >>= aTypedVal ); - (m_pInstance->*m_pWriter)( aTypedVal ); - } - - virtual void getValue( com::sun::star::uno::Any& rValue ) const - { - rValue = com::sun::star::uno::makeAny( (m_pInstance->*m_pReader)() ); - } - - virtual bool isWriteable() const - { - return m_pWriter != NULL; - } -}; - -/** helper class for implementing property accessors via non-UNO methods -*/ -template< typename CLASS, typename VALUE > -class DirectPropertyAccessor - :public GenericPropertyAccessor < CLASS - , VALUE - , void (CLASS::*)( const VALUE& ) - , VALUE (CLASS::*)() const - > -{ -protected: - typedef void (CLASS::*Writer)( const VALUE& ); - typedef VALUE (CLASS::*Reader)() const; -public: - DirectPropertyAccessor( CLASS* pInstance, Writer pWriter, Reader pReader ) - :GenericPropertyAccessor< CLASS, VALUE, Writer, Reader >( pInstance, pWriter, pReader ) - { - } -}; - -/** helper class for implementing non-UNO accessors to a boolean property -*/ -template< typename CLASS, typename DUMMY > -class BooleanPropertyAccessor - :public GenericPropertyAccessor < CLASS - , bool - , void (CLASS::*)( bool ) - , bool (CLASS::*)() const - > -{ -protected: - typedef void (CLASS::*Writer)( bool ); - typedef bool (CLASS::*Reader)() const; -public: - BooleanPropertyAccessor( CLASS* pInstance, Writer pWriter, Reader pReader ) - :GenericPropertyAccessor< CLASS, bool, Writer, Reader >( pInstance, pWriter, pReader ) - { - } -}; - -/** helper class for implementing property accessors via UNO methods -*/ -template< typename CLASS, typename VALUE > -class APIPropertyAccessor - :public GenericPropertyAccessor < CLASS - , VALUE - , void (SAL_CALL CLASS::*)( const VALUE& ) - , VALUE (SAL_CALL CLASS::*)() - > -{ -protected: - typedef void (SAL_CALL CLASS::*Writer)( const VALUE& ); - typedef VALUE (SAL_CALL CLASS::*Reader)(); -public: - APIPropertyAccessor( CLASS* pInstance, Writer pWriter, Reader pReader ) - :GenericPropertyAccessor< CLASS, VALUE, Writer, Reader >( pInstance, pWriter, pReader ) - { - } -}; - -/** bridges two XPropertySet helper implementations - - The <type scope="comphelper">OStatefulPropertySet</type> (basically, the - <type scope="cppu">OPropertySetHelper</type>) implements a comprehensive framework - for property sets, including property change notifications. - However, it lacks some easy possibilities to declare the supported properties. - Other helper structs and classes allow for this, but are lacking needed features - such as property change notifications. - - The <type>PropertySetBase</type> bridges various implementations, - so you have the best of both worlds. - */ -class PropertySetBase : public ::comphelper::OStatefulPropertySet -{ -private: - typedef com::sun::star::uno::Any Any_t; - - typedef ::std::map< const sal_Int32, ::rtl::Reference< PropertyAccessorBase > > PropertyAccessors; - typedef ::std::vector< ::com::sun::star::beans::Property > PropertyArray; - typedef ::std::map< const sal_Int32, Any_t > PropertyValueCache; - - PropertyArray m_aProperties; - cppu::IPropertyArrayHelper* m_pProperties; - PropertyAccessors m_aAccessors; - PropertyValueCache m_aCache; - -protected: - PropertySetBase(); - virtual ~PropertySetBase(); - - /** registers a new property to be supported by this instance - @param rProperty - the descriptor for the to-be-supported property - @param rAccessor - an instance which is able to provide read and possibly write access to - the property. - @precond - Must not be called after any of the property set related UNO interfaces - has been used. Usually, you will do a number of <member>registerProperty</member> - calls in the constructor of your class. - */ - void registerProperty( - const com::sun::star::beans::Property& rProperty, - const ::rtl::Reference< PropertyAccessorBase >& rAccessor - ); - - /** notifies a change in a given property value, if necessary - - The necessity of the notification is determined by a cached value for the given - property. Caching happens after notification. - - That is, when you call <member>notifyAndCachePropertyValue</member> for the first time, - a value for the given property is default constructed, and considered to be the "old value". - If this value differs from the current value, then this change is notified to all interested - listeners. Finally, the current value is remembered. - - Subsequent calls to <member>notifyAndCachePropertyValue</member> use the remembered value as - "old value", and from then on behave as the first call. - - @param nHandle - the handle of the property. Must denote a property supported by this instance, i.e. - one previously registered via <member>registerProperty</member>. - - @precond - our ref count must not be 0. The reason is that during this method's execution, - the instance might be acquired and released, which would immediately destroy - the instance if it has a ref count of 0. - - @seealso initializePropertyValueCache - */ - void notifyAndCachePropertyValue( sal_Int32 nHandle ); - - /** initializes the property value cache for the given property, with its current value - - Usually used to initialize the cache with values which are different from default - constructed values. Say you have a boolean property whose initial state - is <TRUE/>. Say you call <member>notifyAndCachePropertyValue</member> the first time: it will - default construct the "old value" for this property as <FALSE/>, and thus <b>not</b> do - any notifications if the "current value" is also <FALSE/> - which might be wrong, since - the guessing of the "old value" differed from the real initial value which was <TRUE/>. - - Too confusing? Okay, than just call this method for every property you have. - - @param nHandle - the handle of the property. Must denote a property supported by this instance, i.e. - one previously registered via <member>registerProperty</member>. - @param rValue - the value to cache - @seealso notifyAndCachePropertyValue - */ - void initializePropertyValueCache( sal_Int32 nHandle ); - - /// OPropertysetHelper methods - virtual sal_Bool SAL_CALL convertFastPropertyValue( Any_t& rConvertedValue, Any_t& rOldValue, sal_Int32 nHandle, const Any_t& rValue ) - throw (::com::sun::star::lang::IllegalArgumentException); - virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any_t& rValue ) - throw (::com::sun::star::uno::Exception); - virtual void SAL_CALL getFastPropertyValue( Any_t& rValue, sal_Int32 nHandle ) const; - - virtual cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper(); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); - -public: - /// helper struct for granting selective access to some notification-related methods - struct NotifierAccess { friend struct PropertyChangeNotifier; private: NotifierAccess() { } }; - /** retrieves the current property value for the given handle - @param nHandle - the handle of the property. Must denote a property supported by this instance, i.e. - one previously registered via <member>registerProperty</member>. - @see registerProperty - */ - inline void getCurrentPropertyValueByHandle( sal_Int32 nHandle, Any_t& /* [out] */ rValue, const NotifierAccess& ) const - { - getFastPropertyValue( rValue, nHandle ); - } - - /** notifies a change in a given property to all interested listeners - */ - inline void notifyPropertyChange( sal_Int32 nHandle, const Any_t& rOldValue, const Any_t& rNewValue, const NotifierAccess& ) const - { - const_cast< PropertySetBase* >( this )->firePropertyChange( nHandle, rNewValue, rOldValue ); - } - - using ::comphelper::OStatefulPropertySet::getFastPropertyValue; - -private: - /** locates a property given by handle - @param nHandle - the handle of the property. Must denote a property supported by this instance, i.e. - one previously registered via <member>registerProperty</member>. - @see registerProperty - */ - PropertyAccessorBase& locatePropertyHandler( sal_Int32 nHandle ) const; -}; - -/** a helper class for notifying property changes in a <type>PropertySetBase</type> instance. - - You can create an instance of this class on the stack of a method which is to programmatically - change the value of a property. In its constructor, the instance will acquire the current property - value, and in its destructor, it will notify the change of this property's value (if necessary). - - You do not need this class if you are modifying property values by using the X(Fast|Multi)PropertSet - methods, since those already care for property notifications. You only need it if you're changing - the internal representation of your property directly. - - Also note that usually, notifications in the UNO world should be done without a locked mutex. So - if you use this class in conjunction with a <type>MutexGuard</type>, ensure that you <b>first</b> - instantiate the <type>PropertyChangeNotifier</type>, and <b>then</b> the <type>MutexGuard</type>, - so your mutex is released before the notification happens. -*/ -struct PropertyChangeNotifier -{ -private: - const PropertySetBase& m_rPropertySet; - sal_Int32 m_nHandle; - com::sun::star::uno::Any m_aOldValue; - -public: - /** constructs a PropertyChangeNotifier - @param rPropertySet - the property set implementation whose property is going to be changed. Note - that this property set implementation must live at least as long as the - PropertyChangeNotifier instance does. - @param nHandle - the handle of the property which is going to be changed. Must be a valid property - handle for the given <arg>rPropertySet</arg> - */ - inline PropertyChangeNotifier( const PropertySetBase& rPropertySet, sal_Int32 nHandle ) - :m_rPropertySet( rPropertySet ) - ,m_nHandle( nHandle ) - { - m_rPropertySet.getCurrentPropertyValueByHandle( m_nHandle, m_aOldValue, PropertySetBase::NotifierAccess() ); - } - inline ~PropertyChangeNotifier() - { - com::sun::star::uno::Any aNewValue; - m_rPropertySet.getCurrentPropertyValueByHandle( m_nHandle, aNewValue, PropertySetBase::NotifierAccess() ); - if ( aNewValue != m_aOldValue ) - { - m_rPropertySet.notifyPropertyChange( m_nHandle, m_aOldValue, aNewValue, PropertySetBase::NotifierAccess() ); - } - } -}; - - -#define PROPERTY_FLAGS( NAME, TYPE, FLAG ) com::sun::star::beans::Property( \ - ::rtl::OUString( #NAME, sizeof( #NAME ) - 1, RTL_TEXTENCODING_ASCII_US ), \ - HANDLE_##NAME, getCppuType( static_cast< TYPE* >( NULL ) ), FLAG ) -#define PROPERTY( NAME, TYPE ) PROPERTY_FLAGS( NAME, TYPE, com::sun::star::beans::PropertyAttribute::BOUND ) -#define PROPERTY_RO( NAME, TYPE ) PROPERTY_FLAGS( NAME, TYPE, com::sun::star::beans::PropertyAttribute::BOUND | com::sun::star::beans::PropertyAttribute::READONLY ) - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/resourcehelper.cxx b/forms/source/xforms/resourcehelper.cxx deleted file mode 100644 index 412e52852..000000000 --- a/forms/source/xforms/resourcehelper.cxx +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "resourcehelper.hxx" -#include "frm_resource.hxx" - -#include <rtl/ustring.hxx> -#include <tools/string.hxx> - -using rtl::OUString; - -#define OUSTRING(x) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(x)) - -namespace xforms -{ - -OUString getResource( sal_uInt16 nResourceId ) -{ - return getResource( nResourceId, OUString(), OUString(), OUString() ); -} - -OUString getResource( sal_uInt16 nResourceId, - const OUString& rInfo1 ) -{ - return getResource( nResourceId, rInfo1, OUString(), OUString() ); -} - -OUString getResource( sal_uInt16 nResourceId, - const OUString& rInfo1, - const OUString& rInfo2 ) -{ - return getResource( nResourceId, rInfo1, rInfo2, OUString() ); -} - -OUString getResource( sal_uInt16 nResourceId, - const OUString& rInfo1, - const OUString& rInfo2, - const OUString& rInfo3 ) -{ - OUString sResource = frm::ResourceManager::loadString( nResourceId ); - OSL_ENSURE( sResource.getLength() > 0, "resource not found?" ); - - // use old style String class for search and replace, so we don't have to - // code this again. - String sString( sResource ); - sString.SearchAndReplaceAll( String(OUSTRING("$1")), String(rInfo1) ); - sString.SearchAndReplaceAll( String(OUSTRING("$2")), String(rInfo2) ); - sString.SearchAndReplaceAll( String(OUSTRING("$3")), String(rInfo3) ); - return OUString( sString ); -} - -} // namespace xforms - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/resourcehelper.hxx b/forms/source/xforms/resourcehelper.hxx deleted file mode 100644 index a392a6e3e..000000000 --- a/forms/source/xforms/resourcehelper.hxx +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef _RESOURCEHELPER_HXX -#define _RESOURCEHELPER_HXX - -// include resource IDs -#include <frm_resource.hrc> - -#include <sal/types.h> - -namespace rtl { class OUString; } - -namespace xforms -{ - /// get a resource string for the current language - rtl::OUString getResource( sal_uInt16 ); - - // overloaded: get a resource string, and substitute parameters - rtl::OUString getResource( sal_uInt16, const rtl::OUString& ); - rtl::OUString getResource( sal_uInt16, const rtl::OUString&, - const rtl::OUString& ); - rtl::OUString getResource( sal_uInt16, const rtl::OUString&, - const rtl::OUString&, - const rtl::OUString& ); - -} // namespace - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission.cxx b/forms/source/xforms/submission.cxx deleted file mode 100644 index d94097a62..000000000 --- a/forms/source/xforms/submission.cxx +++ /dev/null @@ -1,721 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "submission.hxx" - -#include "model.hxx" -#include "binding.hxx" -#include "mip.hxx" -#include "evaluationcontext.hxx" -#include "unohelper.hxx" -#include "submission/submission_put.hxx" -#include "submission/submission_post.hxx" -#include "submission/submission_get.hxx" - -#include <rtl/ustring.hxx> -#include <rtl/ustrbuf.hxx> - -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/xforms/XModel.hpp> -#include <com/sun/star/uno/RuntimeException.hpp> -#include <com/sun/star/xml/xpath/XXPathObject.hpp> -#include <com/sun/star/container/XNameAccess.hpp> -#include <com/sun/star/xml/xpath/XPathObjectType.hpp> -#include <com/sun/star/xml/dom/XNodeList.hpp> -#include <com/sun/star/xml/dom/XDocument.hpp> -#include <com/sun/star/xml/dom/XDocumentBuilder.hpp> -#include <com/sun/star/xml/dom/XDocumentFragment.hpp> -#include <com/sun/star/xml/dom/NodeType.hpp> -#include <com/sun/star/task/XInteractionHandler.hpp> -#include <com/sun/star/task/XInteractionRequest.hpp> -#include <com/sun/star/task/XInteractionContinuation.hpp> -#include <com/sun/star/xforms/InvalidDataOnSubmitException.hpp> -#include <com/sun/star/frame/XFrame.hpp> -#include <cppuhelper/typeprovider.hxx> -#include <comphelper/propertysetinfo.hxx> -#include <comphelper/interaction.hxx> -#include <unotools/processfactory.hxx> -#include <memory> - - - - -using rtl::OUString; -using rtl::OUStringBuffer; -using com::sun::star::beans::UnknownPropertyException; -using com::sun::star::beans::PropertyVetoException; -using com::sun::star::lang::IllegalArgumentException; -using com::sun::star::util::VetoException; -using com::sun::star::form::submission::XSubmissionVetoListener; -using com::sun::star::lang::WrappedTargetException; -using com::sun::star::lang::NoSupportException; -using com::sun::star::task::XInteractionHandler; -using com::sun::star::task::XInteractionRequest; -using com::sun::star::task::XInteractionContinuation; -using com::sun::star::xforms::XModel; -using com::sun::star::xforms::InvalidDataOnSubmitException; -using com::sun::star::container::XNameAccess; -using com::sun::star::xml::xpath::XXPathObject; -using com::sun::star::xml::xpath::XPathObjectType; -using com::sun::star::frame::XFrame; -using xforms::Submission; -using xforms::Model; -using xforms::MIP; -using std::auto_ptr; - -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::xml::dom; - -Submission::Submission() : - msID(), - msBind(), - maRef(), - msAction(), - msMethod(), - msVersion(), - mbIndent(), - msMediaType(), - msEncoding(), - mbOmitXmlDeclaration(), - mbStandalone(), - msCDataSectionElement(), - msReplace( OUSTRING("none") ), - msSeparator(), - msIncludeNamespacePrefixes(), - m_aFactory(utl::getProcessServiceFactory()) -{ - initializePropertySet(); -} - -Submission::~Submission() throw() -{ -} - -Reference<XModel> Submission::getModel() const -{ - return mxModel; -} - -void Submission::setModel( const Reference<XModel>& xModel ) -{ - mxModel = xModel; -} - -OUString Submission::getID() const -{ - return msID; -} - -void Submission::setID( const OUString& sID ) -{ - msID = sID; -} - -OUString Submission::getBind() const -{ - return msBind; -} - -void Submission::setBind( const OUString& sBind ) -{ - msBind = sBind; -} - -OUString Submission::getRef() const -{ - return maRef.getExpression(); -} - -void Submission::setRef( const OUString& sRef ) -{ - maRef.setExpression( sRef ); -} - -OUString Submission::getAction() const -{ - return msAction; -} - -void Submission::setAction( const OUString& sAction ) -{ - msAction = sAction; -} - -OUString Submission::getMethod() const -{ - return msMethod; -} - -void Submission::setMethod( const OUString& sMethod ) -{ - msMethod = sMethod; -} - -OUString Submission::getVersion() const -{ - return msVersion; -} - -void Submission::setVersion( const OUString& sVersion ) -{ - msVersion = sVersion; -} - -bool Submission::getIndent() const -{ - return mbIndent; -} - -void Submission::setIndent( bool bIndent ) -{ - mbIndent = bIndent; -} - -OUString Submission::getMediaType() const -{ - return msMediaType; -} - -void Submission::setMediaType( const OUString& sMediaType ) -{ - msMediaType = sMediaType; -} - -OUString Submission::getEncoding() const -{ - return msEncoding; -} - -void Submission::setEncoding( const OUString& sEncoding ) -{ - msEncoding = sEncoding; -} - -bool Submission::getOmitXmlDeclaration() const -{ - return mbOmitXmlDeclaration; -} - -void Submission::setOmitXmlDeclaration( bool bOmitXmlDeclaration ) -{ - mbOmitXmlDeclaration = bOmitXmlDeclaration; -} - -bool Submission::getStandalone() const -{ - return mbStandalone; -} - -void Submission::setStandalone( bool bStandalone ) -{ - mbStandalone = bStandalone; -} - -OUString Submission::getCDataSectionElement() const -{ - return msCDataSectionElement; -} - -void Submission::setCDataSectionElement( const OUString& sCDataSectionElement ) -{ - msCDataSectionElement = sCDataSectionElement; -} - -OUString Submission::getReplace() const -{ - return msReplace; -} - -void Submission::setReplace( const OUString& sReplace ) -{ - msReplace = sReplace; -} - -OUString Submission::getSeparator() const -{ - return msSeparator; -} - -void Submission::setSeparator( const OUString& sSeparator ) -{ - msSeparator = sSeparator; -} - -Sequence< OUString > Submission::getIncludeNamespacePrefixes() const -{ - return msIncludeNamespacePrefixes; -} - -void Submission::setIncludeNamespacePrefixes( const Sequence< OUString >& rIncludeNamespacePrefixes ) -{ - msIncludeNamespacePrefixes = rIncludeNamespacePrefixes; -} - -bool Submission::doSubmit( const Reference< XInteractionHandler >& xHandler ) -{ - liveCheck(); - - // construct XXPathObject for submission doc; use bind in preference of ref - EvaluationContext aEvalContext; - ComputedExpression aExpression; - if( msBind.getLength() != 0 ) - { - Binding* pBinding = Binding::getBinding( mxModel->getBinding(msBind) ); - if( pBinding != NULL ) - { - aExpression.setExpression( pBinding->getBindingExpression() ); - aEvalContext = pBinding->getEvaluationContext(); - } - // TODO: else: illegal binding name -> raise error - } - else if( maRef.getExpression().getLength() != 0 ) - { - aExpression.setExpression( maRef.getExpression() ); - aEvalContext = Model::getModel( mxModel )->getEvaluationContext(); - } - else - { - aExpression.setExpression( OUSTRING( "/" ) ); - aEvalContext = Model::getModel( mxModel )->getEvaluationContext(); - } - aExpression.evaluate( aEvalContext ); - Reference<XXPathObject> xResult = aExpression.getXPath(); - OSL_ENSURE( xResult.is(), "no result?" ); - - // early out if we have not obtained any result - if( ! xResult.is() ) - return false; - - - // Reference< XNodeList > aList = xResult->getNodeList(); - OUString aMethod = getMethod(); - - // strip whitespace-only text node for get submission - Reference< XDocumentFragment > aFragment = createSubmissionDocument( - xResult, aMethod.equalsIgnoreAsciiCaseAscii("get")); - - // submit result; set encoding, etc. - auto_ptr<CSubmission> xSubmission; - if (aMethod.equalsIgnoreAsciiCaseAscii("PUT")) - xSubmission = auto_ptr<CSubmission>( - new CSubmissionPut( getAction(), aFragment)); - else if (aMethod.equalsIgnoreAsciiCaseAscii("post")) - xSubmission = auto_ptr<CSubmission>( - new CSubmissionPost( getAction(), aFragment)); - else if (aMethod.equalsIgnoreAsciiCaseAscii("get")) - xSubmission = auto_ptr<CSubmission>( - new CSubmissionGet( getAction(), aFragment)); - else - { - OSL_FAIL("Unsupported xforms submission method"); - return false; - } - - xSubmission->setEncoding(getEncoding()); - CSubmission::SubmissionResult aResult = xSubmission->submit( xHandler ); - - if (aResult == CSubmission::SUCCESS) - { - Reference< XDocument > aInstanceDoc = getInstanceDocument(xResult); - aResult = xSubmission->replace(getReplace(), aInstanceDoc, Reference< XFrame >()); - } - - return ( aResult == CSubmission::SUCCESS ); -} - -Sequence<sal_Int8> Submission::getUnoTunnelID() -{ - static cppu::OImplementationId aImplementationId; - return aImplementationId.getImplementationId(); -} - -Submission* Submission::getSubmission( - const Reference<XPropertySet>& xPropertySet ) -{ - Reference<XUnoTunnel> xTunnel( xPropertySet, UNO_QUERY ); - return xTunnel.is() - ? reinterpret_cast<Submission*>( - xTunnel->getSomething( getUnoTunnelID() ) ) - : NULL; -} - - - - - - -void Submission::liveCheck() - throw( RuntimeException ) -{ - bool bValid = mxModel.is(); - - if( ! bValid ) - throw RuntimeException(); -} - -Model* Submission::getModelImpl() const -{ - Model* pModel = NULL; - if( mxModel.is() ) - pModel = Model::getModel( mxModel ); - return pModel; -} - - -// -// Property-Set implementation -// - -#define HANDLE_ID 0 -#define HANDLE_Bind 1 -#define HANDLE_Ref 2 -#define HANDLE_Action 3 -#define HANDLE_Method 4 -#define HANDLE_Version 5 -#define HANDLE_Indent 6 -#define HANDLE_MediaType 7 -#define HANDLE_Encoding 8 -#define HANDLE_OmitXmlDeclaration 9 -#define HANDLE_Standalone 10 -#define HANDLE_CDataSectionElement 11 -#define HANDLE_Replace 12 -#define HANDLE_Separator 13 -#define HANDLE_IncludeNamespacePrefixes 14 -#define HANDLE_Model 15 - -#define REGISTER_PROPERTY( property, type ) \ - registerProperty( PROPERTY( property, type ), \ - new DirectPropertyAccessor< Submission, type >( this, &Submission::set##property, &Submission::get##property ) ); - -#define REGISTER_PROPERTY_BOOL( property ) \ - registerProperty( PROPERTY( property, bool ), \ - new BooleanPropertyAccessor< Submission, bool >( this, &Submission::set##property, &Submission::get##property ) ); - -void Submission::initializePropertySet() -{ - REGISTER_PROPERTY ( ID, OUString ); - REGISTER_PROPERTY ( Bind, OUString ); - REGISTER_PROPERTY ( Ref, OUString ); - REGISTER_PROPERTY ( Action, OUString ); - REGISTER_PROPERTY ( Method, OUString ); - REGISTER_PROPERTY ( Version, OUString ); - REGISTER_PROPERTY_BOOL( Indent ); - REGISTER_PROPERTY ( MediaType, OUString ); - REGISTER_PROPERTY ( Encoding, OUString ); - REGISTER_PROPERTY_BOOL( OmitXmlDeclaration ); - REGISTER_PROPERTY_BOOL( Standalone ); - REGISTER_PROPERTY ( CDataSectionElement, OUString ); - REGISTER_PROPERTY ( Replace, OUString ); - REGISTER_PROPERTY ( Separator, OUString ); - REGISTER_PROPERTY ( IncludeNamespacePrefixes, Sequence< OUString > ); - REGISTER_PROPERTY ( Model, Reference<XModel> ); - - initializePropertyValueCache( HANDLE_Indent ); - initializePropertyValueCache( HANDLE_OmitXmlDeclaration ); - initializePropertyValueCache( HANDLE_Standalone ); -} - -sal_Bool SAL_CALL Submission::convertFastPropertyValue( - Any& rConvertedValue, Any& rOldValue, sal_Int32 nHandle, const Any& rValue ) - throw ( IllegalArgumentException ) -{ - if ( nHandle == HANDLE_IncludeNamespacePrefixes ) - { - // for convinience reasons (????), we accept a string which contains - // a comma-separated list of namespace prefixes - ::rtl::OUString sTokenList; - if ( rValue >>= sTokenList ) - { - std::vector< OUString > aPrefixes; - sal_Int32 p = 0; - while ( p >= 0 ) - aPrefixes.push_back( sTokenList.getToken( 0, ',', p ) ); - - Sequence< ::rtl::OUString > aConvertedPrefixes( &aPrefixes[0], aPrefixes.size() ); - return PropertySetBase::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, makeAny( aConvertedPrefixes ) ); - } - } - - return PropertySetBase::convertFastPropertyValue( rConvertedValue, rOldValue, nHandle, rValue ); -} - -OUString SAL_CALL Submission::getName() - throw( RuntimeException ) -{ - return getID(); -} - -void SAL_CALL Submission::setName( const OUString& sID ) - throw( RuntimeException ) -{ - setID( sID ); -} - - - -sal_Int64 SAL_CALL Submission::getSomething( - const Sequence<sal_Int8>& aId ) - throw( RuntimeException ) -{ - return ( aId == getUnoTunnelID() ) ? reinterpret_cast<sal_Int64>(this) : 0; -} - - -OUString lcl_message( const OUString& rID, const OUString& rText ) -{ - OUStringBuffer aMessage; - aMessage.append( OUSTRING("XForms submission '") ); - aMessage.append( rID ); - aMessage.append( OUSTRING("' failed") ); - aMessage.append( rText ); - aMessage.append( OUSTRING(".") ); - return aMessage.makeStringAndClear(); -} - -void SAL_CALL Submission::submitWithInteraction( - const Reference<XInteractionHandler>& _rxHandler ) - throw ( VetoException, - WrappedTargetException, - RuntimeException ) -{ - // as long as this class is not really threadsafe, we need to copy - // the members we're interested in - Reference< XModel > xModel( mxModel ); - ::rtl::OUString sID( msID ); - - if ( !xModel.is() || !msID.getLength() ) - throw RuntimeException( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "This is not a valid submission object." ) ), - *this - ); - - Model* pModel = Model::getModel( xModel ); - OSL_ENSURE( pModel != NULL, "illegal model?" ); - - // #i36765# #i47248# warning on submission of illegal data - // check for validity (and query user if invalid) - bool bValid = pModel->isValid(); - if( ! bValid ) - { - InvalidDataOnSubmitException aInvalidDataException( - lcl_message(sID, OUSTRING(" due to invalid data") ), *this ); - - if( _rxHandler.is() ) - { - // labouriously create interaction request - comphelper::OInteractionRequest* pRequest - = new comphelper::OInteractionRequest( - makeAny( aInvalidDataException ) ); - Reference<XInteractionRequest> xRequest = pRequest; - - comphelper::OInteractionApprove* pContinue - = new comphelper::OInteractionApprove(); - Reference<XInteractionContinuation> xContinue = pContinue; - pRequest->addContinuation( xContinue ); - - comphelper::OInteractionDisapprove* pCancel - = new comphelper::OInteractionDisapprove(); - Reference<XInteractionContinuation> xCancel = pCancel; - pRequest->addContinuation( xCancel ); - - // ask the handler... - _rxHandler->handle( xRequest ); - OSL_ENSURE( pContinue->wasSelected() || pCancel->wasSelected(), - "handler didn't select" ); - - // and continue, if user chose 'continue' - if( pContinue->wasSelected() ) - bValid = true; - } - - // abort if invalid (and user didn't tell us to continue) - if( ! bValid ) - throw aInvalidDataException; - } - - // attempt submission - bool bResult = false; - try - { - bResult = doSubmit( _rxHandler ); - } - catch( const VetoException& ) - { - OSL_FAIL( "Model::submit: Hmm. How can a single submission have a veto right?" ); - // allowed to leave - throw; - } - catch( const Exception& e ) - { - // exception caught: re-throw as wrapped target exception - throw WrappedTargetException( - lcl_message( sID, OUSTRING(" due to exception being thrown") ), - *this, makeAny( e ) ); - } - - if( bResult ) - { - mxModel->rebuild(); - } - else - { - // other failure: throw wrapped target exception, too. - throw WrappedTargetException( - lcl_message( sID, OUString() ), *this, Any() ); - } -} - -void SAL_CALL Submission::submit( ) throw ( VetoException, WrappedTargetException, RuntimeException ) -{ - submitWithInteraction( NULL ); -} - -void SAL_CALL Submission::addSubmissionVetoListener( const Reference< XSubmissionVetoListener >& /*listener*/ ) throw (NoSupportException, RuntimeException) -{ - // TODO - throw NoSupportException(); -} - -void SAL_CALL Submission::removeSubmissionVetoListener( const Reference< XSubmissionVetoListener >& /*listener*/ ) throw (NoSupportException, RuntimeException) -{ - // TODO - throw NoSupportException(); -} - -static sal_Bool _isIgnorable(const Reference< XNode >& aNode) -{ - // ignore whitespace-only textnodes - if (aNode->getNodeType() == NodeType_TEXT_NODE) - { - OUString aTrimmedValue = aNode->getNodeValue().trim(); - if (aTrimmedValue.getLength() == 0) return sal_True; - } - - return sal_False; -} - -// recursively copy relevant nodes from A to B -static void _cloneNodes(Model& aModel, const Reference< XNode >& dstParent, const Reference< XNode >& source, sal_Bool bRemoveWSNodes) -{ - if (!source.is()) return; - - Reference< XNode > cur = source; - Reference< XDocument > dstDoc = dstParent->getOwnerDocument(); - Reference< XNode > imported; - - if (cur.is()) - { - // is this node relevant? - MIP mip = aModel.queryMIP(cur); - if(mip.isRelevant() && !(bRemoveWSNodes && _isIgnorable(cur))) - { - imported = dstDoc->importNode(cur, sal_False); - imported = dstParent->appendChild(imported); - // append source children to new imported parent - for( cur = cur->getFirstChild(); cur.is(); cur = cur->getNextSibling() ) - _cloneNodes(aModel, imported, cur, bRemoveWSNodes); - } - } -} -Reference< XDocument > Submission::getInstanceDocument(const Reference< XXPathObject >& aObj) -{ - using namespace com::sun::star::xml::xpath; - // result - Reference< XDocument > aDocument; - - if (aObj->getObjectType() == XPathObjectType_XPATH_NODESET) - { - Reference< XNodeList > aList = aObj->getNodeList(); - if (aList->getLength() > 0) - aDocument = aList->item(0)->getOwnerDocument(); - } - return aDocument; -} - -Reference< XDocumentFragment > Submission::createSubmissionDocument(const Reference< XXPathObject >& aObj, sal_Bool bRemoveWSNodes) -{ - using namespace com::sun::star::xml::xpath; - Reference< XDocumentBuilder > aDocBuilder(m_aFactory->createInstance( - OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.dom.DocumentBuilder"))), UNO_QUERY); - Reference< XDocument > aDocument = aDocBuilder->newDocument(); - Reference< XDocumentFragment > aFragment = aDocument->createDocumentFragment(); - - // - if (aObj->getObjectType() == XPathObjectType_XPATH_NODESET) - { - Reference< XNodeList > aList = aObj->getNodeList(); - Reference< XNode > aListItem; - for (sal_Int32 i=0; i < aList->getLength(); i++) - { - aListItem = aList->item(i); - if (aListItem->getNodeType()==NodeType_DOCUMENT_NODE) - aListItem = Reference< XNode >( - (Reference< XDocument >(aListItem, UNO_QUERY))->getDocumentElement(), UNO_QUERY); - // copy relevant nodes from instance into fragment - _cloneNodes(*getModelImpl(), Reference< XNode >(aFragment, UNO_QUERY), aListItem, bRemoveWSNodes); - } - } - return aFragment; -} - -// some forwarding: XPropertySet is implemented in our base class, -// but also available as base of XSubmission -Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL Submission::getPropertySetInfo( ) throw(RuntimeException) -{ - return PropertySetBase::getPropertySetInfo(); -} -void SAL_CALL Submission::setPropertyValue( const ::rtl::OUString& aPropertyName, const Any& aValue ) throw(UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) -{ - PropertySetBase::setPropertyValue( aPropertyName, aValue ); -} -Any SAL_CALL Submission::getPropertyValue( const ::rtl::OUString& PropertyName ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) -{ - return PropertySetBase::getPropertyValue( PropertyName ); -} -void SAL_CALL Submission::addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) -{ - PropertySetBase::addPropertyChangeListener( aPropertyName, xListener ); -} -void SAL_CALL Submission::removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) -{ - PropertySetBase::removePropertyChangeListener( aPropertyName, aListener ); -} -void SAL_CALL Submission::addVetoableChangeListener( const ::rtl::OUString& PropertyName, const Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) -{ - PropertySetBase::addVetoableChangeListener( PropertyName, aListener ); -} -void SAL_CALL Submission::removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) -{ - PropertySetBase::removeVetoableChangeListener( PropertyName, aListener ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission.hxx b/forms/source/xforms/submission.hxx deleted file mode 100644 index 3077a946a..000000000 --- a/forms/source/xforms/submission.hxx +++ /dev/null @@ -1,279 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _SUBMISSION_HXX -#define _SUBMISSION_HXX - - -// includes for parent classes -#include <cppuhelper/implbase2.hxx> -#include <propertysetbase.hxx> -#include <com/sun/star/util/XModifyBroadcaster.hpp> -#include <com/sun/star/container/XNamed.hpp> -#include <com/sun/star/xml/dom/events/XEventListener.hpp> -#include <com/sun/star/lang/XUnoTunnel.hpp> -#include <com/sun/star/xml/dom/XNode.hpp> -#include <com/sun/star/xml/dom/XDocument.hpp> -#include <com/sun/star/xml/dom/XDocumentFragment.hpp> -#include <com/sun/star/xml/xpath/XXPathObject.hpp> -#include <com/sun/star/xforms/XSubmission.hpp> - -// includes for member variables -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <computedexpression.hxx> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> - -// forward declaractions -namespace com { namespace sun { namespace star { - namespace xforms { class XModel; } - namespace uno { class Any; } - namespace beans { class UnknownPropertyException; - class PropertyVetoException; } - namespace lang { class IllegalArgumentException; - class WrappedTargetException; } -} } } -namespace xforms { class Model; } - - -namespace xforms -{ - -/** An XForms submission. - * - * See http://www.w3.org/TR/xforms/ for more information. - */ -typedef cppu::ImplInheritanceHelper2< - PropertySetBase, - com::sun::star::lang::XUnoTunnel, - com::sun::star::xforms::XSubmission -> Submission_t; - -class Submission : public Submission_t -{ - // submission properties - rtl::OUString msID; - rtl::OUString msBind; - ComputedExpression maRef; - rtl::OUString msAction; - rtl::OUString msMethod; - rtl::OUString msVersion; - bool mbIndent; - rtl::OUString msMediaType; - rtl::OUString msEncoding; - bool mbOmitXmlDeclaration; - bool mbStandalone; - rtl::OUString msCDataSectionElement; - rtl::OUString msReplace; - rtl::OUString msSeparator; - com::sun::star::uno::Sequence< rtl::OUString > msIncludeNamespacePrefixes; - -private: - - /// the Model to which this Submission belongs; may be NULL - com::sun::star::uno::Reference<com::sun::star::xforms::XModel> mxModel; - - // this will extract the document from the model that will be submitted - com::sun::star::uno::Reference< com::sun::star::xml::dom::XDocumentFragment > - createSubmissionDocument(const com::sun::star::uno::Reference< com::sun::star::xml::xpath::XXPathObject >& aObject, - sal_Bool bRemoveWSNodes = sal_False); - com::sun::star::uno::Reference< com::sun::star::xml::dom::XDocument > - getInstanceDocument(const com::sun::star::uno::Reference< com::sun::star::xml::xpath::XXPathObject >& aObject); - - com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory > m_aFactory; -public: - Submission(); - virtual ~Submission() throw(); - - // - // property methods: get/set value - // - - /// get XForms model - com::sun::star::uno::Reference<com::sun::star::xforms::XModel> - getModel() const; - - /// set XForms model - void setModel( - const com::sun::star::uno::Reference<com::sun::star::xforms::XModel>& ); - - rtl::OUString getID() const; /// get ID for this submission - void setID( const rtl::OUString& ); /// set ID for this submission - - rtl::OUString getBind() const; - void setBind( const rtl::OUString& ); - - rtl::OUString getRef() const; - void setRef( const rtl::OUString& ); - - rtl::OUString getAction() const; - void setAction( const rtl::OUString& ); - - rtl::OUString getMethod() const; - void setMethod( const rtl::OUString& ); - - rtl::OUString getVersion() const; - void setVersion( const rtl::OUString& ); - - bool getIndent() const; - void setIndent( bool ); - - rtl::OUString getMediaType() const; - void setMediaType( const rtl::OUString& ); - - rtl::OUString getEncoding() const; - void setEncoding( const rtl::OUString& ); - - bool getOmitXmlDeclaration() const; - void setOmitXmlDeclaration( bool ); - - bool getStandalone() const; - void setStandalone( bool ); - - rtl::OUString getCDataSectionElement() const; - void setCDataSectionElement( const rtl::OUString& ); - - rtl::OUString getReplace() const; - void setReplace( const rtl::OUString& ); - - rtl::OUString getSeparator() const; - void setSeparator( const rtl::OUString& ); - - com::sun::star::uno::Sequence< rtl::OUString > getIncludeNamespacePrefixes() const; - void setIncludeNamespacePrefixes( const com::sun::star::uno::Sequence< rtl::OUString >& ); - - - /** perform the submission - * @returns if submission was successful */ - bool doSubmit( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& aHandler ); - - - /// release the model (note: Binding is unusable without model) - void releaseModel(); - - - // helpers for UNO tunnel - static com::sun::star::uno::Sequence<sal_Int8> getUnoTunnelID(); - static Submission* getSubmission( const com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet>& ); - - - -private: - - /// check whether object is live, and throw suitable exception if not - /// (to be used be API methods before acting on the object) - void liveCheck() - throw( com::sun::star::uno::RuntimeException ); - - /// get the model implementation - xforms::Model* getModelImpl() const; - xforms::Model* getModelImpl( const com::sun::star::uno::Reference<com::sun::star::xforms::XModel>& xModel ) const; - - - -protected: - - // - // XPropertySet & friends: - // implement abstract methods from PropertySetHelper - // - - virtual sal_Bool SAL_CALL convertFastPropertyValue( - com::sun::star::uno::Any& rConvertedValue, - com::sun::star::uno::Any& rOldValue, - sal_Int32 nHandle, - const com::sun::star::uno::Any& rValue ) - throw ( com::sun::star::lang::IllegalArgumentException ); - -private: - void initializePropertySet(); - - -public: - - // - // XNamed: - // get/set name - // - - virtual rtl::OUString SAL_CALL getName() - throw( com::sun::star::uno::RuntimeException ); - - virtual void SAL_CALL setName( const rtl::OUString& ) - throw( com::sun::star::uno::RuntimeException ); - - - - // - // XUnoTunnel - // - - virtual sal_Int64 SAL_CALL getSomething( - const com::sun::star::uno::Sequence<sal_Int8>& ) - throw( com::sun::star::uno::RuntimeException ); - - - // - // XSubmission - // - - virtual void SAL_CALL submit( ) - throw ( com::sun::star::util::VetoException, - com::sun::star::lang::WrappedTargetException, - com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL submitWithInteraction( - const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& aHandler ) - throw ( com::sun::star::util::VetoException, - com::sun::star::lang::WrappedTargetException, - com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL addSubmissionVetoListener( - const ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmissionVetoListener >& listener ) - throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeSubmissionVetoListener( - const ::com::sun::star::uno::Reference< ::com::sun::star::form::submission::XSubmissionVetoListener >& listener ) - throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); - - // - // XPropertySet - // (need to disambiguate this) - - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); -}; - - -} // namespace xforms - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/replace.cxx b/forms/source/xforms/submission/replace.cxx deleted file mode 100644 index 07794a412..000000000 --- a/forms/source/xforms/submission/replace.cxx +++ /dev/null @@ -1,145 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include <memory> -#include "submission.hxx" -#include "serialization_app_xml.hxx" - -#include <rtl/ustring.hxx> -#include <rtl/string.hxx> - -#include <unotools/processfactory.hxx> -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/xml/dom/XDocument.hpp> -#include <com/sun/star/xml/dom/XDocumentBuilder.hpp> -#include <com/sun/star/frame/XComponentLoader.hpp> -#include <com/sun/star/frame/FrameSearchFlag.hpp> -#include <com/sun/star/beans/PropertyValue.hpp> -#include <ucbhelper/content.hxx> - -using namespace com::sun::star::uno; -using namespace com::sun::star::ucb; -using namespace com::sun::star::frame; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; -using namespace com::sun::star::task; -using namespace com::sun::star::xml::dom; - -CSubmission::SubmissionResult CSubmission::replace(const ::rtl::OUString& aReplace, const Reference<XDocument>& aDocument, const Reference<XFrame>& aFrame) -{ - if (!m_aResultStream.is()) - return CSubmission::UNKNOWN_ERROR; - - try { - Reference< XMultiServiceFactory > xFactory = utl::getProcessServiceFactory(); - if (aReplace.equalsIgnoreAsciiCaseAscii("all") || aReplace.equalsIgnoreAsciiCaseAscii("document")) { - Reference< XComponentLoader > xLoader; - if (aFrame.is()) - xLoader = Reference< XComponentLoader >(aFrame, UNO_QUERY); - - if (!xLoader.is()) - xLoader = Reference< XComponentLoader >(xFactory->createInstance( - ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop") ) ), UNO_QUERY_THROW); - - // open the stream from the result... - // build media descriptor - Sequence< PropertyValue > descriptor(2); - descriptor[0] = PropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("InputStream") ), - -1, makeAny(m_aResultStream), PropertyState_DIRECT_VALUE); - descriptor[1] = PropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ReadOnly") ), - -1, makeAny(sal_True), PropertyState_DIRECT_VALUE); - - ::rtl::OUString aURL = m_aURLObj.GetMainURL(INetURLObject::NO_DECODE); - ::rtl::OUString aTarget = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_default") ); - xLoader->loadComponentFromURL(aURL, aTarget, FrameSearchFlag::ALL, descriptor); - - return CSubmission::SUCCESS; - - } else if (aReplace.equalsIgnoreAsciiCaseAscii("instance")) { - if (aDocument.is()) { - // parse the result stream into a new document - Reference< XDocumentBuilder > xBuilder(xFactory->createInstance( - ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.dom.DocumentBuilder") ) ), UNO_QUERY_THROW); - Reference< XDocument > aNewDocument = xBuilder->parse(m_aResultStream); - - if (aNewDocument.is()) { - // and replace the content of the current instance - Reference< XElement > oldRoot = aDocument->getDocumentElement(); - Reference< XElement > newRoot = aNewDocument->getDocumentElement(); - - Reference< XNode > aImportedNode = aDocument->importNode(Reference< XNode >(newRoot, UNO_QUERY_THROW), sal_True); - Reference< XNode >(aDocument, UNO_QUERY_THROW)->replaceChild(aImportedNode, Reference< XNode >(oldRoot, UNO_QUERY_THROW)); - return CSubmission::SUCCESS; - } else { - return CSubmission::UNKNOWN_ERROR; - } - } else { - // nothing to replace - return CSubmission::UNKNOWN_ERROR; - } - } else if (aReplace.equalsIgnoreAsciiCaseAscii("none")) { - // do nothing \o/ - return CSubmission::SUCCESS; - } - } catch (Exception& e) { - ::rtl::OString aMsg("Exception during replace:\n"); - aMsg += OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8); - OSL_FAIL(aMsg.getStr()); - } - return CSubmission::UNKNOWN_ERROR; -} -::std::auto_ptr< CSerialization > CSubmission::createSerialization(const Reference< XInteractionHandler >& _xHandler,Reference<XCommandEnvironment>& _rOutEnv) -{ - // PUT always uses application/xml - ::std::auto_ptr< CSerialization > apSerialization(new CSerializationAppXML()); - apSerialization->setSource(m_aFragment); - apSerialization->serialize(); - - // create a commandEnvironment and use the default interaction handler - CCommandEnvironmentHelper *pHelper = new CCommandEnvironmentHelper; - if( _xHandler.is() ) - pHelper->m_aInteractionHandler = _xHandler; - else - pHelper->m_aInteractionHandler = CSS::uno::Reference< XInteractionHandler >(m_aFactory->createInstance( - ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.task.InteractionHandler") ) ), UNO_QUERY); - OSL_ENSURE(pHelper->m_aInteractionHandler.is(), "failed to create IntreractionHandler"); - - CProgressHandlerHelper *pProgressHelper = new CProgressHandlerHelper; - pHelper->m_aProgressHandler = Reference< XProgressHandler >(pProgressHelper); - - // UCB has ownership of environment... - _rOutEnv = pHelper; - return apSerialization; -} - - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/serialization.hxx b/forms/source/xforms/submission/serialization.hxx deleted file mode 100644 index c1daa6eda..000000000 --- a/forms/source/xforms/submission/serialization.hxx +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef __SERIALIZATION_HXX -#define __SERIALIZATION_HXX - -#include <map> - -#include <sal/types.h> -#include <rtl/ustring.hxx> -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/beans/NamedValue.hpp> -#include <com/sun/star/io/XInputStream.hpp> -#include <com/sun/star/xml/xpath/XXPathObject.hpp> -#include <com/sun/star/xml/dom/XDocumentFragment.hpp> - -namespace CSS = com::sun::star; - -/** -Serialize an XObject -*/ - -typedef std::map<rtl::OUString, rtl::OUString> PropMap; - -class CSerialization -{ -protected: - CSS::uno::Reference< CSS::xml::dom::XDocumentFragment > m_aFragment; - PropMap m_properties; - -public: - virtual ~CSerialization() {} - - /** - sets the XObject that is to serialized - */ - virtual void setSource(const CSS::uno::Reference< CSS::xml::dom::XDocumentFragment >& aFragment) - { - m_aFragment = aFragment; - } - - /** - set the properties from the submission element - that control aspects of the serialization - eachs serialization may support individual properties - */ - void setProperties(const CSS::uno::Sequence< CSS::beans::NamedValue >& props) - { - m_properties.clear(); - rtl::OUString aValue; - for (sal_Int32 i=0; i<props.getLength(); i++) - { - if (props[i].Value >>= aValue) - m_properties.insert(PropMap::value_type(props[i].Name, aValue)); - } - } - - /** - start the serialization process - */ - virtual void serialize()=0; - - /** - get the serialized bytes. - reads up to buffer->getLength() bytes and returns the number of - bytes read. - returns -1 on error - */ - virtual CSS::uno::Reference< CSS::io::XInputStream > getInputStream() = 0; - -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/serialization_app_xml.cxx b/forms/source/xforms/submission/serialization_app_xml.cxx deleted file mode 100644 index 586a763ee..000000000 --- a/forms/source/xforms/submission/serialization_app_xml.cxx +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "serialization.hxx" -#include "serialization_app_xml.hxx" - -#include <unotools/processfactory.hxx> -#include <com/sun/star/xml/dom/XNode.hpp> -#include <com/sun/star/xml/dom/XDocument.hpp> -#include <com/sun/star/xml/dom/XNodeList.hpp> -#include <com/sun/star/xml/dom/NodeType.hpp> -#include <com/sun/star/lang/XUnoTunnel.hpp> -#include <com/sun/star/xml/xpath/XPathObjectType.hpp> - -#include <libxml/tree.h> - -CSerializationAppXML::CSerializationAppXML() - : m_aFactory(utl::getProcessServiceFactory()) - , m_aPipe(CSS::uno::Reference< CSS::io::XOutputStream > (m_aFactory->createInstance( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.io.Pipe") ) ), CSS::uno::UNO_QUERY)) -{ - OSL_ENSURE(m_aPipe.is(), "cannot create Pipe"); -} - -CSS::uno::Reference< CSS::io::XInputStream > -CSerializationAppXML::getInputStream() -{ - // The pipes output is provided through it's - // XOutputStream interface aspect - return CSS::uno::Reference< CSS::io::XInputStream >(m_aPipe, CSS::uno::UNO_QUERY); -} - -void -CSerializationAppXML::serialize_node(const CSS::uno::Reference< CSS::xml::dom::XNode >& rNode) -{ - CSS::uno::Reference< CSS::xml::dom::XNode > aNode = rNode; - if (aNode->getNodeType() == CSS::xml::dom::NodeType_DOCUMENT_NODE) - { - CSS::uno::Reference< CSS::xml::dom::XDocument > aDoc(rNode, CSS::uno::UNO_QUERY_THROW); - aNode = CSS::uno::Reference< CSS::xml::dom::XNode >(aDoc->getDocumentElement(), CSS::uno::UNO_QUERY_THROW); - } - if (aNode->getNodeType() != CSS::xml::dom::NodeType_ELEMENT_NODE) - return; - - // clone the node to a new document and serialize that document - CSS::uno::Reference< CSS::lang::XUnoTunnel > aTunnel(aNode, CSS::uno::UNO_QUERY); - if (aTunnel.is()) - { - xmlNodePtr aNodePtr = reinterpret_cast< xmlNodePtr >( aTunnel->getSomething(CSS::uno::Sequence< sal_Int8 >()) ); - xmlDocPtr aDocPtr = xmlNewDoc((xmlChar*)"1.0"); - xmlNodePtr aDocNodePtr = xmlDocCopyNode(aNodePtr, aDocPtr, 1); - if (aDocNodePtr != NULL) { - xmlAddChild((xmlNodePtr)aDocPtr, aDocNodePtr); - xmlChar *buffer = NULL; - sal_Int32 size = 0; - xmlDocDumpMemory(aDocPtr, &buffer, (int*)&size); - - // write the xml into the pipe through it's XOutputStream interface - m_aPipe->writeBytes(CSS::uno::Sequence< sal_Int8 >((sal_Int8*)buffer, size)); - xmlFree(buffer); - } - - } else { - // can't get tunnel to native backend - // logic for generic implementation could be implemented here... - OSL_FAIL("unkown dom implementation, cannot serialize"); - return; - } -} - -void -CSerializationAppXML::serialize() -{ - if (!m_aFragment.is()) return; - - CSS::uno::Reference< CSS::xml::dom::XNode > cur = m_aFragment->getFirstChild(); - while (cur.is()) - { - serialize_node(cur); - cur = cur->getNextSibling(); - } - m_aPipe->closeOutput(); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/serialization_app_xml.hxx b/forms/source/xforms/submission/serialization_app_xml.hxx deleted file mode 100644 index 406d5aa59..000000000 --- a/forms/source/xforms/submission/serialization_app_xml.hxx +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef __SERIALIZATION_APP_XML_HXX -#define __SERIALIZATION_APP_XML_HXX - -#include <com/sun/star/io/XOutputStream.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> - -#include "serialization.hxx" - - -class CSerializationAppXML : public CSerialization -{ -private: - CSS::uno::Reference< CSS::lang::XMultiServiceFactory > m_aFactory; - CSS::uno::Reference< CSS::io::XOutputStream > m_aPipe; - - void serialize_node(const CSS::uno::Reference< CSS::xml::dom::XNode >& aNode); - void serialize_nodeset(); - -public: - CSerializationAppXML(); - - virtual void serialize(); - // virtual void setSource(const CSS::uno::Reference< CSS::xml::xpath::XXPathObject >& object); - // virtual void setProperties(const CSS::uno::Sequence< CSS::beans::NamedValue >& props); - virtual CSS::uno::Reference< CSS::io::XInputStream > getInputStream(); -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/serialization_urlencoded.cxx b/forms/source/xforms/submission/serialization_urlencoded.cxx deleted file mode 100644 index 424ca6eab..000000000 --- a/forms/source/xforms/submission/serialization_urlencoded.cxx +++ /dev/null @@ -1,196 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include <com/sun/star/xml/xpath/XPathObjectType.hpp> -#include <com/sun/star/xml/dom/XNode.hpp> -#include <com/sun/star/xml/dom/XText.hpp> -#include <com/sun/star/xml/dom/XNodeList.hpp> -#include <com/sun/star/xml/dom/NodeType.hpp> - -#include <rtl/ustrbuf.hxx> -#include <rtl/strbuf.hxx> -#include <unotools/processfactory.hxx> - -#include <stdio.h> - -#include "serialization_urlencoded.hxx" - -using namespace utl; -using namespace CSS::uno; -using namespace CSS::io; -using namespace CSS::xml::xpath; -using namespace CSS::xml::dom; - -CSerializationURLEncoded::CSerializationURLEncoded() - : m_aFactory(getProcessServiceFactory()) - , m_aPipe(Reference< XOutputStream > (m_aFactory->createInstance( - ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.io.Pipe") ) ), UNO_QUERY)) -{ -} - - -/* - rfc2396 - reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | - "$" | "," - mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" - unreserved = alphanum | mark -*/ -sal_Bool CSerializationURLEncoded::is_unreserved(sal_Char c) -{ - //digit? - if (c >= '0' && c <= '9') return sal_True; - if (c >= 'A' && c <= 'Z') return sal_True; - if (c >= 'a' && c <= 'z') return sal_True; - switch (c) { - case '-': - case '_': - case '.': - case '!': - case '~': - case '*': - case '\'': - case '(': - case ')': - return sal_True; - } - return sal_False; -} -void CSerializationURLEncoded::encode_and_append(const ::rtl::OUString& aString, ::rtl::OStringBuffer& aBuffer) -{ - ::rtl::OString utf8String = OUStringToOString(aString, RTL_TEXTENCODING_UTF8); - const sal_uInt8 *pString = reinterpret_cast< const sal_uInt8 * >( utf8String.getStr() ); - sal_Char tmpChar[4]; tmpChar[3] = 0; - - while( *pString != 0) - { - if( *pString < 0x80 ) - { - if ( is_unreserved(*pString) ) { - aBuffer.append(*pString); - } else if (*pString == 0x20) { - aBuffer.append('+'); - } else if (*pString == 0x0d && *(pString+1) == 0x0a) { - aBuffer.append("%0D%0A"); - pString++; - } else if (*pString == 0x0a) { - aBuffer.append("%0D%0A"); - } else { - snprintf(tmpChar, 3, "%%%X", *pString % 0x100); - aBuffer.append(tmpChar); - } - } else { - snprintf(tmpChar, 3, "%%%X", *pString % 0x100); - aBuffer.append(tmpChar); - while (*pString >= 0x80) { - // continuation... - pString++; - snprintf(tmpChar, 3, "%%%X", *pString % 0x100); - aBuffer.append(tmpChar); - } - } - pString++; - } -} - -void CSerializationURLEncoded::serialize_node(const Reference< XNode >& aNode) -{ - // serialize recursive - // every element node E that has a text child T will be serialized in document order - // <E1>T1<E2>T2</E2></E1><E3>T3</E3> -> E1=T2&E2=T2&E3=T3 (En := local name) - - // this node - Reference< XNodeList > aChildList = aNode->getChildNodes(); - Reference< XNode > aChild; - // is this an element node? - if (aNode->getNodeType() == NodeType_ELEMENT_NODE) - { - ::rtl::OUString aName = aNode->getNodeName(); - // find any text children - ::rtl::OUStringBuffer aValue; - Reference< XText > aText; - for(sal_Int32 i=0; i < aChildList->getLength(); i++) - { - aChild = aChildList->item(i); - if (aChild->getNodeType() == NodeType_TEXT_NODE) - { - aText = Reference< XText >(aChild, UNO_QUERY); - aValue.append(aText->getData()); - } - } - - // found anything? - if (aValue.getLength() > 0) - { - ::rtl::OUString aUnencValue = aValue.makeStringAndClear(); - ::rtl::OStringBuffer aEncodedBuffer; - encode_and_append(aName, aEncodedBuffer); - aEncodedBuffer.append("="); - encode_and_append(aUnencValue, aEncodedBuffer); - aEncodedBuffer.append("&"); - sal_Int8 *pData = (sal_Int8*)aEncodedBuffer.getStr(); - Sequence< sal_Int8 > sData(pData, aEncodedBuffer.getLength()); - m_aPipe->writeBytes(sData); - } - } - - // element children... - for(sal_Int32 i=0; i < aChildList->getLength(); i++) - { - aChild = aChildList->item(i); - // if this is an element node, it might be a candidate for serialization - if (aChild.is() && aChild->getNodeType() == NodeType_ELEMENT_NODE) - serialize_node(aChild); - } -} - -void CSerializationURLEncoded::serialize() -{ - - // output stream to the pipe buffer - Reference< XOutputStream > out(m_aPipe, UNO_QUERY); - - CSS::uno::Reference< CSS::xml::dom::XNode > cur = m_aFragment->getFirstChild(); - while (cur.is()) - { - serialize_node(cur); - cur = cur->getNextSibling(); - } - m_aPipe->closeOutput(); -} - -Reference< XInputStream > CSerializationURLEncoded::getInputStream() -{ - return Reference< XInputStream >(m_aPipe, UNO_QUERY); -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/serialization_urlencoded.hxx b/forms/source/xforms/submission/serialization_urlencoded.hxx deleted file mode 100644 index b3501762a..000000000 --- a/forms/source/xforms/submission/serialization_urlencoded.hxx +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef __SERIALIZATION_URLENCODED_HXX -#define __SERIALIZATION_URLENCODED_HXX - -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/io/XInputStream.hpp> -#include <com/sun/star/io/XOutputStream.hpp> - -#include <rtl/strbuf.hxx> - -#include "serialization.hxx" - -class CSerializationURLEncoded : public CSerialization -{ -private: - CSS::uno::Reference< CSS::lang::XMultiServiceFactory > m_aFactory; - CSS::uno::Reference< CSS::io::XOutputStream > m_aPipe; - - sal_Bool is_unreserved(sal_Char); - void encode_and_append(const rtl::OUString& aString, rtl::OStringBuffer& aBuffer); - void serialize_node(const CSS::uno::Reference< CSS::xml::dom::XNode >& aNode); - void serialize_nodeset(); - -public: - CSerializationURLEncoded(); - virtual void serialize(); - virtual CSS::uno::Reference< CSS::io::XInputStream > getInputStream(); -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/submission.hxx b/forms/source/xforms/submission/submission.hxx deleted file mode 100644 index 098db603f..000000000 --- a/forms/source/xforms/submission/submission.hxx +++ /dev/null @@ -1,163 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef __SUBMISSION_HXX -#define __SUBMISSION_HXX - -#include <tools/urlobj.hxx> -#include <rtl/ustring.h> -#include <osl/conditn.hxx> -#include <osl/mutex.hxx> -#include <unotools/processfactory.hxx> -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/uno/Exception.hpp> -#include <com/sun/star/uno/RuntimeException.hpp> -#include <com/sun/star/xml/xpath/XXPathObject.hpp> -#include <com/sun/star/xml/dom/XDocumentFragment.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> - -#include <com/sun/star/ucb/XCommandEnvironment.hpp> -#include <com/sun/star/ucb/XProgressHandler.hpp> - -#include <com/sun/star/task/XInteractionHandler.hpp> - -#include <com/sun/star/frame/XFrame.hpp> - -#include <cppuhelper/implbase1.hxx> -#include <cppuhelper/implbase2.hxx> -#include <cppuhelper/implbase3.hxx> - -#include "serialization.hxx" - -namespace CSS = com::sun::star; - -class CSubmissionPut; -class CSubmissionPost; -class CSubmissionGet; - -class CCommandEnvironmentHelper : public cppu::WeakImplHelper1< CSS::ucb::XCommandEnvironment > -{ - friend class CSubmissionPut; - friend class CSubmissionPost; - friend class CSubmissionGet; - friend class CSubmission; - -protected: - CSS::uno::Reference< CSS::task::XInteractionHandler > m_aInteractionHandler; - CSS::uno::Reference< CSS::ucb::XProgressHandler > m_aProgressHandler; - -public: - virtual CSS::uno::Reference< CSS::task::XInteractionHandler > SAL_CALL getInteractionHandler() throw (CSS::uno::RuntimeException) - { - return m_aInteractionHandler; - } - virtual CSS::uno::Reference< CSS::ucb::XProgressHandler > SAL_CALL getProgressHandler() throw (CSS::uno::RuntimeException) - { - return m_aProgressHandler; - } -}; - -class CProgressHandlerHelper : public cppu::WeakImplHelper1< CSS::ucb::XProgressHandler > -{ - friend class CSubmissionPut; - friend class CSubmissionPost; - friend class CSubmissionGet; -protected: - osl::Condition m_cFinished; - osl::Mutex m_mLock; - sal_Int32 m_count; -public: - CProgressHandlerHelper() - : m_count(0) - {} - virtual void SAL_CALL push( const com::sun::star::uno::Any& /*aStatus*/) throw(com::sun::star::uno::RuntimeException) - { - m_mLock.acquire(); - m_count++; - m_mLock.release(); - } - virtual void SAL_CALL update(const com::sun::star::uno::Any& /*aStatus*/) throw(com::sun::star::uno::RuntimeException) - { - } - virtual void SAL_CALL pop() throw(com::sun::star::uno::RuntimeException) - { - m_mLock.acquire(); - m_count--; - if (m_count == 0) - m_cFinished.set(); - m_mLock.release(); - } -}; - -class CSubmission -{ - -protected: - INetURLObject m_aURLObj; - CSS::uno::Reference< CSS::xml::xpath::XXPathObject > m_aXPathObject; - CSS::uno::Reference< CSS::xml::dom::XDocumentFragment > m_aFragment; - CSS::uno::Reference< CSS::io::XInputStream > m_aResultStream; - CSS::uno::Reference< CSS::lang::XMultiServiceFactory > m_aFactory; - rtl::OUString m_aEncoding; - - ::std::auto_ptr< CSerialization > createSerialization(const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& aHandler - ,com::sun::star::uno::Reference<com::sun::star::ucb::XCommandEnvironment>& _rOutEnv); - -public: - enum SubmissionResult { - SUCCESS, - INVALID_METHOD, - INVALID_URL, - INVALID_ENCODING, - E_TRANSMISSION, - UNKNOWN_ERROR - }; - - CSubmission(const rtl::OUString& aURL, const CSS::uno::Reference< CSS::xml::dom::XDocumentFragment >& aFragment) - : m_aURLObj(aURL) - , m_aFragment(aFragment) - , m_aFactory(::utl::getProcessServiceFactory()) - {} - - virtual ~CSubmission() {} - - // virtual CSS::uno::Sequence< rtl::OUString > getSupportedEncodings() = 0; - virtual void setEncoding(const rtl::OUString& aEncoding) - { - m_aEncoding = aEncoding; - } - virtual SubmissionResult submit(const CSS::uno::Reference< CSS::task::XInteractionHandler >& ) = 0; - - virtual SubmissionResult replace(const rtl::OUString&, const CSS::uno::Reference< CSS::xml::dom::XDocument >&, const CSS::uno::Reference< CSS::frame::XFrame>&); - -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/submission_get.cxx b/forms/source/xforms/submission/submission_get.cxx deleted file mode 100644 index 55bf875f1..000000000 --- a/forms/source/xforms/submission/submission_get.cxx +++ /dev/null @@ -1,122 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include <memory> - -#include "submission_get.hxx" -#include "serialization_app_xml.hxx" -#include "serialization_urlencoded.hxx" - -#include <rtl/strbuf.hxx> -#include <rtl/string.hxx> -#include <osl/file.hxx> -#include <unotools/processfactory.hxx> -#include <ucbhelper/content.hxx> - -using namespace CSS::uno; -using namespace CSS::ucb; -using namespace CSS::task; -using namespace CSS::io; -using namespace osl; -using namespace ucbhelper; -using namespace std; - -using ::rtl::OUString; -using ::rtl::OStringToOUString; -using ::rtl::OStringBuffer; - - -CSubmissionGet::CSubmissionGet(const rtl::OUString& aURL, const CSS::uno::Reference< CSS::xml::dom::XDocumentFragment >& aFragment) - : CSubmission(aURL, aFragment) -{ -} - -CSubmission::SubmissionResult CSubmissionGet::submit(const CSS::uno::Reference< CSS::task::XInteractionHandler >& aInteractionHandler) -{ - // GET always uses apllicatin/x-www-formurlencoded - auto_ptr< CSerialization > apSerialization(new CSerializationURLEncoded()); - apSerialization->setSource(m_aFragment); - apSerialization->serialize(); - - CSS::uno::Reference< XInputStream > aInStream = apSerialization->getInputStream(); - - // create a commandEnvironment and use the default interaction handler - CCommandEnvironmentHelper *pHelper = new CCommandEnvironmentHelper; - if( aInteractionHandler.is() ) - pHelper->m_aInteractionHandler = aInteractionHandler; - else - pHelper->m_aInteractionHandler = CSS::uno::Reference< XInteractionHandler >(m_aFactory->createInstance( - OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.task.InteractionHandler"))), UNO_QUERY); - OSL_ENSURE(pHelper->m_aInteractionHandler.is(), "failed to create IntreractionHandler"); - CProgressHandlerHelper *pProgressHelper = new CProgressHandlerHelper; - pHelper->m_aProgressHandler = CSS::uno::Reference< XProgressHandler >(pProgressHelper); - - // UCB has ownership of environment... - CSS::uno::Reference< XCommandEnvironment > aEnvironment(pHelper); - - // append query string to the URL - try { - OStringBuffer aUTF8QueryURL(OUStringToOString(m_aURLObj.GetMainURL(INetURLObject::NO_DECODE), - RTL_TEXTENCODING_UTF8)); - OStringBuffer aQueryString; - - const sal_Int32 size = 1024; - sal_Int32 n = 0; - Sequence< sal_Int8 > aByteBuffer(size); - while ((n = aInStream->readSomeBytes(aByteBuffer, size-1)) != 0) - aQueryString.append((sal_Char*)aByteBuffer.getArray(), n); - if (aQueryString.getLength() > 0 && m_aURLObj.GetProtocol() != INET_PROT_FILE) - { - aUTF8QueryURL.append('?'); - aUTF8QueryURL.append(aQueryString.makeStringAndClear()); - } - OUString aQueryURL = OStringToOUString(aUTF8QueryURL.makeStringAndClear(), RTL_TEXTENCODING_UTF8); - ucbhelper::Content aContent(aQueryURL, aEnvironment); - CSS::uno::Reference< XOutputStream > aPipe(m_aFactory->createInstance( - OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.io.Pipe"))), UNO_QUERY_THROW); - aContent.openStream(aPipe); - // get reply - try { - m_aResultStream = aContent.openStream(); - } catch (Exception&) { - OSL_FAIL("Cannot open reply stream from content"); - } - } catch (Exception&) - { - // XXX - OSL_FAIL("Exception during UCB operatration."); - return UNKNOWN_ERROR; - } - - return SUCCESS; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/submission_get.hxx b/forms/source/xforms/submission/submission_get.hxx deleted file mode 100644 index 73d32e074..000000000 --- a/forms/source/xforms/submission/submission_get.hxx +++ /dev/null @@ -1,47 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef __SUBMISSION_GET_HXX -#define __SUBMISSION_GET_HXX - -#include <com/sun/star/lang/XMultiServiceFactory.hpp> - -#include "submission.hxx" - -class CSubmissionGet : public CSubmission -{ -private: - CSS::uno::Reference< CSS::lang::XMultiServiceFactory > m_aFactory; -public: - CSubmissionGet(const rtl::OUString& aURL, const CSS::uno::Reference< CSS::xml::dom::XDocumentFragment >& aFragment); - virtual SubmissionResult submit(const CSS::uno::Reference< CSS::task::XInteractionHandler >& aInteractionHandler); - -}; -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/submission_post.cxx b/forms/source/xforms/submission/submission_post.cxx deleted file mode 100644 index da353c832..000000000 --- a/forms/source/xforms/submission/submission_post.cxx +++ /dev/null @@ -1,95 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include <memory> - -#include "submission_post.hxx" -#include "serialization_app_xml.hxx" -#include "serialization_urlencoded.hxx" - -#include <osl/file.hxx> -#include <unotools/processfactory.hxx> -#include <ucbhelper/content.hxx> -#include <ucbhelper/activedatasink.hxx> -#include <com/sun/star/ucb/PostCommandArgument2.hpp> - -using namespace CSS::uno; -using namespace CSS::ucb; -using namespace CSS::task; -using namespace CSS::io; -using namespace osl; -using namespace ucbhelper; -using namespace std; - -using ::rtl::OUString; - - -CSubmissionPost::CSubmissionPost(const rtl::OUString& aURL, const CSS::uno::Reference< CSS::xml::dom::XDocumentFragment >& aFragment) - : CSubmission(aURL, aFragment) -{ -} - -CSubmission::SubmissionResult CSubmissionPost::submit(const CSS::uno::Reference< CSS::task::XInteractionHandler >& aInteractionHandler) -{ - // PUT always uses application/xml - CSS::uno::Reference< XCommandEnvironment > aEnvironment; - auto_ptr< CSerialization > apSerialization(createSerialization(aInteractionHandler,aEnvironment)); - - try { - ucbhelper::Content aContent(m_aURLObj.GetMainURL(INetURLObject::NO_DECODE), aEnvironment); - - // use post command - OUString aCommandName(RTL_CONSTASCII_USTRINGPARAM("post")); - PostCommandArgument2 aPostArgument; - aPostArgument.Source = apSerialization->getInputStream(); - CSS::uno::Reference< XActiveDataSink > aSink(new ucbhelper::ActiveDataSink); - aPostArgument.Sink = aSink; - aPostArgument.MediaType = OUString(RTL_CONSTASCII_USTRINGPARAM("application/xml")); - aPostArgument.Referer = OUString(); - Any aCommandArgument; - aCommandArgument <<= aPostArgument; - aContent.executeCommand( aCommandName, aCommandArgument); - - try { - m_aResultStream = aSink->getInputStream(); - } catch (Exception&) { - OSL_FAIL("Cannot open reply stream from content"); - } - } catch (Exception&) - { - OSL_FAIL("Exception during UCB operatration."); - return UNKNOWN_ERROR; - } - - return SUCCESS; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/submission_post.hxx b/forms/source/xforms/submission/submission_post.hxx deleted file mode 100644 index 542e12521..000000000 --- a/forms/source/xforms/submission/submission_post.hxx +++ /dev/null @@ -1,43 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef __SUBMISSION_POST_HXX -#define __SUBMISSION_POST_HXX - -#include "submission.hxx" - -class CSubmissionPost : public CSubmission -{ -public: - CSubmissionPost(const rtl::OUString& aURL, const CSS::uno::Reference< CSS::xml::dom::XDocumentFragment >& aFragment); - virtual SubmissionResult submit(const CSS::uno::Reference< CSS::task::XInteractionHandler >& aInteractionHandler); - -}; -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/submission_put.cxx b/forms/source/xforms/submission/submission_put.cxx deleted file mode 100644 index 7a59063cf..000000000 --- a/forms/source/xforms/submission/submission_put.cxx +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include <memory> - -#include "submission_put.hxx" -#include "serialization_app_xml.hxx" -#include "serialization_urlencoded.hxx" - -#include <osl/file.hxx> -#include <unotools/processfactory.hxx> -#include <ucbhelper/content.hxx> - -using namespace CSS::uno; -using namespace CSS::ucb; -using namespace CSS::task; -using namespace CSS::io; -using namespace osl; -using namespace ucbhelper; -using namespace std; - -using ::rtl::OUString; - -CSubmissionPut::CSubmissionPut(const rtl::OUString& aURL, const CSS::uno::Reference< CSS::xml::dom::XDocumentFragment >& aFragment) - : CSubmission(aURL, aFragment) -{ -} - -CSubmission::SubmissionResult CSubmissionPut::submit(const CSS::uno::Reference< CSS::task::XInteractionHandler >& aInteractionHandler) -{ - CSS::uno::Reference< XCommandEnvironment > aEnvironment; - auto_ptr< CSerialization > apSerialization(createSerialization(aInteractionHandler,aEnvironment)); - - try { - ucbhelper::Content aContent(m_aURLObj.GetMainURL(INetURLObject::NO_DECODE), aEnvironment); - - // insert serialized data to content -> PUT - CSS::uno::Reference< XInputStream > aInStream = apSerialization->getInputStream(); - aContent.writeStream(aInStream, sal_True); - //aContent.closeStream(); - - // no content as a result of put... - - } catch (Exception&) - { - // XXX - OSL_FAIL("Exception during UCB operatration."); - return UNKNOWN_ERROR; - } - - - return SUCCESS; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/submission/submission_put.hxx b/forms/source/xforms/submission/submission_put.hxx deleted file mode 100644 index 61d5a2436..000000000 --- a/forms/source/xforms/submission/submission_put.hxx +++ /dev/null @@ -1,46 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef __SUBMISSION_PUT_HXX -#define __SUBMISSION_PUT_HXX - -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/frame/XFrame.hpp> - -#include "submission.hxx" - -class CSubmissionPut : public CSubmission -{ -public: - CSubmissionPut(const rtl::OUString& aURL, const CSS::uno::Reference< CSS::xml::dom::XDocumentFragment >& aFragment); - virtual SubmissionResult submit(const CSS::uno::Reference< CSS::task::XInteractionHandler >& aInteractionHandler); - -}; -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/unohelper.cxx b/forms/source/xforms/unohelper.cxx deleted file mode 100644 index b6d16a30c..000000000 --- a/forms/source/xforms/unohelper.cxx +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "unohelper.hxx" - -#include <osl/diagnose.h> - -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/uno/XInterface.hpp> -#include <com/sun/star/uno/Exception.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/beans/Property.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/beans/XPropertySetInfo.hpp> -#include <com/sun/star/beans/PropertyAttribute.hpp> -#include <unotools/processfactory.hxx> - - -using com::sun::star::uno::Reference; -using com::sun::star::uno::Sequence; -using com::sun::star::uno::Exception; -using com::sun::star::uno::XInterface; -using com::sun::star::lang::XMultiServiceFactory; -using com::sun::star::beans::Property; -using com::sun::star::beans::XPropertySet; -using com::sun::star::beans::XPropertySetInfo; -using com::sun::star::beans::PropertyAttribute::READONLY; -using rtl::OUString; - - -Reference<XInterface> xforms::createInstance( const OUString& sServiceName ) -{ - Reference<XMultiServiceFactory> xFactory = utl::getProcessServiceFactory(); - OSL_ENSURE( xFactory.is(), "can't get service factory" ); - - Reference<XInterface> xInstance = xFactory->createInstance( sServiceName ); - OSL_ENSURE( xInstance.is(), "failed to create instance" ); - - return xInstance; -} - -void xforms::copy( const Reference<XPropertySet>& xFrom, - Reference<XPropertySet>& xTo ) -{ - OSL_ENSURE( xFrom.is(), "no source" ); - OSL_ENSURE( xTo.is(), "no target" ); - - // get property names & infos, and iterate over target properties - Sequence<Property> aProperties = - xTo->getPropertySetInfo()->getProperties(); - sal_Int32 nProperties = aProperties.getLength(); - const Property* pProperties = aProperties.getConstArray(); - Reference<XPropertySetInfo> xFromInfo = xFrom->getPropertySetInfo(); - for( sal_Int32 n = 0; n < nProperties; n++ ) - { - const OUString& rName = pProperties[n].Name; - - // if both set have the property, copy the value - // (catch and ignore exceptions, if any) - if( xFromInfo->hasPropertyByName( rName ) ) - { - try - { - Property aProperty = xFromInfo->getPropertyByName( rName ); - if ( ( aProperty.Attributes & READONLY ) == 0 ) - xTo->setPropertyValue(rName, xFrom->getPropertyValue( rName )); - } - catch( const Exception& ) - { - // ignore any errors; we'll copy as good as we can - } - } - // else: no property? then ignore. - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/unohelper.hxx b/forms/source/xforms/unohelper.hxx deleted file mode 100644 index 95a6bb613..000000000 --- a/forms/source/xforms/unohelper.hxx +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ -#ifndef _UNOHELPER_HXX -#define _UNOHELPER_HXX - -#include <sal/types.h> - -// forward declarations -namespace rtl { class OUString; } -namespace com { namespace sun { namespace star { - namespace uno { - class XInterface; - template<class T> class Reference; - } - namespace beans { class XPropertySet; } -} } } - - -#define OUSTRING(msg) rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( msg ) ) - -namespace xforms -{ - -/** instantiate a UNO service using the process global service factory */ -com::sun::star::uno::Reference<com::sun::star::uno::XInterface> - createInstance( const rtl::OUString& sServiceName ); - -/** copy the properties from one PropertySet into the next */ -void copy( const com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet>& , com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet>& ); - -} // namespace - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/warnings_guard_unicode_regex.h b/forms/source/xforms/warnings_guard_unicode_regex.h deleted file mode 100644 index dd82f0c6a..000000000 --- a/forms/source/xforms/warnings_guard_unicode_regex.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef INCLUDED_WARNINGS_GUARD_UNICODE_REGEX_H -#define INCLUDED_WARNINGS_GUARD_UNICODE_REGEX_H - -// Because the GCC system_header mechanism doesn't work in .c/.cxx compilation -// units and more important affects the rest of the current include file, the -// warnings guard is separated into this header file on its own. - -// External unicode includes (from icu) cause warning C4668 on Windows. -// We want to minimize the patches to external headers, so the warnings are -// disabled here instead of in the header file itself. -#ifdef _MSC_VER -#pragma warning(push, 1) -#elif defined __GNUC__ -#pragma GCC system_header -#endif -#include <unicode/regex.h> -#ifdef _MSC_VER -#pragma warning(pop) -#endif - -#endif // INCLUDED_WARNINGS_GUARD_UNICODE_REGEX_H - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/xforms_services.cxx b/forms/source/xforms/xforms_services.cxx deleted file mode 100644 index c10016afc..000000000 --- a/forms/source/xforms/xforms_services.cxx +++ /dev/null @@ -1,75 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - - -#include "services.hxx" - -#include "binding.hxx" -#include "model.hxx" -#include "NameContainer.hxx" - -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/XInterface.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/uno/RuntimeException.hpp> -#include <com/sun/star/container/XNameContainer.hpp> - -using com::sun::star::uno::Reference; -using com::sun::star::uno::XInterface; -using com::sun::star::lang::XMultiServiceFactory; -using com::sun::star::uno::RuntimeException; -using com::sun::star::form::binding::XValueBinding; -using com::sun::star::beans::XPropertySet; -using com::sun::star::container::XNameContainer; -using rtl::OUString; - - -namespace frm -{ - -Reference<XInterface> Model_CreateInstance( - const Reference<XMultiServiceFactory>& ) - throw( RuntimeException ) -{ - return static_cast<XPropertySet*>( new xforms::Model ); -} - -Reference<XInterface> XForms_CreateInstance( - const Reference<XMultiServiceFactory>& ) - throw( RuntimeException ) -{ - return static_cast<XNameContainer*>( new NameContainer<Reference<XPropertySet> >() ); -} - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/xforms_services.hxx b/forms/source/xforms/xforms_services.hxx deleted file mode 100644 index 32a7c43e6..000000000 --- a/forms/source/xforms/xforms_services.hxx +++ /dev/null @@ -1,30 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ - - -namespace com { namespace sun { namespace star { - namespace uno { class XInterface; } - namespace uno { template<class T> class Reference<T>; } - namespace uno { class RuntimeException; } - namespace lang { class XMultiServiceFactory; } -} } } - - -namespace frm -{ - com::sun::star::uno::Reference<com::sun::star::uno::XInterface> - SAL_CALL Binding_CreateInstance( - const com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory>& _rxFactory) - throw( com::sun::star::uno::RuntimeException ); - - com::sun::star::uno::Reference<com::sun::star::uno::XInterface> - SAL_CALL Model_CreateInstance( - const com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory>& _rxFactory) - throw( com::sun::star::uno::RuntimeException ); - - com::sun::star::uno::Reference<com::sun::star::uno::XInterface> - SAL_CALL XForms_CreateInstance( - const com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory>& _rxFactory) - throw( com::sun::star::uno::RuntimeException ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/xformsevent.cxx b/forms/source/xforms/xformsevent.cxx deleted file mode 100644 index 06801ce3b..000000000 --- a/forms/source/xforms/xformsevent.cxx +++ /dev/null @@ -1,103 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include "xformsevent.hxx" - -namespace com { -namespace sun { -namespace star { -namespace xforms { - -using rtl::OUString; -using com::sun::star::uno::RuntimeException; - -void SAL_CALL XFormsEventConcrete::initXFormsEvent(const OUString& typeArg, - sal_Bool canBubbleArg, sal_Bool cancelableArg) - throw (RuntimeException) -{ - initEvent(typeArg, canBubbleArg, cancelableArg); -} - -OUString SAL_CALL XFormsEventConcrete::getType() throw (RuntimeException) -{ - return m_eventType; -} - -XFormsEventConcrete::XEventTarget_t SAL_CALL XFormsEventConcrete::getTarget() throw (RuntimeException) -{ - return m_target; -} - -XFormsEventConcrete::XEventTarget_t SAL_CALL XFormsEventConcrete::getCurrentTarget() throw (RuntimeException) -{ - return m_currentTarget; -} - -XFormsEventConcrete::PhaseType_t SAL_CALL XFormsEventConcrete::getEventPhase() throw (RuntimeException) -{ - return m_phase; -} - -sal_Bool SAL_CALL XFormsEventConcrete::getBubbles() throw (RuntimeException) -{ - return m_bubbles; -} - -sal_Bool SAL_CALL XFormsEventConcrete::getCancelable() throw (RuntimeException) -{ - return m_cancelable; -} - -XFormsEventConcrete::Time_t SAL_CALL XFormsEventConcrete::getTimeStamp() throw (RuntimeException) -{ - return m_time; -} - -void SAL_CALL XFormsEventConcrete::stopPropagation() throw (RuntimeException) -{ - if(m_cancelable) - m_canceled = sal_True; -} -void SAL_CALL XFormsEventConcrete::preventDefault() throw (RuntimeException) -{ -} - -void SAL_CALL XFormsEventConcrete::initEvent(const OUString& eventTypeArg, sal_Bool canBubbleArg, - sal_Bool cancelableArg) throw (RuntimeException) -{ - m_eventType = eventTypeArg; - m_bubbles = canBubbleArg; - m_cancelable = cancelableArg; -} - -} } } } - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/xformsevent.hxx b/forms/source/xforms/xformsevent.hxx deleted file mode 100644 index 7437425cb..000000000 --- a/forms/source/xforms/xformsevent.hxx +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#ifndef __XFORMSEVENT_HXX -#define __XFORMSEVENT_HXX - -#include <sal/types.h> -#include <cppuhelper/implbase1.hxx> -#include <com/sun/star/uno/Reference.h> -#include <com/sun/star/xforms/XFormsEvent.hpp> -#include <com/sun/star/xml/dom/events/XEventTarget.hpp> - -namespace com { -namespace sun { -namespace star { -namespace xforms { - -class XFormsEventConcrete : public cppu::WeakImplHelper1< XFormsEvent > { - - public: - - typedef com::sun::star::uno::RuntimeException RuntimeException_t; - typedef com::sun::star::uno::Reference< com::sun::star::xml::dom::events::XEventTarget > XEventTarget_t; - typedef com::sun::star::xml::dom::events::PhaseType PhaseType_t; - typedef com::sun::star::util::Time Time_t; - - inline XFormsEventConcrete( void ) : m_canceled(sal_False) {} - virtual ~XFormsEventConcrete( void ) {} - - virtual rtl::OUString SAL_CALL getType() throw (RuntimeException_t); - virtual XEventTarget_t SAL_CALL getTarget() throw (RuntimeException_t); - virtual XEventTarget_t SAL_CALL getCurrentTarget() throw (RuntimeException_t); - virtual PhaseType_t SAL_CALL getEventPhase() throw (RuntimeException_t); - virtual sal_Bool SAL_CALL getBubbles() throw (RuntimeException_t); - virtual sal_Bool SAL_CALL getCancelable() throw (RuntimeException_t); - virtual Time_t SAL_CALL getTimeStamp() throw (RuntimeException_t); - virtual void SAL_CALL stopPropagation() throw (RuntimeException_t); - virtual void SAL_CALL preventDefault() throw (RuntimeException_t); - - virtual void SAL_CALL initXFormsEvent( - const rtl::OUString& typeArg, - sal_Bool canBubbleArg, - sal_Bool cancelableArg ) - throw (RuntimeException_t); - - virtual void SAL_CALL initEvent( - const rtl::OUString& eventTypeArg, - sal_Bool canBubbleArg, - sal_Bool cancelableArg) - throw (RuntimeException_t); - - private: - - sal_Bool m_canceled; - - protected: - - rtl::OUString m_eventType; - XEventTarget_t m_target; - XEventTarget_t m_currentTarget; - PhaseType_t m_phase; - sal_Bool m_bubbles; - sal_Bool m_cancelable; - Time_t m_time; -}; - -} } } } - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/xmlhelper.cxx b/forms/source/xforms/xmlhelper.cxx deleted file mode 100644 index 02683333e..000000000 --- a/forms/source/xforms/xmlhelper.cxx +++ /dev/null @@ -1,150 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" - -#include "xmlhelper.hxx" - -#include "unohelper.hxx" -#include <rtl/ustring.hxx> -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/xml/dom/XDocumentBuilder.hpp> - -using rtl::OUString; -using com::sun::star::uno::Reference; -using com::sun::star::uno::UNO_QUERY_THROW; -using com::sun::star::container::XNameContainer; -using com::sun::star::xml::dom::XDocumentBuilder; - - -// -// determine valid XML name -// - -// character class: -// 1: NameStartChar -// 2: NameChar -// 4: NCNameStartChar -// 8: NCNameChar -inline sal_uInt8 lcl_getCharClass( sal_Unicode c ) -{ - sal_uInt8 nClass = 0; - - // NameStartChar - if( (c >= 'A' && c <= 'Z') - || c == '_' - || (c >= 'a' && c <= 'z') - || (c >= 0x00C0 && c <= 0x00D6) - || (c >= 0x00D8 && c <= 0x00F6) - || (c >= 0x00F8 && c <= 0x02FF) - || (c >= 0x0370 && c <= 0x037D) - || (c >= 0x037F && c <= 0x1FFF) - || (c >= 0x200C && c <= 0x200D) - || (c >= 0x2070 && c <= 0x218F) - || (c >= 0x2C00 && c <= 0x2FEF) - || (c >= 0x3001 && c <= 0xD7FF) - || (c >= 0xF900 && c <= 0xFDCF) - || (c >= 0xFDF0 && c <= 0xFFFD) - - // surrogates - || (c >= 0xD800 && c <= 0xDBFF) - || (c >= 0xDC00 && c <= 0xDFFF) ) - { - nClass = 15; - } - else if( c == '-' - || c == '.' - || (c >= '0' && c <= '9') - || (c == 0x00B7) - || (c >= 0x0300 && c <= 0x036F) - || (c >= 0x203F && c <= 0x2040) ) - { - nClass = 10; - } - else if( c == ':' ) - { - nClass = 3; - } - - return nClass; -} - -bool isValidQName( const OUString& sName, - const Reference<XNameContainer>& /*xNamespaces*/ ) -{ - sal_Int32 nLength = sName.getLength(); - const sal_Unicode* pName = sName.getStr(); - - bool bRet = false; - sal_Int32 nColon = 0; - if( nLength > 0 ) - { - bRet = ( ( lcl_getCharClass( pName[0] ) & 4 ) != 0 ); - for( sal_Int32 n = 1; n < nLength; n++ ) - { - sal_uInt8 nClass = lcl_getCharClass( pName[n] ); - bRet &= ( ( nClass & 2 ) != 0 ); - if( nClass == 3 ) - nColon++; - } - } - if( nColon > 1 ) - bRet = sal_False; - - return bRet; -} - -bool isValidPrefixName( const OUString& sName, - const Reference<XNameContainer>& /*xNamespaces*/ ) -{ - sal_Int32 nLength = sName.getLength(); - const sal_Unicode* pName = sName.getStr(); - bool bRet = false; - - if( nLength > 0 ) - { - bRet = ( ( lcl_getCharClass( pName[0] ) & 4 ) != 0 ); - for( sal_Int32 n = 1; n < nLength; n++ ) - bRet &= ( ( lcl_getCharClass( pName[n] ) & 8 ) != 0 ); - } - - return bRet; -} - -Reference<XDocumentBuilder> getDocumentBuilder() -{ - Reference<XDocumentBuilder> xBuilder( - xforms::createInstance( - OUSTRING("com.sun.star.xml.dom.DocumentBuilder") ), - UNO_QUERY_THROW ); - OSL_ENSURE( xBuilder.is(), "no document builder?" ); - return xBuilder; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/xmlhelper.hxx b/forms/source/xforms/xmlhelper.hxx deleted file mode 100644 index e5fc6ea6a..000000000 --- a/forms/source/xforms/xmlhelper.hxx +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - -#ifndef _XMLHELPER_HXX -#define _XMLHELPER_HXX - -#include <sal/types.h> - - -namespace rtl { class OUString; } -namespace com { namespace sun { namespace star { - namespace uno { template<typename T> class Reference; } - namespace container { class XNameContainer; } - namespace xml { namespace dom { class XDocumentBuilder; } } -} } } - - -bool isValidQName( const rtl::OUString& sName, - const com::sun::star::uno::Reference<com::sun::star::container::XNameContainer>& xNamespaces ); - -bool isValidPrefixName( const rtl::OUString& sName, - const com::sun::star::uno::Reference<com::sun::star::container::XNameContainer>& xNamespaces ); - -com::sun::star::uno::Reference<com::sun::star::xml::dom::XDocumentBuilder> getDocumentBuilder(); - - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/xpathlib/extension.cxx b/forms/source/xforms/xpathlib/extension.cxx deleted file mode 100644 index 8c860634c..000000000 --- a/forms/source/xforms/xpathlib/extension.cxx +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include <stdio.h> -#include <com/sun/star/xml/xpath/Libxml2ExtensionHandle.hpp> -#include <com/sun/star/beans/NamedValue.hpp> -#include "extension.hxx" -#include "xpathlib.hxx" -#include "frm_module.hxx" - -using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::xforms; -using namespace com::sun::star::xml::xpath; -using namespace com::sun::star::beans; -using com::sun::star::xml::dom::XNode; - -Reference< XInterface > SAL_CALL CLibxml2XFormsExtension::Create( - const Reference< XMultiServiceFactory >& /*aFactory*/) -{ - Reference< XInterface > aInstance(static_cast< XXPathExtension* >(new CLibxml2XFormsExtension(/*aFactory*/))); - return aInstance; -} - -::rtl::OUString SAL_CALL CLibxml2XFormsExtension::getImplementationName_Static() -{ - return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.xml.xpath.XFormsExtension") ); -} - -Sequence< ::rtl::OUString > SAL_CALL CLibxml2XFormsExtension::getSupportedServiceNames_Static() -{ - Sequence< ::rtl::OUString > aSequence(1); - aSequence[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.xpath.XPathExtension") ); - return aSequence; -} - -Libxml2ExtensionHandle SAL_CALL CLibxml2XFormsExtension::getLibxml2ExtensionHandle() throw (RuntimeException) -{ - Libxml2ExtensionHandle aHandle; - aHandle.functionLookupFunction = reinterpret_cast< sal_Int64 >( &xforms_lookupFunc ); - aHandle.functionData = reinterpret_cast< sal_Int64 >( this ); - aHandle.variableLookupFunction = (sal_Int64)0; - aHandle.variableData = (sal_Int64)0; - return aHandle; -} - -void SAL_CALL CLibxml2XFormsExtension::initialize(const Sequence< Any >& aSequence) throw (RuntimeException) -{ - NamedValue aValue; - for (sal_Int32 i = 0; i < aSequence.getLength(); i++) - { - if (! (aSequence[i] >>= aValue)) - throw RuntimeException(); - if (aValue.Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Model"))) - aValue.Value >>= m_aModel; - else if (aValue.Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ContextNode"))) - aValue.Value >>= m_aContextNode; - } -} - -Reference< XModel > CLibxml2XFormsExtension::getModel() -{ - return m_aModel; -} - -Reference< XNode > CLibxml2XFormsExtension::getContextNode() -{ - return m_aContextNode; -} - -extern "C" void SAL_CALL createRegistryInfo_CLibxml2XFormsExtension() -{ - static frm::OMultiInstanceAutoRegistration< CLibxml2XFormsExtension > aRegistration; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/xpathlib/extension.hxx b/forms/source/xforms/xpathlib/extension.hxx deleted file mode 100644 index e0caea013..000000000 --- a/forms/source/xforms/xpathlib/extension.hxx +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#include <rtl/ustring.h> -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/uno/Any.hxx> -#include <cppuhelper/implbase1.hxx> -#include <cppuhelper/implbase2.hxx> - -#include <com/sun/star/uno/XInterface.hpp> -#include <com/sun/star/lang/XInitialization.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/xml/xpath/XXPathExtension.hpp> -#include <com/sun/star/xforms/XModel.hpp> -#include <com/sun/star/uno/RuntimeException.hpp> -#include <com/sun/star/beans/NamedValue.hpp> -#include <com/sun/star/xml/dom/XNode.hpp> - - - - -class CLibxml2XFormsExtension : public cppu::WeakImplHelper2< - com::sun::star::xml::xpath::XXPathExtension, com::sun::star::lang::XInitialization> -{ -private: - com::sun::star::uno::Reference <com::sun::star::xforms::XModel> m_aModel; - com::sun::star::uno::Reference <com::sun::star::xml::dom::XNode> m_aContextNode; - -public: - static com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL Create( - const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& aFactory); - static rtl::OUString SAL_CALL getImplementationName_Static(); - static com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames_Static(); - - com::sun::star::uno::Reference< com::sun::star::xforms::XModel > getModel(); - com::sun::star::uno::Reference< com::sun::star::xml::dom::XNode > getContextNode(); - - virtual com::sun::star::xml::xpath::Libxml2ExtensionHandle SAL_CALL getLibxml2ExtensionHandle() throw (com::sun::star::uno::RuntimeException); - virtual void SAL_CALL initialize(const com::sun::star::uno::Sequence< com::sun::star::uno::Any >& aSequence) throw (com::sun::star::uno::RuntimeException); - -}; - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/xpathlib/xpathlib.cxx b/forms/source/xforms/xpathlib/xpathlib.cxx deleted file mode 100644 index 8990f7bb3..000000000 --- a/forms/source/xforms/xpathlib/xpathlib.cxx +++ /dev/null @@ -1,570 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * 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. - * - ************************************************************************/ - - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_forms.hxx" -#include <string.h> -#include <sal/types.h> -#include <rtl/alloc.h> -#include <rtl/ustring.hxx> -#include <rtl/string.hxx> -#include <rtl/ustrbuf.hxx> -#include <rtl/strbuf.hxx> -#include <tools/date.hxx> -#include <tools/time.hxx> -#include <tools/datetime.hxx> - -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/xforms/XModel.hpp> -#include <com/sun/star/xml/dom/XNode.hpp> -#include <com/sun/star/xml/dom/XDocument.hpp> -#include <com/sun/star/lang/XUnoTunnel.hpp> - -#include "xpathlib.hxx" - -#include "extension.hxx" - -// C interface - -using namespace com::sun::star::uno; -using namespace com::sun::star::xml::dom; -using namespace com::sun::star::xforms; -using namespace com::sun::star::lang; - -xmlXPathFunction xforms_lookupFunc(void *, const xmlChar *xname, const xmlChar *) -{ - - const char *name = (char *)xname; - if (strcmp("boolean-from-string", name)==0) - return xforms_booleanFromStringFunction; - else if ((strcmp("if", name))==0) - return xforms_ifFunction; - else if ((strcmp("avg", name))==0) - return xforms_avgFunction; - else if ((strcmp("min", name))==0) - return xforms_minFunction; - else if ((strcmp("max", name))==0) - return xforms_maxFunction; - else if ((strcmp("count-non-empty", name))==0) - return xforms_countNonEmptyFunction; - else if ((strcmp("index", name))==0) - return xforms_indexFunction; - else if ((strcmp("property", name))==0) - return xforms_propertyFunction; - else if ((strcmp("now", name))==0) - return xforms_nowFunction; - else if ((strcmp("days-from-date", name))==0) - return xforms_daysFromDateFunction; - else if ((strcmp("seconds-from-dateTime", name))==0) - return xforms_secondsFromDateTimeFunction; - else if ((strcmp("seconds", name))==0) - return xforms_secondsFuction; - else if ((strcmp("months", name))==0) - return xforms_monthsFuction; - else if ((strcmp("instance", name))==0) - return xforms_instanceFuction; - else if ((strcmp("current", name))==0) - return xforms_currentFunction; - else - return NULL; -} - -// boolean functions -void xforms_booleanFromStringFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - xmlChar *pString = xmlXPathPopString(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - ::rtl::OUString aString((char*)pString, strlen((char*)pString), RTL_TEXTENCODING_UTF8); - if (aString.equalsIgnoreAsciiCaseAscii("true") || aString.equalsIgnoreAsciiCaseAscii("1")) - xmlXPathReturnTrue(ctxt); - else if (aString.equalsIgnoreAsciiCaseAscii("false") || aString.equalsIgnoreAsciiCaseAscii("0")) - xmlXPathReturnFalse(ctxt); - else - XP_ERROR(XPATH_NUMBER_ERROR); -} - -void xforms_ifFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - if (nargs != 3) XP_ERROR(XPATH_INVALID_ARITY); - xmlChar *s2 = xmlXPathPopString(ctxt); - - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - xmlChar *s1 = xmlXPathPopString(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - bool aBool = xmlXPathPopBoolean(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - - if (aBool) - xmlXPathReturnString(ctxt, s1); - else - xmlXPathReturnString(ctxt, s2); - -} - -// Number Functions -void xforms_avgFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - // use sum(), div() and count() - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - - // save nodeset - xmlXPathObjectPtr pObject = valuePop(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - //push back a copy - valuePush(ctxt, xmlXPathObjectCopy(pObject)); - // get the Sum - xmlXPathSumFunction(ctxt, 1); - double nSum = xmlXPathPopNumber(ctxt); - // push a copy once more - valuePush(ctxt, xmlXPathObjectCopy(pObject)); - xmlXPathCountFunction(ctxt, 1); - double nCount = xmlXPathPopNumber(ctxt); - // push args for div() - xmlXPathReturnNumber(ctxt, nSum); - xmlXPathReturnNumber(ctxt, nCount); - xmlXPathDivValues(ctxt); - // the result is now on the ctxt stack - xmlXPathFreeObject(pObject); -} - -void xforms_minFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - xmlNodeSetPtr pNodeSet = xmlXPathPopNodeSet(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - double nMinimum = 0; - double nNumber = 0; - for (int i = 0; i < xmlXPathNodeSetGetLength(pNodeSet); i++) - { - nNumber = xmlXPathCastNodeToNumber(xmlXPathNodeSetItem(pNodeSet, i)); - if (xmlXPathIsNaN(nNumber)) - { - xmlXPathReturnNumber(ctxt, xmlXPathNAN); - return; - } - if (i == 0) - nMinimum = nNumber; - else if (nNumber < nMinimum) - nMinimum = nNumber; - } - xmlXPathReturnNumber(ctxt, nMinimum); -} - -void xforms_maxFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - xmlNodeSetPtr pNodeSet = xmlXPathPopNodeSet(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - double nMaximum = 0; - double nNumber = 0; - for (int i = 0; i < xmlXPathNodeSetGetLength(pNodeSet); i++) - { - nNumber = xmlXPathCastNodeToNumber(xmlXPathNodeSetItem(pNodeSet, i)); - if (xmlXPathIsNaN(nNumber)) - { - xmlXPathReturnNumber(ctxt, xmlXPathNAN); - return; - } - if (i == 0) - nMaximum = nNumber; - else if (nNumber > nMaximum) - nMaximum = nNumber; - } - xmlXPathReturnNumber(ctxt, nMaximum); -} -void xforms_countNonEmptyFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - xmlNodeSetPtr pNodeSet = xmlXPathPopNodeSet(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - xmlChar *aString; - sal_Int32 nNotEmpty = 0; - for (int i = 0; i < xmlXPathNodeSetGetLength(pNodeSet); i++) - { - aString = xmlXPathCastNodeToString(xmlXPathNodeSetItem(pNodeSet, i)); - if (*aString != 0) nNotEmpty++; - } - xmlXPathReturnNumber(ctxt, nNotEmpty); -} -void xforms_indexFunction(xmlXPathParserContextPtr /*ctxt*/, int /*nargs*/) -{ - // function index takes a string argument that is the IDREF of a - // 'repeat' and returns the current 1-based position of the repeat - // index of the identified repeat -- see xforms/9.3.1 - - // doc.getElementByID - // (...) -} - -// String Functions -static const char* _version = "1.0"; -static const char* _conformance = "conformance"; -void xforms_propertyFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - xmlChar* pString = xmlXPathPopString(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - ::rtl::OUString aString((char*)pString, strlen((char*)pString), RTL_TEXTENCODING_UTF8); - if (aString.equalsIgnoreAsciiCaseAscii("version")) - xmlXPathReturnString(ctxt, (xmlChar*)_version); - else if (aString.equalsIgnoreAsciiCaseAscii("conformance-level")) - xmlXPathReturnString(ctxt, (xmlChar*)_conformance); - else - xmlXPathReturnEmptyString(ctxt); -} - -// Date and Time Functions - -static ::rtl::OString makeDateTimeString (const DateTime& aDateTime, sal_Bool bUTC = sal_True) -{ - ::rtl::OStringBuffer aDateTimeString; - aDateTimeString.append((sal_Int32)aDateTime.GetYear()); - aDateTimeString.append("-"); - if (aDateTime.GetMonth()<10) aDateTimeString.append("0"); - aDateTimeString.append((sal_Int32)aDateTime.GetMonth()); - aDateTimeString.append("-"); - if (aDateTime.GetDay()<10) aDateTimeString.append("0"); - aDateTimeString.append((sal_Int32)aDateTime.GetDay()); - aDateTimeString.append("T"); - if (aDateTime.GetHour()<10) aDateTimeString.append("0"); - aDateTimeString.append((sal_Int32)aDateTime.GetHour()); - aDateTimeString.append(":"); - if (aDateTime.GetMin()<10) aDateTimeString.append("0"); - aDateTimeString.append((sal_Int32)aDateTime.GetMin()); - aDateTimeString.append(":"); - if (aDateTime.GetSec()<10) aDateTimeString.append("0"); - aDateTimeString.append((sal_Int32)aDateTime.GetSec()); - if (bUTC) aDateTimeString.append("Z"); - - return aDateTimeString.makeStringAndClear(); -} - -// returns current system date and time in canonical xsd:dateTime -// format -void xforms_nowFunction(xmlXPathParserContextPtr ctxt, int /*nargs*/) -{ - /* - A single lexical representation, which is a subset of the lexical representations - allowed by [ISO 8601], is allowed for dateTime. This lexical representation is the - [ISO 8601] extended format CCYY-MM-DDThh:mm:ss where "CC" represents the century, - "YY" the year, "MM" the month and "DD" the day, preceded by an optional leading "-" - sign to indicate a negative number. If the sign is omitted, "+" is assumed. The letter - "T" is the date/time separator and "hh", "mm", "ss" represent hour, minute and second - respectively. - */ - - /* - 3.2.7.2 Canonical representation - The canonical representation for dateTime is defined by prohibiting certain options - from the Lexical representation (par.3.2.7.1). Specifically, either the time zone must - be omitted or, if present, the time zone must be Coordinated Universal Time (UTC) - indicated by a "Z". - */ - DateTime aDateTime; - ::rtl::OString aDateTimeString = makeDateTimeString(aDateTime); - xmlChar *pString = static_cast<xmlChar*>(xmlMalloc(aDateTimeString.getLength()+1)); - strncpy((char*)pString, (char*)aDateTimeString.getStr(), aDateTimeString.getLength()); - pString[aDateTimeString.getLength()] = 0; - xmlXPathReturnString(ctxt, pString); -} - -static sal_Bool parseDateTime(const ::rtl::OUString& aString, DateTime& aDateTime) -{ - // take apart a canonical literal xsd:dateTime string - //CCYY-MM-DDThh:mm:ss(Z) - - ::rtl::OUString aDateTimeString = aString.trim(); - - // check length - if (aDateTimeString.getLength() < 19 || aDateTimeString.getLength() > 20) - return sal_False; - - sal_Int32 nDateLength = 10; - sal_Int32 nTimeLength = 8; - - ::rtl::OUString aDateTimeSep(RTL_CONSTASCII_USTRINGPARAM("T")); - ::rtl::OUString aDateSep(RTL_CONSTASCII_USTRINGPARAM("-")); - ::rtl::OUString aTimeSep(RTL_CONSTASCII_USTRINGPARAM(":")); - ::rtl::OUString aUTCString(RTL_CONSTASCII_USTRINGPARAM("Z")); - - ::rtl::OUString aDateString = aDateTimeString.copy(0, nDateLength); - ::rtl::OUString aTimeString = aDateTimeString.copy(nDateLength+1, nTimeLength); - - sal_Int32 nIndex = 0; - sal_Int32 nYear = aDateString.getToken(0, '-', nIndex).toInt32(); - sal_Int32 nMonth = aDateString.getToken(0, '-', nIndex).toInt32(); - sal_Int32 nDay = aDateString.getToken(0, '-', nIndex).toInt32(); - nIndex = 0; - sal_Int32 nHour = aTimeString.getToken(0, ':', nIndex).toInt32(); - sal_Int32 nMinute = aTimeString.getToken(0, ':', nIndex).toInt32(); - sal_Int32 nSecond = aTimeString.getToken(0, ':', nIndex).toInt32(); - - Date tmpDate((sal_uInt16)nDay, (sal_uInt16)nMonth, (sal_uInt16)nYear); - Time tmpTime(nHour, nMinute, nSecond); - DateTime tmpDateTime(tmpDate, tmpTime); - if (aString.indexOf(aUTCString) < 0) - tmpDateTime.ConvertToUTC(); - - aDateTime = tmpDateTime; - - return sal_True; -} - - -void xforms_daysFromDateFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - // number of days from 1970-01-01 to supplied xsd:date(Time) - - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - xmlChar* pString = xmlXPathPopString(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - ::rtl::OUString aString((char*)pString, strlen((char*)pString), RTL_TEXTENCODING_UTF8); - - DateTime aDateTime; - if (parseDateTime(aString, aDateTime)) - { - Date aReferenceDate(1, 1, 1970); - sal_Int32 nDays = aDateTime - aReferenceDate; - xmlXPathReturnNumber(ctxt, nDays); - } - else - xmlXPathReturnNumber(ctxt, xmlXPathNAN); - - -} - - -void xforms_secondsFromDateTimeFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - // number of seconds from 1970-01-01T00:00:00Z to supplied xsd:date(Time) - - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - xmlChar* pString = xmlXPathPopString(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - ::rtl::OUString aString((char*)pString, strlen((char*)pString), RTL_TEXTENCODING_UTF8); - - DateTime aDateTime; - - if (parseDateTime(aString, aDateTime)) - { - Date aReferenceDate(1, 1, 1970); - Time aReferenceTime(0, 0, 0); - sal_Int32 nDays = aDateTime - aReferenceDate; - sal_Int32 nSeconds = nDays * 24 * 60 * 60; - nSeconds += aDateTime.GetHour() * 60 * 60; - nSeconds += aDateTime.GetMin() * 60; - nSeconds += aDateTime.GetSec(); - xmlXPathReturnNumber(ctxt, nSeconds); - } - else - xmlXPathReturnNumber(ctxt, xmlXPathNAN); - -} - -static sal_Bool parseDuration(const xmlChar* aString, sal_Bool& bNegative, sal_Int32& nYears, sal_Int32& nMonth, sal_Int32& nDays, - sal_Int32& nHours, sal_Int32& nMinutes, sal_Int32& nSeconds) -{ - sal_Bool bTime = sal_False; // in part after T - sal_Int32 nLength = strlen((char*)aString)+1; - char *pString = (char*)rtl_allocateMemory(nLength); - char *pString0 = pString; - strncpy(pString, (char*)aString, nLength); - - if (pString[0] == '-') { - bNegative = sal_True; - pString++; - } - - if (pString[0] != 'P') - return sal_False; - pString++; - char* pToken = pString; - while(pToken[0] != 0) - { - switch(pToken[0]) { - case 'Y': - pToken[0] = 0; - nYears = atoi(pString); - pString = ++pToken; - break; - case 'M': - pToken[0] = 0; - if (!bTime) - nMonth = atoi(pString); - else - nMinutes = atoi(pString); - pString = ++pToken; - break; - case 'D': - pToken[0] = 0; - nDays = atoi(pString); - pString = ++pToken; - break; - case 'H': - pToken[0] = 0; - nHours = atoi(pString); - pString = ++pToken; - break; - case 'S': - pToken[0] = 0; - nSeconds = atoi(pString); - pString = ++pToken; - break; - case 'T': - bTime = sal_True; - pString = ++pToken; - break; - default: - pToken++; - } - } - rtl_freeMemory(pString0); - return sal_True; -} - -void xforms_secondsFuction(xmlXPathParserContextPtr ctxt, int nargs) -{ - // convert a xsd:duration to seconds - // (-)PnYnMnDTnHnMnS - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - xmlChar* pString = xmlXPathPopString(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - - sal_Bool bNegative = sal_False; - sal_Int32 nYears = 0; - sal_Int32 nMonths = 0; - sal_Int32 nDays = 0; - sal_Int32 nHours = 0; - sal_Int32 nMinutes = 0; - sal_Int32 nSeconds = 0; - - if (parseDuration(pString, bNegative, nYears, nMonths, nDays, nHours, nMinutes, nSeconds)) - { - nSeconds += nMinutes*60; - nSeconds += nHours*60*60; - nSeconds += nDays*24*60*60; - // year and month are ignored according to spec - if (bNegative) - nSeconds = 0 - nSeconds; - xmlXPathReturnNumber(ctxt, nSeconds); - } - else - xmlXPathReturnNumber(ctxt, xmlXPathNAN); -} - -void xforms_monthsFuction(xmlXPathParserContextPtr ctxt, int nargs) -{ - // convert a xsd:duration to seconds - // (-)PnYnMnDTnHnMnS - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - xmlChar* pString = xmlXPathPopString(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - - sal_Bool bNegative = sal_False; - sal_Int32 nYears = 0; - sal_Int32 nMonths = 0; - sal_Int32 nDays = 0; - sal_Int32 nHours = 0; - sal_Int32 nMinutes = 0; - sal_Int32 nSeconds = 0; - - if (parseDuration(pString, bNegative, nYears, nMonths, nDays, nHours, nMinutes, nSeconds)) - { - nMonths += nYears*12; - // Days, Houres, Minutes and seconds are ignored, see spec - if (bNegative) - nMonths = 0 - nMonths; - xmlXPathReturnNumber(ctxt, nMonths); - } - else - xmlXPathReturnNumber(ctxt, xmlXPathNAN); - -} - -// Node-set Functions -void xforms_instanceFuction(xmlXPathParserContextPtr ctxt, int nargs) -{ - if (nargs != 1) XP_ERROR(XPATH_INVALID_ARITY); - xmlChar *pString = xmlXPathPopString(ctxt); - if (xmlXPathCheckError(ctxt)) XP_ERROR(XPATH_INVALID_TYPE); - ::rtl::OUString aString((char*)pString, strlen((char*)pString), RTL_TEXTENCODING_UTF8); - - Reference< XModel > aModel = ((CLibxml2XFormsExtension*)ctxt->context->funcLookupData)->getModel(); - if (aModel.is()) - { - Reference< XDocument > aInstance = aModel->getInstanceDocument(aString); - if (aInstance.is()) - { - try { - // xmlXPathObjectPtr xmlXPathNewNodeSet (xmlNodePtr val); - Reference< XUnoTunnel > aTunnel(aInstance, UNO_QUERY_THROW); - xmlNodePtr pNode = reinterpret_cast< xmlNodePtr >( aTunnel->getSomething(Sequence< sal_Int8 >()) ); - xmlXPathObjectPtr pObject = xmlXPathNewNodeSet(pNode); - xmlXPathReturnNodeSet(ctxt, pObject->nodesetval); - } catch (RuntimeException&) - { - xmlXPathReturnEmptyNodeSet(ctxt); - } - } - else - xmlXPathReturnEmptyNodeSet(ctxt); - } - else - xmlXPathReturnEmptyNodeSet(ctxt); - -} - -// Node-set Functions, XForms 1.1 -void xforms_currentFunction(xmlXPathParserContextPtr ctxt, int nargs) -{ - if (nargs != 0) XP_ERROR(XPATH_INVALID_ARITY); - - Reference< XNode > aNode = ((CLibxml2XFormsExtension*)ctxt->context->funcLookupData)->getContextNode(); - - if (aNode.is()) - { - try { - Reference< XUnoTunnel > aTunnel(aNode, UNO_QUERY_THROW); - xmlNodePtr pNode = reinterpret_cast< xmlNodePtr >( aTunnel->getSomething(Sequence< sal_Int8 >()) ); - xmlXPathObjectPtr pObject = xmlXPathNewNodeSet(pNode); - xmlXPathReturnNodeSet(ctxt, pObject->nodesetval); - } - catch (RuntimeException&) - { - xmlXPathReturnEmptyNodeSet(ctxt); - } - } - else - xmlXPathReturnEmptyNodeSet(ctxt); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/forms/source/xforms/xpathlib/xpathlib.hxx b/forms/source/xforms/xpathlib/xpathlib.hxx deleted file mode 100644 index 2a74c1899..000000000 --- a/forms/source/xforms/xpathlib/xpathlib.hxx +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ - - -#include <libxml/tree.h> -#include <libxml/xpath.h> -#include <libxml/xpathInternals.h> - -/* - entry functions for libxml xpath engine - -*/ - -/** - * xmlXPathParserContext: - * - * An XPath parser context. It contains pure parsing informations, - * an xmlXPathContext, and the stack of objects. - */ - -extern "C" -{ - -// XForms - -// XForms Core Functions -// boolean functions -void xforms_booleanFromStringFunction(xmlXPathParserContextPtr ctxt, int nargs); -void xforms_ifFunction(xmlXPathParserContextPtr ctxt, int nargs); - -// Number Functions -void xforms_avgFunction(xmlXPathParserContextPtr ctxt, int nargs); -void xforms_minFunction(xmlXPathParserContextPtr ctxt, int nargs); -void xforms_maxFunction(xmlXPathParserContextPtr ctxt, int nargs); -void xforms_countNonEmptyFunction(xmlXPathParserContextPtr ctxt, int nargs); -void xforms_indexFunction(xmlXPathParserContextPtr ctxt, int nargs); - -// String Functions -void xforms_propertyFunction(xmlXPathParserContextPtr ctxt, int nargs); -void xforms_versionFunction(xmlXPathParserContextPtr ctxt, int nargs); - -// Date and Time Functions -void xforms_nowFunction(xmlXPathParserContextPtr ctxt, int nargs); -void xforms_daysFromDateFunction(xmlXPathParserContextPtr ctxt, int nargs); -void xforms_secondsFromDateTimeFunction(xmlXPathParserContextPtr ctxt, int nargs); -void xforms_secondsFuction(xmlXPathParserContextPtr ctxt, int nargs); -void xforms_monthsFuction(xmlXPathParserContextPtr ctxt, int nargs); - -// Node-set Functions -void xforms_instanceFuction(xmlXPathParserContextPtr ctxt, int nargs); - -// Node-set Functions; XForms 1.1 -void xforms_currentFunction(xmlXPathParserContextPtr ctxt, int nargs); - -// --- lookup --- -xmlXPathFunction xforms_lookupFunc(void *ctxt, const xmlChar *name, const xmlChar *ns_uri); - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |