1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: svdcrtv.hxx,v $
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 ************************************************************************/
34 // HACK to avoid too deep includes and to have some
35 // levels free in svdmark itself (MS compiler include depth limit)
37 #include <bf_svx/svdhdl.hxx>
40 #include <bf_svx/svddrgv.hxx>
43 //************************************************************
44 // Vorausdeklarationen
45 //************************************************************
47 class XLineAttrSetItem
;
48 class XFillAttrSetItem
;
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
;
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;
97 void ImpMakeCreateAttr();
101 virtual void WriteRecords(SvStream
& rOut
) const;
102 virtual BOOL
ReadRecord(const SdrIOHeader
& rViewHead
, const SdrNamedSubRecord
& rSubHead
, SvStream
& rIn
);
103 BOOL
CheckEdgeMode();
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
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.
178 BOOL
IsAutoClosePolys() const { return bAutoClosePolys
; }
179 void SetAutoClosePolys(BOOL bOn
) { bAutoClosePolys
=bOn
; }
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.
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.
198 BOOL
IsUseIncompatiblePathCreateInterface() const { return bUseIncompatiblePathCreateInterface
; }
199 void SetUseIncompatiblePathCreateInterface(BOOL bOn
) { bUseIncompatiblePathCreateInterface
= bOn
; }
202 }//end of namespace binfilter
203 #endif //_SVDCRTV_HXX