summaryrefslogtreecommitdiff
path: root/forms/source/component/Button.cxx
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2012-01-28 20:52:45 +0100
committerMichael Stahl <mstahl@redhat.com>2012-01-28 20:52:45 +0100
commit2e626373db2412ac22e8c5c27a60d11cd29e875b (patch)
tree9e9f67205cd5b72f1031721273e1534a3a1e5b0f /forms/source/component/Button.cxx
parentf7ee7bbd5174b084f018c2ec94d8c70c98ee04da (diff)
replace obsolete "master" branch with README that points at new repoHEADmaster-deletedmaster
Diffstat (limited to 'forms/source/component/Button.cxx')
-rw-r--r--forms/source/component/Button.cxx781
1 files changed, 0 insertions, 781 deletions
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: */