Update ooo320-m1
[ooovba.git] / binfilter / inc / bf_svx / svdcrtv.hxx
blob1d04522de1354652ca9d7645adce4dfac75ca38b
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: svdcrtv.hxx,v $
10 * $Revision: 1.7 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _SVDCRTV_HXX
32 #define _SVDCRTV_HXX
34 // HACK to avoid too deep includes and to have some
35 // levels free in svdmark itself (MS compiler include depth limit)
36 #ifndef _SVDHDL_HXX
37 #include <bf_svx/svdhdl.hxx>
38 #endif
40 #include <bf_svx/svddrgv.hxx>
41 namespace binfilter {
43 //************************************************************
44 // Vorausdeklarationen
45 //************************************************************
47 class XLineAttrSetItem;
48 class XFillAttrSetItem;
49 class SdrEdgeObj;
50 class SdrObjConnection;
51 class ImpSdrConnectMarker;
53 ////////////////////////////////////////////////////////////////////////////////////////////////////
54 ////////////////////////////////////////////////////////////////////////////////////////////////////
56 // @@@@ @@@@@ @@@@@ @@@@ @@@@@@ @@@@@ @@ @@ @@ @@@@@ @@ @@
57 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
58 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@
59 // @@ @@@@@ @@@@ @@@@@@ @@ @@@@ @@@@@ @@ @@@@ @@@@@@@
60 // @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@
61 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@
62 // @@@@ @@ @@ @@@@@ @@ @@ @@ @@@@@ @ @@ @@@@@ @@ @@
64 ////////////////////////////////////////////////////////////////////////////////////////////////////
65 ////////////////////////////////////////////////////////////////////////////////////////////////////
67 class SdrCreateView: public SdrDragView
69 friend class SdrPageView;
70 friend class ImpSdrCreateLibObjMove;
71 friend class ImpSdrCreateLibObjResize;
73 protected:
74 SdrObject* pAktCreate; // Aktuell in Erzeugung befindliches Objekt
75 SdrPageView* pCreatePV; // Hier wurde die Erzeugung gestartet
76 SdrObject* pCurrentLibObj;
77 SdrDragMethod* pLibObjDragMeth;
78 ImpSdrConnectMarker* pConnectMarker;
80 Pointer aAktCreatePointer;
82 INT32 nAutoCloseDistPix;
83 INT32 nFreeHandMinDistPix;
84 UINT32 nAktInvent; // Aktuell eingestelltes
85 UINT16 nAktIdent; // Obj fuer Neuerzeugung
87 unsigned bAutoTextEdit : 1; // Textedit nach dem erzeugen eines Textrahmens starten
88 unsigned b1stPointAsCenter : 1;
89 unsigned bUseIncompatiblePathCreateInterface : 1;
90 unsigned bAutoClosePolys : 1;
91 unsigned bCurrentLibObjMoveNoResize : 1;
92 unsigned bCurrentLibObjSetDefAttr : 1;
93 unsigned bCurrentLibObjSetDefLayer : 1;
95 private:
96 void ImpClearVars();
97 void ImpMakeCreateAttr();
99 protected:
101 virtual void WriteRecords(SvStream& rOut) const;
102 virtual BOOL ReadRecord(const SdrIOHeader& rViewHead, const SdrNamedSubRecord& rSubHead, SvStream& rIn);
103 BOOL CheckEdgeMode();
105 public:
106 SdrCreateView(SdrModel* pModel1, OutputDevice* pOut=NULL);
107 virtual ~SdrCreateView();
109 virtual void ToggleShownXor(OutputDevice* pOut, const Region* pRegion) const;
110 virtual BOOL IsAction() const;
111 virtual void BrkAction();
114 void SetActiveLayer(const String& rName) { aAktLayer=rName; }
115 const String& GetActiveLayer() const { return aAktLayer; }
116 void SetMeasureLayer(const String& rName) { aMeasureLayer=rName; }
117 const String& GetMeasureLayer() const { return aMeasureLayer; }
119 // Feststellen, ob Textwerkzeug aktiviert
120 BOOL IsTextTool() const;
122 // Feststellen, ob Objektverbinderwerkzeug aktiviert
123 BOOL IsEdgeTool() const;
125 // Feststellen, ob Bemassungswerkzeug aktiviert
127 void SetCurrentObj(UINT16 nIdent, UINT32 nInvent=SdrInventor);
128 void TakeCurrentObj(UINT16& nIdent, UINT32& nInvent) const { nInvent=nAktInvent; nIdent=nAktIdent; }
129 UINT32 GetCurrentObjInventor() const { return nAktInvent; }
130 UINT16 GetCurrentObjIdentifier() const { return nAktIdent; }
132 // Hier kann man ein vorgefertigtes Objekt als Create-Default setzen.
133 // Die Methoden arbeiten in Wechselwirkung mit Set/TakeCurrentObj().
134 // TakeCurrentObj liefert anschliessend OBJ_NONE solange bis wieder mit
135 // obiger Methode ein Objekt fuer normales Create gesetzt wird. Das zuvor
136 // gesetzte vorgefertigte Objekt wird dann per delete abgeraeumt.
137 // Das uebergebene Obj beim Aufruf dieser Methode der View uebereignet!
138 // Bei jedem BegCreate wird eine Kopie angefertigt, welche dann eingefuegt
139 // wird. Wenn bMoveNoResize=FALSE, wird das Objekt dann via Resize
140 // "aufgezogen". Andernfalls wird es nur gemoved.
141 // Als Mauszeiger wird POINTER_CROSS verwendet.
142 const SdrObject* GetCurrentLibObj() const { return pCurrentLibObj; }
144 // Starten des normalen Create
145 void BrkCreateObj();
146 BOOL IsCreateObj() const { return pAktCreate!=NULL; }
147 SdrObject* GetCreateObj() const { return pAktCreate; }
149 // BegCreateCaptionObj() erzeugt ein SdrCaptionObj (Legendenobjekt).
150 // rObjSiz ist die anfaengliche Groesse des Legenden-Textrahmens.
151 // gedraggd wird lediglich die Laenge des Zipfel.
153 // Einfuegen eines vorgefertigten Objekts. pObj wird dabei uebereignet.
154 // Die Einstellung des CurrentObj bleibt hierbei unbeeinflusst!
155 // Diese Funktion eignet sich dafuer, um via eigenem "Drag&Drop" von
156 // einer Symbolbibliothek ein Symbol per Maus zu greifen und dieses auf
157 // das Dokument zu ziehen.
159 // Wenn TextEditAfterCreate auf TRUE steht (das ist der Default),
160 // dann wird nach dem erzeugen eines Textrahmenobjekts (OBJ_TEXT,
161 // OBJ_TEXTEXT, OBJ_OUTLINERTEXT, OBJ_TITLETEXT, OBJ_CAPTION)
162 // automatisch ein TextEdit (SdrObjEditView::BegTextEdit) gestartet.
163 BOOL IsTextEditAfterCreate() const { return bAutoTextEdit; }
164 void SetTextEditAfterCreate(BOOL bOn) { bAutoTextEdit = bOn; }
166 // Erzeugen eines Kreises/Rechtecks/Textrahmens wobei der 1. Punkt
167 // nicht die linke obere Ecke, sondern das Zentrum des Objekts vorgibt.
168 // Persistentes Flag. Default=FALSE.
169 BOOL IsCreate1stPointAsCenter() const { return b1stPointAsCenter; }
170 void SetCreate1stPointAsCenter(BOOL bOn) { b1stPointAsCenter = bOn; SnapMove(); }
172 // Fuer Polylines (OBJ_PLIN) und Freihandlinien (OBJ_FREELINE). Ist dieses
173 // Flag TRUE, werden diese beiden Objekttypen implizit geschlossen und in
174 // Polygon (OBJ_POLY) bzw. Freihandflaeche (OBJ_FREEFILL) gewandelt falls
175 // zum Ende des Create die Distanz zwischen Startpunkt und Endpunkt des
176 // Objekts <=n Pixel ist, wobei SetAutoCloseDistPix vorgegeben wird.
177 // Default=TRUE.
178 BOOL IsAutoClosePolys() const { return bAutoClosePolys; }
179 void SetAutoClosePolys(BOOL bOn) { bAutoClosePolys=bOn; }
181 // Default=5 Pixel.
182 USHORT GetAutoCloseDistPix() const { return USHORT(nAutoCloseDistPix); }
183 void SetAutoCloseDistPix(USHORT nVal) { nAutoCloseDistPix=nVal; }
185 // Vorgabe des minimalen Pixelabstands zwischen 2 Bezierpunkten bei der
186 // Erzeugung einer Freihandlinie.
187 // Default=10 Pixel.
188 USHORT GetFreeHandMinDistPix() const { return USHORT(nFreeHandMinDistPix); }
189 void SetFreeHandMinDistPix(USHORT nVal) { nFreeHandMinDistPix=nVal; }
191 // Wer das (zur restlichen Create-Funktionalitaet von SvDraw) inkompatible
192 // Create-Interface am PathObj beibehalten moechte muss das nachfolgende
193 // Flag setzen. Dieses wirkt sich aus bei den Objekttypen:
194 // OBJ_POLY, OBJ_PLIN, OBJ_PATHLINE, OBJ_PATHFILL
195 // Dieses Flag hat nur voruebergehenden Character. Die betroffenen
196 // Applikationen sollten alsbald umgestellt werden.
197 // Default=FALSE;
198 BOOL IsUseIncompatiblePathCreateInterface() const { return bUseIncompatiblePathCreateInterface; }
199 void SetUseIncompatiblePathCreateInterface(BOOL bOn) { bUseIncompatiblePathCreateInterface = bOn; }
202 }//end of namespace binfilter
203 #endif //_SVDCRTV_HXX