/************************************************************************* * * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: defaultforminspection.cxx,v $ * * $Revision: 1.2 $ * * last change: $Author: vg $ $Date: 2006-03-14 11:20:27 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. * * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2005 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library 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 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * ************************************************************************/ #ifndef EXTENSIONS_SOURCE_PROPCTRLR_DEFAULTFORMINSPECTION_HXX #include "defaultforminspection.hxx" #endif #ifndef _EXTENSIONS_PROPCTRLR_PCRCOMMON_HXX_ #include "pcrcommon.hxx" #endif #ifndef _EXTENSIONS_PROPCTRLR_PROPRESID_HRC_ #include "propresid.hrc" #endif #ifndef _EXTENSIONS_FORMCTRLR_PROPRESID_HRC_ #include "formresid.hrc" #endif #ifndef _EXTENSIONS_PROPCTRLR_MODULEPRC_HXX_ #include "modulepcr.hxx" #endif #ifndef _EXTENSIONS_FORMCTRLR_FORMHELPID_HRC_ #include "formhelpid.hrc" #endif #ifndef _EXTENSIONS_PROPCTRLR_FORMMETADATA_HXX_ #include "formmetadata.hxx" #endif /** === begin UNO includes === **/ /** === end UNO includes === **/ #ifndef _CPPUHELPER_IMPLBASE1_HXX_ #include #endif #ifndef _OSL_DIAGNOSE_H_ #include #endif //------------------------------------------------------------------------ extern "C" void SAL_CALL createRegistryInfo_DefaultFormComponentInspectorModel() { ::pcr::OAutoRegistration< ::pcr::DefaultFormComponentInspectorModel > aAutoRegistration; } //........................................................................ namespace pcr { //........................................................................ /** === begin UNO using === **/ using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; using ::com::sun::star::uno::Any; using ::com::sun::star::uno::RuntimeException; using ::com::sun::star::uno::XInterface; using ::com::sun::star::uno::XComponentContext; using ::com::sun::star::uno::Exception; using ::com::sun::star::lang::EventObject; using ::com::sun::star::inspection::PropertyCategoryDescriptor; using ::com::sun::star::beans::UnknownPropertyException; /** === end UNO using === **/ //==================================================================== //= DefaultFormComponentInspectorModel //==================================================================== //-------------------------------------------------------------------- DefaultFormComponentInspectorModel::DefaultFormComponentInspectorModel( const Reference< XComponentContext >& _rxContext, bool _bUseFormFormComponentHandlers ) :m_bUseFormComponentHandlers( _bUseFormFormComponentHandlers ) ,m_pInfoService( new OPropertyInfoService ) ,m_aContext( _rxContext ) { } //------------------------------------------------------------------------ DefaultFormComponentInspectorModel::~DefaultFormComponentInspectorModel() { } //------------------------------------------------------------------------ ::rtl::OUString SAL_CALL DefaultFormComponentInspectorModel::getImplementationName( ) throw(RuntimeException) { return getImplementationName_static(); } //------------------------------------------------------------------------ sal_Bool SAL_CALL DefaultFormComponentInspectorModel::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 DefaultFormComponentInspectorModel::getSupportedServiceNames( ) throw(RuntimeException) { return getSupportedServiceNames_static(); } //------------------------------------------------------------------------ ::rtl::OUString DefaultFormComponentInspectorModel::getImplementationName_static( ) throw(RuntimeException) { return ::rtl::OUString::createFromAscii( "org.openoffice.comp.extensions.DefaultFormComponentInspectorModel"); } //------------------------------------------------------------------------ Sequence< ::rtl::OUString > DefaultFormComponentInspectorModel::getSupportedServiceNames_static( ) throw(RuntimeException) { Sequence< ::rtl::OUString > aSupported(1); aSupported[0] = ::rtl::OUString::createFromAscii( "com.sun.star.form.inspection.DefaultFormComponentInspectorModel" ); return aSupported; } //------------------------------------------------------------------------ Reference< XInterface > SAL_CALL DefaultFormComponentInspectorModel::Create( const Reference< XComponentContext >& _rxContext ) { return *new DefaultFormComponentInspectorModel( _rxContext ); } //-------------------------------------------------------------------- Sequence< Any > SAL_CALL DefaultFormComponentInspectorModel::getHandlerFactories() throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); // service names for all our handlers struct { const sal_Char* serviceName; bool isFormOnly; } aFactories[] = { // a generic handler for form component properties (must precede the ButtonNavigationHandler) { "com.sun.star.form.inspection.FormComponentPropertyHandler", false }, // generic virtual edit properties { "com.sun.star.form.inspection.EditPropertyHandler", false }, // a handler which virtualizes the ButtonType property, to provide additional types like // "move to next record" { "com.sun.star.form.inspection.ButtonNavigationHandler", false }, // a handler for script events bound to form components or dialog elements { "com.sun.star.form.inspection.EventHandler", false }, // a handler which introduces virtual properties for binding controls to spreadsheet cells { "com.sun.star.form.inspection.CellBindingPropertyHandler", true }, // properties related to binding to an XForms DOM node { "com.sun.star.form.inspection.XMLFormsPropertyHandler", true }, // properties related to the XSD data against which a control content is validated { "com.sun.star.form.inspection.XSDValidationPropertyHandler", true }, // a handler which cares for XForms submissions { "com.sun.star.form.inspection.SubmissionPropertyHandler", true } }; sal_Int32 nFactories = sizeof( aFactories ) / sizeof( aFactories[ 0 ] ); Sequence< Any > aReturn( nFactories ); Any* pReturn = aReturn.getArray(); for ( sal_Int32 i = 0; i < nFactories; ++i ) { if ( aFactories[i].isFormOnly && !m_bUseFormComponentHandlers ) continue; *pReturn++ <<= ::rtl::OUString::createFromAscii( aFactories[i].serviceName ); } aReturn.realloc( pReturn - aReturn.getArray() ); return aReturn; } //-------------------------------------------------------------------- Sequence< PropertyCategoryDescriptor > SAL_CALL DefaultFormComponentInspectorModel::describeCategories( ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); struct { sal_Char* programmaticName; USHORT uiNameResId; sal_uInt32 helpId; } aCategories[] = { { "General", RID_STR_PROPPAGE_DEFAULT, HID_FM_PROPDLG_TAB_GENERAL }, { "Data", RID_STR_PROPPAGE_DATA, HID_FM_PROPDLG_TAB_DATA }, { "Events", RID_STR_EVENTS, HID_FM_PROPDLG_TAB_EVT } }; sal_Int32 nCategories = sizeof( aCategories ) / sizeof( aCategories[0] ); Sequence< PropertyCategoryDescriptor > aReturn( nCategories ); PropertyCategoryDescriptor* pReturn = aReturn.getArray(); for ( sal_Int32 i=0; iProgrammaticName = ::rtl::OUString::createFromAscii( aCategories[i].programmaticName ); pReturn->UIName = String( PcrRes( aCategories[i].uiNameResId ) ); pReturn->HelpURL = HelpIdUrl::getHelpURL( aCategories[i].helpId ); } return aReturn; } //-------------------------------------------------------------------- ::sal_Int32 SAL_CALL DefaultFormComponentInspectorModel::getPropertyOrderIndex( const ::rtl::OUString& _rPropertyName ) throw (RuntimeException) { sal_Int32 nPropertyId( m_pInfoService->getPropertyId( _rPropertyName ) ); if ( nPropertyId == -1 ) { if ( _rPropertyName.indexOf( ';' ) != -1 ) // it's an event. Just give it an arbitrary number - events will be on a separate // page, and by definition, if two properties have the same OrderIndex, then // they will be ordered as they appear in the handler's getSupportedProperties. return 1000; throw UnknownPropertyException(); } return m_pInfoService->getPropertyPos( nPropertyId ); } //........................................................................ } // namespace pcr //........................................................................