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 "Section.hxx" 25 #include <comphelper/enumhelper.hxx> 26 #include <connectivity/dbtools.hxx> 27 #include <com/sun/star/report/XReportComponent.hpp> 28 #include <com/sun/star/report/ForceNewPage.hpp> 29 #include <com/sun/star/beans/PropertyAttribute.hpp> 30 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 31 #ifndef REPORTDESIGN_SHARED_CORESTRINGS_HRC 32 #include "corestrings.hrc" 33 #endif 34 #include "core_resource.hxx" 35 #ifndef REPORTDESIGN_CORE_RESOURCE_HRC_ 36 #include "core_resource.hrc" 37 #endif 38 #include <tools/debug.hxx> 39 #include "Tools.hxx" 40 #include "RptModel.hxx" 41 #include "RptPage.hxx" 42 #include "ReportDefinition.hxx" 43 #include "Shape.hxx" 44 #include <svx/unoshape.hxx> 45 #include "RptObject.hxx" 46 #include "ReportDrawPage.hxx" 47 #include <comphelper/property.hxx> 48 // ============================================================================= 49 namespace reportdesign 50 { 51 // ============================================================================= 52 using namespace com::sun::star; 53 using namespace comphelper; 54 DBG_NAME( rpt_OSection ) 55 // ----------------------------------------------------------------------------- 56 uno::Sequence< ::rtl::OUString> lcl_getGroupAbsent() 57 { 58 ::rtl::OUString pProps[] = { 59 PROPERTY_CANGROW 60 ,PROPERTY_CANSHRINK 61 }; 62 63 return uno::Sequence< ::rtl::OUString >(pProps,sizeof(pProps)/sizeof(pProps[0])); 64 } 65 66 // ----------------------------------------------------------------------------- 67 OSection::OSection( const uno::Reference< report::XGroup >& _xParent 68 ,const uno::Reference< uno::XComponentContext >& context 69 ,bool /*_bPageSection*/) 70 :SectionBase(m_aMutex) 71 ,SectionPropertySet(context,static_cast< Implements >(IMPLEMENTS_PROPERTY_SET),lcl_getGroupAbsent()) 72 ,m_aContainerListeners(m_aMutex) 73 ,m_xContext(context) 74 ,m_xGroup(_xParent) 75 ,m_nHeight(3000) 76 ,m_nBackgroundColor(COL_TRANSPARENT) 77 ,m_nForceNewPage(report::ForceNewPage::NONE) 78 ,m_nNewRowOrCol(report::ForceNewPage::NONE) 79 ,m_bKeepTogether(sal_False) 80 ,m_bCanGrow(sal_False) 81 ,m_bCanShrink(sal_False) 82 ,m_bRepeatSection(sal_False) 83 ,m_bVisible(sal_True) 84 ,m_bBacktransparent(sal_True) 85 ,m_bInRemoveNotify(false) 86 ,m_bInInsertNotify(false) 87 { 88 DBG_CTOR( rpt_OSection,NULL); 89 init(); 90 } 91 // ----------------------------------------------------------------------------- 92 uno::Sequence< ::rtl::OUString> lcl_getAbsent(bool _bPageSection) 93 { 94 if ( _bPageSection ) 95 { 96 ::rtl::OUString pProps[] = { 97 PROPERTY_FORCENEWPAGE 98 ,PROPERTY_NEWROWORCOL 99 ,PROPERTY_KEEPTOGETHER 100 ,PROPERTY_CANGROW 101 ,PROPERTY_CANSHRINK 102 ,PROPERTY_REPEATSECTION 103 }; 104 return uno::Sequence< ::rtl::OUString >(pProps,sizeof(pProps)/sizeof(pProps[0])); 105 } 106 107 ::rtl::OUString pProps[] = { 108 PROPERTY_CANGROW 109 ,PROPERTY_CANSHRINK 110 ,PROPERTY_REPEATSECTION 111 }; 112 113 return uno::Sequence< ::rtl::OUString >(pProps,sizeof(pProps)/sizeof(pProps[0])); 114 } 115 // ----------------------------------------------------------------------------- 116 OSection::OSection(const uno::Reference< report::XReportDefinition >& _xParent 117 ,const uno::Reference< uno::XComponentContext >& context 118 ,bool _bPageSection) 119 :SectionBase(m_aMutex) 120 ,SectionPropertySet(context,SectionPropertySet::IMPLEMENTS_PROPERTY_SET,lcl_getAbsent(_bPageSection)) 121 ,m_aContainerListeners(m_aMutex) 122 ,m_xContext(context) 123 ,m_xReportDefinition(_xParent) 124 ,m_nHeight(3000) 125 ,m_nBackgroundColor(COL_TRANSPARENT) 126 ,m_nForceNewPage(report::ForceNewPage::NONE) 127 ,m_nNewRowOrCol(report::ForceNewPage::NONE) 128 ,m_bKeepTogether(sal_False) 129 ,m_bCanGrow(sal_False) 130 ,m_bCanShrink(sal_False) 131 ,m_bRepeatSection(sal_False) 132 ,m_bVisible(sal_True) 133 ,m_bBacktransparent(sal_True) 134 ,m_bInRemoveNotify(false) 135 ,m_bInInsertNotify(false) 136 { 137 DBG_CTOR( rpt_OSection,NULL); 138 init(); 139 //.getSdrModel()->createNewPage(m_xSection); 140 } 141 //-------------------------------------------------------------------------- 142 // TODO: VirtualFunctionFinder: This is virtual function! 143 // 144 OSection::~OSection() 145 { 146 DBG_DTOR( rpt_OSection,NULL); 147 if ( m_xProxy.is() ) 148 m_xProxy->setDelegator( NULL ); 149 } 150 //-------------------------------------------------------------------------- 151 //IMPLEMENT_FORWARD_XINTERFACE2(OSection,SectionBase,SectionPropertySet) 152 IMPLEMENT_FORWARD_REFCOUNT( OSection, SectionBase ) 153 // -------------------------------------------------------------------------------- 154 uno::Any SAL_CALL OSection::queryInterface( const uno::Type& _rType ) throw (uno::RuntimeException) 155 { 156 uno::Any aReturn = SectionBase::queryInterface(_rType); 157 if ( !aReturn.hasValue() ) 158 aReturn = SectionPropertySet::queryInterface(_rType); 159 160 if ( !aReturn.hasValue() && OReportControlModel::isInterfaceForbidden(_rType) ) 161 return aReturn; 162 163 return aReturn.hasValue() ? aReturn : (m_xProxy.is() ? m_xProxy->queryAggregation(_rType) : aReturn); 164 } 165 166 // ----------------------------------------------------------------------------- 167 void SAL_CALL OSection::dispose() throw(uno::RuntimeException) 168 { 169 OSL_ENSURE(!rBHelper.bDisposed,"Already disposed!"); 170 SectionPropertySet::dispose(); 171 cppu::WeakComponentImplHelperBase::dispose(); 172 173 } 174 // ----------------------------------------------------------------------------- 175 // TODO: VirtualFunctionFinder: This is virtual function! 176 // 177 void SAL_CALL OSection::disposing() 178 { 179 lang::EventObject aDisposeEvent( static_cast< ::cppu::OWeakObject* >( this ) ); 180 m_aContainerListeners.disposeAndClear( aDisposeEvent ); 181 m_xContext.clear(); 182 //m_xDrawPage.clear(); 183 184 /*uno::Reference< report::XReportDefinition> xReport = getReportDefinition(); 185 ::boost::shared_ptr<rptui::OReportModel> pModel = OReportDefinition::getSdrModel(xReport); 186 osl_incrementInterlockedCount( &m_refCount ); 187 while( m_xDrawPage.is() && m_xDrawPage->hasElements() ) 188 { 189 try 190 { 191 uno::Reference< drawing::XShape> xShape(m_xDrawPage->getByIndex(0),uno::UNO_QUERY); 192 m_xDrawPage->remove(xShape); 193 ::comphelper::disposeComponent(xShape); 194 } 195 catch(const uno::Exception&) 196 {} 197 } 198 if ( pModel ) 199 { 200 uno::Reference< report::XSection> xSection = this; 201 pModel->DeletePage(pModel->getPage(xSection)->GetPageNum()); 202 } 203 osl_decrementInterlockedCount( &m_refCount );*/ 204 } 205 //-------------------------------------------------------------------------- 206 ::rtl::OUString SAL_CALL OSection::getImplementationName( ) throw(uno::RuntimeException) 207 { 208 return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.report.Section")); 209 } 210 //------------------------------------------------------------------------------ 211 uno::Sequence< ::rtl::OUString> OSection::getSupportedServiceNames_Static(void) throw( uno::RuntimeException ) 212 { 213 uno::Sequence< ::rtl::OUString> aSupported(1); 214 aSupported.getArray()[0] = SERVICE_SECTION; 215 return aSupported; 216 } 217 //------------------------------------------------------------------------- 218 uno::Sequence< ::rtl::OUString> SAL_CALL OSection::getSupportedServiceNames() throw(uno::RuntimeException) 219 { 220 return getSupportedServiceNames_Static(); 221 } 222 // ----------------------------------------------------------------------------- 223 sal_Bool SAL_CALL OSection::supportsService( const ::rtl::OUString& _rServiceName ) throw(uno::RuntimeException) 224 { 225 return ::comphelper::existsValue(_rServiceName,getSupportedServiceNames_Static()); 226 } 227 // ----------------------------------------------------------------------------- 228 void OSection::init() 229 { 230 uno::Reference< report::XReportDefinition> xReport = getReportDefinition(); 231 ::boost::shared_ptr<rptui::OReportModel> pModel = OReportDefinition::getSdrModel(xReport); 232 OSL_ENSURE(pModel,"No odel set at the report definition!"); 233 if ( pModel ) 234 { 235 // DO NOT TOUCH THIS BLOCKS, WE HAVE A COMPILER PROBLEM UNDER SOLARIS X86 236 osl_incrementInterlockedCount( &m_refCount ); 237 { 238 uno::Reference<report::XSection> xTemp = this; 239 { 240 { 241 m_xProxy.set(pModel->createNewPage(xTemp)->getUnoPage(),uno::UNO_QUERY); 242 } 243 { 244 ::comphelper::query_aggregation(m_xProxy,m_xDrawPage); 245 } 246 247 // set ourself as delegator 248 { 249 if ( m_xProxy.is() ) 250 { 251 m_xProxy->setDelegator( xTemp ); 252 } 253 } 254 } 255 xTemp.clear(); 256 } 257 // DO NOT TOUCH THIS BLOCKS, WE HAVE A COMPILER PROBLEM UNDER SOLARIS X86 258 osl_decrementInterlockedCount( &m_refCount ); 259 } 260 } 261 // ----------------------------------------------------------------------------- 262 // XSection 263 // ----------------------------------------------------------------------------- 264 ::sal_Bool SAL_CALL OSection::getVisible() throw (uno::RuntimeException) 265 { 266 ::osl::MutexGuard aGuard(m_aMutex); 267 return m_bVisible; 268 } 269 // ----------------------------------------------------------------------------- 270 void SAL_CALL OSection::setVisible( ::sal_Bool _visible ) throw (uno::RuntimeException) 271 { 272 set(PROPERTY_VISIBLE,_visible,m_bVisible); 273 } 274 // ----------------------------------------------------------------------------- 275 ::rtl::OUString SAL_CALL OSection::getName() throw (uno::RuntimeException) 276 { 277 ::osl::MutexGuard aGuard(m_aMutex); 278 return m_sName; 279 } 280 // ----------------------------------------------------------------------------- 281 void SAL_CALL OSection::setName( const ::rtl::OUString& _name ) throw (uno::RuntimeException) 282 { 283 set(PROPERTY_NAME,_name,m_sName); 284 } 285 // ----------------------------------------------------------------------------- 286 ::sal_uInt32 SAL_CALL OSection::getHeight() throw (uno::RuntimeException) 287 { 288 ::osl::MutexGuard aGuard(m_aMutex); 289 return m_nHeight; 290 } 291 // ----------------------------------------------------------------------------- 292 void SAL_CALL OSection::setHeight( ::sal_uInt32 _height ) throw (uno::RuntimeException) 293 { 294 set(PROPERTY_HEIGHT,_height,m_nHeight); 295 } 296 // ----------------------------------------------------------------------------- 297 ::sal_Int32 SAL_CALL OSection::getBackColor() throw (uno::RuntimeException) 298 { 299 ::osl::MutexGuard aGuard(m_aMutex); 300 return m_bBacktransparent ? COL_TRANSPARENT : m_nBackgroundColor; 301 } 302 // ----------------------------------------------------------------------------- 303 void SAL_CALL OSection::setBackColor( ::sal_Int32 _backgroundcolor ) throw (uno::RuntimeException) 304 { 305 sal_Bool bTransparent = _backgroundcolor == static_cast<sal_Int32>(COL_TRANSPARENT); 306 setBackTransparent(bTransparent); 307 if ( !bTransparent ) 308 set(PROPERTY_BACKCOLOR,_backgroundcolor,m_nBackgroundColor); 309 } 310 // ----------------------------------------------------------------------------- 311 ::sal_Bool SAL_CALL OSection::getBackTransparent() throw (uno::RuntimeException) 312 { 313 ::osl::MutexGuard aGuard(m_aMutex); 314 return m_bBacktransparent; 315 } 316 // ----------------------------------------------------------------------------- 317 void SAL_CALL OSection::setBackTransparent( ::sal_Bool _backtransparent ) throw (uno::RuntimeException) 318 { 319 set(PROPERTY_BACKTRANSPARENT,_backtransparent,m_bBacktransparent); 320 if ( _backtransparent ) 321 set(PROPERTY_BACKCOLOR,static_cast<sal_Int32>(COL_TRANSPARENT),m_nBackgroundColor); 322 } 323 // ----------------------------------------------------------------------------- 324 ::rtl::OUString SAL_CALL OSection::getConditionalPrintExpression() throw (uno::RuntimeException) 325 { 326 ::osl::MutexGuard aGuard(m_aMutex); 327 return m_sConditionalPrintExpression; 328 } 329 // ----------------------------------------------------------------------------- 330 void SAL_CALL OSection::setConditionalPrintExpression( const ::rtl::OUString& _conditionalprintexpression ) throw (uno::RuntimeException) 331 { 332 set(PROPERTY_CONDITIONALPRINTEXPRESSION,_conditionalprintexpression,m_sConditionalPrintExpression); 333 } 334 // ----------------------------------------------------------------------------- 335 void OSection::checkNotPageHeaderFooter() 336 { 337 ::osl::MutexGuard aGuard(m_aMutex); 338 uno::Reference< report::XReportDefinition > xRet = m_xReportDefinition; 339 if ( xRet.is() ) 340 { 341 if ( xRet->getPageHeaderOn() && xRet->getPageHeader() == *this ) 342 throw beans::UnknownPropertyException(); 343 if ( xRet->getPageFooterOn() && xRet->getPageFooter() == *this ) 344 throw beans::UnknownPropertyException(); 345 } 346 } 347 // ----------------------------------------------------------------------------- 348 ::sal_Int16 SAL_CALL OSection::getForceNewPage() throw (beans::UnknownPropertyException, uno::RuntimeException) 349 { 350 ::osl::MutexGuard aGuard(m_aMutex); 351 352 checkNotPageHeaderFooter(); 353 return m_nForceNewPage; 354 } 355 // ----------------------------------------------------------------------------- 356 void SAL_CALL OSection::setForceNewPage( ::sal_Int16 _forcenewpage ) throw (lang::IllegalArgumentException, beans::UnknownPropertyException, uno::RuntimeException) 357 { 358 if ( _forcenewpage < report::ForceNewPage::NONE || _forcenewpage > report::ForceNewPage::BEFORE_AFTER_SECTION ) 359 throwIllegallArgumentException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com::sun::star::report::ForceNewPage")) 360 ,*this 361 ,1 362 ,m_xContext); 363 checkNotPageHeaderFooter(); 364 set(PROPERTY_FORCENEWPAGE,_forcenewpage,m_nForceNewPage); 365 } 366 // ----------------------------------------------------------------------------- 367 ::sal_Int16 SAL_CALL OSection::getNewRowOrCol() throw (beans::UnknownPropertyException, uno::RuntimeException) 368 { 369 ::osl::MutexGuard aGuard(m_aMutex); 370 checkNotPageHeaderFooter(); 371 return m_nNewRowOrCol; 372 } 373 // ----------------------------------------------------------------------------- 374 void SAL_CALL OSection::setNewRowOrCol( ::sal_Int16 _newroworcol ) throw (lang::IllegalArgumentException, beans::UnknownPropertyException, uno::RuntimeException) 375 { 376 if ( _newroworcol < report::ForceNewPage::NONE || _newroworcol > report::ForceNewPage::BEFORE_AFTER_SECTION ) 377 throwIllegallArgumentException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com::sun::star::report::ForceNewPage")) 378 ,*this 379 ,1 380 ,m_xContext); 381 checkNotPageHeaderFooter(); 382 383 set(PROPERTY_NEWROWORCOL,_newroworcol,m_nNewRowOrCol); 384 } 385 // ----------------------------------------------------------------------------- 386 ::sal_Bool SAL_CALL OSection::getKeepTogether() throw (beans::UnknownPropertyException, uno::RuntimeException) 387 { 388 ::osl::MutexGuard aGuard(m_aMutex); 389 checkNotPageHeaderFooter(); 390 return m_bKeepTogether; 391 } 392 // ----------------------------------------------------------------------------- 393 void SAL_CALL OSection::setKeepTogether( ::sal_Bool _keeptogether ) throw (lang::IllegalArgumentException, beans::UnknownPropertyException, uno::RuntimeException) 394 { 395 { 396 ::osl::MutexGuard aGuard(m_aMutex); 397 checkNotPageHeaderFooter(); 398 } 399 400 set(PROPERTY_KEEPTOGETHER,_keeptogether,m_bKeepTogether); 401 } 402 // ----------------------------------------------------------------------------- 403 ::sal_Bool SAL_CALL OSection::getCanGrow() throw (beans::UnknownPropertyException, uno::RuntimeException) 404 { 405 throw beans::UnknownPropertyException(); ///TODO: unsupported at the moment 406 } 407 // ----------------------------------------------------------------------------- 408 void SAL_CALL OSection::setCanGrow( ::sal_Bool /*_cangrow*/ ) throw (lang::IllegalArgumentException, beans::UnknownPropertyException, uno::RuntimeException) 409 { 410 throw beans::UnknownPropertyException(); ///TODO: unsupported at the moment 411 } 412 // ----------------------------------------------------------------------------- 413 ::sal_Bool SAL_CALL OSection::getCanShrink() throw (beans::UnknownPropertyException, uno::RuntimeException) 414 { 415 throw beans::UnknownPropertyException(); ///TODO: unsupported at the moment 416 } 417 // ----------------------------------------------------------------------------- 418 void SAL_CALL OSection::setCanShrink( ::sal_Bool /*_canshrink*/ ) throw (lang::IllegalArgumentException, beans::UnknownPropertyException, uno::RuntimeException) 419 { 420 throw beans::UnknownPropertyException(); ///TODO: unsupported at the moment 421 } 422 // ----------------------------------------------------------------------------- 423 ::sal_Bool SAL_CALL OSection::getRepeatSection() throw (beans::UnknownPropertyException, uno::RuntimeException) 424 { 425 ::osl::MutexGuard aGuard(m_aMutex); 426 uno::Reference< report::XGroup > xGroup = m_xGroup; 427 if ( !xGroup.is() ) 428 throw beans::UnknownPropertyException(); 429 return m_bRepeatSection; 430 } 431 // ----------------------------------------------------------------------------- 432 void SAL_CALL OSection::setRepeatSection( ::sal_Bool _repeatsection ) throw (lang::IllegalArgumentException, beans::UnknownPropertyException, uno::RuntimeException) 433 { 434 { 435 ::osl::MutexGuard aGuard(m_aMutex); 436 uno::Reference< report::XGroup > xGroup = m_xGroup; 437 if ( !xGroup.is() ) 438 throw beans::UnknownPropertyException(); 439 } 440 set(PROPERTY_REPEATSECTION,_repeatsection,m_bRepeatSection); 441 } 442 // ----------------------------------------------------------------------------- 443 uno::Reference< report::XGroup > SAL_CALL OSection::getGroup() throw (uno::RuntimeException) 444 { 445 ::osl::MutexGuard aGuard(m_aMutex); 446 return m_xGroup; 447 } 448 // ----------------------------------------------------------------------------- 449 uno::Reference< report::XReportDefinition > SAL_CALL OSection::getReportDefinition() throw (uno::RuntimeException) 450 { 451 ::osl::MutexGuard aGuard(m_aMutex); 452 uno::Reference< report::XReportDefinition > xRet = m_xReportDefinition; 453 uno::Reference< report::XGroup > xGroup = m_xGroup; 454 if ( !xRet.is() && xGroup.is() ) 455 { 456 uno::Reference< report::XGroups> xGroups(xGroup->getGroups()); 457 if ( xGroups.is() ) 458 xRet = xGroups->getReportDefinition(); 459 } 460 461 return xRet; 462 } 463 // ----------------------------------------------------------------------------- 464 const ::std::vector< ::rtl::OUString >& lcl_getControlModelMap() 465 { 466 static ::std::vector< ::rtl::OUString > s_sControlModels; 467 if ( s_sControlModels.empty() ) 468 { 469 s_sControlModels.push_back( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FixedText")) ); 470 s_sControlModels.push_back( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FixedLine")) ); 471 s_sControlModels.push_back( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImageControl")) ); 472 s_sControlModels.push_back( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FormattedField")) ); 473 s_sControlModels.push_back( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Shape")) ); 474 } // if ( s_sMap.empty() ) 475 return s_sControlModels; 476 477 } 478 // ----------------------------------------------------------------------------- 479 uno::Reference< report::XReportComponent > SAL_CALL OSection::createReportComponent( const ::rtl::OUString& _sReportComponentSpecifier ) throw (uno::Exception, lang::IllegalArgumentException,uno::RuntimeException) 480 { 481 ::osl::ResettableMutexGuard aGuard(m_aMutex); 482 const ::std::vector< ::rtl::OUString >& aRet = lcl_getControlModelMap(); 483 ::std::vector< ::rtl::OUString >::const_iterator aFind = ::std::find(aRet.begin(),aRet.end(),_sReportComponentSpecifier); 484 if ( aFind == aRet.end() ) 485 throw lang::IllegalArgumentException(); 486 487 uno::Reference< report::XReportComponent > xRet; 488 uno::Reference< lang::XMultiServiceFactory> xFac(getReportDefinition(),uno::UNO_QUERY_THROW); 489 switch( aFind - aRet.begin() ) 490 { 491 case 0: 492 xRet.set(xFac->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.component.FixedText"))),uno::UNO_QUERY); 493 break; 494 case 1: 495 xRet.set(xFac->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlFixedLineModel"))),uno::UNO_QUERY); 496 break; 497 case 2: 498 xRet.set(xFac->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.component.DatabaseImageControl"))),uno::UNO_QUERY); 499 break; 500 case 3: 501 xRet.set(xFac->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.component.FormattedField"))),uno::UNO_QUERY); 502 break; 503 case 4: 504 xRet.set(xFac->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.ControlShape"))),uno::UNO_QUERY); 505 break; 506 default: 507 //xRet = new OShape(m_xContext); 508 break; 509 } // switch( aRet.begin() - aFind ) 510 return xRet; 511 } 512 // ----------------------------------------------------------------------------- 513 uno::Sequence< ::rtl::OUString > SAL_CALL OSection::getAvailableReportComponentNames( ) throw (uno::RuntimeException) 514 { 515 ::osl::MutexGuard aGuard(m_aMutex); 516 517 const ::std::vector< ::rtl::OUString >& aRet = lcl_getControlModelMap(); 518 const ::rtl::OUString* pRet = aRet.empty() ? 0 : &aRet[0]; 519 return uno::Sequence< ::rtl::OUString >(pRet, aRet.size()); 520 } 521 // ----------------------------------------------------------------------------- 522 // XChild 523 uno::Reference< uno::XInterface > SAL_CALL OSection::getParent( ) throw (uno::RuntimeException) 524 { 525 uno::Reference< uno::XInterface > xRet; 526 { 527 ::osl::MutexGuard aGuard(m_aMutex); 528 xRet = m_xReportDefinition; 529 if ( !xRet.is() ) 530 xRet = m_xGroup; 531 } 532 return xRet; 533 } 534 // ----------------------------------------------------------------------------- 535 void SAL_CALL OSection::setParent( const uno::Reference< uno::XInterface >& /*Parent*/ ) throw (lang::NoSupportException, uno::RuntimeException) 536 { 537 throw lang::NoSupportException(); 538 } 539 // ----------------------------------------------------------------------------- 540 // XContainer 541 void SAL_CALL OSection::addContainerListener( const uno::Reference< container::XContainerListener >& xListener ) throw (uno::RuntimeException) 542 { 543 m_aContainerListeners.addInterface(xListener); 544 } 545 // ----------------------------------------------------------------------------- 546 void SAL_CALL OSection::removeContainerListener( const uno::Reference< container::XContainerListener >& xListener ) throw (uno::RuntimeException) 547 { 548 m_aContainerListeners.removeInterface(xListener); 549 } 550 // ----------------------------------------------------------------------------- 551 // XElementAccess 552 uno::Type SAL_CALL OSection::getElementType( ) throw (uno::RuntimeException) 553 { 554 return ::getCppuType(static_cast< uno::Reference<report::XReportComponent>*>(NULL)); 555 } 556 // ----------------------------------------------------------------------------- 557 ::sal_Bool SAL_CALL OSection::hasElements( ) throw (uno::RuntimeException) 558 { 559 ::osl::MutexGuard aGuard(m_aMutex); 560 return m_xDrawPage.is() ? m_xDrawPage->hasElements() : sal_False; 561 } 562 // ----------------------------------------------------------------------------- 563 // XIndexAccess 564 ::sal_Int32 SAL_CALL OSection::getCount( ) throw (uno::RuntimeException) 565 { 566 ::osl::MutexGuard aGuard(m_aMutex); 567 return m_xDrawPage.is() ? m_xDrawPage->getCount() : 0; 568 } 569 // ----------------------------------------------------------------------------- 570 uno::Any SAL_CALL OSection::getByIndex( ::sal_Int32 Index ) throw (lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException) 571 { 572 ::osl::MutexGuard aGuard(m_aMutex); 573 return m_xDrawPage->getByIndex(Index); 574 } 575 // ----------------------------------------------------------------------------- 576 // XEnumerationAccess 577 uno::Reference< container::XEnumeration > SAL_CALL OSection::createEnumeration( ) throw (uno::RuntimeException) 578 { 579 ::osl::MutexGuard aGuard(m_aMutex); 580 return new ::comphelper::OEnumerationByIndex(static_cast<XIndexAccess*>(this)); 581 } 582 // ----------------------------------------------------------------------------- 583 uno::Reference< beans::XPropertySetInfo > SAL_CALL OSection::getPropertySetInfo( ) throw(uno::RuntimeException) 584 { 585 return SectionPropertySet::getPropertySetInfo(); 586 } 587 // ------------------------------------------------------------------------- 588 void SAL_CALL OSection::setPropertyValue( const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 589 { 590 SectionPropertySet::setPropertyValue( aPropertyName, aValue ); 591 } 592 // ----------------------------------------------------------------------------- 593 uno::Any SAL_CALL OSection::getPropertyValue( const ::rtl::OUString& PropertyName ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 594 { 595 return SectionPropertySet::getPropertyValue( PropertyName); 596 } 597 // ----------------------------------------------------------------------------- 598 void SAL_CALL OSection::addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const uno::Reference< beans::XPropertyChangeListener >& xListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 599 { 600 SectionPropertySet::addPropertyChangeListener( aPropertyName, xListener ); 601 } 602 // ----------------------------------------------------------------------------- 603 void SAL_CALL OSection::removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const uno::Reference< beans::XPropertyChangeListener >& aListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 604 { 605 SectionPropertySet::removePropertyChangeListener( aPropertyName, aListener ); 606 } 607 // ----------------------------------------------------------------------------- 608 void SAL_CALL OSection::addVetoableChangeListener( const ::rtl::OUString& PropertyName, const uno::Reference< beans::XVetoableChangeListener >& aListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 609 { 610 SectionPropertySet::addVetoableChangeListener( PropertyName, aListener ); 611 } 612 // ----------------------------------------------------------------------------- 613 void SAL_CALL OSection::removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const uno::Reference< beans::XVetoableChangeListener >& aListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 614 { 615 SectionPropertySet::removeVetoableChangeListener( PropertyName, aListener ); 616 } 617 // ----------------------------------------------------------------------------- 618 void OSection::lcl_copySection(const uno::Reference< report::XSection>& _xSource,uno::Reference< report::XSection>& _xDest) 619 { 620 if ( _xSource.is() ) 621 { 622 ::comphelper::copyProperties(_xSource.get(),_xDest.get()); 623 sal_Int32 nCount = _xSource->getCount(); 624 for(sal_Int32 i = 0;i != nCount;++i) 625 { 626 uno::Reference<util::XCloneable> xClone(_xSource->getByIndex(i),uno::UNO_QUERY); 627 OSL_ENSURE(xClone.is(),"No XCloneable interface found!"); 628 if ( xClone.is() ) 629 { 630 uno::Reference< drawing::XShape> xShape(xClone->createClone(),uno::UNO_QUERY); 631 _xDest->add(xShape); 632 } 633 } 634 } 635 } 636 // ----------------------------------------------------------------------------- 637 void SAL_CALL OSection::add( const uno::Reference< drawing::XShape >& xShape ) throw (uno::RuntimeException) 638 { 639 { 640 ::osl::MutexGuard aGuard(m_aMutex); 641 m_bInInsertNotify = true; 642 OSL_ENSURE(m_xDrawPage.is(),"No DrawPage!"); 643 m_xDrawPage->add(xShape); 644 m_bInInsertNotify = false; 645 } 646 notifyElementAdded(xShape); 647 } 648 // ----------------------------------------------------------------------------- 649 void SAL_CALL OSection::remove( const uno::Reference< drawing::XShape >& xShape ) throw (uno::RuntimeException) 650 { 651 { 652 ::osl::MutexGuard aGuard(m_aMutex); 653 m_bInRemoveNotify = true; 654 OSL_ENSURE(m_xDrawPage.is(),"No DrawPage!"); 655 m_xDrawPage->remove(xShape); 656 m_bInRemoveNotify = false; 657 } 658 notifyElementRemoved(xShape); 659 } 660 // ----------------------------------------------------------------------------- 661 // ----------------------------------------------------------------------------- 662 // com::sun::star::lang::XUnoTunnel 663 //------------------------------------------------------------------ 664 sal_Int64 OSection::getSomething( const uno::Sequence< sal_Int8 > & rId ) throw (uno::RuntimeException) 665 { 666 if (rId.getLength() == 16 && 0 == rtl_compareMemory(getUnoTunnelImplementationId().getConstArray(), rId.getConstArray(), 16 ) ) 667 return reinterpret_cast<sal_Int64>(this); 668 uno::Reference< lang::XUnoTunnel> xTunnel; 669 ::comphelper::query_aggregation(m_xProxy,xTunnel); 670 return xTunnel->getSomething(rId); 671 } 672 673 // ----------------------------------------------------------------------------- 674 OSection* OSection::getImplementation( const uno::Reference< uno::XInterface >& _rxComponent ) 675 { 676 OSection* pContent( NULL ); 677 678 uno::Reference< lang::XUnoTunnel > xUnoTunnel( _rxComponent, uno::UNO_QUERY ); 679 if ( xUnoTunnel.is() ) 680 pContent = reinterpret_cast< OSection* >( xUnoTunnel->getSomething( getUnoTunnelImplementationId() ) ); 681 682 return pContent; 683 } 684 //------------------------------------------------------------------------ 685 uno::Sequence< sal_Int8 > OSection::getUnoTunnelImplementationId() 686 { 687 static ::cppu::OImplementationId * pId = 0; 688 if (! pId) 689 { 690 ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); 691 if (! pId) 692 { 693 static ::cppu::OImplementationId aId; 694 pId = &aId; 695 } 696 } 697 return pId->getImplementationId(); 698 } 699 // ----------------------------------------------------------------------------- 700 void OSection::notifyElementAdded(const uno::Reference< drawing::XShape >& xShape ) 701 { 702 if ( !m_bInInsertNotify ) 703 { 704 container::ContainerEvent aEvent(static_cast<container::XContainer*>(this), uno::Any(), uno::makeAny(xShape), uno::Any()); 705 m_aContainerListeners.notifyEach(&container::XContainerListener::elementInserted,aEvent); 706 } 707 } 708 // ----------------------------------------------------------------------------- 709 void OSection::notifyElementRemoved(const uno::Reference< drawing::XShape >& xShape) 710 { 711 if ( !m_bInRemoveNotify ) 712 { 713 // notify our container listeners 714 container::ContainerEvent aEvent(static_cast<container::XContainer*>(this), uno::Any(), uno::makeAny(xShape), uno::Any()); 715 m_aContainerListeners.notifyEach(&container::XContainerListener::elementRemoved,aEvent); 716 } 717 } 718 // ============================================================================= 719 } // namespace reportdesign 720 // ============================================================================= 721