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),
127 return ::comphelper::concatSequences(
129 AccessibleStaticTextBase::getTypes(),
138 const awt::Point& rPoint )
140 return AccessibleStaticTextBase::getAccessibleAtPoint(rPoint);
150 if (xAccessibleComponent.is())
152 xAccessibleComponent->grabFocus();
200 if( pItem && (pItem->
GetValue() != 0_deg100) )
218 return AccessibleStaticTextBase::getAccessibleChildCount();
221 uno::Reference< XAccessible > SAL_CALL
224 return AccessibleStaticTextBase::getAccessibleChild(nIndex);
227 uno::Reference<XAccessibleStateSet> SAL_CALL
231 uno::Reference<XAccessibleStateSet> xParentStates;
234 uno::Reference<XAccessibleContext> xParentContext =
getAccessibleParent()->getAccessibleContext();
235 xParentStates = xParentContext->getAccessibleStateSet();
239 pStateSet->AddState(AccessibleStateType::DEFUNC);
243 pStateSet->AddState(AccessibleStateType::FOCUSED);
247 pStateSet->AddState(AccessibleStateType::ENABLED);
248 pStateSet->AddState(AccessibleStateType::MULTI_LINE);
249 pStateSet->AddState(AccessibleStateType::MULTI_SELECTABLE);
251 pStateSet->AddState(AccessibleStateType::OPAQUE);
252 pStateSet->AddState(AccessibleStateType::SELECTABLE);
254 pStateSet->AddState(AccessibleStateType::SELECTED);
256 pStateSet->AddState(AccessibleStateType::SHOWING);
257 pStateSet->AddState(AccessibleStateType::TRANSIENT);
259 pStateSet->AddState(AccessibleStateType::VISIBLE);
264 pStateSet->AddState(AccessibleStateType::EDITABLE);
265 pStateSet->AddState(AccessibleStateType::RESIZABLE);
267 pStateSet->AddState(AccessibleStateType::ENABLED);
268 pStateSet->AddState(AccessibleStateType::MULTI_LINE);
269 pStateSet->AddState(AccessibleStateType::MULTI_SELECTABLE);
270 pStateSet->AddState(AccessibleStateType::FOCUSABLE);
272 pStateSet->AddState(AccessibleStateType::OPAQUE);
273 pStateSet->AddState(AccessibleStateType::SELECTABLE);
275 pStateSet->AddState(AccessibleStateType::SELECTED);
277 pStateSet->AddState(AccessibleStateType::SHOWING);
278 pStateSet->AddState(AccessibleStateType::TRANSIENT);
280 pStateSet->AddState(AccessibleStateType::VISIBLE);
285 uno::Reference<XAccessibleRelationSet> SAL_CALL
304 return "ScAccessibleCell";
307 uno::Sequence< OUString> SAL_CALL
310 const css::uno::Sequence<OUString> vals {
"com.sun.star.sheet.AccessibleCell" };
317 const uno::Reference<XAccessibleStateSet>& rxParentStates)
320 (rxParentStates.is() && rxParentStates->contains(AccessibleStateType::DEFUNC));
324 const uno::Reference<XAccessibleStateSet>& rxParentStates)
326 bool bEditable(
true);
327 if (rxParentStates.is() && !rxParentStates->contains(AccessibleStateType::EDITABLE) &&
392 return ::std::unique_ptr< SvxEditSource >();
394 ::std::unique_ptr< SvxEditSource > pEditSource (
new ScAccessibilityEditSource(std::make_unique<ScAccessibleCellTextData>(pViewShell, aCell, eSplitPos,
this)));
407 for (
bool bHasCell = aCellIter.first(); bHasCell; bHasCell = aCellIter.next())
414 while ( !bFound && aIter.GetNextRef( aRef ) )
420 AddRelation(aCellIter.GetPos(), AccessibleRelationType::CONTROLLER_FOR, pRelationSet);
438 AddRelation( aRef, AccessibleRelationType::CONTROLLED_BY, pRelationSet);
444 const sal_uInt16 aRelationType,
451 const sal_uInt16 aRelationType,
458 const sal_uInt32
nCount(static_cast<sal_uInt32>(rRange.
aEnd.
Col() -
461 uno::Sequence < uno::Reference < uno::XInterface > > aTargetSet( nCount );
462 uno::Reference < uno::XInterface >* pTargetSet = aTargetSet.getArray();
464 for (sal_uInt32 nRow = rRange.
aStart.
Row(); nRow <= sal::static_int_cast<sal_uInt32>(rRange.
aEnd.
Row()); ++nRow)
466 for (sal_uInt32 nCol = rRange.
aStart.
Col(); nCol <= sal::static_int_cast<sal_uInt32>(rRange.
aEnd.
Col()); ++nCol)
468 pTargetSet[
nPos] = xTable->getAccessibleCellAt(nRow, nCol);
472 OSL_ENSURE(nCount == nPos,
"something went wrong");
473 AccessibleRelation aRelation;
474 aRelation.RelationType = aRelationType;
475 aRelation.TargetSet = aTargetSet;
479 static OUString
ReplaceOneChar(
const OUString& oldOUString, std::u16string_view replacedChar, std::u16string_view replaceStr)
481 int iReplace = oldOUString.lastIndexOf(replacedChar);
482 OUString aRet = oldOUString;
485 aRet = aRet.replaceAt(iReplace, 1, replaceStr);
486 iReplace = aRet.lastIndexOf(replacedChar, iReplace);
509 if (!strFor.isEmpty())
511 strFor = strFor.copy(1);
514 strFor =
"Formula:" + strFor +
522 strFor +=
"isdropdown:";
539 uno::Sequence< beans::PropertyValue > aAttribs = AccessibleStaticTextBase::getCharacterAttributes( nIndex, aRequestedAttributes );
544 auto [
begin,
end] = asNonConstRange(aAttribs);
545 auto pAttrib = std::find_if(
begin,
end,
546 [](
const beans::PropertyValue& rAttrib) {
return "ParaLeftMargin" == rAttrib.Name; });
548 pAttrib->Value <<= nParaIndent;
590 aMarks.FillRangeListWithMarks( &aRanges,
false );
593 for (i=0; i<nRangeCount; i++)
597 bool bTextBelow = ( aRange.
aStart.
Row() == 0 );
601 bHasScenario = (aRange.
aStart.
Col() == nPosX && aRange.
aEnd.
Row() == nPosY-1);
607 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
rtl::Reference< utl::AccessibleRelationSetHelper > GetRelationSet(const ScAddress *pAddress) const
======== internal =====================================================
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
virtual void SAL_CALL grabFocus() override
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)
std::unique_ptr< sal_Int32[]> pData
vcl::Window * GetAccessibleParentWindow() const
void AddAccessibilityObject(SfxListener &rObject)
constexpr::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
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)
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int32 nIndex) override
Return the specified child or NULL if index is invalid.
enumrange< T >::Iterator begin(enumrange< T >)
SC_DLLPUBLIC SCROW MaxRow() const
SC_DLLPUBLIC SCTAB GetTableCount() const
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)
static OUString ReplaceOneChar(const OUString &oldOUString, std::u16string_view replacedChar, std::u16string_view replaceStr)
tools::Rectangle GetWindowExtentsRelative(const vcl::Window *pRelativeWindow) const
ScViewData & GetViewData()
ScGridWindow * GetActiveWin()
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
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
===== XTypeProvider ===================================================
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
enumrange< T >::Iterator end(enumrange< T >)
static OUString ReplaceFourChar(const OUString &oldOUString)
ScAddress GetCurPos() const
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
IMPLEMENT_GET_IMPLEMENTATION_ID(DrawController)
ScAccessibleCell(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, ScTabViewShell *pViewShell, const ScAddress &rCellAddress, sal_Int32 nIndex, ScSplitPos eSplitPos, ScAccessibleDocument *pAccDoc)
virtual ~ScAccessibleCell() override
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
void SetEventSource(const css::uno::Reference< css::accessibility::XAccessible > &rInterface)
virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override
===== XAccessible =====================================================