27 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
28 #include <rtl/ustrbuf.hxx>
31 #include <osl/diagnose.h>
32 #include <strings.hrc>
55 rJsonWriter.
put(
"text", static_cast<const SvLBoxString*>(pIt)->GetText());
59 auto aColumns = rJsonWriter.
startArray(
"columns");
70 rJsonWriter.
put(
"text", pStringItem->
GetText());
79 if (rChildren.size() == 1)
81 auto& rChild = rChildren[0];
84 if (static_cast<const SvLBoxString*>(pChild)->GetText() ==
"<dummy>")
85 rJsonWriter.
put(
"ondemand",
"true");
93 rJsonWriter.
put(
"state",
"false");
95 rJsonWriter.
put(
"state",
"true");
99 rJsonWriter.
put(
"selected",
"true");
106 auto childrenNode = rJsonWriter.
startArray(
"children");
122 auto entriesNode = rJsonWriter.
startArray(
"entries");
157 for( sal_uInt16 nCurTab = 1; nCurTab < sal_uInt16(
mvTabList.size()); nCurTab++ )
175 pEntry->
AddItem(std::make_unique<SvLBoxString>(aToken));
201 MapMode aMMDest( MapUnit::MapPixel );
203 for( sal_uInt16 nIdx = 0; nIdx < sal_uInt16(
mvTabList.size()); nIdx++, pTabPositions++ )
205 Size aSize( *pTabPositions, 0 );
224 const Image& rExpandedEntryBmp,
225 const Image& rCollapsedEntryBmp,
231 pParent, nPos, 0xffff, pUserData );
247 OUString aFirstStr( aStr );
248 sal_Int32 nEnd = aFirstStr.indexOf(
'\t' );
251 aFirstStr = aFirstStr.copy(0, nEnd);
260 const Image& rExpandedEntryBmp,
const Image& rCollapsedEntryBmp,
273 OUString aFirstStr( aStr );
274 sal_Int32 nEnd = aFirstStr.indexOf(
'\t');
277 aFirstStr = aFirstStr.copy(0, nEnd);
285 rExpandedEntryBmp, rCollapsedEntryBmp,
286 pParent,
false, nPos, pUser );
296 DBG_ASSERT(pEntry,
"GetEntryText:Invalid Entry");
297 OUStringBuffer aResult;
302 while( nCur < nCount )
309 if (!aResult.isEmpty())
310 aResult.append(
"\t");
311 aResult.append(static_cast<const SvLBoxString&>(rStr).
GetText());
323 return aResult.makeStringAndClear();
335 DBG_ASSERT( pEntry,
"SvTabListBox::GetCellText(): Invalid Entry" );
341 aResult = static_cast<const SvLBoxString&>(rStr).GetText();
352 if ( pTmpEntry == pEntry )
354 pTmpEntry =
Next( pTmpEntry );
363 return sStr.getToken(0,
'\t', nIndex);
369 DBG_ASSERT( pEntry,
"GetTabEntryText(): Invalid entry " );
370 OUStringBuffer aResult;
375 while( nCur < nCount )
380 if ( nCol == 0xffff )
382 if (!aResult.isEmpty())
383 aResult.append(
"\t");
384 aResult.append(static_cast<const SvLBoxString&>(rBoxItem).
GetText());
391 if ( sRet.isEmpty() )
392 sRet =
VclResId( STR_SVT_ACC_EMPTY_FIELD );
401 return aResult.makeStringAndClear();
408 for ( i = 0; i <
nCount; ++i )
411 if ( nPos == _nEntryPos )
431 for ( i = 0; i < nCount; ++i )
434 if ( _rPos == _nEntryPos )
482 return aTabs[ nTab ]->GetPos();
498 , m_bFirstPaint(true)
500 , m_pAccessible(nullptr)
527 DBG_ASSERT( pHeaderBar,
"invalid header bar initialization" );
528 m_pImpl->m_pHeaderBar = pHeaderBar;
561 const OUString& rStr,
const Image& rExpandedEntryBmp,
const Image& rCollapsedEntryBmp,
565 rStr, rExpandedEntryBmp, rCollapsedEntryBmp, pParent, nPos, nCol, pUserData );
589 auto aHeaders = rJsonWriter.
startArray(
"headers");
601 m_pImpl->m_pHeaderBar->SetOffset( -GetXOffset() );
607 DBG_ASSERT( pParent,
"SvHeaderTabListBox..CreateAccessibleHdl_Impl - accessible parent not found" );
610 css::uno::Reference< XAccessible > xAccParent = pParent->
GetAccessible();
611 if ( xAccParent.is() )
613 Reference< XAccessible > xAccessible =
m_pImpl->m_aFactoryAccess.getFactory().createAccessibleBrowseBoxHeaderBar(
615 m_pImpl->m_pHeaderBar->SetAccessible( xAccessible );
640 sal_uInt16 nItemCount = pEntry->
ItemCount();
641 if ( nItemCount > ( _nColumn + 1 ) )
653 SAL_WARN(
"svtools.contnr",
"SvHeaderTabListBox::IsCellCheckBox(): column out of range" );
665 return m_pImpl->m_pHeaderBar->GetItemCount();
700 return m_pImpl->m_pHeaderBar->GetItemText(
m_pImpl->m_pHeaderBar->GetItemId( _nColumn ) );
778 pParent =
m_pImpl->m_pHeaderBar->GetAccessibleParentWindow();
780 aRect =
m_pImpl->m_pHeaderBar->GetWindowExtentsRelative( pParent );
797 DBG_ASSERT( !_bIsHeader || 0 == _nRow,
"invalid parameters" );
804 DBG_ASSERT(
m_pImpl->m_pHeaderBar->GetItemCount() > _nColumn,
"invalid column" );
806 aTopLeft.setX( aItemRect.Left() );
807 Size aSize = aItemRect.GetSize();
822 OSL_ENSURE(
m_pAccessible,
"Invalid call: Accessible is null" );
824 Reference< XAccessible > xChild;
829 xChild =
m_pImpl->m_aFactoryAccess.getFactory().createAccessibleCheckBoxCell(
832 xChild =
m_pImpl->m_aFactoryAccess.getFactory().createAccessibleBrowseBoxTableCell(
840 Reference< XAccessible > xHeader;
859 xChild =
m_pImpl->m_aFactoryAccess.getFactory().createAccessibleBrowseBoxHeaderCell(
877 Reference< XAccessible > xControl;
919 if (nColumnCount > 0)
921 sal_Int32 nRow = _nPos / nColumnCount;
922 sal_uInt16 nColumn =
static_cast< sal_uInt16
>( _nPos % nColumnCount );
934 aRetText =
m_pImpl->m_pHeaderBar->GetItemText(
m_pImpl->m_pHeaderBar->GetItemId( static_cast<sal_uInt16>(_nPos) ) );
944 OSL_FAIL(
"BrowseBox::GetAccessibleName: invalid enum!");
956 if (nColumnCount > 0)
958 sal_Int32 nRow = _nPos / nColumnCount;
959 sal_uInt16 nColumn =
static_cast< sal_uInt16
>( _nPos % nColumnCount );
961 OUString aText(
VclResId(STR_SVT_ACC_DESC_TABLISTBOX) );
962 aText = aText.replaceFirst(
"%1", OUString::number( nRow ) );
963 OUString sColHeader =
m_pImpl->m_pHeaderBar->GetItemText(
m_pImpl->m_pHeaderBar->GetItemId( nColumn ) );
964 if ( sColHeader.isEmpty() )
965 sColHeader = OUString::number( nColumn );
966 aText = aText.replaceFirst(
"%2", sColHeader );
981 _rStateSet.
AddState( AccessibleStateType::FOCUSABLE );
983 _rStateSet.
AddState( AccessibleStateType::FOCUSED );
985 _rStateSet.
AddState( AccessibleStateType::ACTIVE );
988 _rStateSet.
AddState( AccessibleStateType::ENABLED );
989 _rStateSet.
AddState( AccessibleStateType::SENSITIVE );
992 _rStateSet.
AddState( AccessibleStateType::VISIBLE );
996 _rStateSet.
AddState( AccessibleStateType::MANAGES_DESCENDANTS );
997 _rStateSet.
AddState( AccessibleStateType::MULTI_SELECTABLE );
1007 _rStateSet.
AddState( AccessibleStateType::VISIBLE );
1009 _rStateSet.
AddState( AccessibleStateType::ENABLED );
1010 _rStateSet.
AddState( AccessibleStateType::TRANSIENT );
1017 _rStateSet.
AddState( AccessibleStateType::VISIBLE );
1018 _rStateSet.
AddState( AccessibleStateType::FOCUSABLE );
1019 _rStateSet.
AddState( AccessibleStateType::TRANSIENT );
1021 _rStateSet.
AddState( AccessibleStateType::ENABLED );
1031 _rStateSet.
AddState( AccessibleStateType::SELECTABLE );
1032 _rStateSet.
AddState( AccessibleStateType::TRANSIENT );
1036 _rStateSet.
AddState( AccessibleStateType::VISIBLE );
1037 _rStateSet.
AddState( AccessibleStateType::ENABLED );
1042 _rStateSet.
AddState( AccessibleStateType::ACTIVE );
1043 _rStateSet.
AddState( AccessibleStateType::SELECTED );
1046 _rStateSet.
AddState( AccessibleStateType::ENABLED );
1087 DBG_ASSERT( pParent,
"SvHeaderTabListBox::::CreateAccessible - accessible parent not found" );
1089 Reference< XAccessible > xAccessible;
1094 Reference< XAccessible > xAccParent = pParent->
GetAccessible();
1095 if ( xAccParent.is() )
1097 m_pAccessible =
m_pImpl->m_aFactoryAccess.getFactory().createAccessibleTabListBox( xAccParent, *
this );
void AddItem(std::unique_ptr< SvLBoxItem > pItem)
#define LINK(Instance, Class, Member)
A cell of the column header bar.
virtual SvTreeListEntry * InsertEntry(const OUString &rText, SvTreeListEntry *pParent=nullptr, bool bChildrenOnDemand=false, sal_uLong nPos=TREELIST_APPEND, void *pUserData=nullptr) override
tools::Rectangle GetBoundingRect(const SvTreeListEntry *pEntry)
Calculate and return the bounding rectangle of an entry.
std::vector< tools::Rectangle > MetricVector
SvTabListBox(vcl::Window *pParent, WinBits)
virtual SvTreeListEntry * InsertEntryToColumn(const OUString &, SvTreeListEntry *pParent, sal_uLong nPos, sal_uInt16 nCol, void *pUserData=nullptr)
Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
A cell of the data table.
SvTreeList * GetModel() const
void SetTabEditable(sal_uInt16 nTab, bool bEditable)
vcl::Window * GetAccessibleParentWindow() const
sal_uLong GetEntryCount() const
void SetScrolledHdl(const Link< SvTreeListBox *, void > &rLink)
SvTreeListEntry * GetEntryOnPos(sal_uLong _nEntryPos) const
const OUString & GetText() const
sal_uLong GetEntryPos(const SvTreeListEntry *pEntry) const
bool GetActivateOnSingleClick()
SvTreeListEntry * GetCurEntry() const
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)
SvTreeListEntry * NextSibling() const
virtual OUString GetText() const
tools::Rectangle GetWindowExtentsRelative(const vcl::Window *pRelativeWindow) const
constexpr SvLBoxTabFlags MYTABMASK
virtual void SetTabs() override
void SetHighlightRange(sal_uInt16 nFirstTab=0, sal_uInt16 nLastTab=0xffff)
The row header bar ("handle column").
sal_uLong GetLevelChildCount(SvTreeListEntry *pParent) const
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
sal_uLong GetAbsPos(const SvTreeListEntry *pEntry) const
#define DBG_ASSERT(sCon, aError)
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
A cell of the row header bar.
virtual SvTreeListEntry * InsertEntry(const OUString &rText, SvTreeListEntry *pParent=nullptr, bool bChildrenOnDemand=false, sal_uLong nPos=TREELIST_APPEND, void *pUserData=nullptr)
virtual void InitEntry(SvTreeListEntry *, const OUString &, const Image &, const Image &)
const SvLBoxItem & GetItem(size_t nPos) const
void SelectAll(bool bSelect)
void SetTabJustify(sal_uInt16 nTab, SvTabJustify)
virtual SvLBoxItemType GetType() const =0
bool GetGlyphBoundRects(const Point &rOrigin, const OUString &rStr, int nIndex, int nLen, MetricVector &rVector)
SvTreeListEntries & GetChildEntries()
std::vector< std::unique_ptr< SvLBoxTab > > aTabs
SvTreeListEntry * Next(SvTreeListEntry *pEntry) const
OUString GetCellText(sal_uLong nPos, sal_uInt16 nCol) 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
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 css::uno::Reference< css::accessibility::XAccessible > getHeaderBar()=0
returns the accessible object for the column header bar
OUString GetTabEntryText(sal_uLong nPos, sal_uInt16 nCol) const
static void lcl_DumpEntryAndSiblings(tools::JsonWriter &rJsonWriter, SvTreeListEntry *pEntry, SvTabListBox *pTabListBox, bool bCheckButtons)
SvTreeListEntry * GetEntry(SvTreeListEntry *pParent, sal_uLong nPos) const
AccessibleBrowseBoxObjType
This enumeration contains a constant for each kind of accessible object of a BrowseBox.
SvButtonState GetCheckButtonState(SvTreeListEntry *) const
const SvLBoxItem * GetFirstItem(SvLBoxItemType eType) const
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
static OUString GetToken(const OUString &sStr, sal_Int32 &nIndex)
#define SAL_WARN(area, stream)
OUString VclResId(const char *pId)
tools::Long GetPos() const
bool Select(SvTreeListEntry *pEntry, bool bSelect=true)
bool IsReallyVisible() const
tools::Long GetLogicTab(sal_uInt16 nTab)
sal_uLong GetSelectionCount() const
virtual sal_uLong Insert(SvTreeListEntry *pEnt, SvTreeListEntry *pPar, sal_uLong nPos=TREELIST_APPEND)
void AddState(sal_Int16 aState)
SvTreeListEntry * GetChildOnPos(SvTreeListEntry *_pParent, sal_uLong _nEntryPos, sal_uLong &_rPos) const
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect) override
The horizontal column header bar.
IMPL_LINK_NOARG(SvHeaderTabListBox, ScrollHdl_Impl, SvTreeListBox *, void)
std::vector< std::unique_ptr< SvTreeListEntry > > SvTreeListEntries
void AddTab(tools::Long nPos, SvLBoxTabFlags nFlags)