sync master with lastest vba changes
[ooovba.git] / binfilter / inc / bf_svx / svdedxv.hxx
blob1943e7421ff2d2181c2e394199c2526da5ea1dd4
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: svdedxv.hxx,v $
10 * $Revision: 1.8 $
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 _SVDEDXV_HXX
32 #define _SVDEDXV_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/svdglev.hxx>
41 namespace binfilter {
43 //************************************************************
44 // Vorausdeklarationen
45 //************************************************************
47 class SdrOutliner;
48 class OutlinerView;
49 class EditStatus;
50 class EditFieldInfo;
51 class ImpSdrEditPara;
53 //************************************************************
54 // Defines
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
75 // - Macromodus
77 ////////////////////////////////////////////////////////////////////////////////////////////////////
78 ////////////////////////////////////////////////////////////////////////////////////////////////////
80 class SdrObjEditView: public SdrGlueEditView
82 friend class SdrPageView;
83 friend class ImpSdrEditPara;
85 protected:
86 // TextEdit
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...
94 SdrObject* pMacroObj;
95 SdrPageView* pMacroPV;
96 Window* pMacroWin;
98 Rectangle aTextEditArea;
99 Rectangle aMinTextEditArea;
100 Link aOldCalcFieldValueLink; // Zum rufen des alten Handlers
101 Point aMacroDownPos;
103 USHORT nMacroTol;
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;
112 private:
113 void ImpClearVars();
115 protected:
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
128 public:
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; }
200 void BrkMacroObj();
201 BOOL IsMacroObj() const { return pMacroObj!=NULL; }
202 BOOL IsMacroObjDown() const { return bMacroDown; }
205 }//end of namespace binfilter
206 #endif //_SVDEDXV_HXX