24 #include <document.hxx>
33 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
34 #include <com/sun/star/accessibility/AccessibleEventId.hpp>
35 #include <com/sun/star/accessibility/AccessibleTableModelChangeType.hpp>
36 #include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
42 #include <strings.hrc>
50 static bool CompMinCol(
const std::pair<sal_uInt16,sal_uInt16> & pc1,
const std::pair<sal_uInt16,sal_uInt16> &pc2)
52 return pc1.first < pc2.first;
57 if (pMarkedRanges->
size() <= 1)
63 const int nCurCol = nSelectedChildIndex % nColNum;
64 const int nCurRow = (nSelectedChildIndex - nCurCol)/nColNum;
70 sal_Int32 nMinRow = pDoc->
MaxRow();
71 sal_Int32 nMaxRow = 0;
72 std::vector<ScRange> aRanges;
73 size_t nSize = pMarkedRanges->
size();
74 for (
size_t i = 0;
i < nSize; ++
i)
76 ScRange const & rRange = (*pMarkedRanges)[
i];
82 aRanges.push_back(rRange);
83 nMinRow = std::min(rRange.
aStart.
Row(),nMinRow);
84 nMaxRow = std::max(rRange.
aEnd.
Row(),nMaxRow);
87 SAL_WARN(
"sc",
"Range of wrong table");
91 aRanges.push_back(rRange);
92 nMinRow = std::min(rRange.
aStart.
Row(),nMinRow);
93 nMaxRow = std::max(rRange.
aEnd.
Row(),nMaxRow);
96 SAL_WARN(
"sc",
"Range of wrong table");
98 int nCurrentIndex = 0 ;
99 for(sal_Int32 row = nMinRow ; row <= nMaxRow ; ++row)
101 std::vector<std::pair<SCCOL, SCCOL>> aVecCol;
102 for (
ScRange const & r : aRanges)
104 if ( row >= r.aStart.Row() && row <= r.aEnd.Row())
106 aVecCol.emplace_back(r.aStart.Col(), r.aEnd.Col());
109 std::sort(aVecCol.begin(), aVecCol.end(),
CompMinCol);
110 for (
const std::pair<SCCOL, SCCOL> &pairCol : aVecCol)
112 SCCOL nCol = pairCol.second - pairCol.first + 1;
113 if (nCol + nCurrentIndex > nSelectedChildIndex)
117 nCurrentIndex += nCol;
125 std::vector<ScMyAddress> &vecRet,
int &nSize)
137 if (nCellCount + nSize > nMax)
141 else if(nCellCount > 0)
147 vecRet.emplace_back(col,row,rDest.
aStart.
Tab());
154 sal_Int32 nMaxRow = rSrc.
aEnd.
Row();
155 for (; nMinRow <= nMaxRow ; ++nMinRow,--nMaxRow)
166 vecRet.push_back(cell);
170 if (nMinRow != nMaxRow)
181 vecRet.push_back(cell);
192 int nMax, std::vector<ScMyAddress> &vecRet)
194 if (pSrc ==
nullptr || pDest ==
nullptr)
207 size_t nSrcSize = pSrc->
size();
208 for (
size_t i = 0;
i < nSrcSize; ++
i)
210 ScRange const & rRange = (*pSrc)[
i];
215 vecRet.emplace_back(col,row, rRange.
aStart.
Tab());
223 size_t nSizeSrc = pSrc->
size();
224 for (
size_t i = 0;
i < nSizeSrc; ++
i)
226 ScRange const & rRange = (*pSrc)[
i];
227 size_t nSizeDest = pDest->
size();
228 for (
size_t j = 0; j < nSizeDest; ++j)
230 ScRange const & rRangeDest = (*pDest)[j];
250 ScAccessibleTableBase( pAccDoc, GetDocument(pViewShell),
ScRange( 0, 0, nTab, GetDocument(pViewShell)->MaxCol(), GetDocument(pViewShell)->MaxRow(), nTab)),
251 mbIsSpreadsheet( true ),
252 m_bFormulaMode(
false ),
253 m_bFormulaLastMode(
false ),
254 m_nMinX(0),m_nMaxX(0),m_nMinY(0),m_nMaxY(0)
262 mbIsSpreadsheet(
false ),
263 m_bFormulaMode(
false ),
264 m_bFormulaLastMode(
false ),
265 m_nMinX(0),m_nMaxX(0),m_nMinY(0),m_nMaxY(0)
327 AccessibleEventObject
aEvent;
328 aEvent.EventId = AccessibleEventId::STATE_CHANGED;
330 aEvent.NewValue <<= AccessibleStateType::SELECTED;
332 aEvent.OldValue <<= AccessibleStateType::SELECTED;
333 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
340 AccessibleEventObject
aEvent;
341 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
342 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
343 aEvent.OldValue <<= uno::Reference<XAccessible>(
mpAccCell);
353 AccessibleEventObject
aEvent;
354 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
355 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
356 uno::Reference< XAccessible > xNew;
382 aEvent.NewValue <<= xNew;
389 AccessibleEventObject
aEvent;
390 aEvent.EventId = AccessibleEventId::BOUNDRECT_CHANGED;
391 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
398 AccessibleEventObject
aEvent;
399 aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED;
400 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
409 if (
auto pRefHint = dynamic_cast<const ScUpdateRefHint*>(&rHint) )
411 if (pRefHint->GetMode() ==
URM_INSDEL && pRefHint->GetDz() == 0)
421 SCROW nFirstRow = -1;
423 SCCOL nFirstCol = -1;
427 SCCOL nX(pRefHint->GetDx());
428 SCROW nY(pRefHint->GetDy());
429 ScRange aRange(pRefHint->GetRange());
430 if ((nX < 0) || (nY < 0))
432 assert(!((nX < 0) && (nY < 0)) &&
"should not be possible to remove row and column at the same time");
438 nId = AccessibleTableModelChangeType::COLUMNS_REMOVED;
439 nFirstCol = aRange.aStart.Col() + nX;
440 nLastCol = aRange.aStart.Col() - 1;
444 nId = AccessibleTableModelChangeType::ROWS_REMOVED;
445 nFirstRow = aRange.aStart.Row() + nY;
446 nLastRow = aRange.aStart.Row() - 1;
449 else if ((nX > 0) || (nY > 0))
451 assert(!((nX > 0) && (nY > 0)) &&
"should not be possible to add row and column at the same time");
457 nId = AccessibleTableModelChangeType::COLUMNS_INSERTED;
458 nFirstCol = aRange.aStart.Col();
459 nLastCol = aRange.aStart.Col() + nX - 1;
463 nId = AccessibleTableModelChangeType::ROWS_INSERTED;
464 nFirstRow = aRange.aStart.Row();
465 nLastRow = aRange.aStart.Row() + nY -1;
470 assert(
false &&
"is it a deletion or an insertion?");
475 AccessibleEventObject
aEvent;
476 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
477 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
478 aEvent.NewValue <<= uno::Reference<XAccessible>(
mpAccCell);
486 if (rHint.
GetId() == SfxHintId::ScAccCursorChanged)
508 AccessibleEventObject
aEvent;
509 aEvent.Source = uno::Reference< XAccessible >(
this);
513 aEvent.EventId = AccessibleEventId::PAGE_CHANGED;
523 bool bNewPosCellFocus=
false;
526 bNewPosCellFocus=
true;
531 bool bIsMark =refScMarkData.
IsMarked();
533 bool bNewMarked = refScMarkData.
GetTableSelect(aNewCell.Tab()) && ( bIsMark || bIsMultMark );
535 sal_uInt16 nTab = rViewData.
GetTabNo();
537 aEvent.OldValue.clear();
540 if ( !bNewPosCellFocus &&
541 (bNewMarked || bIsMark || bIsMultMark ) &&
544 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN;
545 aEvent.NewValue.clear();
558 if ((bNewMarked || bIsMark || bIsMultMark ) && (bWholeCol || bWholeRow))
567 bool bLastIsWholeColRow =
571 bLastIsWholeColRow &&
576 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN;
577 aEvent.NewValue.clear();
586 bool bSendSingle= (0 == nNewMarkCount) && bNewPosCell;
594 uno::Reference< XAccessible > xChild ;
595 if (bNewPosCellFocus)
605 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS;
606 aEvent.NewValue <<= xChild;
607 aEvent.OldValue <<= uno::Reference< XAccessible >();
610 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED;
611 aEvent.NewValue <<= xChild;
620 bool bIsDel = rViewData.
GetDelMark( aDelRange );
621 if ( (!bIsDel || aMarkRange != aDelRange) &&
631 std::vector<ScMyAddress> vecNew;
634 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN;
635 aEvent.NewValue.clear();
640 for(
const auto& rAddr : vecNew)
643 if (!(bNewPosCellFocus && rAddr == aNewCell) )
645 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS;
646 aEvent.NewValue <<= xChild;
649 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_ADD;
650 aEvent.NewValue <<= xChild;
664 else if (rHint.
GetId() == SfxHintId::ScDataChanged)
682 AccessibleEventObject
aEvent;
683 aEvent.EventId = AccessibleEventId::VALUE_CHANGED;
691 AccessibleEventObject
aEvent;
692 aEvent.EventId = AccessibleEventId::NAME_CHANGED;
693 OUString sOldName(
ScResId(STR_ACC_TABLE_NAME));
695 aEvent.OldValue <<= sOldName;
696 OUString sNewName(
ScResId(STR_ACC_TABLE_NAME));
697 sNewName = sNewName.replaceFirst(
"%1", tabName);
698 aEvent.NewValue <<= sNewName;
731 AccessibleEventObject
aEvent;
732 aEvent.Source = uno::Reference< XAccessible >(
this);
736 if (refScMarkData.
IsCellMarked(miRemove->first.Col(),miRemove->first.Row(),
true) ||
737 refScMarkData.
IsCellMarked(miRemove->first.Col(),miRemove->first.Row()) )
742 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_REMOVE;
743 aEvent.NewValue <<= miRemove->second;
755 AccessibleEventObject
aEvent;
756 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
757 aEvent.Source = uno::Reference< XAccessible >(
this);
758 aEvent.OldValue <<= uno::Reference<XAccessible>(
mpAccCell);
761 aEvent.NewValue <<= uno::Reference<XAccessible>(
mpAccCell);
777 uno::Reference< XAccessibleTable > xAccessibleTable;
782 SCROW nStart = pRowRange->aStart.Row();
783 SCROW nEnd = pRowRange->aEnd.Row();
785 if( (0 <= nStart) && (nStart <= nEnd) && (nEnd <= pDoc->MaxRow()) )
789 return xAccessibleTable;
796 uno::Reference< XAccessibleTable > xAccessibleTable;
801 SCCOL nStart = pColRange->aStart.Col();
802 SCCOL nEnd = pColRange->aEnd.Col();
804 if( (0 <= nStart) && (nStart <= nEnd) && (nEnd <= pDoc->MaxCol()) )
808 return xAccessibleTable;
815 uno::Sequence<sal_Int32> aSequence;
824 sal_Int32* pSequence = aSequence.getArray();
830 pSequence[nCount] =
i;
834 aSequence.realloc(nCount);
837 aSequence.realloc(0);
845 uno::Sequence<sal_Int32> aSequence;
850 sal_Int32* pSequence = aSequence.getArray();
857 pSequence[nCount] =
i;
861 aSequence.realloc(nCount);
875 throw lang::IndexOutOfBoundsException();
881 bResult = rMarkdata.
IsRowMarked(static_cast<SCROW>(nRow));
896 throw lang::IndexOutOfBoundsException();
942 throw lang::IndexOutOfBoundsException();
945 return pAccessibleCell;
955 ScAddress addr(static_cast<SCCOL>(nColumn), nRow, 0);
960 throw lang::IndexOutOfBoundsException();
966 bResult = rMarkdata.
IsCellMarked(static_cast<SCCOL>(nColumn), static_cast<SCROW>(nRow));
975 uno::Reference< XAccessible > xAccessible;
988 catch(
const css::lang::IndexOutOfBoundsException &)
1002 if (xAccessibleComponent.is())
1003 xAccessibleComponent->grabFocus();
1027 return pRelationSet;
1031 uno::Reference<XAccessibleStateSet> SAL_CALL
1035 uno::Reference<XAccessibleStateSet> xParentStates;
1038 uno::Reference<XAccessibleContext> xParentContext =
getAccessibleParent()->getAccessibleContext();
1039 xParentStates = xParentContext->getAccessibleStateSet();
1043 pStateSet->AddState(AccessibleStateType::DEFUNC);
1046 pStateSet->AddState(AccessibleStateType::MANAGES_DESCENDANTS);
1048 pStateSet->AddState(AccessibleStateType::EDITABLE);
1049 pStateSet->AddState(AccessibleStateType::ENABLED);
1050 pStateSet->AddState(AccessibleStateType::FOCUSABLE);
1052 pStateSet->AddState(AccessibleStateType::FOCUSED);
1053 pStateSet->AddState(AccessibleStateType::MULTI_SELECTABLE);
1054 pStateSet->AddState(AccessibleStateType::OPAQUE);
1055 pStateSet->AddState(AccessibleStateType::SELECTABLE);
1057 pStateSet->AddState(AccessibleStateType::SELECTED);
1059 pStateSet->AddState(AccessibleStateType::SHOWING);
1061 pStateSet->AddState(AccessibleStateType::VISIBLE);
1073 throw lang::IndexOutOfBoundsException();
1118 sal_Int32 nResult(0);
1141 uno::Reference<XAccessible > SAL_CALL
1146 uno::Reference < XAccessible > xAccessible;
1165 if ((nSelectedChildIndex < 0) ||
1168 throw lang::IndexOutOfBoundsException();
1186 throw lang::IndexOutOfBoundsException();
1282 return "ScAccessibleSpreadsheet";
1285 uno::Sequence< OUString> SAL_CALL
1288 const css::uno::Sequence<OUString> vals {
"com.sun.star.AccessibleSpreadsheet" };
1294 uno::Sequence<sal_Int8> SAL_CALL
1297 return css::uno::Sequence<sal_Int8>();
1338 const uno::Reference<XAccessibleStateSet>& rxParentStates)
1341 (rxParentStates.is() && rxParentStates->contains(AccessibleStateType::DEFUNC));
1350 bool bProtected(
false);
1358 bool bFocused(
false);
1374 bool bResult(
false);
1379 if (aMarkData.IsAllMarked(
maRange))
1478 AccessibleEventObject
aEvent;
1479 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
1480 aEvent.Source = uno::Reference< XAccessible >(
this);
1494 sal_uInt16 nRefEndX = rViewData.
GetRefEndX();
1503 m_nMinX =std::min(nRefStartX,nRefEndX);
1504 m_nMaxX =std::max(nRefStartX,nRefEndX);
1505 m_nMinY = std::min(nRefStartY,nRefEndY);
1506 m_nMaxY = std::max(nRefStartY,nRefEndY);
1508 AccessibleEventObject
aEvent;
1509 aEvent.Source = uno::Reference< XAccessible >(
this);
1510 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
1514 aEvent.NewValue <<= xNew;
1516 if (nRefStartX == nRefEndX && nRefStartY == nRefEndY)
1518 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED;
1519 aEvent.NewValue <<= xNew;
1527 std::vector<ScMyAddress> vecCurSel;
1529 vecCurSel.reserve(nCurSize);
1535 vecCurSel.push_back(aAddr);
1538 std::sort(vecCurSel.begin(), vecCurSel.end());
1539 std::vector<ScMyAddress> vecNew;
1540 std::set_difference(vecCurSel.begin(),vecCurSel.end(),
1542 std::back_insert_iterator(vecNew));
1543 int nNewSize = vecNew.size();
1544 if ( nNewSize > 10 )
1546 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN;
1547 aEvent.NewValue.clear();
1552 for(
const auto& rAddr : vecNew)
1554 uno::Reference< XAccessible > xChild;
1555 if (rAddr == aFormulaAddr)
1557 xChild = m_pAccFormulaCell.get();
1562 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS;
1563 aEvent.NewValue <<= xChild;
1566 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_ADD;
1567 aEvent.NewValue <<= xChild;
1580 AccessibleEventObject
aEvent;
1581 aEvent.Source = uno::Reference< XAccessible >(
this);
1590 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_REMOVE;
1591 aEvent.NewValue <<= miRemove->second;
1607 return nIndex <= nMaxIndex && nIndex >= 0 ;
1614 if (nIndex < 0 || nIndex >= nRowAll * nColAll )
1619 static_cast<SCCOL>((nIndex - nIndex % nRowAll) / nRowAll + +
m_nMinX),
1627 sal_uInt16 nColRelative = sal_uInt16(nColumn) -
GetColAll();
1628 sal_Int32 nRowRelative = nRow -
GetRowAll();
1629 if (nRow < 0 || nColumn < 0 || nRowRelative >=
GetRowAll() || nColRelative >=
GetColAll() )
1633 return GetRowAll() * nRowRelative + nColRelative;
1659 if( nRefX <= pDoc->MaxCol() && nRefY >= 0 && nRefY <= pDoc->MaxRow())
ScMarkData & GetMarkData()
void InitRefMode(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, ScRefType eType)
void SelectAll(bool bContinue=false)
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint(const css::awt::Point &rPoint) override
===== XAccessibleComponent ============================================
virtual sal_Int32 SAL_CALL getAccessibleChildCount() override
Return the number of currently visible children.
SC_DLLPUBLIC const ScRange * GetRepeatColRange(SCTAB nTab)
rtl::Reference< utl::AccessibleRelationSetHelper > GetRelationSet(const ScAddress *pAddress) const
======== internal =====================================================
SC_DLLPUBLIC bool IsTabProtected(SCTAB nTab) const
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
OUString ScResId(TranslateId aId)
virtual css::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleRows() override
Returns the selected rows in a table.
void CommitFocusCell(const ScAddress &aNewCell)
virtual void SAL_CALL addAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &xListener) override
===== XAccessibleEventBroadcaster =====================================
void RemoveSelection(const ScMarkData &refScMarkData)
virtual void SAL_CALL clearAccessibleSelection() override
rtl::Reference< ScAccessibleCell > m_pAccFormulaCell
bool GetDelMark(ScRange &rRange) const
static rtl::Reference< ScAccessibleCell > create(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, ScTabViewShell *pViewShell, const ScAddress &rCellAddress, sal_Int32 nIndex, ScSplitPos eSplitPos, ScAccessibleDocument *pAccDoc)
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
===== XAccessibleContext ==============================================
bool Intersects(const ScRange &rRange) const
void BoundingBoxChanged()
SCROW GetRefStartY() const
void AddAccessibilityObject(SfxListener &rObject)
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
===== SfxListener =====================================================
virtual sal_Bool SAL_CALL unselectColumn(sal_Int32 column) override
virtual css::uno::Reference< css::accessibility::XAccessibleTable > SAL_CALL getAccessibleColumnHeaders() override
Returns the column headers as an AccessibleTable.
void FillRangeListWithMarks(ScRangeList *pList, bool bClear, SCTAB nForTab=-1) const
Create a range list of marks.
virtual sal_Bool SAL_CALL isAccessibleSelected(sal_Int32 nRow, sal_Int32 nColumn) override
Returns a boolean value indicating whether the accessible at a specified row and column is selected...
bool GetForceFocusOnCurCell() const
virtual void SAL_CALL deselectAccessibleChild(sal_Int32 nChildIndex) override
static ScDocument * GetDocument(ScTabViewShell *pViewShell)
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
Return a reference to the parent.
ScSplitPos GetActivePart() const
ScDocument & GetDocument() const
void ConstructScAccessibleSpreadsheet(ScAccessibleDocument *pAccDoc, ScTabViewShell *pViewShell, SCTAB nTab, ScSplitPos eSplitPos)
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleCellAt(sal_Int32 nRow, sal_Int32 nColumn) override
Returns the Accessible at a specified row and column in the table.
SwNodeOffset abs(const SwNodeOffset &a)
virtual sal_Bool SAL_CALL containsPoint(const css::awt::Point &rPoint) override
===== XAccessibleComponent ============================================
virtual void SAL_CALL selectAccessibleChild(sal_Int32 nChildIndex) override
===== XAccessibleSelection ===========================================
const ScRange & GetMarkArea() const
bool IsCellMarked(SCCOL nCol, SCROW nRow, bool bNoSimple=false) const
bool IsCompleteSheetSelected()
ScRangeList m_LastMarkedRanges
virtual sal_Int32 SAL_CALL getAccessibleColumn(sal_Int32 nChildIndex) override
Returns the column number of an index in the table.
void FireFirstCellFocus()
void RemoveFormulaSelection(bool bRemoveAll=false)
SC_DLLPUBLIC SCROW MaxRow() const
ScAccessibleSpreadsheet(ScAccessibleDocument *pAccDoc, ScTabViewShell *pViewShell, SCTAB nTab, ScSplitPos eSplitPos)
bool IsMultiMarked() const
void SelectCell(sal_Int32 nRow, sal_Int32 nCol, bool bDeselect)
ScRange m_aLastWithInMarkRange
SC_DLLPUBLIC OUString GetString(SCCOL nCol, SCROW nRow, SCTAB nTab, const ScInterpreterContext *pContext=nullptr) const
ScAddress m_aFormulaActiveCell
virtual tools::Rectangle GetBoundingBox() const override
Return the object's current bounding box relative to the parent object.
void DoneBlockMode(bool bContinue=false)
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
===== SfxListener =====================================================
tools::Rectangle GetWindowExtentsRelative(const vcl::Window *pRelativeWindow) const
ScViewData & GetViewData()
ScGridWindow * GetActiveWin()
void SelectionChanged(bool bFromPaste=false)
void SetRefStart(SCCOL nNewX, SCROW nNewY, SCTAB nNewZ)
virtual ~ScAccessibleSpreadsheet() override
MAP_ADDR_XACC m_mapFormulaSelectionSend
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Returns a list of all supported services.
bool IsRowMarked(SCROW nRow) const
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Returns a list of all supported services.
virtual sal_Bool SAL_CALL isAccessibleColumnSelected(sal_Int32 nColumn) override
Returns a boolean value indicating whether the specified column is selected.
std::unique_ptr< ScRangeList > mpMarkedRanges
void CommitTableModelChange(sal_Int32 nStartRow, sal_Int32 nStartCol, sal_Int32 nEndRow, sal_Int32 nEndCol, sal_uInt16 nId)
SC_DLLPUBLIC SCCOL MaxCol() const
vcl::Window * GetWindowByPos(ScSplitPos ePos) const
virtual void SAL_CALL addAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &xListener) override
===== XAccessibleEventBroadcaster =====================================
bool IsColumnMarked(SCCOL nCol) const
void IsObjectValid() const
void GetPosFromPixel(tools::Long nClickX, tools::Long nClickY, ScSplitPos eWhich, SCCOL &rPosX, SCROW &rPosY, bool bTestMerge=true, bool bRepair=false, SCTAB nForTab=-1)
rtl::Reference< ScAccessibleCell > GetAccessibleCellAt(sal_Int32 nRow, sal_Int32 nColumn)
virtual void SAL_CALL disposing() override
ScMyAddress CalcScAddressFromRangeList(ScRangeList *pMarkedRanges, sal_Int32 nSelectedChildIndex)
virtual sal_Bool SAL_CALL isAccessibleRowSelected(sal_Int32 nRow) override
Returns a boolean value indicating whether the specified row is selected.
std::vector< ScMyAddress > m_vecFormulaLastMyAddr
SC_DLLPUBLIC void SetTabNo(SCTAB nTab, bool bNew=false, bool bExtendSelection=false, bool bSameTabButMoved=false)
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
void CommitFocusGained() const
Calls all FocusListener to tell they that the focus is gained.
virtual OUString SAL_CALL getImplementationName() override
===== XServiceInfo ====================================================
static bool CalcScRangeDifferenceMax(const ScRange &rSrc, const ScRange &rDest, int nMax, std::vector< ScMyAddress > &vecRet, int &nSize)
virtual sal_Bool SAL_CALL selectRow(sal_Int32 row) override
This base class provides an implementation of the AccessibleTable service.
virtual void SAL_CALL grabFocus() override
MAP_ADDR_XACC m_mapSelectionSend
css::uno::Sequence< T > concatSequences(const css::uno::Sequence< T > &rS1, const Ss &...rSn)
bool IsScAddrFormulaSel(const ScAddress &addr) const
sal_uInt64 GetCellCount() const
SCCOL GetRefStartX() const
ScAddress GetCurPos() const
virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount() override
virtual void SAL_CALL disposing() override
ScAccessibleDocument * mpAccDoc
OUString m_strCurCellValue
ScAddress GetChildIndexAddress(sal_Int32) const
virtual sal_Int32 SAL_CALL getAccessibleRow(sal_Int32 nChildIndex) override
Returns the row number of an index in the table.
bool GetFormulaCurrentFocusCell(ScAddress &addr)
rtl::Reference< ScAccessibleCell > mpAccCell
SC_DLLPUBLIC const ScRange * GetRepeatRowRange(SCTAB nTab)
virtual sal_Int32 SAL_CALL getForeground() override
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
===== XTypeProvider ===================================================
void RemoveAccessibilityObject(SfxListener &rObject)
sal_uInt16 GetColAll() const
virtual sal_Bool SAL_CALL selectColumn(sal_Int32 column) override
virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet() override
Return the set of current states.
void CommitFocusLost() const
Calls all FocusListener to tell they that the focus is lost.
bool Contains(const ScAddress &) const
is Address& fully in Range?
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_BLACK
virtual sal_Bool SAL_CALL unselectRow(sal_Int32 row) override
sal_Int32 GetRowAll() const
virtual sal_Int32 SAL_CALL getAccessibleIndex(sal_Int32 nRow, sal_Int32 nColumn) override
===== XAccessibleExtendedTable ========================================
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild(sal_Int32 nSelectedChildIndex) override
void SetRefEnd(SCCOL nNewX, SCROW nNewY, SCTAB nNewZ)
static bool CalcScRangeListDifferenceMax(ScRangeList *pSrc, ScRangeList *pDest, int nMax, std::vector< ScMyAddress > &vecRet)
sal_Int32 GetAccessibleIndexFormula(sal_Int32 nRow, sal_Int32 nColumn)
void CommitChange(const css::accessibility::AccessibleEventObject &rEvent) const
Calls all Listener to tell they the change.
#define SAL_WARN(area, stream)
virtual tools::Rectangle GetBoundingBoxOnScreen() const override
Return the object's current bounding box relative to the desktop.
virtual css::uno::Reference< css::accessibility::XAccessibleTable > SAL_CALL getAccessibleRowHeaders() override
===== XAccessibleTable ================================================
ScTabViewShell * mpViewShell
void CompleteSelectionChanged(bool bNewState)
void UpdateRef(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ)
virtual void SAL_CALL selectAllAccessibleChildren() override
bool GetTableSelect(SCTAB nTab) const
void MarkCursor(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, bool bCols=false, bool bRows=false, bool bCellSelection=false)
virtual css::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleColumns() override
Returns the selected columns in a table.
static bool CompMinCol(const std::pair< sal_uInt16, sal_uInt16 > &pc1, const std::pair< sal_uInt16, sal_uInt16 > &pc2)
SC_DLLPUBLIC bool GetName(SCTAB nTab, OUString &rName) const
virtual sal_Int32 SAL_CALL getBackground() override
void InitBlockMode(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, bool bTestNeg=false, bool bCols=false, bool bRows=false, bool bForceNeg=false)
ScRange maRange
contains the range of the table, because it could be a subrange of the complete table ...
bool CheckChildIndex(sal_Int32) const
virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override
===== XAccessible =====================================================
bool m_bDetectedRangeSegmentation false