xref: /aoo42x/main/editeng/inc/editeng/outliner.hxx (revision 766ce4d0)
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 #ifndef _OUTLINER_HXX
24 #define _OUTLINER_HXX
25 
26 #include <tools/gen.hxx>
27 #include <tools/string.hxx>
28 #include <tools/debug.hxx>
29 
30 #include <svl/brdcst.hxx>
31 
32 #include <editeng/editdata.hxx>
33 #include <i18npool/lang.h>
34 #include <tools/color.hxx>
35 #include <vcl/graph.hxx>
36 #include <tools/list.hxx>
37 #include <tools/link.hxx>
38 #include <rsc/rscsfx.hxx>
39 #include "editeng/editengdllapi.h"
40 #include <editeng/numitem.hxx>
41 #include <svtools/grfmgr.hxx>
42 
43 #include <tools/rtti.hxx>	// wegen typedef TypeId
44 #include <vector>
45 
46 class OutlinerEditEng;
47 class Outliner;
48 class EditView;
49 class EditUndo;
50 class ParagraphList;
51 class OutlinerParaObject;
52 class SvStream;
53 class SvxBulletItem;
54 class SvxFont;
55 class SvxSearchItem;
56 class SvxFieldItem;
57 class OLUndoRemove;
58 class Window;
59 class KeyEvent;
60 class MouseEvent;
61 class Pointer;
62 class CommandEvent;
63 class MapMode;
64 class OutputDevice;
65 class PolyPolygon;
66 class SfxStyleSheetPool;
67 class SfxStyleSheet;
68 class SfxItemPool;
69 class SfxItemSet;
70 class SvxNumBulletItem;
71 class SvxNumberFormat;
72 class SvxLRSpaceItem;
73 class EditEngine;
74 class SvKeyValueIterator;
75 class SvxForbiddenCharactersTable;
76 
77 namespace svl
78 {
79     class IUndoManager;
80 }
81 
82 #include <com/sun/star/uno/Reference.h>
83 
84 #include <vos/ref.hxx>
85 #include <editeng/svxfont.hxx>
86 #include <editeng/eedata.hxx>
87 #include <editeng/paragraphdata.hxx>
88 
89 class SvxFieldData;
90 //////////////////////////////////////////////////////////////////////////////
91 
92 namespace com { namespace sun { namespace star { namespace linguistic2 {
93 	class XSpellChecker1;
94 	class XHyphenator;
95 }}}}
96 namespace svx{
97 struct SpellPortion;
98 typedef std::vector<SpellPortion> SpellPortions;
99 }
100 
101 namespace basegfx { class B2DPolyPolygon; }
102 
103 // nur interner Gebrauch!
104 #define PARAFLAG_DROPTARGET         0x1000
105 #define PARAFLAG_DROPTARGET_EMPTY   0x2000
106 #define PARAFLAG_HOLDDEPTH          0x4000
107 #define PARAFLAG_SETBULLETTEXT      0x8000
108 #define PARAFLAG_ISPAGE				0x0100
109 
110 // Undo-Action-Ids
111 #define OLUNDO_DEPTH            EDITUNDO_USER
112 // #define OLUNDO_HEIGHT           EDITUNDO_USER+1
113 #define OLUNDO_EXPAND           EDITUNDO_USER+2
114 #define OLUNDO_COLLAPSE         EDITUNDO_USER+3
115 // #define OLUNDO_REMOVE           EDITUNDO_USER+4
116 #define OLUNDO_ATTR             EDITUNDO_USER+5
117 #define OLUNDO_INSERT           EDITUNDO_USER+6
118 // #define OLUNDO_MOVEPARAGRAPHS	EDITUNDO_USER+7
119 #define OLUNDO_CHECKPARA		EDITUNDO_USER+8
120 
121 class Paragraph : protected ParagraphData
122 {
123 private:
124 	friend class Outliner;
125 	friend class ParagraphList;
126 	friend class OutlinerView;
127 	friend class OutlinerParaObject;
128 	friend class OutlinerEditEng;
129 	friend class OLUndoDepth;
130 	friend class OutlinerUndoCheckPara;
131 	friend class OutlinerUndoChangeParaFlags;
132 
133 	Paragraph& operator=(const Paragraph& rPara );
134 
135 	sal_uInt16				nFlags;
136 	XubString			aBulText;
137 	Size				aBulSize;
138 	sal_Bool				bVisible;
139 
140 	sal_Bool 				IsVisible() const { return bVisible; }
141 	void 				SetText( const XubString& rText ) { aBulText = rText; aBulSize.Width() = -1; }
142 	void 				Invalidate() { aBulSize.Width() = -1; }
143 	void 				SetDepth( sal_Int16 nNewDepth ) { nDepth = nNewDepth; aBulSize.Width() = -1; }
144 	const XubString&	GetText() const { return aBulText; }
145 
146 						Paragraph( sal_Int16 nDepth );
147 						Paragraph( const Paragraph& );
148                         Paragraph( const ParagraphData& );
149 						~Paragraph();
150 
151 	sal_Int16			GetDepth() const { return nDepth; }
152 
153     sal_Int16           GetNumberingStartValue() const { return mnNumberingStartValue; }
154     void                SetNumberingStartValue( sal_Int16 nNumberingStartValue );
155 
156     sal_Bool            IsParaIsNumberingRestart() const { return mbParaIsNumberingRestart; }
157     void                SetParaIsNumberingRestart( sal_Bool bParaIsNumberingRestart );
158 
159 	void				SetFlag( sal_uInt16 nFlag ) { nFlags |= nFlag; }
160 	void				RemoveFlag( sal_uInt16 nFlag ) { nFlags &= ~nFlag; }
161 	bool				HasFlag( sal_uInt16 nFlag ) const { return (nFlags & nFlag) != 0; }
162 };
163 
164 struct ParaRange
165 {
166 	sal_uInt16 	nStartPara;
167 	sal_uInt16 	nEndPara;
168 
169 			ParaRange( sal_uInt16 nS, sal_uInt16 nE ) { nStartPara = nS, nEndPara = nE; }
170 
171 	void 	Adjust();
172 	sal_uInt16	Len() const { return 1 + ( ( nEndPara > nStartPara ) ? (nEndPara-nStartPara) : (nStartPara-nEndPara) ); }
173 };
174 
175 inline void ParaRange::Adjust()
176 {
177 	if ( nStartPara > nEndPara )
178 	{
179 		sal_uInt16 nTmp = nStartPara;
180 		nStartPara = nEndPara;
181 		nEndPara = nTmp;
182 	}
183 }
184 
185 #define OL_ROOTPARENT (Paragraph*)NULL
186 
187 class EDITENG_DLLPUBLIC OutlinerView
188 {
189 	friend class Outliner;
190 
191 private:
192 
193 	Outliner*   pOwner;
194 	EditView*   pEditView;
195 
196 	// Drag & Drop
197 	sal_Bool        bBeginDragAtMove_OLDMEMBER;
198 	sal_Bool        bInDragMode;
199 	Point       aDDStartPosRef;
200 	Point       aDDStartPosPix;
201 	sal_uLong       nDDStartPara;
202 	sal_uLong       nDDStartParaVisChildCount;
203 	sal_uLong       nDDCurPara;
204 	sal_uInt16      nDDStartDepth;
205 	sal_uInt16      nDDCurDepth;
206 	sal_uInt16      nDDMaxDepth;
207 	sal_Bool        bDDChangingDepth;
208 	sal_Bool        bDDCursorVisible;
209 	long*       pHorTabArrDoc;
210 	long        nDDScrollLRBorderWidthWin;  // Left Right
211 	long        nDDScrollTBBorderWidthWin;  // Top Bottom
212 	long        nDDScrollLROffs;
213 	long        nDDScrollTDOffs;
214 
215 	void*		pDummy;
216 	sal_uLong		nDummy;
217 
218 	enum MouseTarget {
219 		MouseText = 0,
220 		MouseBullet = 1,
221 		MouseHypertext = 2,    //            ausserhalb OutputArea
222 		MouseOutside = 3,    //            ausserhalb OutputArea
223 		MouseDontKnow = 4
224 	};
225 	MouseTarget OLD_ePrevMouseTarget;
226 
227 #ifdef _OUTLINER_CXX
228 
229 	EDITENG_DLLPRIVATE void 		ImplExpandOrCollaps( sal_uInt16 nStartPara, sal_uInt16 nEndPara, sal_Bool bExpand );
230 
231 	EDITENG_DLLPRIVATE sal_uLong       ImpCheckMousePos( const Point& rPosPixel, MouseTarget& reTarget);
232 	EDITENG_DLLPRIVATE void        ImpToggleExpand( Paragraph* pParentPara );
233 	EDITENG_DLLPRIVATE ParaRange	ImpGetSelectedParagraphs( sal_Bool bIncludeHiddenChilds );
234 	EDITENG_DLLPRIVATE void        ImpHideDDCursor();
235 	EDITENG_DLLPRIVATE void        ImpShowDDCursor();
236 	EDITENG_DLLPRIVATE void        ImpPaintDDCursor();
237 
238 	EDITENG_DLLPRIVATE void        ImpDragScroll( const Point& rPosPix );
239 	EDITENG_DLLPRIVATE void        ImpScrollLeft();
240 	EDITENG_DLLPRIVATE void        ImpScrollRight();
241 	EDITENG_DLLPRIVATE void        ImpScrollUp();
242 	EDITENG_DLLPRIVATE void        ImpScrollDown();
243 
244 	EDITENG_DLLPRIVATE sal_uLong       ImpGetInsertionPara( const Point& rPosPixel );
245 	EDITENG_DLLPRIVATE Point       ImpGetDocPos( const Point& rPosPixel );
246 	EDITENG_DLLPRIVATE Pointer     ImpGetMousePointer( MouseTarget eTarget );
247 	EDITENG_DLLPRIVATE sal_uInt16      ImpInitPaste( sal_uLong& rStart );
248 	EDITENG_DLLPRIVATE void        ImpPasted( sal_uLong nStart, sal_uLong nPrevParaCount, sal_uInt16 nSize);
249 	EDITENG_DLLPRIVATE sal_uInt16      ImpCalcSelectedPages( sal_Bool bIncludeFirstSelected );
250 	EDITENG_DLLPRIVATE sal_Bool        ImpIsIndentingPages();
251 
252 #endif
253 
254 public:
255 				OutlinerView( Outliner* pOut, Window* pWindow );
256 	virtual		~OutlinerView();
257 
258 	EditView& 	GetEditView() const { return *pEditView; }
259 
260 	void        Scroll( long nHorzScroll, long nVertScroll );
261 
262 	void        Paint( const Rectangle& rRect, OutputDevice* pTargetDevice = 0 );
263 	sal_Bool        PostKeyEvent( const KeyEvent& rKEvt );
264 	sal_Bool        MouseButtonDown( const MouseEvent& );
265 	sal_Bool        MouseButtonUp( const MouseEvent& );
266 	sal_Bool        MouseMove( const MouseEvent& );
267 
268 	void        ShowCursor( sal_Bool bGotoCursor = sal_True );
269 	void        HideCursor();
270 
271 	void        SetOutliner( Outliner* pOutliner );
272 	Outliner*   GetOutliner() const { return pOwner; }
273 
274 	void        SetWindow( Window* pWindow );
275 	Window*     GetWindow() const;
276 
277 	void		SetReadOnly( sal_Bool bReadOnly );
278 	sal_Bool		IsReadOnly() const;
279 
280 	void        SetOutputArea( const Rectangle& rRect );
281 	Rectangle   GetOutputArea() const;
282 
283 	Rectangle   GetVisArea() const;
284 
285 	List*       CreateSelectionList();
286 
287 	// gibt Anzahl selektierter Absaetze zurueck
288 	// MT 07/00: Who needs this?
289 	sal_uLong       Select( Paragraph* pParagraph,
290 					sal_Bool bSelect=sal_True,
291 					sal_Bool bWChilds=sal_True);
292 
293 	String      GetSelected() const;
294 	void        SelectRange( sal_uLong nFirst, sal_uInt16 nCount );
295 	void        SetAttribs( const SfxItemSet& );
296 	void 		Indent( short nDiff );
297 	void        AdjustDepth( short nDX );	// Spaeter gegeb Indent ersetzen!
298 
299 	sal_Bool        AdjustHeight( long nDY );
300 	void        AdjustDepth( Paragraph* pPara, short nDX,
301 					sal_Bool bWithChilds = sal_False );
302 	void        AdjustHeight( Paragraph* pPara, long nDY,
303 					sal_Bool bWithChilds=sal_False );
304 
305     sal_uLong       Read( SvStream& rInput, const String& rBaseURL, EETextFormat eFormat, sal_Bool bSelect = sal_False, SvKeyValueIterator* pHTTPHeaderAttrs = NULL );
306 	sal_uLong		Write( SvStream& rOutput, EETextFormat eFormat );
307 
308 	void        InsertText( const String& rNew, sal_Bool bSelect = sal_False );
309 	void        InsertText( const OutlinerParaObject& rParaObj );
310 	void        Expand();
311 	void        Collapse();
312 	void        Expand( Paragraph* );
313 	void        Collapse( Paragraph* );
314 	void        ExpandAll();
315 	void        CollapseAll();
316 
317 	void		SetBackgroundColor( const Color& rColor );
318 	Color		GetBackgroundColor();
319 
320 	SfxItemSet  GetAttribs();
321 
322 	void        Cut();
323 	void        Copy();
324     void        Paste();
325     void        PasteSpecial();
326 	void        EnablePaste( sal_Bool bEnable );
327 
328 	void        Undo();
329 	void        Redo();
330 
331 	void        	SetStyleSheet( SfxStyleSheet* );
332 	SfxStyleSheet*	GetStyleSheet() const;
333 
334 	void        SetControlWord( sal_uLong nWord );
335 	sal_uLong       GetControlWord() const;
336 
337 	void            SetAnchorMode( EVAnchorMode eMode );
338 	EVAnchorMode    GetAnchorMode() const;
339 
340 	Pointer     GetPointer( const Point& rPosPixel );
341 	void        Command( const CommandEvent& rCEvt );
342 	void        RemoveCharAttribs( sal_uLong nPara, sal_uInt16 nWhich = 0 );
343 
344 	void		CompleteAutoCorrect();
345 
346 	EESpellState    StartSpeller( sal_Bool bMultipleDoc = sal_False );
347 	EESpellState    StartThesaurus();
348 	sal_uInt16          StartSearchAndReplace( const SvxSearchItem& rSearchItem );
349 
350     // for text conversion
351     void            StartTextConversion( LanguageType nSrcLang, LanguageType nDestLang, const Font *pDestFont, sal_Int32 nOptions, sal_Bool bIsInteractive, sal_Bool bMultipleDoc );
352 
353 	void			TransliterateText( sal_Int32 nTransliterationMode );
354 
355 	ESelection  GetSelection();
356 
357 	sal_uInt16		GetSelectedScriptType() const;
358 
359 	void        SetVisArea( const Rectangle& rRec );
360 	void        SetSelection( const ESelection& );
361 
362     void        RemoveAttribs( sal_Bool bRemoveParaAttribs = sal_False, sal_uInt16 nWhich = 0, sal_Bool bKeepLanguages = sal_False );
363     void        RemoveAttribsKeepLanguages( sal_Bool bRemoveParaAttribs );
364 	sal_Bool        HasSelection() const;
365 
366 	void                InsertField( const SvxFieldItem& rFld );
367 	const SvxFieldItem* GetFieldUnderMousePointer() const;
368 	const SvxFieldItem*	GetFieldUnderMousePointer( sal_uInt16& nPara, xub_StrLen& nPos ) const;
369 	const SvxFieldItem* GetFieldAtSelection() const;
370 
371 	/** enables numbering for the selected paragraphs if the numbering of the first paragraph is off
372 		or disables numbering for the selected paragraphs if the numbering of the first paragraph is on
373 	*/
374 	void        ToggleBullets();
375 	sal_Bool	ToggleBullets(sal_Bool bBulletOnOff, sal_Bool bNormalBullet, sal_Bool bMasterView, SvxNumRule* pNumRule = NULL, sal_Bool bForceBulletOnOff = false);
376 	sal_Bool        ToggleAllParagraphsBullets(sal_Bool bBulletOnOffMode, sal_Bool bNormalBullet, sal_Bool bToggleOn, sal_Bool bMasterView, SvxNumRule* pNumRule = NULL);
377 	/** enables numbering for the selected paragraphs that are not enabled and ignore all selected
378 		paragraphs that already have numbering enabled.
379 	*/
380     void        EnableBullets();
381 
382 	sal_Bool        IsCursorAtWrongSpelledWord( sal_Bool bMarkIfWrong = sal_False );
383 	sal_Bool        IsWrongSpelledWordAtPos( const Point& rPosPixel, sal_Bool bMarkIfWrong = sal_False );
384 	void        SpellIgnoreWord();
385 	void        ExecuteSpellPopup( const Point& rPosPixel, Link* pCallBack = 0 );
386 
387 	void		SetInvalidateMore( sal_uInt16 nPixel );
388 	sal_uInt16		GetInvalidateMore() const;
389 
390     String		GetSurroundingText() const;
391  	Selection	GetSurroundingTextSelection() const;
392 };
393 
394 
395 // some thesaurus functionality to avoid code duplication in different projects...
396 bool EDITENG_DLLPUBLIC  GetStatusValueForThesaurusFromContext( String &rStatusVal, LanguageType &rLang, const EditView &rEditView );
397 void EDITENG_DLLPUBLIC  ReplaceTextWithSynonym( EditView &rEditView, const String &rSynonmText );
398 
399 
400 //#if 0 // _SOLAR__PRIVATE
401 DECLARE_LIST(ViewList,OutlinerView*)
402 //#else
403 //typedef List ViewList;
404 //#endif
405 
406 class EDITENG_DLLPUBLIC DrawPortionInfo
407 {
408 public:
409 	const Point&        mrStartPos;
410     const String&       mrText;
411     sal_uInt16          mnTextStart;
412     sal_uInt16          mnTextLen;
413     sal_uInt16          mnPara;
414 	xub_StrLen          mnIndex;
415     const SvxFont&      mrFont;
416     const sal_Int32*    mpDXArray;
417 
418     const EEngineData::WrongSpellVector*  mpWrongSpellVector;
419     const SvxFieldData* mpFieldData;
420     const ::com::sun::star::lang::Locale* mpLocale;
421     const Color maOverlineColor;
422     const Color maTextLineColor;
423 
424     // #101498# BiDi level needs to be transported, too.
425 	sal_uInt8			    mnBiDiLevel;
426 
427     // bitfield
428     unsigned            mbEndOfLine : 1;
429     unsigned            mbEndOfParagraph : 1;
430     unsigned            mbEndOfBullet : 1;
431 
432 	sal_uInt8 GetBiDiLevel() const { return mnBiDiLevel; }
433 	sal_Bool IsRTL() const;
434 
435     DrawPortionInfo(
436         const Point& rPos,
437         const String& rTxt,
438         sal_uInt16 nTxtStart,
439         sal_uInt16 nTxtLen,
440 		const SvxFont& rFnt,
441         sal_uInt16 nPar,
442         xub_StrLen nIdx,
443         const sal_Int32* pDXArr,
444         const EEngineData::WrongSpellVector* pWrongSpellVector,
445         const SvxFieldData* pFieldData,
446         const ::com::sun::star::lang::Locale* pLocale,
447         const Color& rOverlineColor,
448         const Color& rTextLineColor,
449         sal_uInt8 nBiDiLevel,
450         bool bEndOfLine,
451         bool bEndOfParagraph,
452         bool bEndOfBullet)
453     :	mrStartPos(rPos),
454         mrText(rTxt),
455         mnTextStart(nTxtStart),
456         mnTextLen(nTxtLen),
457         mnPara(nPar),
458         mnIndex(nIdx),
459 		mrFont(rFnt),
460         mpDXArray(pDXArr),
461         mpWrongSpellVector(pWrongSpellVector),
462         mpFieldData(pFieldData),
463         mpLocale(pLocale),
464         maOverlineColor(rOverlineColor),
465         maTextLineColor(rTextLineColor),
466         mnBiDiLevel(nBiDiLevel),
467         mbEndOfLine(bEndOfLine),
468         mbEndOfParagraph(bEndOfParagraph),
469         mbEndOfBullet(bEndOfBullet)
470     {}
471 };
472 
473 class EDITENG_DLLPUBLIC DrawBulletInfo
474 {
475 public:
476     const GraphicObject maBulletGraphicObject;
477     Point               maBulletPosition;
478     Size                maBulletSize;
479 
480     DrawBulletInfo(
481         const GraphicObject& rBulletGraphicObject,
482         const Point& rBulletPosition,
483         const Size& rBulletSize)
484     :   maBulletGraphicObject(rBulletGraphicObject),
485         maBulletPosition(rBulletPosition),
486         maBulletSize(rBulletSize)
487     {}
488 };
489 
490 struct EDITENG_DLLPUBLIC PaintFirstLineInfo
491 {
492 	sal_uInt16 mnPara;
493 	const Point& mrStartPos;
494 	long mnBaseLineY;
495 	const Point& mrOrigin;
496 	short mnOrientation;
497 	OutputDevice* mpOutDev;
498 
499 	PaintFirstLineInfo( sal_uInt16 nPara, const Point& rStartPos, long nBaseLineY, const Point& rOrigin, short nOrientation, OutputDevice* pOutDev )
500 		: mnPara( nPara ), mrStartPos( rStartPos ), mnBaseLineY( nBaseLineY ), mrOrigin( rOrigin ), mnOrientation( nOrientation ), mpOutDev( pOutDev )
501 	{}
502 };
503 
504 class SdrPage;
505 
506 class EditFieldInfo
507 {
508 private:
509 	Outliner*			pOutliner;
510 	const SvxFieldItem& rFldItem;
511 
512 	Color*              pTxtColor;
513 	Color*              pFldColor;
514 
515 	String              aRepresentation;
516 
517 	sal_uInt16              nPara;
518 	xub_StrLen			nPos;
519 	sal_Bool                bSimpleClick;
520 
521 						EditFieldInfo();
522 						EditFieldInfo( const EditFieldInfo& );
523 
524 	SdrPage*			mpSdrPage;
525 
526 public:
527 					EditFieldInfo( Outliner* pOutl, const SvxFieldItem& rFItem, sal_uInt16 nPa, xub_StrLen nPo )
528 						: rFldItem( rFItem )
529 					{
530 						pOutliner = pOutl;
531 						nPara = nPa; nPos = nPo;
532 						pTxtColor = 0; pFldColor = 0; bSimpleClick = sal_False;
533 						mpSdrPage = 0;
534 					}
535 					~EditFieldInfo()
536 					{
537 						delete pTxtColor;
538 						delete pFldColor;
539 					}
540 
541 	Outliner*		GetOutliner() const { return pOutliner; }
542 
543 	const SvxFieldItem& GetField() const { return rFldItem; }
544 
545 	Color*          GetTxtColor() const { return pTxtColor; }
546 	void            SetTxtColor( const Color& rColor )
547 						{ delete pTxtColor; pTxtColor = new Color( rColor ); }
548 
549 	Color*          GetFldColor() const { return pFldColor; }
550 	void            SetFldColor( const Color& rColor )
551 						{ delete pFldColor; pFldColor = new Color( rColor ); }
552 	void            ClearFldColor()
553 						{ delete pFldColor; pFldColor = 0; }
554 
555 	sal_uInt16          GetPara() const { return nPara; }
556 	xub_StrLen          GetPos() const { return nPos; }
557 
558 	sal_Bool            IsSimpleClick() const { return bSimpleClick; }
559 	void            SetSimpleClick( sal_Bool bSimple ) { bSimpleClick = bSimple; }
560 
561 	const String&       GetRepresentation() const                { return aRepresentation; }
562 	String&             GetRepresentation()                      { return aRepresentation; }
563 	void                SetRepresentation( const String& rStr )  { aRepresentation = rStr; }
564 
565 	void			SetSdrPage( SdrPage* pPage ) { mpSdrPage = pPage; }
566 	SdrPage*		GetSdrPage() const { return mpSdrPage; }
567 };
568 
569 struct EBulletInfo
570 {
571     sal_Bool        bVisible;
572     sal_uInt16      nType;          // see SvxNumberType
573     String      aText;
574     SvxFont		aFont;
575     Graphic     aGraphic;
576     sal_uInt16      nParagraph;
577     Rectangle   aBounds;
578 
579     EBulletInfo() : bVisible( sal_False ), nType( 0 ), nParagraph( EE_PARA_NOT_FOUND ) {}
580 };
581 
582 #define OUTLINERMODE_DONTKNOW		0x0000
583 #define OUTLINERMODE_TEXTOBJECT		0x0001
584 #define OUTLINERMODE_TITLEOBJECT	0x0002
585 #define OUTLINERMODE_OUTLINEOBJECT	0x0003
586 #define OUTLINERMODE_OUTLINEVIEW	0x0004
587 
588 #define OUTLINERMODE_USERMASK		0x00FF
589 
590 #define OUTLINERMODE_SUBTITLE		(0x0100|OUTLINERMODE_TEXTOBJECT)
591 #define OUTLINERMODE_NOTE			(0x0200|OUTLINERMODE_TEXTOBJECT)
592 
593 class EDITENG_DLLPUBLIC Outliner : public SfxBroadcaster
594 {
595 	friend class OutlinerView;
596 	friend class OutlinerEditEng;
597 	friend class OutlinerParaObject;
598 	friend class OLUndoExpand;
599 	friend class OutlinerUndoChangeDepth;
600 	friend class OutlinerUndoCheckPara;
601 	friend class OutlinerUndoChangeParaFlags;
602 
603 	OutlinerEditEng*    pEditEngine;
604 
605 	ParagraphList*      pParaList;
606 	ViewList            aViewList;
607 
608 	Paragraph*          pHdlParagraph;
609 	sal_uLong				mnFirstSelPage;
610 	Link                aDrawPortionHdl;
611 	Link                aDrawBulletHdl;
612 	Link                aExpandHdl;
613 	Link                aParaInsertedHdl;
614 	Link                aParaRemovingHdl;
615 	Link                aDepthChangedHdl;
616 	Link                aWidthArrReqHdl;
617 	Link                aBeginMovingHdl;
618 	Link                aEndMovingHdl;
619 	Link                aIndentingPagesHdl;
620 	Link                aRemovingPagesHdl;
621 	Link                aFieldClickedHdl;
622 	Link                aCalcFieldValueHdl;
623 	Link				maPaintFirstLineHdl;
624     Link                maBeginPasteOrDropHdl;
625     Link                maEndPasteOrDropHdl;
626 
627 	sal_Int16			nDepthChangedHdlPrevDepth;
628 	sal_uInt16				mnDepthChangeHdlPrevFlags;
629 	sal_Int16			nMaxDepth;
630 	const sal_Int16		nMinDepth;
631 	sal_uInt16				nFirstPage;
632 
633 	sal_uInt16				nOutlinerMode;
634 
635 	sal_Bool                bIsExpanding; // Nur in Expand/Collaps-Hdl gueltig, mal umstellen
636 	sal_Bool                bFirstParaIsEmpty;
637 	sal_Bool                bBlockInsCallback;
638 	sal_Bool                bStrippingPortions;
639 	sal_Bool 				bPasting;
640 
641     sal_uLong				nDummy;
642 
643 #ifdef _OUTLINER_CXX
644 
645 	DECL_LINK( 				ParaVisibleStateChangedHdl, Paragraph* );
646 	DECL_LINK( 				BeginMovingParagraphsHdl, MoveParagraphsInfo* );
647 	DECL_LINK( 				EndMovingParagraphsHdl, MoveParagraphsInfo* );
648 	DECL_LINK( 				BeginPasteOrDropHdl, PasteOrDropInfos* );
649 	DECL_LINK( 				EndPasteOrDropHdl, PasteOrDropInfos* );
650 	DECL_LINK( 				EditEngineNotifyHdl, EENotify* );
651 	void 					ImplCheckParagraphs( sal_uInt16 nStart, sal_uInt16 nEnd );
652 	sal_Bool					ImplHasBullet( sal_uInt16 nPara ) const;
653 	Size 					ImplGetBulletSize( sal_uInt16 nPara );
654     sal_uInt16              ImplGetNumbering( sal_uInt16 nPara, const SvxNumberFormat* pParaFmt );
655     void					ImplCalcBulletText( sal_uInt16 nPara, sal_Bool bRecalcLevel, sal_Bool bRecalcChilds );
656 	String					ImplGetBulletText( sal_uInt16 nPara );
657 	void 					ImplCheckNumBulletItem( sal_uInt16 nPara );
658 	void 					ImplInitDepth( sal_uInt16 nPara, sal_Int16 nDepth, sal_Bool bCreateUndo, sal_Bool bUndoAction = sal_False );
659 	void 					ImplSetLevelDependendStyleSheet( sal_uInt16 nPara, SfxStyleSheet* pLevelStyle = NULL );
660 
661     void                    ImplBlockInsertionCallbacks( sal_Bool b );
662 
663 	void 				ImplCheckStyleSheet( sal_uInt16 nPara, sal_Bool bReplaceExistingStyle );
664 	void                ImpRecalcBulletIndent( sal_uLong nPara );
665 
666 	const SvxBulletItem& ImpGetBullet( sal_uLong nPara, sal_uInt16& );
667 	void        ImpFilterIndents( sal_uLong nFirstPara, sal_uLong nLastPara );
668 	bool		ImpConvertEdtToOut( sal_uInt32 nPara, EditView* pView = 0 );
669 
670 	void        ImpTextPasted( sal_uLong nStartPara, sal_uInt16 nCount );
671 	long 		ImpCalcMaxBulletWidth( sal_uInt16 nPara, const SvxBulletItem& rBullet );
672 	Font        ImpCalcBulletFont( sal_uInt16 nPara ) const;
673 	Rectangle   ImpCalcBulletArea( sal_uInt16 nPara, sal_Bool bAdjust, sal_Bool bReturnPaperPos );
674 	long 		ImpGetTextIndent( sal_uLong nPara );
675 	sal_Bool        ImpCanIndentSelectedPages( OutlinerView* pCurView );
676 	sal_Bool        ImpCanDeleteSelectedPages( OutlinerView* pCurView );
677 	sal_Bool        ImpCanDeleteSelectedPages( OutlinerView* pCurView, sal_uInt16 nFirstPage, sal_uInt16 nPages );
678 
679 	sal_uInt16		ImplGetOutlinerMode() const { return nOutlinerMode & OUTLINERMODE_USERMASK; }
680     void        ImplCheckDepth( sal_Int16& rnDepth ) const;
681 #endif
682 
683 protected:
684 	void        	ParagraphInserted( sal_uInt16 nParagraph );
685 	void        	ParagraphDeleted( sal_uInt16 nParagraph );
686 	void			ParaAttribsChanged( sal_uInt16 nParagraph );
687 
688 	virtual void 	StyleSheetChanged( SfxStyleSheet* pStyle );
689 
690 	void        InvalidateBullet( Paragraph* pPara, sal_uLong nPara );
691 	void        PaintBullet( sal_uInt16 nPara, const Point& rStartPos,
692 					const Point& rOrigin, short nOrientation,
693 					OutputDevice* pOutDev );
694 
695     // used by OutlinerEditEng. Allows Outliner objects to provide
696     // bullet access to the EditEngine.
697     virtual const SvxNumberFormat*  GetNumberFormat( sal_uInt16 nPara ) const;
698 
699 public:
700 
701 					Outliner( SfxItemPool* pPool, sal_uInt16 nOutlinerMode );
702 	virtual         ~Outliner();
703 
704 	void            Init( sal_uInt16 nOutlinerMode );
705 	sal_uInt16			GetMode() const { return nOutlinerMode; }
706 
707 	void			SetVertical( sal_Bool bVertical );
708 	sal_Bool			IsVertical() const;
709 
710 	void			SetFixedCellHeight( sal_Bool bUseFixedCellHeight );
711 	sal_Bool			IsFixedCellHeight() const;
712 
713     void                        SetDefaultHorizontalTextDirection( EEHorizontalTextDirection eHTextDir );
714     EEHorizontalTextDirection   GetDefaultHorizontalTextDirection() const;
715 
716     sal_uInt16			GetScriptType( const ESelection& rSelection ) const;
717     LanguageType    GetLanguage( sal_uInt16 nPara, sal_uInt16 nPos ) const;
718 
719 	void            SetAsianCompressionMode( sal_uInt16 nCompressionMode );
720 	sal_uInt16          GetAsianCompressionMode() const;
721 
722     void            SetKernAsianPunctuation( sal_Bool bEnabled );
723     sal_Bool            IsKernAsianPunctuation() const;
724 
725     void            SetAddExtLeading( sal_Bool b );
726     sal_Bool            IsAddExtLeading() const;
727 
728 	sal_uLong           InsertView( OutlinerView* pView, sal_uLong nIndex=LIST_APPEND);
729 	OutlinerView*   RemoveView( OutlinerView* pView );
730 	OutlinerView*   RemoveView( sal_uLong nIndex );
731 	OutlinerView*   GetView( sal_uLong nIndex ) const;
732 	sal_uLong           GetViewCount() const;
733 
734 	Paragraph*      Insert( const String& rText, sal_uLong nAbsPos = LIST_APPEND, sal_Int16 nDepth = 0 );
735 	void            SetText( const OutlinerParaObject& );
736 	void            AddText( const OutlinerParaObject& );
737 	void            SetText( const String& rText, Paragraph* pParagraph );
738 	String          GetText( Paragraph* pPara, sal_uLong nParaCount=1 ) const;
739 
740 	OutlinerParaObject* CreateParaObject( sal_uInt16 nStartPara = 0, sal_uInt16 nParaCount = 0xFFFF ) const;
741 
742 	const SfxItemSet& GetEmptyItemSet() const;
743 
744 	void            SetRefMapMode( const MapMode& );
745 	MapMode         GetRefMapMode() const;
746 
747 	void			SetBackgroundColor( const Color& rColor );
748 	Color			GetBackgroundColor() const;
749 
750 	sal_Int16		GetMinDepth() const { return -1; }
751 
752 	void            SetMaxDepth( sal_Int16 nDepth, sal_Bool bCheckParas = sal_False );
753 	sal_Int16          GetMaxDepth() const { return nMaxDepth; }
754 
755 	void            SetUpdateMode( sal_Bool bUpdate );
756 	sal_Bool            GetUpdateMode() const;
757 
758 	void            Clear();
759 
760     void            RemoveAttribs( const ESelection& rSelection, sal_Bool bRemoveParaAttribs, sal_uInt16 nWhich );
761 
762 	sal_uLong           GetParagraphCount() const;
763 	Paragraph*      GetParagraph( sal_uLong nAbsPos ) const;
764 
765 	sal_Bool            HasParent( Paragraph* pParagraph ) const;
766 	sal_Bool            HasChilds( Paragraph* pParagraph ) const;
767 	sal_uLong           GetChildCount( Paragraph* pParent ) const;
768 	sal_Bool            IsExpanded( Paragraph* pPara ) const;
769 //	Paragraph*      GetParagraph( Paragraph* pParent, sal_uLong nRelPos ) const;
770 	Paragraph*      GetParent( Paragraph* pParagraph ) const;
771 //	sal_uLong           GetRelPos( Paragraph* pParent, Paragraph* pPara ) const;
772 	sal_uLong           GetAbsPos( Paragraph* pPara );
773 
774 	sal_Int16		GetDepth( sal_uLong nPara ) const;
775 	void			SetDepth( Paragraph* pParagraph, sal_Int16 nNewDepth );
776 
777 	void			SetVisible( Paragraph* pPara, sal_Bool bVisible );
778 	sal_Bool            IsVisible( Paragraph* pPara ) const { return pPara->IsVisible(); }
779 
780 	void            EnableUndo( sal_Bool bEnable );
781 	sal_Bool            IsUndoEnabled() const;
782 	void            UndoActionStart( sal_uInt16 nId );
783 	void            UndoActionEnd( sal_uInt16 nId );
784 	void            InsertUndo( EditUndo* pUndo );
785 	sal_Bool            IsInUndo();
786 
787 	void            ClearModifyFlag();
788 	sal_Bool            IsModified() const;
789 
790 	Paragraph*      GetHdlParagraph() const { return pHdlParagraph; }
791 	sal_Bool            IsExpanding() const { return bIsExpanding; }
792 
793 	virtual void    ExpandHdl();
794 	void            SetExpandHdl( const Link& rLink ) { aExpandHdl = rLink; }
795 	Link            GetExpandHdl() const { return aExpandHdl; }
796 
797 	virtual void    ParagraphInsertedHdl();
798 	void            SetParaInsertedHdl(const Link& rLink){aParaInsertedHdl=rLink;}
799 	Link            GetParaInsertedHdl() const { return aParaInsertedHdl; }
800 
801 	virtual void    ParagraphRemovingHdl();
802 	void            SetParaRemovingHdl(const Link& rLink){aParaRemovingHdl=rLink;}
803 	Link            GetParaRemovingHdl() const { return aParaRemovingHdl; }
804 
805 	virtual void    DepthChangedHdl();
806 	void            SetDepthChangedHdl(const Link& rLink){aDepthChangedHdl=rLink;}
807 	Link            GetDepthChangedHdl() const { return aDepthChangedHdl; }
808 	sal_Int16       GetPrevDepth() const { return nDepthChangedHdlPrevDepth; }
809 	sal_uInt16			GetPrevFlags() const { return mnDepthChangeHdlPrevFlags; }
810 
811 	virtual long    RemovingPagesHdl( OutlinerView* );
812 	void            SetRemovingPagesHdl(const Link& rLink){aRemovingPagesHdl=rLink;}
813 	Link            GetRemovingPagesHdl() const { return aRemovingPagesHdl; }
814 	virtual long    IndentingPagesHdl( OutlinerView* );
815 	void            SetIndentingPagesHdl(const Link& rLink){aIndentingPagesHdl=rLink;}
816 	Link            GetIndentingPagesHdl() const { return aIndentingPagesHdl; }
817 	// nur gueltig in den beiden oberen Handlern
818 	sal_uInt16          GetSelPageCount() const { return nDepthChangedHdlPrevDepth; }
819 	// nur gueltig in den beiden oberen Handlern
820 	sal_uLong           GetFirstSelPage() const { return mnFirstSelPage; }
821 
822 	void            SetCalcFieldValueHdl(const Link& rLink ) { aCalcFieldValueHdl= rLink; }
823 	Link            GetCalcFieldValueHdl() const { return aCalcFieldValueHdl; }
824 
825 	void            SetFieldClickedHdl(const Link& rLink ) { aFieldClickedHdl= rLink; }
826 	Link            GetFieldClickedHdl() const { return aFieldClickedHdl; }
827 
828 	void            SetDrawPortionHdl(const Link& rLink){aDrawPortionHdl=rLink;}
829 	Link            GetDrawPortionHdl() const { return aDrawPortionHdl; }
830 
831     void            SetDrawBulletHdl(const Link& rLink){aDrawBulletHdl=rLink;}
832 	Link            GetDrawBulletHdl() const { return aDrawBulletHdl; }
833 
834 	void			SetPaintFirstLineHdl(const Link& rLink) { maPaintFirstLineHdl = rLink; }
835 	Link			GetPaintFirstLineHdl() const { return maPaintFirstLineHdl; }
836 
837 	void			SetModifyHdl( const Link& rLink );
838 	Link			GetModifyHdl() const;
839 
840 	void            SetNotifyHdl( const Link& rLink );
841 	Link            GetNotifyHdl() const;
842 
843 	void            SetStatusEventHdl( const Link& rLink );
844 	Link            GetStatusEventHdl() const;
845 
846 	void            Draw( OutputDevice* pOutDev, const Rectangle& rOutRect );
847 	void            Draw( OutputDevice* pOutDev, const Rectangle& rOutRect, const Point& rStartDocPos );
848 	void            Draw( OutputDevice* pOutDev, const Point& rStartPos, short nOrientation = 0 );
849 
850 	const Size&     GetPaperSize() const;
851 	void            SetPaperSize( const Size& rSize );
852 
853 	void			SetFirstPageNumber( sal_uInt16 n ) 	{ nFirstPage = n; }
854 	sal_uInt16			GetFirstPageNumber() const 		{ return nFirstPage; }
855 
856 	void				SetPolygon( const basegfx::B2DPolyPolygon& rPolyPolygon );
857 	void				SetPolygon( const basegfx::B2DPolyPolygon& rPolyPolygon, const basegfx::B2DPolyPolygon* pLinePolyPolygon);
858 	void				ClearPolygon();
859 	const PolyPolygon*	GetPolygon();
860 
861 	const Size&     GetMinAutoPaperSize() const;
862 	void            SetMinAutoPaperSize( const Size& rSz );
863 
864 	const Size&     GetMaxAutoPaperSize() const;
865 	void            SetMaxAutoPaperSize( const Size& rSz );
866 
867 	void            SetDefTab( sal_uInt16 nTab );
868 	sal_uInt16          GetDefTab() const;
869 
870 	sal_Bool			IsFlatMode() const;
871 	void			SetFlatMode( sal_Bool bFlat );
872 
873     void            EnableAutoColor( sal_Bool b );
874     sal_Bool            IsAutoColorEnabled() const;
875 
876     void            ForceAutoColor( sal_Bool b );
877     sal_Bool            IsForceAutoColor() const;
878 
879     EBulletInfo     GetBulletInfo( sal_uInt16 nPara );
880 
881 	void        SetWordDelimiters( const String& rDelimiters );
882 	String      GetWordDelimiters() const;
883 	String      GetWord( sal_uInt16 nPara, xub_StrLen nIndex );
884 
885 	void            StripPortions();
886 
887 	// #101498#
888 	virtual void DrawingText(
889         const Point& rStartPos, const String& rText, sal_uInt16 nTextStart, sal_uInt16 nTextLen,
890 		const sal_Int32* pDXArray, const SvxFont& rFont, sal_uInt16 nPara, xub_StrLen nIndex, sal_uInt8 nRightToLeft,
891         const EEngineData::WrongSpellVector* pWrongSpellVector,
892         const SvxFieldData* pFieldData,
893         bool bEndOfLine,
894         bool bEndOfParagraph,
895         bool bEndOfBullet,
896         const ::com::sun::star::lang::Locale* pLocale,
897         const Color& rOverlineColor,
898         const Color& rTextLineColor);
899 
900 	Size            CalcTextSize();
901 
902 	Point           GetDocPos( Paragraph* pPara );
903 
904 	void            	SetStyleSheetPool( SfxStyleSheetPool* pSPool );
905 	SfxStyleSheetPool*	GetStyleSheetPool();
906 
907 	sal_Bool            IsInSelectionMode() const;
908 
909 	void            SetStyleSheet( sal_uLong nPara, SfxStyleSheet* pStyle );
910 	SfxStyleSheet*	GetStyleSheet( sal_uLong nPara );
911 
912 	void            SetParaAttribs( sal_uInt16 nPara, const SfxItemSet& );
913 	SfxItemSet      GetParaAttribs( sal_uInt16 nPara );
914 
915 	void            Remove( Paragraph* pPara, sal_uLong nParaCount );
916 	sal_Bool            Expand( Paragraph* );
917 	sal_Bool            Collapse( Paragraph* );
918 
919 	void			SetParaFlag( Paragraph* pPara,  sal_uInt16 nFlag );
920 	void			RemoveParaFlag( Paragraph* pPara, sal_uInt16 nFlag );
921 	bool			HasParaFlag( const Paragraph* pPara, sal_uInt16 nFlag ) const;
922 
923 	// gibt ein Array mit den Bulletbreiten der n Einrueckebenen
924 	// zurueck. Letzter Wert muss -1 sein. Wird vom Outliner geloescht.
925 	Link            GetWidthArrReqHdl() const{ return aWidthArrReqHdl; }
926 	void            SetWidthArrReqHdl(const Link& rLink){aWidthArrReqHdl=rLink; }
927 
928 	void            SetControlWord( sal_uLong nWord );
929 	sal_uLong           GetControlWord() const;
930 
931 	Link            GetBeginMovingHdl() const { return aBeginMovingHdl; }
932 	void            SetBeginMovingHdl(const Link& rLink) {aBeginMovingHdl=rLink;}
933 	Link            GetEndMovingHdl() const {return aEndMovingHdl;}
934 	void            SetEndMovingHdl( const Link& rLink){aEndMovingHdl=rLink;}
935 
936 	sal_uLong           GetLineCount( sal_uLong nParagraph ) const;
937 	sal_uInt16          GetLineLen( sal_uLong nParagraph, sal_uInt16 nLine ) const;
938 	sal_uLong           GetLineHeight( sal_uLong nParagraph, sal_uLong nLine = 0 );
939 
940 	// nFormat muss ein Wert aus dem enum EETextFormat sein (wg.CLOOKS)
941     sal_uLong           Read( SvStream& rInput, const String& rBaseURL, sal_uInt16, SvKeyValueIterator* pHTTPHeaderAttrs = NULL );
942 
943     ::svl::IUndoManager& GetUndoManager();
944     ::svl::IUndoManager* SetUndoManager(::svl::IUndoManager* pNew);
945 
946 	void            QuickSetAttribs( const SfxItemSet& rSet, const ESelection& rSel );
947 	void            QuickInsertField( const SvxFieldItem& rFld, const ESelection& rSel );
948 	void 			QuickInsertLineBreak( const ESelection& rSel );
949 
950 	// nur fuer EditEngine-Modus
951 	void            QuickInsertText( const String& rText, const ESelection& rSel );
952 	void            QuickDelete( const ESelection& rSel );
953 	void            QuickRemoveCharAttribs( sal_uInt16 nPara, sal_uInt16 nWhich = 0 );
954 	void            QuickFormatDoc( sal_Bool bFull = sal_False );
955 
956 	sal_Bool            UpdateFields();
957 	void 			RemoveFields( sal_Bool bKeepFieldText, TypeId aType = NULL );
958 
959 	virtual void    FieldClicked( const SvxFieldItem& rField, sal_uInt16 nPara, xub_StrLen nPos );
960 	virtual void    FieldSelected( const SvxFieldItem& rField, sal_uInt16 nPara, xub_StrLen nPos );
961 	virtual String  CalcFieldValue( const SvxFieldItem& rField, sal_uInt16 nPara, xub_StrLen nPos, Color*& rTxtColor, Color*& rFldColor );
962 
963 	void			SetSpeller( ::com::sun::star::uno::Reference<
964 							::com::sun::star::linguistic2::XSpellChecker1 > &xSpeller );
965 	::com::sun::star::uno::Reference<
966 		::com::sun::star::linguistic2::XSpellChecker1 >
967 					GetSpeller();
968 	::com::sun::star::uno::Reference<
969 		::com::sun::star::linguistic2::XHyphenator >
970 					GetHyphenator() const;
971 	void			SetHyphenator( ::com::sun::star::uno::Reference<
972 						::com::sun::star::linguistic2::XHyphenator >& xHyph );
973 
974 	void			SetForbiddenCharsTable( vos::ORef<SvxForbiddenCharactersTable> xForbiddenChars );
975 	vos::ORef<SvxForbiddenCharactersTable>	GetForbiddenCharsTable() const;
976 
977 	// Depricated
978 	void 			SetDefaultLanguage( LanguageType eLang );
979 	LanguageType	GetDefaultLanguage() const;
980 
981 	sal_Bool			HasOnlineSpellErrors() const;
982 	void			CompleteOnlineSpelling();
983 
984 	EESpellState    HasSpellErrors();
985 	sal_Bool            HasText( const SvxSearchItem& rSearchItem );
986 	virtual sal_Bool    SpellNextDocument();
987 
988     // for text conversion
989     sal_Bool        HasConvertibleTextPortion( LanguageType nLang );
990     virtual sal_Bool    ConvertNextDocument();
991 
992 	void            SetEditTextObjectPool( SfxItemPool* pPool );
993 	SfxItemPool*    GetEditTextObjectPool() const;
994 
995 	void            SetRefDevice( OutputDevice* pRefDev );
996 	OutputDevice*   GetRefDevice() const;
997 
998 	sal_uInt16          GetFirstLineOffset( sal_uLong nParagraph );
999 
1000 	sal_uLong           GetTextHeight() const;
1001 	sal_uLong           GetTextHeight( sal_uLong nParagraph ) const;
1002 	Point           GetDocPosTopLeft( sal_uLong nParagraph );
1003 	Point			GetDocPos( const Point& rPaperPos ) const;
1004 	sal_Bool			IsTextPos( const Point& rPaperPos, sal_uInt16 nBorder = 0 );
1005 	sal_Bool			IsTextPos( const Point& rPaperPos, sal_uInt16 nBorder, sal_Bool* pbBuuletPos );
1006 
1007 	void            SetGlobalCharStretching( sal_uInt16 nX = 100, sal_uInt16 nY = 100 );
1008 	void            GetGlobalCharStretching( sal_uInt16& rX, sal_uInt16& rY );
1009 	void            DoStretchChars( sal_uInt16 nX, sal_uInt16 nY );
1010 	void            EraseVirtualDevice();
1011 
1012 	void            SetBigTextObjectStart( sal_uInt16 nStartAtPortionCount );
1013 	sal_uInt16          GetBigTextObjectStart() const;
1014 	sal_Bool            ShouldCreateBigTextObject() const;
1015 
1016 	const EditEngine& GetEditEngine() const { return *((EditEngine*)pEditEngine); }
1017 
1018 	// this is needed for StarOffice Api
1019 	void SetLevelDependendStyleSheet( sal_uInt16 nPara );
1020 
1021 	sal_uInt16	GetOutlinerMode() const { return nOutlinerMode & OUTLINERMODE_USERMASK; }
1022 
1023     void            StartSpelling(EditView& rEditView, sal_Bool bMultipleDoc);
1024     //spell and return a sentence
1025     bool            SpellSentence(EditView& rEditView, ::svx::SpellPortions& rToFill, bool bIsGrammarChecking );
1026     // put spell position to start of current sentence
1027     void            PutSpellingToSentenceStart( EditView& rEditView );
1028     //applies a changed sentence
1029     void            ApplyChangedSentence(EditView& rEditView, const ::svx::SpellPortions& rNewPortions, bool bRecheck );
1030     void            EndSpelling();
1031 
1032 	/** sets a link that is called at the beginning of a drag operation at an edit view */
1033 	void			SetBeginDropHdl( const Link& rLink );
1034 	Link			GetBeginDropHdl() const;
1035 
1036 	/** sets a link that is called at the end of a drag operation at an edit view */
1037 	void			SetEndDropHdl( const Link& rLink );
1038 	Link			GetEndDropHdl() const;
1039 
1040     /** sets a link that is called before a drop or paste operation. */
1041     void            SetBeginPasteOrDropHdl( const Link& rLink );
1042     Link            GetBeginPasteOrDropHdl() const { return maBeginPasteOrDropHdl; }
1043 
1044     /** sets a link that is called after a drop or paste operation. */
1045     void            SetEndPasteOrDropHdl( const Link& rLink );
1046     Link            GetEndPasteOrDropHdl() const { return maEndPasteOrDropHdl; }
1047 
1048     virtual sal_Int16 GetNumberingStartValue( sal_uInt16 nPara );
1049     virtual void SetNumberingStartValue( sal_uInt16 nPara, sal_Int16 nNumberingStartValue );
1050 
1051     virtual sal_Bool IsParaIsNumberingRestart( sal_uInt16 nPara );
1052     virtual void SetParaIsNumberingRestart( sal_uInt16 nPara, sal_Bool bParaIsNumberingRestart );
1053 
1054     sal_Int16 GetBulletsNumberingStatus();
1055 };
1056 
1057 #endif
1058 
1059