UNOTOOLS : simplify AccessibleRelationHelper by removing useless impl pattern
Change-Id: I6cb14c5c973067c0ea1c64eab40e38b8b548174f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104776 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
committed by
Noel Grandin
parent
37081085fa
commit
9411511e64
@@ -25,9 +25,7 @@
|
|||||||
#include <com/sun/star/accessibility/XAccessibleRelationSet.hpp>
|
#include <com/sun/star/accessibility/XAccessibleRelationSet.hpp>
|
||||||
#include <osl/mutex.hxx>
|
#include <osl/mutex.hxx>
|
||||||
#include <cppuhelper/implbase.hxx>
|
#include <cppuhelper/implbase.hxx>
|
||||||
#include <memory>
|
#include <vector>
|
||||||
|
|
||||||
class AccessibleRelationSetHelperImpl;
|
|
||||||
|
|
||||||
//= XAccessibleRelationSet helper classes
|
//= XAccessibleRelationSet helper classes
|
||||||
|
|
||||||
@@ -123,7 +121,7 @@ private:
|
|||||||
/// Mutex guarding this object.
|
/// Mutex guarding this object.
|
||||||
::osl::Mutex maMutex;
|
::osl::Mutex maMutex;
|
||||||
/// The implementation of this helper interface.
|
/// The implementation of this helper interface.
|
||||||
std::unique_ptr<AccessibleRelationSetHelperImpl> mpHelperImpl;
|
std::vector<css::accessibility::AccessibleRelation> maRelations;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -22,108 +22,34 @@
|
|||||||
#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
|
#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
|
||||||
#include <o3tl/safeint.hxx>
|
#include <o3tl/safeint.hxx>
|
||||||
#include <unotools/accessiblerelationsethelper.hxx>
|
#include <unotools/accessiblerelationsethelper.hxx>
|
||||||
#include <vector>
|
|
||||||
#include <comphelper/sequence.hxx>
|
#include <comphelper/sequence.hxx>
|
||||||
|
|
||||||
using namespace ::utl;
|
using namespace ::utl;
|
||||||
using namespace ::com::sun::star;
|
using namespace ::com::sun::star;
|
||||||
using namespace ::com::sun::star::accessibility;
|
using namespace ::com::sun::star::accessibility;
|
||||||
|
|
||||||
class AccessibleRelationSetHelperImpl
|
namespace
|
||||||
{
|
{
|
||||||
public:
|
AccessibleRelation lcl_getRelationByType( std::vector<AccessibleRelation>& raRelations, sal_Int16 aRelationType )
|
||||||
AccessibleRelationSetHelperImpl();
|
|
||||||
AccessibleRelationSetHelperImpl(const AccessibleRelationSetHelperImpl& rImpl);
|
|
||||||
|
|
||||||
/// @throws uno::RuntimeException
|
|
||||||
sal_Int32 getRelationCount() const;
|
|
||||||
/// @throws lang::IndexOutOfBoundsException
|
|
||||||
/// @throws uno::RuntimeException
|
|
||||||
AccessibleRelation const & getRelation( sal_Int32 nIndex ) const;
|
|
||||||
/// @throws uno::RuntimeException
|
|
||||||
bool containsRelation( sal_Int16 aRelationType ) const;
|
|
||||||
/// @throws uno::RuntimeException
|
|
||||||
AccessibleRelation getRelationByType( sal_Int16 aRelationType ) const;
|
|
||||||
/// @throws uno::RuntimeException
|
|
||||||
void AddRelation(const AccessibleRelation& rRelation);
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<AccessibleRelation> maRelations;
|
|
||||||
};
|
|
||||||
|
|
||||||
AccessibleRelationSetHelperImpl::AccessibleRelationSetHelperImpl()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
AccessibleRelationSetHelperImpl::AccessibleRelationSetHelperImpl(const AccessibleRelationSetHelperImpl& rImpl)
|
|
||||||
: maRelations(rImpl.maRelations)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
sal_Int32 AccessibleRelationSetHelperImpl::getRelationCount() const
|
|
||||||
{
|
|
||||||
return maRelations.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
AccessibleRelation const & AccessibleRelationSetHelperImpl::getRelation( sal_Int32 nIndex ) const
|
|
||||||
{
|
|
||||||
if ((nIndex < 0) || (o3tl::make_unsigned(nIndex) >= maRelations.size()))
|
|
||||||
throw lang::IndexOutOfBoundsException();
|
|
||||||
return maRelations[nIndex];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AccessibleRelationSetHelperImpl::containsRelation( sal_Int16 aRelationType ) const
|
|
||||||
{
|
|
||||||
AccessibleRelation defaultRelation; // default is INVALID
|
|
||||||
AccessibleRelation relationByType = getRelationByType(aRelationType);
|
|
||||||
return relationByType.RelationType != defaultRelation.RelationType;
|
|
||||||
}
|
|
||||||
|
|
||||||
AccessibleRelation AccessibleRelationSetHelperImpl::getRelationByType( sal_Int16 aRelationType ) const
|
|
||||||
{
|
|
||||||
sal_Int32 nCount(getRelationCount());
|
|
||||||
sal_Int32 i(0);
|
|
||||||
while (i < nCount)
|
|
||||||
{
|
{
|
||||||
if (maRelations[i].RelationType == aRelationType)
|
for (const auto& aRelation: raRelations)
|
||||||
return maRelations[i];
|
{
|
||||||
i++;
|
if (aRelation.RelationType == aRelationType)
|
||||||
|
return aRelation;
|
||||||
|
}
|
||||||
|
return AccessibleRelation();
|
||||||
}
|
}
|
||||||
return AccessibleRelation();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccessibleRelationSetHelperImpl::AddRelation(const AccessibleRelation& rRelation)
|
|
||||||
{
|
|
||||||
sal_Int32 nCount(getRelationCount());
|
|
||||||
sal_Int32 i(0);
|
|
||||||
bool bFound(false);
|
|
||||||
while ((i < nCount) && !bFound)
|
|
||||||
{
|
|
||||||
if (maRelations[i].RelationType == rRelation.RelationType)
|
|
||||||
bFound = true;
|
|
||||||
else
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if (bFound)
|
|
||||||
maRelations[i].TargetSet = comphelper::concatSequences(maRelations[i].TargetSet, rRelation.TargetSet);
|
|
||||||
else
|
|
||||||
maRelations.push_back(rRelation);
|
|
||||||
}
|
|
||||||
|
|
||||||
//===== internal ============================================================
|
//===== internal ============================================================
|
||||||
|
|
||||||
AccessibleRelationSetHelper::AccessibleRelationSetHelper ()
|
AccessibleRelationSetHelper::AccessibleRelationSetHelper ()
|
||||||
: mpHelperImpl(new AccessibleRelationSetHelperImpl)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
AccessibleRelationSetHelper::AccessibleRelationSetHelper (const AccessibleRelationSetHelper& rHelper)
|
AccessibleRelationSetHelper::AccessibleRelationSetHelper (const AccessibleRelationSetHelper& rHelper)
|
||||||
: cppu::WeakImplHelper<XAccessibleRelationSet>(rHelper)
|
: cppu::WeakImplHelper<XAccessibleRelationSet>(rHelper),
|
||||||
|
maRelations(rHelper.maRelations)
|
||||||
{
|
{
|
||||||
if (rHelper.mpHelperImpl)
|
|
||||||
mpHelperImpl.reset(new AccessibleRelationSetHelperImpl(*rHelper.mpHelperImpl));
|
|
||||||
else
|
|
||||||
mpHelperImpl.reset(new AccessibleRelationSetHelperImpl());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AccessibleRelationSetHelper::~AccessibleRelationSetHelper()
|
AccessibleRelationSetHelper::~AccessibleRelationSetHelper()
|
||||||
@@ -141,7 +67,8 @@ sal_Int32 SAL_CALL
|
|||||||
AccessibleRelationSetHelper::getRelationCount( )
|
AccessibleRelationSetHelper::getRelationCount( )
|
||||||
{
|
{
|
||||||
osl::MutexGuard aGuard (maMutex);
|
osl::MutexGuard aGuard (maMutex);
|
||||||
return mpHelperImpl->getRelationCount();
|
|
||||||
|
return maRelations.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the relation of this relation set that is specified by
|
/** Returns the relation of this relation set that is specified by
|
||||||
@@ -161,7 +88,11 @@ sal_Int32 SAL_CALL
|
|||||||
AccessibleRelationSetHelper::getRelation( sal_Int32 nIndex )
|
AccessibleRelationSetHelper::getRelation( sal_Int32 nIndex )
|
||||||
{
|
{
|
||||||
osl::MutexGuard aGuard (maMutex);
|
osl::MutexGuard aGuard (maMutex);
|
||||||
return mpHelperImpl->getRelation(nIndex);
|
|
||||||
|
if ((nIndex < 0) || (o3tl::make_unsigned(nIndex) >= maRelations.size()))
|
||||||
|
throw lang::IndexOutOfBoundsException();
|
||||||
|
|
||||||
|
return maRelations[nIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Tests whether the relation set contains a relation matching the
|
/** Tests whether the relation set contains a relation matching the
|
||||||
@@ -180,7 +111,10 @@ sal_Bool SAL_CALL
|
|||||||
AccessibleRelationSetHelper::containsRelation( sal_Int16 aRelationType )
|
AccessibleRelationSetHelper::containsRelation( sal_Int16 aRelationType )
|
||||||
{
|
{
|
||||||
osl::MutexGuard aGuard (maMutex);
|
osl::MutexGuard aGuard (maMutex);
|
||||||
return mpHelperImpl->containsRelation(aRelationType);
|
|
||||||
|
AccessibleRelation defaultRelation; // default is INVALID
|
||||||
|
AccessibleRelation relationByType = lcl_getRelationByType(maRelations, aRelationType);
|
||||||
|
return relationByType.RelationType != defaultRelation.RelationType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Retrieve and return the relation with the given relation type.
|
/** Retrieve and return the relation with the given relation type.
|
||||||
@@ -198,13 +132,23 @@ AccessibleRelation SAL_CALL
|
|||||||
AccessibleRelationSetHelper::getRelationByType( sal_Int16 aRelationType )
|
AccessibleRelationSetHelper::getRelationByType( sal_Int16 aRelationType )
|
||||||
{
|
{
|
||||||
osl::MutexGuard aGuard (maMutex);
|
osl::MutexGuard aGuard (maMutex);
|
||||||
return mpHelperImpl->getRelationByType(aRelationType);
|
|
||||||
|
return lcl_getRelationByType(maRelations, aRelationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccessibleRelationSetHelper::AddRelation(const AccessibleRelation& rRelation)
|
void AccessibleRelationSetHelper::AddRelation(const AccessibleRelation& rRelation)
|
||||||
{
|
{
|
||||||
osl::MutexGuard aGuard (maMutex);
|
osl::MutexGuard aGuard (maMutex);
|
||||||
mpHelperImpl->AddRelation(rRelation);
|
|
||||||
|
for (auto& aRelation: maRelations)
|
||||||
|
{
|
||||||
|
if (aRelation.RelationType == rRelation.RelationType)
|
||||||
|
{
|
||||||
|
aRelation.TargetSet = comphelper::concatSequences(aRelation.TargetSet, rRelation.TargetSet);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
maRelations.push_back(rRelation);
|
||||||
}
|
}
|
||||||
|
|
||||||
//===== XTypeProvider =======================================================
|
//===== XTypeProvider =======================================================
|
||||||
|
Reference in New Issue
Block a user