1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _SVDDRAG_HXX 25 #define _SVDDRAG_HXX 26 27 28 #include <tools/contnr.hxx> 29 #include <tools/gen.hxx> 30 #include <tools/fract.hxx> 31 #include "svx/svxdllapi.h" 32 33 // Statushalter fuer objektspeziefisches Draggen. Damit das Model 34 // Statusfrei bleibt werden die Statusdaten an der View gehalten 35 // und dem Objekt zu gegebener Zeit als Parameter uebergeben. 36 // Ausserdem auch Statushalter fuer den Vorgang der Interaktiven 37 // Objekterzeugung. pHdl ist in diesem Fall NULL. 38 class SdrHdl; 39 class SdrView; 40 class SdrPageView; 41 class SdrDragMethod; 42 43 struct SVX_DLLPUBLIC SdrDragStatUserData 44 { 45 }; 46 47 class SVX_DLLPUBLIC SdrDragStat { 48 protected: 49 SdrHdl* pHdl; // Der Handle an dem der User zottelt 50 SdrView* pView; 51 SdrPageView* pPageView; 52 Container aPnts; // Alle bisherigen Punkte: [0]=Start, [Count()-2]=Prev 53 Point aRef1; // Referenzpunkt: Resize-Fixpunkt, (Drehachse, 54 Point aRef2; // Spiegelachse, ...) 55 Point aPos0; // Position beim letzten Event 56 Point aRealPos0; // Position beim letzten Event 57 Point aRealNow; // Aktuelle Dragposition ohne Snap, Ortho und Limit 58 Point aRealLast; // RealPos des letzten Punkts (fuer MinMoved) 59 Rectangle aActionRect; 60 61 // Reserve fuer kompatible Erweiterungen, die sonst inkompatibel wuerden. 62 Point aReservePoint1; 63 Point aReservePoint2; 64 Point aReservePoint3; 65 Point aReservePoint4; 66 Rectangle aReserveRect1; 67 Rectangle aReserveRect2; 68 FASTBOOL bEndDragChangesAttributes; 69 FASTBOOL bEndDragChangesGeoAndAttributes; 70 FASTBOOL bMouseIsUp; 71 FASTBOOL aReserveBool3; 72 FASTBOOL aReserveBool4; 73 long aReserveLong1; 74 long aReserveLong2; 75 long aReserveLong3; 76 long aReserveLong4; 77 void* aReservePtr1; 78 void* aReservePtr2; 79 void* aReservePtr3; 80 void* aReservePtr4; 81 82 FASTBOOL bShown; // Xor sichrbar? 83 sal_uInt16 nMinMov; // Soviel muss erstmal minimal bewegt werden 84 FASTBOOL bMinMoved; // MinMove durchbrochen? 85 86 FASTBOOL bHorFixed; // nur Vertikal draggen 87 FASTBOOL bVerFixed; // nur Horizontal draggen 88 FASTBOOL bWantNoSnap; // sal_True=Fuer die Entscheidung ob fuer pObj->MovCreate() NoSnapPos verwendet 89 // werden soll. Entsprechend wird auch NoSnapPos in den Buffer geschrieben. 90 FASTBOOL bOrtho4; 91 FASTBOOL bOrtho8; 92 93 SdrDragMethod* pDragMethod; 94 95 protected: 96 void Clear(FASTBOOL bLeaveOne); Pnt(sal_uIntPtr nNum)97 Point& Pnt(sal_uIntPtr nNum) { return *((Point*)aPnts.GetObject(nNum)); } 98 //public: 99 SdrDragStatUserData* pUser; // Userdata 100 public: SdrDragStat()101 SdrDragStat(): aPnts(1024,16,16) { pUser=NULL; Reset(); } ~SdrDragStat()102 ~SdrDragStat() { Clear(sal_False); } 103 void Reset(); GetView() const104 SdrView* GetView() const { return pView; } SetView(SdrView * pV)105 void SetView(SdrView* pV) { pView=pV; } GetPageView() const106 SdrPageView* GetPageView() const { return pPageView; } SetPageView(SdrPageView * pPV)107 void SetPageView(SdrPageView* pPV) { pPageView=pPV; } GetPoint(sal_uIntPtr nNum) const108 const Point& GetPoint(sal_uIntPtr nNum) const { return *((Point*)aPnts.GetObject(nNum)); } GetPointAnz() const109 sal_uIntPtr GetPointAnz() const { return aPnts.Count(); } GetStart() const110 const Point& GetStart() const { return GetPoint(0); } Start()111 Point& Start() { return Pnt(0); } GetPrev() const112 const Point& GetPrev() const { return GetPoint(GetPointAnz()-(GetPointAnz()>=2 ? 2:1)); } Prev()113 Point& Prev() { return Pnt(GetPointAnz()-(GetPointAnz()>=2 ? 2:1)); } GetPos0() const114 const Point& GetPos0() const { return aPos0; } Pos0()115 Point& Pos0() { return aPos0; } GetNow() const116 const Point& GetNow() const { return GetPoint(GetPointAnz()-1); } Now()117 Point& Now() { return Pnt(GetPointAnz()-1); } GetRealNow() const118 const Point& GetRealNow() const { return aRealNow; } RealNow()119 Point& RealNow() { return aRealNow; } GetRef1() const120 const Point& GetRef1() const { return aRef1; } Ref1()121 Point& Ref1() { return aRef1; } GetRef2() const122 const Point& GetRef2() const { return aRef2; } Ref2()123 Point& Ref2() { return aRef2; } GetHdl() const124 const SdrHdl* GetHdl() const { return pHdl; } SetHdl(SdrHdl * pH)125 void SetHdl(SdrHdl* pH) { pHdl=pH; } GetUser() const126 SdrDragStatUserData* GetUser() const { return pUser; } SetUser(SdrDragStatUserData * pU)127 void SetUser(SdrDragStatUserData* pU) { pUser=pU; } IsShown() const128 FASTBOOL IsShown() const { return bShown; } SetShown(FASTBOOL bOn)129 void SetShown(FASTBOOL bOn) { bShown=bOn; } 130 IsMinMoved() const131 FASTBOOL IsMinMoved() const { return bMinMoved; } SetMinMoved()132 void SetMinMoved() { bMinMoved=sal_True; } ResetMinMoved()133 void ResetMinMoved() { bMinMoved=sal_False; } SetMinMove(sal_uInt16 nDist)134 void SetMinMove(sal_uInt16 nDist) { nMinMov=nDist; if (nMinMov<1) nMinMov=1; } GetMinMove() const135 sal_uInt16 GetMinMove() const { return nMinMov; } 136 IsHorFixed() const137 FASTBOOL IsHorFixed() const { return bHorFixed; } SetHorFixed(FASTBOOL bOn)138 void SetHorFixed(FASTBOOL bOn) { bHorFixed=bOn; } IsVerFixed() const139 FASTBOOL IsVerFixed() const { return bVerFixed; } SetVerFixed(FASTBOOL bOn)140 void SetVerFixed(FASTBOOL bOn) { bVerFixed=bOn; } 141 142 // Hier kann das Obj sagen: "Ich will keinen Koordinatenfang!" 143 // z.B. fuer den Winkel des Kreisbogen... IsNoSnap() const144 FASTBOOL IsNoSnap() const { return bWantNoSnap; } SetNoSnap(FASTBOOL bOn=sal_True)145 void SetNoSnap(FASTBOOL bOn=sal_True) { bWantNoSnap=bOn; } 146 147 // Und hier kann das Obj sagen welches Ortho (wenn ueberhaupt eins) 148 // sinnvoll auf ihm angewendet werden kann. 149 // Ortho4 bedeutet Ortho in 4 Richtungen (fuer Rect und Cirt) IsOrtho4Possible() const150 FASTBOOL IsOrtho4Possible() const { return bOrtho4; } SetOrtho4Possible(FASTBOOL bOn=sal_True)151 void SetOrtho4Possible(FASTBOOL bOn=sal_True) { bOrtho4=bOn; } 152 // Ortho8 bedeutet Ortho in 8 Richtungen (fuer Linien) IsOrtho8Possible() const153 FASTBOOL IsOrtho8Possible() const { return bOrtho8; } SetOrtho8Possible(FASTBOOL bOn=sal_True)154 void SetOrtho8Possible(FASTBOOL bOn=sal_True) { bOrtho8=bOn; } 155 156 // Wird vom gedraggten Objekt gesetzt IsEndDragChangesAttributes() const157 FASTBOOL IsEndDragChangesAttributes() const { return bEndDragChangesAttributes; } SetEndDragChangesAttributes(FASTBOOL bOn)158 void SetEndDragChangesAttributes(FASTBOOL bOn) { bEndDragChangesAttributes=bOn; } IsEndDragChangesGeoAndAttributes() const159 FASTBOOL IsEndDragChangesGeoAndAttributes() const { return bEndDragChangesGeoAndAttributes; } SetEndDragChangesGeoAndAttributes(FASTBOOL bOn)160 void SetEndDragChangesGeoAndAttributes(FASTBOOL bOn) { bEndDragChangesGeoAndAttributes=bOn; } 161 162 // Wird von der View gesetzt und kann vom Obj ausgewertet werden IsMouseDown() const163 FASTBOOL IsMouseDown() const { return !bMouseIsUp; } SetMouseDown(FASTBOOL bDown)164 void SetMouseDown(FASTBOOL bDown) { bMouseIsUp=!bDown; } 165 166 Point KorregPos(const Point& rNow, const Point& rPrev) const; 167 void Reset(const Point& rPnt); 168 void NextMove(const Point& rPnt); 169 void NextPoint(FASTBOOL bSaveReal=sal_False); 170 void PrevPoint(); 171 FASTBOOL CheckMinMoved(const Point& rPnt); GetDX() const172 long GetDX() const { return GetNow().X()-GetPrev().X(); } GetDY() const173 long GetDY() const { return GetNow().Y()-GetPrev().Y(); } 174 Fraction GetXFact() const; 175 Fraction GetYFact() const; 176 GetDragMethod() const177 SdrDragMethod* GetDragMethod() const { return pDragMethod; } SetDragMethod(SdrDragMethod * pMth)178 void SetDragMethod(SdrDragMethod* pMth) { pDragMethod=pMth; } 179 GetActionRect() const180 const Rectangle& GetActionRect() const { return aActionRect; } SetActionRect(const Rectangle & rR)181 void SetActionRect(const Rectangle& rR) { aActionRect=rR; } 182 183 // Unter Beruecksichtigung von 1stPointAsCenter 184 void TakeCreateRect(Rectangle& rRect) const; 185 }; 186 187 #endif //_SVDDRAG_HXX 188 189