diff options
author | Christian Lippka <cl@openoffice.org> | 2010-02-23 00:23:09 +0100 |
---|---|---|
committer | Christian Lippka <cl@openoffice.org> | 2010-02-23 00:23:09 +0100 |
commit | 1294294cc6db6560140b3ebc7aed82f77e58dd44 (patch) | |
tree | 285b16410ff0606196a254976694d1ca16f5e318 | |
parent | 9a0e6f1451435e0c2223d91dec51e95b1ccb0b35 (diff) |
presentation placeholder rework
-rw-r--r-- | sd/inc/pres.hxx | 2 | ||||
-rw-r--r-- | sd/inc/sdpage.hxx | 3 | ||||
-rw-r--r-- | sd/source/core/sdpage.cxx | 92 | ||||
-rw-r--r-- | sd/source/filter/ppt/pptin.cxx | 2 | ||||
-rw-r--r-- | sd/source/ui/func/fuinsert.cxx | 19 | ||||
-rw-r--r-- | sd/source/ui/table/tablefunction.cxx | 22 | ||||
-rw-r--r-- | sd/source/ui/unoidl/unomodel.cxx | 14 | ||||
-rw-r--r-- | sd/source/ui/unoidl/unopage.cxx | 33 | ||||
-rw-r--r-- | sd/source/ui/view/drawview.cxx | 4 | ||||
-rw-r--r-- | sd/source/ui/view/sdview4.cxx | 50 | ||||
-rw-r--r-- | sd/source/ui/view/sdview5.cxx | 1 |
11 files changed, 126 insertions, 116 deletions
diff --git a/sd/inc/pres.hxx b/sd/inc/pres.hxx index 32146fb6f46c..d34429afaa7d 100644 --- a/sd/inc/pres.hxx +++ b/sd/inc/pres.hxx @@ -50,6 +50,8 @@ enum PresObjKind PRESOBJ_FOOTER, PRESOBJ_DATETIME, PRESOBJ_SLIDENUMBER, + PRESOBJ_CALC, + PRESOBJ_MEDIA, PRESOBJ_MAX }; diff --git a/sd/inc/sdpage.hxx b/sd/inc/sdpage.hxx index 34010fc6198b..5d358eb99ba9 100644 --- a/sd/inc/sdpage.hxx +++ b/sd/inc/sdpage.hxx @@ -214,9 +214,6 @@ public: /** inserts the given SdrObject into the presentation object list */ void InsertPresObj(SdrObject* pObj, PresObjKind eKind ); - /** replace the given SdrObject with the new SdrObject in the presentation object list */ - void ReplacePresObj(SdrObject* pOldObj, SdrObject* pNewObj, PresObjKind eNewKind ); - void SetAutoLayout(AutoLayout eLayout, BOOL bInit=FALSE, BOOL bCreate=FALSE); AutoLayout GetAutoLayout() const { return meAutoLayout; } void CreateTitleAndLayout(BOOL bInit=FALSE, BOOL bCreate=FALSE); diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx index 1983205d1fe9..360ac670de6c 100644 --- a/sd/source/core/sdpage.cxx +++ b/sd/source/core/sdpage.cxx @@ -161,10 +161,20 @@ SdPage::~SdPage() delete mpItems; } +struct OrdNumSorter +{ + bool operator()( SdrObject* p1, SdrObject* p2 ) + { + return p1->GetOrdNum() < p2->GetOrdNum(); + } +}; + /** returns the nIndex'th object from the given PresObjKind, index starts with 1 */ SdrObject* SdPage::GetPresObj(PresObjKind eObjKind, int nIndex, bool bFuzzySearch /* = false */ ) { - int nObjFound = 0; // index of the searched object + // first sort all matching shapes with z-order + std::vector< SdrObject* > aMatches; + SdrObject* pObj = 0; while( (pObj = maPresentationShapeList.getNextShape(pObj)) != 0 ) { @@ -185,7 +195,9 @@ SdrObject* SdPage::GetPresObj(PresObjKind eObjKind, int nIndex, bool bFuzzySearc case PRESOBJ_CHART: case PRESOBJ_ORGCHART: case PRESOBJ_TABLE: + case PRESOBJ_CALC: case PRESOBJ_IMAGE: + case PRESOBJ_MEDIA: bFound = TRUE; break; default: @@ -194,13 +206,23 @@ SdrObject* SdPage::GetPresObj(PresObjKind eObjKind, int nIndex, bool bFuzzySearc } if( bFound ) { - nObjFound++; // found one - if( nObjFound == nIndex ) - return pObj; + aMatches.push_back( pObj ); } } } + if( aMatches.size() > 1 ) + { + OrdNumSorter aSortHelper; + std::sort( aMatches.begin(), aMatches.end(), aSortHelper ); + } + + if( nIndex > 0 ) + nIndex--; + + if( aMatches.size() > nIndex ) + return aMatches[nIndex]; + return 0; } @@ -276,6 +298,7 @@ SdrObject* SdPage::CreatePresObj(PresObjKind eObjKind, BOOL bVertical, const Rec } break; + case PRESOBJ_MEDIA: case PRESOBJ_OBJECT: { pSdrObj = new SdrOle2Obj(); @@ -305,6 +328,7 @@ SdrObject* SdPage::CreatePresObj(PresObjKind eObjKind, BOOL bVertical, const Rec } case PRESOBJ_TABLE: + case PRESOBJ_CALC: { pSdrObj = new SdrOle2Obj(); ( (SdrOle2Obj*) pSdrObj)->SetProgName( String( RTL_CONSTASCII_USTRINGPARAM( "StarCalc" ))); @@ -514,7 +538,7 @@ SdrObject* SdPage::CreatePresObj(PresObjKind eObjKind, BOOL bVertical, const Rec if ( eObjKind == PRESOBJ_OBJECT || eObjKind == PRESOBJ_CHART || eObjKind == PRESOBJ_ORGCHART || - eObjKind == PRESOBJ_TABLE || + eObjKind == PRESOBJ_CALC || eObjKind == PRESOBJ_GRAPHIC ) { SfxItemSet aSet( ((SdDrawDocument*) pModel)->GetPool() ); @@ -1424,6 +1448,12 @@ void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescripto case PRESOBJ_TITLE: bFound = eSdrObjKind == OBJ_TITLETEXT; break; + case PRESOBJ_TABLE: + bFound = eSdrObjKind == OBJ_TABLE; + break; + case PRESOBJ_MEDIA: + bFound = eSdrObjKind == OBJ_MEDIA; + break; case PRESOBJ_OUTLINE: bFound = (eSdrObjKind == OBJ_OUTLINETEXT) || ((eSdrObjKind == OBJ_TEXT) && bPresStyle) || @@ -1469,7 +1499,7 @@ void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescripto } break; case PRESOBJ_CHART: - case PRESOBJ_TABLE: + case PRESOBJ_CALC: if( eSdrObjKind == OBJ_OLE2 ) { SdrOle2Obj* pOle2 = dynamic_cast< SdrOle2Obj* >( pObj ); @@ -1479,7 +1509,7 @@ void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescripto ((eKind == PRESOBJ_CHART) && ( pOle2->GetProgName().EqualsAscii( "StarChart" ) || pOle2->IsChart() ) ) || - ((eKind == PRESOBJ_TABLE) && + ((eKind == PRESOBJ_CALC) && ( pOle2->GetProgName().EqualsAscii( "StarCalc" ) || pOle2->IsCalc() ) ) ) { bFound = true; @@ -2199,23 +2229,6 @@ SdrObject* convertPresentationObjectImpl( SdPage& rPage, SdrObject* pSourceObj, return pNewObj; } -static void SetLogicRect( SdrObject* pObj, Rectangle& rLogicRect ) -{ - if( pObj ) - { - if( (pObj->GetObjInventor() == SdrInventor) && (pObj->GetObjIdentifier() == OBJ_TABLE) ) - { - Rectangle aRect( rLogicRect ); - aRect.setHeight( pObj->GetLogicRect().getHeight() ); - pObj->SetLogicRect( aRect ); - } - else - { - pObj->SetLogicRect( rLogicRect ); - } - } -} - /** reuses or creates a presentation shape for an auto layout that fits the given parameter @param eObjKind @@ -2254,10 +2267,10 @@ SdrObject* SdPage::InsertAutoLayoutShape( SdrObject* pObj, PresObjKind eObjKind, pUndoManager->AddUndoAction( new UndoObjectUserCall( *pObj ) ); } - if ( pObj->ISA(SdrGrafObj) && !pObj->IsEmptyPresObj() ) - ( (SdrGrafObj*) pObj)->AdjustToMaxRect( aRect, FALSE ); - else - SetLogicRect( pObj, aRect ); +// if ( pObj->ISA(SdrGrafObj) && !pObj->IsEmptyPresObj() ) + ( /*(SdrGrafObj*)*/ pObj)->AdjustToMaxRect( aRect ); +// else +// SetLogicRect( pObj, aRect ); pObj->SetUserCall(this); @@ -2338,7 +2351,7 @@ SdrObject* SdPage::InsertAutoLayoutShape( SdrObject* pObj, PresObjKind eObjKind, } if ( pObj && ( pObj->IsEmptyPresObj() || !pObj->ISA(SdrGrafObj) ) ) - SetLogicRect( pObj, aRect ); + pObj->AdjustToMaxRect( aRect ); return pObj; } @@ -2392,25 +2405,6 @@ void SdPage::InsertPresObj(SdrObject* pObj, PresObjKind eKind ) } } -void SdPage::ReplacePresObj(SdrObject* pOldObj, SdrObject* pNewObj, PresObjKind eNewKind ) -{ - if( !pNewObj ) - { - RemovePresObj( pOldObj ); - } - else if( pOldObj ) - { - SdAnimationInfo* pInfo = SdDrawDocument::GetShapeUserData(*pNewObj, true); - if( pInfo ) - pInfo->mePresObjKind = eNewKind; - maPresentationShapeList.replaceShape(*pOldObj, *pNewObj); - } - else - { - InsertPresObj( pNewObj, eNewKind ); - } -} - /************************************************************************* |* |* Text des Objektes setzen @@ -2775,7 +2769,7 @@ String SdPage::GetPresObjText(PresObjKind eObjKind) const { aString = String ( SdResId( STR_PRESOBJ_ORGCHART ) ); } - else if (eObjKind == PRESOBJ_TABLE) + else if (eObjKind == PRESOBJ_CALC) { aString = String ( SdResId( STR_PRESOBJ_TABLE ) ); } diff --git a/sd/source/filter/ppt/pptin.cxx b/sd/source/filter/ppt/pptin.cxx index 37277a17c97b..ce06753f11b0 100644 --- a/sd/source/filter/ppt/pptin.cxx +++ b/sd/source/filter/ppt/pptin.cxx @@ -2437,7 +2437,7 @@ SdrObject* ImplSdPPTImport::ApplyTextObj( PPTTextObj* pTextObj, SdrTextObj* pObj case PPT_PLACEHOLDER_MEDIACLIP : case PPT_PLACEHOLDER_OBJECT : ePresObjKind = PRESOBJ_OBJECT; break; case PPT_PLACEHOLDER_GRAPH : ePresObjKind = PRESOBJ_CHART; break; - case PPT_PLACEHOLDER_TABLE : ePresObjKind = PRESOBJ_TABLE; break; + case PPT_PLACEHOLDER_TABLE : ePresObjKind = PRESOBJ_CALC; break; case PPT_PLACEHOLDER_CLIPART : ePresObjKind = PRESOBJ_GRAPHIC; break; case PPT_PLACEHOLDER_ORGANISZATIONCHART : ePresObjKind = PRESOBJ_ORGCHART; break; } diff --git a/sd/source/ui/func/fuinsert.cxx b/sd/source/ui/func/fuinsert.cxx index daae9f37b49f..ce0dc8f67a58 100644 --- a/sd/source/ui/func/fuinsert.cxx +++ b/sd/source/ui/func/fuinsert.cxx @@ -368,19 +368,8 @@ void FuInsertOLE::DoExecute( SfxRequest& rReq ) SdPage* pPage = static_cast< SdPage* >(pPickObj->GetPage()); if(pPage && pPage->IsPresObj(pPickObj)) { - bUndo = mpView->IsUndoEnabled(); - - if( bUndo ) - mpView->BegUndo( SdrUndoNewObj::GetComment(*pOleObj) ); - - // add new PresObj to the list + pPage->InsertPresObj( pOleObj, ePresObjKind ); pOleObj->SetUserCall(pPickObj->GetUserCall()); - if( bUndo ) - { - mpView->AddUndo( new sd::UndoObjectPresentationKind( *pPickObj ) ); - mpView->AddUndo( new sd::UndoObjectPresentationKind( *pOleObj ) ); - } - pPage->ReplacePresObj(pPickObj, pOleObj, ePresObjKind); } } @@ -423,11 +412,7 @@ void FuInsertOLE::DoExecute( SfxRequest& rReq ) } } - if( bUndo ) - { - mpView->EndUndo(); - } - else if( pPickObj ) + if( !mpView->IsUndoEnabled() && pPickObj ) { // replaced object must be freed if there is no undo action owning it SdrObject::Free( pPickObj ); diff --git a/sd/source/ui/table/tablefunction.cxx b/sd/source/ui/table/tablefunction.cxx index dc5f999ff601..4c12445a513f 100644 --- a/sd/source/ui/table/tablefunction.cxx +++ b/sd/source/ui/table/tablefunction.cxx @@ -177,26 +177,14 @@ void DrawViewShell::FuTable(SfxRequest& rReq) apply_table_style( pObj, GetDoc(), sTableStyle ); SdrPageView* pPV = mpView->GetSdrPageView(); - bool bUndo = false; // if we have a pick obj we need to make this new ole a pres obj replacing the current pick obj if( pPickObj ) { SdPage* pPage = static_cast< SdPage* >(pPickObj->GetPage()); if(pPage && pPage->IsPresObj(pPickObj)) { - bUndo = mpView->IsUndoEnabled(); - - if( bUndo ) - mpView->BegUndo( SdrUndoNewObj::GetComment(*pObj) ); - - // add new PresObj to the list - pObj->SetUserCall(pPickObj->GetUserCall()); - if( bUndo ) - { - mpView->AddUndo( new sd::UndoObjectPresentationKind( *pPickObj ) ); - mpView->AddUndo( new sd::UndoObjectPresentationKind( *pObj ) ); - } - pPage->ReplacePresObj(pPickObj, pObj, PRESOBJ_TABLE); + pObj->SetUserCall( pPickObj->GetUserCall() ); + pPage->InsertPresObj( pObj, PRESOBJ_TABLE ); } } @@ -205,11 +193,7 @@ void DrawViewShell::FuTable(SfxRequest& rReq) else mpView->InsertObjectAtView(pObj, *pPV, SDRINSERT_SETDEFLAYER); - if( bUndo ) - { - mpView->EndUndo(); - } - else if( pPickObj ) + if( !mpView->IsUndoEnabled() && pPickObj ) { // replaced object must be freed if there is no undo action owning it SdrObject::Free( pPickObj ); diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx index 2e753fd859d1..32c86305941c 100644 --- a/sd/source/ui/unoidl/unomodel.cxx +++ b/sd/source/ui/unoidl/unomodel.cxx @@ -1083,10 +1083,14 @@ uno::Reference< uno::XInterface > SAL_CALL SdXImpressDocument::createInstance( c { nType = OBJ_OLE2; } - else if( aType.EqualsAscii( "TableShape", 26, 10 ) ) + else if( aType.EqualsAscii( "CalcShape", 26, 9 ) ) { nType = OBJ_OLE2; } + else if( aType.EqualsAscii( "TableShape", 26, 10 ) ) + { + nType = OBJ_TABLE; + } else if( aType.EqualsAscii( "OrgChartShape", 26, 13 ) ) { nType = OBJ_OLE2; @@ -1115,9 +1119,9 @@ uno::Reference< uno::XInterface > SAL_CALL SdXImpressDocument::createInstance( c { nType = OBJ_TEXT; } - else if( aType.EqualsAscii( "TableShape", 26, 10 ) ) + else if( aType.EqualsAscii( "MediaShape", 26, 10 ) ) { - nType = OBJ_TABLE; + nType = OBJ_MEDIA; } else { @@ -1168,7 +1172,7 @@ uno::Sequence< OUString > SAL_CALL SdXImpressDocument::getAvailableServiceNames( const uno::Sequence< OUString > aSNS_ORG( SvxFmMSFactory::getAvailableServiceNames() ); - uno::Sequence< OUString > aSNS( mbImpressDoc ? (34) : (19) ); + uno::Sequence< OUString > aSNS( mbImpressDoc ? (36) : (19) ); sal_uInt16 i(0); @@ -1211,6 +1215,8 @@ uno::Sequence< OUString > SAL_CALL SdXImpressDocument::getAvailableServiceNames( aSNS[i++] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.HeaderShape")); aSNS[i++] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.SlideNumberShape")); aSNS[i++] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.DateTimeShape")); + aSNS[i++] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.CalcShape")); + aSNS[i++] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.MediaShape")); } else { diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx index 685bb4a48144..dd455e5557bb 100644 --- a/sd/source/ui/unoidl/unopage.cxx +++ b/sd/source/ui/unoidl/unopage.cxx @@ -412,7 +412,7 @@ SdrObject * SdGenericDrawPage::_CreateSdrObject( const Reference< drawing::XShap String aType( xShape->getShapeType() ); const String aPrefix( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.") ); - if(aType.CompareTo( aPrefix, aPrefix.Len() ) != 0) + if( aType.CompareTo( aPrefix, aPrefix.Len() ) != 0 ) { SdrObject* pObj = SvxFmDrawPage::_CreateSdrObject( xShape ); if( pObj && ( (pObj->GetObjInventor() != SdrInventor) || (pObj->GetObjIdentifier() != OBJ_PAGE) ) ) @@ -448,6 +448,10 @@ SdrObject * SdGenericDrawPage::_CreateSdrObject( const Reference< drawing::XShap { eObjKind = PRESOBJ_CHART; } + else if( aType.EqualsAscii( "CalcShape" ) ) + { + eObjKind = PRESOBJ_CALC; + } else if( aType.EqualsAscii( "TableShape" ) ) { eObjKind = PRESOBJ_TABLE; @@ -495,6 +499,10 @@ SdrObject * SdGenericDrawPage::_CreateSdrObject( const Reference< drawing::XShap { eObjKind = PRESOBJ_DATETIME; } + else if( aType.EqualsAscii( "MediaShape" ) ) + { + eObjKind = PRESOBJ_MEDIA; + } Rectangle aRect( eObjKind == PRESOBJ_TITLE ? GetPage()->GetTitleRect() : GetPage()->GetLayoutRect() ); @@ -504,7 +512,22 @@ SdrObject * SdGenericDrawPage::_CreateSdrObject( const Reference< drawing::XShap const awt::Size aSize( aRect.GetWidth(), aRect.GetHeight() ); xShape->setSize( aSize ); - SdrObject *pPresObj = GetPage()->CreatePresObj( eObjKind, FALSE, aRect, sal_True ); + SdrObject *pPresObj = 0; + if( (eObjKind == PRESOBJ_TABLE) || (eObjKind == PRESOBJ_MEDIA) ) + { + pPresObj = SvxFmDrawPage::_CreateSdrObject( xShape ); + if( pPresObj ) + { + SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); + if( pDoc ) + pPresObj->NbcSetStyleSheet( pDoc->GetDefaultStyleSheet(), sal_True ); + GetPage()->InsertPresObj( pPresObj, eObjKind ); + } + } + else + { + pPresObj = GetPage()->CreatePresObj( eObjKind, FALSE, aRect, sal_True ); + } if( pPresObj ) pPresObj->SetUserCall( GetPage() ); @@ -1389,9 +1412,15 @@ Reference< drawing::XShape > SdGenericDrawPage::_CreateShape( SdrObject *pObj ) case PRESOBJ_ORGCHART: aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("OrgChartShape") ); break; + case PRESOBJ_CALC: + aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("CalcShape") ); + break; case PRESOBJ_TABLE: aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("TableShape") ); break; + case PRESOBJ_MEDIA: + aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("MediaShape") ); + break; case PRESOBJ_BACKGROUND: DBG_ASSERT( sal_False, "Danger! Someone got hold of the horrible background shape!" ); break; diff --git a/sd/source/ui/view/drawview.cxx b/sd/source/ui/view/drawview.cxx index c96417d04640..e6fb02a06c3d 100644 --- a/sd/source/ui/view/drawview.cxx +++ b/sd/source/ui/view/drawview.cxx @@ -627,7 +627,9 @@ void DrawView::DeleteMarked() case PRESOBJ_CHART: case PRESOBJ_ORGCHART: case PRESOBJ_TABLE: + case PRESOBJ_CALC: case PRESOBJ_IMAGE: + case PRESOBJ_MEDIA: ePresObjKind = PRESOBJ_OUTLINE; break; default: @@ -640,8 +642,6 @@ void DrawView::DeleteMarked() pPage->SetObjectOrdNum( pNewObj->GetOrdNum(), pObj->GetOrdNum() ); - pPage->ReplacePresObj( pObj, pNewObj, ePresObjKind ); - bResetLayout = true; } } diff --git a/sd/source/ui/view/sdview4.cxx b/sd/source/ui/view/sdview4.cxx index 25d1b22dc633..49496086e084 100644 --- a/sd/source/ui/view/sdview4.cxx +++ b/sd/source/ui/view/sdview4.cxx @@ -145,20 +145,11 @@ SdrGrafObj* View::InsertGraphic( const Graphic& rGraphic, sal_Int8& rAction, pNewGrafObj->SetEmptyPresObj(FALSE); } - const bool bUndo = IsUndoEnabled(); - if( bUndo ) - BegUndo(String(SdResId(STR_UNDO_DRAGDROP))); - if (pPage && pPage->IsPresObj(pPickObj)) { // Neues PresObj in die Liste eintragen + pPage->InsertPresObj( pNewGrafObj, PRESOBJ_GRAPHIC ); pNewGrafObj->SetUserCall(pPickObj->GetUserCall()); - if( bUndo ) - { - AddUndo( new sd::UndoObjectPresentationKind( *pPickObj ) ); - AddUndo( new sd::UndoObjectPresentationKind( *pNewGrafObj ) ); - } - pPage->ReplacePresObj(pPickObj, pNewGrafObj, PRESOBJ_GRAPHIC); } if (pImageMap) @@ -166,11 +157,7 @@ SdrGrafObj* View::InsertGraphic( const Graphic& rGraphic, sal_Int8& rAction, ReplaceObjectAtView(pPickObj, *pPV, pNewGrafObj); // maybe ReplaceObjectAtView - if( bUndo ) - { - EndUndo(); - } - else + if( !IsUndoEnabled() && pPickObj ) { SdrObject::Free( pPickObj ); } @@ -310,7 +297,7 @@ SdrMediaObj* View::InsertMediaURL( const rtl::OUString& rMediaURL, sal_Int8& rAc SdrMediaObj* pNewMediaObj = NULL; SdrPageView* pPV = GetSdrPageView(); - SdrObject* pPickObj = NULL; + SdrObject* pPickObj = GetEmptyPresentationObject( PRESOBJ_MEDIA ); if(pPV && this->ISA(::sd::slidesorter::view::SlideSorterView )) { @@ -335,10 +322,35 @@ SdrMediaObj* View::InsertMediaURL( const rtl::OUString& rMediaURL, sal_Int8& rAc } else if( pPV ) { - pNewMediaObj = new SdrMediaObj( Rectangle( rPos, rSize ) ); + Rectangle aRect( rPos, rSize ); + if( pPickObj ) + aRect = pPickObj->GetLogicRect(); + + + pNewMediaObj = new SdrMediaObj( aRect ); + + if( pPickObj ) + { + SdPage* pPage = static_cast< SdPage* >(pPickObj->GetPage()); + if(pPage && pPage->IsPresObj(pPickObj)) + { + pPage->InsertPresObj( pNewMediaObj, PRESOBJ_MEDIA ); + pNewMediaObj->SetUserCall(pPickObj->GetUserCall()); + } + } + + if( pPickObj ) + ReplaceObjectAtView(pPickObj, *pPV, pNewMediaObj); + else + InsertObjectAtView( pNewMediaObj, *pPV, SDRINSERT_SETDEFLAYER ); + + pNewMediaObj->setURL( rMediaURL ); + + if( pPickObj ) + pNewMediaObj->AdjustToMaxRect( pPickObj->GetLogicRect() ); - if( pPV && InsertObjectAtView( pNewMediaObj, *pPV, SDRINSERT_SETDEFLAYER ) ) - pNewMediaObj->setURL( rMediaURL ); + if( !IsUndoEnabled() ) + SdrObject::Free( pPickObj ); } rAction = mnAction; diff --git a/sd/source/ui/view/sdview5.cxx b/sd/source/ui/view/sdview5.cxx index c86b8f191b9c..18a58b8cd2cf 100644 --- a/sd/source/ui/view/sdview5.cxx +++ b/sd/source/ui/view/sdview5.cxx @@ -48,6 +48,7 @@ static bool implIsMultiPresObj( PresObjKind eKind ) case PRESOBJ_ORGCHART: case PRESOBJ_TABLE: case PRESOBJ_IMAGE: + case PRESOBJ_MEDIA: return true; default: return false; |