56 for ( sal_Int32
n = nStartPara;
n <= nEndPara;
n++ )
67 if ( pStyle != pCurStyle )
71 OUString aPrevStyleName;
73 aPrevStyleName = pCurStyle->
GetName();
75 OUString aNewStyleName;
77 aNewStyleName = pStyle->
GetName();
81 aPrevStyleName, pCurStyle ? pCurStyle->
GetFamily() : SfxStyleFamily::Para,
82 aNewStyleName, pStyle ? pStyle->
GetFamily() : SfxStyleFamily::Para,
105 for ( sal_Int32 nNode = 0; nNode <
aEditDoc.
Count(); nNode++ )
131 for ( sal_Int32 nNode = 0; nNode <
aEditDoc.
Count(); nNode++ )
150 if ( (
nId == SfxHintId::StyleSheetInDestruction ) ||
151 (
nId == SfxHintId::StyleSheetErased ) )
157 else if (
nId == SfxHintId::StyleSheetModified )
163 else if (
nId == SfxHintId::Dying )
168 else if (
nId == SfxHintId::DataChanged )
188 DBG_ASSERT( nStartNode <= nEndNode, "CreateAttribUndo: Start >
End ?!
" );
190 std::unique_ptr<EditUndoSetAttribs> pUndo;
191 if ( rSet.GetPool() != &aEditDoc.GetItemPool() )
193 SfxItemSet aTmpSet( GetEmptyItemSet() );
195 pUndo.reset( new EditUndoSetAttribs(pEditEngine, aESel, std::move(aTmpSet)) );
199 pUndo.reset( new EditUndoSetAttribs(pEditEngine, aESel, rSet) );
202 SfxItemPool* pPool = pUndo->GetNewAttribs().GetPool();
204 for ( sal_Int32 nPara = nStartNode; nPara <= nEndNode; nPara++ )
206 ContentNode* pNode = aEditDoc.GetObject( nPara );
208 ContentAttribsInfo* pInf = new ContentAttribsInfo( pNode->GetContentAttribs().GetItems() );
209 pUndo->AppendContentInfo(pInf);
211 for ( sal_Int32 nAttr = 0; nAttr < pNode->GetCharAttribs().Count(); nAttr++ )
213 const EditCharAttrib& rAttr = *pNode->GetCharAttribs().GetAttribs()[nAttr];
216 EditCharAttrib* pNew = MakeCharAttrib(*pPool, *rAttr.GetItem(), rAttr.GetStart(), rAttr.GetEnd());
217 pInf->AppendCharAttrib(pNew);
224ViewShellId ImpEditEngine::CreateViewShellId()
226 ViewShellId nRet(-1);
228 const EditView* pEditView = pEditEngine ? pEditEngine->GetActiveView() : nullptr;
229 const OutlinerViewShell* pViewShell = pEditView ? pEditView->GetImpEditView()->GetViewShell() : nullptr;
231 nRet = pViewShell->GetViewShellId();
236void ImpEditEngine::UndoActionStart( sal_uInt16 nId, const ESelection& aSel )
238 if ( IsUndoEnabled() && !IsInUndo() )
240 GetUndoManager().EnterListAction( GetEditEnginePtr()->GetUndoComment( nId ), OUString(), nId, CreateViewShellId() );
241 DBG_ASSERT( !moUndoMarkSelection, "UndoAction SelectionMarker?
" );
242 moUndoMarkSelection = aSel;
246void ImpEditEngine::UndoActionStart( sal_uInt16 nId )
248 if ( IsUndoEnabled() && !IsInUndo() )
250 GetUndoManager().EnterListAction( GetEditEnginePtr()->GetUndoComment( nId ), OUString(), nId, CreateViewShellId() );
251 DBG_ASSERT( !moUndoMarkSelection, "UndoAction SelectionMarker?
" );
255void ImpEditEngine::UndoActionEnd()
257 if ( IsUndoEnabled() && !IsInUndo() )
259 GetUndoManager().LeaveListAction();
260 moUndoMarkSelection.reset();
264void ImpEditEngine::InsertUndo( std::unique_ptr<EditUndo> pUndo, bool bTryMerge )
267 if ( moUndoMarkSelection )
269 GetUndoManager().AddUndoAction( std::make_unique<EditUndoMarkSelection>(pEditEngine, *moUndoMarkSelection) );
270 moUndoMarkSelection.reset();
272 GetUndoManager().AddUndoAction( std::move(pUndo), bTryMerge );
274 mbLastTryMerge = bTryMerge;
277void ImpEditEngine::ResetUndoManager()
279 if ( HasUndoManager() )
280 GetUndoManager().Clear();
283void ImpEditEngine::EnableUndo( bool bEnable )
285 // When switching the mode Delete list:
286 if ( bEnable != IsUndoEnabled() )
289 bUndoEnabled = bEnable;
292void ImpEditEngine::Undo( EditView* pView )
294 if ( HasUndoManager() && GetUndoManager().GetUndoActionCount() )
296 SetActiveView( pView );
297 GetUndoManager().Undo();
301void ImpEditEngine::Redo( EditView* pView )
303 if ( HasUndoManager() && GetUndoManager().GetRedoActionCount() )
305 SetActiveView( pView );
306 GetUndoManager().Redo();
310SfxItemSet ImpEditEngine::GetAttribs( EditSelection aSel, EditEngineAttribs nOnlyHardAttrib )
313 aSel.Adjust( aEditDoc );
315 SfxItemSet aCurSet( GetEmptyItemSet() );
317 sal_Int32 nStartNode = aEditDoc.GetPos( aSel.Min().GetNode() );
318 sal_Int32 nEndNode = aEditDoc.GetPos( aSel.Max().GetNode() );
320 // iterate over the paragraphs ...
321 for ( sal_Int32 nNode = nStartNode; nNode <= nEndNode; nNode++ )
323 ContentNode* pNode = aEditDoc.GetObject( nNode );
324 DBG_ASSERT( aEditDoc.GetObject( nNode ), "Node not found:
GetAttrib" );
326 const sal_Int32 nStartPos = nNode==nStartNode ? aSel.Min().GetIndex() : 0;
327 const sal_Int32 nEndPos = nNode==nEndNode ? aSel.Max().GetIndex() : pNode->Len(); // Can also be == nStart!
329 // Problem: Templates...
331 // 1) Hard character attributes, as usual...
332 // 2) Examine Style and paragraph attributes only when OFF...
334 // First the very hard formatting...
335 EditDoc::FindAttribs( pNode, nStartPos, nEndPos, aCurSet );
337 if( nOnlyHardAttrib != EditEngineAttribs::OnlyHard )
339 // and then paragraph formatting and template...
340 for ( sal_uInt16 nWhich = EE_ITEMS_START; nWhich <= EE_CHAR_END; nWhich++)
342 if ( aCurSet.GetItemState( nWhich ) == SfxItemState::DEFAULT )
344 if ( nOnlyHardAttrib == EditEngineAttribs::All )
346 const SfxPoolItem& rItem = pNode->GetContentAttribs().GetItem( nWhich );
347 aCurSet.Put( rItem );
349 else if ( pNode->GetContentAttribs().GetItems().GetItemState( nWhich ) == SfxItemState::SET )
351 const SfxPoolItem& rItem = pNode->GetContentAttribs().GetItems().Get( nWhich );
352 aCurSet.Put( rItem );
355 else if ( aCurSet.GetItemState( nWhich ) == SfxItemState::SET )
357 const SfxPoolItem* pItem = nullptr;
358 if ( nOnlyHardAttrib == EditEngineAttribs::All )
360 pItem = &pNode->GetContentAttribs().GetItem( nWhich );
362 else if ( pNode->GetContentAttribs().GetItems().GetItemState( nWhich ) == SfxItemState::SET )
364 pItem = &pNode->GetContentAttribs().GetItems().Get( nWhich );
366 // pItem can only be NULL when nOnlyHardAttrib...
367 if ( !pItem || ( *pItem != aCurSet.Get( nWhich ) ) )
369 // Problem: When Paragraph style with for example font,
370 // but the Font is hard and completely different,
371 // wrong in selection if invalidated....
372 // => better not invalidate, instead CHANGE!
373 // It would be better to fill each paragraph with
374 // an itemset and compare this in large.
375 if ( nWhich <= EE_PARA_END )
376 aCurSet.InvalidateItem( nWhich );
383 // fill empty slots with defaults ...
384 if ( nOnlyHardAttrib == EditEngineAttribs::All )
386 for ( sal_uInt16 nWhich = EE_ITEMS_START; nWhich <= EE_CHAR_END; nWhich++ )
388 if ( aCurSet.GetItemState( nWhich ) == SfxItemState::DEFAULT )
390 aCurSet.Put( aEditDoc.GetItemPool().GetDefaultItem( nWhich ) );
398SfxItemSet ImpEditEngine::GetAttribs( sal_Int32 nPara, sal_Int32 nStart, sal_Int32 nEnd, GetAttribsFlags nFlags ) const
400 // Optimized function with fewer Puts(), which cause unnecessary cloning from default items.
401 // If this works, change GetAttribs( EditSelection ) to use this for each paragraph and merge the results!
404 ContentNode* pNode = const_cast<ContentNode*>(aEditDoc.GetObject(nPara));
405 DBG_ASSERT( pNode, "GetAttribs - unknown paragraph!
" );
406 DBG_ASSERT( nStart <= nEnd, "getAttribs: Start > End not supported!
" );
408 SfxItemSet aAttribs(GetEmptyItemSet());
412 if ( nEnd > pNode->Len() )
418 // StyleSheet / Parattribs...
420 if ( pNode->GetStyleSheet() && ( nFlags & GetAttribsFlags::STYLESHEET ) )
421 aAttribs.Set(pNode->GetStyleSheet()->GetItemSet());
423 if ( nFlags & GetAttribsFlags::PARAATTRIBS )
424 aAttribs.Put( pNode->GetContentAttribs().GetItems() );
428 if ( nFlags & GetAttribsFlags::CHARATTRIBS )
430 // Make testing easier...
431 const SfxItemPool& rPool = GetEditDoc().GetItemPool();
432 pNode->GetCharAttribs().OptimizeRanges(const_cast<SfxItemPool&>(rPool));
434 const CharAttribList::AttribsType& rAttrs = pNode->GetCharAttribs().GetAttribs();
435 for (const auto & nAttr : rAttrs)
437 const EditCharAttrib& rAttr = *nAttr;
439 if ( nStart == nEnd )
441 sal_Int32 nCursorPos = nStart;
442 if ( ( rAttr.GetStart() <= nCursorPos ) && ( rAttr.GetEnd() >= nCursorPos ) )
444 // To be used the attribute has to start BEFORE the position, or it must be a
445 // new empty attr AT the position, or we are on position 0.
446 if ( ( rAttr.GetStart() < nCursorPos ) || rAttr.IsEmpty() || !nCursorPos )
448 // maybe this attrib ends here and a new attrib with 0 Len may follow and be valid here,
449 // but that s no problem, the empty item will come later and win.
450 aAttribs.Put( *rAttr.GetItem() );
456 // Check every attribute covering the area, partial or full.
457 if ( ( rAttr.GetStart() < nEnd ) && ( rAttr.GetEnd() > nStart ) )
459 if ( ( rAttr.GetStart() <= nStart ) && ( rAttr.GetEnd() >= nEnd ) )
462 aAttribs.Put( *rAttr.GetItem() );
466 // OptimizeRanges() assures that not the same attr can follow for full coverage
467 // only partial, check with current, when using para/style, otherwise invalid.
468 if ( !( nFlags & (GetAttribsFlags::PARAATTRIBS|GetAttribsFlags::STYLESHEET) ) ||
469 ( *rAttr.GetItem() != aAttribs.Get( rAttr.Which() ) ) )
471 aAttribs.InvalidateItem( rAttr.Which() );
477 if ( rAttr.GetStart() > nEnd )
489void ImpEditEngine::SetAttribs( EditSelection aSel, const SfxItemSet& rSet, SetAttribsMode nSpecial, bool bSetSelection )
491 aSel.Adjust( aEditDoc );
493 // When no selection => use the Attribute on the word.
494 // ( the RTF-parser should actually never call the Method without a Range )
495 if ( nSpecial == SetAttribsMode::WholeWord && !aSel.HasRange() )
496 aSel = SelectWord( aSel, css::i18n::WordType::ANYWORD_IGNOREWHITESPACES, false );
498 sal_Int32 nStartNode = aEditDoc.GetPos( aSel.Min().GetNode() );
499 sal_Int32 nEndNode = aEditDoc.GetPos( aSel.Max().GetNode() );
501 if ( IsUndoEnabled() && !IsInUndo() && aStatus.DoUndoAttribs() )
503 std::unique_ptr<EditUndoSetAttribs> pUndo = CreateAttribUndo( aSel, rSet );
504 pUndo->SetSpecial( nSpecial );
505 pUndo->SetUpdateSelection(bSetSelection);
506 InsertUndo( std::move(pUndo) );
509 bool bCheckLanguage = false;
510 if ( GetStatus().DoOnlineSpelling() )
512 bCheckLanguage = ( rSet.GetItemState( EE_CHAR_LANGUAGE ) == SfxItemState::SET ) ||
513 ( rSet.GetItemState( EE_CHAR_LANGUAGE_CJK ) == SfxItemState::SET ) ||
514 ( rSet.GetItemState( EE_CHAR_LANGUAGE_CTL ) == SfxItemState::SET );
517 // iterate over the paragraphs ...
518 for ( sal_Int32 nNode = nStartNode; nNode <= nEndNode; nNode++ )
520 bool bParaAttribFound = false;
521 bool bCharAttribFound = false;
523 DBG_ASSERT( aEditDoc.GetObject( nNode ), "Node not found:
SetAttribs" );
524 DBG_ASSERT( GetParaPortions().SafeGetObject( nNode ), "Portion not found:
SetAttribs" );
526 ContentNode* pNode = aEditDoc.GetObject( nNode );
527 ParaPortion* pPortion = GetParaPortions()[nNode];
529 const sal_Int32 nStartPos = nNode==nStartNode ? aSel.Min().GetIndex() : 0;
530 const sal_Int32 nEndPos = nNode==nEndNode ? aSel.Max().GetIndex() : pNode->Len(); // can also be == nStart!
532 // Iterate over the Items...
533 for ( sal_uInt16 nWhich = EE_ITEMS_START; nWhich <= EE_CHAR_END; nWhich++)
535 if ( rSet.GetItemState( nWhich ) == SfxItemState::SET )
537 const SfxPoolItem& rItem = rSet.Get( nWhich );
538 if ( nWhich <= EE_PARA_END )
540 pNode->GetContentAttribs().GetItems().Put( rItem );
541 bParaAttribFound = true;
545 aEditDoc.InsertAttrib( pNode, nStartPos, nEndPos, rItem );
546 bCharAttribFound = true;
547 if ( nSpecial == SetAttribsMode::Edge )
549 CharAttribList::AttribsType& rAttribs = pNode->GetCharAttribs().GetAttribs();
550 for (std::unique_ptr<EditCharAttrib> & rAttrib : rAttribs)
552 EditCharAttrib& rAttr = *rAttrib;
553 if (rAttr.GetStart() > nEndPos)
556 if (rAttr.GetEnd() == nEndPos && rAttr.Which() == nWhich)
567 if ( bParaAttribFound )
569 ParaAttribsChanged( pPortion->GetNode() );
571 else if ( bCharAttribFound )
574 if ( !pNode->Len() || ( nStartPos != nEndPos ) )
576 pPortion->MarkSelectionInvalid( nStartPos );
577 if ( bCheckLanguage )
578 pNode->GetWrongList()->SetInvalidRange(nStartPos, nEndPos);
584void ImpEditEngine::RemoveCharAttribs( EditSelection aSel, EERemoveParaAttribsMode eMode, sal_uInt16 nWhich )
586 aSel.Adjust( aEditDoc );
588 sal_Int32 nStartNode = aEditDoc.GetPos( aSel.Min().GetNode() );
589 sal_Int32 nEndNode = aEditDoc.GetPos( aSel.Max().GetNode() );
590 bool bRemoveParaAttribs = eMode == EERemoveParaAttribsMode::RemoveAll;
591 const SfxItemSet* _pEmptyItemSet = bRemoveParaAttribs ? &GetEmptyItemSet() : nullptr;
593 if ( IsUndoEnabled() && !IsInUndo() && aStatus.DoUndoAttribs() )
595 // Possibly a special Undo, or itemset*
596 std::unique_ptr<EditUndoSetAttribs> pUndo = CreateAttribUndo( aSel, GetEmptyItemSet() );
597 pUndo->SetRemoveAttribs( true );
598 pUndo->SetRemoveParaAttribs( bRemoveParaAttribs );
599 pUndo->SetRemoveWhich( nWhich );
600 InsertUndo( std::move(pUndo) );
603 // iterate over the paragraphs ...
604 for ( sal_Int32 nNode = nStartNode; nNode <= nEndNode; nNode++ )
606 ContentNode* pNode = aEditDoc.GetObject( nNode );
607 ParaPortion* pPortion = GetParaPortions()[nNode];
609 DBG_ASSERT( aEditDoc.GetObject( nNode ), "Node not found:
SetAttribs" );
610 DBG_ASSERT( GetParaPortions().SafeGetObject( nNode ), "Portion not found:
SetAttribs" );
612 const sal_Int32 nStartPos = nNode==nStartNode ? aSel.Min().GetIndex() : 0;
613 const sal_Int32 nEndPos = nNode==nEndNode ? aSel.Max().GetIndex() : pNode->Len(); // can also be == nStart!
615 // Optimize: If whole paragraph, then RemoveCharAttribs (nPara)?
616 bool bChanged = aEditDoc.RemoveAttribs( pNode, nStartPos, nEndPos, nWhich );
617 if ( bRemoveParaAttribs )
619 SetParaAttribs( nNode, *_pEmptyItemSet ); // Invalidated
621 else if (eMode == EERemoveParaAttribsMode::RemoveCharItems)
623 // For 'Format-Standard' also the character attributes should
624 // disappear, which were set as paragraph attributes by the
625 // DrawingEngine. These could not have been set by the user anyway.
627 // #106871# Not when nWhich
628 // Would have been better to offer a separate method for format/standard...
631 SfxItemSet aAttribs( GetParaAttribs( nNode ) );
632 for ( sal_uInt16 nW = EE_CHAR_START; nW <= EE_CHAR_END; nW++ )
633 aAttribs.ClearItem( nW );
634 SetParaAttribs( nNode, aAttribs );
638 if ( bChanged && !bRemoveParaAttribs )
641 pPortion->MarkSelectionInvalid( nStartPos );
646void ImpEditEngine::RemoveCharAttribs( sal_Int32 nPara, sal_uInt16 nWhich, bool bRemoveFeatures )
648 ContentNode* pNode = aEditDoc.GetObject( nPara );
649 ParaPortion* pPortion = GetParaPortions().SafeGetObject( nPara );
654 if ( !pNode || !pPortion )
658 CharAttribList::AttribsType& rAttrs = pNode->GetCharAttribs().GetAttribs();
659 EditCharAttrib* pAttr = GetAttrib(rAttrs, nAttr);
662 if ( ( !pAttr->IsFeature() || bRemoveFeatures ) &&
663 ( !nWhich || ( pAttr->GetItem()->Which() == nWhich ) ) )
665 pNode->GetCharAttribs().Remove(nAttr);
669 pAttr = GetAttrib(rAttrs, nAttr);
672#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
673 CharAttribList::DbgCheckAttribs(pNode->GetCharAttribs());
676 pPortion->MarkSelectionInvalid( 0 );
679void ImpEditEngine::SetParaAttribs( sal_Int32 nPara, const SfxItemSet& rSet )
681 ContentNode* pNode = aEditDoc.GetObject( nPara );
686 if ( pNode->GetContentAttribs().GetItems() == rSet )
689 if ( IsUndoEnabled() && !IsInUndo() && aStatus.DoUndoAttribs() )
691 if ( rSet.GetPool() != &aEditDoc.GetItemPool() )
693 SfxItemSet aTmpSet( GetEmptyItemSet() );
695 InsertUndo(std::make_unique<EditUndoSetParaAttribs>(pEditEngine, nPara, pNode->GetContentAttribs().GetItems(), aTmpSet));
699 InsertUndo(std::make_unique<EditUndoSetParaAttribs>(pEditEngine, nPara, pNode->GetContentAttribs().GetItems(), rSet));
703 bool bCheckLanguage = ( rSet.GetItemState( EE_CHAR_LANGUAGE ) == SfxItemState::SET ) ||
704 ( rSet.GetItemState( EE_CHAR_LANGUAGE_CJK ) == SfxItemState::SET ) ||
705 ( rSet.GetItemState( EE_CHAR_LANGUAGE_CTL ) == SfxItemState::SET );
707 pNode->GetContentAttribs().GetItems().Set( rSet );
709 if ( bCheckLanguage && pNode->GetWrongList() )
710 pNode->GetWrongList()->ResetInvalidRange(0, pNode->Len());
712 if ( aStatus.UseCharAttribs() )
713 pNode->CreateDefFont();
715 ParaAttribsChanged( pNode );
718const SfxItemSet& ImpEditEngine::GetParaAttribs( sal_Int32 nPara ) const
720 const ContentNode* pNode = aEditDoc.GetObject( nPara );
722 return pNode->GetContentAttribs().GetItems();
725bool ImpEditEngine::HasParaAttrib( sal_Int32 nPara, sal_uInt16 nWhich ) const
727 const ContentNode* pNode = aEditDoc.GetObject( nPara );
729 return pNode->GetContentAttribs().HasItem( nWhich );
732const SfxPoolItem& ImpEditEngine::GetParaAttrib( sal_Int32 nPara, sal_uInt16 nWhich ) const
734 const ContentNode* pNode = aEditDoc.GetObject(nPara);
736 return pNode->GetContentAttribs().GetItem(nWhich);
739void ImpEditEngine::GetCharAttribs( sal_Int32 nPara, std::vector<EECharAttrib>& rLst ) const
742 const ContentNode* pNode = aEditDoc.GetObject( nPara );
746 rLst.reserve(pNode->GetCharAttribs().Count());
747 const CharAttribList::AttribsType& rAttrs = pNode->GetCharAttribs().GetAttribs();
748 for (const auto & i : rAttrs)
750 const EditCharAttrib& rAttr = *i;
751 EECharAttrib aEEAttr(rAttr.GetStart(), rAttr.GetEnd(), rAttr.GetItem());
752 rLst.push_back(aEEAttr);
756void ImpEditEngine::ParaAttribsToCharAttribs( ContentNode* pNode )
758 pNode->GetCharAttribs().DeleteEmptyAttribs( GetEditDoc().GetItemPool() );
759 sal_Int32 nEndPos = pNode->Len();
760 for ( sal_uInt16 nWhich = EE_CHAR_START; nWhich <= EE_CHAR_END; nWhich++ )
762 if ( pNode->GetContentAttribs().HasItem( nWhich ) )
764 const SfxPoolItem& rItem = pNode->GetContentAttribs().GetItem( nWhich );
766 sal_Int32 nLastEnd = 0;
767 const EditCharAttrib* pAttr = pNode->GetCharAttribs().FindNextAttrib( nWhich, nLastEnd );
770 nLastEnd = pAttr->GetEnd();
771 if ( pAttr->GetStart() > nLastEnd )
772 aEditDoc.InsertAttrib( pNode, nLastEnd, pAttr->GetStart(), rItem );
773 // #112831# Last Attr might go from 0xffff to 0x0000
774 pAttr = nLastEnd ? pNode->GetCharAttribs().FindNextAttrib( nWhich, nLastEnd ) : nullptr;
778 if ( nLastEnd < nEndPos )
779 aEditDoc.InsertAttrib( pNode, nLastEnd, nEndPos, rItem );
783 // Portion does not need to be invalidated here, happens elsewhere.
786IdleFormattter::IdleFormattter()
793IdleFormattter::~IdleFormattter()
798void IdleFormattter::DoIdleFormat( EditView* pV )
811void IdleFormattter::ForceTimeout()
820ImplIMEInfos::ImplIMEInfos( const EditPaM& rPos, OUString _aOldTextAfterStartPos )
821 : aOldTextAfterStartPos(std::move( _aOldTextAfterStartPos )),
824 bWasCursorOverwrite(false)
828ImplIMEInfos::~ImplIMEInfos()
832void ImplIMEInfos::CopyAttribs( const ExtTextInputAttr* pA, sal_uInt16 nL )
835 pAttribs.reset( new ExtTextInputAttr[ nL ] );
836 memcpy( pAttribs.get(), pA, nL*sizeof(ExtTextInputAttr) );
839void ImplIMEInfos::DestroyAttribs()
845/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
const SfxStyleSheet * GetStyleSheet() const
ContentAttribs & GetContentAttribs()
WrongList * GetWrongList()
SfxStyleSheet * GetStyleSheet()
void SetStyleSheet(SfxStyleSheet *pS, bool bRecalcFont=true)
sal_Int32 GetPos(const ContentNode *pNode) const
const ContentNode * GetObject(sal_Int32 nPos) const
virtual void StyleSheetChanged(SfxStyleSheet *pStyle)
const ContentNode * GetNode() const
bool DbgIsBuggy(EditDoc const &rDoc) const
void Adjust(const EditDoc &rNodes)
SfxStyleSheetPool * GetStyleSheetPool() const
void RemoveCharAttribs(EditSelection aSel, EERemoveParaAttribsMode eMode, sal_uInt16 nWhich)
const SfxItemSet & GetParaAttribs(sal_Int32 nPara) const
void Undo(EditView *pView)
EditEngine * GetEditEnginePtr() const
const SfxStyleSheet * GetStyleSheet(sal_Int32 nPara) const
bool HasParaAttrib(sal_Int32 nPara, sal_uInt16 nWhich) const
SfxItemSet GetAttribs(sal_Int32 nPara, sal_Int32 nStart, sal_Int32 nEnd, GetAttribsFlags nFlags=GetAttribsFlags::ALL) const
void RemoveStyleFromParagraphs(SfxStyleSheet const *pStyle)
InternalEditStatus aStatus
void SetAttribs(EditSelection aSel, const SfxItemSet &rSet, SetAttribsMode nSpecial=SetAttribsMode::NONE, bool bSetSelection=true)
void FormatAndLayout(EditView *pCurView=nullptr, bool bCalledFromUndo=false)
void SetStyleSheetPool(SfxStyleSheetPool *pSPool)
std::unique_ptr< EditUndoSetAttribs > CreateAttribUndo(EditSelection aSel, const SfxItemSet &rSet)
void UpdateParagraphsWithStyleSheet(SfxStyleSheet *pStyle)
const SfxPoolItem & GetParaAttrib(sal_Int32 nPara, sal_uInt16 nWhich) const
ESelection CreateESel(const EditSelection &rSel) const
void InsertUndo(std::unique_ptr< EditUndo > pUndo, bool bTryMerge=false)
void ParaAttribsChanged(ContentNode const *pNode, bool bIgnoreUndoCheck=false)
bool SetUpdateLayout(bool bUpdate, EditView *pCurView=nullptr, bool bForceUpdate=false)
SfxStyleSheetPool * pStylePool
bool IsUpdateLayout() const
IdleFormattter aIdleFormatter
bool IsUndoEnabled() const
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
void SetStyleSheet(EditSelection aSel, SfxStyleSheet *pStyle)
bool DoUndoAttribs() const
bool UseCharAttribs() const
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
const OUString & GetName() const
SfxStyleFamily GetFamily() const
virtual SfxItemSet & GetItemSet()
SfxStyleSheetBase * GetStyleSheet() const
void ResetInvalidRange(size_t nStart, size_t nEnd)
#define DBG_ASSERT(sCon, aError)
void CreateFont(SvxFont &rFont, const SfxItemSet &rSet, bool bSearchInParent, SvtScriptType nScriptType)
EditCharAttrib * GetAttrib(CharAttribList::AttribsType &rAttribs, std::size_t nAttr)