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