/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * 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 .
*/
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.