const SfxItemSet& E3dSceneProperties::GetMergedItemSet() const
{ // prepare ItemSet if(moItemSet)
{ // filter for SDRATTR_3DSCENE_ items, only keep those items
SfxItemSetFixed<SDRATTR_3DSCENE_FIRST, SDRATTR_3DSCENE_LAST> aNew(*moItemSet->GetPool());
aNew.Put(*moItemSet);
moItemSet->ClearItem();
moItemSet->Put(aNew);
} else
{ // No ItemSet yet, force local ItemSet
GetObjectItemSet();
}
// collect all ItemSets of contained 3d objects const SdrObjList* pSub(static_cast<const E3dScene&>(GetSdrObject()).GetSubList());
OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)");
void E3dSceneProperties::SetMergedItemSet(const SfxItemSet& rSet, bool bClearAllItems, bool bAdjustTextFrameWidthAndHeight)
{ // Set SDRATTR_3DOBJ_ range at contained objects. const SdrObjList* pSub(static_cast<const E3dScene&>(GetSdrObject()).GetSubList());
OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)"); const size_t nCount(nullptr == pSub ? 0 : pSub->GetObjCount());
if(nCount)
{ // Generate filtered ItemSet which contains all but the SDRATTR_3DSCENE items. // #i50808# Leak fix, Clone produces a new instance and we get ownership here
std::unique_ptr<SfxItemSet> xNewSet(rSet.Clone());
for(sal_uInt16 b(SDRATTR_3DSCENE_FIRST); b <= SDRATTR_3DSCENE_LAST; b++)
{
xNewSet->ClearItem(b);
}
if(xNewSet->Count())
{ for (const rtl::Reference<SdrObject>& pObj : *pSub)
{ if(dynamic_cast<const E3dCompoundObject* >(pObj.get()))
{ // set merged ItemSet at contained 3d object.
pObj->SetMergedItemSet(*xNewSet, bClearAllItems, bAdjustTextFrameWidthAndHeight);
}
}
}
}
// call parent. This will set items on local object, too.
E3dProperties::SetMergedItemSet(rSet, bClearAllItems, bAdjustTextFrameWidthAndHeight);
}
void E3dSceneProperties::SetMergedItem(const SfxPoolItem& rItem)
{ const SdrObjList* pSub(static_cast<const E3dScene&>(GetSdrObject()).GetSubList());
OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)"); if (pSub) for (const rtl::Reference<SdrObject>& pObj : *pSub)
pObj->SetMergedItem(rItem);
// #i43809# call parent. This will set items on local object, too.
E3dProperties::SetMergedItem(rItem);
}
void E3dSceneProperties::ClearMergedItem(const sal_uInt16 nWhich)
{ const SdrObjList* pSub(static_cast<const E3dScene&>(GetSdrObject()).GetSubList());
OSL_ENSURE(nullptr != pSub, "Children of SdrObject expected (!)"); if (pSub) for (const rtl::Reference<SdrObject>& pObj : *pSub)
pObj->ClearMergedItem(nWhich);
// #i43809# call parent. This will clear items on local object, too.
E3dProperties::ClearMergedItem(nWhich);
}
// local changes
E3dScene& rObj = static_cast<E3dScene&>(GetSdrObject());
rObj.StructureChanged();
switch(nWhich)
{ case SDRATTR_3DSCENE_PERSPECTIVE : case SDRATTR_3DSCENE_DISTANCE : case SDRATTR_3DSCENE_FOCAL_LENGTH :
{ // #83387#, #83391# // one common function for the camera attributes // since SetCamera() sets all three back to the ItemSet
Camera3D aSceneCam(rObj.GetCamera()); bool bChange(false);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.