xref: /aoo4110/main/svx/inc/svx/svdomeas.hxx (revision b1cdbd2c)
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