/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include "ReportDrawPage.hxx" #include "RptObject.hxx" #include "RptModel.hxx" #include "RptDef.hxx" #include "corestrings.hrc" #include #include #include #include #include #include #include #include #include namespace reportdesign { using namespace ::com::sun::star; using namespace rptui; OReportDrawPage::OReportDrawPage(SdrPage* _pPage ,const uno::Reference< report::XSection >& _xSection) : SvxDrawPage(_pPage) ,m_xSection(_xSection) { } SdrObject* OReportDrawPage::_CreateSdrObject( const uno::Reference< drawing::XShape > & xDescr ) throw () { uno::Reference< report::XReportComponent> xReportComponent(xDescr,uno::UNO_QUERY); if ( xReportComponent.is() ) return OObjectBase::createObject(xReportComponent); return SvxDrawPage::_CreateSdrObject( xDescr ); } uno::Reference< drawing::XShape > OReportDrawPage::_CreateShape( SdrObject *pObj ) const throw () { OObjectBase* pBaseObj = dynamic_cast(pObj); if ( !pBaseObj ) return SvxDrawPage::_CreateShape( pObj ); uno::Reference< report::XSection> xSection = m_xSection; uno::Reference< lang::XMultiServiceFactory> xFactory; if ( xSection.is() ) xFactory.set(xSection->getReportDefinition(),uno::UNO_QUERY); uno::Reference< drawing::XShape > xRet; uno::Reference< drawing::XShape > xShape; if ( xFactory.is() ) { bool bChangeOrientation = false; ::rtl::OUString sServiceName = pBaseObj->getServiceName(); OSL_ENSURE(sServiceName.getLength(),"No Service Name given!"); if ( pObj->ISA(OUnoObject) ) { OUnoObject* pUnoObj = dynamic_cast(pObj); if ( pUnoObj->GetObjIdentifier() == OBJ_DLG_FIXEDTEXT ) { uno::Reference xControlModel(pUnoObj->GetUnoControlModel(),uno::UNO_QUERY); if ( xControlModel.is() ) xControlModel->setPropertyValue( PROPERTY_MULTILINE,uno::makeAny(sal_True)); } else bChangeOrientation = pUnoObj->GetObjIdentifier() == OBJ_DLG_HFIXEDLINE; SvxShapeControl* pShape = new SvxShapeControl( pObj ); xShape.set(*pShape,uno::UNO_QUERY); pShape->setShapeKind(pObj->GetObjIdentifier()); } else if ( pObj->ISA(OCustomShape) ) { SvxCustomShape* pShape = new SvxCustomShape( pObj ); uno::Reference < drawing::XEnhancedCustomShapeDefaulter > xShape2 = pShape; xShape.set(xShape2,uno::UNO_QUERY); pShape->setShapeKind(pObj->GetObjIdentifier()); } else if ( pObj->ISA(SdrOle2Obj) ) { SdrOle2Obj* pOle2Obj = dynamic_cast(pObj); if ( !pOle2Obj->GetObjRef().is() ) { sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT; uno::Reference < embed::XEmbeddedObject > xObj; ::rtl::OUString sName; xObj = pObj->GetModel()->GetPersist()->getEmbeddedObjectContainer().CreateEmbeddedObject( ::comphelper::MimeConfigurationHelper::GetSequenceClassIDRepresentation( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("80243D39-6741-46C5-926E-069164FF87BB"))), sName ); OSL_ENSURE(xObj.is(),"Embedded Object could not be created!"); /************************************************** * Das leere OLE-Objekt bekommt ein neues IPObj **************************************************/ pObj->SetEmptyPresObj(sal_False); pOle2Obj->SetOutlinerParaObject(NULL); pOle2Obj->SetObjRef(xObj); pOle2Obj->SetPersistName(sName); pOle2Obj->SetName(sName); pOle2Obj->SetAspect(nAspect); Rectangle aRect = pOle2Obj->GetLogicRect(); Size aTmp = aRect.GetSize(); awt::Size aSz( aTmp.Width(), aTmp.Height() ); xObj->setVisualAreaSize( nAspect, aSz ); } SvxOle2Shape* pShape = new SvxOle2Shape( pObj ); xShape.set(*pShape,uno::UNO_QUERY); pShape->setShapeKind(pObj->GetObjIdentifier()); //xShape = new SvxOle2Shape( pOle2Obj ); } if ( !xShape.is() ) xShape.set( SvxDrawPage::_CreateShape( pObj ) ); try { OReportModel* pRptModel = static_cast(pObj->GetModel()); xRet.set( pRptModel->createShape(sServiceName,xShape,bChangeOrientation ? 0 : 1), uno::UNO_QUERY_THROW ); } catch( const uno::Exception& ) { DBG_UNHANDLED_EXCEPTION(); } } return xRet; } }