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: svdedxv.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/svdglev.hxx>
43 //************************************************************
44 // Vorausdeklarationen
45 //************************************************************
53 //************************************************************
55 //************************************************************
57 enum SdrEndTextEditKind
{SDRENDTEXTEDIT_UNCHANGED
, // Textobjekt unveraendert
58 SDRENDTEXTEDIT_CHANGED
, // Textobjekt wurde geaendert
59 SDRENDTEXTEDIT_DELETED
, // Textobjekt implizit geloescht
60 SDRENDTEXTEDIT_SHOULDBEDELETED
}; // Fuer Writer: Textobjekt sollte geloescht werden
62 ////////////////////////////////////////////////////////////////////////////////////////////////////
63 ////////////////////////////////////////////////////////////////////////////////////////////////////
65 // @@@@ @@@@@ @@@@@@ @@@@@ @@@@@ @@ @@@@@@ @@ @@ @@ @@@@@ @@ @@
66 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
67 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@
68 // @@ @@ @@@@@ @@ @@@@ @@ @@ @@ @@ @@@@@ @@ @@@@ @@@@@@@
69 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@
70 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@
71 // @@@@ @@@@@ @@@@ @@@@@ @@@@@ @@ @@ @ @@ @@@@@ @@ @@
73 // - Allgemeines Edit fuer objektspeziefische Eigenschaften
74 // - Textedit fuer alle vom SdrTextObj abgeleiteten Zeichenobjekte
77 ////////////////////////////////////////////////////////////////////////////////////////////////////
78 ////////////////////////////////////////////////////////////////////////////////////////////////////
80 class SdrObjEditView
: public SdrGlueEditView
82 friend class SdrPageView
;
83 friend class ImpSdrEditPara
;
87 SdrObject
* pTextEditObj
; // Aktuell im TextEdit befindliches Obj
88 SdrPageView
* pTextEditPV
;
89 SdrOutliner
* pTextEditOutliner
; // Na eben der Outliner fuers TextEdit
90 OutlinerView
* pTextEditOutlinerView
; // die aktuelle View des Outliners
91 Window
* pTextEditWin
; // passendes Win zu pTextEditOutlinerView
92 Cursor
* pTextEditCursorMerker
; // Zum Restaurieren des Cursors am jeweiligen Win
93 ImpSdrEditPara
* pEditPara
; // Da hau' ich erstmal alles rein um kompatibel zu bleiben...
95 SdrPageView
* pMacroPV
;
98 Rectangle aTextEditArea
;
99 Rectangle aMinTextEditArea
;
100 Link aOldCalcFieldValueLink
; // Zum rufen des alten Handlers
105 unsigned bTextEditDontDelete
: 1; // Outliner und View bei EndTextEdit nicht deleten (f. Rechtschreibpruefung)
106 unsigned bTextEditOnlyOneView
: 1; // Nur eine OutlinerView (f. Rechtschreibpruefung)
107 unsigned bTextEditNewObj
: 1; // Aktuell editiertes Objekt wurde gerade neu erzeugt
108 unsigned bQuickTextEditMode
: 1; // persistent(->CrtV). Default=TRUE
109 unsigned bMacroMode
: 1; // persistent(->CrtV). Default=TRUE
110 unsigned bMacroDown
: 1;
117 // Eine neue OutlinerView auf dem Heap anlegen und alle erforderlichen Parameter setzen.
118 // pTextEditObj, pTextEditPV und pTextEditOutliner muessen initiallisiert sein.
120 // Hintergrundfarbe fuer die Outlinerviews bestimmen
122 // Feststellen, ob der gesamte Text markiert ist. Liefert auch TRUE wenn
123 // kein Text vorhanden ist.
125 // Handler fuer AutoGrowing Text bei aktivem Outliner
129 SdrObjEditView(SdrModel
* pModel1
, OutputDevice
* pOut
=NULL
);
130 virtual ~SdrObjEditView();
132 // Actionhandling fuer Macromodus
133 virtual BOOL
IsAction() const;
134 virtual void BrkAction();
136 virtual void SFX_NOTIFY(SfxBroadcaster
& rBC
, const TypeId
& rBCType
, const SfxHint
& rHint
, const TypeId
& rHintType
);
137 virtual void ModelHasChanged();
139 //************************************************************************
140 // TextEdit ueber einen Outliner
141 //************************************************************************
142 // QuickTextEditMode bedeutet, dass Objekte mit Text sofort beim Anklicken
143 // editiert werden sollen. Default=TRUE. Persistent.
144 void SetQuickTextEditMode(BOOL bOn
) { bQuickTextEditMode
=bOn
; }
145 BOOL
IsQuickTextEditMode() const { return bQuickTextEditMode
; }
147 // Starten des TextEditMode. Ist pWin==NULL, wird das erste an der View
148 // angemeldete Win verwendet.
149 // Der Cursor des Fensters an dem Editiert wird wird bei
150 // BegTextEdit() gemerkt und bei EndTextEdit() wieder restauriert.
151 // Die App muss sicherstellen, das die zum Zeitpunkt des BegEdit am
152 // Windows angemeldete Cursorinstanz beim EndTextEdit noch gueltig ist.
153 // Ueber den Parameter pEditOutliner kann die Applikation einen eigenen
154 // Outliner vorgeben, der zum Editieren verwendet wird. Dieser gehoert
155 // nach Aufruf von BegTextEdit der SdrObjEditView und wird von dieser
156 // spaeter via delete zerstoert (falls bDontDeleteOutliner=FALSE). Die
157 // SdrObjEditView setzt dann das Modusflag (EditEngine/Outliner) an
158 // dieser Instanz und ausserdem auch den StatusEventHdl.
159 // Ebenso kann eine spezifische OutlinerView vorgegeben werden.
160 BOOL
BegTextEdit(SdrObject
* pObj
, SdrPageView
* pPV
=NULL
, Window
* pWin
=NULL
,
161 SdrOutliner
* pGivenOutliner
=NULL
, OutlinerView
* pGivenOutlinerView
=NULL
,
162 BOOL bDontDeleteOutliner
=FALSE
, BOOL bOnlyOneView
=FALSE
);
163 // bDontDeleteReally ist ein Spezialparameter fuer den Writer.
164 // Ist dieses Flag gesetzt, dann wird ein evtl. leeres Textobjekt
165 // nicht geloescht. Stattdessen gibt es dann einen Returncode
166 // SDRENDTEXTEDIT_SHOULDBEDELETED (anstelle von SDRENDTEXTEDIT_BEDELETED)
167 // der besagt, dass das Objekt geloescht werden sollte.
168 SdrEndTextEditKind
EndTextEdit(BOOL bDontDeleteReally
=FALSE
);
169 BOOL
IsTextEdit() const { return pTextEditObj
!=NULL
; }
171 // Folgende Methode addiert einen passenden Offset zum MouseEvent
172 // um diesen an den Outliner weiterzureichen.
174 // Wer das z.Zt. im TextEdit befindliche Objekt braucht:
175 SdrObject
* GetTextEditObject() const { return pTextEditObj
; }
176 SdrPageView
* GetTextEditPageView() const { return pTextEditPV
; }
178 // Das aktuelle Win des Outliners
179 Window
* GetTextEditWin() const { return pTextEditWin
; }
181 // An den hier abgeholten Outliner kann man schliesslich
182 // Events versenden, Attribute setzen, Cut/Copy/Paste rufen,
183 // Undo/Redo rufen, etc.
184 const SdrOutliner
* GetTextEditOutliner() const { return pTextEditOutliner
; }
185 SdrOutliner
* GetTextEditOutliner() { return pTextEditOutliner
; }
186 const OutlinerView
* GetTextEditOutlinerView() const { return pTextEditOutlinerView
; }
187 OutlinerView
* GetTextEditOutlinerView() { return pTextEditOutlinerView
; }
189 // Intern: Beim Splitteraufziehen neue OutlinerView...
190 virtual void DelWin(OutputDevice
* pWin1
);
192 //************************************************************************
193 // Object-MacroModus (z.B. Rect als Button oder sowas):
194 //************************************************************************
195 // Persistent. Default TRUE. SvDraw wertet das Flag u.a. bei
196 // SdrView::GetPreferedPointer() aus. Hat nur Wirkung, wenn das Dokument
197 // Draw-Objekte mit Macrofunktionalitaet hat (SdrObject::HasMacro()==TRUE).
198 void SetMacroMode(BOOL bOn
) { bMacroMode
=bOn
; }
199 BOOL
IsMacroMode() const { return bMacroMode
; }
201 BOOL
IsMacroObj() const { return pMacroObj
!=NULL
; }
202 BOOL
IsMacroObjDown() const { return bMacroDown
; }
205 }//end of namespace binfilter
206 #endif //_SVDEDXV_HXX