summaryrefslogtreecommitdiff
path: root/sc/source/ui/Accessibility
diff options
context:
space:
mode:
authorKohei Yoshida <kohei@openoffice.org>2009-08-22 04:02:38 +0000
committerKohei Yoshida <kohei@openoffice.org>2009-08-22 04:02:38 +0000
commitf379d876d1a4894bd9767640c2329ba44f0e4820 (patch)
treeec4e11d291d2bbff736df8bf9e3226ce697e3ddc /sc/source/ui/Accessibility
parent914141b32155e25a2d87ac00908bfb376ac30344 (diff)
Use ScAccessibleStateSet to share state set implementation.
Diffstat (limited to 'sc/source/ui/Accessibility')
-rw-r--r--sc/source/ui/Accessibility/AccessibleFilterMenu.cxx76
-rw-r--r--sc/source/ui/Accessibility/AccessibleFilterMenuItem.cxx126
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);
+}
+