orca r4041 - in trunk: . src/orca src/orca/scripts/toolkits/Gecko
- From: joanied svn gnome org
- To: svn-commits-list gnome org
- Subject: orca r4041 - in trunk: . src/orca src/orca/scripts/toolkits/Gecko
- Date: Thu, 17 Jul 2008 21:29:53 +0000 (UTC)
Author: joanied
Date: Thu Jul 17 21:29:53 2008
New Revision: 4041
URL: http://svn.gnome.org/viewvc/orca?rev=4041&view=rev
Log:
* src/orca/scripts/toolkits/Gecko/script.py:
src/orca/scripts/toolkits/Gecko/speech_generator.py:
src/orca/speechgenerator.py:
src/orca/where_am_I.py:
src/orca/braillegenerator.py:
src/orca/settings.py:
Fix for bug #519515 - Support ARIA "required" state.
Modified:
trunk/ChangeLog
trunk/src/orca/braillegenerator.py
trunk/src/orca/scripts/toolkits/Gecko/script.py
trunk/src/orca/scripts/toolkits/Gecko/speech_generator.py
trunk/src/orca/settings.py
trunk/src/orca/speechgenerator.py
trunk/src/orca/where_am_I.py
Modified: trunk/src/orca/braillegenerator.py
==============================================================================
--- trunk/src/orca/braillegenerator.py (original)
+++ trunk/src/orca/braillegenerator.py Thu Jul 17 21:29:53 2008
@@ -194,6 +194,25 @@
else:
return None
+ def _getTextForRequiredObject(self, obj):
+ """Returns a string to be displayed that describes the required
+ state of the given object.
+
+ Arguments:
+ - obj: the Accessible object
+
+ Returns a string to be displayed.
+ """
+
+ if not settings.presentRequiredState:
+ return None
+
+ state = obj.getState()
+ if state.contains(pyatspi.STATE_REQUIRED):
+ return settings.brailleRequiredStateString
+ else:
+ return None
+
def _getTextForRole(self, obj, role=None):
if (settings.brailleVerbosityLevel \
== settings.VERBOSITY_LEVEL_VERBOSE)\
@@ -245,6 +264,8 @@
text = self._script.appendString(text,
self._script.getTextForValue(obj))
text = self._script.appendString(text, self._getTextForRole(obj, role))
+ text = self._script.appendString(text,
+ self._getTextForRequiredObject(obj))
regions = []
componentRegion = braille.Component(obj, text)
@@ -342,6 +363,8 @@
text = self._script.appendString(
text, self._getTextForRole(obj, pyatspi.ROLE_CHECK_BOX))
+ text = self._script.appendString(text,
+ self._getTextForRequiredObject(obj))
regions = []
componentRegion = braille.Component(
@@ -836,6 +859,9 @@
self._script.getDisplayedLabel(obj),
settings.brailleEOLIndicator)
regions.append(textRegion)
+ text = self._getTextForRequiredObject(obj)
+ if text:
+ regions.append(braille.Region(" " + text))
# We do not want the role at the end of text areas.
@@ -1142,6 +1168,8 @@
text = self._script.appendString(text,
self._script.getTextForValue(obj))
text = self._script.appendString(text, self._getTextForRole(obj))
+ text = self._script.appendString(text,
+ self._getTextForRequiredObject(obj))
regions = []
componentRegion = braille.Component(obj, text)
Modified: trunk/src/orca/scripts/toolkits/Gecko/script.py
==============================================================================
--- trunk/src/orca/scripts/toolkits/Gecko/script.py (original)
+++ trunk/src/orca/scripts/toolkits/Gecko/script.py Thu Jul 17 21:29:53 2008
@@ -1222,7 +1222,9 @@
# See bug #441610 and
# https://bugzilla.mozilla.org/show_bug.cgi?id=348901
#
- string = self.appendString(string, self.expandEOCs(label))
+ expandedLabel = self.expandEOCs(label)
+ if expandedLabel:
+ string = self.appendString(string, expandedLabel.strip())
return string
Modified: trunk/src/orca/scripts/toolkits/Gecko/speech_generator.py
==============================================================================
--- trunk/src/orca/scripts/toolkits/Gecko/speech_generator.py (original)
+++ trunk/src/orca/scripts/toolkits/Gecko/speech_generator.py Thu Jul 17 21:29:53 2008
@@ -701,6 +701,13 @@
if not role in dontSpeakRoles and len(newUtterances):
utterances.append(rolenames.getSpeechForRoleName(parent))
+ # If this object is an ARIA widget with STATE_REQUIRED, add
+ # that. (Note that for the most part, the ARIA widget itself
+ # has this state, but in the case of a group of radio buttons,
+ # it is the group which has the state).
+ #
+ utterances.extend(self._getSpeechForRequiredObject(parent))
+
utterances.extend(newUtterances)
parent = parent.parent
@@ -721,7 +728,7 @@
"""
# Let default handle non-ARIA widgets (XUL?)
- if not self._script.isAriaWidget(obj):
+ if self._script.isAriaWidget(obj):
return speechgenerator.SpeechGenerator.\
_getSpeechForSlider(self, obj, already_focused)
@@ -769,7 +776,7 @@
utterances.append(valueString)
utterances.extend(self._getSpeechForObjectAvailability(obj))
- self._debugGenerator("_getSpeechForSlider",
+ self._debugGenerator("Gecko._getSpeechForSlider",
obj,
already_focused,
utterances)
Modified: trunk/src/orca/settings.py
==============================================================================
--- trunk/src/orca/settings.py (original)
+++ trunk/src/orca/settings.py Thu Jul 17 21:29:53 2008
@@ -175,7 +175,10 @@
"speakCellHeaders",
"skipBlankCells",
"largeObjectTextLength",
- "wrappedStructuralNavigation"
+ "wrappedStructuralNavigation",
+ "presentRequiredState",
+ "brailleRequiredStateString",
+ "speechRequiredStateString"
]
# The name of the module that hold the user interface for the main window
@@ -1110,3 +1113,24 @@
# among headings (H) and the Help menu (Alt+H).
#
defaultModifierMask = NON_LOCKING_MODIFIER_MASK
+
+# Whether or not we should present objects with STATE_REQUIRED to
+# the user. Currently, this is only seen with ARIA widgets.
+#
+presentRequiredState = False
+
+# Translators: Certain objects (such as form controls on web pages)
+# can have STATE_REQUIRED set on them to inform the user that this
+# field must be filled out. This string is the default string which
+# will be spoken and displayed in braille to indicate this state is
+# present.
+#
+brailleRequiredStateString = _("required")
+
+# Translators: Certain objects (such as form controls on web pages)
+# can have STATE_REQUIRED set on them to inform the user that this
+# field must be filled out. This string is the default string which
+# will be spoken and displayed in braille to indicate this state is
+# present.
+#
+speechRequiredStateString = _("required")
Modified: trunk/src/orca/speechgenerator.py
==============================================================================
--- trunk/src/orca/speechgenerator.py (original)
+++ trunk/src/orca/speechgenerator.py Thu Jul 17 21:29:53 2008
@@ -241,6 +241,25 @@
return utterance
+ def _getSpeechForRequiredObject(self, obj):
+ """Returns the list of utterances that describe the required state
+ of the given object.
+
+ Arguments:
+ - obj: the Accessible object
+
+ Returns a list of utterances to be spoken.
+ """
+
+ if not settings.presentRequiredState:
+ return []
+
+ state = obj.getState()
+ if state.contains(pyatspi.STATE_REQUIRED):
+ return [settings.speechRequiredStateString]
+ else:
+ return []
+
def _debugGenerator(self, generatorName, obj, already_focused, utterances):
"""Prints debug.LEVEL_FINER information regarding the speech generator.
@@ -425,6 +444,7 @@
utterances.extend(self._getSpeechForObjectRole(obj))
utterances.append(checkedState)
utterances.extend(self._getSpeechForObjectAvailability(obj))
+ utterances.extend(self._getSpeechForRequiredObject(obj))
else:
utterances.append(checkedState)
@@ -1221,6 +1241,7 @@
utterances.extend(self._getSpeechForObjectRole(obj))
utterances.append(valueString)
utterances.extend(self._getSpeechForObjectAvailability(obj))
+ utterances.extend(self._getSpeechForRequiredObject(obj))
self._debugGenerator("_getSpeechForSlider",
obj,
@@ -1244,6 +1265,7 @@
utterances = [self._script.getDisplayedText(obj)]
else:
utterances = self._getDefaultSpeech(obj, already_focused)
+ utterances.extend(self._getSpeechForRequiredObject(obj))
self._debugGenerator("_getSpeechForSpinButton",
obj,
@@ -1439,6 +1461,8 @@
#
utterances.append(_("collapsed"))
+ utterances.extend(self._getSpeechForRequiredObject(obj))
+
self._debugGenerator("_getSpeechForTableCell",
obj,
already_focused,
Modified: trunk/src/orca/where_am_I.py
==============================================================================
--- trunk/src/orca/where_am_I.py (original)
+++ trunk/src/orca/where_am_I.py Thu Jul 17 21:29:53 2008
@@ -178,6 +178,10 @@
accelerator = self._getObjAccelerator(obj)
utterances.append(accelerator)
+ text = self._getRequiredState(obj)
+ if text:
+ utterances.append(text)
+
debug.println(self._debugLevel, "check box utterances=%s" \
% utterances)
speech.speakUtterances(utterances)
@@ -198,6 +202,10 @@
text = self._getGroupLabel(obj)
utterances.append(text)
+ text = self._getRequiredState(obj)
+ if text:
+ utterances.append(text)
+
text = self.getObjLabelAndName(obj) + " " + \
rolenames.getSpeechForRoleName(obj)
utterances.append(text)
@@ -274,20 +282,25 @@
"""
utterances = []
- text = self._getObjLabel(obj)
- utterances.append(text)
+ label = self._getObjLabel(obj)
+ utterances.append(label)
text = rolenames.getSpeechForRoleName(obj)
utterances.append(text)
name = self._getObjName(obj)
- utterances.append(name)
+ if name != label:
+ utterances.append(name)
utterances.extend(self._getSpeechForAllTextSelection(obj))
text = self._getObjAccelerator(obj)
utterances.append(text)
+ text = self._getRequiredState(obj)
+ if text:
+ utterances.append(text)
+
debug.println(self._debugLevel, "spin button utterances=%s" % \
utterances)
speech.speakUtterances(utterances)
@@ -342,6 +355,10 @@
text = self._getObjAccelerator(obj)
utterances.append(text)
+ text = self._getRequiredState(obj)
+ if text:
+ utterances.append(text)
+
debug.println(self._debugLevel, "slider utterances=%s" % \
utterances)
speech.speakUtterances(utterances)
@@ -566,6 +583,10 @@
text = self._getTableCell(obj)
utterances.append(text)
+ text = self._getRequiredState(obj)
+ if text:
+ utterances.append(text)
+
debug.println(self._debugLevel, "first table cell utterances=%s" % \
utterances)
speech.speakUtterances(utterances)
@@ -982,7 +1003,7 @@
name = obj.description
if name and name != "None":
- text = name
+ text = name.strip()
debug.println(self._debugLevel, "%s name=<%s>" % (obj.getRole(), text))
return text
@@ -995,7 +1016,7 @@
label = self._script.getDisplayedLabel(obj)
if label and label != "None":
- text = label
+ text = label.strip()
debug.println(self._debugLevel, "%s label=<%s>" % (obj.getRole(), text))
@@ -1818,3 +1839,23 @@
debug.println(self._debugLevel, "toolbar utterances=%s" \
% utterances)
speech.speakUtterances(utterances)
+
+ def _getRequiredState(self, obj):
+ """Returns a string describing the required state of the given
+ object.
+
+ Arguments:
+ - obj: the Accessible object
+ """
+
+ if not settings.presentRequiredState:
+ return ""
+
+ if obj.getRole() == pyatspi.ROLE_RADIO_BUTTON:
+ obj = obj.parent
+
+ state = obj.getState()
+ if state.contains(pyatspi.STATE_REQUIRED):
+ return settings.speechRequiredStateString
+ else:
+ return ""
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]