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/source/ui/Accessibility | |
parent | 914141b32155e25a2d87ac00908bfb376ac30344 (diff) |
Use ScAccessibleStateSet to share state set implementation.
Diffstat (limited to 'sc/source/ui/Accessibility')
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleFilterMenu.cxx | 76 | ||||
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleFilterMenuItem.cxx | 126 |
2 files changed, 55 insertions, 147 deletions
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); +} + |