xref: /trunk/main/svx/inc/svx/svdomeas.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
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_uInt32 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