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 _SVDOMEAS_HXX 25 #define _SVDOMEAS_HXX 26 27 #include <svx/svdotext.hxx> 28 #include "svx/svxdllapi.h" 29 #include <editeng/measfld.hxx> 30 31 //************************************************************ 32 // Vorausdeklarationen 33 //************************************************************ 34 35 class SdrOutliner; 36 struct ImpMeasureRec; 37 struct ImpMeasurePoly; 38 39 namespace sdr { namespace properties { 40 class MeasureProperties; 41 }} 42 43 //************************************************************ 44 // Hilfsklasse SdrMeasureObjGeoData 45 //************************************************************ 46 47 class SdrMeasureObjGeoData : public SdrTextObjGeoData 48 { 49 public: 50 Point aPt1; 51 Point aPt2; 52 53 public: 54 SdrMeasureObjGeoData(); 55 virtual ~SdrMeasureObjGeoData(); 56 }; 57 58 //************************************************************ 59 // SdrMeasureObj 60 //************************************************************ 61 62 class SVX_DLLPUBLIC SdrMeasureObj : public SdrTextObj 63 { 64 private: 65 // to allow sdr::properties::MeasureProperties access to SetTextDirty() 66 friend class sdr::properties::MeasureProperties; 67 68 friend class SdrMeasureField; 69 70 protected: 71 virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); 72 virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); 73 74 Point aPt1; 75 Point aPt2; 76 FASTBOOL bTextDirty; 77 78 protected: 79 void ImpTakeAttr(ImpMeasureRec& rRec) const; 80 void TakeRepresentation( XubString& rStr, SdrMeasureFieldKind eMeasureFieldKind ) const; 81 void ImpCalcGeometrics(const ImpMeasureRec& rRec, ImpMeasurePoly& rPol) const; 82 basegfx::B2DPolyPolygon ImpCalcXPoly(const ImpMeasurePoly& rPol) const; 83 void ImpEvalDrag(ImpMeasureRec& rRec, const SdrDragStat& rDrag) const; SetTextDirty()84 void SetTextDirty() { bTextDirty=sal_True; SetTextSizeDirty(); if (!aOutRect.IsEmpty()) { SetBoundRectDirty(); SetRectsDirty(sal_True); } } 85 void UndirtyText() const; 86 87 virtual SdrObjGeoData* NewGeoData() const; 88 virtual void SaveGeoData(SdrObjGeoData& rGeo) const; 89 virtual void RestGeoData(const SdrObjGeoData& rGeo); 90 91 public: 92 TYPEINFO(); 93 SdrMeasureObj(); 94 SdrMeasureObj(const Point& rPt1, const Point& rPt2); 95 virtual ~SdrMeasureObj(); 96 97 virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; 98 virtual sal_uInt16 GetObjIdentifier() const; 99 virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const; 100 virtual void operator=(const SdrObject& rObj); 101 102 virtual void TakeObjNameSingul(String& rName) const; 103 virtual void TakeObjNamePlural(String& rName) const; 104 105 virtual basegfx::B2DPolyPolygon TakeXorPoly() const; 106 virtual sal_uInt32 GetHdlCount() const; 107 virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; 108 109 // special drag methods 110 virtual bool hasSpecialDrag() const; 111 virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; 112 virtual bool applySpecialDrag(SdrDragStat& rDrag); 113 virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; 114 115 virtual FASTBOOL BegCreate(SdrDragStat& rStat); 116 virtual FASTBOOL MovCreate(SdrDragStat& rStat); 117 virtual FASTBOOL EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); 118 virtual FASTBOOL BckCreate(SdrDragStat& rStat); 119 virtual void BrkCreate(SdrDragStat& rStat); 120 virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; 121 virtual Pointer GetCreatePointer() const; 122 123 virtual void NbcMove(const Size& rSiz); 124 virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); 125 virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); 126 virtual void NbcMirror(const Point& rRef1, const Point& rRef2); 127 virtual void NbcShear(const Point& rRef, long nWink, double tn, FASTBOOL bVShear); 128 virtual long GetRotateAngle() const; 129 virtual void RecalcSnapRect(); 130 131 virtual sal_uInt32 GetSnapPointCount() const; 132 virtual Point GetSnapPoint(sal_uInt32 i) const; 133 134 virtual sal_Bool IsPolyObj() const; 135 virtual sal_uInt32 GetPointCount() const; 136 virtual Point GetPoint(sal_uInt32 i) const; 137 virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i); 138 139 virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; 140 141 virtual sal_Bool BegTextEdit(SdrOutliner& rOutl); 142 virtual const Size& GetTextSize() const; 143 virtual void TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, FASTBOOL bNoEditText=sal_False, 144 Rectangle* pAnchorRect=NULL, sal_Bool bLineWidth=sal_True ) const; 145 virtual void TakeTextAnchorRect(Rectangle& rAnchorRect) const; 146 virtual void TakeTextEditArea(Size* pPaperMin, Size* pPaperMax, Rectangle* pViewInit, Rectangle* pViewMin) const; 147 virtual sal_uInt16 GetOutlinerViewAnchorMode() const; 148 virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject); 149 virtual OutlinerParaObject* GetOutlinerParaObject() const; 150 151 virtual FASTBOOL CalcFieldValue(const SvxFieldItem& rField, sal_uInt16 nPara, sal_uInt16 nPos, 152 FASTBOOL bEdit, Color*& rpTxtColor, Color*& rpFldColor, String& rRet) const; 153 154 // #i97878# 155 virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const; 156 virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon); 157 }; 158 159 ///////////////////////////////////////////////////////////////////////////////////////////////// 160 // 161 // Creating: 162 // ~~~~~~~~~ 163 // Dragging von Bezugspunkt 1 zu Bezugspunkt 2 -> Bezugskante 164 // 165 // Die Defaults: 166 // ~~~~~~~~~~~~~ 167 // Masslinie und Masshilfslinien: Haarlinien solid schwarz 168 // Pfeile: 2mm x 4mm 169 // Textgroesse 170 // ___ 171 // | Masszahl | 2mm 172 // |<--------------------->|--- 173 // | | 8mm 174 // | | 175 // Pt1============# Pt2-- <----Bezugskante (von Pt1 nach Pt2) 176 // # # |___ <- Ueberstand der Masshilfslinie(n) 177 // # #=========# 178 // # Zu bemassendes Objekt # 179 // #=======================# 180 // 181 // Attribute: 182 // ~~~~~~~~~~ 183 // 1. Wo steht der Text: mitte, rechts oder links (def=automatik) 184 // 2. Text oberhalb der Linie oder unterhalb oder Linie unterbrochen durch Text (def=automatik) 185 // 3. Den Abstand der Masslinie zur Bezugskante (=zum bemassten Objekt). 186 // Default=8mm 187 // 4. Masslinie unterhalb der Bezugskante (default=nein) 188 // 5. Die Ueberlaenge(n) der Masshilfslinien ueber die Bezugskante (2x, default=0) 189 // 6. Den Ueberhang der Masshilfslinien ueber die Masslinie (default=2mm) 190 // 7. Den Abstand der Masshilfslinien zur Bezugskante 191 // 192 // Dragging: Handle Shift 193 // ~~~~~~~~~ 194 // - Die Bezugspunkte SolidQuadHdl nur die Laenge 195 // 1.+2. Anpacken des Textes 196 // 3.+4. Hdl am Pfeil (2x) SolidQuadHdl nur den Bool 197 // 5. Hdl am Endpunkt CircHdl beide Laengen? 198 // 6.+7. Kein Dragging 199 // 200 // Offen: 201 // ~~~~~~ 202 // - Radien (gleich als Typ verankern 203 // 204 // Special: 205 // ~~~~~~~~ 206 // Connecting an max. 2 Objekte 207 // -> Bei Copy, etc. den entspr. Code der Verbinder verwenden?!? 208 // wird wohl recht kompliziert werden ... 209 // 210 ///////////////////////////////////////////////////////////////////////////////////////////////// 211 212 #endif //_SVDOMEAS_HXX 213 214