1*95c02664SSteve Yin /**************************************************************
2*95c02664SSteve Yin *
3*95c02664SSteve Yin * Licensed to the Apache Software Foundation (ASF) under one
4*95c02664SSteve Yin * or more contributor license agreements. See the NOTICE file
5*95c02664SSteve Yin * distributed with this work for additional information
6*95c02664SSteve Yin * regarding copyright ownership. The ASF licenses this file
7*95c02664SSteve Yin * to you under the Apache License, Version 2.0 (the
8*95c02664SSteve Yin * "License"); you may not use this file except in compliance
9*95c02664SSteve Yin * with the License. You may obtain a copy of the License at
10*95c02664SSteve Yin *
11*95c02664SSteve Yin * http://www.apache.org/licenses/LICENSE-2.0
12*95c02664SSteve Yin *
13*95c02664SSteve Yin * Unless required by applicable law or agreed to in writing,
14*95c02664SSteve Yin * software distributed under the License is distributed on an
15*95c02664SSteve Yin * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*95c02664SSteve Yin * KIND, either express or implied. See the License for the
17*95c02664SSteve Yin * specific language governing permissions and limitations
18*95c02664SSteve Yin * under the License.
19*95c02664SSteve Yin *
20*95c02664SSteve Yin *************************************************************/
21*95c02664SSteve Yin
22*95c02664SSteve Yin
23*95c02664SSteve Yin
24*95c02664SSteve Yin #ifndef _EDITDOC_HXX
25*95c02664SSteve Yin #define _EDITDOC_HXX
26*95c02664SSteve Yin
27*95c02664SSteve Yin #ifndef _COM_SUN_STAR_I18N_XEXTENDEDINPUTSEQUENCECHECKER_HDL_
28*95c02664SSteve Yin #include <com/sun/star/i18n/XExtendedInputSequenceChecker.hpp>
29*95c02664SSteve Yin #endif
30*95c02664SSteve Yin
31*95c02664SSteve Yin #include <editattr.hxx>
32*95c02664SSteve Yin #include <edtspell.hxx>
33*95c02664SSteve Yin #include <editeng/svxfont.hxx>
34*95c02664SSteve Yin #include <svl/itemset.hxx>
35*95c02664SSteve Yin #include <svl/style.hxx>
36*95c02664SSteve Yin #include <svl/itempool.hxx>
37*95c02664SSteve Yin #include <tools/table.hxx>
38*95c02664SSteve Yin
39*95c02664SSteve Yin #include <deque>
40*95c02664SSteve Yin
41*95c02664SSteve Yin class ImpEditEngine;
42*95c02664SSteve Yin class SvxTabStop;
43*95c02664SSteve Yin class SvtCTLOptions;
44*95c02664SSteve Yin
45*95c02664SSteve Yin DBG_NAMEEX( EE_TextPortion )
46*95c02664SSteve Yin
47*95c02664SSteve Yin #define CHARPOSGROW 16
48*95c02664SSteve Yin #define DEFTAB 720
49*95c02664SSteve Yin
50*95c02664SSteve Yin void CreateFont( SvxFont& rFont, const SfxItemSet& rSet, bool bSearchInParent = true, short nScriptType = 0 );
51*95c02664SSteve Yin sal_uInt16 GetScriptItemId( sal_uInt16 nItemId, short nScriptType );
52*95c02664SSteve Yin sal_Bool IsScriptItemValid( sal_uInt16 nItemId, short nScriptType );
53*95c02664SSteve Yin
54*95c02664SSteve Yin EditCharAttrib* MakeCharAttrib( SfxItemPool& rPool, const SfxPoolItem& rAttr, sal_uInt16 nS, sal_uInt16 nE );
55*95c02664SSteve Yin
56*95c02664SSteve Yin class ContentNode;
57*95c02664SSteve Yin class EditDoc;
58*95c02664SSteve Yin
59*95c02664SSteve Yin struct EPaM
60*95c02664SSteve Yin {
61*95c02664SSteve Yin sal_uInt16 nPara;
62*95c02664SSteve Yin sal_uInt16 nIndex;
63*95c02664SSteve Yin
EPaMEPaM64*95c02664SSteve Yin EPaM() { nPara = 0; nIndex = 0; }
EPaMEPaM65*95c02664SSteve Yin EPaM( sal_uInt16 nP, sal_uInt16 nI ) { nPara = nP; nIndex = nI; }
EPaMEPaM66*95c02664SSteve Yin EPaM( const EPaM& r) { nPara = r.nPara; nIndex = r.nIndex; }
operator =EPaM67*95c02664SSteve Yin EPaM& operator = ( const EPaM& r ) { nPara = r.nPara; nIndex = r.nIndex; return *this; }
68*95c02664SSteve Yin inline sal_Bool operator == ( const EPaM& r ) const;
69*95c02664SSteve Yin inline sal_Bool operator < ( const EPaM& r ) const;
70*95c02664SSteve Yin };
71*95c02664SSteve Yin
operator <(const EPaM & r) const72*95c02664SSteve Yin inline sal_Bool EPaM::operator < ( const EPaM& r ) const
73*95c02664SSteve Yin {
74*95c02664SSteve Yin return ( ( nPara < r.nPara ) ||
75*95c02664SSteve Yin ( ( nPara == r.nPara ) && nIndex < r.nIndex ) ) ? sal_True : sal_False;
76*95c02664SSteve Yin }
77*95c02664SSteve Yin
operator ==(const EPaM & r) const78*95c02664SSteve Yin inline sal_Bool EPaM::operator == ( const EPaM& r ) const
79*95c02664SSteve Yin {
80*95c02664SSteve Yin return ( ( nPara == r.nPara ) && ( nIndex == r.nIndex ) ) ? sal_True : sal_False;
81*95c02664SSteve Yin }
82*95c02664SSteve Yin
83*95c02664SSteve Yin struct ScriptTypePosInfo
84*95c02664SSteve Yin {
85*95c02664SSteve Yin short nScriptType;
86*95c02664SSteve Yin sal_uInt16 nStartPos;
87*95c02664SSteve Yin sal_uInt16 nEndPos;
88*95c02664SSteve Yin
ScriptTypePosInfoScriptTypePosInfo89*95c02664SSteve Yin ScriptTypePosInfo( short _Type, sal_uInt16 _Start, sal_uInt16 _End )
90*95c02664SSteve Yin {
91*95c02664SSteve Yin nScriptType = _Type;
92*95c02664SSteve Yin nStartPos = _Start;
93*95c02664SSteve Yin nEndPos = _End;
94*95c02664SSteve Yin }
95*95c02664SSteve Yin };
96*95c02664SSteve Yin
97*95c02664SSteve Yin typedef std::deque< ScriptTypePosInfo > ScriptTypePosInfos;
98*95c02664SSteve Yin
99*95c02664SSteve Yin struct WritingDirectionInfo
100*95c02664SSteve Yin {
101*95c02664SSteve Yin sal_uInt8 nType;
102*95c02664SSteve Yin sal_uInt16 nStartPos;
103*95c02664SSteve Yin sal_uInt16 nEndPos;
104*95c02664SSteve Yin
WritingDirectionInfoWritingDirectionInfo105*95c02664SSteve Yin WritingDirectionInfo( sal_uInt8 _Type, sal_uInt16 _Start, sal_uInt16 _End )
106*95c02664SSteve Yin {
107*95c02664SSteve Yin nType = _Type;
108*95c02664SSteve Yin nStartPos = _Start;
109*95c02664SSteve Yin nEndPos = _End;
110*95c02664SSteve Yin }
111*95c02664SSteve Yin };
112*95c02664SSteve Yin
113*95c02664SSteve Yin
114*95c02664SSteve Yin typedef std::deque< WritingDirectionInfo > WritingDirectionInfos;
115*95c02664SSteve Yin
116*95c02664SSteve Yin typedef EditCharAttrib* EditCharAttribPtr;
117*95c02664SSteve Yin SV_DECL_PTRARR( CharAttribArray, EditCharAttribPtr, 0, 4 )
118*95c02664SSteve Yin
119*95c02664SSteve Yin class ContentAttribsInfo
120*95c02664SSteve Yin {
121*95c02664SSteve Yin private:
122*95c02664SSteve Yin SfxItemSet aPrevParaAttribs;
123*95c02664SSteve Yin CharAttribArray aPrevCharAttribs;
124*95c02664SSteve Yin
125*95c02664SSteve Yin public:
126*95c02664SSteve Yin ContentAttribsInfo( const SfxItemSet& rParaAttribs );
127*95c02664SSteve Yin
GetPrevParaAttribs() const128*95c02664SSteve Yin const SfxItemSet& GetPrevParaAttribs() const { return aPrevParaAttribs; }
GetPrevCharAttribs() const129*95c02664SSteve Yin const CharAttribArray& GetPrevCharAttribs() const { return aPrevCharAttribs; }
130*95c02664SSteve Yin
GetPrevCharAttribs()131*95c02664SSteve Yin CharAttribArray& GetPrevCharAttribs() { return aPrevCharAttribs; }
132*95c02664SSteve Yin };
133*95c02664SSteve Yin
134*95c02664SSteve Yin typedef ContentAttribsInfo* ContentAttribsInfoPtr;
135*95c02664SSteve Yin SV_DECL_PTRARR( ContentInfoArray, ContentAttribsInfoPtr, 1, 1 )
136*95c02664SSteve Yin
137*95c02664SSteve Yin // ----------------------------------------------------------------------
138*95c02664SSteve Yin // class SvxFontTable
139*95c02664SSteve Yin // ----------------------------------------------------------------------
140*95c02664SSteve Yin DECLARE_TABLE( DummyFontTable, SvxFontItem* )
141*95c02664SSteve Yin class SvxFontTable : public DummyFontTable
142*95c02664SSteve Yin {
143*95c02664SSteve Yin public:
144*95c02664SSteve Yin SvxFontTable();
145*95c02664SSteve Yin ~SvxFontTable();
146*95c02664SSteve Yin
147*95c02664SSteve Yin sal_uLong GetId( const SvxFontItem& rFont );
148*95c02664SSteve Yin };
149*95c02664SSteve Yin
150*95c02664SSteve Yin // ----------------------------------------------------------------------
151*95c02664SSteve Yin // class SvxColorList
152*95c02664SSteve Yin // ----------------------------------------------------------------------
153*95c02664SSteve Yin typedef ContentNode* ContentNodePtr;
154*95c02664SSteve Yin DECLARE_LIST( DummyColorList, SvxColorItem* )
155*95c02664SSteve Yin class SvxColorList : public DummyColorList
156*95c02664SSteve Yin {
157*95c02664SSteve Yin public:
158*95c02664SSteve Yin SvxColorList();
159*95c02664SSteve Yin ~SvxColorList();
160*95c02664SSteve Yin
161*95c02664SSteve Yin sal_uLong GetId( const SvxColorItem& rColor );
162*95c02664SSteve Yin };
163*95c02664SSteve Yin
164*95c02664SSteve Yin // ----------------------------------------------------------------------
165*95c02664SSteve Yin // class ItemList
166*95c02664SSteve Yin // ----------------------------------------------------------------------
167*95c02664SSteve Yin typedef const SfxPoolItem* ConstPoolItemPtr;
168*95c02664SSteve Yin DECLARE_LIST( DummyItemList, ConstPoolItemPtr )
169*95c02664SSteve Yin class ItemList : public DummyItemList
170*95c02664SSteve Yin {
171*95c02664SSteve Yin public:
172*95c02664SSteve Yin const SfxPoolItem* FindAttrib( sal_uInt16 nWhich );
173*95c02664SSteve Yin };
174*95c02664SSteve Yin
175*95c02664SSteve Yin // -------------------------------------------------------------------------
176*95c02664SSteve Yin // class ContentAttribs
177*95c02664SSteve Yin // -------------------------------------------------------------------------
178*95c02664SSteve Yin class ContentAttribs
179*95c02664SSteve Yin {
180*95c02664SSteve Yin private:
181*95c02664SSteve Yin SfxStyleSheet* pStyle;
182*95c02664SSteve Yin SfxItemSet aAttribSet;
183*95c02664SSteve Yin
184*95c02664SSteve Yin public:
185*95c02664SSteve Yin ContentAttribs( SfxItemPool& rItemPool );
186*95c02664SSteve Yin ContentAttribs( const ContentAttribs& );
187*95c02664SSteve Yin ~ContentAttribs(); // erst bei umfangreicheren Tabs
188*95c02664SSteve Yin
189*95c02664SSteve Yin SvxTabStop FindTabStop( long nCurPos, sal_uInt16 nDefTab );
GetItems()190*95c02664SSteve Yin SfxItemSet& GetItems() { return aAttribSet; }
GetStyleSheet() const191*95c02664SSteve Yin SfxStyleSheet* GetStyleSheet() const { return pStyle; }
192*95c02664SSteve Yin void SetStyleSheet( SfxStyleSheet* pS );
193*95c02664SSteve Yin
194*95c02664SSteve Yin const SfxPoolItem& GetItem( sal_uInt16 nWhich );
195*95c02664SSteve Yin sal_Bool HasItem( sal_uInt16 nWhich );
196*95c02664SSteve Yin };
197*95c02664SSteve Yin
198*95c02664SSteve Yin // -------------------------------------------------------------------------
199*95c02664SSteve Yin // class CharAttribList
200*95c02664SSteve Yin // -------------------------------------------------------------------------
201*95c02664SSteve Yin class CharAttribList
202*95c02664SSteve Yin {
203*95c02664SSteve Yin private:
204*95c02664SSteve Yin CharAttribArray aAttribs;
205*95c02664SSteve Yin SvxFont aDefFont; // schneller, als jedesmal vom Pool!
206*95c02664SSteve Yin sal_Bool bHasEmptyAttribs;
207*95c02664SSteve Yin
CharAttribList(const CharAttribList &)208*95c02664SSteve Yin CharAttribList( const CharAttribList& ) {;}
209*95c02664SSteve Yin
210*95c02664SSteve Yin public:
211*95c02664SSteve Yin CharAttribList();
212*95c02664SSteve Yin ~CharAttribList();
213*95c02664SSteve Yin
214*95c02664SSteve Yin void DeleteEmptyAttribs( SfxItemPool& rItemPool );
215*95c02664SSteve Yin void RemoveItemsFromPool( SfxItemPool* pItemPool );
216*95c02664SSteve Yin
217*95c02664SSteve Yin EditCharAttrib* FindAttrib( sal_uInt16 nWhich, sal_uInt16 nPos );
218*95c02664SSteve Yin EditCharAttrib* FindNextAttrib( sal_uInt16 nWhich, sal_uInt16 nFromPos ) const;
219*95c02664SSteve Yin EditCharAttrib* FindEmptyAttrib( sal_uInt16 nWhich, sal_uInt16 nPos );
220*95c02664SSteve Yin EditCharAttrib* FindFeature( sal_uInt16 nPos ) const;
221*95c02664SSteve Yin
222*95c02664SSteve Yin
223*95c02664SSteve Yin void ResortAttribs();
224*95c02664SSteve Yin void OptimizeRanges( SfxItemPool& rItemPool );
225*95c02664SSteve Yin
Count()226*95c02664SSteve Yin sal_uInt16 Count() { return aAttribs.Count(); }
Clear()227*95c02664SSteve Yin void Clear() { aAttribs.Remove( 0, aAttribs.Count()); }
228*95c02664SSteve Yin void InsertAttrib( EditCharAttrib* pAttrib );
229*95c02664SSteve Yin
GetDefFont()230*95c02664SSteve Yin SvxFont& GetDefFont() { return aDefFont; }
231*95c02664SSteve Yin
HasEmptyAttribs() const232*95c02664SSteve Yin sal_Bool HasEmptyAttribs() const { return bHasEmptyAttribs; }
HasEmptyAttribs()233*95c02664SSteve Yin sal_Bool& HasEmptyAttribs() { return bHasEmptyAttribs; }
234*95c02664SSteve Yin sal_Bool HasBoundingAttrib( sal_uInt16 nBound );
235*95c02664SSteve Yin sal_Bool HasAttrib( sal_uInt16 nWhich ) const;
236*95c02664SSteve Yin sal_Bool HasAttrib( sal_uInt16 nStartPos, sal_uInt16 nEndPos ) const;
237*95c02664SSteve Yin
GetAttribs()238*95c02664SSteve Yin CharAttribArray& GetAttribs() { return aAttribs; }
GetAttribs() const239*95c02664SSteve Yin const CharAttribArray& GetAttribs() const { return aAttribs; }
240*95c02664SSteve Yin
241*95c02664SSteve Yin // Debug:
242*95c02664SSteve Yin sal_Bool DbgCheckAttribs();
243*95c02664SSteve Yin };
244*95c02664SSteve Yin
245*95c02664SSteve Yin // -------------------------------------------------------------------------
246*95c02664SSteve Yin // class ContentNode
247*95c02664SSteve Yin // -------------------------------------------------------------------------
248*95c02664SSteve Yin class ContentNode : public XubString
249*95c02664SSteve Yin {
250*95c02664SSteve Yin private:
251*95c02664SSteve Yin ContentAttribs aContentAttribs;
252*95c02664SSteve Yin CharAttribList aCharAttribList;
253*95c02664SSteve Yin WrongList* pWrongList;
254*95c02664SSteve Yin
255*95c02664SSteve Yin public:
256*95c02664SSteve Yin ContentNode( SfxItemPool& rItemPool );
257*95c02664SSteve Yin ContentNode( const XubString& rStr, const ContentAttribs& rContentAttribs );
258*95c02664SSteve Yin ~ContentNode();
259*95c02664SSteve Yin
GetContentAttribs()260*95c02664SSteve Yin ContentAttribs& GetContentAttribs() { return aContentAttribs; }
GetCharAttribs()261*95c02664SSteve Yin CharAttribList& GetCharAttribs() { return aCharAttribList; }
262*95c02664SSteve Yin
263*95c02664SSteve Yin void ExpandAttribs( sal_uInt16 nIndex, sal_uInt16 nNewChars, SfxItemPool& rItemPool );
264*95c02664SSteve Yin void CollapsAttribs( sal_uInt16 nIndex, sal_uInt16 nDelChars, SfxItemPool& rItemPool );
265*95c02664SSteve Yin void AppendAttribs( ContentNode* pNextNode );
266*95c02664SSteve Yin void CopyAndCutAttribs( ContentNode* pPrevNode, SfxItemPool& rPool, sal_Bool bKeepEndingAttribs );
267*95c02664SSteve Yin
268*95c02664SSteve Yin void SetStyleSheet( SfxStyleSheet* pS, sal_Bool bRecalcFont = sal_True );
269*95c02664SSteve Yin void SetStyleSheet( SfxStyleSheet* pS, const SvxFont& rFontFromStyle );
GetStyleSheet()270*95c02664SSteve Yin SfxStyleSheet* GetStyleSheet() { return aContentAttribs.GetStyleSheet(); }
271*95c02664SSteve Yin
272*95c02664SSteve Yin void CreateDefFont();
273*95c02664SSteve Yin
GetWrongList()274*95c02664SSteve Yin WrongList* GetWrongList() { return pWrongList; }
275*95c02664SSteve Yin void SetWrongList( WrongList* p );
276*95c02664SSteve Yin
277*95c02664SSteve Yin void CreateWrongList();
278*95c02664SSteve Yin void DestroyWrongList();
279*95c02664SSteve Yin
IsFeature(sal_uInt16 nPos) const280*95c02664SSteve Yin sal_Bool IsFeature( sal_uInt16 nPos ) const { return ( GetChar( nPos ) == CH_FEATURE ); }
281*95c02664SSteve Yin };
282*95c02664SSteve Yin
283*95c02664SSteve Yin typedef ContentNode* ContentNodePtr;
284*95c02664SSteve Yin SV_DECL_PTRARR( DummyContentList, ContentNodePtr, 0, 4 )
285*95c02664SSteve Yin
286*95c02664SSteve Yin class ContentList : public DummyContentList
287*95c02664SSteve Yin {
288*95c02664SSteve Yin sal_uInt16 nLastCache;
289*95c02664SSteve Yin public:
ContentList()290*95c02664SSteve Yin ContentList() : DummyContentList( 0, 4 ), nLastCache(0) {}
291*95c02664SSteve Yin sal_uInt16 GetPos( const ContentNodePtr &rPtr ) const;
292*95c02664SSteve Yin };
293*95c02664SSteve Yin
294*95c02664SSteve Yin // -------------------------------------------------------------------------
295*95c02664SSteve Yin // class EditPaM
296*95c02664SSteve Yin // -------------------------------------------------------------------------
297*95c02664SSteve Yin class EditPaM
298*95c02664SSteve Yin {
299*95c02664SSteve Yin private:
300*95c02664SSteve Yin ContentNode* pNode;
301*95c02664SSteve Yin sal_uInt16 nIndex;
302*95c02664SSteve Yin
303*95c02664SSteve Yin public:
EditPaM()304*95c02664SSteve Yin EditPaM() { pNode = NULL; nIndex = 0; }
EditPaM(ContentNode * p,sal_uInt16 n)305*95c02664SSteve Yin EditPaM( ContentNode* p, sal_uInt16 n ) { pNode = p; nIndex = n; }
306*95c02664SSteve Yin
GetNode() const307*95c02664SSteve Yin ContentNode* GetNode() const { return pNode; }
SetNode(ContentNode * p)308*95c02664SSteve Yin void SetNode( ContentNode* p) { pNode = p; }
309*95c02664SSteve Yin
GetIndex() const310*95c02664SSteve Yin sal_uInt16 GetIndex() const { return nIndex; }
GetIndex()311*95c02664SSteve Yin sal_uInt16& GetIndex() { return nIndex; }
SetIndex(sal_uInt16 n)312*95c02664SSteve Yin void SetIndex( sal_uInt16 n ) { nIndex = n; }
313*95c02664SSteve Yin
IsParaStart() const314*95c02664SSteve Yin sal_Bool IsParaStart() const { return nIndex == 0; }
IsParaEnd() const315*95c02664SSteve Yin sal_Bool IsParaEnd() const { return nIndex == pNode->Len(); }
316*95c02664SSteve Yin
317*95c02664SSteve Yin sal_Bool DbgIsBuggy( EditDoc& rDoc );
318*95c02664SSteve Yin
319*95c02664SSteve Yin EditPaM& operator = ( const EditPaM& rPaM );
320*95c02664SSteve Yin friend sal_Bool operator == ( const EditPaM& r1, const EditPaM& r2 );
321*95c02664SSteve Yin friend sal_Bool operator != ( const EditPaM& r1, const EditPaM& r2 );
322*95c02664SSteve Yin };
323*95c02664SSteve Yin
324*95c02664SSteve Yin #define PORTIONKIND_TEXT 0
325*95c02664SSteve Yin #define PORTIONKIND_TAB 1
326*95c02664SSteve Yin #define PORTIONKIND_LINEBREAK 2
327*95c02664SSteve Yin #define PORTIONKIND_FIELD 3
328*95c02664SSteve Yin #define PORTIONKIND_HYPHENATOR 4
329*95c02664SSteve Yin // #define PORTIONKIND_EXTRASPACE 5
330*95c02664SSteve Yin
331*95c02664SSteve Yin #define DELMODE_SIMPLE 0
332*95c02664SSteve Yin #define DELMODE_RESTOFWORD 1
333*95c02664SSteve Yin #define DELMODE_RESTOFCONTENT 2
334*95c02664SSteve Yin
335*95c02664SSteve Yin #define CHAR_NORMAL 0x00
336*95c02664SSteve Yin #define CHAR_KANA 0x01
337*95c02664SSteve Yin #define CHAR_PUNCTUATIONLEFT 0x02
338*95c02664SSteve Yin #define CHAR_PUNCTUATIONRIGHT 0x04
339*95c02664SSteve Yin
340*95c02664SSteve Yin // -------------------------------------------------------------------------
341*95c02664SSteve Yin // struct ExtraPortionInfos
342*95c02664SSteve Yin // -------------------------------------------------------------------------
343*95c02664SSteve Yin struct ExtraPortionInfo
344*95c02664SSteve Yin {
345*95c02664SSteve Yin long nOrgWidth;
346*95c02664SSteve Yin long nWidthFullCompression;
347*95c02664SSteve Yin
348*95c02664SSteve Yin long nPortionOffsetX;
349*95c02664SSteve Yin
350*95c02664SSteve Yin sal_uInt16 nMaxCompression100thPercent;
351*95c02664SSteve Yin
352*95c02664SSteve Yin sal_uInt8 nAsianCompressionTypes;
353*95c02664SSteve Yin sal_Bool bFirstCharIsRightPunktuation;
354*95c02664SSteve Yin sal_Bool bCompressed;
355*95c02664SSteve Yin
356*95c02664SSteve Yin sal_Int32* pOrgDXArray;
357*95c02664SSteve Yin
358*95c02664SSteve Yin
359*95c02664SSteve Yin ExtraPortionInfo();
360*95c02664SSteve Yin ~ExtraPortionInfo();
361*95c02664SSteve Yin
362*95c02664SSteve Yin void SaveOrgDXArray( const sal_Int32* pDXArray, sal_uInt16 nLen );
363*95c02664SSteve Yin void DestroyOrgDXArray();
364*95c02664SSteve Yin };
365*95c02664SSteve Yin
366*95c02664SSteve Yin
367*95c02664SSteve Yin // -------------------------------------------------------------------------
368*95c02664SSteve Yin // class TextPortion
369*95c02664SSteve Yin // -------------------------------------------------------------------------
370*95c02664SSteve Yin class TextPortion
371*95c02664SSteve Yin {
372*95c02664SSteve Yin private:
373*95c02664SSteve Yin ExtraPortionInfo* pExtraInfos;
374*95c02664SSteve Yin sal_uInt16 nLen;
375*95c02664SSteve Yin Size aOutSz;
376*95c02664SSteve Yin sal_uInt8 nKind;
377*95c02664SSteve Yin sal_uInt8 nRightToLeft;
378*95c02664SSteve Yin sal_Unicode nExtraValue;
379*95c02664SSteve Yin
380*95c02664SSteve Yin
TextPortion()381*95c02664SSteve Yin TextPortion() { DBG_CTOR( EE_TextPortion, 0 );
382*95c02664SSteve Yin pExtraInfos = NULL; nLen = 0; nKind = PORTIONKIND_TEXT; nExtraValue = 0; nRightToLeft = sal_False;}
383*95c02664SSteve Yin
384*95c02664SSteve Yin public:
TextPortion(sal_uInt16 nL)385*95c02664SSteve Yin TextPortion( sal_uInt16 nL ) : aOutSz( -1, -1 )
386*95c02664SSteve Yin { DBG_CTOR( EE_TextPortion, 0 );
387*95c02664SSteve Yin pExtraInfos = NULL; nLen = nL; nKind = PORTIONKIND_TEXT; nExtraValue = 0; nRightToLeft = sal_False;}
TextPortion(const TextPortion & r)388*95c02664SSteve Yin TextPortion( const TextPortion& r ) : aOutSz( r.aOutSz )
389*95c02664SSteve Yin { DBG_CTOR( EE_TextPortion, 0 );
390*95c02664SSteve Yin pExtraInfos = NULL; nLen = r.nLen; nKind = r.nKind; nExtraValue = r.nExtraValue; nRightToLeft = r.nRightToLeft; }
391*95c02664SSteve Yin
~TextPortion()392*95c02664SSteve Yin ~TextPortion() { DBG_DTOR( EE_TextPortion, 0 ); delete pExtraInfos; }
393*95c02664SSteve Yin
GetLen() const394*95c02664SSteve Yin sal_uInt16 GetLen() const { return nLen; }
GetLen()395*95c02664SSteve Yin sal_uInt16& GetLen() { return nLen; }
SetLen(sal_uInt16 nL)396*95c02664SSteve Yin void SetLen( sal_uInt16 nL ) { nLen = nL; }
397*95c02664SSteve Yin
GetSize()398*95c02664SSteve Yin Size& GetSize() { return aOutSz; }
GetSize() const399*95c02664SSteve Yin Size GetSize() const { return aOutSz; }
400*95c02664SSteve Yin
GetKind()401*95c02664SSteve Yin sal_uInt8& GetKind() { return nKind; }
GetKind() const402*95c02664SSteve Yin sal_uInt8 GetKind() const { return nKind; }
403*95c02664SSteve Yin
SetRightToLeft(sal_uInt8 b)404*95c02664SSteve Yin void SetRightToLeft( sal_uInt8 b ) { nRightToLeft = b; }
GetRightToLeft() const405*95c02664SSteve Yin sal_uInt8 GetRightToLeft() const { return nRightToLeft; }
IsRightToLeft() const406*95c02664SSteve Yin sal_Bool IsRightToLeft() const { return (nRightToLeft&1); }
407*95c02664SSteve Yin
GetExtraValue() const408*95c02664SSteve Yin sal_Unicode GetExtraValue() const { return nExtraValue; }
SetExtraValue(sal_Unicode n)409*95c02664SSteve Yin void SetExtraValue( sal_Unicode n ) { nExtraValue = n; }
410*95c02664SSteve Yin
HasValidSize() const411*95c02664SSteve Yin sal_Bool HasValidSize() const { return aOutSz.Width() != (-1); }
412*95c02664SSteve Yin
GetExtraInfos() const413*95c02664SSteve Yin ExtraPortionInfo* GetExtraInfos() const { return pExtraInfos; }
SetExtraInfos(ExtraPortionInfo * p)414*95c02664SSteve Yin void SetExtraInfos( ExtraPortionInfo* p ) { delete pExtraInfos; pExtraInfos = p; }
415*95c02664SSteve Yin };
416*95c02664SSteve Yin
417*95c02664SSteve Yin // -------------------------------------------------------------------------
418*95c02664SSteve Yin // class TextPortionList
419*95c02664SSteve Yin // -------------------------------------------------------------------------
420*95c02664SSteve Yin typedef TextPortion* TextPortionPtr;
421*95c02664SSteve Yin SV_DECL_PTRARR( TextPortionArray, TextPortionPtr, 0, 8 )
422*95c02664SSteve Yin
423*95c02664SSteve Yin class TextPortionList : public TextPortionArray
424*95c02664SSteve Yin {
425*95c02664SSteve Yin public:
426*95c02664SSteve Yin TextPortionList();
427*95c02664SSteve Yin ~TextPortionList();
428*95c02664SSteve Yin
429*95c02664SSteve Yin void Reset();
430*95c02664SSteve Yin sal_uInt16 FindPortion( sal_uInt16 nCharPos, sal_uInt16& rPortionStart, sal_Bool bPreferStartingPortion = sal_False );
431*95c02664SSteve Yin sal_uInt16 GetStartPos( sal_uInt16 nPortion );
432*95c02664SSteve Yin void DeleteFromPortion( sal_uInt16 nDelFrom );
433*95c02664SSteve Yin };
434*95c02664SSteve Yin
435*95c02664SSteve Yin class ParaPortion;
436*95c02664SSteve Yin
437*95c02664SSteve Yin SV_DECL_VARARR( CharPosArray, sal_Int32, 0, CHARPOSGROW )
438*95c02664SSteve Yin
439*95c02664SSteve Yin // ------------------------------------------------------------------------
440*95c02664SSteve Yin // class EditLine
441*95c02664SSteve Yin // -------------------------------------------------------------------------
442*95c02664SSteve Yin class EditLine
443*95c02664SSteve Yin {
444*95c02664SSteve Yin private:
445*95c02664SSteve Yin CharPosArray aPositions;
446*95c02664SSteve Yin long nTxtWidth;
447*95c02664SSteve Yin sal_uInt16 nStartPosX;
448*95c02664SSteve Yin sal_uInt16 nStart; // koennte durch nStartPortion ersetzt werden
449*95c02664SSteve Yin sal_uInt16 nEnd; // koennte durch nEndPortion ersetzt werden
450*95c02664SSteve Yin sal_uInt16 nStartPortion;
451*95c02664SSteve Yin sal_uInt16 nEndPortion;
452*95c02664SSteve Yin sal_uInt16 nHeight; // Gesamthoehe der Zeile
453*95c02664SSteve Yin sal_uInt16 nTxtHeight; // Reine Texthoehe
454*95c02664SSteve Yin sal_uInt16 nCrsrHeight; // Bei Konturfluss hohe Zeilen => Cursor zu gro?.
455*95c02664SSteve Yin sal_uInt16 nMaxAscent;
456*95c02664SSteve Yin sal_Bool bHangingPunctuation;
457*95c02664SSteve Yin sal_Bool bInvalid; // fuer geschickte Formatierung
458*95c02664SSteve Yin
459*95c02664SSteve Yin public:
460*95c02664SSteve Yin EditLine();
461*95c02664SSteve Yin EditLine( const EditLine& );
462*95c02664SSteve Yin ~EditLine();
463*95c02664SSteve Yin
IsIn(sal_uInt16 nIndex) const464*95c02664SSteve Yin sal_Bool IsIn( sal_uInt16 nIndex ) const
465*95c02664SSteve Yin { return ( (nIndex >= nStart ) && ( nIndex < nEnd ) ); }
466*95c02664SSteve Yin
IsIn(sal_uInt16 nIndex,sal_Bool bInclEnd) const467*95c02664SSteve Yin sal_Bool IsIn( sal_uInt16 nIndex, sal_Bool bInclEnd ) const
468*95c02664SSteve Yin { return ( ( nIndex >= nStart ) && ( bInclEnd ? ( nIndex <= nEnd ) : ( nIndex < nEnd ) ) ); }
469*95c02664SSteve Yin
SetStart(sal_uInt16 n)470*95c02664SSteve Yin void SetStart( sal_uInt16 n ) { nStart = n; }
GetStart() const471*95c02664SSteve Yin sal_uInt16 GetStart() const { return nStart; }
GetStart()472*95c02664SSteve Yin sal_uInt16& GetStart() { return nStart; }
473*95c02664SSteve Yin
SetEnd(sal_uInt16 n)474*95c02664SSteve Yin void SetEnd( sal_uInt16 n ) { nEnd = n; }
GetEnd() const475*95c02664SSteve Yin sal_uInt16 GetEnd() const { return nEnd; }
GetEnd()476*95c02664SSteve Yin sal_uInt16& GetEnd() { return nEnd; }
477*95c02664SSteve Yin
SetStartPortion(sal_uInt16 n)478*95c02664SSteve Yin void SetStartPortion( sal_uInt16 n ) { nStartPortion = n; }
GetStartPortion() const479*95c02664SSteve Yin sal_uInt16 GetStartPortion() const { return nStartPortion; }
GetStartPortion()480*95c02664SSteve Yin sal_uInt16& GetStartPortion() { return nStartPortion; }
481*95c02664SSteve Yin
SetEndPortion(sal_uInt16 n)482*95c02664SSteve Yin void SetEndPortion( sal_uInt16 n ) { nEndPortion = n; }
GetEndPortion() const483*95c02664SSteve Yin sal_uInt16 GetEndPortion() const { return nEndPortion; }
GetEndPortion()484*95c02664SSteve Yin sal_uInt16& GetEndPortion() { return nEndPortion; }
485*95c02664SSteve Yin
SetHeight(sal_uInt16 nH,sal_uInt16 nTxtH=0,sal_uInt16 nCrsrH=0)486*95c02664SSteve Yin void SetHeight( sal_uInt16 nH, sal_uInt16 nTxtH = 0, sal_uInt16 nCrsrH = 0 )
487*95c02664SSteve Yin { nHeight = nH;
488*95c02664SSteve Yin nTxtHeight = ( nTxtH ? nTxtH : nH );
489*95c02664SSteve Yin nCrsrHeight = ( nCrsrH ? nCrsrH : nTxtHeight );
490*95c02664SSteve Yin }
GetHeight() const491*95c02664SSteve Yin sal_uInt16 GetHeight() const { return nHeight; }
GetTxtHeight() const492*95c02664SSteve Yin sal_uInt16 GetTxtHeight() const { return nTxtHeight; }
GetCrsrHeight() const493*95c02664SSteve Yin sal_uInt16 GetCrsrHeight() const { return nCrsrHeight; }
494*95c02664SSteve Yin
SetTextWidth(long n)495*95c02664SSteve Yin void SetTextWidth( long n ) { nTxtWidth = n; }
GetTextWidth() const496*95c02664SSteve Yin long GetTextWidth() const { return nTxtWidth; }
497*95c02664SSteve Yin
SetMaxAscent(sal_uInt16 n)498*95c02664SSteve Yin void SetMaxAscent( sal_uInt16 n ) { nMaxAscent = n; }
GetMaxAscent() const499*95c02664SSteve Yin sal_uInt16 GetMaxAscent() const { return nMaxAscent; }
500*95c02664SSteve Yin
SetHangingPunctuation(sal_Bool b)501*95c02664SSteve Yin void SetHangingPunctuation( sal_Bool b ) { bHangingPunctuation = b; }
IsHangingPunctuation() const502*95c02664SSteve Yin sal_Bool IsHangingPunctuation() const { return bHangingPunctuation; }
503*95c02664SSteve Yin
GetLen() const504*95c02664SSteve Yin sal_uInt16 GetLen() const { return nEnd - nStart; }
505*95c02664SSteve Yin
GetStartPosX() const506*95c02664SSteve Yin sal_uInt16 GetStartPosX() const { return nStartPosX; }
SetStartPosX(sal_uInt16 start)507*95c02664SSteve Yin void SetStartPosX( sal_uInt16 start ) { nStartPosX = start; }
508*95c02664SSteve Yin
509*95c02664SSteve Yin Size CalcTextSize( ParaPortion& rParaPortion );
510*95c02664SSteve Yin
IsInvalid() const511*95c02664SSteve Yin sal_Bool IsInvalid() const { return bInvalid; }
IsValid() const512*95c02664SSteve Yin sal_Bool IsValid() const { return !bInvalid; }
SetInvalid()513*95c02664SSteve Yin void SetInvalid() { bInvalid = sal_True; }
SetValid()514*95c02664SSteve Yin void SetValid() { bInvalid = sal_False; }
515*95c02664SSteve Yin
IsEmpty() const516*95c02664SSteve Yin sal_Bool IsEmpty() const { return (nEnd > nStart) ? sal_False : sal_True; }
517*95c02664SSteve Yin
GetCharPosArray()518*95c02664SSteve Yin CharPosArray& GetCharPosArray() { return aPositions; }
519*95c02664SSteve Yin
520*95c02664SSteve Yin EditLine* Clone() const;
521*95c02664SSteve Yin
522*95c02664SSteve Yin EditLine& operator = ( const EditLine& rLine );
523*95c02664SSteve Yin friend sal_Bool operator == ( const EditLine& r1, const EditLine& r2 );
524*95c02664SSteve Yin friend sal_Bool operator != ( const EditLine& r1, const EditLine& r2 );
525*95c02664SSteve Yin };
526*95c02664SSteve Yin
527*95c02664SSteve Yin
528*95c02664SSteve Yin // -------------------------------------------------------------------------
529*95c02664SSteve Yin // class LineList
530*95c02664SSteve Yin // -------------------------------------------------------------------------
531*95c02664SSteve Yin typedef EditLine* EditLinePtr;
532*95c02664SSteve Yin SV_DECL_PTRARR( LineArray, EditLinePtr, 0, 4 )
533*95c02664SSteve Yin
534*95c02664SSteve Yin class EditLineList : public LineArray
535*95c02664SSteve Yin {
536*95c02664SSteve Yin public:
537*95c02664SSteve Yin EditLineList();
538*95c02664SSteve Yin ~EditLineList();
539*95c02664SSteve Yin
540*95c02664SSteve Yin void Reset();
541*95c02664SSteve Yin void DeleteFromLine( sal_uInt16 nDelFrom );
542*95c02664SSteve Yin sal_uInt16 FindLine( sal_uInt16 nChar, sal_Bool bInclEnd );
543*95c02664SSteve Yin };
544*95c02664SSteve Yin
545*95c02664SSteve Yin // -------------------------------------------------------------------------
546*95c02664SSteve Yin // class ParaPortion
547*95c02664SSteve Yin // -------------------------------------------------------------------------
548*95c02664SSteve Yin class ParaPortion
549*95c02664SSteve Yin {
550*95c02664SSteve Yin friend class ImpEditEngine; // zum Einstellen der Hoehe
551*95c02664SSteve Yin private:
552*95c02664SSteve Yin EditLineList aLineList;
553*95c02664SSteve Yin TextPortionList aTextPortionList;
554*95c02664SSteve Yin ContentNode* pNode;
555*95c02664SSteve Yin long nHeight;
556*95c02664SSteve Yin
557*95c02664SSteve Yin ScriptTypePosInfos aScriptInfos;
558*95c02664SSteve Yin WritingDirectionInfos aWritingDirectionInfos;
559*95c02664SSteve Yin
560*95c02664SSteve Yin sal_uInt16 nInvalidPosStart;
561*95c02664SSteve Yin sal_uInt16 nFirstLineOffset; // Fuer Writer-LineSpacing-Interpretation
562*95c02664SSteve Yin sal_uInt16 nBulletX;
563*95c02664SSteve Yin short nInvalidDiff;
564*95c02664SSteve Yin
565*95c02664SSteve Yin sal_Bool bInvalid : 1;
566*95c02664SSteve Yin sal_Bool bSimple : 1; // nur lineares Tippen
567*95c02664SSteve Yin sal_Bool bVisible : 1; // MT 05/00: Gehoert an den Node!!!
568*95c02664SSteve Yin sal_Bool bForceRepaint : 1;
569*95c02664SSteve Yin
570*95c02664SSteve Yin ParaPortion( const ParaPortion& );
571*95c02664SSteve Yin
572*95c02664SSteve Yin public:
573*95c02664SSteve Yin ParaPortion( ContentNode* pNode );
574*95c02664SSteve Yin ~ParaPortion();
575*95c02664SSteve Yin
576*95c02664SSteve Yin sal_uInt16 GetLineNumber( sal_uInt16 nIndex );
577*95c02664SSteve Yin
GetLines()578*95c02664SSteve Yin EditLineList& GetLines() { return aLineList; }
579*95c02664SSteve Yin
IsInvalid() const580*95c02664SSteve Yin sal_Bool IsInvalid() const { return bInvalid; }
IsSimpleInvalid() const581*95c02664SSteve Yin sal_Bool IsSimpleInvalid() const { return bSimple; }
SetValid()582*95c02664SSteve Yin void SetValid() { bInvalid = sal_False; bSimple = sal_True;}
583*95c02664SSteve Yin
MustRepaint() const584*95c02664SSteve Yin sal_Bool MustRepaint() const { return bForceRepaint; }
SetMustRepaint(sal_Bool bRP)585*95c02664SSteve Yin void SetMustRepaint( sal_Bool bRP ) { bForceRepaint = bRP; }
586*95c02664SSteve Yin
GetBulletX() const587*95c02664SSteve Yin sal_uInt16 GetBulletX() const { return nBulletX; }
SetBulletX(sal_uInt16 n)588*95c02664SSteve Yin void SetBulletX( sal_uInt16 n ) { nBulletX = n; }
589*95c02664SSteve Yin
590*95c02664SSteve Yin void MarkInvalid( sal_uInt16 nStart, short nDiff);
591*95c02664SSteve Yin void MarkSelectionInvalid( sal_uInt16 nStart, sal_uInt16 nEnd );
592*95c02664SSteve Yin
593*95c02664SSteve Yin void SetVisible( sal_Bool bVisible );
IsVisible()594*95c02664SSteve Yin sal_Bool IsVisible() { return bVisible; }
595*95c02664SSteve Yin
GetHeight() const596*95c02664SSteve Yin long GetHeight() const { return ( bVisible ? nHeight : 0 ); }
GetFirstLineOffset() const597*95c02664SSteve Yin sal_uInt16 GetFirstLineOffset() const { return ( bVisible ? nFirstLineOffset : 0 ); }
ResetHeight()598*95c02664SSteve Yin void ResetHeight() { nHeight = 0; nFirstLineOffset = 0; }
599*95c02664SSteve Yin
GetNode() const600*95c02664SSteve Yin ContentNode* GetNode() const { return pNode; }
GetTextPortions()601*95c02664SSteve Yin TextPortionList& GetTextPortions() { return aTextPortionList; }
602*95c02664SSteve Yin
GetInvalidPosStart() const603*95c02664SSteve Yin sal_uInt16 GetInvalidPosStart() const { return nInvalidPosStart; }
GetInvalidDiff() const604*95c02664SSteve Yin short GetInvalidDiff() const { return nInvalidDiff; }
605*95c02664SSteve Yin
606*95c02664SSteve Yin void CorrectValuesBehindLastFormattedLine( sal_uInt16 nLastFormattedLine );
607*95c02664SSteve Yin
608*95c02664SSteve Yin sal_Bool DbgCheckTextPortions();
609*95c02664SSteve Yin };
610*95c02664SSteve Yin
611*95c02664SSteve Yin typedef ParaPortion* ParaPortionPtr;
612*95c02664SSteve Yin SV_DECL_PTRARR( DummyParaPortionList, ParaPortionPtr, 0, 4 )
613*95c02664SSteve Yin
614*95c02664SSteve Yin // -------------------------------------------------------------------------
615*95c02664SSteve Yin // class ParaPortionList
616*95c02664SSteve Yin // -------------------------------------------------------------------------
617*95c02664SSteve Yin class ParaPortionList : public DummyParaPortionList
618*95c02664SSteve Yin {
619*95c02664SSteve Yin sal_uInt16 nLastCache;
620*95c02664SSteve Yin public:
621*95c02664SSteve Yin ParaPortionList();
622*95c02664SSteve Yin ~ParaPortionList();
623*95c02664SSteve Yin
624*95c02664SSteve Yin void Reset();
625*95c02664SSteve Yin long GetYOffset( ParaPortion* pPPortion );
626*95c02664SSteve Yin sal_uInt16 FindParagraph( long nYOffset );
627*95c02664SSteve Yin
SaveGetObject(sal_uInt16 nPos) const628*95c02664SSteve Yin inline ParaPortion* SaveGetObject( sal_uInt16 nPos ) const
629*95c02664SSteve Yin { return ( nPos < Count() ) ? GetObject( nPos ) : 0; }
630*95c02664SSteve Yin
631*95c02664SSteve Yin sal_uInt16 GetPos( const ParaPortionPtr &rPtr ) const;
632*95c02664SSteve Yin
633*95c02664SSteve Yin // temporaer:
634*95c02664SSteve Yin void DbgCheck( EditDoc& rDoc );
635*95c02664SSteve Yin };
636*95c02664SSteve Yin
637*95c02664SSteve Yin // -------------------------------------------------------------------------
638*95c02664SSteve Yin // class EditSelection
639*95c02664SSteve Yin // -------------------------------------------------------------------------
640*95c02664SSteve Yin class EditSelection
641*95c02664SSteve Yin {
642*95c02664SSteve Yin private:
643*95c02664SSteve Yin EditPaM aStartPaM;
644*95c02664SSteve Yin EditPaM aEndPaM;
645*95c02664SSteve Yin
646*95c02664SSteve Yin public:
647*95c02664SSteve Yin EditSelection(); // kein CCTOR und DTOR, geht autom. richtig!
648*95c02664SSteve Yin EditSelection( const EditPaM& rStartAndAnd );
649*95c02664SSteve Yin EditSelection( const EditPaM& rStart, const EditPaM& rEnd );
650*95c02664SSteve Yin
Min()651*95c02664SSteve Yin EditPaM& Min() { return aStartPaM; }
Max()652*95c02664SSteve Yin EditPaM& Max() { return aEndPaM; }
653*95c02664SSteve Yin
Min() const654*95c02664SSteve Yin const EditPaM& Min() const { return aStartPaM; }
Max() const655*95c02664SSteve Yin const EditPaM& Max() const { return aEndPaM; }
656*95c02664SSteve Yin
HasRange() const657*95c02664SSteve Yin sal_Bool HasRange() const { return aStartPaM != aEndPaM; }
658*95c02664SSteve Yin sal_Bool IsInvalid() const;
659*95c02664SSteve Yin sal_Bool DbgIsBuggy( EditDoc& rDoc );
660*95c02664SSteve Yin
661*95c02664SSteve Yin sal_Bool Adjust( const ContentList& rNodes );
662*95c02664SSteve Yin
663*95c02664SSteve Yin EditSelection& operator = ( const EditPaM& r );
operator ==(const EditSelection & r) const664*95c02664SSteve Yin sal_Bool operator == ( const EditSelection& r ) const
665*95c02664SSteve Yin { return ( ( aStartPaM == r.aStartPaM ) && ( aEndPaM == r.aEndPaM ) )
666*95c02664SSteve Yin ? sal_True : sal_False; }
operator !=(const EditSelection & r) const667*95c02664SSteve Yin sal_Bool operator != ( const EditSelection& r ) const { return !( r == *this ); }
668*95c02664SSteve Yin };
669*95c02664SSteve Yin
670*95c02664SSteve Yin // -------------------------------------------------------------------------
671*95c02664SSteve Yin // class DeletedNodeInfo
672*95c02664SSteve Yin // -------------------------------------------------------------------------
673*95c02664SSteve Yin class DeletedNodeInfo
674*95c02664SSteve Yin {
675*95c02664SSteve Yin private:
676*95c02664SSteve Yin sal_uIntPtr nInvalidAdressPtr;
677*95c02664SSteve Yin sal_uInt16 nInvalidParagraph;
678*95c02664SSteve Yin
679*95c02664SSteve Yin public:
DeletedNodeInfo(sal_uIntPtr nInvAdr,sal_uInt16 nPos)680*95c02664SSteve Yin DeletedNodeInfo( sal_uIntPtr nInvAdr, sal_uInt16 nPos )
681*95c02664SSteve Yin { nInvalidAdressPtr = nInvAdr;
682*95c02664SSteve Yin nInvalidParagraph = nPos; }
683*95c02664SSteve Yin
GetInvalidAdress()684*95c02664SSteve Yin sal_uIntPtr GetInvalidAdress() { return nInvalidAdressPtr; }
GetPosition()685*95c02664SSteve Yin sal_uInt16 GetPosition() { return nInvalidParagraph; }
686*95c02664SSteve Yin };
687*95c02664SSteve Yin
688*95c02664SSteve Yin typedef DeletedNodeInfo* DeletedNodeInfoPtr;
689*95c02664SSteve Yin SV_DECL_PTRARR( DeletedNodesList, DeletedNodeInfoPtr, 0, 4 )
690*95c02664SSteve Yin
691*95c02664SSteve Yin // -------------------------------------------------------------------------
692*95c02664SSteve Yin // class EditDoc
693*95c02664SSteve Yin // -------------------------------------------------------------------------
694*95c02664SSteve Yin class EditDoc : public ContentList
695*95c02664SSteve Yin {
696*95c02664SSteve Yin private:
697*95c02664SSteve Yin SfxItemPool* pItemPool;
698*95c02664SSteve Yin Link aModifyHdl;
699*95c02664SSteve Yin
700*95c02664SSteve Yin SvxFont aDefFont; //schneller, als jedesmal vom Pool!
701*95c02664SSteve Yin sal_uInt16 nDefTab;
702*95c02664SSteve Yin sal_Bool bIsVertical;
703*95c02664SSteve Yin sal_Bool bIsFixedCellHeight;
704*95c02664SSteve Yin
705*95c02664SSteve Yin sal_Bool bOwnerOfPool;
706*95c02664SSteve Yin sal_Bool bModified;
707*95c02664SSteve Yin
708*95c02664SSteve Yin protected:
709*95c02664SSteve Yin void ImplDestroyContents();
710*95c02664SSteve Yin
711*95c02664SSteve Yin public:
712*95c02664SSteve Yin EditDoc( SfxItemPool* pItemPool );
713*95c02664SSteve Yin ~EditDoc();
714*95c02664SSteve Yin
IsModified() const715*95c02664SSteve Yin sal_Bool IsModified() const { return bModified; }
716*95c02664SSteve Yin void SetModified( sal_Bool b );
717*95c02664SSteve Yin
SetModifyHdl(const Link & rLink)718*95c02664SSteve Yin void SetModifyHdl( const Link& rLink ) { aModifyHdl = rLink; }
GetModifyHdl() const719*95c02664SSteve Yin Link GetModifyHdl() const { return aModifyHdl; }
720*95c02664SSteve Yin
721*95c02664SSteve Yin void CreateDefFont( sal_Bool bUseStyles );
GetDefFont()722*95c02664SSteve Yin const SvxFont& GetDefFont() { return aDefFont; }
723*95c02664SSteve Yin
SetDefTab(sal_uInt16 nTab)724*95c02664SSteve Yin void SetDefTab( sal_uInt16 nTab ) { nDefTab = nTab ? nTab : DEFTAB; }
GetDefTab() const725*95c02664SSteve Yin sal_uInt16 GetDefTab() const { return nDefTab; }
726*95c02664SSteve Yin
SetVertical(sal_Bool bVertical)727*95c02664SSteve Yin void SetVertical( sal_Bool bVertical ) { bIsVertical = bVertical; }
IsVertical() const728*95c02664SSteve Yin sal_Bool IsVertical() const { return bIsVertical; }
729*95c02664SSteve Yin
SetFixedCellHeight(sal_Bool bUseFixedCellHeight)730*95c02664SSteve Yin void SetFixedCellHeight( sal_Bool bUseFixedCellHeight ) { bIsFixedCellHeight = bUseFixedCellHeight; }
IsFixedCellHeight() const731*95c02664SSteve Yin sal_Bool IsFixedCellHeight() const { return bIsFixedCellHeight; }
732*95c02664SSteve Yin
733*95c02664SSteve Yin EditPaM Clear();
734*95c02664SSteve Yin EditPaM RemoveText();
735*95c02664SSteve Yin EditPaM RemoveChars( EditPaM aPaM, sal_uInt16 nChars );
736*95c02664SSteve Yin void InsertText( const EditPaM& rPaM, xub_Unicode c );
737*95c02664SSteve Yin EditPaM InsertText( EditPaM aPaM, const XubString& rStr );
738*95c02664SSteve Yin EditPaM InsertParaBreak( EditPaM aPaM, sal_Bool bKeepEndingAttribs );
739*95c02664SSteve Yin EditPaM InsertFeature( EditPaM aPaM, const SfxPoolItem& rItem );
740*95c02664SSteve Yin EditPaM ConnectParagraphs( ContentNode* pLeft, ContentNode* pRight );
741*95c02664SSteve Yin
742*95c02664SSteve Yin String GetText( LineEnd eEnd ) const;
743*95c02664SSteve Yin sal_uLong GetTextLen() const;
744*95c02664SSteve Yin
745*95c02664SSteve Yin XubString GetParaAsString( sal_uInt16 nNode ) const;
746*95c02664SSteve Yin XubString GetParaAsString( ContentNode* pNode, sal_uInt16 nStartPos = 0, sal_uInt16 nEndPos = 0xFFFF, sal_Bool bResolveFields = sal_True ) const;
747*95c02664SSteve Yin
748*95c02664SSteve Yin inline EditPaM GetStartPaM() const;
749*95c02664SSteve Yin inline EditPaM GetEndPaM() const;
750*95c02664SSteve Yin
GetItemPool()751*95c02664SSteve Yin SfxItemPool& GetItemPool() { return *pItemPool; }
GetItemPool() const752*95c02664SSteve Yin const SfxItemPool& GetItemPool() const { return *pItemPool; }
753*95c02664SSteve Yin
754*95c02664SSteve Yin void RemoveItemsFromPool( ContentNode* pNode );
755*95c02664SSteve Yin
756*95c02664SSteve Yin void InsertAttrib( const SfxPoolItem& rItem, ContentNode* pNode, sal_uInt16 nStart, sal_uInt16 nEnd );
757*95c02664SSteve Yin void InsertAttrib( ContentNode* pNode, sal_uInt16 nStart, sal_uInt16 nEnd, const SfxPoolItem& rPoolItem );
758*95c02664SSteve Yin void InsertAttribInSelection( ContentNode* pNode, sal_uInt16 nStart, sal_uInt16 nEnd, const SfxPoolItem& rPoolItem );
759*95c02664SSteve Yin sal_Bool RemoveAttribs( ContentNode* pNode, sal_uInt16 nStart, sal_uInt16 nEnd, sal_uInt16 nWhich = 0 );
760*95c02664SSteve Yin sal_Bool RemoveAttribs( ContentNode* pNode, sal_uInt16 nStart, sal_uInt16 nEnd, EditCharAttrib*& rpStarting, EditCharAttrib*& rpEnding, sal_uInt16 nWhich = 0 );
761*95c02664SSteve Yin void FindAttribs( ContentNode* pNode, sal_uInt16 nStartPos, sal_uInt16 nEndPos, SfxItemSet& rCurSet );
762*95c02664SSteve Yin
GetPos(ContentNode * pNode) const763*95c02664SSteve Yin sal_uInt16 GetPos( ContentNode* pNode ) const { return ContentList::GetPos(pNode); }
SaveGetObject(sal_uInt16 nPos) const764*95c02664SSteve Yin ContentNode* SaveGetObject( sal_uInt16 nPos ) const { return ( nPos < Count() ) ? GetObject( nPos ) : 0; }
765*95c02664SSteve Yin
766*95c02664SSteve Yin static XubString GetSepStr( LineEnd eEnd );
767*95c02664SSteve Yin };
768*95c02664SSteve Yin
GetStartPaM() const769*95c02664SSteve Yin inline EditPaM EditDoc::GetStartPaM() const
770*95c02664SSteve Yin {
771*95c02664SSteve Yin return EditPaM( GetObject( 0 ), 0 );
772*95c02664SSteve Yin }
773*95c02664SSteve Yin
GetEndPaM() const774*95c02664SSteve Yin inline EditPaM EditDoc::GetEndPaM() const
775*95c02664SSteve Yin {
776*95c02664SSteve Yin ContentNode* pLastNode = GetObject( Count()-1 );
777*95c02664SSteve Yin return EditPaM( pLastNode, pLastNode->Len() );
778*95c02664SSteve Yin }
779*95c02664SSteve Yin
GetAttrib(const CharAttribArray & rAttribs,sal_uInt16 nAttr)780*95c02664SSteve Yin inline EditCharAttrib* GetAttrib( const CharAttribArray& rAttribs, sal_uInt16 nAttr )
781*95c02664SSteve Yin {
782*95c02664SSteve Yin return ( nAttr < rAttribs.Count() ) ? rAttribs[nAttr] : 0;
783*95c02664SSteve Yin }
784*95c02664SSteve Yin
785*95c02664SSteve Yin sal_Bool CheckOrderedList( CharAttribArray& rAttribs, sal_Bool bStart );
786*95c02664SSteve Yin
787*95c02664SSteve Yin // -------------------------------------------------------------------------
788*95c02664SSteve Yin // class EditEngineItemPool
789*95c02664SSteve Yin // -------------------------------------------------------------------------
790*95c02664SSteve Yin class EditEngineItemPool : public SfxItemPool
791*95c02664SSteve Yin {
792*95c02664SSteve Yin public:
793*95c02664SSteve Yin EditEngineItemPool( sal_Bool bPersistenRefCounts );
794*95c02664SSteve Yin protected:
795*95c02664SSteve Yin virtual ~EditEngineItemPool();
796*95c02664SSteve Yin public:
797*95c02664SSteve Yin
798*95c02664SSteve Yin virtual SvStream& Store( SvStream& rStream ) const;
799*95c02664SSteve Yin };
800*95c02664SSteve Yin
801*95c02664SSteve Yin #endif // _EDITDOC_HXX
802