diff options
author | Kohei Yoshida <kohei@openoffice.org> | 2009-08-22 04:02:38 +0000 |
---|---|---|
committer | Kohei Yoshida <kohei@openoffice.org> | 2009-08-22 04:02:38 +0000 |
commit | f379d876d1a4894bd9767640c2329ba44f0e4820 (patch) | |
tree | ec4e11d291d2bbff736df8bf9e3226ce697e3ddc /sc | |
parent | 914141b32155e25a2d87ac00908bfb376ac30344 (diff) |
Use ScAccessibleStateSet to share state set implementation.
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/AccessibleFilterMenu.hxx | 26 | ||||
-rw-r--r-- | sc/inc/AccessibleFilterMenuItem.hxx | 31 | ||||
-rw-r--r-- | sc/inc/AccessibleGlobal.hxx | 3 | ||||
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleFilterMenu.cxx | 76 | ||||
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleFilterMenuItem.cxx | 126 |
5 files changed, 73 insertions, 189 deletions
diff --git a/sc/inc/AccessibleFilterMenu.hxx b/sc/inc/AccessibleFilterMenu.hxx index c5049045d672..93cfe1a78b21 100644 --- a/sc/inc/AccessibleFilterMenu.hxx +++ b/sc/inc/AccessibleFilterMenu.hxx @@ -32,10 +32,9 @@ #define SC_ACCESSIBLEFILTERMENU_HXX #include "AccessibleContextBase.hxx" -#include "cppuhelper/implbase2.hxx" +#include "cppuhelper/implbase1.hxx" #include <com/sun/star/accessibility/XAccessibleSelection.hpp> -#include <com/sun/star/accessibility/XAccessibleStateSet.hpp> #include <com/sun/star/accessibility/XAccessibleText.hpp> #include <com/sun/star/accessibility/XAccessibleTextAttributes.hpp> #include <com/sun/star/accessibility/TextSegment.hpp> @@ -52,8 +51,7 @@ namespace com { namespace sun { namespace star { class ScDocument; class ScMenuFloatingWindow; -typedef ::cppu::ImplHelper2< - ::com::sun::star::accessibility::XAccessibleStateSet, +typedef ::cppu::ImplHelper1< ::com::sun::star::accessibility::XAccessibleSelection > ScAccessibleFilterMenu_BASE; class ScAccessibleFilterMenu : @@ -120,20 +118,6 @@ public: ::com::sun::star::accessibility::XAccessibleEventListener>& xListener) throw (com::sun::star::uno::RuntimeException); - // XAccessibleStateSet - - virtual sal_Bool SAL_CALL isEmpty() throw (::com::sun::star::uno::RuntimeException); - - virtual sal_Bool SAL_CALL contains(sal_Int16 nState) - throw (::com::sun::star::uno::RuntimeException); - - virtual sal_Bool SAL_CALL containsAll( - const ::com::sun::star::uno::Sequence<sal_Int16>& aStateSet) - throw (::com::sun::star::uno::RuntimeException); - - virtual ::com::sun::star::uno::Sequence<sal_Int16> SAL_CALL getStates() - throw (::com::sun::star::uno::RuntimeException); - // XAccessibleSelection virtual void SAL_CALL selectAccessibleChild(sal_Int32 nChildIndex) @@ -177,16 +161,16 @@ public: void appendMenuItem(const ::rtl::OUString& rName, bool bEnabled, size_t nMenuPos); void setMenuPos(size_t nMenuPos); void setEnabled(bool bEnabled); - bool isSelected(); private: - bool isFocused(); + bool isSelected() const; + bool isFocused() const; void updateStates(); private: ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > > maMenuItems; - ::std::set<sal_Int16> maStates; + ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleStateSet > mxStateSet; size_t mnMenuPos; ScMenuFloatingWindow* mpWindow; diff --git a/sc/inc/AccessibleFilterMenuItem.hxx b/sc/inc/AccessibleFilterMenuItem.hxx index 3f7f58d3a818..10d471f4b245 100644 --- a/sc/inc/AccessibleFilterMenuItem.hxx +++ b/sc/inc/AccessibleFilterMenuItem.hxx @@ -32,16 +32,14 @@ #define SC_ACCESSIBLEFILTERMENUITEM_HXX #include "AccessibleContextBase.hxx" -#include "cppuhelper/implbase2.hxx" +#include "cppuhelper/implbase1.hxx" #include <com/sun/star/accessibility/XAccessibleAction.hpp> -#include <com/sun/star/accessibility/XAccessibleStateSet.hpp> class ScMenuFloatingWindow; -typedef ::cppu::ImplHelper2< - ::com::sun::star::accessibility::XAccessibleAction, - ::com::sun::star::accessibility::XAccessibleStateSet > ScAccessibleFilterMenuItem_BASE; +typedef ::cppu::ImplHelper1< + ::com::sun::star::accessibility::XAccessibleAction > ScAccessibleFilterMenuItem_BASE; class ScAccessibleFilterMenuItem : public ScAccessibleContextBase, @@ -72,21 +70,6 @@ public: virtual ::rtl::OUString SAL_CALL getImplementationName() throw (::com::sun::star::uno::RuntimeException); - // XAccessibleStateSet - - virtual ::sal_Bool SAL_CALL isEmpty() - throw (::com::sun::star::uno::RuntimeException); - - virtual ::sal_Bool SAL_CALL contains(sal_Int16 nState) - throw (::com::sun::star::uno::RuntimeException); - - virtual ::sal_Bool SAL_CALL containsAll( - const ::com::sun::star::uno::Sequence<sal_Int16>& aStateSet) - throw (::com::sun::star::uno::RuntimeException); - - virtual ::com::sun::star::uno::Sequence<sal_Int16> SAL_CALL getStates() - throw (::com::sun::star::uno::RuntimeException); - // XAccessibleAction virtual ::sal_Int32 SAL_CALL getAccessibleActionCount() @@ -114,11 +97,17 @@ public: // Non-UNO Methods - bool isSelected() const; void setEnabled(bool bEnabled); private: + bool isSelected() const; + bool isFocused() const; + void updateStateSet(); + +private: + ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleStateSet > mxStateSet; + ScMenuFloatingWindow* mpWindow; ::rtl::OUString maName; size_t mnMenuPos; diff --git a/sc/inc/AccessibleGlobal.hxx b/sc/inc/AccessibleGlobal.hxx index 83f5e0d2222c..9f17c2eaacae 100644 --- a/sc/inc/AccessibleGlobal.hxx +++ b/sc/inc/AccessibleGlobal.hxx @@ -36,6 +36,9 @@ #include <set> +/** + * Generic XAccessibleStateSet implementation. + */ class ScAccessibleStateSet : public ::cppu::WeakImplHelper1< ::com::sun::star::accessibility::XAccessibleStateSet > { public: diff --git a/sc/source/ui/Accessibility/AccessibleFilterMenu.cxx b/sc/source/ui/Accessibility/AccessibleFilterMenu.cxx index 5a1253181a8f..ad50425db56e 100644 --- a/sc/source/ui/Accessibility/AccessibleFilterMenu.cxx +++ b/sc/source/ui/Accessibility/AccessibleFilterMenu.cxx @@ -31,6 +31,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sc.hxx" +#include "AccessibleGlobal.hxx" #include "AccessibleFilterMenu.hxx" #include "AccessibleFilterMenuItem.hxx" #include "unoguard.hxx" @@ -173,7 +174,7 @@ Reference<XAccessibleStateSet> ScAccessibleFilterMenu::getAccessibleStateSet() throw (RuntimeException) { updateStates(); - return this; + return mxStateSet; } OUString ScAccessibleFilterMenu::getImplementationName() @@ -202,45 +203,6 @@ void ScAccessibleFilterMenu::removeEventListener( for_each(maMenuItems.begin(), maMenuItems.end(), AddRemoveEventListener(xListener, false)); } -// XAccessibleStateSet - -sal_Bool ScAccessibleFilterMenu::isEmpty() throw (RuntimeException) -{ - return maStates.empty(); -} - -sal_Bool ScAccessibleFilterMenu::contains(sal_Int16 nState) throw (RuntimeException) -{ - return maStates.count(nState) > 0; -} - -sal_Bool ScAccessibleFilterMenu::containsAll(const Sequence<sal_Int16>& aStateSet) - throw (RuntimeException) -{ - sal_Int32 n = aStateSet.getLength(); - for (sal_Int32 i = 0; i < n; ++i) - { - if (!maStates.count(aStateSet[i])) - // This state is not set. - return false; - } - // All specified states are set. - return true; -} - -Sequence<sal_Int16> ScAccessibleFilterMenu::getStates() throw (RuntimeException) -{ - updateStates(); - Sequence<sal_Int16> aSeq(0); - set<sal_Int16>::const_iterator itr = maStates.begin(), itrEnd = maStates.end(); - for (size_t i = 0; itr != itrEnd; ++itr, ++i) - { - aSeq.realloc(i+1); - aSeq[i] = *itr; - } - return aSeq; -} - // XAccessibleSelection void ScAccessibleFilterMenu::selectAccessibleChild(sal_Int32 nChildIndex) @@ -358,28 +320,36 @@ void ScAccessibleFilterMenu::setEnabled(bool bEnabled) mbEnabled = bEnabled; } -bool ScAccessibleFilterMenu::isFocused() +bool ScAccessibleFilterMenu::isSelected() const { - return isSelected(); + // Check to see if any of the child menu items is selected. + return mpWindow->isMenuItemSelected(mnMenuPos); } -bool ScAccessibleFilterMenu::isSelected() +bool ScAccessibleFilterMenu::isFocused() const { - // Check to see if any of the child menu items is selected. - return mpWindow->isMenuItemSelected(mnMenuPos); + return isSelected(); } void ScAccessibleFilterMenu::updateStates() { - maStates.clear(); - maStates.insert(ENABLED); - maStates.insert(FOCUSABLE); - maStates.insert(SELECTABLE); - maStates.insert(SENSITIVE); - maStates.insert(OPAQUE); + if (!mxStateSet.is()) + mxStateSet.set(new ScAccessibleStateSet); + + ScAccessibleStateSet* p = static_cast<ScAccessibleStateSet*>( + mxStateSet.get()); + + p->clear(); + + p->insert(ENABLED); + p->insert(FOCUSABLE); + p->insert(SELECTABLE); + p->insert(SENSITIVE); + p->insert(OPAQUE); if (isFocused()) - maStates.insert(FOCUSED); + p->insert(FOCUSED); + if (isSelected()) - maStates.insert(SELECTED); + p->insert(SELECTED); } diff --git a/sc/source/ui/Accessibility/AccessibleFilterMenuItem.cxx b/sc/source/ui/Accessibility/AccessibleFilterMenuItem.cxx index 662e5303df48..76822ccb3820 100644 --- a/sc/source/ui/Accessibility/AccessibleFilterMenuItem.cxx +++ b/sc/source/ui/Accessibility/AccessibleFilterMenuItem.cxx @@ -31,6 +31,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sc.hxx" +#include "AccessibleGlobal.hxx" #include "AccessibleFilterMenuItem.hxx" #include "dpcontrol.hxx" @@ -46,6 +47,7 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::accessibility; +using namespace ::com::sun::star::accessibility::AccessibleStateType; using ::com::sun::star::uno::Any; using ::com::sun::star::uno::Reference; @@ -87,7 +89,8 @@ Reference<XAccessible> ScAccessibleFilterMenuItem::getAccessibleChild(sal_Int32 Reference<XAccessibleStateSet> ScAccessibleFilterMenuItem::getAccessibleStateSet() throw (RuntimeException) { - return this; + updateStateSet(); + return mxStateSet; } OUString ScAccessibleFilterMenuItem::getImplementationName() @@ -96,99 +99,6 @@ OUString ScAccessibleFilterMenuItem::getImplementationName() return OUString::createFromAscii("ScAccessibleFilterMenuItem - implementation name"); } -// XAccessibleStateSet - -sal_Bool ScAccessibleFilterMenuItem::isEmpty() throw (RuntimeException) -{ - return false; -} - -sal_Bool ScAccessibleFilterMenuItem::contains(sal_Int16 nState) throw (RuntimeException) -{ - using namespace ::com::sun::star::accessibility::AccessibleStateType; - if (mbEnabled) - { - switch (nState) - { - case ENABLED: - case FOCUSABLE: - case SELECTABLE: - case SENSITIVE: - return true; - } - } - - if (isSelected()) - { - switch (nState) - { - case FOCUSED: - case SELECTED: - return true; - } - } - return false; -} - -sal_Bool ScAccessibleFilterMenuItem::containsAll(const Sequence<sal_Int16>& aStateSet) - throw (RuntimeException) -{ - using namespace ::com::sun::star::accessibility::AccessibleStateType; - sal_Int32 n = aStateSet.getLength(); - for (sal_Int32 i = 0; i < n; ++i) - { - sal_Int16 nState = aStateSet[i]; - if (mbEnabled) - { - switch (nState) - { - case ENABLED: - case FOCUSABLE: - case SELECTABLE: - case SENSITIVE: - continue; - } - } - if (isSelected()) - { - switch (nState) - { - case FOCUSED: - case SELECTED: - continue; - } - } - return false; - } - return true; -} - -Sequence<sal_Int16> ScAccessibleFilterMenuItem::getStates() throw (RuntimeException) -{ - using namespace ::com::sun::star::accessibility::AccessibleStateType; - vector<sal_Int16> aStates; - if (mbEnabled) - { - aStates.push_back(ENABLED); - aStates.push_back(FOCUSABLE); - aStates.push_back(SELECTABLE); - aStates.push_back(SENSITIVE); - } - - if (isSelected()) - { - aStates.push_back(FOCUSED); - aStates.push_back(SELECTED); - } - - size_t n = aStates.size(); - Sequence<sal_Int16> aSeq(aStates.size()); - for (size_t i = 0; i < n; ++i) - aSeq[i] = aStates[i]; - - return aSeq; -} - // XAccessibleAction sal_Int32 ScAccessibleFilterMenuItem::getAccessibleActionCount() throw (RuntimeException) @@ -240,8 +150,36 @@ bool ScAccessibleFilterMenuItem::isSelected() const return mpWindow->isMenuItemSelected(mnMenuPos); } +bool ScAccessibleFilterMenuItem::isFocused() const +{ + return isSelected(); +} + void ScAccessibleFilterMenuItem::setEnabled(bool bEnabled) { mbEnabled = bEnabled; } +void ScAccessibleFilterMenuItem::updateStateSet() +{ + if (!mxStateSet.is()) + mxStateSet.set(new ScAccessibleStateSet); + + ScAccessibleStateSet* p = static_cast<ScAccessibleStateSet*>( + mxStateSet.get()); + + p->clear(); + + p->insert(ENABLED); + p->insert(FOCUSABLE); + p->insert(SELECTABLE); + p->insert(SENSITIVE); + p->insert(OPAQUE); + + if (isFocused()) + p->insert(FOCUSED); + + if (isSelected()) + p->insert(SELECTED); +} + |