nss: upgrade to release 3.73
[LibreOffice.git] / include / editeng / editdata.hxx
blob40c74cb2b8c6ea0dc31721978d99262800bb6d60
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 // MyEDITDATA, wegen exportiertem EditData
21 #ifndef INCLUDED_EDITENG_EDITDATA_HXX
22 #define INCLUDED_EDITENG_EDITDATA_HXX
24 #include <rtl/ustring.hxx>
25 #include <editeng/editengdllapi.h>
26 #include <memory>
27 #include <ostream>
29 class SfxPoolItem;
30 template<typename T> class SvParser;
31 class SvxFieldItem;
32 enum class HtmlTokenId : sal_Int16;
34 enum class EETextFormat { Text = 0x20, Rtf, Html = 0x32, Xml };
35 enum class EEHorizontalTextDirection { Default, L2R, R2L };
36 enum class EESelectionMode { Std, Hidden };
37 // EESelectionMode::Hidden can be used to completely hide the selection. This is useful e.g. when you want show the selection
38 // only as long as your window (which the edit view works on) has the focus
39 enum class EESpellState { Ok, NoSpeller, ErrorFound };
40 enum class EEAnchorMode {
41 TopLeft, TopHCenter, TopRight,
42 VCenterLeft, VCenterHCenter, VCenterRight,
43 BottomLeft, BottomHCenter, BottomRight };
45 enum class EERemoveParaAttribsMode { RemoveAll, RemoveCharItems, RemoveNone };
47 #define EE_PARA_NOT_FOUND SAL_MAX_INT32
48 #define EE_PARA_APPEND SAL_MAX_INT32
49 #define EE_PARA_ALL SAL_MAX_INT32
50 #define EE_PARA_MAX_COUNT SAL_MAX_INT32
52 #define EE_INDEX_NOT_FOUND SAL_MAX_INT32
53 #define EE_TEXTPOS_ALL SAL_MAX_INT32
54 #define EE_TEXTPOS_MAX_COUNT SAL_MAX_INT32
56 EDITENG_DLLPUBLIC extern const size_t EE_APPEND;
58 // Error messages for Read / Write Method
59 #define EE_READWRITE_WRONGFORMAT ErrCode(ErrCodeArea::Svx, 1)
61 #define EDITUNDO_REMOVECHARS 100
62 #define EDITUNDO_CONNECTPARAS 101
63 #define EDITUNDO_MOVEPARAGRAPHS 103
64 #define EDITUNDO_INSERTFEATURE 104
65 #define EDITUNDO_SPLITPARA 105
66 #define EDITUNDO_INSERTCHARS 106
67 #define EDITUNDO_DELCONTENT 107
68 #define EDITUNDO_DELETE 108
69 #define EDITUNDO_CUT 109
70 #define EDITUNDO_PASTE 110
71 #define EDITUNDO_INSERT 111
72 #define EDITUNDO_MOVEPARAS 113
73 #define EDITUNDO_PARAATTRIBS 114
74 #define EDITUNDO_ATTRIBS 115
75 #define EDITUNDO_DRAGANDDROP 116
76 #define EDITUNDO_READ 117
77 #define EDITUNDO_STYLESHEET 118
78 #define EDITUNDO_REPLACEALL 119
79 #define EDITUNDO_RESETATTRIBS 121
80 #define EDITUNDO_INDENTBLOCK 122
81 #define EDITUNDO_UNINDENTBLOCK 123
82 #define EDITUNDO_MARKSELECTION 124
83 #define EDITUNDO_TRANSLITERATE 125
85 #define EDITUNDO_USER 200
87 struct EPosition
89 sal_Int32 nPara;
90 sal_Int32 nIndex;
92 EPosition()
93 : nPara( EE_PARA_NOT_FOUND )
94 , nIndex( EE_INDEX_NOT_FOUND )
95 { }
97 EPosition( sal_Int32 nPara_, sal_Int32 nPos_ )
98 : nPara( nPara_ )
99 , nIndex( nPos_ )
103 template<typename charT, typename traits>
104 inline std::basic_ostream<charT, traits> & operator <<(
105 std::basic_ostream<charT, traits> & stream, EPosition const& pos)
107 return stream << "EPosition(" << pos.nPara << ',' << pos.nIndex << ")";
110 struct ESelection
112 sal_Int32 nStartPara;
113 sal_Int32 nStartPos;
114 sal_Int32 nEndPara;
115 sal_Int32 nEndPos;
117 ESelection() : nStartPara( 0 ), nStartPos( 0 ), nEndPara( 0 ), nEndPos( 0 ) {}
119 ESelection( sal_Int32 nStPara, sal_Int32 nStPos,
120 sal_Int32 nEPara, sal_Int32 nEPos )
121 : nStartPara( nStPara )
122 , nStartPos( nStPos )
123 , nEndPara( nEPara )
124 , nEndPos( nEPos )
127 ESelection( sal_Int32 nPara, sal_Int32 nPos )
128 : nStartPara( nPara )
129 , nStartPos( nPos )
130 , nEndPara( nPara )
131 , nEndPos( nPos )
134 void Adjust();
135 bool operator==( const ESelection& rS ) const;
136 bool operator!=( const ESelection& rS ) const { return !operator==(rS); }
137 bool operator<( const ESelection& rS ) const;
138 bool operator>( const ESelection& rS ) const;
139 bool IsZero() const;
140 bool HasRange() const;
143 template<typename charT, typename traits>
144 inline std::basic_ostream<charT, traits> & operator <<(
145 std::basic_ostream<charT, traits> & stream, ESelection const& sel)
147 return stream << "ESelection(" << sel.nStartPara << ',' << sel.nStartPos << "," << sel.nEndPara << "," << sel.nEndPos << ")";
150 inline bool ESelection::HasRange() const
152 return ( nStartPara != nEndPara ) || ( nStartPos != nEndPos );
155 inline bool ESelection::IsZero() const
157 return ( ( nStartPara == 0 ) && ( nStartPos == 0 ) &&
158 ( nEndPara == 0 ) && ( nEndPos == 0 ) );
161 inline bool ESelection::operator==( const ESelection& rS ) const
163 return ( ( nStartPara == rS.nStartPara ) && ( nStartPos == rS.nStartPos ) &&
164 ( nEndPara == rS.nEndPara ) && ( nEndPos == rS.nEndPos ) );
167 inline bool ESelection::operator<( const ESelection& rS ) const
169 // The selection must be adjusted.
170 // => Only check if end of 'this' < Start of rS
171 return ( nEndPara < rS.nStartPara ) ||
172 ( ( nEndPara == rS.nStartPara ) && ( nEndPos < rS.nStartPos ) && !operator==( rS ) );
175 inline bool ESelection::operator>( const ESelection& rS ) const
177 // The selection must be adjusted.
178 // => Only check if end of 'this' < Start of rS
179 return ( nStartPara > rS.nEndPara ) ||
180 ( ( nStartPara == rS.nEndPara ) && ( nStartPos > rS.nEndPos ) && !operator==( rS ) );
183 inline void ESelection::Adjust()
185 bool bSwap = false;
186 if ( nStartPara > nEndPara )
187 bSwap = true;
188 else if ( ( nStartPara == nEndPara ) && ( nStartPos > nEndPos ) )
189 bSwap = true;
191 if ( bSwap )
193 sal_Int32 nSPar = nStartPara; sal_Int32 nSPos = nStartPos;
194 nStartPara = nEndPara; nStartPos = nEndPos;
195 nEndPara = nSPar; nEndPos = nSPos;
199 struct EDITENG_DLLPUBLIC EFieldInfo
201 std::unique_ptr<SvxFieldItem> pFieldItem;
202 OUString aCurrentText;
203 EPosition aPosition;
205 EFieldInfo();
206 EFieldInfo( const SvxFieldItem& rFieldItem, sal_Int32 nPara, sal_Int32 nPos );
207 ~EFieldInfo();
209 EFieldInfo( const EFieldInfo& );
210 EFieldInfo& operator= ( const EFieldInfo& );
213 enum class RtfImportState {
214 Start, End, // only pParser, nPara, nIndex
215 NextToken, UnknownAttr, // nToken+nTokenValue
216 SetAttr, // pAttrs
217 InsertText, // aText
218 InsertPara, // -
220 enum class HtmlImportState {
221 Start, End, // only pParser, nPara, nIndex
222 NextToken, // nToken
223 SetAttr, // pAttrs
224 InsertText, // aText
225 InsertPara, InsertField // -
228 struct HtmlImportInfo
230 SvParser<HtmlTokenId>* pParser;
231 ESelection aSelection;
232 HtmlImportState eState;
234 HtmlTokenId nToken;
236 OUString aText;
238 HtmlImportInfo( HtmlImportState eState, SvParser<HtmlTokenId>* pPrsrs, const ESelection& rSel );
239 ~HtmlImportInfo();
242 struct RtfImportInfo
244 SvParser<int>* pParser;
245 ESelection aSelection;
246 RtfImportState eState;
248 int nToken;
249 short nTokenValue;
251 RtfImportInfo( RtfImportState eState, SvParser<int>* pPrsrs, const ESelection& rSel );
252 ~RtfImportInfo();
255 struct ParagraphInfos
257 ParagraphInfos()
258 : nFirstLineHeight( 0 )
259 , nFirstLineTextHeight ( 0 )
260 , nFirstLineMaxAscent( 0 )
261 , bValid( false )
264 sal_uInt16 nFirstLineHeight;
265 sal_uInt16 nFirstLineTextHeight;
266 sal_uInt16 nFirstLineMaxAscent;
268 bool bValid; // A query during formatting is not valid!
271 struct EECharAttrib
273 const SfxPoolItem* pAttr;
275 sal_Int32 nStart;
276 sal_Int32 nEnd;
279 struct MoveParagraphsInfo
281 sal_Int32 nStartPara;
282 sal_Int32 nEndPara;
283 sal_Int32 nDestPara;
285 MoveParagraphsInfo( sal_Int32 nS, sal_Int32 nE, sal_Int32 nD )
286 { nStartPara = nS; nEndPara = nE; nDestPara = nD; }
289 struct PasteOrDropInfos
291 sal_Int32 nStartPara;
292 sal_Int32 nEndPara;
294 PasteOrDropInfos() : nStartPara(-1), nEndPara(-1) {}
297 enum EENotifyType
299 /// EditEngine text was modified
300 EE_NOTIFY_TEXTMODIFIED,
302 /// A paragraph was inserted into the EditEngine
303 EE_NOTIFY_PARAGRAPHINSERTED,
305 /// A paragraph was removed from the EditEngine
306 EE_NOTIFY_PARAGRAPHREMOVED,
308 /// Multiple paragraphs have been removed from the EditEngine
309 EE_NOTIFY_PARAGRAPHSMOVED,
311 /// The height of at least one paragraph has changed
312 EE_NOTIFY_TextHeightChanged,
314 /// The view area of the EditEngine scrolled
315 EE_NOTIFY_TEXTVIEWSCROLLED,
317 /// The selection and/or the cursor position has changed
318 EE_NOTIFY_TEXTVIEWSELECTIONCHANGED,
320 /// The EditEngine is in a valid state again. Process pending notifications.
321 EE_NOTIFY_PROCESSNOTIFICATIONS,
323 EE_NOTIFY_TEXTVIEWSELECTIONCHANGED_ENDD_PARA
326 struct EENotify
328 EENotifyType eNotificationType;
330 sal_Int32 nParagraph; // only valid in PARAGRAPHINSERTED/EE_NOTIFY_PARAGRAPHREMOVED
332 sal_Int32 nParam1;
333 sal_Int32 nParam2;
335 EENotify( EENotifyType eType )
336 { eNotificationType = eType; nParagraph = EE_PARA_NOT_FOUND; nParam1 = 0; nParam2 = 0; }
339 #endif // INCLUDED_EDITENG_EDITDATA_HXX
341 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */