1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_extensions.hxx" 30 #include "formcontroller.hxx" 31 #include "pcrcommon.hxx" 32 #include "formstrings.hxx" 33 #include "defaultforminspection.hxx" 34 #ifndef _EXTENSIONS_FORMCTRLR_FORMHELPID_HRC_ 35 #include "propctrlr.hrc" 36 #endif 37 38 /** === begin UNO includes === **/ 39 #include <com/sun/star/beans/PropertyAttribute.hpp> 40 #include <com/sun/star/form/XGridColumnFactory.hpp> 41 #include <com/sun/star/form/XForm.hpp> 42 #include <com/sun/star/container/XChild.hpp> 43 /** === end UNO includes === **/ 44 #include <cppuhelper/typeprovider.hxx> 45 #include <toolkit/helper/vclunohelper.hxx> 46 47 //------------------------------------------------------------------------ 48 extern "C" void SAL_CALL createRegistryInfo_FormController() 49 { 50 ::pcr::OAutoRegistration< ::pcr::FormController > aFormControllerRegistration; 51 ::pcr::OAutoRegistration< ::pcr::DialogController > aDialogControllerRegistration; 52 } 53 54 //........................................................................ 55 namespace pcr 56 { 57 //........................................................................ 58 59 /** === begin UNO using === **/ 60 using ::com::sun::star::uno::Reference; 61 using ::com::sun::star::uno::TypeClass_INTERFACE; 62 using ::com::sun::star::uno::TypeClass_STRING; 63 using ::com::sun::star::uno::XComponentContext; 64 using ::com::sun::star::inspection::XObjectInspectorModel; 65 using ::com::sun::star::uno::RuntimeException; 66 using ::com::sun::star::uno::UNO_QUERY_THROW; 67 using ::com::sun::star::uno::Sequence; 68 using ::com::sun::star::uno::XInterface; 69 using ::com::sun::star::beans::XPropertySetInfo; 70 using ::com::sun::star::beans::XPropertySet; 71 using ::com::sun::star::beans::Property; 72 using ::com::sun::star::uno::Any; 73 using ::com::sun::star::lang::IllegalArgumentException; 74 using ::com::sun::star::uno::Exception; 75 using ::com::sun::star::uno::Type; 76 using ::com::sun::star::util::VetoException; 77 using ::com::sun::star::beans::PropertyVetoException; 78 using ::com::sun::star::uno::UNO_QUERY; 79 using ::com::sun::star::form::XGridColumnFactory; 80 using ::com::sun::star::form::XForm; 81 using ::com::sun::star::container::XChild; 82 using ::com::sun::star::frame::XFrame; 83 using ::com::sun::star::awt::XWindow; 84 /** === end UNO using === **/ 85 86 namespace PropertyAttribute = ::com::sun::star::beans::PropertyAttribute; 87 88 //==================================================================== 89 //= FormController 90 //==================================================================== 91 //-------------------------------------------------------------------- 92 FormController::FormController( const Reference< XComponentContext >& _rxContext, ServiceDescriptor _aServiceDescriptor, 93 bool _bUseFormFormComponentHandlers ) 94 :OPropertyBrowserController( _rxContext ) 95 ,FormController_PropertyBase1( m_aBHelper ) 96 ,m_aServiceDescriptor( _aServiceDescriptor ) 97 { 98 osl_incrementInterlockedCount( &m_refCount ); 99 { 100 Reference< XObjectInspectorModel > xModel( 101 *(new DefaultFormComponentInspectorModel( _rxContext, _bUseFormFormComponentHandlers )), 102 UNO_QUERY_THROW 103 ); 104 setInspectorModel( xModel ); 105 } 106 osl_decrementInterlockedCount( &m_refCount ); 107 } 108 109 //------------------------------------------------------------------------ 110 FormController::~FormController() 111 { 112 } 113 114 //------------------------------------------------------------------------ 115 IMPLEMENT_FORWARD_XINTERFACE2( FormController, OPropertyBrowserController, FormController_PropertyBase1 ) 116 117 //------------------------------------------------------------------------ 118 Sequence< Type > SAL_CALL FormController::getTypes( ) throw(RuntimeException) 119 { 120 ::cppu::OTypeCollection aTypes( 121 ::getCppuType( static_cast< Reference< XPropertySet >* >(NULL) ), 122 ::getCppuType( static_cast< Reference< XMultiPropertySet >* >(NULL) ), 123 ::getCppuType( static_cast< Reference< XFastPropertySet >* >(NULL) ), 124 OPropertyBrowserController::getTypes()); 125 return aTypes.getTypes(); 126 } 127 128 //------------------------------------------------------------------------ 129 IMPLEMENT_GET_IMPLEMENTATION_ID( FormController ) 130 131 //------------------------------------------------------------------------ 132 ::rtl::OUString SAL_CALL FormController::getImplementationName( ) throw(RuntimeException) 133 { 134 return m_aServiceDescriptor.GetImplementationName(); 135 } 136 137 //------------------------------------------------------------------------ 138 Sequence< ::rtl::OUString > SAL_CALL FormController::getSupportedServiceNames( ) throw(RuntimeException) 139 { 140 Sequence< ::rtl::OUString > aSupported( m_aServiceDescriptor.GetSupportedServiceNames() ); 141 aSupported.realloc( aSupported.getLength() + 1 ); 142 aSupported[ aSupported.getLength() - 1 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.inspection.ObjectInspector" ) ); 143 return aSupported; 144 } 145 146 //------------------------------------------------------------------------ 147 ::rtl::OUString FormController::getImplementationName_static( ) throw(RuntimeException) 148 { 149 return ::rtl::OUString::createFromAscii("org.openoffice.comp.extensions.FormController"); 150 } 151 152 //------------------------------------------------------------------------ 153 Sequence< ::rtl::OUString > FormController::getSupportedServiceNames_static( ) throw(RuntimeException) 154 { 155 Sequence< ::rtl::OUString > aSupported(1); 156 aSupported[0] = ::rtl::OUString::createFromAscii( "com.sun.star.form.PropertyBrowserController" ); 157 return aSupported; 158 } 159 160 //------------------------------------------------------------------------ 161 Reference< XInterface > SAL_CALL FormController::Create(const Reference< XComponentContext >& _rxContext ) 162 { 163 ServiceDescriptor aService; 164 aService.GetImplementationName = &FormController::getImplementationName_static; 165 aService.GetSupportedServiceNames = &FormController::getSupportedServiceNames_static; 166 return *(new FormController( _rxContext, aService, true ) ); 167 } 168 169 //------------------------------------------------------------------------ 170 Reference< XPropertySetInfo > SAL_CALL FormController::getPropertySetInfo( ) throw(RuntimeException) 171 { 172 return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); 173 } 174 175 //------------------------------------------------------------------------ 176 ::cppu::IPropertyArrayHelper& SAL_CALL FormController::getInfoHelper() 177 { 178 return *getArrayHelper(); 179 } 180 181 //------------------------------------------------------------------------ 182 ::cppu::IPropertyArrayHelper* FormController::createArrayHelper( ) const 183 { 184 Sequence< Property > aProps( 2 ); 185 aProps[0] = Property( 186 PROPERTY_CURRENTPAGE, 187 OWN_PROPERTY_ID_CURRENTPAGE, 188 ::getCppuType( static_cast< ::rtl::OUString* >( NULL ) ), 189 PropertyAttribute::TRANSIENT 190 ); 191 aProps[1] = Property( 192 PROPERTY_INTROSPECTEDOBJECT, 193 OWN_PROPERTY_ID_INTROSPECTEDOBJECT, 194 XPropertySet::static_type(), 195 PropertyAttribute::TRANSIENT | PropertyAttribute::CONSTRAINED 196 ); 197 return new ::cppu::OPropertyArrayHelper( aProps ); 198 } 199 200 //------------------------------------------------------------------------ 201 sal_Bool SAL_CALL FormController::convertFastPropertyValue( Any & rConvertedValue, Any & rOldValue, sal_Int32 nHandle, const Any& rValue ) throw (IllegalArgumentException) 202 { 203 switch ( nHandle ) 204 { 205 case OWN_PROPERTY_ID_INTROSPECTEDOBJECT: 206 if ( rValue.getValueTypeClass() != TypeClass_INTERFACE ) 207 throw IllegalArgumentException(); 208 break; 209 case OWN_PROPERTY_ID_CURRENTPAGE: 210 if ( rValue.getValueTypeClass() != TypeClass_STRING ) 211 throw IllegalArgumentException(); 212 break; 213 } 214 215 getFastPropertyValue( rOldValue, nHandle ); 216 rConvertedValue = rValue; 217 return sal_True; 218 } 219 220 //------------------------------------------------------------------------ 221 void SAL_CALL FormController::setFastPropertyValue_NoBroadcast(sal_Int32 _nHandle, const Any& _rValue) throw (Exception) 222 { 223 switch ( _nHandle ) 224 { 225 case OWN_PROPERTY_ID_INTROSPECTEDOBJECT: 226 { 227 Reference< XObjectInspectorModel > xModel( getInspectorModel() ); 228 if ( xModel.is() ) 229 { 230 try 231 { 232 m_xCurrentInspectee.set( _rValue, UNO_QUERY ); 233 Sequence< Reference< XInterface > > aObjects; 234 if ( m_xCurrentInspectee.is() ) 235 { 236 aObjects.realloc( 1 ); 237 aObjects[0] = m_xCurrentInspectee; 238 } 239 240 Reference< XObjectInspector > xInspector( *this, UNO_QUERY_THROW ); 241 xInspector->inspect( aObjects ); 242 } 243 catch( const VetoException& e ) 244 { 245 throw PropertyVetoException( e.Message, e.Context ); 246 } 247 } 248 } 249 break; 250 case OWN_PROPERTY_ID_CURRENTPAGE: 251 restoreViewData( _rValue ); 252 break; 253 } 254 } 255 256 //------------------------------------------------------------------------ 257 void SAL_CALL FormController::getFastPropertyValue( ::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const 258 { 259 switch ( nHandle ) 260 { 261 case OWN_PROPERTY_ID_INTROSPECTEDOBJECT: 262 rValue <<= m_xCurrentInspectee; 263 break; 264 265 case OWN_PROPERTY_ID_CURRENTPAGE: 266 rValue = const_cast< FormController* >( this )->getViewData(); 267 break; 268 } 269 } 270 271 //==================================================================== 272 //= DialogController 273 //==================================================================== 274 //------------------------------------------------------------------------ 275 ::rtl::OUString DialogController::getImplementationName_static( ) throw(RuntimeException) 276 { 277 return ::rtl::OUString::createFromAscii("org.openoffice.comp.extensions.DialogController"); 278 } 279 280 //------------------------------------------------------------------------ 281 Sequence< ::rtl::OUString > DialogController::getSupportedServiceNames_static( ) throw(RuntimeException) 282 { 283 Sequence< ::rtl::OUString > aSupported(1); 284 aSupported[0] = ::rtl::OUString::createFromAscii( "com.sun.star.awt.PropertyBrowserController" ); 285 return aSupported; 286 } 287 288 //------------------------------------------------------------------------ 289 Reference< XInterface > SAL_CALL DialogController::Create(const Reference< XComponentContext >& _rxContext) 290 { 291 ServiceDescriptor aService; 292 aService.GetImplementationName = &DialogController::getImplementationName_static; 293 aService.GetSupportedServiceNames = &DialogController::getSupportedServiceNames_static; 294 return *(new FormController( _rxContext, aService, false ) ); 295 } 296 297 //........................................................................ 298 } // namespace pcr 299 //........................................................................ 300