28#include <com/sun/star/uno/Any.hxx>
29#include <com/sun/star/uno/Reference.hxx>
30#include <com/sun/star/awt/Point.hpp>
31#include <com/sun/star/awt/Rectangle.hpp>
32#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
33#include <com/sun/star/accessibility/AccessibleEventId.hpp>
34#include <com/sun/star/accessibility/XAccessible.hpp>
35#include <com/sun/star/accessibility/XAccessibleContext.hpp>
36#include <com/sun/star/accessibility/XAccessibleComponent.hpp>
37#include <com/sun/star/accessibility/AccessibleStateType.hpp>
57#include "../table/accessiblecell.hxx"
70 template <
typename first_type,
typename second_type >
71 static ::std::pair< first_type, second_type >
makeSortedPair( first_type first,
75 return ::std::make_pair( second,
first );
77 return ::std::make_pair(
first, second );
102 void SetEditSource( ::std::unique_ptr< SvxEditSource > && pEditSource );
131 void FireEvent(
const AccessibleEventObject& rEvent )
const;
169 void ParagraphsMoved( sal_Int32 nFirst, sal_Int32 nMiddle, sal_Int32 nLast );
227 = std::numeric_limits<comphelper::AccessibleEventNotifier::TClientId>::max();
232 mnFirstVisibleChild( -1 ),
233 mnLastVisibleChild( -2 ),
236 mbGroupHasFocus( false ),
237 mbThisHasFocus( false ),
244 mnNotifierClientId(::
comphelper::AccessibleEventNotifier::registerClient())
259 catch(
const uno::Exception& ) {}
265 throw uno::RuntimeException(
"Unknown edit source",
mxFrontEnd);
269 if( !pTextForwarder )
270 throw uno::RuntimeException(
"Unable to fetch text forwarder, model might be dead",
mxFrontEnd);
272 if( !pTextForwarder->
IsValid() )
273 throw uno::RuntimeException(
"Text forwarder is invalid, model might be dead",
mxFrontEnd);
275 return *pTextForwarder;
281 throw uno::RuntimeException(
"Unknown edit source",
mxFrontEnd);
285 if( !pViewForwarder )
286 throw uno::RuntimeException(
"Unable to fetch view forwarder, model might be dead",
mxFrontEnd);
288 if( !pViewForwarder->
IsValid() )
289 throw uno::RuntimeException(
"View forwarder is invalid, model might be dead",
mxFrontEnd);
291 return *pViewForwarder;
297 throw uno::RuntimeException(
"Unknown edit source",
mxFrontEnd);
301 if( !pViewForwarder )
303 throw uno::RuntimeException(
"No edit view forwarder, object not in edit mode",
mxFrontEnd);
306 if( !pViewForwarder->
IsValid() )
308 throw uno::RuntimeException(
"View forwarder is invalid, object not in edit mode",
mxFrontEnd);
311 return *pViewForwarder;
317 throw uno::RuntimeException(
"AccessibleTextHelper_Impl::GetEditSource: no edit source",
mxFrontEnd );
324 class AccessibleTextHelper_OffsetChildIndex
327 explicit AccessibleTextHelper_OffsetChildIndex( sal_Int32 nDifference ) :
mnDifference(nDifference) {}
328 void operator()( ::accessibility::AccessibleEditableTextPara& rPara )
330 rPara.SetIndexInParent( rPara.GetIndexInParent() +
mnDifference );
345 if( nOldOffset != nOffset )
348 AccessibleTextHelper_OffsetChildIndex aFunctor( nOffset - nOldOffset );
351 AccessibleParaManager::WeakChildAdapter< AccessibleTextHelper_OffsetChildIndex > (aFunctor) );
372 SAL_INFO(
"svx",
"Paragraph " << nChild <<
" received focus");
378 SAL_INFO(
"svx",
"Paragraph " << nChild <<
" lost focus");
393 SAL_INFO(
"svx",
"Paragraph " << nNewChild <<
" received focus");
402 if( bOldFocus == bHaveFocus )
410 if ( !pAccessibleCell )
419 SAL_INFO(
"svx",
"Parent object received focus" );
428 if ( !pAccessibleCell )
437 SAL_INFO(
"svx",
"Parent object lost focus" );
456 catch(
const uno::Exception& ) {}
458 else if( bOldFocus != bHaveFocus )
463 SAL_INFO(
"svx",
"focus changed, Object " <<
this <<
", state: " << (bHaveFocus ?
"focused" :
"not focused") );
473 if( !pViewForwarder )
479 if ( pAccessibleCell )
483 return xCell->IsActiveCell();
486 return pViewForwarder->
IsValid();
488 catch(
const uno::RuntimeException& )
507 SAL_INFO(
"svx",
"Parent has focus!");
525 AccessibleEventId::CARET_CHANGED,
526 uno::Any(
static_cast<sal_Int32
>(-1)),
534 "focus changed, Object: " <<
this
535 <<
", Paragraph: " << aSelection.
nEndPara
536 <<
", Last paragraph: "
555 aOldCursor <<= static_cast<sal_Int32>(-1);
560 AccessibleEventId::CARET_CHANGED,
567 "caret changed, Object: " <<
this <<
", New pos: "
568 << aSelection.
nEndPos <<
", Old pos: "
570 << aSelection.
nEndPara <<
", Old para: "
574 ::std::pair<sal_Int32, sal_Int32> sortedSelection(
576 ::std::min( aSelection.
nEndPara, nMaxValidParaIndex ) ) );
579 ::std::pair<sal_Int32, sal_Int32> sortedLastSelection(
584 const sal_Int16 nTextSelChgEventId =
585 AccessibleEventId::TEXT_SELECTION_CHANGED;
595 sortedSelection.second+1,
596 nTextSelChgEventId );
608 sortedLastSelection.second+1,
609 nTextSelChgEventId );
617 sortedSelection.second+1,
618 nTextSelChgEventId );
632 for ( ; nPara <= aTmpSel.
nEndPara; ++nPara )
639 nTextSelChgEventId );
644 const sal_Int32 nParaStartPos =
647 const sal_Int32 nParaEndPos =
650 const sal_Int32 nLastParaStartPos =
653 const sal_Int32 nLastParaEndPos =
656 if ( nParaStartPos != nLastParaStartPos ||
657 nParaEndPos != nLastParaEndPos )
660 nPara, nTextSelChgEventId );
666 for ( ; nPara <= aTmpLastSel.
nEndPara; ++nPara )
672 nTextSelChgEventId );
683 catch(
const uno::RuntimeException& ) {}
702 FireEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN);
708 maEditSource.SetEditSource( ::std::unique_ptr< SvxEditSource >() );
737 std::scoped_lock aGuard(
maMutex );
762 for( sal_Int32 nCurrPara=0; nCurrPara<nParas; ++nCurrPara )
774 AccessibleEventId::CHILD );
779 catch(
const uno::Exception& )
781 OSL_FAIL(
"AccessibleTextHelper_Impl::UpdateVisibleChildren error while determining visible children");
789 if( bBroadcastEvents )
790 FireEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN);
799 ::accessibility::AccessibleParaManager::WeakChild& rChild = *it;
801 auto aHardRef( rChild.first.get() );
805 awt::Rectangle aNewRect = aHardRef->getBounds();
806 const awt::Rectangle& aOldRect = rChild.second;
808 if( aNewRect.X != aOldRect.X ||
809 aNewRect.Y != aOldRect.Y ||
810 aNewRect.Width != aOldRect.Width ||
811 aNewRect.Height != aOldRect.Height )
814 aHardRef->FireEvent( AccessibleEventId::BOUNDRECT_CHANGED );
817 rChild = ::accessibility::AccessibleParaManager::WeakChild( rChild.first, aNewRect );
829 OSL_FAIL(
"AccessibleTextHelper: range invalid" );
837 class AccessibleTextHelper_LostChildEvent
841 void operator()( const ::accessibility::AccessibleParaManager::WeakChild& rPara )
844 auto aHardRef( rPara.first.get() );
847 mrImpl.FireEvent(AccessibleEventId::CHILD,
uno::Any(),
uno::Any(css::uno::Reference<css::accessibility::XAccessible>(aHardRef)) );
891 if( nMiddle < nFirst )
893 ::std::swap(nFirst, nMiddle);
895 else if( nMiddle < nLast )
897 nLast = nLast + nMiddle - nFirst;
901 ::std::swap(nMiddle, nLast);
902 nLast = nLast + nMiddle - nFirst;
905 if( !(nFirst < nParas && nMiddle < nParas && nLast < nParas) )
916 ::accessibility::AccessibleParaManager::VectorOfChildren::const_iterator
begin =
maParaManager.begin();
917 ::accessibility::AccessibleParaManager::VectorOfChildren::const_iterator
end =
begin;
919 ::std::advance(
begin, nFirst );
920 ::std::advance(
end, nLast+1 );
925 AccessibleTextHelper_LostChildEvent aFunctor( *
this );
927 ::std::for_each(
begin,
end, aFunctor );
936 class AccessibleTextHelper_ChildrenTextChanged
939 void operator()( ::accessibility::AccessibleEditableTextPara& rPara )
950 class AccessibleTextHelper_QueueFunctor
953 AccessibleTextHelper_QueueFunctor() :
958 void operator()(
const SfxHint* pEvent )
967 if( !(!pEditSourceHint && pTextHint &&
968 (pTextHint->GetId() == SfxHintId::TextParaInserted ||
969 pTextHint->GetId() == SfxHintId::TextParaRemoved )) )
989 sal_Int32 GetNumberOfParasChanged()
const {
return mnParasChanged; }
995 sal_Int32 GetParaIndex()
const {
return mnParaIndex; }
1024 AccessibleTextHelper_QueueFunctor aFunctor;
1032 bool bEverythingUpdated(
false );
1034 if( std::abs( nNewParas - nCurrParas ) == 1 &&
1035 aFunctor.GetNumberOfParasChanged() == 1 )
1040 if( aFunctor.GetHintId() == SfxHintId::TextParaInserted )
1060 AccessibleEventId::CHILD );
1062 catch(
const uno::Exception& )
1064 OSL_FAIL(
"AccessibleTextHelper_Impl::ProcessQueue: could not create new paragraph");
1067 else if( aFunctor.GetHintId() == SfxHintId::TextParaRemoved )
1069 ::accessibility::AccessibleParaManager::VectorOfChildren::const_iterator
begin =
maParaManager.begin();
1070 ::std::advance(
begin, aFunctor.GetParaIndex() );
1071 ::accessibility::AccessibleParaManager::VectorOfChildren::const_iterator
end =
begin;
1072 ::std::advance(
end, 1 );
1076 ::uno::Reference< XAccessible > xPara(
begin->first.get());
1096 OSL_FAIL(
"AccessibleTextHelper_Impl::ProcessQueue() invalid hint id");
1099 else if( nNewParas != nCurrParas )
1115 FireEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN);
1118 bEverythingUpdated =
true;
1121 bool bUpdatedBoundRectAndVisibleChildren(
false);
1128 const SfxHint& rHint = *pHint;
1136 if (rHint.
GetId() == SfxHintId::ThisIsAnSdrHint)
1138 const SdrHint* pSdrHint =
static_cast< const SdrHint*
>( &rHint );
1176 switch( pEditSourceHint->GetId() )
1178 case SfxHintId::EditSourceParasMoved:
1182 "AccessibleTextHelper_Impl::NotifyHdl: Invalid notification");
1184 if( !bEverythingUpdated )
1187 pEditSourceHint->GetValue(),
1196 case SfxHintId::EditSourceSelectionChanged:
1203 catch(
const uno::Exception& ) {}
1208 else if(
const TextHint* pTextHint =
dynamic_cast<const TextHint*
>( &rHint ) )
1212 switch( pTextHint->GetId() )
1214 case SfxHintId::TextModified:
1217 sal_Int32 nPara( pTextHint->
GetValue() );
1220 AccessibleTextHelper_ChildrenTextChanged aNotifyChildrenFunctor;
1226 AccessibleParaManager::WeakChildAdapter< AccessibleTextHelper_ChildrenTextChanged > (aNotifyChildrenFunctor) );
1229 if( nPara < nParas )
1233 AccessibleParaManager::WeakChildAdapter< AccessibleTextHelper_ChildrenTextChanged > (aNotifyChildrenFunctor) );
1238 case SfxHintId::TextParaInserted:
1242 case SfxHintId::TextParaRemoved:
1246 case SfxHintId::TextHeightChanged:
1250 case SfxHintId::TextViewScrolled:
1257 if (!bUpdatedBoundRectAndVisibleChildren)
1261 bUpdatedBoundRectAndVisibleChildren =
true;
1264 else if (rHint.
GetId() == SfxHintId::SvxViewChanged)
1267 if (!bUpdatedBoundRectAndVisibleChildren)
1271 bUpdatedBoundRectAndVisibleChildren =
true;
1275 else if( rHint.
GetId() == SfxHintId::Dying)
1284 catch(
const uno::Exception& ) {}
1287 catch(
const uno::Exception& )
1312 if (rHint.
GetId() == SfxHintId::ThisIsAnSdrHint)
1314 const SdrHint* pSdrHint =
static_cast< const SdrHint*
>( &rHint );
1321 else if (rHint.
GetId() == SfxHintId::SvxViewChanged)
1335 else if(
const TextHint* pTextHint =
dynamic_cast<const TextHint*
>( &rHint ) )
1338 if(pTextHint->GetId() == SfxHintId::TextProcessNotifications)
1344 else if( rHint.
GetId() == SfxHintId::Dying )
1355 catch(
const uno::Exception& ) {}
1358 catch(
const uno::Exception& )
1377 catch(
const uno::Exception& ) {}
1387 catch(
const uno::Exception& ) {}
1394 maEditSource.SetEditSource( ::std::unique_ptr< SvxEditSource >() );
1401 AccessibleEventObject
aEvent;
1403 std::scoped_lock aGuard(
maMutex);
1408 aEvent = AccessibleEventObject(
mxFrontEnd->getAccessibleContext(), nEventId,
1409 rNewValue, rOldValue, -1);
1411 aEvent = AccessibleEventObject(uno::Reference<uno::XInterface>(), nEventId,
1412 rNewValue, rOldValue, -1);
1444 throw lang::IndexOutOfBoundsException(
"Invalid child index",
mxFrontEnd);
1447 DBG_ASSERT(
mxFrontEnd.is(),
"AccessibleTextHelper_Impl::UpdateVisibleChildren: no frontend set");
1467 if ( !nListenerCount )
1483 throw uno::RuntimeException(
"AccessibleTextHelper_Impl::getAccessibleAt: frontend invalid",
mxFrontEnd );
1485 uno::Reference< XAccessibleContext > xFrontEndContext =
mxFrontEnd->getAccessibleContext();
1487 if( !xFrontEndContext.is() )
1488 throw uno::RuntimeException(
"AccessibleTextHelper_Impl::getAccessibleAt: frontend invalid",
mxFrontEnd );
1490 uno::Reference< XAccessibleComponent > xFrontEndComponent( xFrontEndContext, uno::UNO_QUERY_THROW );
1493 Point aPoint( _aPoint.X, _aPoint.Y );
1507 "AccessibleTextHelper_Impl::getAccessibleAt: index value overflow");
1511 if( aParaBounds.
Contains( aLogPoint ) )
1537 mpImpl->CheckInvariants();
1541 mpImpl->CheckInvariants();
1545 return mpImpl->GetEditSource();
1555 mpImpl->CheckInvariants();
1558 mpImpl->SetEditSource( std::move(pEditSource) );
1561 mpImpl->CheckInvariants();
1568 mpImpl->CheckInvariants();
1571 mpImpl->SetEventSource( rInterface );
1574 mpImpl->CheckInvariants();
1584 mpImpl->CheckInvariants();
1587 mpImpl->SetFocus( bHaveFocus );
1590 mpImpl->CheckInvariants();
1597 mpImpl->CheckInvariants();
1599 bool bRet(
mpImpl->HaveFocus() );
1601 mpImpl->CheckInvariants();
1605 return mpImpl->HaveFocus();
1615 mpImpl->CheckInvariants();
1618 mpImpl->SetOffset( rPoint );
1621 mpImpl->CheckInvariants();
1631 mpImpl->CheckInvariants();
1634 mpImpl->SetStartIndex( nOffset );
1637 mpImpl->CheckInvariants();
1644 mpImpl->CheckInvariants();
1646 sal_Int32 nOffset =
mpImpl->GetStartIndex();
1648 mpImpl->CheckInvariants();
1652 return mpImpl->GetStartIndex();
1658 mpImpl->SetAdditionalChildStates( nChildStates );
1667 mpImpl->CheckInvariants();
1670 mpImpl->UpdateVisibleChildren();
1671 mpImpl->UpdateBoundRect();
1673 mpImpl->UpdateSelection();
1676 mpImpl->CheckInvariants();
1688 mpImpl->CheckInvariants();
1694 mpImpl->CheckInvariants();
1704 mpImpl->CheckInvariants();
1706 sal_Int64 nRet =
mpImpl->getAccessibleChildCount();
1708 mpImpl->CheckInvariants();
1712 return mpImpl->getAccessibleChildCount();
1721 mpImpl->CheckInvariants();
1723 uno::Reference< XAccessible > xRet =
mpImpl->getAccessibleChild(
i );
1725 mpImpl->CheckInvariants();
1729 return mpImpl->getAccessibleChild(
i );
1736 mpImpl->CheckInvariants();
1738 mpImpl->addAccessibleEventListener( xListener );
1740 mpImpl->CheckInvariants();
1742 mpImpl->addAccessibleEventListener( xListener );
1749 mpImpl->CheckInvariants();
1751 mpImpl->removeAccessibleEventListener( xListener );
1753 mpImpl->CheckInvariants();
1755 mpImpl->removeAccessibleEventListener( xListener );
1765 mpImpl->CheckInvariants();
1767 uno::Reference< XAccessible > xChild =
mpImpl->getAccessibleAtPoint( aPoint );
1769 mpImpl->CheckInvariants();
1773 return mpImpl->getAccessibleAtPoint( aPoint );
const sal_Int32 mnDifference
SfxHintId mnHintId
TextHint ID (removed/inserted) of last interesting event.
sal_Int32 mnParasChanged
number of paragraphs changed during queue processing.
AccessibleTextHelper_Impl & mrImpl
sal_Int32 mnParaIndex
index of paragraph added/removed last
SdrHintKind GetKind() const
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
sal_Int32 GetEndValue() const
sal_Int32 GetStartValue() const
virtual SvxEditViewForwarder * GetEditViewForwarder(bool bCreate=false)
virtual bool IsValid() const=0
virtual MapMode GetMapMode() const=0
virtual tools::Rectangle GetParaBounds(sal_Int32 nPara) const=0
virtual sal_Int32 GetParagraphCount() const=0
virtual bool IsValid() const=0
sal_Int32 GetValue() const
const sdr::table::CellRef & getCellRef() const
AccessibleTableShape * GetParentTable()
bool SetStateDirectly(sal_Int64 aState)
bool ResetStateDirectly(sal_Int64 aState)
This class handles the notification events for the AccessibleTextHelper class.
void Clear()
Clear event queue.
void Append(const SdrHint &rHint)
Append event to end of queue.
::std::unique_ptr< SfxHint > PopFront()
Pop first queue element.
bool IsEmpty() const
Query whether queue is empty.
void ForEach(Functor &rFunctor) const
Apply functor to every queue member.
void SetEventSource(const uno::Reference< XAccessible > &rInterface)
virtual ~AccessibleTextHelper_Impl() override
void CheckInvariants() const
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
void UpdateVisibleChildren(bool bBroadcastEvents=true)
AccessibleTextHelper_Impl()
void GotPropertyEvent(const uno::Any &rNewValue, const sal_Int16 nEventId) const
uno::Reference< XAccessible > getAccessibleChild(sal_Int64 i)
void SetAdditionalChildStates(sal_Int64 nChildStates)
void SetChildFocus(sal_Int32 nChild, bool bHaveFocus)
void SetOffset(const Point &)
uno::Reference< XAccessible > getAccessibleAtPoint(const awt::Point &aPoint)
SvxEditViewForwarder & GetEditViewForwarder() const
SvxEditSourceAdapter & GetEditSource() const
comphelper::AccessibleEventNotifier::TClientId getNotifierClientId() const
void ShutdownEditSource()
void removeAccessibleEventListener(const uno::Reference< XAccessibleEventListener > &xListener)
AccessibleTextEventQueue maEventQueue
sal_Int32 mnFirstVisibleChild
sal_Int64 getAccessibleChildCount() const
SvxViewForwarder & GetViewForwarder() const
void SetFocus(bool bHaveFocus)
void SetShapeFocus(bool bHaveFocus)
sal_Int32 GetStartIndex() const
void ChangeChildFocus(sal_Int32 nNewChild)
SvxEditSourceAdapter maEditSource
void FireEvent(const sal_Int16 nEventId, const uno::Any &rNewValue=uno::Any(), const uno::Any &rOldValue=uno::Any()) const
comphelper::AccessibleEventNotifier::TClientId mnNotifierClientId
client Id from AccessibleEventNotifier
void SetStartIndex(sal_Int32 nOffset)
ESelection maLastSelection
::accessibility::AccessibleParaManager maParaManager
sal_Int32 mnLastVisibleChild
::std::vector< sal_Int16 > VectorOfStates
void addAccessibleEventListener(const uno::Reference< XAccessibleEventListener > &xListener)
SvxTextForwarder & GetTextForwarder() const
void ParagraphsMoved(sal_Int32 nFirst, sal_Int32 nMiddle, sal_Int32 nLast)
Point maOffset
our current offset to the containing shape/cell (guarded by maMutex)
static constexpr comphelper::AccessibleEventNotifier::TClientId snNotifierClientRevoked
void SetEditSource(::std::unique_ptr< SvxEditSource > &&pEditSource)
uno::Reference< XAccessible > mxFrontEnd
void AddEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &xListener)
Implements addEventListener.
css::uno::Reference< css::accessibility::XAccessible > GetAt(const css::awt::Point &aPoint)
Implements getAccessibleAt.
const SvxEditSource & GetEditSource() const
Query the current edit source.
css::uno::Reference< css::accessibility::XAccessible > GetChild(sal_Int64 i)
Implements getAccessibleChild.
void SetStartIndex(sal_Int32 nOffset)
Set offset the object adds to all children's indices.
bool HaveFocus()
Query the focus state of the surrounding object.
void UpdateChildren()
Update the visible children.
void Dispose()
Drop all references and enter disposed state.
AccessibleTextHelper(::std::unique_ptr< SvxEditSource > &&pEditSource)
Create accessible text object for given edit source.
void RemoveEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &xListener)
Implements removeEventListener.
void SetAdditionalChildStates(sal_Int64 rChildStates)
Sets a bitset of additional accessible states.
void SetEventSource(const css::uno::Reference< css::accessibility::XAccessible > &rInterface)
Set the event source.
void SetFocus(bool bHaveFocus=true)
Set the focus state of the accessibility object.
void SetEditSource(::std::unique_ptr< SvxEditSource > &&pEditSource)
Set the current edit source.
sal_Int32 GetStartIndex() const
Query offset the object adds to all children's indices.
void SetOffset(const Point &rPoint)
Set offset of EditEngine/Outliner from parent.
const std::unique_ptr< AccessibleTextHelper_Impl > mpImpl
@dyn
sal_Int64 GetChildCount() const
Implements getAccessibleChildCount.
static sal_Int32 addEventListener(const TClientId _nClient, const css::uno::Reference< css::accessibility::XAccessibleEventListener > &_rxListener)
static void addEvent(const TClientId _nClient, const css::accessibility::AccessibleEventObject &_rEvent)
static sal_Int32 removeEventListener(const TClientId _nClient, const css::uno::Reference< css::accessibility::XAccessibleEventListener > &_rxListener)
static void revokeClient(const TClientId _nClient)
#define DBG_ASSERT(sCon, aError)
#define DBG_TESTSOLARMUTEX()
#define DBG_UNHANDLED_EXCEPTION(...)
#define EE_PARA_NOT_FOUND
#define EE_INDEX_NOT_FOUND
#define SAL_INFO(area, stream)
static ::std::pair< first_type, second_type > makeSortedPair(first_type first, second_type second)
class SvxPropertySetInfoPool
constexpr OUStringLiteral first
enumrange< T >::Iterator begin(enumrange< T >)
void GetSelection(struct ESelection &rSel, SvxTextForwarder const *pForwarder) noexcept