Coverage Report

Created: 2026-11-06 11:29

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/editeng/source/editeng/editeng.cxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
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/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
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 .
18
 */
19
20
#include <memory>
21
#include <utility>
22
23
#include <comphelper/lok.hxx>
24
#include <config_global.h>
25
#include <o3tl/safeint.hxx>
26
#include <vcl/window.hxx>
27
28
#include <tools/stream.hxx>
29
30
#include <editeng/svxfont.hxx>
31
#include "impedit.hxx"
32
#include <editeng/editeng.hxx>
33
#include <editeng/editview.hxx>
34
#include <editeng/editstat.hxx>
35
#include <editeng/eerdll.hxx>
36
#include <editeng/editrids.hrc>
37
#include <editeng/flditem.hxx>
38
#include <editeng/txtrange.hxx>
39
#include <editeng/cmapitem.hxx>
40
41
#include <editeng/autokernitem.hxx>
42
#include <editeng/contouritem.hxx>
43
#include <editeng/colritem.hxx>
44
#include <editeng/crossedoutitem.hxx>
45
#include <editeng/escapementitem.hxx>
46
#include <editeng/fhgtitem.hxx>
47
#include <editeng/fontitem.hxx>
48
#include <editeng/kernitem.hxx>
49
#include <editeng/postitem.hxx>
50
#include <editeng/shdditem.hxx>
51
#include <editeng/udlnitem.hxx>
52
#include <editeng/wghtitem.hxx>
53
#include <editeng/wrlmitem.hxx>
54
#include <editeng/langitem.hxx>
55
#include <editeng/emphasismarkitem.hxx>
56
#include <editeng/charscaleitem.hxx>
57
#include <editeng/charreliefitem.hxx>
58
59
#include <sot/exchange.hxx>
60
#include <sot/formats.hxx>
61
62
#include <editeng/numitem.hxx>
63
#include <tools/lazydelete.hxx>
64
65
#if OSL_DEBUG_LEVEL > 1
66
#include <editeng/frmdiritem.hxx>
67
#endif
68
69
#include <outlundo.hxx>
70
71
using namespace ::com::sun::star;
72
using namespace ::com::sun::star::uno;
73
using namespace ::com::sun::star::linguistic2;
74
75
76
ImpEditEngine& EditEngine::getImpl() const
77
1.44G
{
78
1.44G
    return *mpImpEditEngine;
79
1.44G
}
80
81
EditEngine::EditEngine(SfxItemPool* pItemPool)
82
125k
    : mpImpEditEngine(new ImpEditEngine(this, pItemPool))
83
125k
{
84
125k
}
85
86
EditEngine::EditEngine( Outliner* pEngOwner, SfxItemPool* pItemPool )
87
502k
    : mpImpEditEngine(new ImpEditEngine(this, pItemPool, pEngOwner))
88
502k
{
89
502k
}
90
91
627k
EditEngine::~EditEngine() = default;
92
93
void EditEngine::EnableUndo( bool bEnable )
94
15.1M
{
95
15.1M
    getImpl().EnableUndo(bEnable);
96
15.1M
}
97
98
bool EditEngine::IsUndoEnabled() const
99
31.3M
{
100
31.3M
    return getImpl().IsUndoEnabled();
101
31.3M
}
102
103
bool EditEngine::IsInUndo() const
104
48.7M
{
105
48.7M
    return getImpl().IsInUndo();
106
48.7M
}
107
108
EditUndoManager& EditEngine::GetUndoManager()
109
6.28M
{
110
6.28M
    return getImpl().GetUndoManager();
111
6.28M
}
112
113
EditUndoManager* EditEngine::SetUndoManager(EditUndoManager* pNew)
114
0
{
115
0
    return getImpl().SetUndoManager(pNew);
116
0
}
117
118
void EditEngine::UndoActionStart( sal_uInt16 nId )
119
2.71M
{
120
2.71M
    getImpl().UndoActionStart(nId);
121
2.71M
}
122
123
void EditEngine::UndoActionStart(sal_uInt16 nId, const ESelection& rSel)
124
0
{
125
0
    getImpl().UndoActionStart(nId, rSel);
126
0
}
127
128
void EditEngine::UndoActionEnd()
129
2.71M
{
130
2.71M
    getImpl().UndoActionEnd();
131
2.71M
}
132
133
bool EditEngine::HasTriedMergeOnLastAddUndo() const
134
0
{
135
0
    return getImpl().mbLastTryMerge;
136
0
}
137
138
void EditEngine::SetRefDevice( OutputDevice* pRefDev )
139
1.32M
{
140
1.32M
    getImpl().SetRefDevice(pRefDev);
141
1.32M
}
142
143
OutputDevice* EditEngine::GetRefDevice() const
144
753k
{
145
753k
    return getImpl().GetRefDevice();
146
753k
}
147
148
void EditEngine::SetRefMapMode( const MapMode& rMapMode )
149
1.03M
{
150
1.03M
    getImpl().SetRefMapMode(rMapMode);
151
1.03M
}
152
153
MapMode const & EditEngine::GetRefMapMode() const
154
77.3k
{
155
77.3k
    return getImpl().GetRefMapMode();
156
77.3k
}
157
158
void EditEngine::SetBackgroundColor( const Color& rColor )
159
336k
{
160
336k
    getImpl().SetBackgroundColor(rColor);
161
336k
}
162
163
Color const & EditEngine::GetBackgroundColor() const
164
170k
{
165
170k
    return getImpl().GetBackgroundColor();
166
170k
}
167
168
Color EditEngine::GetAutoColor() const
169
52.3k
{
170
52.3k
    return getImpl().GetAutoColor();
171
52.3k
}
172
173
void EditEngine::EnableAutoColor( bool b )
174
1.21k
{
175
1.21k
    getImpl().EnableAutoColor( b );
176
1.21k
}
177
178
void EditEngine::ForceAutoColor( bool b )
179
0
{
180
0
    getImpl().ForceAutoColor( b );
181
0
}
182
183
bool EditEngine::IsForceAutoColor() const
184
618k
{
185
618k
    return getImpl().IsForceAutoColor();
186
618k
}
187
188
const SfxItemSet& EditEngine::GetEmptyItemSet() const
189
2.34M
{
190
2.34M
    return getImpl().GetEmptyItemSet();
191
2.34M
}
192
193
void EditEngine::DrawText_ToPosition( OutputDevice& rOutDev, const Point& rStartPos, Degree10 nOrientation )
194
0
{
195
0
    getImpl().DrawText_ToPosition(rOutDev, rStartPos, nOrientation);
196
0
}
197
198
void EditEngine::DrawText_ToRectangle( OutputDevice& rOutDev, const tools::Rectangle& rOutRect, const Point& rStartDocPos, bool bHardClip )
199
0
{
200
0
    getImpl().DrawText_ToRectangle(rOutDev, rOutRect, rStartDocPos, bHardClip);
201
0
}
202
203
void EditEngine::InsertView(EditView* pEditView, size_t nIndex)
204
0
{
205
0
    getImpl().InsertView(pEditView, nIndex);
206
0
}
207
208
EditView* EditEngine::RemoveView( EditView* pView )
209
0
{
210
0
    return getImpl().RemoveView(pView);
211
0
}
212
213
void EditEngine::RemoveView(size_t nIndex)
214
0
{
215
0
    getImpl().RemoveView(nIndex);
216
0
}
217
218
EditView* EditEngine::GetView(size_t nIndex) const
219
0
{
220
0
    return getImpl().GetEditViews()[nIndex];
221
0
}
222
223
size_t EditEngine::GetViewCount() const
224
0
{
225
0
    return getImpl().GetEditViews().size();
226
0
}
227
228
bool EditEngine::HasView( EditView* pView ) const
229
0
{
230
0
    return getImpl().HasView(pView);
231
0
}
232
233
EditView* EditEngine::GetActiveView() const
234
4.91M
{
235
4.91M
    return getImpl().GetActiveView();
236
4.91M
}
237
238
void EditEngine::SetActiveView(EditView* pView)
239
0
{
240
0
    getImpl().SetActiveView(pView);
241
0
}
242
243
void EditEngine::SetDefTab( sal_uInt16 nDefTab )
244
884k
{
245
884k
    getImpl().SetDefTab(nDefTab);
246
884k
}
247
248
void EditEngine::SetPaperSize(const Size& rNewSize)
249
3.59M
{
250
3.59M
    getImpl().SetPaperSize(rNewSize);
251
3.59M
}
252
253
const Size& EditEngine::GetPaperSize() const
254
611k
{
255
611k
    return getImpl().GetPaperSize();
256
611k
}
257
258
void EditEngine::SetVertical(bool bVertical)
259
784k
{
260
784k
    getImpl().SetVertical(bVertical);
261
784k
}
262
263
void EditEngine::SetRotation(TextRotation nRotation)
264
0
{
265
0
    getImpl().SetRotation(nRotation);
266
0
}
267
268
TextRotation EditEngine::GetRotation() const
269
0
{
270
0
    return getImpl().GetRotation();
271
0
}
272
273
bool EditEngine::IsEffectivelyVertical() const
274
763k
{
275
763k
    return getImpl().IsEffectivelyVertical();
276
763k
}
277
278
bool EditEngine::IsTopToBottom() const
279
121k
{
280
121k
    return getImpl().IsTopToBottom();
281
121k
}
282
283
bool EditEngine::GetVertical() const
284
0
{
285
0
    return getImpl().GetVertical();
286
0
}
287
288
void EditEngine::SetTextColumns(sal_Int16 nColumns, sal_Int32 nSpacing)
289
797k
{
290
797k
    getImpl().SetTextColumns(nColumns, nSpacing);
291
797k
}
292
293
void EditEngine::SetFixedCellHeight( bool bUseFixedCellHeight )
294
18.8k
{
295
18.8k
    getImpl().SetFixedCellHeight(bUseFixedCellHeight);
296
18.8k
}
297
298
void EditEngine::SetDefaultHorizontalTextDirection( EEHorizontalTextDirection eHTextDir )
299
335k
{
300
335k
    getImpl().SetDefaultHorizontalTextDirection(eHTextDir);
301
335k
}
302
303
EEHorizontalTextDirection EditEngine::GetDefaultHorizontalTextDirection() const
304
167k
{
305
167k
    return getImpl().GetDefaultHorizontalTextDirection();
306
167k
}
307
308
SvtScriptType EditEngine::GetScriptType( const ESelection& rSelection ) const
309
670k
{
310
670k
    return getImpl().GetItemScriptType(getImpl().CreateSel(rSelection));
311
670k
}
312
313
editeng::LanguageSpan EditEngine::GetLanguage(const EditPaM& rPaM) const
314
0
{
315
0
    return getImpl().GetLanguage(rPaM);
316
0
}
317
318
editeng::LanguageSpan EditEngine::GetLanguage( sal_Int32 nPara, sal_Int32 nPos ) const
319
5.77k
{
320
5.77k
    return getImpl().GetLanguage( nPara, nPos );
321
5.77k
}
322
323
void EditEngine::TransliterateText( const ESelection& rSelection, TransliterationFlags nTransliterationMode )
324
0
{
325
0
    TransliterateText(CreateSelection(rSelection), nTransliterationMode);
326
0
}
327
328
EditSelection EditEngine::TransliterateText(const EditSelection& rSelection, TransliterationFlags nTransliterationMode)
329
0
{
330
0
    return getImpl().TransliterateText(rSelection, nTransliterationMode);
331
0
}
332
333
void EditEngine::SetAsianCompressionMode( CharCompressType n )
334
1.78M
{
335
1.78M
    getImpl().SetAsianCompressionMode( n );
336
1.78M
}
337
338
void EditEngine::SetKernAsianPunctuation( bool b )
339
1.78M
{
340
1.78M
    getImpl().SetKernAsianPunctuation( b );
341
1.78M
}
342
343
void EditEngine::SetAddExtLeading( bool b )
344
1.75M
{
345
1.75M
    getImpl().SetAddExtLeading( b );
346
1.75M
}
347
348
void EditEngine::SetPolygon( const basegfx::B2DPolyPolygon& rPolyPolygon )
349
0
{
350
0
    SetPolygon( rPolyPolygon, nullptr );
351
0
}
352
353
void EditEngine::SetPolygon(const basegfx::B2DPolyPolygon& rPolyPolygon, const basegfx::B2DPolyPolygon* pLinePolyPolygon)
354
0
{
355
0
    getImpl().SetPolygon(rPolyPolygon, pLinePolyPolygon);
356
0
}
357
358
void EditEngine::ClearPolygon()
359
2.31M
{
360
2.31M
    getImpl().SetTextRanger( nullptr );
361
2.31M
}
362
363
const Size& EditEngine::GetMinAutoPaperSize() const
364
0
{
365
0
    return getImpl().GetMinAutoPaperSize();
366
0
}
367
368
void EditEngine::SetMinAutoPaperSize( const Size& rSz )
369
2.31M
{
370
2.31M
    getImpl().SetMinAutoPaperSize( rSz );
371
2.31M
}
372
373
const Size& EditEngine::GetMaxAutoPaperSize() const
374
0
{
375
0
    return getImpl().GetMaxAutoPaperSize();
376
0
}
377
378
void EditEngine::SetMaxAutoPaperSize(const Size& rSize)
379
2.31M
{
380
2.31M
    getImpl().SetMaxAutoPaperSize(rSize);
381
2.31M
}
382
383
void EditEngine::SetMinColumnWrapHeight(tools::Long nVal)
384
463
{
385
463
    getImpl().SetMinColumnWrapHeight(nVal);
386
463
}
387
388
OUString EditEngine::GetText( LineEnd eEnd ) const
389
495
{
390
495
    return getImpl().GetEditDoc().GetText(eEnd);
391
495
}
392
393
OUString EditEngine::GetText( const ESelection& rESelection ) const
394
73.8k
{
395
73.8k
    return getImpl().GetText(rESelection);
396
73.8k
}
397
398
sal_Int32 EditEngine::GetTextLen() const
399
37.2k
{
400
37.2k
    return getImpl().GetEditDoc().GetTextLen();
401
37.2k
}
402
403
sal_Int32 EditEngine::GetParagraphCount() const
404
458M
{
405
458M
    return getImpl().maEditDoc.Count();
406
458M
}
407
408
sal_Int32 EditEngine::GetLineCount( sal_Int32 nParagraph ) const
409
0
{
410
0
    return getImpl().GetLineCount(nParagraph);
411
0
}
412
413
sal_Int32 EditEngine::GetLineLen( sal_Int32 nParagraph, sal_Int32 nLine ) const
414
0
{
415
0
    return getImpl().GetLineLen(nParagraph, nLine);
416
0
}
417
418
void EditEngine::GetLineBoundaries( /*out*/sal_Int32& rStart, /*out*/sal_Int32& rEnd, sal_Int32 nParagraph, sal_Int32 nLine ) const
419
0
{
420
0
    return getImpl().GetLineBoundaries(rStart, rEnd, nParagraph, nLine);
421
0
}
422
423
sal_Int32 EditEngine::GetLineNumberAtIndex( sal_Int32 nPara, sal_Int32 nIndex ) const
424
0
{
425
0
    return getImpl().GetLineNumberAtIndex(nPara, nIndex);
426
0
}
427
428
sal_uInt32 EditEngine::GetLineHeight( sal_Int32 nParagraph, sal_Int32 nLine )
429
0
{
430
    // If someone calls GetLineHeight() with an empty Engine.
431
0
    return getImpl().GetLineHeight( nParagraph, nLine );
432
0
}
433
434
tools::Rectangle EditEngine::GetParaBounds( sal_Int32 nPara )
435
0
{
436
0
    return getImpl().GetParaBounds(nPara);
437
0
}
438
439
sal_uInt32 EditEngine::GetTextHeight( sal_Int32 nParagraph ) const
440
0
{
441
0
    getImpl().EnsureDocumentFormatted();
442
0
    sal_uInt32 nHeight = getImpl().GetParaHeight(nParagraph);
443
0
    return nHeight;
444
0
}
445
446
OUString EditEngine::GetWord(const EPaM& rPos)
447
0
{
448
0
    EditSelection aSel(CreateSelection(ESelection(rPos)));
449
0
    aSel = SelectWord(aSel);
450
0
    return GetSelected(aSel);
451
0
}
452
453
ESelection EditEngine::GetWord( const ESelection& rSelection, sal_uInt16 nWordType  ) const
454
0
{
455
    // ImpEditEngine-Iteration-Methods should be const!
456
0
    EditSelection aSel(getImpl().CreateSel(rSelection));
457
0
    aSel = getImpl().SelectWord(aSel, nWordType);
458
0
    return CreateESelection(aSel);
459
0
}
460
461
void EditEngine::CheckIdleFormatter()
462
0
{
463
0
    getImpl().CheckIdleFormatter();
464
0
}
465
466
bool EditEngine::IsIdleFormatterActive() const
467
0
{
468
0
    return getImpl().maIdleFormatter.IsActive();
469
0
}
470
471
ParaPortion* EditEngine::FindParaPortion(ContentNode const * pNode)
472
0
{
473
0
    return getImpl().FindParaPortion(pNode);
474
0
}
475
476
const ParaPortion* EditEngine::FindParaPortion(ContentNode const * pNode) const
477
0
{
478
0
    return getImpl().FindParaPortion(pNode);
479
0
}
480
481
const ParaPortion* EditEngine::GetPrevVisPortion(const ParaPortion* pCurPortion) const
482
0
{
483
0
    return getImpl().GetPrevVisPortion(pCurPortion);
484
0
}
485
486
SvtScriptType EditEngine::GetScriptType(const EditSelection& rSel) const
487
0
{
488
0
    return getImpl().GetItemScriptType(rSel);
489
0
}
490
491
void EditEngine::RemoveParaPortion(sal_Int32 nNode)
492
0
{
493
0
    getImpl().GetParaPortions().Remove(nNode);
494
0
}
495
496
void EditEngine::SetCallParaInsertedOrDeleted(bool b)
497
0
{
498
0
    getImpl().SetCallParaInsertedOrDeleted(b);
499
0
}
500
501
bool EditEngine::IsCallParaInsertedOrDeleted() const
502
0
{
503
0
    return getImpl().IsCallParaInsertedOrDeleted();
504
0
}
505
506
void EditEngine::AppendDeletedNodeInfo(DeletedNodeInfo* pInfo)
507
0
{
508
0
    getImpl().maDeletedNodes.push_back(std::unique_ptr<DeletedNodeInfo>(pInfo));
509
0
}
510
511
void EditEngine::UpdateSelections()
512
0
{
513
0
    getImpl().UpdateSelections();
514
0
}
515
516
void EditEngine::InsertContent(std::unique_ptr<ContentNode> pNode, sal_Int32 nPos)
517
0
{
518
0
    getImpl().InsertContent(std::move(pNode), nPos);
519
0
}
520
521
EditPaM EditEngine::SplitContent(sal_Int32 nNode, sal_Int32 nSepPos)
522
0
{
523
0
    return getImpl().SplitContent(nNode, nSepPos);
524
0
}
525
526
EditPaM EditEngine::ConnectContents(sal_Int32 nLeftNode, bool bBackward)
527
0
{
528
0
    return getImpl().ConnectContents(nLeftNode, bBackward);
529
0
}
530
531
void EditEngine::InsertFeature(const EditSelection& rEditSelection, const SfxPoolItem& rItem)
532
0
{
533
0
    getImpl().ImpInsertFeature(rEditSelection, rItem);
534
0
}
535
536
EditSelection EditEngine::MoveParagraphs(const Range& rParagraphs, sal_Int32 nNewPos)
537
0
{
538
0
    return getImpl().MoveParagraphs(rParagraphs, nNewPos, nullptr);
539
0
}
540
541
void EditEngine::RemoveCharAttribs(sal_Int32 nPara, sal_uInt16 nWhich, bool bRemoveFeatures)
542
5.52M
{
543
5.52M
    getImpl().RemoveCharAttribs(nPara, nWhich, bRemoveFeatures);
544
5.52M
}
545
546
void EditEngine::RemoveCharAttribs(const EditSelection& rSel, bool bRemoveParaAttribs, sal_uInt16 nWhich)
547
0
{
548
0
    const EERemoveParaAttribsMode eMode = bRemoveParaAttribs?
549
0
        EERemoveParaAttribsMode::RemoveAll :
550
0
        EERemoveParaAttribsMode::RemoveCharItems;
551
0
    getImpl().RemoveCharAttribs(rSel, eMode, nWhich);
552
0
}
553
554
void EditEngine::RemoveCharAttribs(const EditSelection& rSel, EERemoveParaAttribsMode eMode, sal_uInt16 nWhich)
555
0
{
556
0
    getImpl().RemoveCharAttribs(rSel, eMode, nWhich);
557
0
}
558
559
EditEngine::ViewsType& EditEngine::GetEditViews()
560
0
{
561
0
    return getImpl().GetEditViews();
562
0
}
563
564
const EditEngine::ViewsType& EditEngine::GetEditViews() const
565
0
{
566
0
    return getImpl().GetEditViews();
567
0
}
568
569
void EditEngine::SetUndoMode(bool b)
570
0
{
571
0
    getImpl().SetUndoMode(b);
572
0
}
573
574
void EditEngine::FormatAndLayout(EditView* pCurView, bool bCalledFromUndo)
575
0
{
576
0
    getImpl().FormatAndLayout(pCurView, bCalledFromUndo);
577
0
}
578
579
void EditEngine::Undo(EditView* pView)
580
0
{
581
0
    getImpl().Undo(pView);
582
0
}
583
584
void EditEngine::Redo(EditView* pView)
585
0
{
586
0
    getImpl().Redo(pView);
587
0
}
588
589
uno::Reference<datatransfer::XTransferable> EditEngine::CreateTransferable(const EditSelection& rSelection)
590
0
{
591
0
    return getImpl().CreateTransferable(rSelection);
592
0
}
593
594
void EditEngine::ParaAttribsToCharAttribs(ContentNode* pNode)
595
13.8k
{
596
13.8k
    getImpl().ParaAttribsToCharAttribs(pNode);
597
13.8k
}
598
599
EditPaM EditEngine::CreateEditPaM(const EPaM& rEPaM)
600
0
{
601
0
    return getImpl().CreateEditPaM(rEPaM);
602
0
}
603
604
EditPaM EditEngine::ConnectParagraphs(
605
        ContentNode* pLeft, ContentNode* pRight, bool bBackward)
606
55.2k
{
607
55.2k
    return getImpl().ImpConnectParagraphs(pLeft, pRight, bBackward);
608
55.2k
}
609
610
EditPaM EditEngine::InsertField(const EditSelection& rEditSelection, const SvxFieldItem& rFld)
611
23.9k
{
612
23.9k
    return getImpl().InsertField(rEditSelection, rFld);
613
23.9k
}
614
615
EditPaM EditEngine::InsertText(const EditSelection& aCurEditSelection, const OUString& rStr)
616
3.03M
{
617
3.03M
    return getImpl().InsertText(aCurEditSelection, rStr);
618
3.03M
}
619
620
EditSelection EditEngine::InsertText(const EditTextObject& rTextObject, const EditSelection& rSel)
621
0
{
622
0
    return getImpl().InsertText(rTextObject, rSel);
623
0
}
624
625
EditSelection EditEngine::InsertText(
626
    uno::Reference<datatransfer::XTransferable > const & rxDataObj,
627
    const OUString& rBaseURL, const EditPaM& rPaM, bool bUseSpecial, SotClipboardFormatId format)
628
0
{
629
0
    return getImpl().PasteText(rxDataObj, rBaseURL, rPaM, bUseSpecial, format);
630
0
}
631
632
EditPaM EditEngine::EndOfWord(const EditPaM& rPaM)
633
0
{
634
0
    return getImpl().EndOfWord(rPaM);
635
0
}
636
637
EditPaM EditEngine::GetPaM(const Point& aDocPos, bool bSmart)
638
0
{
639
0
    return getImpl().GetPaM(aDocPos, bSmart);
640
0
}
641
642
EditSelection EditEngine::SelectWord(
643
        const EditSelection& rCurSelection, sal_Int16 nWordType)
644
0
{
645
0
    return getImpl().SelectWord(rCurSelection, nWordType);
646
0
}
647
648
tools::Long EditEngine::GetXPos(ParaPortion const& rParaPortion, EditLine const& rLine, sal_Int32 nIndex, bool bPreferPortionStart) const
649
0
{
650
0
    return getImpl().GetXPos(rParaPortion, rLine, nIndex, bPreferPortionStart);
651
0
}
652
653
Range EditEngine::GetLineXPosStartEnd(ParaPortion const& rParaPortion, EditLine const& rLine) const
654
0
{
655
0
    return getImpl().GetLineXPosStartEnd(rParaPortion, rLine);
656
0
}
657
658
bool EditEngine::IsFormatted() const
659
0
{
660
0
    return getImpl().IsFormatted();
661
0
}
662
663
EditPaM EditEngine::CursorLeft(const EditPaM& rPaM, sal_uInt16 nCharacterIteratorMode)
664
31.6k
{
665
31.6k
    return getImpl().CursorLeft(rPaM, nCharacterIteratorMode);
666
31.6k
}
667
668
EditPaM EditEngine::CursorRight(const EditPaM& rPaM, sal_uInt16 nCharacterIteratorMode)
669
31.6k
{
670
31.6k
    return getImpl().CursorRight(rPaM, nCharacterIteratorMode);
671
31.6k
}
672
673
InternalEditStatus& EditEngine::GetInternalEditStatus()
674
0
{
675
0
    return getImpl().GetStatus();
676
0
}
677
678
EditDoc& EditEngine::GetEditDoc()
679
3.71M
{
680
3.71M
    return getImpl().GetEditDoc();
681
3.71M
}
682
683
const EditDoc& EditEngine::GetEditDoc() const
684
0
{
685
0
    return getImpl().GetEditDoc();
686
0
}
687
688
void EditEngine::dumpAsXmlEditDoc(xmlTextWriterPtr pWriter) const
689
0
{
690
0
    getImpl().GetEditDoc().dumpAsXml(pWriter);
691
0
}
692
693
ParaPortionList& EditEngine::GetParaPortions()
694
0
{
695
0
    return getImpl().GetParaPortions();
696
0
}
697
698
const ParaPortionList& EditEngine::GetParaPortions() const
699
0
{
700
0
    return getImpl().GetParaPortions();
701
0
}
702
703
void EditEngine::SeekCursor(ContentNode* pNode, sal_Int32 nPos, SvxFont& rFont)
704
0
{
705
0
    getImpl().SeekCursor(pNode, nPos, rFont);
706
0
}
707
708
EditPaM EditEngine::DeleteSelection(const EditSelection& rSel)
709
1.39k
{
710
1.39k
    return getImpl().ImpDeleteSelection(rSel);
711
1.39k
}
712
713
ESelection EditEngine::CreateESelection(const EditSelection& rSel) const
714
9.89M
{
715
9.89M
    return getImpl().CreateESel(rSel);
716
9.89M
}
717
718
EditSelection EditEngine::CreateSelection(const ESelection& rSel)
719
217k
{
720
217k
    return getImpl().CreateSel(rSel);
721
217k
}
722
723
ESelection EditEngine::NormalizeESelection(const ESelection& rSel) const
724
0
{
725
0
    return CreateESelection(getImpl().CreateNormalizedSel(rSel));
726
0
}
727
728
EPaM EditEngine::GetEnd() const
729
0
{
730
0
    auto para = GetEditDoc().Count();
731
0
    if (para)
732
0
        --para;
733
0
    return { para, GetTextLen(para) };
734
0
}
735
736
const SfxItemSet& EditEngine::GetBaseParaAttribs(sal_Int32 nPara) const
737
78.3k
{
738
78.3k
    return getImpl().GetParaAttribs(nPara);
739
78.3k
}
740
741
void EditEngine::SetParaAttribsOnly(sal_Int32 nPara, const SfxItemSet& rSet)
742
604k
{
743
604k
    getImpl().SetParaAttribs(nPara, rSet);
744
604k
}
745
746
void EditEngine::SetAttribs(const EditSelection& rSel, const SfxItemSet& rSet, SetAttribsMode nSpecial)
747
158k
{
748
158k
    getImpl().SetAttribs(rSel, rSet, nSpecial);
749
158k
}
750
751
OUString EditEngine::GetSelected(const EditSelection& rSel) const
752
0
{
753
0
    return getImpl().GetSelected(rSel);
754
0
}
755
756
EditPaM EditEngine::DeleteSelected(const EditSelection& rSel)
757
0
{
758
0
    return getImpl().DeleteSelected(rSel);
759
0
}
760
761
void EditEngine::HandleBeginPasteOrDrop(PasteOrDropInfos& rInfos)
762
0
{
763
0
    getImpl().maBeginPasteOrDropHdl.Call(rInfos);
764
0
}
765
766
void EditEngine::HandleEndPasteOrDrop(PasteOrDropInfos& rInfos)
767
0
{
768
0
    getImpl().maEndPasteOrDropHdl.Call(rInfos);
769
0
}
770
771
bool EditEngine::HasText() const
772
0
{
773
0
    return getImpl().ImplHasText();
774
0
}
775
776
const EditSelectionEngine& EditEngine::GetSelectionEngine() const
777
0
{
778
0
    return getImpl().maSelEngine;
779
0
}
780
781
void EditEngine::SetInSelectionMode(bool b)
782
0
{
783
0
    getImpl().mbInSelection = b;
784
0
}
785
786
bool EditEngine::PostKeyEvent( const KeyEvent& rKeyEvent, EditView* pEditView, vcl::Window const * pFrameWin )
787
0
{
788
0
    return getImpl().PostKeyEvent(rKeyEvent, pEditView, pFrameWin);
789
0
}
790
791
sal_uInt32 EditEngine::GetTextHeight() const
792
67.0k
{
793
67.0k
    getImpl().EnsureDocumentFormatted();
794
67.0k
    sal_uInt32 nHeight = !IsEffectivelyVertical() ? getImpl().GetTextHeight() : getImpl().CalcTextWidth( true );
795
67.0k
    return nHeight;
796
67.0k
}
797
798
sal_uInt32 EditEngine::CalcTextWidth()
799
2.17k
{
800
2.17k
    getImpl().EnsureDocumentFormatted();
801
2.17k
    sal_uInt32 nWidth = !IsEffectivelyVertical() ? getImpl().CalcTextWidth(true) : getImpl().GetTextHeight();
802
2.17k
    return nWidth;
803
2.17k
}
804
805
bool EditEngine::SetUpdateLayout(bool bUpdate, bool bRestoring)
806
22.6M
{
807
22.6M
    bool bPrevUpdateLayout = getImpl().SetUpdateLayout(bUpdate);
808
22.6M
    if (getImpl().mpActiveView)
809
0
    {
810
        // Not an activation if we are restoring the previous update mode.
811
0
        getImpl().mpActiveView->ShowCursor(false, false, /*bActivate=*/!bRestoring);
812
0
    }
813
22.6M
    return bPrevUpdateLayout;
814
22.6M
}
815
816
bool EditEngine::IsUpdateLayout() const
817
0
{
818
0
    return getImpl().IsUpdateLayout();
819
0
}
820
821
void EditEngine::Clear()
822
1.87M
{
823
1.87M
    getImpl().Clear();
824
1.87M
}
825
826
void EditEngine::SetText( const OUString& rText )
827
478k
{
828
478k
    getImpl().SetText(rText);
829
478k
    if (!rText.isEmpty() && getImpl().IsUpdateLayout())
830
42.7k
        getImpl().FormatAndLayout();
831
478k
}
832
833
ErrCode EditEngine::Read( SvStream& rInput, const OUString& rBaseURL, EETextFormat eFormat, SvKeyValueIterator* pHTTPHeaderAttrs /* = NULL */ )
834
48.8k
{
835
48.8k
    return getImpl().Read(rInput, rBaseURL, eFormat, pHTTPHeaderAttrs);
836
48.8k
}
837
838
void EditEngine::Write( SvStream& rOutput, EETextFormat eFormat )
839
0
{
840
0
    getImpl().Write(rOutput, eFormat);
841
0
}
842
843
EditTextObject EditEngine::CreateTextObject()
844
459k
{
845
459k
    return getImpl().CreateTextObject();
846
459k
}
847
848
EditTextObject EditEngine::CreateTextObject( const ESelection& rESelection )
849
217k
{
850
217k
    return getImpl().CreateTextObject(CreateSelection(rESelection));
851
217k
}
852
853
EditTextObject EditEngine::GetEmptyTextObject()
854
0
{
855
0
    return getImpl().GetEmptyTextObject();
856
0
}
857
858
void EditEngine::SetText( const EditTextObject& rTextObject )
859
1.05M
{
860
1.05M
    getImpl().SetText(rTextObject);
861
1.05M
    getImpl().FormatAndLayout();
862
1.05M
}
863
864
void EditEngine::ShowParagraph( sal_Int32 nParagraph, bool bShow )
865
0
{
866
0
    getImpl().ShowParagraph(nParagraph, bShow);
867
0
}
868
869
void EditEngine::SetNotifyHdl( const Link<EENotify&,void>& rLink )
870
65.8k
{
871
65.8k
    getImpl().SetNotifyHdl(rLink);
872
65.8k
}
873
874
Link<EENotify&,void> const & EditEngine::GetNotifyHdl() const
875
13.8M
{
876
13.8M
    return getImpl().GetNotifyHdl();
877
13.8M
}
878
879
void EditEngine::SetStatusEventHdl( const Link<EditStatus&, void>& rLink )
880
0
{
881
0
    getImpl().SetStatusEventHdl(rLink);
882
0
}
883
884
Link<EditStatus&, void> const & EditEngine::GetStatusEventHdl() const
885
0
{
886
0
    return getImpl().GetStatusEventHdl();
887
0
}
888
889
void EditEngine::SetHtmlImportHdl( const Link<HtmlImportInfo&,void>& rLink )
890
42.3k
{
891
42.3k
    getImpl().maHtmlImportHdl = rLink;
892
42.3k
}
893
894
const Link<HtmlImportInfo&,void>& EditEngine::GetHtmlImportHdl() const
895
21.1k
{
896
21.1k
    return getImpl().maHtmlImportHdl;
897
21.1k
}
898
899
void EditEngine::SetRtfImportHdl( const Link<RtfImportInfo&,void>& rLink )
900
55.3k
{
901
55.3k
    getImpl().maRtfImportHdl = rLink;
902
55.3k
}
903
904
const Link<RtfImportInfo&,void>& EditEngine::GetRtfImportHdl() const
905
27.6k
{
906
27.6k
    return getImpl().maRtfImportHdl;
907
27.6k
}
908
909
void EditEngine::SetBeginMovingParagraphsHdl( const Link<MoveParagraphsInfo&,void>& rLink )
910
502k
{
911
502k
    getImpl().maBeginMovingParagraphsHdl = rLink;
912
502k
}
913
914
void EditEngine::SetEndMovingParagraphsHdl( const Link<MoveParagraphsInfo&,void>& rLink )
915
502k
{
916
502k
    getImpl().maEndMovingParagraphsHdl = rLink;
917
502k
}
918
919
void EditEngine::SetBeginPasteOrDropHdl( const Link<PasteOrDropInfos&,void>& rLink )
920
502k
{
921
922
502k
    getImpl().maBeginPasteOrDropHdl = rLink;
923
502k
}
924
925
void EditEngine::SetEndPasteOrDropHdl( const Link<PasteOrDropInfos&,void>& rLink )
926
502k
{
927
502k
    getImpl().maEndPasteOrDropHdl = rLink;
928
502k
}
929
930
EditTextObject EditEngine::CreateTextObject( sal_Int32 nPara, sal_Int32 nParas )
931
1.97M
{
932
1.97M
    return getImpl().CreateTextObject(nPara, nParas);
933
1.97M
}
934
935
void EditEngine::RemoveParagraph( sal_Int32 nPara )
936
0
{
937
0
    getImpl().RemoveParagraph(nPara);
938
0
}
939
940
sal_Int32 EditEngine::GetTextLen( sal_Int32 nPara ) const
941
30.1M
{
942
30.1M
    ContentNode& rNode = getImpl().GetEditDoc().GetObject(nPara);
943
30.1M
    return rNode.Len();
944
30.1M
}
945
946
OUString EditEngine::GetText( sal_Int32 nPara ) const
947
1.55M
{
948
1.55M
    OUString aStr;
949
1.55M
    if (0 <= nPara && nPara < getImpl().GetEditDoc().Count())
950
1.55M
        aStr = getImpl().GetEditDoc().GetParaAsString(nPara);
951
1.55M
    return aStr;
952
1.55M
}
953
954
void EditEngine::SetModifyHdl( const Link<LinkParamNone*,void>& rLink )
955
0
{
956
0
    getImpl().SetModifyHdl(rLink);
957
0
}
958
959
void EditEngine::ClearModifyFlag()
960
0
{
961
0
    getImpl().SetModifyFlag(false);
962
0
}
963
964
void EditEngine::SetModified()
965
30
{
966
30
    getImpl().SetModifyFlag(true);
967
30
}
968
969
bool EditEngine::IsModified() const
970
0
{
971
0
    return getImpl().IsModified();
972
0
}
973
974
bool EditEngine::IsInSelectionMode() const
975
0
{
976
0
    return getImpl().IsInSelectionMode() || getImpl().GetSelEngine().IsInSelection();
977
0
}
978
979
void EditEngine::InsertParagraph( sal_Int32 nPara, const EditTextObject& rTxtObj, bool bAppend )
980
2.17k
{
981
2.17k
    getImpl().InsertParagraph(nPara, rTxtObj, bAppend);
982
2.17k
}
983
984
void EditEngine::InsertParagraph(sal_Int32 nPara, const OUString& rTxt)
985
409k
{
986
409k
    getImpl().InsertParagraph(nPara, rTxt);
987
409k
}
988
989
void EditEngine::SetText(sal_Int32 nPara, const OUString& rTxt)
990
427k
{
991
427k
    getImpl().SetParagraphText(nPara, rTxt);
992
427k
}
993
994
void EditEngine::SetParaAttribs( sal_Int32 nPara, const SfxItemSet& rSet )
995
12.0M
{
996
12.0M
    Outliner* pOwner = getImpl().GetOwner();
997
998
12.0M
    if (pOwner)
999
11.8M
    {
1000
11.8M
        if ( !IsInUndo() && IsUndoEnabled() )
1001
2.71M
            pOwner->UndoActionStart( OLUNDO_ATTR );
1002
11.8M
    }
1003
1004
12.0M
    getImpl().SetParaAttribs(nPara, rSet);
1005
12.0M
    if (getImpl().IsUpdateLayout())
1006
106k
        getImpl().FormatAndLayout();
1007
1008
12.0M
    if (pOwner)
1009
11.8M
    {
1010
11.8M
        pOwner->ImplCheckNumBulletItem( nPara );
1011
        // #i100014#
1012
        // It is not a good idea to subtract 1 from a count and cast the result
1013
        // to sal_uInt16 without check, if the count is 0.
1014
11.8M
        pOwner->ImplCheckParagraphs( nPara, pOwner->pEditEngine->GetParagraphCount() );
1015
1016
11.8M
        if ( !IsInUndo() && IsUndoEnabled() )
1017
2.71M
            pOwner->UndoActionEnd();
1018
11.8M
    }
1019
12.0M
}
1020
1021
const SfxItemSet& EditEngine::GetParaAttribs( sal_Int32 nPara ) const
1022
11.1M
{
1023
11.1M
    return getImpl().GetParaAttribs(nPara);
1024
11.1M
}
1025
1026
bool EditEngine::HasParaAttrib( sal_Int32 nPara, sal_uInt16 nWhich ) const
1027
0
{
1028
0
    return getImpl().HasParaAttrib(nPara, nWhich);
1029
0
}
1030
1031
const SfxPoolItem& EditEngine::GetParaAttrib( sal_Int32 nPara, sal_uInt16 nWhich ) const
1032
59.3M
{
1033
59.3M
    return getImpl().GetParaAttrib(nPara, nWhich);
1034
59.3M
}
1035
1036
void EditEngine::SetCharAttribs(sal_Int32 nPara, const SfxItemSet& rSet)
1037
0
{
1038
0
    EditSelection aSel(getImpl().ConvertSelection(nPara, 0, nPara, GetTextLen(nPara)));
1039
    // This is called by sd::View::OnBeginPasteOrDrop(), updating the cursor position on undo is not
1040
    // wanted.
1041
0
    getImpl().SetAttribs(aSel, rSet, /*nSpecial=*/SetAttribsMode::NONE, /*bSetSelection=*/false);
1042
0
    if (getImpl().IsUpdateLayout())
1043
0
        getImpl().FormatAndLayout();
1044
0
}
1045
1046
void EditEngine::GetCharAttribs( sal_Int32 nPara, std::vector<EECharAttrib>& rList ) const
1047
0
{
1048
0
    getImpl().GetCharAttribs(nPara, rList);
1049
0
}
1050
1051
SfxItemSet EditEngine::GetAttribs( const ESelection& rSel, EditEngineAttribs nOnlyHardAttrib )
1052
1.82M
{
1053
1.82M
    return getImpl().GetAttribs(getImpl().CreateNormalizedSel(rSel), nOnlyHardAttrib);
1054
1.82M
}
1055
1056
SfxItemSet EditEngine::GetAttribs( sal_Int32 nPara, sal_Int32 nStart, sal_Int32 nEnd, GetAttribsFlags nFlags ) const
1057
234k
{
1058
234k
    return getImpl().GetAttribs(nPara, nStart, nEnd, nFlags);
1059
234k
}
1060
1061
void EditEngine::RemoveAttribs( const ESelection& rSelection, bool bRemoveParaAttribs, sal_uInt16 nWhich )
1062
3.04k
{
1063
3.04k
    getImpl().RemoveAttribs(rSelection, bRemoveParaAttribs, nWhich);
1064
3.04k
}
1065
1066
vcl::Font EditEngine::GetStandardFont( sal_Int32 nPara )
1067
0
{
1068
0
    return GetStandardSvxFont( nPara );
1069
0
}
1070
1071
SvxFont EditEngine::GetStandardSvxFont( sal_Int32 nPara )
1072
0
{
1073
0
    ContentNode& rNode = getImpl().GetEditDoc().GetObject( nPara );
1074
0
    return rNode.GetCharAttribs().GetDefFont();
1075
0
}
1076
1077
void EditEngine::StripPortions(StripPortionsHelper& rStripPortionsHelper)
1078
566
{
1079
566
    ScopedVclPtrInstance< VirtualDevice > aTmpDev;
1080
566
    tools::Rectangle aBigRect( Point( 0, 0 ), Size( 0x7FFFFFFF, 0x7FFFFFFF ) );
1081
566
    if ( IsEffectivelyVertical() )
1082
0
    {
1083
0
        if( IsTopToBottom() )
1084
0
        {
1085
0
            aBigRect.SetRight( 0 );
1086
0
            aBigRect.SetLeft( -0x7FFFFFFF );
1087
0
        }
1088
0
        else
1089
0
        {
1090
0
            aBigRect.SetTop( -0x7FFFFFFF );
1091
0
            aBigRect.SetBottom( 0 );
1092
0
        }
1093
0
    }
1094
1095
566
    getImpl().StripAllPortions(*aTmpDev, aBigRect, rStripPortionsHelper);
1096
566
}
1097
1098
void EditEngine::GetPortions( sal_Int32 nPara, std::vector<sal_Int32>& rList )
1099
4.67k
{
1100
4.67k
    if (!getImpl().IsFormatted())
1101
2
        getImpl().FormatFullDoc();
1102
1103
4.67k
    const ParaPortion* pParaPortion = getImpl().GetParaPortions().SafeGetObject(nPara);
1104
4.67k
    if ( pParaPortion )
1105
4.67k
    {
1106
4.67k
        sal_Int32 nEnd = 0;
1107
4.67k
        sal_Int32 nTextPortions = pParaPortion->GetTextPortions().Count();
1108
9.39k
        for ( sal_Int32 n = 0; n < nTextPortions; n++ )
1109
4.72k
        {
1110
4.72k
            nEnd = nEnd + pParaPortion->GetTextPortions()[n].GetLen();
1111
4.72k
            rList.push_back( nEnd );
1112
4.72k
        }
1113
4.67k
    }
1114
4.67k
}
1115
1116
void EditEngine::SetFlatMode( bool bFlat)
1117
0
{
1118
0
    getImpl().SetFlatMode(bFlat);
1119
0
}
1120
1121
bool EditEngine::IsFlatMode() const
1122
1.34M
{
1123
1.34M
    return !getImpl().GetStatus().UseCharAttribs();
1124
1.34M
}
1125
1126
void EditEngine::SetSingleLine(bool bValue)
1127
16.6k
{
1128
16.6k
    if (bValue == getImpl().GetStatus().IsSingleLine())
1129
14.2k
        return;
1130
1131
2.35k
    if (bValue)
1132
1.17k
        getImpl().GetStatus().TurnOnFlags(EEControlBits::SINGLELINE);
1133
1.17k
    else
1134
1.17k
        getImpl().GetStatus().TurnOffFlags(EEControlBits::SINGLELINE);
1135
2.35k
}
1136
1137
void EditEngine::SetControlWord( EEControlBits nWord )
1138
8.79M
{
1139
8.79M
    getImpl().SetControlWord(nWord);
1140
8.79M
}
1141
1142
EEControlBits EditEngine::GetControlWord() const
1143
10.1M
{
1144
10.1M
    return getImpl().GetStatus().GetControlWord();
1145
10.1M
}
1146
1147
tools::Long EditEngine::GetFirstLineStartX( sal_Int32 nParagraph )
1148
0
{
1149
1150
0
    tools::Long nX = 0;
1151
0
    const ParaPortion* pPPortion = getImpl().GetParaPortions().SafeGetObject(nParagraph);
1152
0
    if ( pPPortion )
1153
0
    {
1154
0
        DBG_ASSERT(getImpl().IsFormatted() || !getImpl().IsFormatting(), "GetFirstLineStartX: Doc not formatted - unable to format!");
1155
0
        getImpl().EnsureDocumentFormatted();
1156
0
        const EditLine& rFirstLine = pPPortion->GetLines()[0];
1157
0
        nX = rFirstLine.GetStartPosX();
1158
0
    }
1159
0
    return nX;
1160
0
}
1161
1162
Point EditEngine::GetDocPos( const Point& rPaperPos ) const
1163
0
{
1164
0
    Point aDocPos( rPaperPos );
1165
0
    if ( IsEffectivelyVertical() )
1166
0
    {
1167
0
        if ( IsTopToBottom() )
1168
0
        {
1169
0
            aDocPos.setX( rPaperPos.Y() );
1170
0
            aDocPos.setY( GetPaperSize().Width() - rPaperPos.X() );
1171
0
        }
1172
0
        else
1173
0
        {
1174
0
            aDocPos.setX( rPaperPos.Y() );
1175
0
            aDocPos.setY( rPaperPos.X() );
1176
0
        }
1177
0
    }
1178
0
    return aDocPos;
1179
0
}
1180
1181
Point EditEngine::GetDocPosTopLeft( sal_Int32 nParagraph )
1182
0
{
1183
0
    return getImpl().GetDocPosTopLeft(nParagraph);
1184
0
}
1185
1186
const SvxNumberFormat* EditEngine::GetNumberFormat( sal_Int32 nPara ) const
1187
3.20M
{
1188
3.20M
    if (Outliner* pOwner = getImpl().GetOwner())
1189
2.68M
       return pOwner->GetNumberFormat( nPara );
1190
524k
    return nullptr;
1191
3.20M
}
1192
1193
bool EditEngine::IsRightToLeft( sal_Int32 nPara ) const
1194
0
{
1195
0
    return getImpl().IsRightToLeft(nPara);
1196
0
}
1197
1198
bool EditEngine::IsTextPos( const Point& rPaperPos, sal_uInt16 nBorder )
1199
0
{
1200
0
    getImpl().EnsureDocumentFormatted();
1201
1202
    // take unrotated positions for calculation here
1203
0
    Point aDocPos = GetDocPos( rPaperPos );
1204
1205
0
    if ((aDocPos.Y() > 0) && (o3tl::make_unsigned(aDocPos.Y()) < getImpl().GetTextHeight()))
1206
0
        return getImpl().IsTextPos(aDocPos, nBorder);
1207
0
    return false;
1208
0
}
1209
1210
void EditEngine::SetItemPool( SfxItemPool* pPool )
1211
377k
{
1212
377k
    getImpl().GetEditDoc().SetItemPool(pPool);
1213
377k
}
1214
1215
SfxItemPool* EditEngine::GetItemPool() const
1216
37.5k
{
1217
37.5k
    return &getImpl().GetEditDoc().GetItemPool();
1218
37.5k
}
1219
1220
void EditEngine::QuickSetAttribs( const SfxItemSet& rSet, const ESelection& rSel )
1221
594k
{
1222
594k
    getImpl().SetAttribs(getImpl().CreateNormalizedSel(rSel), rSet);
1223
594k
}
1224
1225
void EditEngine::QuickMarkInvalid( const ESelection& rSel )
1226
1.23M
{
1227
1.23M
    DBG_ASSERT(rSel.start.nPara < getImpl().GetEditDoc().Count(), "MarkInvalid: Start out of Range!");
1228
1.23M
    DBG_ASSERT(rSel.end.nPara < getImpl().GetEditDoc().Count(), "MarkInvalid: End out of Range!");
1229
2.46M
    for (sal_Int32 nPara = rSel.start.nPara; nPara <= rSel.end.nPara; nPara++)
1230
1.23M
    {
1231
1.23M
        ParaPortion* pPortion = getImpl().GetParaPortions().SafeGetObject(nPara);
1232
1.23M
        if ( pPortion )
1233
1.23M
            pPortion->MarkSelectionInvalid( 0 );
1234
1.23M
    }
1235
1.23M
}
1236
1237
void EditEngine::QuickInsertText(const OUString& rText, const ESelection& rSel)
1238
363k
{
1239
363k
    getImpl().ImpInsertText(getImpl().CreateNormalizedSel(rSel), rText);
1240
363k
}
1241
1242
void EditEngine::QuickDelete( const ESelection& rSel )
1243
69.0k
{
1244
69.0k
    getImpl().ImpDeleteSelection(getImpl().CreateNormalizedSel(rSel));
1245
69.0k
}
1246
1247
void EditEngine::QuickMarkToBeRepainted( sal_Int32 nPara )
1248
0
{
1249
0
    ParaPortion* pPortion = getImpl().GetParaPortions().SafeGetObject(nPara);
1250
0
    if ( pPortion )
1251
0
        pPortion->SetMustRepaint( true );
1252
0
}
1253
1254
void EditEngine::QuickInsertLineBreak( const ESelection& rSel )
1255
10.2k
{
1256
10.2k
    getImpl().InsertLineBreak(getImpl().CreateNormalizedSel(rSel));
1257
10.2k
}
1258
1259
void EditEngine::QuickInsertField( const SvxFieldItem& rFld, const ESelection& rSel )
1260
501k
{
1261
501k
    getImpl().ImpInsertFeature(getImpl().CreateNormalizedSel(rSel), rFld);
1262
501k
}
1263
1264
void EditEngine::QuickFormatDoc( bool bFull )
1265
884
{
1266
884
    if (bFull)
1267
0
        getImpl().FormatFullDoc();
1268
884
    else
1269
884
        getImpl().FormatDoc();
1270
1271
    // Don't pass active view, maybe selection is not updated yet...
1272
884
    getImpl().UpdateViews();
1273
884
}
1274
1275
void EditEngine::SetStyleSheet(const EditSelection& aSel, SfxStyleSheet* pStyle)
1276
0
{
1277
0
    getImpl().SetStyleSheet(aSel, pStyle);
1278
0
}
1279
1280
void EditEngine::SetStyleSheet( sal_Int32 nPara, SfxStyleSheet* pStyle )
1281
2.46M
{
1282
2.46M
    getImpl().SetStyleSheet(nPara, pStyle);
1283
2.46M
}
1284
1285
const SfxStyleSheet* EditEngine::GetStyleSheet( sal_Int32 nPara ) const
1286
0
{
1287
0
    return getImpl().GetStyleSheet(nPara);
1288
0
}
1289
1290
SfxStyleSheet* EditEngine::GetStyleSheet( sal_Int32 nPara )
1291
4.55M
{
1292
4.55M
    return getImpl().GetStyleSheet(nPara);
1293
4.55M
}
1294
1295
void EditEngine::SetStyleSheetPool( SfxStyleSheetPool* pSPool )
1296
650k
{
1297
650k
    getImpl().SetStyleSheetPool(pSPool);
1298
650k
}
1299
1300
SfxStyleSheetPool* EditEngine::GetStyleSheetPool()
1301
93.3k
{
1302
93.3k
    return getImpl().GetStyleSheetPool();
1303
93.3k
}
1304
1305
void EditEngine::SetWordDelimiters( const OUString& rDelimiters )
1306
1.21k
{
1307
1.21k
    getImpl().maWordDelimiters = rDelimiters;
1308
1.21k
    if (getImpl().maWordDelimiters.indexOf(CH_FEATURE) == -1)
1309
1.21k
        getImpl().maWordDelimiters += OUStringChar(CH_FEATURE);
1310
1.21k
}
1311
1312
const OUString& EditEngine::GetWordDelimiters() const
1313
1.21k
{
1314
1.21k
    return getImpl().maWordDelimiters;
1315
1.21k
}
1316
1317
void EditEngine::EraseVirtualDevice()
1318
370k
{
1319
370k
    getImpl().EraseVirtualDevice();
1320
370k
}
1321
1322
void EditEngine::SetSpeller( Reference< XSpellChecker1 > const &xSpeller )
1323
67.7k
{
1324
67.7k
    getImpl().SetSpeller(xSpeller);
1325
67.7k
}
1326
1327
Reference< XSpellChecker1 > const & EditEngine::GetSpeller()
1328
0
{
1329
0
    return getImpl().GetSpeller();
1330
0
}
1331
1332
void EditEngine::SetHyphenator( Reference< XHyphenator > const & xHyph )
1333
229k
{
1334
229k
    getImpl().SetHyphenator(xHyph);
1335
229k
}
1336
1337
void EditEngine::GetAllMisspellRanges( std::vector<editeng::MisspellRanges>& rRanges ) const
1338
0
{
1339
0
    getImpl().GetAllMisspellRanges(rRanges);
1340
0
}
1341
1342
void EditEngine::SetAllMisspellRanges( const std::vector<editeng::MisspellRanges>& rRanges )
1343
0
{
1344
0
    getImpl().SetAllMisspellRanges(rRanges);
1345
0
}
1346
1347
void EditEngine::SetForbiddenCharsTable(const std::shared_ptr<SvxForbiddenCharactersTable>& xForbiddenChars)
1348
1.80M
{
1349
1.80M
    ImpEditEngine::SetForbiddenCharsTable( xForbiddenChars );
1350
1.80M
}
1351
1352
void EditEngine::SetDefaultLanguage( LanguageType eLang )
1353
184k
{
1354
184k
    getImpl().SetDefaultLanguage(eLang);
1355
184k
}
1356
1357
LanguageType EditEngine::GetDefaultLanguage() const
1358
0
{
1359
0
    return getImpl().GetDefaultLanguage();
1360
0
}
1361
1362
bool EditEngine::SpellNextDocument()
1363
0
{
1364
0
    if (Outliner* pOwner = getImpl().GetOwner())
1365
0
        return pOwner->SpellNextDocument();
1366
0
    return false;
1367
0
}
1368
1369
EESpellState EditEngine::HasSpellErrors()
1370
0
{
1371
0
    if (!getImpl().GetSpeller().is())
1372
0
        return EESpellState::NoSpeller;
1373
1374
0
    return getImpl().HasSpellErrors();
1375
0
}
1376
1377
void EditEngine::ClearSpellErrors()
1378
0
{
1379
0
    getImpl().ClearSpellErrors();
1380
0
}
1381
1382
bool EditEngine::SpellSentence(EditView const & rView, svx::SpellPortions& rToFill )
1383
0
{
1384
0
    return getImpl().SpellSentence(rView, rToFill);
1385
0
}
1386
1387
void EditEngine::PutSpellingToSentenceStart( EditView const & rEditView )
1388
0
{
1389
0
    getImpl().PutSpellingToSentenceStart(rEditView);
1390
0
}
1391
1392
void EditEngine::ApplyChangedSentence(EditView const & rEditView, const svx::SpellPortions& rNewPortions, bool bRecheck )
1393
0
{
1394
0
    getImpl().ApplyChangedSentence(rEditView, rNewPortions, bRecheck);
1395
0
}
1396
1397
bool EditEngine::HasConvertibleTextPortion( LanguageType nLang )
1398
0
{
1399
0
    return getImpl().HasConvertibleTextPortion(nLang);
1400
0
}
1401
1402
bool EditEngine::ConvertNextDocument()
1403
0
{
1404
0
    if (Outliner* pOwner = getImpl().GetOwner())
1405
0
        return pOwner->ConvertNextDocument();
1406
0
    return false;
1407
0
}
1408
1409
bool EditEngine::HasText( const SvxSearchItem& rSearchItem )
1410
0
{
1411
0
    return getImpl().HasText(rSearchItem);
1412
0
}
1413
1414
const ScalingParameters & EditEngine::getScalingParameters() const
1415
1.37M
{
1416
1.37M
    return getImpl().getScalingParameters();
1417
1.37M
}
1418
1419
void EditEngine::setScalingParameters(ScalingParameters const& rScalingParameters)
1420
2.31M
{
1421
2.31M
    getImpl().setScalingParameters(rScalingParameters);
1422
2.31M
}
1423
1424
void EditEngine::setRoundFontSizeToPt(bool bRound)
1425
884
{
1426
884
    getImpl().setRoundToNearestPt(bRound);
1427
884
}
1428
1429
bool EditEngine::ShouldCreateBigTextObject() const
1430
235
{
1431
235
    sal_Int32 nTextPortions = 0;
1432
235
    sal_Int32 nParas = getImpl().GetEditDoc().Count();
1433
484
    for (sal_Int32 nPara = 0; nPara < nParas; nPara++)
1434
249
    {
1435
249
        ParaPortion& rParaPortion = getImpl().GetParaPortions().getRef(nPara);
1436
249
        nTextPortions = nTextPortions + rParaPortion.GetTextPortions().Count();
1437
249
    }
1438
235
    return nTextPortions >= getImpl().GetBigTextObjectStart();
1439
235
}
1440
1441
std::vector<EFieldInfo> EditEngine::GetFieldInfo( sal_Int32 nPara ) const
1442
0
{
1443
0
    std::vector<EFieldInfo> aFieldInfos;
1444
0
    ContentNode& rNode = getImpl().GetEditDoc().GetObject(nPara);
1445
0
    for (auto const& attrib : rNode.GetCharAttribs().GetAttribs())
1446
0
    {
1447
0
        const EditCharAttrib& rAttr = *attrib;
1448
0
        if (rAttr.Which() == EE_FEATURE_FIELD)
1449
0
        {
1450
0
            const SvxFieldItem* p = static_cast<const SvxFieldItem*>(rAttr.GetItem());
1451
0
            EFieldInfo aInfo(*p, nPara, rAttr.GetStart());
1452
0
            aInfo.aCurrentText = static_cast<const EditCharAttribField&>(rAttr).GetFieldValue();
1453
0
            aFieldInfos.push_back(aInfo);
1454
0
        }
1455
0
    }
1456
0
    return aFieldInfos;
1457
0
}
1458
1459
1460
bool EditEngine::UpdateFields()
1461
0
{
1462
0
    bool bChanges = getImpl().UpdateFields();
1463
0
    if (bChanges && getImpl().IsUpdateLayout())
1464
0
        getImpl().FormatAndLayout();
1465
0
    return bChanges;
1466
0
}
1467
1468
bool EditEngine::UpdateFieldsOnly()
1469
4.63k
{
1470
4.63k
    return getImpl().UpdateFields();
1471
4.63k
}
1472
1473
void EditEngine::RemoveFields( const std::function<bool ( const SvxFieldData* )>& isFieldData )
1474
0
{
1475
0
    getImpl().UpdateFields();
1476
1477
0
    sal_Int32 nParas = getImpl().GetEditDoc().Count();
1478
0
    for ( sal_Int32 nPara = 0; nPara < nParas; nPara++  )
1479
0
    {
1480
0
        ContentNode& rNode = getImpl().GetEditDoc().GetObject(nPara);
1481
0
        const CharAttribList::AttribsType& rAttrs = rNode.GetCharAttribs().GetAttribs();
1482
0
        for (size_t nAttr = rAttrs.size(); nAttr; )
1483
0
        {
1484
0
            const EditCharAttrib& rAttr = *rAttrs[--nAttr];
1485
0
            if (rAttr.Which() == EE_FEATURE_FIELD)
1486
0
            {
1487
0
                const SvxFieldData* pFldData = static_cast<const SvxFieldItem*>(rAttr.GetItem())->GetField();
1488
0
                if ( pFldData && ( isFieldData( pFldData )  ) )
1489
0
                {
1490
0
                    DBG_ASSERT( dynamic_cast<const SvxFieldItem*>(rAttr.GetItem()), "no field item..." );
1491
0
                    EditSelection aSel( EditPaM(rNode, rAttr.GetStart()), EditPaM(rNode, rAttr.GetEnd()) );
1492
0
                    OUString aFieldText = static_cast<const EditCharAttribField&>(rAttr).GetFieldValue();
1493
0
                    getImpl().ImpInsertText(aSel, aFieldText);
1494
0
                }
1495
0
            }
1496
0
        }
1497
0
    }
1498
0
}
1499
1500
bool EditEngine::HasOnlineSpellErrors() const
1501
0
{
1502
0
    sal_Int32 nNodes = getImpl().GetEditDoc().Count();
1503
0
    for ( sal_Int32 n = 0; n < nNodes; n++ )
1504
0
    {
1505
0
        ContentNode& rNode = getImpl().GetEditDoc().GetObject(n);
1506
0
        if ( rNode.GetWrongList() && !rNode.GetWrongList()->empty() )
1507
0
            return true;
1508
0
    }
1509
0
    return false;
1510
0
}
1511
1512
void EditEngine::CompleteOnlineSpelling()
1513
0
{
1514
0
    if (getImpl().GetStatus().DoOnlineSpelling())
1515
0
    {
1516
0
        if (!getImpl().IsFormatted())
1517
0
            getImpl().FormatAndLayout();
1518
1519
0
        getImpl().StopOnlineSpellTimer();
1520
0
        getImpl().DoOnlineSpelling(nullptr, true, false);
1521
0
    }
1522
0
}
1523
1524
sal_Int32 EditEngine::FindParagraph( tools::Long nDocPosY )
1525
0
{
1526
0
    return getImpl().GetParaPortions().FindParagraph(nDocPosY);
1527
0
}
1528
1529
EPaM EditEngine::FindDocPosition(const Point& rDocPos) const
1530
0
{
1531
    // From the point of the API, this is const...
1532
0
    EditPaM aPaM = getImpl().GetPaM(rDocPos, false);
1533
0
    if ( aPaM.GetNode() )
1534
0
        return getImpl().CreateEPaM(aPaM);
1535
0
    return EPaM::NotFound();
1536
0
}
1537
1538
tools::Rectangle EditEngine::GetCharacterBounds(const EPaM& rPos) const
1539
0
{
1540
0
    tools::Rectangle aBounds;
1541
0
    ContentNode& rNode = getImpl().GetEditDoc().GetObject(rPos.nPara);
1542
1543
    // Check against index, not paragraph
1544
0
    if ( rPos.nIndex < rNode.Len() )
1545
0
    {
1546
0
        aBounds = getImpl().PaMtoEditCursor(EditPaM(rNode, rPos.nIndex), CursorFlags{.bTextOnly = true});
1547
0
        CursorFlags aFlags { .bTextOnly = true, .bEndOfLine = true};
1548
0
        tools::Rectangle aR2 = getImpl().PaMtoEditCursor(EditPaM(rNode, rPos.nIndex + 1), aFlags);
1549
0
        if ( aR2.Right() > aBounds.Right() )
1550
0
            aBounds.SetRight( aR2.Right() );
1551
0
    }
1552
0
    return aBounds;
1553
0
}
1554
1555
ParagraphInfos EditEngine::GetParagraphInfos( sal_Int32 nPara )
1556
705k
{
1557
    // This only works if not already in the format ...
1558
705k
    getImpl().EnsureDocumentFormatted();
1559
1560
705k
    ParagraphInfos aInfos;
1561
705k
    aInfos.bValid = getImpl().IsFormatted();
1562
705k
    if (getImpl().IsFormatted() && getImpl().GetParaPortions().exists(nPara))
1563
0
    {
1564
0
        ParaPortion const& rParaPortion = getImpl().GetParaPortions().getRef(nPara);
1565
0
        const EditLine* pLine = (rParaPortion.GetLines().Count()) ? &rParaPortion.GetLines()[0] : nullptr;
1566
0
        DBG_ASSERT(pLine, "GetParagraphInfos - Paragraph out of range");
1567
0
        if (pLine)
1568
0
        {
1569
0
            aInfos.nFirstLineHeight = pLine->GetHeight();
1570
0
            aInfos.nFirstLineTextHeight = pLine->GetTxtHeight();
1571
0
            aInfos.nFirstLineMaxAscent = pLine->GetMaxAscent();
1572
0
        }
1573
0
    }
1574
705k
    return aInfos;
1575
705k
}
1576
1577
uno::Reference<datatransfer::XTransferable>
1578
EditEngine::CreateTransferable(const ESelection& rSelection)
1579
0
{
1580
0
    return getImpl().CreateTransferable(CreateSelection(rSelection));
1581
0
}
1582
1583
1584
// ======================    Virtual Methods    ========================
1585
1586
void EditEngine::ProcessFirstLineOfParagraph(sal_Int32 nPara, const Point& rStartPos, OutputDevice& rOutDev,
1587
                    StripPortionsHelper& rStripPortionsHelper)
1588
599
{
1589
599
    if (Outliner* pOwner = getImpl().GetOwner())
1590
599
    {
1591
599
        if( GetControlWord() & EEControlBits::OUTLINER )
1592
0
        {
1593
0
            PaintFirstLineInfo aInfo(nPara, rStartPos, &rOutDev, rStripPortionsHelper);
1594
0
            pOwner->maPaintFirstLineHdl.Call( &aInfo );
1595
0
        }
1596
1597
599
        pOwner->StripBullet(nPara, rStartPos, rOutDev, rStripPortionsHelper);
1598
599
    }
1599
599
}
1600
1601
void EditEngine::ParagraphInserted( sal_Int32 nPara )
1602
8.84M
{
1603
8.84M
    if (Outliner* pOwner = getImpl().GetOwner())
1604
5.36M
        pOwner->ParagraphInserted( nPara );
1605
1606
8.84M
    if ( GetNotifyHdl().IsSet() )
1607
0
    {
1608
0
        EENotify aNotify( EE_NOTIFY_PARAGRAPHINSERTED );
1609
0
        aNotify.nParagraph = nPara;
1610
0
        getImpl().GetNotifyHdl().Call(aNotify);
1611
0
    }
1612
8.84M
}
1613
1614
void EditEngine::ParagraphDeleted( sal_Int32 nPara, sal_Int16 nNumberingDepth, bool bIsPage )
1615
3.59M
{
1616
3.59M
    if (Outliner* pOwner = getImpl().GetOwner())
1617
2.93M
        pOwner->ParagraphDeleted( nPara, nNumberingDepth, bIsPage );
1618
1619
3.59M
    if ( GetNotifyHdl().IsSet() )
1620
0
    {
1621
0
        EENotify aNotify( EE_NOTIFY_PARAGRAPHREMOVED );
1622
0
        aNotify.nParagraph = nPara;
1623
0
        getImpl().GetNotifyHdl().Call(aNotify);
1624
0
    }
1625
3.59M
}
1626
1627
void EditEngine::ParagraphConnected( sal_Int32 /*nLeftParagraph*/, sal_Int32 nRightParagraph )
1628
70.4k
{
1629
70.4k
    if (Outliner* pOwner = getImpl().GetOwner())
1630
12.6k
        if(pOwner->IsUndoEnabled() && !pOwner->GetEditEngine().IsInUndo() )
1631
1.00k
        {
1632
1.00k
            if( HasParaFlag( nRightParagraph, ParaFlag::ISPAGE ) )
1633
0
            {
1634
0
                pOwner->InsertUndo( std::make_unique<OutlinerUndoChangeParaFlags>( pOwner, nRightParagraph, ParaFlag::ISPAGE, ParaFlag::NONE ) );
1635
0
            }
1636
1.00k
        }
1637
70.4k
}
1638
1639
void EditEngine::ParaAttribsChanged( sal_Int32 nPara )
1640
70.4k
{
1641
70.4k
    if (Outliner* pOwner = getImpl().GetOwner())
1642
12.6k
        pOwner->ParaAttribsChanged( nPara );
1643
70.4k
}
1644
1645
void EditEngine::StyleSheetChanged( SfxStyleSheet* pStyle )
1646
787k
{
1647
787k
    if (Outliner* pOwner = getImpl().GetOwner())
1648
787k
        pOwner->StyleSheetChanged( pStyle );
1649
787k
}
1650
1651
void EditEngine::ParagraphHeightChanged( sal_Int32 nPara )
1652
1.38M
{
1653
1.38M
    if ( GetNotifyHdl().IsSet() )
1654
0
    {
1655
0
        EENotify aNotify( EE_NOTIFY_TextHeightChanged );
1656
0
        aNotify.nParagraph = nPara;
1657
0
        getImpl().GetNotifyHdl().Call(aNotify);
1658
0
    }
1659
1660
1.38M
    for (EditView* pView : getImpl().maEditViews)
1661
0
        pView->getImpl().ScrollStateChange();
1662
1.38M
}
1663
1664
OUString EditEngine::GetUndoComment( sal_uInt16 nId ) const
1665
4.91M
{
1666
4.91M
    if (getImpl().GetOwner() != nullptr)
1667
4.45M
        switch( nId )
1668
4.45M
        {
1669
0
            case OLUNDO_DEPTH:
1670
0
                return EditResId(RID_OUTLUNDO_DEPTH);
1671
1672
0
            case OLUNDO_EXPAND:
1673
0
                return EditResId(RID_OUTLUNDO_EXPAND);
1674
1675
0
            case OLUNDO_COLLAPSE:
1676
0
                return EditResId(RID_OUTLUNDO_COLLAPSE);
1677
1678
2.71M
            case OLUNDO_ATTR:
1679
2.71M
                return EditResId(RID_OUTLUNDO_ATTR);
1680
1681
0
            case OLUNDO_INSERT:
1682
0
                return EditResId(RID_OUTLUNDO_INSERT);
1683
4.45M
        }
1684
1685
2.20M
    OUString aComment;
1686
2.20M
    switch ( nId )
1687
2.20M
    {
1688
18.7k
        case EDITUNDO_REMOVECHARS:
1689
20.9k
        case EDITUNDO_CONNECTPARAS:
1690
35.7k
        case EDITUNDO_DELCONTENT:
1691
35.7k
        case EDITUNDO_DELETE:
1692
35.7k
        case EDITUNDO_CUT:
1693
35.7k
            aComment = EditResId(RID_EDITUNDO_DEL);
1694
35.7k
        break;
1695
0
        case EDITUNDO_MOVEPARAGRAPHS:
1696
0
        case EDITUNDO_MOVEPARAS:
1697
0
        case EDITUNDO_DRAGANDDROP:
1698
0
            aComment = EditResId(RID_EDITUNDO_MOVE);
1699
0
        break;
1700
245k
        case EDITUNDO_INSERTFEATURE:
1701
492k
        case EDITUNDO_SPLITPARA:
1702
565k
        case EDITUNDO_INSERTCHARS:
1703
565k
        case EDITUNDO_PASTE:
1704
901k
        case EDITUNDO_INSERT:
1705
901k
        case EDITUNDO_READ:
1706
901k
            aComment = EditResId(RID_EDITUNDO_INSERT);
1707
901k
        break;
1708
0
        case EDITUNDO_REPLACEALL:
1709
0
            aComment = EditResId(RID_EDITUNDO_REPLACE);
1710
0
        break;
1711
135k
        case EDITUNDO_ATTRIBS:
1712
967k
        case EDITUNDO_PARAATTRIBS:
1713
967k
            aComment = EditResId(RID_EDITUNDO_SETATTRIBS);
1714
967k
        break;
1715
3.04k
        case EDITUNDO_RESETATTRIBS:
1716
3.04k
            aComment = EditResId(RID_EDITUNDO_RESETATTRIBS);
1717
3.04k
        break;
1718
297k
        case EDITUNDO_STYLESHEET:
1719
297k
            aComment = EditResId(RID_EDITUNDO_SETSTYLE);
1720
297k
        break;
1721
0
        case EDITUNDO_TRANSLITERATE:
1722
0
            aComment = EditResId(RID_EDITUNDO_TRANSLITERATE);
1723
0
        break;
1724
0
        case EDITUNDO_INDENTBLOCK:
1725
0
        case EDITUNDO_UNINDENTBLOCK:
1726
0
            aComment = EditResId(RID_EDITUNDO_INDENT);
1727
0
        break;
1728
2.20M
    }
1729
2.20M
    return aComment;
1730
2.20M
}
1731
1732
tools::Rectangle EditEngine::GetBulletArea( sal_Int32 nPara )
1733
3.15M
{
1734
3.15M
    if (Outliner* pOwner = getImpl().GetOwner())
1735
2.63M
    {
1736
2.63M
        tools::Rectangle aBulletArea { Point(), Point() };
1737
2.63M
        if ( nPara < pOwner->pEditEngine->GetParagraphCount() )
1738
2.63M
        {
1739
2.63M
            if ( pOwner->ImplHasNumberFormat( nPara ) )
1740
705k
                aBulletArea = pOwner->ImpCalcBulletArea( nPara, false, false );
1741
2.63M
        }
1742
2.63M
        return aBulletArea;
1743
2.63M
    }
1744
524k
    return tools::Rectangle( Point(), Point() );
1745
3.15M
}
1746
1747
std::optional<bool> EditEngine::GetCompatFlag(SdrCompatibilityFlag eFlag) const
1748
0
{
1749
0
    if (Outliner* pOwner = getImpl().GetOwner())
1750
0
        return pOwner->GetCompatFlag(eFlag);
1751
0
    return {};
1752
0
}
1753
1754
OUString EditEngine::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos,
1755
            std::optional<Color>& rpTxtColor,
1756
            std::optional<Color>& rpFldColor,
1757
            std::optional<FontLineStyle>& rpFldLineStyle)
1758
972k
{
1759
972k
    if (Outliner* pOwner = getImpl().GetOwner())
1760
646k
        return pOwner->CalcFieldValue( rField, nPara, nPos, rpTxtColor, rpFldColor, rpFldLineStyle );
1761
326k
    return OUString(' ');
1762
972k
}
1763
1764
bool EditEngine::FieldClicked( const SvxFieldItem& )
1765
0
{
1766
0
    return false;
1767
0
}
1768
1769
1770
// ======================     Static Methods     =======================
1771
1772
rtl::Reference<SfxItemPool> EditEngine::CreatePool()
1773
282k
{
1774
282k
    return new EditEngineItemPool();
1775
282k
}
1776
1777
1778
SfxItemPool& EditEngine::GetGlobalItemPool()
1779
12
{
1780
12
    static tools::DeleteOnDeinit<rtl::Reference<SfxItemPool>> pGlobalPool(CreatePool());
1781
12
    return **pGlobalPool.get();
1782
12
}
1783
1784
void EditEngine::SetFontInfoInItemSet( SfxItemSet& rSet, const vcl::Font& rFont )
1785
0
{
1786
0
    SvxFont aSvxFont( rFont );
1787
0
    SetFontInfoInItemSet( rSet, aSvxFont );
1788
1789
0
}
1790
1791
void EditEngine::SetFontInfoInItemSet( SfxItemSet& rSet, const SvxFont& rFont )
1792
0
{
1793
0
    rSet.Put( SvxLanguageItem( rFont.GetLanguage(), EE_CHAR_LANGUAGE ) );
1794
0
    rSet.Put( SvxFontItem( rFont.GetFamilyType(), rFont.GetFamilyName(), OUString(), rFont.GetPitch(), rFont.GetCharSet(), EE_CHAR_FONTINFO ) );
1795
0
    rSet.Put( SvxFontHeightItem( rFont.GetFontSize().Height(), 100, EE_CHAR_FONTHEIGHT )  );
1796
0
    rSet.Put( SvxCharScaleWidthItem( 100, EE_CHAR_FONTWIDTH ) );
1797
0
    rSet.Put( SvxShadowedItem( rFont.IsShadow(), EE_CHAR_SHADOW )  );
1798
0
    rSet.Put( SvxEscapementItem( rFont.GetEscapement(), rFont.GetPropr(), EE_CHAR_ESCAPEMENT )  );
1799
0
    rSet.Put( SvxWeightItem( rFont.GetWeight(), EE_CHAR_WEIGHT )  );
1800
0
    rSet.Put( SvxColorItem( rFont.GetColor(), EE_CHAR_COLOR )  );
1801
0
    rSet.Put( SvxColorItem( rFont.GetFillColor(), EE_CHAR_BKGCOLOR )  );
1802
0
    rSet.Put( SvxUnderlineItem( rFont.GetUnderline(), EE_CHAR_UNDERLINE )  );
1803
0
    rSet.Put( SvxOverlineItem( rFont.GetOverline(), EE_CHAR_OVERLINE )  );
1804
0
    rSet.Put( SvxCrossedOutItem( rFont.GetStrikeout(), EE_CHAR_STRIKEOUT )  );
1805
0
    rSet.Put( SvxCaseMapItem( rFont.GetCaseMap(), EE_CHAR_CASEMAP )  );
1806
0
    rSet.Put( SvxPostureItem( rFont.GetItalic(), EE_CHAR_ITALIC )  );
1807
0
    rSet.Put( SvxContourItem( rFont.IsOutline(), EE_CHAR_OUTLINE )  );
1808
0
    rSet.Put( SvxAutoKernItem( rFont.IsKerning(), EE_CHAR_PAIRKERNING ) );
1809
0
    rSet.Put( SvxKerningItem( rFont.GetFixKerning(), EE_CHAR_KERNING ) );
1810
0
    rSet.Put( SvxWordLineModeItem( rFont.IsWordLineMode(), EE_CHAR_WLM ) );
1811
0
    rSet.Put( SvxEmphasisMarkItem( rFont.GetEmphasisMark(), EE_CHAR_EMPHASISMARK ) );
1812
0
    rSet.Put( SvxCharReliefItem( rFont.GetRelief(), EE_CHAR_RELIEF ) );
1813
0
}
1814
1815
vcl::Font EditEngine::CreateFontFromItemSet( const SfxItemSet& rItemSet, SvtScriptType nScriptType )
1816
670k
{
1817
670k
    SvxFont aFont;
1818
670k
    CreateFont( aFont, rItemSet, true, nScriptType );
1819
670k
#if HAVE_P1155R3
1820
670k
    return aFont;
1821
#else
1822
    return std::move(aFont);
1823
#endif
1824
670k
}
1825
1826
SvxFont EditEngine::CreateSvxFontFromItemSet( const SfxItemSet& rItemSet )
1827
0
{
1828
0
    SvxFont aFont;
1829
0
    CreateFont( aFont, rItemSet );
1830
0
    return aFont;
1831
0
}
1832
1833
bool EditEngine::DoesKeyMoveCursor( const KeyEvent& rKeyEvent )
1834
0
{
1835
0
    bool bDoesMove = false;
1836
1837
0
    switch ( rKeyEvent.GetKeyCode().GetCode() )
1838
0
    {
1839
0
        case KEY_UP:
1840
0
        case KEY_DOWN:
1841
0
        case KEY_LEFT:
1842
0
        case KEY_RIGHT:
1843
0
        case KEY_HOME:
1844
0
        case KEY_END:
1845
0
        case KEY_PAGEUP:
1846
0
        case KEY_PAGEDOWN:
1847
0
        {
1848
0
#ifndef MACOSX
1849
0
            if ( !rKeyEvent.GetKeyCode().IsMod2() )
1850
0
#endif
1851
0
                bDoesMove = true;
1852
0
        }
1853
0
        break;
1854
0
    }
1855
0
    return bDoesMove;
1856
0
}
1857
1858
bool EditEngine::DoesKeyChangeText( const KeyEvent& rKeyEvent )
1859
0
{
1860
0
    bool bDoesChange = false;
1861
1862
0
    KeyFuncType eFunc = rKeyEvent.GetKeyCode().GetFunction();
1863
0
    if ( eFunc != KeyFuncType::DONTKNOW )
1864
0
    {
1865
0
        switch ( eFunc )
1866
0
        {
1867
0
            case KeyFuncType::UNDO:
1868
0
            case KeyFuncType::REDO:
1869
0
            case KeyFuncType::CUT:
1870
0
            case KeyFuncType::PASTE: bDoesChange = true;
1871
0
            break;
1872
0
            default:    // is then possibly edited below.
1873
0
                        eFunc = KeyFuncType::DONTKNOW;
1874
0
        }
1875
0
    }
1876
0
    if ( eFunc == KeyFuncType::DONTKNOW )
1877
0
    {
1878
0
        switch ( rKeyEvent.GetKeyCode().GetCode() )
1879
0
        {
1880
0
            case KEY_DELETE:
1881
0
            case KEY_BACKSPACE: bDoesChange = true;
1882
0
            break;
1883
0
            case KEY_RETURN:
1884
0
            case KEY_TAB:
1885
0
            {
1886
0
                if ( !rKeyEvent.GetKeyCode().IsMod1() && !rKeyEvent.GetKeyCode().IsMod2() )
1887
0
                    bDoesChange = true;
1888
0
            }
1889
0
            break;
1890
0
            default:
1891
0
            {
1892
0
                bDoesChange = IsSimpleCharInput( rKeyEvent );
1893
0
            }
1894
0
        }
1895
0
    }
1896
0
    return bDoesChange;
1897
0
}
1898
1899
bool EditEngine::IsSimpleCharInput( const KeyEvent& rKeyEvent )
1900
0
{
1901
0
    return ImpEditEngine::IsSimpleCharInput(rKeyEvent);
1902
0
}
1903
1904
bool EditEngine::HasValidData( const css::uno::Reference< css::datatransfer::XTransferable >& rTransferable )
1905
0
{
1906
0
    bool bValidData = false;
1907
1908
0
    if ( comphelper::LibreOfficeKit::isActive())
1909
0
        return true;
1910
1911
0
    if ( rTransferable.is() )
1912
0
    {
1913
        // Every application that copies rtf or any other text format also copies plain text into the clipboard...
1914
0
        datatransfer::DataFlavor aFlavor;
1915
0
        SotExchange::GetFormatDataFlavor( SotClipboardFormatId::STRING, aFlavor );
1916
0
        bValidData = rTransferable->isDataFlavorSupported( aFlavor );
1917
1918
0
        if (!bValidData)
1919
0
        {
1920
            // Allow HTML-only clipboard, i.e. without plain text.
1921
0
            SotExchange::GetFormatDataFlavor(SotClipboardFormatId::HTML, aFlavor);
1922
0
            bValidData = rTransferable->isDataFlavorSupported(aFlavor);
1923
0
        }
1924
0
    }
1925
1926
0
    return bValidData;
1927
0
}
1928
1929
/** sets a link that is called at the beginning of a drag operation at an edit view */
1930
void EditEngine::SetBeginDropHdl( const Link<EditView*,void>& rLink )
1931
0
{
1932
0
    getImpl().SetBeginDropHdl(rLink);
1933
0
}
1934
1935
Link<EditView*,void> const & EditEngine::GetBeginDropHdl() const
1936
0
{
1937
0
    return getImpl().GetBeginDropHdl();
1938
0
}
1939
1940
/** sets a link that is called at the end of a drag operation at an edit view */
1941
void EditEngine::SetEndDropHdl( const Link<EditView*,void>& rLink )
1942
0
{
1943
0
    getImpl().SetEndDropHdl(rLink);
1944
0
}
1945
1946
Link<EditView*,void> const & EditEngine::GetEndDropHdl() const
1947
0
{
1948
0
    return getImpl().GetEndDropHdl();
1949
0
}
1950
1951
void EditEngine::SetFirstWordCapitalization( bool bCapitalize )
1952
0
{
1953
0
    getImpl().SetFirstWordCapitalization(bCapitalize);
1954
0
}
1955
1956
void EditEngine::SetReplaceLeadingSingleQuotationMark( bool bReplace )
1957
0
{
1958
0
    getImpl().SetReplaceLeadingSingleQuotationMark(bReplace);
1959
0
}
1960
1961
bool EditEngine::IsHtmlImportHandlerSet() const
1962
3.85M
{
1963
3.85M
    return getImpl().maHtmlImportHdl.IsSet();
1964
3.85M
}
1965
1966
bool EditEngine::IsRtfImportHandlerSet() const
1967
6.04M
{
1968
6.04M
    return getImpl().maRtfImportHdl.IsSet();
1969
6.04M
}
1970
1971
bool EditEngine::IsImportRTFStyleSheetsSet() const
1972
27.6k
{
1973
27.6k
    return getImpl().GetStatus().DoImportRTFStyleSheets();
1974
27.6k
}
1975
1976
void EditEngine::CallHtmlImportHandler(HtmlImportInfo& rInfo)
1977
3.85M
{
1978
3.85M
    getImpl().maHtmlImportHdl.Call(rInfo);
1979
3.85M
}
1980
1981
void EditEngine::CallRtfImportHandler(RtfImportInfo& rInfo)
1982
6.04M
{
1983
6.04M
    getImpl().maRtfImportHdl.Call(rInfo);
1984
6.04M
}
1985
1986
EditPaM EditEngine::InsertParaBreak(const EditSelection& rEditSelection)
1987
1.07M
{
1988
1.07M
    return getImpl().ImpInsertParaBreak(rEditSelection);
1989
1.07M
}
1990
1991
EditPaM EditEngine::InsertLineBreak(const EditSelection& rEditSelection)
1992
11.5k
{
1993
11.5k
    return getImpl().InsertLineBreak(rEditSelection);
1994
11.5k
}
1995
1996
0
sal_Int32 EditEngine::GetOverflowingParaNum() const {
1997
0
    return getImpl().GetOverflowingParaNum();
1998
0
}
1999
2000
0
sal_Int32 EditEngine::GetOverflowingLineNum() const {
2001
0
    return getImpl().GetOverflowingLineNum();
2002
0
}
2003
2004
0
void EditEngine::ClearOverflowingParaNum() {
2005
0
    getImpl().ClearOverflowingParaNum();
2006
0
}
2007
2008
0
bool EditEngine::IsPageOverflow() {
2009
0
    getImpl().CheckPageOverflow();
2010
0
    return getImpl().IsPageOverflow();
2011
0
}
2012
2013
0
void EditEngine::DisableAttributeExpanding() {
2014
0
    getImpl().GetEditDoc().DisableAttributeExpanding();
2015
0
}
2016
2017
void EditEngine::EnableSkipOutsideFormat(bool bValue)
2018
0
{
2019
0
    getImpl().EnableSkipOutsideFormat(bValue);
2020
0
}
2021
2022
void EditEngine::SetLOKSpecialPaperSize(const Size& rSize)
2023
0
{
2024
0
    getImpl().SetLOKSpecialPaperSize(rSize);
2025
0
}
2026
2027
const Size& EditEngine::GetLOKSpecialPaperSize() const
2028
0
{
2029
0
    return getImpl().GetLOKSpecialPaperSize();
2030
0
}
2031
2032
EFieldInfo::EFieldInfo()
2033
0
{
2034
0
}
2035
2036
2037
EFieldInfo::EFieldInfo( const SvxFieldItem& rFieldItem, sal_Int32 nPara, sal_Int32 nPos ) :
2038
0
    pFieldItem( new SvxFieldItem( rFieldItem ) ),
2039
0
    aPosition( nPara, nPos )
2040
0
{
2041
0
}
2042
2043
EFieldInfo::~EFieldInfo()
2044
0
{
2045
0
}
2046
2047
EFieldInfo::EFieldInfo( const EFieldInfo& rFldInfo )
2048
0
{
2049
0
    *this = rFldInfo;
2050
0
}
2051
2052
EFieldInfo& EFieldInfo::operator= ( const EFieldInfo& rFldInfo )
2053
0
{
2054
0
    if( this == &rFldInfo )
2055
0
        return *this;
2056
2057
0
    pFieldItem.reset( rFldInfo.pFieldItem ? new SvxFieldItem( *rFldInfo.pFieldItem ) : nullptr );
2058
0
    aCurrentText = rFldInfo.aCurrentText;
2059
0
    aPosition = rFldInfo.aPosition;
2060
2061
0
    return *this;
2062
0
}
2063
2064
sal_Int16 EditEngine::GetNumberingDepth(sal_Int32 nPara) const
2065
171M
{
2066
171M
    return getImpl().GetEditDoc().GetObject(nPara).GetNumberingDepth();
2067
171M
}
2068
2069
void EditEngine::SetNumberingDepth(sal_Int32 nPara, sal_Int16 nDepth)
2070
19.1M
{
2071
19.1M
    getImpl().GetEditDoc().GetObject(nPara).SetNumberingDepth(nDepth);
2072
19.1M
}
2073
2074
sal_Int16 EditEngine::GetNumberingStartValue(sal_Int32 nPara) const
2075
9.38M
{
2076
9.38M
    return getImpl().GetEditDoc().GetObject(nPara).GetNumberingStartValue();
2077
9.38M
}
2078
2079
void EditEngine::SetNumberingStartValue(sal_Int32 nPara, sal_Int16 nNumberingStartValue)
2080
3.00M
{
2081
3.00M
    getImpl().GetEditDoc().GetObject(nPara).SetNumberingStartValue(nNumberingStartValue);
2082
3.00M
}
2083
2084
bool EditEngine::IsNumberingRestart(sal_Int32 nPara) const
2085
9.38M
{
2086
9.38M
    return getImpl().GetEditDoc().GetObject(nPara).IsNumberingRestart();
2087
9.38M
}
2088
2089
void EditEngine::SetNumberingRestart(sal_Int32 nPara, bool bRestart)
2090
3.00M
{
2091
3.00M
    getImpl().GetEditDoc().GetObject(nPara).SetNumberingRestart(bRestart);
2092
3.00M
}
2093
2094
void EditEngine::SetBulletText(sal_Int32 nPara, const OUString& rText)
2095
2.11M
{
2096
2.11M
    getImpl().GetEditDoc().GetObject(nPara).SetBulletText(rText);
2097
2.11M
}
2098
2099
Size const& EditEngine::GetBulletSize(sal_Int32 nPara) const
2100
705k
{
2101
705k
    return getImpl().GetEditDoc().GetObject(nPara).GetBulletSize();
2102
705k
}
2103
2104
void EditEngine::SetBulletSize(sal_Int32 nPara, Size const& rSize, ScalingParameters const& rScalingParameters)
2105
703k
{
2106
703k
    getImpl().GetEditDoc().GetObject(nPara).SetBulletSize(rSize, rScalingParameters);
2107
703k
}
2108
2109
OUString const& EditEngine::GetBulletText(sal_Int32 nPara) const
2110
142M
{
2111
142M
    return getImpl().GetEditDoc().GetObject(nPara).GetBulletText();
2112
142M
}
2113
2114
bool EditEngine::IsBulletInvalid(sal_Int32 nPara, ScalingParameters const& rCurrentScalingParameters) const
2115
705k
{
2116
705k
    return getImpl().GetEditDoc().GetObject(nPara).IsBulletInvalid(rCurrentScalingParameters);
2117
705k
}
2118
2119
void EditEngine::InvalidateBulletSize(sal_Int32 nPara)
2120
159M
{
2121
159M
    getImpl().GetEditDoc().GetObject(nPara).InvalidateBulletSize();
2122
159M
}
2123
2124
void EditEngine::SetParaFlag( sal_Int32 nPara, ParaFlag nFlag )
2125
154k
{
2126
154k
    getImpl().GetEditDoc().GetObject(nPara).SetParaFlag(nFlag);
2127
154k
}
2128
2129
void EditEngine::ClearAndSetParaFlag( sal_Int32 nPara, ParaFlag nFlag )
2130
71.2k
{
2131
71.2k
    getImpl().GetEditDoc().GetObject(nPara).ClearAndSetParaFlag(nFlag);
2132
71.2k
}
2133
2134
void EditEngine::RemoveParaFlag( sal_Int32 nPara, ParaFlag nFlag )
2135
0
{
2136
0
    getImpl().GetEditDoc().GetObject(nPara).RemoveParaFlag(nFlag);
2137
0
}
2138
2139
bool EditEngine::HasParaFlag( sal_Int32 nPara, ParaFlag nFlag ) const
2140
511k
{
2141
511k
    return getImpl().GetEditDoc().GetObject(nPara).HasParaFlag(nFlag);
2142
511k
}
2143
2144
ParaFlag EditEngine::GetParaFlag( sal_Int32 nPara ) const
2145
747k
{
2146
747k
    return getImpl().GetEditDoc().GetObject(nPara).GetParaFlag();
2147
747k
}
2148
2149
bool EditEngine::IsBulletVisible( sal_Int32 nPara ) const
2150
0
{
2151
0
    return getImpl().GetEditDoc().GetObject(nPara).IsBulletVisible();
2152
0
}
2153
2154
void EditEngine::SetBulletVisible( sal_Int32 nPara, bool b )
2155
0
{
2156
0
    getImpl().GetEditDoc().GetObject(nPara).SetBulletVisible(b);
2157
0
}
2158
2159
Outliner* EditEngine::GetOwner()
2160
2.59M
{
2161
2.59M
    return getImpl().GetOwner();
2162
2.59M
}
2163
2164
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */