1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #include "precompiled_reportdesign.hxx" 24 #include "DataProviderHandler.hxx" 25 #include <com/sun/star/lang/XInitialization.hpp> 26 #include <comphelper/namedvaluecollection.hxx> 27 #include <comphelper/sequence.hxx> 28 #include <comphelper/property.hxx> 29 #include <comphelper/types.hxx> 30 #include "uistrings.hrc" 31 #include <toolkit/helper/vclunohelper.hxx> 32 #include <unotools/syslocale.hxx> 33 #include <com/sun/star/inspection/PropertyControlType.hpp> 34 #include <com/sun/star/inspection/PropertyLineElement.hpp> 35 #include <com/sun/star/chart/ChartDataRowSource.hpp> 36 #include <com/sun/star/chart2/XDiagram.hpp> 37 #include <com/sun/star/chart2/XCoordinateSystemContainer.hpp> 38 #include <com/sun/star/chart2/XChartTypeContainer.hpp> 39 #include <com/sun/star/chart2/XChartType.hpp> 40 #include <com/sun/star/chart2/XFormattedString.hpp> 41 #include <com/sun/star/chart2/XTitled.hpp> 42 #include <com/sun/star/chart2/XTitle.hpp> 43 #include <com/sun/star/chart2/data/XDataReceiver.hpp> 44 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> 45 #include <com/sun/star/report/XReportDefinition.hpp> 46 #include <com/sun/star/report/XSection.hpp> 47 #include <com/sun/star/inspection/XNumericControl.hpp> 48 #include <com/sun/star/container/XNameContainer.hpp> 49 #include <com/sun/star/util/MeasureUnit.hpp> 50 #include <tools/fldunit.hxx> 51 #include "metadata.hxx" 52 #include <vcl/svapp.hxx> 53 #include <vos/mutex.hxx> 54 #include "helpids.hrc" 55 #include "uistrings.hrc" 56 #include "RptResId.hrc" 57 #include "PropertyForward.hxx" 58 //........................................................................ 59 namespace rptui 60 { 61 //........................................................................ 62 using namespace ::com::sun::star; 63 64 DataProviderHandler::DataProviderHandler(uno::Reference< uno::XComponentContext > const & context) 65 :DataProviderHandler_Base(m_aMutex) 66 ,m_xContext(context) 67 ,m_pInfoService( new OPropertyInfoService() ) 68 { 69 try 70 { 71 m_xFormComponentHandler.set(m_xContext->getServiceManager()->createInstanceWithContext(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.inspection.FormComponentPropertyHandler")),m_xContext),uno::UNO_QUERY_THROW); 72 m_xTypeConverter.set(m_xContext->getServiceManager()->createInstanceWithContext( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.script.Converter" )),m_xContext),uno::UNO_QUERY_THROW); 73 74 }catch(uno::Exception) 75 { 76 } 77 } 78 79 //------------------------------------------------------------------------ 80 ::rtl::OUString SAL_CALL DataProviderHandler::getImplementationName( ) throw(uno::RuntimeException) 81 { 82 return getImplementationName_Static(); 83 } 84 85 //------------------------------------------------------------------------ 86 sal_Bool SAL_CALL DataProviderHandler::supportsService( const ::rtl::OUString& ServiceName ) throw(uno::RuntimeException) 87 { 88 return ::comphelper::existsValue(ServiceName,getSupportedServiceNames_static()); 89 } 90 91 //------------------------------------------------------------------------ 92 uno::Sequence< ::rtl::OUString > SAL_CALL DataProviderHandler::getSupportedServiceNames( ) throw(uno::RuntimeException) 93 { 94 return getSupportedServiceNames_static(); 95 } 96 97 //------------------------------------------------------------------------ 98 ::rtl::OUString DataProviderHandler::getImplementationName_Static( ) throw(uno::RuntimeException) 99 { 100 return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.report.DataProviderHandler")); 101 } 102 103 //------------------------------------------------------------------------ 104 uno::Sequence< ::rtl::OUString > DataProviderHandler::getSupportedServiceNames_static( ) throw(uno::RuntimeException) 105 { 106 uno::Sequence< ::rtl::OUString > aSupported(1); 107 aSupported[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.report.inspection.DataProviderHandler")); 108 return aSupported; 109 } 110 111 //------------------------------------------------------------------------ 112 uno::Reference< uno::XInterface > SAL_CALL DataProviderHandler::create( const uno::Reference< uno::XComponentContext >& _rxContext ) 113 { 114 return *(new DataProviderHandler( _rxContext )); 115 } 116 // overload WeakComponentImplHelperBase::disposing() 117 // This function is called upon disposing the component, 118 // if your component needs special work when it becomes 119 // disposed, do it here. 120 void SAL_CALL DataProviderHandler::disposing() 121 { 122 ::comphelper::disposeComponent(m_xFormComponentHandler); 123 ::comphelper::disposeComponent( m_xMasterDetails ); 124 ::comphelper::disposeComponent(m_xTypeConverter); 125 } 126 void SAL_CALL DataProviderHandler::addEventListener(const uno::Reference< lang::XEventListener > & xListener) throw (uno::RuntimeException) 127 { 128 m_xFormComponentHandler->addEventListener(xListener); 129 } 130 131 void SAL_CALL DataProviderHandler::removeEventListener(const uno::Reference< lang::XEventListener > & aListener) throw (uno::RuntimeException) 132 { 133 m_xFormComponentHandler->removeEventListener(aListener); 134 } 135 136 // inspection::XPropertyHandler: 137 138 /********************************************************************************/ 139 void SAL_CALL DataProviderHandler::inspect(const uno::Reference< uno::XInterface > & Component) throw (uno::RuntimeException, lang::NullPointerException) 140 { 141 try 142 { 143 uno::Reference< container::XNameContainer > xNameCont(Component,uno::UNO_QUERY); 144 const ::rtl::OUString sFormComponent(RTL_CONSTASCII_USTRINGPARAM("FormComponent")); 145 if ( xNameCont->hasByName(sFormComponent) ) 146 { 147 uno::Reference<beans::XPropertySet> xProp(xNameCont->getByName(sFormComponent),uno::UNO_QUERY); 148 const ::rtl::OUString sModel(RTL_CONSTASCII_USTRINGPARAM("Model")); 149 if ( xProp.is() && xProp->getPropertySetInfo()->hasPropertyByName(sModel) ) 150 { 151 m_xChartModel.set(xProp->getPropertyValue(sModel),uno::UNO_QUERY); 152 if ( m_xChartModel.is() ) 153 m_xFormComponent = m_xChartModel->getDataProvider(); 154 } 155 } 156 m_xDataProvider.set(m_xFormComponent,uno::UNO_QUERY); 157 m_xReportComponent.set( xNameCont->getByName( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ReportComponent" ) ) ), uno::UNO_QUERY ); 158 if ( m_xDataProvider.is() ) 159 { 160 ::boost::shared_ptr<AnyConverter> aNoConverter(new AnyConverter()); 161 TPropertyNamePair aPropertyMediation; 162 aPropertyMediation.insert( TPropertyNamePair::value_type( PROPERTY_MASTERFIELDS, TPropertyConverter(PROPERTY_MASTERFIELDS,aNoConverter) ) ); 163 aPropertyMediation.insert( TPropertyNamePair::value_type( PROPERTY_DETAILFIELDS, TPropertyConverter(PROPERTY_DETAILFIELDS,aNoConverter) ) ); 164 165 m_xMasterDetails = new OPropertyMediator( m_xDataProvider.get(), m_xReportComponent.get(), aPropertyMediation,sal_True ); 166 } 167 168 //const ::rtl::OUString sRowSet(RTL_CONSTASCII_USTRINGPARAM("RowSet")); 169 //if ( xNameCont->hasByName(sRowSet) ) 170 //{ 171 // uno::Reference<beans::XPropertySet> xProp(m_xFormComponentHandler,uno::UNO_QUERY); 172 // xProp->setPropertyValue(sRowSet,xNameCont->getByName(sRowSet)); 173 //} 174 } 175 catch(uno::Exception) 176 { 177 throw lang::NullPointerException(); 178 } 179 if ( m_xFormComponent.is() ) 180 { 181 m_xFormComponentHandler->inspect(m_xFormComponent); 182 } 183 } 184 185 uno::Any SAL_CALL DataProviderHandler::getPropertyValue(const ::rtl::OUString & PropertyName) throw (uno::RuntimeException, beans::UnknownPropertyException) 186 { 187 ::osl::MutexGuard aGuard( m_aMutex ); 188 uno::Any aPropertyValue; 189 const sal_Int32 nId = m_pInfoService->getPropertyId(PropertyName); 190 switch(nId) 191 { 192 case PROPERTY_ID_CHARTTYPE: 193 // TODO: We need a possiblity to get the UI of the selected chart type 194 //if( m_xChartModel.is() ) 195 //{ 196 // uno::Reference< chart2::XDiagram > xDiagram( m_xChartModel->getFirstDiagram() ); 197 // if( xDiagram.is() ) 198 // { 199 // ::rtl::OUString sChartTypes; 200 // uno::Reference< chart2::XCoordinateSystemContainer > xCooSysCnt( xDiagram, uno::UNO_QUERY_THROW ); 201 // const uno::Sequence< uno::Reference< chart2::XCoordinateSystem > > aCooSysSeq( xCooSysCnt->getCoordinateSystems()); 202 // const uno::Reference< chart2::XCoordinateSystem >* pIter = aCooSysSeq.getConstArray(); 203 // const uno::Reference< chart2::XCoordinateSystem >* pEnd = pIter + aCooSysSeq.getLength(); 204 // for(;pIter != pEnd;++pIter) 205 // { 206 // const uno::Reference< chart2::XChartTypeContainer > xCTCnt( *pIter, uno::UNO_QUERY_THROW ); 207 // const uno::Sequence< uno::Reference< chart2::XChartType > > aCTSeq( xCTCnt->getChartTypes()); 208 // const uno::Reference< chart2::XChartType >* pChartTypeIter = aCTSeq.getConstArray(); 209 // const uno::Reference< chart2::XChartType >* pChartTypeEnd = pChartTypeIter + aCTSeq.getLength(); 210 // for(;pChartTypeIter != pChartTypeEnd;++pChartTypeIter) 211 // { 212 // sChartTypes += (*pChartTypeIter)->getChartType(); 213 // sChartTypes += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(";")); 214 // } 215 // } 216 // aPropertyValue;// <<= sChartTypes; 217 // } 218 //} 219 break; 220 case PROPERTY_ID_PREVIEW_COUNT: 221 aPropertyValue <<= m_xDataProvider->getRowLimit(); 222 break; 223 default: 224 aPropertyValue = m_xFormComponentHandler->getPropertyValue( PropertyName ); 225 break; 226 } 227 return aPropertyValue; 228 } 229 230 void SAL_CALL DataProviderHandler::setPropertyValue(const ::rtl::OUString & PropertyName, const uno::Any & Value) throw (uno::RuntimeException, beans::UnknownPropertyException) 231 { 232 ::osl::MutexGuard aGuard( m_aMutex ); 233 uno::Any aPropertyValue; 234 const sal_Int32 nId = m_pInfoService->getPropertyId(PropertyName); 235 switch(nId) 236 { 237 case PROPERTY_ID_CHARTTYPE: 238 break; 239 case PROPERTY_ID_PREVIEW_COUNT: 240 m_xDataProvider->setPropertyValue(PropertyName,Value); 241 break; 242 default: 243 m_xFormComponentHandler->setPropertyValue(PropertyName, Value); 244 break; 245 } 246 } 247 // ----------------------------------------------------------------------------- 248 void DataProviderHandler::impl_updateChartTitle_throw(const uno::Any& _aValue) 249 { 250 uno::Reference<chart2::XTitled> xTitled(m_xChartModel,uno::UNO_QUERY); 251 if ( xTitled.is() ) 252 { 253 uno::Reference<chart2::XTitle> xTitle = xTitled->getTitleObject(); 254 if ( !xTitle.is() ) 255 { 256 xTitle.set(m_xContext->getServiceManager()->createInstanceWithContext(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart2.Title")),m_xContext),uno::UNO_QUERY); 257 xTitled->setTitleObject(xTitle); 258 } 259 if ( xTitle.is() ) 260 { 261 uno::Reference< chart2::XFormattedString> xFormatted(m_xContext->getServiceManager()->createInstanceWithContext(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart2.FormattedString")),m_xContext),uno::UNO_QUERY); 262 ::rtl::OUString sStr; 263 _aValue>>= sStr; 264 xFormatted->setString(sStr); 265 uno::Sequence< uno::Reference< chart2::XFormattedString> > aArgs(1); 266 aArgs[0] = xFormatted; 267 xTitle->setText(aArgs); 268 } 269 } // if ( xTitled.is() ) 270 } 271 272 beans::PropertyState SAL_CALL DataProviderHandler::getPropertyState(const ::rtl::OUString & PropertyName) throw (uno::RuntimeException, beans::UnknownPropertyException) 273 { 274 return m_xFormComponentHandler->getPropertyState(PropertyName); 275 } 276 277 inspection::LineDescriptor SAL_CALL DataProviderHandler::describePropertyLine(const ::rtl::OUString & PropertyName, const uno::Reference< inspection::XPropertyControlFactory > & _xControlFactory) throw (beans::UnknownPropertyException, lang::NullPointerException,uno::RuntimeException) 278 { 279 inspection::LineDescriptor aOut; 280 const sal_Int32 nId = m_pInfoService->getPropertyId(PropertyName); 281 switch(nId) 282 { 283 case PROPERTY_ID_CHARTTYPE: 284 aOut.PrimaryButtonId = rtl::OUString::createFromAscii(UID_RPT_PROP_CHARTTYPE_DLG); 285 aOut.Control = _xControlFactory->createPropertyControl(inspection::PropertyControlType::TextField , sal_True); 286 aOut.HasPrimaryButton = sal_True; 287 break; 288 case PROPERTY_ID_PREVIEW_COUNT: 289 aOut.Control = _xControlFactory->createPropertyControl(inspection::PropertyControlType::NumericField , sal_False); 290 break; 291 case PROPERTY_ID_MASTERFIELDS: 292 case PROPERTY_ID_DETAILFIELDS: 293 aOut.Control = _xControlFactory->createPropertyControl(inspection::PropertyControlType::StringListField , sal_False); 294 aOut.PrimaryButtonId = rtl::OUString::createFromAscii(UID_RPT_PROP_DLG_LINKFIELDS); 295 aOut.HasPrimaryButton = sal_True; 296 break; 297 default: 298 aOut = m_xFormComponentHandler->describePropertyLine(PropertyName, _xControlFactory); 299 } 300 if ( nId != -1 ) 301 { 302 aOut.Category = ((m_pInfoService->getPropertyUIFlags(nId ) & PROP_FLAG_DATA_PROPERTY) != 0) ? 303 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Data")) 304 : 305 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("General")); 306 aOut.HelpURL = HelpIdUrl::getHelpURL( m_pInfoService->getPropertyHelpId( nId ) ); 307 aOut.DisplayName = m_pInfoService->getPropertyTranslation(nId); 308 } 309 return aOut; 310 } 311 312 uno::Any SAL_CALL DataProviderHandler::convertToPropertyValue(const ::rtl::OUString & _rPropertyValue, const uno::Any & _rControlValue) throw (uno::RuntimeException, beans::UnknownPropertyException) 313 { 314 ::osl::MutexGuard aGuard( m_aMutex ); 315 uno::Any aPropertyValue( _rControlValue ); 316 const sal_Int32 nId = m_pInfoService->getPropertyId(_rPropertyValue); 317 switch(nId) 318 { 319 case PROPERTY_ID_CHARTTYPE: 320 break; 321 case PROPERTY_ID_PREVIEW_COUNT: 322 try 323 { 324 aPropertyValue = m_xTypeConverter->convertTo( _rControlValue, ::getCppuType((const sal_Int32*)0)); 325 } 326 catch( const uno::Exception& ) 327 { 328 OSL_ENSURE( sal_False, "DataProviderHandler::convertToPropertyValue: caught an exception while converting via TypeConverter!" ); 329 } 330 break; 331 case PROPERTY_ID_MASTERFIELDS: 332 case PROPERTY_ID_DETAILFIELDS: 333 break; 334 default: 335 aPropertyValue = m_xFormComponentHandler->convertToPropertyValue(_rPropertyValue, _rControlValue); 336 } 337 return aPropertyValue; 338 } 339 340 uno::Any SAL_CALL DataProviderHandler::convertToControlValue(const ::rtl::OUString & _rPropertyName, const uno::Any & _rPropertyValue, const uno::Type & ControlValueType) throw (uno::RuntimeException, beans::UnknownPropertyException) 341 { 342 uno::Any aControlValue( _rPropertyValue ); 343 if ( !aControlValue.hasValue() ) 344 // NULL is converted to NULL 345 return aControlValue; 346 347 ::osl::MutexGuard aGuard( m_aMutex ); 348 const sal_Int32 nId = m_pInfoService->getPropertyId(_rPropertyName); 349 switch(nId) 350 { 351 case PROPERTY_ID_CHARTTYPE: 352 break; 353 case PROPERTY_ID_MASTERFIELDS: 354 case PROPERTY_ID_DETAILFIELDS: 355 case PROPERTY_ID_PREVIEW_COUNT: 356 try 357 { 358 aControlValue = m_xTypeConverter->convertTo( _rPropertyValue, ControlValueType); 359 } 360 catch( const uno::Exception& ) 361 { 362 OSL_ENSURE( sal_False, "GeometryHandler::convertToPropertyValue: caught an exception while converting via TypeConverter!" ); 363 } 364 break; 365 default: 366 aControlValue = m_xFormComponentHandler->convertToControlValue(_rPropertyName, _rPropertyValue, ControlValueType); 367 } 368 return aControlValue; 369 } 370 371 void SAL_CALL DataProviderHandler::addPropertyChangeListener(const uno::Reference< beans::XPropertyChangeListener > & Listener) throw (uno::RuntimeException, lang::NullPointerException) 372 { 373 m_xFormComponentHandler->addPropertyChangeListener(Listener); 374 } 375 376 void SAL_CALL DataProviderHandler::removePropertyChangeListener(const uno::Reference< beans::XPropertyChangeListener > & _rxListener) throw (uno::RuntimeException) 377 { 378 m_xFormComponentHandler->removePropertyChangeListener(_rxListener); 379 } 380 381 uno::Sequence< beans::Property > SAL_CALL DataProviderHandler::getSupportedProperties() throw (uno::RuntimeException) 382 { 383 ::std::vector< beans::Property > aNewProps; 384 if( m_xChartModel.is() ) 385 { 386 m_pInfoService->getExcludeProperties( aNewProps, m_xFormComponentHandler ); 387 beans::Property aValue; 388 static const ::rtl::OUString s_pProperties[] = 389 { 390 PROPERTY_CHARTTYPE 391 ,PROPERTY_MASTERFIELDS 392 ,PROPERTY_DETAILFIELDS 393 ,PROPERTY_PREVIEW_COUNT 394 //,PROPERTY_TITLE 395 }; 396 397 for (size_t nPos = 0; nPos < sizeof(s_pProperties)/sizeof(s_pProperties[0]) ;++nPos ) 398 { 399 aValue.Name = s_pProperties[nPos]; 400 aNewProps.push_back(aValue); 401 } 402 } 403 return aNewProps.empty() ? uno::Sequence< beans::Property > () : uno::Sequence< beans::Property > (&(*aNewProps.begin()),aNewProps.size()); 404 } 405 406 uno::Sequence< ::rtl::OUString > SAL_CALL DataProviderHandler::getSupersededProperties() throw (uno::RuntimeException) 407 { 408 uno::Sequence< ::rtl::OUString > aRet(1); 409 aRet[0] = PROPERTY_TITLE; // have a look at OPropertyInfoService::getExcludeProperties 410 return aRet; 411 } 412 413 uno::Sequence< ::rtl::OUString > SAL_CALL DataProviderHandler::getActuatingProperties() throw (uno::RuntimeException) 414 { 415 ::osl::MutexGuard aGuard( m_aMutex ); 416 417 uno::Sequence< ::rtl::OUString > aSeq(1); 418 aSeq[0] = PROPERTY_TITLE; 419 return ::comphelper::concatSequences(m_xFormComponentHandler->getActuatingProperties(),aSeq); 420 } 421 422 ::sal_Bool SAL_CALL DataProviderHandler::isComposable( const ::rtl::OUString& _rPropertyName ) throw (uno::RuntimeException, beans::UnknownPropertyException) 423 { 424 return m_pInfoService->isComposable( _rPropertyName, m_xFormComponentHandler ); 425 } 426 427 inspection::InteractiveSelectionResult SAL_CALL DataProviderHandler::onInteractivePropertySelection(const ::rtl::OUString & PropertyName, ::sal_Bool Primary, uno::Any & out_Data, const uno::Reference< inspection::XObjectInspectorUI > & _rxInspectorUI) throw (uno::RuntimeException, beans::UnknownPropertyException, lang::NullPointerException) 428 { 429 if ( !_rxInspectorUI.is() ) 430 throw lang::NullPointerException(); 431 432 inspection::InteractiveSelectionResult eResult = inspection::InteractiveSelectionResult_Cancelled; 433 ::osl::ClearableMutexGuard aGuard( m_aMutex ); 434 435 const sal_Int32 nId = m_pInfoService->getPropertyId(PropertyName); 436 switch(nId) 437 { 438 case PROPERTY_ID_CHARTTYPE: 439 if ( impl_dialogChartType_nothrow(aGuard) ) 440 eResult = inspection::InteractiveSelectionResult_ObtainedValue; 441 break; 442 case PROPERTY_ID_MASTERFIELDS: 443 case PROPERTY_ID_DETAILFIELDS: 444 if ( impl_dialogLinkedFields_nothrow( aGuard ) ) 445 eResult = inspection::InteractiveSelectionResult_Success; 446 break; 447 default: 448 eResult = m_xFormComponentHandler->onInteractivePropertySelection(PropertyName, Primary, out_Data, _rxInspectorUI); 449 } 450 451 return eResult; 452 } 453 454 void SAL_CALL DataProviderHandler::actuatingPropertyChanged(const ::rtl::OUString & ActuatingPropertyName, const uno::Any & NewValue, const uno::Any & OldValue, const uno::Reference< inspection::XObjectInspectorUI > & InspectorUI, ::sal_Bool FirstTimeInit) throw (uno::RuntimeException, lang::NullPointerException) 455 { 456 ::osl::ClearableMutexGuard aGuard( m_aMutex ); 457 458 if ( ActuatingPropertyName == PROPERTY_COMMAND ) 459 { 460 if ( NewValue != OldValue ) 461 { 462 uno::Reference< report::XReportDefinition> xReport = m_xReportComponent->getSection()->getReportDefinition(); 463 bool bDoEnableMasterDetailFields = xReport.is() && xReport->getCommand().getLength() && m_xDataProvider->getCommand().getLength(); 464 InspectorUI->enablePropertyUIElements( PROPERTY_DETAILFIELDS, inspection::PropertyLineElement::PrimaryButton, bDoEnableMasterDetailFields ); 465 InspectorUI->enablePropertyUIElements( PROPERTY_MASTERFIELDS, inspection::PropertyLineElement::PrimaryButton, bDoEnableMasterDetailFields ); 466 467 sal_Bool bModified = xReport->isModified(); 468 // this fills the chart again 469 ::comphelper::NamedValueCollection aArgs; 470 aArgs.put( "CellRangeRepresentation", uno::makeAny( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "all" ) ) ) ); 471 aArgs.put( "HasCategories", uno::makeAny( sal_True ) ); 472 aArgs.put( "FirstCellAsLabel", uno::makeAny( sal_True ) ); 473 aArgs.put( "DataRowSource", uno::makeAny( chart::ChartDataRowSource_COLUMNS ) ); 474 uno::Reference< chart2::data::XDataReceiver > xReceiver(m_xChartModel,uno::UNO_QUERY_THROW); 475 xReceiver->setArguments( aArgs.getPropertyValues() ); 476 if ( !bModified ) 477 xReport->setModified(sal_False); 478 } // if ( NewValue != OldValue ) 479 m_xFormComponentHandler->actuatingPropertyChanged(ActuatingPropertyName, NewValue, OldValue, InspectorUI, FirstTimeInit); 480 } // if ( ActuatingPropertyName == PROPERTY_COMMAND ) 481 else if ( ActuatingPropertyName == PROPERTY_TITLE ) 482 { 483 if ( NewValue != OldValue ) 484 impl_updateChartTitle_throw(NewValue); 485 } 486 else 487 { 488 const sal_Int32 nId = m_pInfoService->getPropertyId(ActuatingPropertyName); 489 switch(nId) 490 { 491 492 case PROPERTY_ID_MASTERFIELDS: 493 break; 494 case PROPERTY_ID_DETAILFIELDS: 495 break; 496 default: 497 m_xFormComponentHandler->actuatingPropertyChanged(ActuatingPropertyName, NewValue, OldValue, InspectorUI, FirstTimeInit); 498 } 499 } 500 } 501 502 ::sal_Bool SAL_CALL DataProviderHandler::suspend(::sal_Bool Suspend) throw (uno::RuntimeException) 503 { 504 return m_xFormComponentHandler->suspend(Suspend); 505 } 506 bool DataProviderHandler::impl_dialogLinkedFields_nothrow( ::osl::ClearableMutexGuard& _rClearBeforeDialog ) const 507 { 508 uno::Sequence<uno::Any> aSeq(6); 509 beans::PropertyValue aParam; 510 aParam.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParentWindow")); 511 aParam.Value <<= m_xContext->getValueByName( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DialogParentWindow"))); 512 aSeq[0] <<= aParam; 513 aParam.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Detail")); 514 aParam.Value <<= m_xDataProvider; 515 aSeq[1] <<= aParam; 516 aParam.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Master")); 517 aParam.Value <<= m_xReportComponent->getSection()->getReportDefinition(); 518 aSeq[2] <<= aParam; 519 520 aParam.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Explanation")); 521 aParam.Value <<= ::rtl::OUString(String(ModuleRes(RID_STR_EXPLANATION))); 522 aSeq[3] <<= aParam; 523 aParam.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DetailLabel")); 524 aParam.Value <<= ::rtl::OUString(String(ModuleRes(RID_STR_DETAILLABEL))); 525 aSeq[4] <<= aParam; 526 aParam.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MasterLabel")); 527 aParam.Value <<= ::rtl::OUString(String(ModuleRes(RID_STR_MASTERLABEL))); 528 aSeq[5] <<= aParam; 529 530 uno::Reference< ui::dialogs::XExecutableDialog > xDialog( 531 m_xContext->getServiceManager()->createInstanceWithArgumentsAndContext( 532 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.form.ui.MasterDetailLinkDialog")),aSeq 533 , m_xContext), uno::UNO_QUERY); 534 535 _rClearBeforeDialog.clear(); 536 return ( xDialog->execute() != 0 ); 537 } 538 // ----------------------------------------------------------------------------- 539 bool DataProviderHandler::impl_dialogChartType_nothrow( ::osl::ClearableMutexGuard& _rClearBeforeDialog ) const 540 { 541 uno::Sequence<uno::Any> aSeq(2); 542 beans::PropertyValue aParam; 543 aParam.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParentWindow")); 544 aParam.Value <<= m_xContext->getValueByName( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DialogParentWindow"))); 545 aSeq[0] <<= aParam; 546 aParam.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ChartModel")); 547 aParam.Value <<= m_xChartModel; 548 aSeq[1] <<= aParam; 549 550 uno::Reference< ui::dialogs::XExecutableDialog > xDialog( 551 m_xContext->getServiceManager()->createInstanceWithArgumentsAndContext( 552 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.chart2.ChartTypeDialog")),aSeq 553 , m_xContext), uno::UNO_QUERY); 554 555 _rClearBeforeDialog.clear(); 556 return ( xDialog->execute() != 0 ); 557 } 558 //........................................................................ 559 } // namespace rptui 560 //........................................................................ 561 562