27 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
28 #include <rtl/ustrbuf.hxx>
32 #include <osl/diagnose.h>
33 #include <strings.hrc>
56 rJsonWriter.
put(
"text", static_cast<const SvLBoxString*>(pIt)->GetText());
60 auto aColumns = rJsonWriter.
startArray(
"columns");
71 rJsonWriter.
put(
"text", pStringItem->
GetText());
80 if (rChildren.size() == 1)
82 auto& rChild = rChildren[0];
85 if (static_cast<const SvLBoxString*>(pChild)->GetText() ==
"<dummy>")
86 rJsonWriter.
put(
"ondemand",
"true");
94 rJsonWriter.
put(
"state",
"false");
96 rJsonWriter.
put(
"state",
"true");
100 rJsonWriter.
put(
"selected",
"true");
107 auto childrenNode = rJsonWriter.
startArray(
"children");
123 auto entriesNode = rJsonWriter.
startArray(
"entries");
158 for( sal_uInt16 nCurTab = 1; nCurTab < sal_uInt16(
mvTabList.size()); nCurTab++ )
176 pEntry->
AddItem(std::make_unique<SvLBoxString>(OUString(aToken)));
202 MapMode aMMDest( MapUnit::MapPixel );
204 for( sal_uInt16 nIdx = 0; nIdx < sal_uInt16(
mvTabList.size()); nIdx++, pTabPositions++ )
206 Size aSize( *pTabPositions, 0 );
219 sal_uInt32 nPos,
void* pUserData )
237 OUString aFirstStr( aStr );
238 sal_Int32 nEnd = aFirstStr.indexOf(
'\t' );
241 aFirstStr = aFirstStr.copy(0, nEnd);
256 DBG_ASSERT(pEntry,
"GetEntryText:Invalid Entry");
257 OUStringBuffer aResult;
262 while( nCur < nCount )
269 if (!aResult.isEmpty())
270 aResult.append(
"\t");
271 aResult.append(static_cast<const SvLBoxString&>(rStr).
GetText());
283 return aResult.makeStringAndClear();
295 DBG_ASSERT( pEntry,
"SvTabListBox::GetCellText(): Invalid Entry" );
301 aResult = static_cast<const SvLBoxString&>(rStr).GetText();
312 if ( pTmpEntry == pEntry )
314 pTmpEntry =
Next( pTmpEntry );
329 DBG_ASSERT( pEntry,
"GetTabEntryText(): Invalid entry " );
330 OUStringBuffer aResult;
335 while( nCur < nCount )
340 if ( nCol == 0xffff )
342 if (!aResult.isEmpty())
343 aResult.append(
"\t");
344 aResult.append(static_cast<const SvLBoxString&>(rBoxItem).
GetText());
351 if ( sRet.isEmpty() )
352 sRet =
VclResId( STR_SVT_ACC_EMPTY_FIELD );
361 return aResult.makeStringAndClear();
368 for ( i = 0; i <
nCount; ++i )
371 if ( nPos == _nEntryPos )
391 for ( i = 0; i < nCount; ++i )
394 if ( _rPos == _nEntryPos )
442 return aTabs[ nTab ]->GetPos();
458 , m_bFirstPaint(true)
460 , m_pAccessible(nullptr)
487 DBG_ASSERT( pHeaderBar,
"invalid header bar initialization" );
488 m_pImpl->m_pHeaderBar = pHeaderBar;
513 const OUString& rStr,
SvTreeListEntry* pParent, sal_uInt32 nPos, sal_uInt16 nCol,
void* pUserData )
539 auto aHeaders = rJsonWriter.
startArray(
"headers");
551 m_pImpl->m_pHeaderBar->SetOffset( -GetXOffset() );
557 DBG_ASSERT( pParent,
"SvHeaderTabListBox..CreateAccessibleHdl_Impl - accessible parent not found" );
560 css::uno::Reference< XAccessible > xAccParent = pParent->
GetAccessible();
561 if ( xAccParent.is() )
563 Reference< XAccessible > xAccessible =
m_pImpl->m_aFactoryAccess.getFactory().createAccessibleBrowseBoxHeaderBar(
565 m_pImpl->m_pHeaderBar->SetAccessible( xAccessible );
590 sal_uInt16 nItemCount = pEntry->
ItemCount();
591 if ( nItemCount > ( _nColumn + 1 ) )
603 SAL_WARN(
"svtools.contnr",
"SvHeaderTabListBox::IsCellCheckBox(): column out of range" );
615 return m_pImpl->m_pHeaderBar->GetItemCount();
625 for ( sal_uInt32
i = 0;
i < nCount; ++
i )
650 return m_pImpl->m_pHeaderBar->GetItemText(
m_pImpl->m_pHeaderBar->GetItemId( _nColumn ) );
728 pParent =
m_pImpl->m_pHeaderBar->GetAccessibleParentWindow();
730 aRect =
m_pImpl->m_pHeaderBar->GetWindowExtentsRelative( pParent );
747 DBG_ASSERT( !_bIsHeader || 0 == _nRow,
"invalid parameters" );
754 DBG_ASSERT(
m_pImpl->m_pHeaderBar->GetItemCount() > _nColumn,
"invalid column" );
756 aTopLeft.setX( aItemRect.Left() );
757 Size aSize = aItemRect.GetSize();
772 OSL_ENSURE(
m_pAccessible,
"Invalid call: Accessible is null" );
774 Reference< XAccessible > xChild;
779 xChild =
m_pImpl->m_aFactoryAccess.getFactory().createAccessibleCheckBoxCell(
782 xChild =
m_pImpl->m_aFactoryAccess.getFactory().createAccessibleBrowseBoxTableCell(
790 Reference< XAccessible > xHeader;
809 xChild =
m_pImpl->m_aFactoryAccess.getFactory().createAccessibleBrowseBoxHeaderCell(
827 Reference< XAccessible > xControl;
869 if (nColumnCount > 0)
871 sal_Int32 nRow = _nPos / nColumnCount;
872 sal_uInt16 nColumn =
static_cast< sal_uInt16
>( _nPos % nColumnCount );
884 aRetText =
m_pImpl->m_pHeaderBar->GetItemText(
m_pImpl->m_pHeaderBar->GetItemId( static_cast<sal_uInt16>(_nPos) ) );
894 OSL_FAIL(
"BrowseBox::GetAccessibleName: invalid enum!");
906 if (nColumnCount > 0)
908 sal_Int32 nRow = _nPos / nColumnCount;
909 sal_uInt16 nColumn =
static_cast< sal_uInt16
>( _nPos % nColumnCount );
911 OUString aText(
VclResId(STR_SVT_ACC_DESC_TABLISTBOX) );
912 aText = aText.replaceFirst(
"%1", OUString::number( nRow ) );
913 OUString sColHeader =
m_pImpl->m_pHeaderBar->GetItemText(
m_pImpl->m_pHeaderBar->GetItemId( nColumn ) );
914 if ( sColHeader.isEmpty() )
915 sColHeader = OUString::number( nColumn );
916 aText = aText.replaceFirst(
"%2", sColHeader );
931 _rStateSet.
AddState( AccessibleStateType::FOCUSABLE );
933 _rStateSet.
AddState( AccessibleStateType::FOCUSED );
935 _rStateSet.
AddState( AccessibleStateType::ACTIVE );
938 _rStateSet.
AddState( AccessibleStateType::ENABLED );
939 _rStateSet.
AddState( AccessibleStateType::SENSITIVE );
942 _rStateSet.
AddState( AccessibleStateType::VISIBLE );
946 _rStateSet.
AddState( AccessibleStateType::MANAGES_DESCENDANTS );
947 _rStateSet.
AddState( AccessibleStateType::MULTI_SELECTABLE );
957 _rStateSet.
AddState( AccessibleStateType::VISIBLE );
959 _rStateSet.
AddState( AccessibleStateType::ENABLED );
960 _rStateSet.
AddState( AccessibleStateType::TRANSIENT );
967 _rStateSet.
AddState( AccessibleStateType::VISIBLE );
968 _rStateSet.
AddState( AccessibleStateType::FOCUSABLE );
969 _rStateSet.
AddState( AccessibleStateType::TRANSIENT );
971 _rStateSet.
AddState( AccessibleStateType::ENABLED );
981 _rStateSet.
AddState( AccessibleStateType::SELECTABLE );
982 _rStateSet.
AddState( AccessibleStateType::TRANSIENT );
986 _rStateSet.
AddState( AccessibleStateType::VISIBLE );
987 _rStateSet.
AddState( AccessibleStateType::ENABLED );
992 _rStateSet.
AddState( AccessibleStateType::ACTIVE );
993 _rStateSet.
AddState( AccessibleStateType::SELECTED );
996 _rStateSet.
AddState( AccessibleStateType::ENABLED );
1037 DBG_ASSERT( pParent,
"SvHeaderTabListBox::::CreateAccessible - accessible parent not found" );
1039 Reference< XAccessible > xAccessible;
1044 Reference< XAccessible > xAccParent = pParent->
GetAccessible();
1045 if ( xAccParent.is() )
1047 m_pAccessible =
m_pImpl->m_aFactoryAccess.getFactory().createAccessibleTabListBox( xAccParent, *
this );
1063 std::vector< tools::Rectangle > aRects;
void AddItem(std::unique_ptr< SvLBoxItem > pItem)
#define LINK(Instance, Class, Member)
tools::Rectangle GetBoundingRect(const SvTreeListEntry *pEntry)
Calculate and return the bounding rectangle of an entry.
SvTabListBox(vcl::Window *pParent, WinBits)
sal_uInt32 GetEntryPos(const SvTreeListEntry *pEntry) const
SvTreeListEntry * GetChildOnPos(SvTreeListEntry *_pParent, sal_uInt32 _nEntryPos, sal_uInt32 &_rPos) const
SvTreeList * GetModel() const
void SetTabEditable(sal_uInt16 nTab, bool bEditable)
vcl::Window * GetAccessibleParentWindow() const
void SetScrolledHdl(const Link< SvTreeListBox *, void > &rLink)
sal_uInt32 GetEntryCount() const
std::basic_string_view< charT, traits > getToken(std::basic_string_view< charT, traits > sv, charT delimiter, std::size_t &position)
A cell of the data table.
sal_uInt32 GetAbsPos(const SvTreeListEntry *pEntry) const
const OUString & GetText() const
SvTreeListEntry * GetCurEntry() const
The row header bar ("handle column").
constexpr tools::Long Width() const
virtual void DumpAsPropertyTree(tools::JsonWriter &)
Dumps itself and potentially its children to a property tree, to be written easily to JSON...
css::uno::Reference< css::accessibility::XAccessible > GetAccessible(bool bCreate=true)
bool GetActivateOnSingleClick() const
SvTreeListEntry * NextSibling() const
virtual SvTreeListEntry * InsertEntry(const OUString &rText, SvTreeListEntry *pParent=nullptr, bool bChildrenOnDemand=false, sal_uInt32 nPos=TREELIST_APPEND, void *pUserData=nullptr) override
virtual OUString GetText() const
tools::Rectangle GetWindowExtentsRelative(const vcl::Window *pRelativeWindow) const
constexpr SvLBoxTabFlags MYTABMASK
virtual void SetTabs() override
OUString VclResId(TranslateId aId)
The horizontal column header bar.
void SetHighlightRange(sal_uInt16 nFirstTab=0, sal_uInt16 nLastTab=0xffff)
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
#define DBG_ASSERT(sCon, aError)
OUString GetCellText(sal_uInt32 nPos, sal_uInt16 nCol) const
sal_uInt32 GetSelectionCount() const
bool IsSelected(const SvTreeListEntry *pEntry) const
bool IsUpdateMode() const
SvTreeListEntry * FirstChild(SvTreeListEntry *pParent) const
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
virtual ~SvTabListBox() override
std::vector< SvLBoxTab > mvTabList
virtual void InitEntry(SvTreeListEntry *, const OUString &, const Image &, const Image &)
virtual SvTreeListEntry * InsertEntryToColumn(const OUString &, SvTreeListEntry *pParent, sal_uInt32 nPos, sal_uInt16 nCol, void *pUserData=nullptr)
const SvLBoxItem & GetItem(size_t nPos) const
void SelectAll(bool bSelect)
void SetTabJustify(sal_uInt16 nTab, SvTabJustify)
Size LogicToLogic(const Size &rSzSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
virtual SvLBoxItemType GetType() const =0
SvTreeListEntries & GetChildEntries()
std::vector< std::unique_ptr< SvLBoxTab > > aTabs
SvTreeListEntry * Next(SvTreeListEntry *pEntry) const
virtual css::uno::Reference< css::accessibility::XAccessible > getMyself()=0
returns the XAccessible object itself
SvTreeListEntry * First() const
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE) override
sal_uInt32 GetLevelChildCount(SvTreeListEntry *pParent) const
virtual OUString GetEntryText(SvTreeListEntry *pEntry) const override
virtual void InitEntry(SvTreeListEntry *, const OUString &, const Image &, const Image &) override
virtual void DumpAsPropertyTree(tools::JsonWriter &rJsonWriter) override
Dumps itself and potentially its children to a property tree, to be written easily to JSON...
virtual SvTreeListEntry * InsertEntry(const OUString &rText, SvTreeListEntry *pParent=nullptr, bool bChildrenOnDemand=false, sal_uInt32 nPos=TREELIST_APPEND, void *pUserData=nullptr)
virtual css::uno::Reference< css::accessibility::XAccessible > getHeaderBar()=0
returns the accessible object for the column header bar
SvTreeListEntry * GetEntry(SvTreeListEntry *pParent, sal_uInt32 nPos) const
static void lcl_DumpEntryAndSiblings(tools::JsonWriter &rJsonWriter, SvTreeListEntry *pEntry, SvTabListBox *pTabListBox, bool bCheckButtons)
::OutputDevice const * GetOutDev() const
A cell of the column header bar.
SvButtonState GetCheckButtonState(SvTreeListEntry *) const
const SvLBoxItem * GetFirstItem(SvLBoxItemType eType) const
SvTreeListEntry * GetEntryOnPos(sal_uInt32 _nEntryPos) const
A cell of the row header bar.
static std::u16string_view GetToken(std::u16string_view sStr, sal_Int32 &nIndex)
AccessibleBrowseBoxObjType
This enumeration contains a constant for each kind of accessible object of a BrowseBox.
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
#define SAL_WARN(area, stream)
tools::Long GetPos() const
bool Select(SvTreeListEntry *pEntry, bool bSelect=true)
virtual sal_uInt32 Insert(SvTreeListEntry *pEnt, SvTreeListEntry *pPar, sal_uInt32 nPos=TREELIST_APPEND)
bool IsReallyVisible() const
tools::Long GetLogicTab(sal_uInt16 nTab)
OUString GetTabEntryText(sal_uInt32 nPos, sal_uInt16 nCol) const
void AddState(sal_Int16 aState)
bool GetGlyphBoundRects(const Point &rOrigin, const OUString &rStr, int nIndex, int nLen, std::vector< tools::Rectangle > &rVector) const
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect) override
IMPL_LINK_NOARG(SvHeaderTabListBox, ScrollHdl_Impl, SvTreeListBox *, void)
std::vector< std::unique_ptr< SvTreeListEntry > > SvTreeListEntries
void AddTab(tools::Long nPos, SvLBoxTabFlags nFlags)
bool m_bDetectedRangeSegmentation false