22 #include <svx/strings.hrc>
91 if (xTargetOverlay.is())
96 xTargetOverlay->add(*pNew);
148 bNoExtendedMouseDispatcher(false),
149 bNoExtendedKeyDispatcher(false),
150 mbMasterPagePaintCaching(false)
187 if (bRet && pWin!=
nullptr) {
277 #define MODKEY_NoSnap bCtrl
278 #define MODKEY_Ortho bShift
279 #define MODKEY_Center bAlt
280 #define MODKEY_AngleSnap bShift
281 #define MODKEY_CopyDrag bCtrl
284 #define MODKEY_PolyPoly bAlt
285 #define MODKEY_MultiMark bShift
286 #define MODKEY_Unmark bAlt
287 #define MODKEY_ForceMark bCtrl
288 #define MODKEY_DeepMark bAlt
289 #define MODKEY_DeepBackw bShift
300 const Point aLocalLogicPosition(rLogicPos);
314 SdrHdl* pHdl=pOut!=
nullptr && !bTextEditSel ?
PickHandle(aLocalLogicPosition) :
nullptr;
318 bool bHitPassDirect=
true;
319 sal_uInt16 nHlplIdx=0;
320 sal_uInt16 nGlueId=0;
321 if (bTextEditHit || bTextEditSel)
325 else if (pHdl!=
nullptr)
333 else if (bGluePointMode &&
PickGluePoint(aLocalLogicPosition,pObj,nGlueId,pPV))
343 sal_Int32 nX = 0, nY = 0;
344 switch( pTableObj->
CheckTableHit( aLocalLogicPosition, nX, nY ) )
364 sal_Int32 nX = 0, nY = 0;
390 bool bDeep=pObj!=pHitObj && pHitObj->
HasMacro();
396 if (pObjTmp==pObj) pObjTmp=
nullptr;
397 while (pObjTmp!=
nullptr)
405 if (pObjTmp==pObj) pObjTmp=
nullptr;
409 if (bDeep || bMid || bRoot)
412 aHitRec.
aPos=aLocalLogicPosition;
416 if (bDeep) bDeep=pHitObj->
IsMacroHit(aHitRec);
417 if (bMid ) bMid =pMidObj->
IsMacroHit(aHitRec);
419 if (bRoot || bMid || bDeep)
423 if (!bRoot) pObj=pMidObj;
424 if (!bRoot && !bMid) pObj=pHitObj;
433 if (pTextObj!=
nullptr && pTextObj->
HasText())
445 if (bTEHit && !aHitContainer.empty())
458 if (pTextHierarchyFieldPrimitive2D)
465 if (
nullptr != pTextHierarchyFieldPrimitive2D)
467 if (drawinglayer::primitive2d::FieldType::FIELD_TYPE_URL == pTextHierarchyFieldPrimitive2D->
getType())
481 aSvxURLField.
SetURL(pTextHierarchyFieldPrimitive2D->
getValue(
"URL"));
484 const OUString aFormat(pTextHierarchyFieldPrimitive2D->
getValue(
"SvxURLFormat"));
486 if (!aFormat.isEmpty())
488 aSvxURLField.
SetFormat(static_cast<SvxURLFormat>(aFormat.toInt32()));
501 if (bHitPassDirect &&
509 if(
auto pTextObj = dynamic_cast<const SdrTextObj*>(pHitObj) )
510 if( pTextObj->IsFontwork() )
514 bool bBoundRectHit(
false);
521 if( (aLocalLogicPosition.X() >= aBoundRect.Left() - nTolerance && aLocalLogicPosition.X() <= aBoundRect.Left() + nTolerance)
522 || (aLocalLogicPosition.X() >= aBoundRect.Right() - nTolerance && aLocalLogicPosition.X() <= aBoundRect.Right() + nTolerance)
523 || (aLocalLogicPosition.Y() >= aBoundRect.Top() - nTolerance && aLocalLogicPosition.Y() <= aBoundRect.Top() + nTolerance)
524 || (aLocalLogicPosition.Y() >= aBoundRect.Bottom() - nTolerance && aLocalLogicPosition.Y() <= aBoundRect.Bottom() + nTolerance))
526 bBoundRectHit =
true;
599 else if (bMouseDown && bMouseLeft)
625 bool bMarked=bGlue || (bPoly && pHdl->
IsSelected());
732 OSL_FAIL(
"SdrView::PickAnything(): pRootObj->getParentSdrObjListFromSdrObject()!=pPV->GetObjList() !");
753 }
else if (bMouseUp) {
765 #ifdef MODKEY_AngleSnap
768 #ifdef MODKEY_CopyDrag
818 pOLV->MouseButtonDown(aMEvt);
819 pOLV->MouseButtonUp(aMEvt);
842 bUnmark=nCount1<nCount0;
912 if (pOLV!=
nullptr) pOLV->MouseButtonDown(aMEvt);
928 if (bLeftDown && bAction)
930 else if (bLeftUp || (rVEvt.
bIsAction && !bAction))
964 return PointerStyle::TextVertical;
966 return PointerStyle::Text;
971 if (aPointer==PointerStyle::Arrow)
974 aPointer = PointerStyle::TextVertical;
976 aPointer = PointerStyle::Text;
994 return PointerStyle::Move;
996 return PointerStyle::Arrow;
999 return PointerStyle::MovePoint;
1002 return PointerStyle::Cross;
1004 return PointerStyle::RefHand;
1020 return PointerStyle::Arrow;
1024 return PointerStyle::MovePoint;
1033 return PointerStyle::TextVertical;
1035 return PointerStyle::Text;
1043 if (pHdl!=
nullptr || bMarkHit) {
1045 bool bCorner=pHdl!=
nullptr && pHdl->
IsCornerHdl();
1046 bool bVertex=pHdl!=
nullptr && pHdl->
IsVertexHdl();
1050 return PointerStyle::Move;
1055 return PointerStyle::NotAllowed;
1058 bool b3DObjSelected =
false;
1061 if(dynamic_cast<const E3dObject* >(pObj) !=
nullptr)
1062 b3DObjSelected =
true;
1067 return PointerStyle::NotAllowed;
1069 return PointerStyle::Rotate;
1074 else return PointerStyle::RefHand;
1076 if (bVertex && !
IsShearAllowed())
return PointerStyle::NotAllowed;
1079 return PointerStyle::Move;
1083 if (bCorner || bVertex || bMov) {
1088 if (pH1!=
nullptr && pH2!=
nullptr) {
1090 b90=(aDif.X()==0) || aDif.Y()==0;
1091 b45=b90 || (std::abs(aDif.X())==std::abs(aDif.Y()));
1097 if (bNo)
return PointerStyle::NotAllowed;
1099 return PointerStyle::Mirror;
1101 return PointerStyle::Mirror;
1108 return PointerStyle::NotAllowed;
1110 return PointerStyle::RefHand;
1116 return PointerStyle::NotAllowed;
1118 return PointerStyle::RefHand;
1122 if (bCorner || bVertex || bMov) {
1124 return PointerStyle::Crook;
1131 return PointerStyle::Crop;
1135 if ((bCorner || bVertex) && !
IsResizeAllowed(
true))
return PointerStyle::NotAllowed;
1138 if (pHdl!=
nullptr)
return pHdl->
GetPointer();
1141 return PointerStyle::Move;
1145 return PointerStyle::Arrow;
1148 #define STR_NOTHING "nothing"
1161 aStr =
SvxResId(STR_ViewCreateObj);
1185 aStr =
SvxResId(STR_ViewMarkMoreObjs);
1196 aStr =
SvxResId(STR_ViewMarkMorePoints);
1200 aStr =
SvxResId(STR_ViewMarkPoints);
1206 aStr =
SvxResId(STR_ViewMarkMoreGluePoints);
1210 aStr =
SvxResId(STR_ViewMarkGluePoints);
1217 if (aSel.nEndPara>0) {
1218 for (sal_Int32 nParaNum=0; nParaNum<aSel.nEndPara; nParaNum++) {
1225 sal_uInt16 nParaLine = 0;
1231 bool bLastLine = (nParaLine == nParaLineCount - 1);
1232 if (nCol>nLen || (!bLastLine && nCol == nLen))
1245 aStr = aStr.replaceFirst(
"%1", OUString::number(nPar + 1));
1246 aStr = aStr.replaceFirst(
"%2", OUString::number(nLin + 1));
1247 aStr = aStr.replaceFirst(
"%3", OUString::number(nCol + 1));
1250 aStr +=
", Level " + OUString::number(
pTextEditOutliner->GetDepth( aSel.nEndPara ) );
1271 else if(!aName.isEmpty())
1273 aStr = aStr.replaceFirst(
"%1", aName);
1279 aStr = aStr.replaceAt(0, 1, OUString(aStr[0]).toAsciiUpperCase());
1294 for(
size_t nMarkNum = 0; nMarkNum < nMarkCount && bPath; ++nMarkNum )
1304 bool bGraf =
true, bMedia =
true, bTable =
true;
1306 for(
size_t nMarkNum = 0; nMarkNum < nMarkCount && ( bGraf || bMedia ); ++nMarkNum )
1309 DBG_ASSERT( pMarkObj,
"SdrView::GetContext(), null pointer in mark list!" );
1314 if( dynamic_cast<const SdrGrafObj*>( pMarkObj) ==
nullptr )
1317 if( dynamic_cast<const SdrMediaObj*>( pMarkObj) ==
nullptr )
1320 if( dynamic_cast<const sdr::table::SdrTableObj* >( pMarkObj ) ==
nullptr )
1396 if (bUnmark) bAddMark=
true;
1438 assert(pPageWindow &&
"SdrView::SetMasterPagePaintCaching: Corrupt SdrPageWindow list (!)");
1452 const char* pDebugName)
const
virtual bool HasTextEdit() const
void UnmarkAllObj(SdrPageView const *pPV=nullptr)
OutDevType GetOutDevType() const
virtual basegfx::B2DPolyPolygon TakeXorPoly() const
The Xor-Polygon is required by the View to drag the object.
bool IsTextEditInSelectionMode() const
bool IsMacroHit(const SdrObjMacroHitRec &rRec) const
OUString maInsPointUndoStr
Point GetPointerPosPixel()
void SetTargetFrame(const OUString &rFrm)
virtual bool BegDragObj(const Point &rPnt, OutputDevice *pOut, SdrHdl *pHdl, short nMinMov=-3, SdrDragMethod *pForcedMeth=nullptr)
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
bool EndCreateObj(SdrCreateCmd eCmd)
PointerStyle GetPreferredPointer(const Point &rMousePos, const OutputDevice *pOut, sal_uInt16 nModifier=0, bool bLeftDown=false) const
PointerStyle GetDraggedHelpLinePointer() const
virtual const tools::Rectangle & GetCurrentBoundRect() const
virtual SdrEndTextEditKind SdrEndTextEdit(bool bDontDeleteReally=false)
virtual void onAccessibilityOptionsChanged()
method is called whenever the global SvtAccessibilityOptions is changed
constexpr sal_uInt16 KEY_MOD1
void SortMarkedObjects() const
std::unique_ptr< SdrDragMethod > mpCurrentSdrDragMethod
bool mbMarkedHitMovesAlways
bool IsHlplVisible() const
Draw Help line of the Page or not.
bool UnmarkAllGluePoints()
bool IsResizeAllowed(bool bProp=false) const
virtual OUString getSpecialDragComment(const SdrDragStat &rDrag) const
std::unique_ptr< SdrOutliner > pTextEditOutliner
virtual bool MouseButtonDown(const MouseEvent &rMEvt, OutputDevice *pWin) override
rtl::Reference< sdr::overlay::OverlayManager > const & GetOverlayManager() const
bool BegCreateObj(const Point &rPnt, OutputDevice *pOut=nullptr, short nMinMov=-3)
void DeleteMarkedPoints() override
virtual SdrViewContext GetContext() const
KeyFuncType GetFullFunction() const
bool AreObjectsMarked() const
MouseEventModifiers GetMode() const
constexpr sal_uInt16 KEY_A
bool EndDragObj(bool bCopy=false)
bool IsInsObjPoint() const
bool IsTransparenceAllowed() const
const tools::Rectangle & GetMarkedGluePointsRect() const
bool IsInsObjPointMode() const
SdrObject * GetObj() const
virtual OUString TakeObjNameSingul() const
void GetAttributes(SfxItemSet &rTargetSet, bool bOnlyHardAttr) const
void append(std::unique_ptr< OverlayObject > pOverlayObject)
const Point & GetPos() const
bool HasMarkedGluePoints() const
bool IsExtendedKeyInputDispatcherEnabled() const
SdrHitKind PickAnything(const MouseEvent &rMEvt, SdrMouseEventKind nMouseDownOrMoveOrUp, SdrViewEvent &rVEvt) const
void SetMouseDown(bool bDown)
const SdrHelpLineList & GetHelpLines() const
bool IsMoveAllowed() const
virtual bool HasText() const override
virtual PointerStyle GetPointer() const
bool BegMarkPoints(const Point &rPnt, bool bUnmark=false)
const tools::Rectangle & GetMarkedObjRect() const
virtual const tools::Rectangle & GetSnapRect() const
virtual bool MouseButtonUp(const MouseEvent &rMEvt, OutputDevice *pWin) override
bool MarkGluePoint(const SdrObject *pObj, sal_uInt16 nId, bool bUnmark)
virtual void ConfigurationChanged(utl::ConfigurationBroadcaster *, ConfigurationHints) override
sal_uInt16 GetClicks() const
SdrDropMarkerOverlay(const SdrView &rView, const SdrObject &rObject)
constexpr sal_uInt16 KEY_REPEAT
SdrPageWindow * GetPageWindow(sal_uInt32 nIndex) const
void ImplCreateOverlays(const SdrView &rView, const basegfx::B2DPolyPolygon &rLinePolyPolygon)
SvtAccessibilityOptions maAccessibilityOptions
sal_uInt16 GetButtons() const
OUString SvxResId(const char *pId)
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
void SetDragWithCopy(bool bOn)
bool IsDragHelpLine() const
constexpr sal_uInt16 KEY_UNDO
void SetResizeAtCenter(bool bOn)
MouseEventModifiers nMouseMode
const SvxURLField * pURLField
SdrObject * SdrObjectPrimitiveHit(const SdrObject &rObject, const Point &rPnt, sal_uInt16 nTol, const SdrPageView &rSdrPageView, const SdrLayerIDSet *pVisiLayer, bool bTextOnly, drawinglayer::primitive2d::Primitive2DContainer *pHitContainer)
sal_uInt16 GetModifier() const
bool IsRotateAllowed(bool b90Deg=false) const
OutputDevice * GetFirstOutputDevice() const
bool IsMarkGluePoints() const
bool BegMarkGluePoints(const Point &rPnt, bool bUnmark=false)
void BegMacroObj(const Point &rPnt, short nTol, SdrObject *pObj, SdrPageView *pPV, vcl::Window *pWin)
PointerStyle GetPointer(const Point &rPosPixel)
void SetSnapEnabled(bool bOn)
bool IsInsObjPointPossible() const
sal_uInt32 PaintWindowCount() const
void ResetObjectContact()
const tools::Rectangle & GetMarkedRect() const
virtual bool HasMarkedPoints() const
SdrObjList * GetObjList() const
Return current List.
virtual bool MouseMove(const MouseEvent &rMEvt, OutputDevice *pWin) override
handle mouse over effects for handles
void MarkAllObj(SdrPageView *pPV=nullptr)
SdrObject * PickObj(const Point &rPnt, short nTol, SdrPageView *&rpPV, SdrSearchOptions nOptions, SdrObject **ppRootObj, bool *pbHitPassDirect=nullptr) const
const SdrLayerIDSet & GetVisibleLayers() const
bool IsShearAllowed() const
bool IsHlplFront() const
Draw Help line in front of the objects or behind them.
VclPtr< vcl::Window > pTextEditWin
bool BegMark(const Point &rPnt, bool bAddMark, bool bUnmark)
void InvalidateAllWin()
Invalidates the Page's whole area.
#define DBG_ASSERT(sCon, aError)
void Repeat(SfxRepeatTarget &)
bool IsInsGluePointPossible() const
void SetRepresentation(const OUString &rRep)
size_t GetMarkedObjectCount() const
virtual bool MouseButtonUp(const MouseEvent &rMEvt, OutputDevice *pWin) override
bool DoMouseEvent(const SdrViewEvent &rVEvt)
virtual bool KeyInput(const KeyEvent &rKEvt, vcl::Window *pWin) override
bool IsTextEditHit(const Point &rHit) const
virtual bool SdrBeginTextEdit(SdrObject *pObj, SdrPageView *pPV=nullptr, vcl::Window *pWin=nullptr, bool bIsNewObj=false, SdrOutliner *pGivenOutliner=nullptr, OutlinerView *pGivenOutlinerView=nullptr, bool bDontDeleteOutliner=false, bool bOnlyOneView=false, bool bGrabFocus=true)
bool BegInsGluePoint(const Point &rPnt)
SdrObject * pCurrentCreate
bool IsGluePointEditMode() const
PointerStyle aCurrentCreatePointer
SdrHdl * PickHandle(const Point &rPnt) const
virtual bool HasMacro() const
const OutlinerView * GetTextEditOutlinerView() const
void BegMarkObj(const Point &rPnt, bool bUnmark=false)
sdr::overlay::OverlayObjectList maObjects
void SetMasterPagePaintCaching(bool bOn)
void SetCrookAtCenter(bool bOn)
void DeleteMarkedGluePoints()
sal_uInt16 GetModifier() const
const SdrLayerIDSet * pVisiLayer
void SetActualWin(const OutputDevice *pWin)
constexpr sal_uInt16 KEY_MOD2
bool IsCreateMode() const
Point ScreenToOutputPixel(const Point &rPos) const
bool MarkNextObj(bool bPrev=false)
bool PickGluePoint(const Point &rPnt, SdrObject *&rpObj, sal_uInt16 &rnId, SdrPageView *&rpPV) const
TableHitKind CheckTableHit(const Point &rPos, sal_Int32 &rnX, sal_Int32 &rnY, const sal_uInt16 aTol=0) const
void SetFormat(SvxURLFormat eFmt)
virtual bool MouseButtonDown(const MouseEvent &rMEvt, OutputDevice *pWin) override
virtual sdr::contact::ObjectContact * createViewSpecificObjectContact(SdrPageWindow &rPageWindow, const char *pDebugName) const
virtual SdrLayerID GetLayer() const
Point PixelToLogic(const Point &rDevicePt) const
Point LogicToPixel(const Point &rLogicPt) const
FieldType getType() const
void ConfigurationChanged(::utl::ConfigurationBroadcaster *, ConfigurationHints) override
ESelection GetSelection() const
const SdrLayerIDSet & GetLockedLayers() const
virtual bool IsAction() const override
void SetAngleSnapEnabled(bool bOn)
bool IsSet(SdrLayerID a) const
bool IsInsGluePointMode() const
SdrInventor nCurrentInvent
SdrViewEditMode meEditMode
bool mbMasterPagePaintCaching
void SetPointer(PointerStyle)
SdrHdl * GetHdl(size_t nNum) const
void setClosed(bool bNew)
const vcl::KeyCode & GetKeyCode() const
void ForceMarkedObjToAnotherPage()
css::uno::Reference< css::graphic::XPrimitive2D > Primitive2DReference
void SetSelection(const ESelection &)
bool IsMarkPoints() const
bool IsFrameHandles() const
bool IsMirrorAllowed(bool b45Deg=false, bool b90Deg=false) const
sal_uInt32 GetObjHdlNum() const
virtual bool IsTextEdit() const final override
virtual PointerStyle GetMacroPointer(const SdrObjMacroHitRec &rRec) const
virtual OutlinerParaObject * GetOutlinerParaObject() const override
OUString ImpGetDescriptionString(const char *pStrCacheID, ImpGetDescriptionOptions nOpt=ImpGetDescriptionOptions::NONE) const
constexpr sal_uInt16 KEY_ESCAPE
OUString getValue(const OUString &rName) const
#define SAL_INFO(area, stream)
OutlinerView * pTextEditOutlinerView
virtual bool Command(const CommandEvent &rCEvt, vcl::Window *pWin) override
virtual bool Command(const CommandEvent &rCEvt, vcl::Window *pWin) override
virtual ~SdrView() override
bool IsQuickTextEditMode() const
void GetAttributes(SfxItemSet &rTargetSet, bool bOnlyHardAttr=false) const
virtual PointerStyle GetCreatePointer() const
get the cursor/pointer that signals creating this object
bool IsSetPageOrg() const
bool BegDragHelpLine(sal_uInt16 nHelpLineNum, SdrPageView *pPV)
virtual void DeleteMarked()
bool KeyInput(const KeyEvent &rKEvt, vcl::Window *pWin) override
SdrHdl * GetGluePointHdl(const SdrObject *pObj, sal_uInt16 nId) const
bool IsGradientAllowed() const
const Point & GetPosPixel() const
SdrObject * GetMarkedObjectByIndex(size_t nNum) const
constexpr sal_uInt16 KEY_BACKSPACE
bool IsCrookAllowed(bool bNoContortion=false) const
sal_uInt16 GetFullCode() const
SdrObject * getParentSdrObjectFromSdrObject() const
SdrPageView * GetSdrPageView() const
bool BegCreateCaptionObj(const Point &rPnt, const Size &rObjSiz, OutputDevice *pOut=nullptr, short nMinMov=-3)
SdrView(SdrModel &rSdrModel, OutputDevice *pOut=nullptr)
const tools::Rectangle & GetMarkedPointsRect() const
OutputDevice * get() const
bool BegInsObjPoint(const Point &rPnt, bool bNewObj)
virtual void MovAction(const Point &rPnt) override
virtual bool MouseMove(const MouseEvent &rMEvt, OutputDevice *pWin) override
handle mouse over effects for handles
bool MarkObj(const Point &rPnt, short nTol=-2, bool bToggle=false, bool bDeep=false)
constexpr sal_uInt16 KEY_DELETE
bool IsPointMarkable(const SdrHdl &rHdl) const
bool PickHelpLine(const Point &rPnt, short nTol, const OutputDevice &rOut, sal_uInt16 &rnHelpLineNum, SdrPageView *&rpPV) const
SdrObjList * getParentSdrObjListFromSdrObject() const
void SetURL(const OUString &rURL)
virtual void BrkAction() override
virtual bool MarkPoint(SdrHdl &rHdl, bool bUnmark=false)
constexpr sal_uInt16 KEY_SHIFT
void SetCreate1stPointAsCenter(bool bOn)
bool IsInsertGluePoint() const
bool IsDragWithCopy() const
rtl::Reference< sdr::SelectionController > mxSelectionController
virtual void BckAction() override
bool IsExtendedMouseEventDispatcherEnabled() const
VclPtr< OutputDevice > mpActualOutDev
bool EndInsObjPoint(SdrCreateCmd eCmd)
SdrPaintWindow * GetPaintWindow(sal_uInt32 nIndex) const
const SdrPageView * pPageView
SdrHdlKind GetKind() const
bool IsDistortAllowed(bool bNoContortion=false) const
virtual void EndAction() override
bool IsOrthoDesired() const
virtual bool HasMarkablePoints() const
sal_uInt32 PageWindowCount() const
bool IsObjMarked(SdrObject const *pObj) const