21 #include <string_view>
31 #include <document.hxx>
42 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
43 #include <com/sun/star/accessibility/AccessibleRelationType.hpp>
44 #include <com/sun/star/accessibility/XAccessibleTable.hpp>
54 const uno::Reference<XAccessible>& rxParent,
62 rxParent, pViewShell, rCellAddress, nIndex, eSplitPos, pAccDoc));
68 const uno::Reference<XAccessible>& rxParent,
76 ::
accessibility::AccessibleStaticTextBase(CreateEditSource(pViewShell, rCellAddress, eSplitPos)),
77 mpViewShell(pViewShell),
129 uno::Reference< XAccessible > SAL_CALL ScAccessibleCell::getAccessibleAtPoint(
130 const awt::Point& rPoint )
132 return AccessibleStaticTextBase::getAccessibleAtPoint(rPoint);
142 if (xAccessibleComponent.is())
144 xAccessibleComponent->grabFocus();
193 if( pItem && (pItem->
GetValue() != 0_deg100) )
211 return AccessibleStaticTextBase::getAccessibleChildCount();
214 uno::Reference< XAccessible > SAL_CALL
217 return AccessibleStaticTextBase::getAccessibleChild(nIndex);
220 uno::Reference<XAccessibleStateSet> SAL_CALL
224 uno::Reference<XAccessibleStateSet> xParentStates;
227 uno::Reference<XAccessibleContext> xParentContext =
getAccessibleParent()->getAccessibleContext();
228 xParentStates = xParentContext->getAccessibleStateSet();
232 pStateSet->
AddState(AccessibleStateType::DEFUNC);
237 pStateSet->
AddState(AccessibleStateType::ENABLED);
238 pStateSet->
AddState(AccessibleStateType::MULTI_LINE);
239 pStateSet->
AddState(AccessibleStateType::MULTI_SELECTABLE);
241 pStateSet->
AddState(AccessibleStateType::OPAQUE);
242 pStateSet->
AddState(AccessibleStateType::SELECTABLE);
244 pStateSet->
AddState(AccessibleStateType::SELECTED);
246 pStateSet->
AddState(AccessibleStateType::SHOWING);
247 pStateSet->
AddState(AccessibleStateType::TRANSIENT);
249 pStateSet->
AddState(AccessibleStateType::VISIBLE);
254 pStateSet->
AddState(AccessibleStateType::EDITABLE);
255 pStateSet->
AddState(AccessibleStateType::RESIZABLE);
257 pStateSet->
AddState(AccessibleStateType::ENABLED);
258 pStateSet->
AddState(AccessibleStateType::MULTI_LINE);
259 pStateSet->
AddState(AccessibleStateType::MULTI_SELECTABLE);
260 pStateSet->
AddState(AccessibleStateType::FOCUSABLE);
262 pStateSet->
AddState(AccessibleStateType::OPAQUE);
263 pStateSet->
AddState(AccessibleStateType::SELECTABLE);
265 pStateSet->
AddState(AccessibleStateType::SELECTED);
267 pStateSet->
AddState(AccessibleStateType::SHOWING);
268 pStateSet->
AddState(AccessibleStateType::TRANSIENT);
270 pStateSet->
AddState(AccessibleStateType::VISIBLE);
275 uno::Reference<XAccessibleRelationSet> SAL_CALL
294 return "ScAccessibleCell";
297 uno::Sequence< OUString> SAL_CALL
300 const css::uno::Sequence<OUString> vals {
"com.sun.star.sheet.AccessibleCell" };
307 const uno::Reference<XAccessibleStateSet>& rxParentStates)
310 (rxParentStates.is() && rxParentStates->contains(AccessibleStateType::DEFUNC));
314 const uno::Reference<XAccessibleStateSet>& rxParentStates)
316 bool bEditable(
true);
317 if (rxParentStates.is() && !rxParentStates->contains(AccessibleStateType::EDITABLE) &&
374 return ::std::unique_ptr< SvxEditSource >();
376 ::std::unique_ptr< SvxEditSource > pEditSource (
new ScAccessibilityEditSource(std::make_unique<ScAccessibleCellTextData>(pViewShell, aCell, eSplitPos,
this)));
389 for (
bool bHasCell = aCellIter.first(); bHasCell; bHasCell = aCellIter.next())
396 while ( !bFound && aIter.GetNextRef( aRef ) )
402 AddRelation(aCellIter.GetPos(), AccessibleRelationType::CONTROLLER_FOR, pRelationSet);
420 AddRelation( aRef, AccessibleRelationType::CONTROLLED_BY, pRelationSet);
426 const sal_uInt16 aRelationType,
433 const sal_uInt16 aRelationType,
440 const sal_uInt32
nCount(static_cast<sal_uInt32>(rRange.
aEnd.
Col() -
443 uno::Sequence < uno::Reference < uno::XInterface > > aTargetSet( nCount );
444 uno::Reference < uno::XInterface >* pTargetSet = aTargetSet.getArray();
446 for (sal_uInt32 nRow = rRange.
aStart.
Row(); nRow <= sal::static_int_cast<sal_uInt32>(rRange.
aEnd.
Row()); ++nRow)
448 for (sal_uInt32 nCol = rRange.
aStart.
Col(); nCol <= sal::static_int_cast<sal_uInt32>(rRange.
aEnd.
Col()); ++nCol)
450 pTargetSet[
nPos] = xTable->getAccessibleCellAt(nRow, nCol);
454 OSL_ENSURE(nCount == nPos,
"something went wrong");
455 AccessibleRelation aRelation;
456 aRelation.RelationType = aRelationType;
457 aRelation.TargetSet = aTargetSet;
461 static OUString
ReplaceOneChar(
const OUString& oldOUString, std::u16string_view replacedChar,
const OUString& replaceStr)
463 int iReplace = oldOUString.lastIndexOf(replacedChar);
464 OUString aRet = oldOUString;
467 aRet = aRet.replaceAt(iReplace, 1, replaceStr);
468 iReplace = aRet.lastIndexOf(replacedChar, iReplace);
491 if (!strFor.isEmpty())
493 strFor = strFor.copy(1);
496 strFor =
"Formula:" + strFor +
504 strFor +=
"isdropdown:";
521 uno::Sequence< beans::PropertyValue > aAttribs = AccessibleStaticTextBase::getCharacterAttributes( nIndex, aRequestedAttributes );
526 auto pAttrib = std::find_if(aAttribs.begin(), aAttribs.end(),
527 [](
const beans::PropertyValue& rAttrib) {
return "ParaLeftMargin" == rAttrib.Name; });
528 if (pAttrib != aAttribs.end())
529 pAttrib->Value <<= nParaIndent;
571 aMarks.FillRangeListWithMarks( &aRanges,
false );
574 for (i=0; i<nRangeCount; i++)
578 bool bTextBelow = ( aRange.
aStart.
Row() == 0 );
582 bHasScenario = (aRange.
aStart.
Col() == nPosX && aRange.
aEnd.
Row() == nPosY-1);
588 if( bHasScenario )
return true;
ScMarkData & GetMarkData()
virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getCharacterAttributes(sal_Int32 nIndex, const css::uno::Sequence< OUString > &aRequestedAttributes) override
virtual bool isVisible() override
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
virtual void SAL_CALL grabFocus() override
std::unique_ptr< ContentProperties > pData
ScTabViewShell * mpViewShell
static ScDocument * GetDocument(ScTabViewShell *mpViewShell)
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)
vcl::Window * GetAccessibleParentWindow() const
void AddAccessibilityObject(SfxListener &rObject)
virtual OUString SAL_CALL getImplementationName() override
===== XServiceInfo ====================================================
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
Return a reference to the parent.
ScDocument & GetDocument() const
This is very similar to ScCellValue, except that it references the original value instead of copying ...
bool HasSelectionList() const
Returns true, if the validation cell will show a selection list.
constexpr TypedWhichId< ScProtectionAttr > ATTR_PROTECTION(149)
void FillDependents(utl::AccessibleRelationSetHelper *pRelationSet)
SC_DLLPUBLIC void SetCursor(SCCOL nPosX, SCROW nPosY, bool bNew=false)
bool IsCellMarked(SCCOL nCol, SCROW nRow, bool bNoSimple=false) const
void AddRelation(const ScAddress &rCell, const sal_uInt16 aRelationType,::utl::AccessibleRelationSetHelper *pRelationSet)
constexpr TypedWhichId< ScIndentItem > ATTR_INDENT(131)
SC_DLLPUBLIC const ScValidationData * GetValidationEntry(sal_uLong nIndex) const
constexpr TypedWhichId< ScRotateValueItem > ATTR_ROTATE_VALUE(135)
constexpr::Color COL_TRANSPARENT(0xFF, 0xFF, 0xFF, 0xFF)
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int32 nIndex) override
Return the specified child or NULL if index is invalid.
SC_DLLPUBLIC SCROW MaxRow() const
SC_DLLPUBLIC SCTAB GetTableCount() const
static OUString ReplaceOneChar(const OUString &oldOUString, std::u16string_view replacedChar, const OUString &replaceStr)
virtual bool IsEditable(const css::uno::Reference< css::accessibility::XAccessibleStateSet > &rxParentStates) override
Walk through all cells in an area.
ScFormulaCell * mpFormula
void AddRelation(const css::accessibility::AccessibleRelation &rRelation)
tools::Rectangle GetWindowExtentsRelative(const vcl::Window *pRelativeWindow) const
ScViewData & GetViewData()
SC_DLLPUBLIC const SfxPoolItem * GetAttr(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich) const
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Returns a list of all supported services.
ScAccessibleDocument * mpAccDoc
const Color & GetColor() const
constexpr TypedWhichId< SfxUInt32Item > ATTR_VALIDDATA(153)
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
Return NULL to indicate that an empty relation set.
virtual void SAL_CALL disposing() override
SC_DLLPUBLIC SCCOL MaxCol() const
vcl::Window * GetWindowByPos(ScSplitPos ePos) const
virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet() override
Return the set of current states.
Point GetScrPos(SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, bool bAllowNeg=false, SCTAB nForTab=-1) const
virtual tools::Rectangle GetBoundingBoxOnScreen() const override
Return the object's current bounding box relative to the desktop.
void IsObjectValid() const
Iterator for references in a formula cell.
OUString getBorderAttrs()
ScSheetLimits & GetSheetLimits() const
OUString GetFormula(const ScAddress &rAddress)
void MarkScenario(SCTAB nSrcTab, SCTAB nDestTab, ScMarkData &rDestMark, bool bResetMark=true, ScScenarioFlags nNeededBits=ScScenarioFlags::NONE) const
This base class provides an implementation of the AccessibleCell service.
This base class provides an implementation of the AccessibleTable service.
#define IMPLEMENT_FORWARD_XINTERFACE3(classname, refcountbase, baseclass2, baseclass3)
css::uno::Sequence< T > concatSequences(const css::uno::Sequence< T > &rS1, const Ss &...rSn)
bool IsScAddrFormulaSel(const ScAddress &addr) const
static OUString ReplaceFourChar(const OUString &oldOUString)
virtual sal_Int32 SAL_CALL getAccessibleChildCount() override
===== XAccessibleContext ==============================================
constexpr TypedWhichId< SvxBrushItem > ATTR_BACKGROUND(148)
constexpr TypedWhichId< ScMergeFlagAttr > ATTR_MERGE_FLAG(145)
OUString GetAllDisplayNote() const
virtual void SAL_CALL disposing() override
virtual void Init() override
bool GetNextRef(ScRange &rRange)
SC_DLLPUBLIC bool IsScenario(SCTAB nTab) const
void RemoveAccessibilityObject(SfxListener &rObject)
virtual css::uno::Any SAL_CALL getExtendedAttributes() override
bool GetProtection() const
virtual tools::Rectangle GetBoundingBox() const override
Return the object's current bounding box relative to the parent object.
Degree100 GetValue() const
tools::Rectangle GetParagraphBoundingBox() const
OUString getShadowAttrs() const
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Returns a list of all supported services.
bool GetMergeSizePixel(SCCOL nX, SCROW nY, tools::Long &rSizeXPix, tools::Long &rSizeYPix) const
SC_DLLPUBLIC void ExtendTotalMerge(ScRange &rRange) const
::std::unique_ptr< SvxEditSource > CreateEditSource(ScTabViewShell *pViewShell, ScAddress aCell, ScSplitPos eSplitPos)
void FillPrecedents(utl::AccessibleRelationSetHelper *pRelationSet)
css::uno::Reference< css::accessibility::XAccessible > mxParent
Reference to the parent object.
bool HasAutoFilter() const
utl::AccessibleRelationSetHelper * GetRelationSet(const ScAddress *pAddress) const
======== internal =====================================================
ScAccessibleCell(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, ScTabViewShell *pViewShell, const ScAddress &rCellAddress, sal_Int32 nIndex, ScSplitPos eSplitPos, ScAccessibleDocument *pAccDoc)
void AddState(sal_Int16 aState)
virtual ~ScAccessibleCell() override
void SetEventSource(const css::uno::Reference< css::accessibility::XAccessible > &rInterface)
virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override
===== XAccessible =====================================================