diff options
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/Accessibility/AccessiblePageHeader.cxx | 82 | ||||
-rw-r--r-- | sc/source/ui/inc/AccessiblePageHeader.hxx | 5 |
2 files changed, 27 insertions, 60 deletions
diff --git a/sc/source/ui/Accessibility/AccessiblePageHeader.cxx b/sc/source/ui/Accessibility/AccessiblePageHeader.cxx index 134fdf10006f..1d5976679294 100644 --- a/sc/source/ui/Accessibility/AccessiblePageHeader.cxx +++ b/sc/source/ui/Accessibility/AccessiblePageHeader.cxx @@ -50,45 +50,13 @@ using namespace ::com::sun::star::accessibility; const sal_uInt8 MAX_AREAS = 3; -//===== internal ============================================================ -struct Acquire -{ - void operator() (ScAccessiblePageHeaderArea* pArea) - { - if (pArea) - pArea->acquire(); - } -}; - -struct Release -{ - void operator() (ScAccessiblePageHeaderArea*& pArea) - { - if (pArea) - pArea->release(); - } -}; - -struct Dispose -{ - void operator() (ScAccessiblePageHeaderArea*& pArea) - { - if (pArea) - { - pArea->dispose(); - pArea->release(); - } - pArea = nullptr; - } -}; - ScAccessiblePageHeader::ScAccessiblePageHeader( const css::uno::Reference<css::accessibility::XAccessible>& rxParent, ScPreviewShell* pViewShell, bool bHeader, sal_Int32 nIndex ) : ScAccessibleContextBase( rxParent, bHeader ? AccessibleRole::HEADER : AccessibleRole::FOOTER ), mpViewShell( pViewShell ), mnIndex( nIndex ), mbHeader( bHeader ), - maAreas(MAX_AREAS, nullptr), + maAreas(MAX_AREAS, rtl::Reference<ScAccessiblePageHeaderArea>()), mnChildCount(-1) { if (mpViewShell) @@ -113,7 +81,14 @@ void SAL_CALL ScAccessiblePageHeader::disposing() mpViewShell->RemoveAccessibilityObject(*this); mpViewShell = nullptr; } - std::for_each(maAreas.begin(), maAreas.end(), Dispose()); + for (auto & i : maAreas) + { + if (i.is()) + { + i->dispose(); + i.clear(); + } + } ScAccessibleContextBase::disposing(); } @@ -125,37 +100,35 @@ void ScAccessiblePageHeader::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) // only notify if child exist, otherwise it is not necessary if (rHint.GetId() == SfxHintId::ScDataChanged) { - ScHFAreas aOldAreas(maAreas); - std::for_each(aOldAreas.begin(), aOldAreas.end(), Acquire()); + std::vector<rtl::Reference<ScAccessiblePageHeaderArea>> aOldAreas(maAreas); mnChildCount = -1; getAccessibleChildCount(); for (sal_uInt8 i = 0; i < MAX_AREAS; ++i) { - if ((aOldAreas[i] && maAreas[i] && !ScGlobal::EETextObjEqual(aOldAreas[i]->GetEditTextObject(), maAreas[i]->GetEditTextObject())) || - (aOldAreas[i] && !maAreas[i]) || (!aOldAreas[i] && maAreas[i])) + if ((aOldAreas[i].is() && maAreas[i].is() && !ScGlobal::EETextObjEqual(aOldAreas[i]->GetEditTextObject(), maAreas[i]->GetEditTextObject())) || + (aOldAreas[i].is() && !maAreas[i].is()) || (!aOldAreas[i].is() && maAreas[i].is())) { - if (aOldAreas[i] && aOldAreas[i]->GetEditTextObject()) + if (aOldAreas[i].is() && aOldAreas[i]->GetEditTextObject()) { AccessibleEventObject aEvent; aEvent.EventId = AccessibleEventId::CHILD; aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue = uno::makeAny(uno::Reference<XAccessible>(aOldAreas[i])); + aEvent.OldValue = uno::makeAny(uno::Reference<XAccessible>(aOldAreas[i].get())); CommitChange(aEvent); // child gone - event aOldAreas[i]->dispose(); } - if (maAreas[i] && maAreas[i]->GetEditTextObject()) + if (maAreas[i].is() && maAreas[i]->GetEditTextObject()) { AccessibleEventObject aEvent; aEvent.EventId = AccessibleEventId::CHILD; aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.NewValue = uno::makeAny(uno::Reference<XAccessible>(maAreas[i])); + aEvent.NewValue = uno::makeAny(uno::Reference<XAccessible>(maAreas[i].get())); CommitChange(aEvent); // new child - event } } } - std::for_each(aOldAreas.begin(), aOldAreas.end(), Release()); } else if (rHint.GetId() == SfxHintId::ScAccVisAreaChanged) { @@ -188,8 +161,8 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePageHeader::getAccessibleAtPo sal_uInt8 i(0); while(!xRet.is() && i < MAX_AREAS) { - if (maAreas[i]) - xRet = maAreas[i]; + if (maAreas[i].is()) + xRet = maAreas[i].get(); else ++i; } @@ -254,14 +227,14 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePageHeader::getAccessibleChil if(mnChildCount < 0) getAccessibleChildCount(); - ScHFAreas::iterator aItr = maAreas.begin(); - ScHFAreas::iterator aEndItr = maAreas.end(); + auto aItr = maAreas.begin(); + auto aEndItr = maAreas.end(); while (!xRet.is() && (nIndex >= 0) && (aItr != aEndItr)) { - if (*aItr) + if (aItr->is()) { if (nIndex == 0) - xRet = *aItr; + xRet = aItr->get(); else --nIndex; } @@ -390,29 +363,22 @@ void ScAccessiblePageHeader::AddChild(const EditTextObject* pArea, sal_uInt32 nI { if (pArea && (!pArea->GetText(0).isEmpty() || (pArea->GetParagraphCount() > 1))) { - if (maAreas[nIndex]) + if (maAreas[nIndex].is()) { if (!ScGlobal::EETextObjEqual(maAreas[nIndex]->GetEditTextObject(), pArea)) { - maAreas[nIndex]->release(); maAreas[nIndex] = new ScAccessiblePageHeaderArea(this, mpViewShell, pArea, mbHeader, eAdjust); - maAreas[nIndex]->acquire(); } } else { maAreas[nIndex] = new ScAccessiblePageHeaderArea(this, mpViewShell, pArea, mbHeader, eAdjust); - maAreas[nIndex]->acquire(); } ++mnChildCount; } else { - if (maAreas[nIndex]) - { - maAreas[nIndex]->release(); - maAreas[nIndex] = nullptr; - } + maAreas[nIndex].clear(); } } diff --git a/sc/source/ui/inc/AccessiblePageHeader.hxx b/sc/source/ui/inc/AccessiblePageHeader.hxx index 395f80b3d112..6a8645f735ea 100644 --- a/sc/source/ui/inc/AccessiblePageHeader.hxx +++ b/sc/source/ui/inc/AccessiblePageHeader.hxx @@ -22,6 +22,7 @@ #include "AccessibleContextBase.hxx" #include <editeng/svxenum.hxx> +#include <rtl/ref.hxx> class ScPreviewShell; class EditTextObject; @@ -83,8 +84,8 @@ private: ScPreviewShell* mpViewShell; sal_Int32 mnIndex; bool mbHeader; - typedef std::vector< ScAccessiblePageHeaderArea* > ScHFAreas; - ScHFAreas maAreas; + std::vector< rtl::Reference<ScAccessiblePageHeaderArea> > + maAreas; sal_Int32 mnChildCount; bool IsDefunc( |