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;
73 size_t nSize = pMarkedRanges->
size();
74 for (
size_t i = 0;
i < nSize; ++
i)
76 ScRange const & rRange = (*pMarkedRanges)[
i];
83 nMinRow = std::min(rRange.
aStart.
Row(),nMinRow);
84 nMaxRow = std::max(rRange.
aEnd.
Row(),nMaxRow);
87 SAL_WARN(
"sc",
"Range of wrong table");
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)
105 if ( row >= r.aStart.Row() && row <= r.aEnd.Row())
115 sal_uInt16 nCol = pairCol.second - pairCol.first + 1;
116 if (nCol + nCurrentIndex > nSelectedChildIndex)
120 nCurrentIndex += nCol;
129 std::vector<ScMyAddress> &vecRet,
int &nSize)
141 if (nCellCount + nSize > nMax)
145 else if(nCellCount > 0)
151 vecRet.emplace_back(col,row,rDest.
aStart.
Tab());
158 sal_Int32 nMaxRow = rSrc.
aEnd.
Row();
159 for (; nMinRow <= nMaxRow ; ++nMinRow,--nMaxRow)
170 vecRet.push_back(cell);
174 if (nMinRow != nMaxRow)
185 vecRet.push_back(cell);
196 int nMax, std::vector<ScMyAddress> &vecRet)
198 if (pSrc ==
nullptr || pDest ==
nullptr)
211 size_t nSrcSize = pSrc->
size();
212 for (
size_t i = 0;
i < nSrcSize; ++
i)
214 ScRange const & rRange = (*pSrc)[
i];
219 vecRet.emplace_back(col,row, rRange.
aStart.
Tab());
227 size_t nSizeSrc = pSrc->
size();
228 for (
size_t i = 0;
i < nSizeSrc; ++
i)
230 ScRange const & rRange = (*pSrc)[
i];
231 size_t nSizeDest = pDest->
size();
232 for (
size_t j = 0; j < nSizeDest; ++j)
234 ScRange const & rRangeDest = (*pDest)[j];
254 ScAccessibleTableBase( pAccDoc, GetDocument(pViewShell),
ScRange( 0, 0, nTab, GetDocument(pViewShell)->MaxCol(), GetDocument(pViewShell)->MaxRow(), nTab)),
255 mbIsSpreadsheet( true ),
256 m_bFormulaMode( false ),
257 m_bFormulaLastMode( false ),
258 m_nMinX(0),m_nMaxX(0),m_nMinY(0),m_nMaxY(0)
266 mbIsSpreadsheet( false )
328 AccessibleEventObject
aEvent;
329 aEvent.EventId = AccessibleEventId::STATE_CHANGED;
331 aEvent.NewValue <<= AccessibleStateType::SELECTED;
333 aEvent.OldValue <<= AccessibleStateType::SELECTED;
334 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
341 AccessibleEventObject
aEvent;
342 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
343 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
344 aEvent.OldValue <<= uno::Reference<XAccessible>(
mpAccCell.get());
354 AccessibleEventObject
aEvent;
355 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
356 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
357 uno::Reference< XAccessible > xNew;
383 aEvent.NewValue <<= xNew;
390 AccessibleEventObject
aEvent;
391 aEvent.EventId = AccessibleEventId::BOUNDRECT_CHANGED;
392 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
399 AccessibleEventObject
aEvent;
400 aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED;
401 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
410 if (
auto pRefHint = dynamic_cast<const ScUpdateRefHint*>(&rHint) )
412 if (pRefHint->GetMode() ==
URM_INSDEL && pRefHint->GetDz() == 0)
423 SCCOL nX(pRefHint->GetDx());
424 SCROW nY(pRefHint->GetDy());
425 ScRange aRange(pRefHint->GetRange());
426 if ((nX < 0) || (nY < 0))
428 OSL_ENSURE(!((nX < 0) && (nY < 0)),
"should not be possible to remove row and column at the same time");
429 nId = AccessibleTableModelChangeType::DELETE;
433 nY = aRange.aEnd.Row() - aRange.aStart.Row();
438 nX = aRange.aEnd.Col() - aRange.aStart.Col();
441 else if ((nX > 0) || (nY > 0))
443 OSL_ENSURE(!((nX > 0) && (nY > 0)),
"should not be possible to add row and column at the same time");
444 nId = AccessibleTableModelChangeType::INSERT;
445 nX = aRange.aEnd.Col() - aRange.aStart.Col();
449 OSL_FAIL(
"is it a deletion or an insertion?");
453 pRefHint->GetRange().aStart.Col(),
454 pRefHint->GetRange().aStart.Row() + nY,
455 pRefHint->GetRange().aStart.Col() + nX, nId);
457 AccessibleEventObject
aEvent;
458 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
459 aEvent.Source = uno::Reference< XAccessibleContext >(
this);
460 aEvent.NewValue <<= uno::Reference<XAccessible>(
mpAccCell.get());
468 if (rHint.
GetId() == SfxHintId::ScAccCursorChanged)
490 AccessibleEventObject
aEvent;
491 aEvent.Source = uno::Reference< XAccessible >(
this);
495 aEvent.EventId = AccessibleEventId::PAGE_CHANGED;
504 bool bNewPosCellFocus=
false;
507 bNewPosCellFocus=
true;
512 bool bIsMark =refScMarkData.
IsMarked();
514 bool bNewMarked = refScMarkData.
GetTableSelect(aNewCell.Tab()) && ( bIsMark || bIsMultMark );
516 sal_uInt16 nTab = rViewData.
GetTabNo();
519 aEvent.OldValue.clear();
522 if ( !bNewPosCellFocus &&
523 (bNewMarked || bIsMark || bIsMultMark ) &&
526 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN;
527 aEvent.NewValue.clear();
540 if ((bNewMarked || bIsMark || bIsMultMark ) && (bWholeCol || bWholeRow))
549 bool bLastIsWholeColRow =
553 bLastIsWholeColRow &&
558 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN;
559 aEvent.NewValue.clear();
568 bool bSendSingle= (0 == nNewMarkCount) && bNewPosCell;
576 uno::Reference< XAccessible > xChild ;
577 if (bNewPosCellFocus)
587 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS;
588 aEvent.NewValue <<= xChild;
589 aEvent.OldValue <<= uno::Reference< XAccessible >();
592 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED;
593 aEvent.NewValue <<= xChild;
602 bool bIsDel = rViewData.
GetDelMark( aDelRange );
603 if ( (!bIsDel || aMarkRange != aDelRange) &&
613 std::vector<ScMyAddress> vecNew;
616 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN;
617 aEvent.NewValue.clear();
622 for(
const auto& rAddr : vecNew)
625 if (!(bNewPosCellFocus && rAddr == aNewCell) )
627 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS;
628 aEvent.NewValue <<= xChild;
631 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_ADD;
632 aEvent.NewValue <<= xChild;
646 else if (rHint.
GetId() == SfxHintId::ScDataChanged)
664 AccessibleEventObject
aEvent;
665 aEvent.EventId = AccessibleEventId::VALUE_CHANGED;
673 AccessibleEventObject
aEvent;
674 aEvent.EventId = AccessibleEventId::NAME_CHANGED;
675 OUString sOldName(
ScResId(STR_ACC_TABLE_NAME));
677 aEvent.OldValue <<= sOldName;
678 OUString sNewName(
ScResId(STR_ACC_TABLE_NAME));
679 sOldName = sNewName.replaceFirst(
"%1", tabName);
680 aEvent.NewValue <<= sNewName;
713 AccessibleEventObject
aEvent;
714 aEvent.Source = uno::Reference< XAccessible >(
this);
718 if (refScMarkData.
IsCellMarked(miRemove->first.Col(),miRemove->first.Row(),
true) ||
719 refScMarkData.
IsCellMarked(miRemove->first.Col(),miRemove->first.Row()) )
724 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_REMOVE;
725 aEvent.NewValue <<= miRemove->second;
737 AccessibleEventObject
aEvent;
738 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
739 aEvent.Source = uno::Reference< XAccessible >(
this);
740 aEvent.OldValue <<= uno::Reference<XAccessible>(
mpAccCell.get());
743 aEvent.NewValue <<= uno::Reference<XAccessible>(
mpAccCell.get());
759 uno::Reference< XAccessibleTable > xAccessibleTable;
764 SCROW nStart = pRowRange->aStart.Row();
765 SCROW nEnd = pRowRange->aEnd.Row();
767 if( (0 <= nStart) && (nStart <= nEnd) && (nEnd <= pDoc->MaxRow()) )
771 return xAccessibleTable;
778 uno::Reference< XAccessibleTable > xAccessibleTable;
783 SCCOL nStart = pColRange->aStart.Col();
784 SCCOL nEnd = pColRange->aEnd.Col();
786 if( (0 <= nStart) && (nStart <= nEnd) && (nEnd <= pDoc->MaxCol()) )
790 return xAccessibleTable;
797 uno::Sequence<sal_Int32> aSequence;
806 sal_Int32* pSequence = aSequence.getArray();
812 pSequence[nCount] =
i;
816 aSequence.realloc(nCount);
819 aSequence.realloc(0);
827 uno::Sequence<sal_Int32> aSequence;
832 sal_Int32* pSequence = aSequence.getArray();
839 pSequence[nCount] =
i;
843 aSequence.realloc(nCount);
857 throw lang::IndexOutOfBoundsException();
863 bResult = rMarkdata.
IsRowMarked(static_cast<SCROW>(nRow));
878 throw lang::IndexOutOfBoundsException();
924 throw lang::IndexOutOfBoundsException();
927 return pAccessibleCell.get();
937 ScAddress addr(static_cast<SCCOL>(nColumn), nRow, 0);
942 throw lang::IndexOutOfBoundsException();
948 bResult = rMarkdata.
IsCellMarked(static_cast<SCCOL>(nColumn), static_cast<SCROW>(nRow));
957 uno::Reference< XAccessible > xAccessible;
970 catch(
const css::lang::IndexOutOfBoundsException &)
984 if (xAccessibleComponent.is())
985 xAccessibleComponent->grabFocus();
1010 return pRelationSet;
1013 uno::Reference<XAccessibleStateSet> SAL_CALL
1017 uno::Reference<XAccessibleStateSet> xParentStates;
1020 uno::Reference<XAccessibleContext> xParentContext =
getAccessibleParent()->getAccessibleContext();
1021 xParentStates = xParentContext->getAccessibleStateSet();
1025 pStateSet->
AddState(AccessibleStateType::DEFUNC);
1028 pStateSet->
AddState(AccessibleStateType::MANAGES_DESCENDANTS);
1030 pStateSet->
AddState(AccessibleStateType::EDITABLE);
1031 pStateSet->
AddState(AccessibleStateType::ENABLED);
1032 pStateSet->
AddState(AccessibleStateType::FOCUSABLE);
1034 pStateSet->
AddState(AccessibleStateType::FOCUSED);
1035 pStateSet->
AddState(AccessibleStateType::MULTI_SELECTABLE);
1036 pStateSet->
AddState(AccessibleStateType::OPAQUE);
1037 pStateSet->
AddState(AccessibleStateType::SELECTABLE);
1039 pStateSet->
AddState(AccessibleStateType::SELECTED);
1041 pStateSet->
AddState(AccessibleStateType::SHOWING);
1043 pStateSet->
AddState(AccessibleStateType::VISIBLE);
1055 throw lang::IndexOutOfBoundsException();
1100 sal_Int32 nResult(0);
1123 uno::Reference<XAccessible > SAL_CALL
1128 uno::Reference < XAccessible > xAccessible;
1147 if ((nSelectedChildIndex < 0) ||
1150 throw lang::IndexOutOfBoundsException();
1168 throw lang::IndexOutOfBoundsException();
1264 return "ScAccessibleSpreadsheet";
1267 uno::Sequence< OUString> SAL_CALL
1270 const css::uno::Sequence<OUString> vals {
"com.sun.star.AccessibleSpreadsheet" };
1276 uno::Sequence<sal_Int8> SAL_CALL
1279 return css::uno::Sequence<sal_Int8>();
1320 const uno::Reference<XAccessibleStateSet>& rxParentStates)
1323 (rxParentStates.is() && rxParentStates->contains(AccessibleStateType::DEFUNC));
1332 bool bProtected(
false);
1340 bool bFocused(
false);
1356 bool bResult(
false);
1362 if (aMarkData.IsAllMarked(
maRange))
1461 AccessibleEventObject
aEvent;
1462 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
1463 aEvent.Source = uno::Reference< XAccessible >(
this);
1477 sal_uInt16 nRefEndX = rViewData.
GetRefEndX();
1486 m_nMinX =std::min(nRefStartX,nRefEndX);
1487 m_nMaxX =std::max(nRefStartX,nRefEndX);
1488 m_nMinY = std::min(nRefStartY,nRefEndY);
1489 m_nMaxY = std::max(nRefStartY,nRefEndY);
1491 AccessibleEventObject
aEvent;
1492 aEvent.Source = uno::Reference< XAccessible >(
this);
1493 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED;
1496 uno::Reference< XAccessible > xNew = m_pAccFormulaCell.get();
1497 aEvent.NewValue <<= xNew;
1499 if (nRefStartX == nRefEndX && nRefStartY == nRefEndY)
1501 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED;
1502 aEvent.NewValue <<= xNew;
1510 std::vector<ScMyAddress> vecCurSel;
1512 vecCurSel.reserve(nCurSize);
1518 vecCurSel.push_back(aAddr);
1521 std::sort(vecCurSel.begin(), vecCurSel.end());
1522 std::vector<ScMyAddress> vecNew;
1523 std::set_difference(vecCurSel.begin(),vecCurSel.end(),
1525 std::back_insert_iterator(vecNew));
1526 int nNewSize = vecNew.size();
1527 if ( nNewSize > 10 )
1529 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN;
1530 aEvent.NewValue.clear();
1535 for(
const auto& rAddr : vecNew)
1537 uno::Reference< XAccessible > xChild;
1538 if (rAddr == aFormulaAddr)
1540 xChild = m_pAccFormulaCell.get();
1545 aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS;
1546 aEvent.NewValue <<= xChild;
1549 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_ADD;
1550 aEvent.NewValue <<= xChild;
1563 AccessibleEventObject
aEvent;
1564 aEvent.Source = uno::Reference< XAccessible >(
this);
1573 aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_REMOVE;
1574 aEvent.NewValue <<= miRemove->second;
1590 return nIndex <= nMaxIndex && nIndex >= 0 ;
1597 if (nIndex < 0 || nIndex >= nRowAll * nColAll )
1602 static_cast<SCCOL>((nIndex - nIndex % nRowAll) / nRowAll + +
m_nMinX),
1610 sal_uInt16 nColRelative = sal_uInt16(nColumn) -
GetColAll();
1611 sal_Int32 nRowRelative = nRow -
GetRowAll();
1612 if (nRow < 0 || nColumn < 0 || nRowRelative >=
GetRowAll() || nColRelative >=
GetColAll() )
1616 return GetRowAll() * nRowRelative + nColRelative;
1642 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)
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...
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 ==============================================
SC_DLLPUBLIC 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)
std::vector< PAIR_COL > m_vecTempCol
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.
size_t GetCellCount() const
virtual sal_Bool SAL_CALL containsPoint(const css::awt::Point &rPoint) override
===== XAccessibleComponent ============================================
virtual void SAL_CALL selectAccessibleChild(sal_Int32 nChildIndex) override
===== XAccessibleSelection ===========================================
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 GetMarkArea(ScRange &rRange) const
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
std::vector< ScRange > m_vecTempRange
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.
OUString ScResId(const char *pId)
virtual OUString SAL_CALL getImplementationName() override
===== XServiceInfo ====================================================
static bool CalcScRangeDifferenceMax(const ScRange &rSrc, const ScRange &rDest, int nMax, std::vector< ScMyAddress > &vecRet, int &nSize)
std::pair< sal_uInt16, sal_uInt16 > PAIR_COL
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
bool In(const ScAddress &) const
is Address& in Range?
css::uno::Sequence< T > concatSequences(const css::uno::Sequence< T > &rS1, const Ss &...rSn)
bool IsScAddrFormulaSel(const ScAddress &addr) 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.
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 ================================================
Degree100 abs(Degree100 x)
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
utl::AccessibleRelationSetHelper * GetRelationSet(const ScAddress *pAddress) const
======== internal =====================================================
void MarkCursor(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, bool bCols=false, bool bRows=false, bool bCellSelection=false)
void AddState(sal_Int16 aState)
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 =====================================================