29 #include <svx/strings.hrc>
32 #include <rtl/strbuf.hxx>
38 #include <osl/diagnose.h>
40 #include <com/sun/star/lang/XServiceInfo.hpp>
48 m_bGroupPossible =
false;
49 m_bUnGroupPossible =
false;
50 m_bGrpEnterPossible =
false;
51 m_bToTopPossible =
false;
52 m_bToBtmPossible =
false;
53 m_bReverseOrderPossible =
false;
55 m_bImportMtfPossible =
false;
56 m_bCombinePossible =
false;
57 m_bDismantlePossible =
false;
58 m_bCombineNoPolyPolyPossible =
false;
59 m_bDismantleMakeLinesPossible=
false;
60 m_bOrthoDesiredOnMarked =
false;
62 m_bOneOrMoreMovable =
false;
63 m_bMoreThanOneNoMovRot =
false;
64 m_bContortionPossible =
false;
65 m_bMoveAllowed =
false;
66 m_bResizeFreeAllowed =
false;
67 m_bResizePropAllowed =
false;
68 m_bRotateFreeAllowed =
false;
69 m_bRotate90Allowed =
false;
70 m_bMirrorFreeAllowed =
false;
71 m_bMirror45Allowed =
false;
72 m_bMirror90Allowed =
false;
73 m_bTransparenceAllowed =
false;
74 m_bCropAllowed =
false;
75 m_bGradientAllowed =
false;
76 m_bShearAllowed =
false;
77 m_bEdgeRadiusAllowed =
false;
78 m_bCanConvToPath =
false;
79 m_bCanConvToPoly =
false;
80 m_bCanConvToContour =
false;
81 m_bMoveProtect =
false;
82 m_bResizeProtect =
false;
87 , m_bPossibilitiesDirty(true)
89 , m_bGroupPossible(false)
90 , m_bUnGroupPossible(false)
91 , m_bGrpEnterPossible(false)
92 , m_bToTopPossible(false)
93 , m_bToBtmPossible(false)
94 , m_bReverseOrderPossible(false)
95 , m_bImportMtfPossible(false)
96 , m_bCombinePossible(false)
97 , m_bDismantlePossible(false)
98 , m_bCombineNoPolyPolyPossible(false)
99 , m_bDismantleMakeLinesPossible(false)
100 , m_bOrthoDesiredOnMarked(false)
101 , m_bOneOrMoreMovable(false)
102 , m_bMoreThanOneNoMovRot(false)
103 , m_bContortionPossible(false)
104 , m_bMoveAllowed(false)
105 , m_bResizeFreeAllowed(false)
106 , m_bResizePropAllowed(false)
107 , m_bRotateFreeAllowed(false)
108 , m_bRotate90Allowed(false)
109 , m_bMirrorFreeAllowed(false)
110 , m_bMirror45Allowed(false)
111 , m_bMirror90Allowed(false)
112 , m_bShearAllowed(false)
113 , m_bEdgeRadiusAllowed(false)
114 , m_bTransparenceAllowed(false)
115 , m_bCropAllowed(false)
116 , m_bGradientAllowed(false)
117 , m_bCanConvToPath(false)
118 , m_bCanConvToPoly(false)
119 , m_bCanConvToContour(false)
120 , m_bMoveProtect(false)
121 , m_bResizeProtect(false)
133 if (nPos>nMax) nPos=nMax;
146 for(
size_t nObjNum = pOL->
GetObjCount(); nObjNum > 0 && bDelAll;)
153 if(pSubOL && (dynamic_cast<const SdrObjGroup*>(pObj) !=
nullptr || dynamic_cast< const E3dScene* >(pObj) !=
nullptr))
180 for(
size_t nObjNum = nObjCount; nObjNum > 0;)
188 if(pSubOL && (dynamic_cast<const SdrObjGroup*>( pObj) !=
nullptr || dynamic_cast<const E3dScene* >(pObj) !=
nullptr))
193 AddUndo(
GetModel()->GetSdrUndoFactory().CreateUndoDeleteObject(*pObj,
true));
209 AddUndo(
GetModel()->GetSdrUndoFactory().CreateUndoDeleteObject(*pObj,
true));
235 for(sal_uInt16 nPageKind(0); nPageKind < 2; nPageKind++)
240 for(sal_uInt16 nPgNum(0); nPgNum < nPgCount; nPgNum++)
250 for(
size_t nObjNum(nObjCount); nObjNum > 0;)
257 if(pSubOL && (dynamic_cast<const SdrObjGroup*>(pObj) !=
nullptr || dynamic_cast<const E3dScene* >(pObj) !=
nullptr))
262 AddUndo(
GetModel()->GetSdrUndoFactory().CreateUndoDeleteObject(*pObj,
true));
277 AddUndo(
GetModel()->GetSdrUndoFactory().CreateUndoDeleteObject(*pObj,
true));
321 std::vector<SdrObject*>::const_iterator iterPos;
328 for(
size_t a(0);
a < rAllMarkedObjects.size();
a++)
339 iterPos = std::find(rAllMarkedObjects.begin(),rAllMarkedObjects.end(),pObj1);
341 if (iterPos == rAllMarkedObjects.end())
351 iterPos = std::find(rAllMarkedObjects.begin(),rAllMarkedObjects.end(),pObj2);
353 if (iterPos == rAllMarkedObjects.end())
365 for (
size_t i=0;
i<nMarkedEdgeCnt; ++
i) {
369 if (pEdge!=
nullptr) {
505 size_t nMovableCount=0;
516 if (bGroup || bHasText) {
549 if(SfxItemState::DONTCARE != eState)
554 if(eFillStyle != drawing::FillStyle_GRADIENT)
561 bool bNoMovRotFound=
false;
564 for (
size_t nm=0; nm<nMarkCount; ++nm) {
636 if (pSdrGrafObj !=
nullptr)
673 if (pEdge!=
nullptr) {
690 if (!aObjRect.IsOver(aPgRect)) {
716 std::vector<SdrObject*> ret;
728 std::vector< E3DModifySceneSnapRectUpdater* > aUpdaters;
732 for(
size_t nm = nMarkCount; nm > 0;)
741 AddUndo(
GetModel()->GetSdrUndoFactory().CreateUndoDeleteObject(*pObj));
748 for(
size_t nm = nMarkCount; nm > 0;)
756 bool bIs3D =
dynamic_cast< E3dObject*
>(pObj);
773 while(!aUpdaters.empty())
775 delete aUpdaters.back();
776 aUpdaters.pop_back();
789 while (!rLazyDelete.empty())
792 rLazyDelete.pop_back();
808 std::vector<SdrObject*> lazyDeleteObjects;
814 std::vector< SdrObject* > aParents;
829 if(!aParents.empty())
831 std::vector< SdrObject* >::iterator aFindResult =
832 std::find(aParents.begin(), aParents.end(), pParent);
834 if(aFindResult == aParents.end())
836 aParents.push_back(pParent);
841 aParents.push_back(pParent);
846 if(!aParents.empty())
851 for(
size_t a = 0;
a < nCount; ++
a)
856 std::vector< SdrObject* >::iterator aFindResult =
857 std::find(aParents.begin(), aParents.end(), pObject);
859 if(aFindResult != aParents.end())
861 aParents.erase(aFindResult);
872 lazyDeleteObjects.push_back(
p);
915 for (
size_t nEdgeNum=0; nEdgeNum<nEdgeCnt; ++nEdgeNum) {
929 size_t nCloneErrCnt=0;
930 std::unordered_set<rtl::OUString> aNameSet;
931 const size_t nMarkCount=aSourceObjectsForCopy.
GetMarkCount();
932 for (
size_t nm=0; nm<nMarkCount; ++nm) {
935 SdrObject* pO(pSource->CloneSdrObject(pSource->getSdrModelFromSdrObject()));
963 OStringBuffer
aStr(
"SdrEditView::CopyMarkedObj(): Error when cloning ");
965 if(nCloneErrCnt == 1)
967 aStr.append(
"a drawing object.");
971 aStr.append(static_cast<sal_Int32>(nCloneErrCnt));
972 aStr.append(
" drawing objects.");
975 aStr.append(
" This object's/These objects's connections will not be copied.");
976 OSL_FAIL(aStr.getStr());
1007 css::uno::Reference<lang::XServiceInfo> xServices(
GetModel()->getUnoModel(),
1008 css::uno::UNO_QUERY);
1009 if (xServices.is() && (xServices->supportsService(
"com.sun.star.sheet.SpreadsheetDocument") ||
1010 xServices->supportsService(
"com.sun.star.text.TextDocument")))
1030 if(
auto pTextObj = dynamic_cast< SdrTextObj* >(pOldObj))
1031 if (pTextObj->IsTextEditActive())
1032 OSL_ENSURE(
false,
"OldObject is in TextEdit mode, this has to be ended before replacing it using SdrEndTextEdit (!)");
1034 if(
auto pTextObj = dynamic_cast< SdrTextObj* >(pNewObj))
1035 if (pTextObj->IsTextEditActive())
1036 OSL_ENSURE(
false,
"NewObject is in TextEdit mode, this has to be ended before replacing it using SdrEndTextEdit (!)");
1050 AddUndo(
GetModel()->GetSdrUndoFactory().CreateUndoReplaceObject(*pOldObj,*pNewObj));
1053 MarkObj( pOldObj, &rPV,
true );
1060 if (bMark)
MarkObj(pNewObj,&rPV);
1072 for (
size_t nView = 0; nView < nViews; ++nView)
void ImpCheckToTopBtmPossible()
bool m_bDismantleMakeLinesPossible
void UnmarkAllObj(SdrPageView const *pPV=nullptr)
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const
virtual bool IsTextEdit() const
size_t GetMarkCount() const
virtual const tools::Rectangle & GetCurrentBoundRect() const
virtual SdrEndTextEditKind SdrEndTextEdit(bool bDontDeleteReally=false)
css::uno::Reference< css::embed::XEmbeddedObject > const & GetObjRef() const
void SortMarkedObjects() const
bool IsEdgeRadiusAllowed() const
bool IsResizeAllowed(bool bProp=false) const
static bool ImpCanDismantle(const basegfx::B2DPolyPolygon &rPpolyPpolygon, bool bMakeLines)
bool m_bDismantlePossible
void ReplaceObjectAtView(SdrObject *pOldObj, SdrPageView &rPV, SdrObject *pNewObj, bool bMark=true)
bool m_bImportMtfPossible
static bool ImpCanConvertForCombine(const SdrObject *pObj)
bool IsUndoEnabled() const
constexpr TypedWhichId< XFillStyleItem > XATTR_FILLSTYLE(XATTR_FILL_FIRST)
void ForcePossibilities() const
bool IsReadOnly() const
PV represents a RefPage or a SubList of a RefObj, or the Model is ReadOnly.
SdrObject * GetObj(size_t nNum) const
tools::Rectangle GetPageRect() const
bool IsTransparenceAllowed() const
size_t GetObjCount() const
bool IsCropAllowed() const
void ImpBroadcastEdgesOfMarkedNodes()
SdrMark * GetMark(size_t nNum) const
std::vector< std::unique_ptr< SdrUndoAction > > CreateConnectorUndo(SdrObject &rO)
bool m_bMoreThanOneNoMovRot
const SdrPage * GetMasterPage(sal_uInt16 nPgNum) const
virtual void BrkAction() override
void EndTextEditAllViews() const
Checks if this or other views have an active text edit, if true, end them.
static void Free(SdrObject *&_rpObject)
virtual void InsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
EmbeddedObjectRef * pObject
bool m_bCombineNoPolyPolyPossible
virtual SdrObjList * GetSubList() const
bool InsertObjectAtView(SdrObject *pObj, SdrPageView &rPV, SdrInsertFlags nOptions=SdrInsertFlags::NONE)
std::vector< SdrObject * > DeleteMarkedList(SdrMarkList const &rMark)
virtual void MarkListHasChanged()
sal_uInt16 GetLayerPos(const SdrLayer *pLayer) const
std::unique_ptr< SdrLayer > RemoveLayer(sal_uInt16 nPos)
bool m_bTransparenceAllowed
void EnableUndo(bool bEnable)
enables (true) or disables (false) recording of undo actions If undo actions are added while undo is ...
OUString SvxResId(const char *pId)
void LeaveOneGroup()
Leave an object group we entered previously.
virtual void ModelHasChanged() override
void SetMergedItemSet(const SfxItemSet &rSet, bool bClearAllItems=false)
bool IsRotateAllowed(bool b90Deg=false) const
constexpr SdrLayerID SDRLAYER_NOTFOUND(0xff)
bool IsCombinePossible(bool bNoPolyPoly=false) const
virtual void SetChanged(bool bFlg=true)
o3tl::strong_int< sal_uInt8, struct SdrLayerIDTag > SdrLayerID
bool m_bPossibilitiesDirty
SdrLayer * GetLayer(sal_uInt16 i)
sal_uInt32 GetOrdNumDirect() const
SdrObject * GetConnectedNode(bool bTail1) const override
SdrObjList * GetObjList() const
Return current List.
SdrObject * GetMarkedSdrObj() const
Everything a View needs to know about a selected object.
SfxStyleSheet * mpDefaultStyleSheet
sal_uInt16 GetLayerCount() const
const SdrLayerIDSet & GetVisibleLayers() const
bool m_bContortionPossible
void AddUndo(std::unique_ptr< SdrUndoAction > pUndo)
bool IsShearAllowed() const
SfxListener * GetListener(size_t nNo) const
virtual void MarkListHasChanged() override
sal_uInt16 GetMasterPageCount() const
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
void SetUser(sal_uInt16 nVal)
bool m_bReverseOrderPossible
bool IsUndoEnabled() const
returns true if undo is currently enabled This returns false if undo was disabled using EnableUndo( f...
void SetPageView(SdrPageView *pNewPageView)
size_t GetMarkedObjectCount() const
OUString const & GetDescriptionOfMarkedObjects() const
virtual ~SdrEditView() override
void DisconnectFromNode(bool bTail1) override
bool m_bRotateFreeAllowed
const SdrMarkList & GetMarkedObjectList() const
SdrPageView * GetPageView() const
void InsertNewLayer(const OUString &rName, sal_uInt16 nPos)
const SdrPage * GetPage(sal_uInt16 nPgNum) const
SdrLayer * NewLayer(const OUString &rName, sal_uInt16 nPos=0xFFFF)
void CopyConnections() const
sal_uInt32 GetOrdNum() const
The order number (aka ZOrder, aka z-index) determines whether a SdrObject is located above or below a...
const SdrLayerAdmin & GetLayerAdmin() const
changing the layers does not set the modified-flag!
void ImpDelLayerDelObjs(SdrObjList *pOL, SdrLayerID nDelID)
const SdrMarkList & GetEdgesOfMarkedNodes() const
bool IsResizeProtect() const
void InsertObjectThenMakeNameUnique(SdrObject *pObj)
bool CheckNodeConnection(bool bTail1) const
sal_uInt16 GetUndoBracketLevel() const
This class represents an embedded or linked bitmap graphic object.
bool ImpDelLayerCheck(SdrObjList const *pOL, SdrLayerID nDelID) const
virtual SdrObject * RemoveObject(size_t nObjNum)
SdrUndoFactory & GetSdrUndoFactory() const
returns the models undo factory.
void DeleteLayer(const OUString &rName)
bool m_bResizeFreeAllowed
virtual SdrLayerID GetLayer() const
virtual std::unique_ptr< SdrUndoAction > CreateUndoGeoObject(SdrObject &rObject)
void SetMarkedSdrObj(SdrObject *pNewObj)
const SdrMarkList & GetMarkedEdgesOfMarkedNodes() const
SdrEditView(SdrModel &rSdrModel, OutputDevice *pOut)
virtual void CheckPossibilities()
const SdrLayerIDSet & GetLockedLayers() const
bool m_bMirrorFreeAllowed
bool IsSet(SdrLayerID a) const
void ForceMarkedObjToAnotherPage()
bool IsMirrorAllowed(bool b45Deg=false, bool b90Deg=false) const
virtual bool IsTextEdit() const final override
virtual SdrObject * ReplaceObject(SdrObject *pNewObj, size_t nObjNum)
Replace existing object by different one.
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
SdrPage * GetPage() const
bool m_bEdgeRadiusAllowed
const SfxItemSet & GetMergedItemSet() const
sal_uInt16 GetUser() const
bool HasGDIMetaFile() const
bool m_bResizePropAllowed
bool IsGradientAllowed() const
void AddUndoActions(std::vector< std::unique_ptr< SdrUndoAction > >)
SdrObject * GetMarkedObjectByIndex(size_t nNum) const
bool IsCrookAllowed(bool bNoContortion=false) const
SdrPageView * GetSdrPageView() const
Helper for 3d object changes affecting 2d geometry.
const std::vector< SdrObject * > & GetTransitiveHullOfMarkedObjects() const
virtual void ModelHasChanged() override
SVX_DLLPRIVATE void ImpResetPossibilityFlags()
size_t GetListenerCount() const
bool MarkObj(const Point &rPnt, short nTol=-2, bool bToggle=false, bool bDeep=false)
bool m_bOrthoDesiredOnMarked
SdrMark * GetSdrMarkByIndex(size_t nNum) const
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
SdrObjList * getParentSdrObjListFromSdrObject() const
static void lcl_LazyDelete(std::vector< SdrObject * > &rLazyDelete)
virtual void NbcSetStyleSheet(SfxStyleSheet *pNewStyleSheet, bool bDontRemoveHardAttr)
const SdrLayerAdmin & GetLayerAdmin() const
SdrLayerID GetLayerID(const OUString &rName) const
void InsertEntry(const SdrMark &rMark, bool bChkSort=true)
SdrMarkList & GetMarkedObjectListWriteAccess()
SdrModel * GetModel() const
bool isEmbeddedVectorGraphicData() const
virtual OutlinerParaObject * GetOutlinerParaObject() const
bool IsDismantlePossible(bool bMakeLines=false) const
sal_uInt16 GetPageCount() const
bool IsMoveProtect() const
bool IsDistortAllowed(bool bNoContortion=false) const
Utility class SdrEdgeObj.
virtual void NbcSetLayer(SdrLayerID nLayer)
SdrObject * GetCurrentGroup() const
Return current Group.
bool IsObjMarked(SdrObject const *pObj) const
void AddPair(const SdrObject *pOriginal, SdrObject *pClone)