[orca/570658] Work on tables for OOo braille generator
- From: William Walker <wwalker src gnome org>
- To: svn-commits-list gnome org
- Subject: [orca/570658] Work on tables for OOo braille generator
- Date: Tue, 7 Jul 2009 15:44:01 +0000 (UTC)
commit 1c5844fa97fe6ac73af4d0c372e4efa3ebc1ca73
Author: Willie Walker <william walker sun com>
Date: Tue Jul 7 11:41:21 2009 -0400
Work on tables for OOo braille generator
src/orca/scripts/apps/soffice/braille_generator.py | 178 ++++++++++++++++++++
1 files changed, 178 insertions(+), 0 deletions(-)
---
diff --git a/src/orca/scripts/apps/soffice/braille_generator.py b/src/orca/scripts/apps/soffice/braille_generator.py
index 2da7e8b..ffbb5e5 100644
--- a/src/orca/scripts/apps/soffice/braille_generator.py
+++ b/src/orca/scripts/apps/soffice/braille_generator.py
@@ -53,6 +53,184 @@ class BrailleGenerator(braille_generator.BrailleGenerator):
self, obj, **args))
return result
+ def _generateRowHeader(self, obj, **args):
+ """Returns an array of strings that represent the row header for an
+ object that is in a table, if it exists. Otherwise, an empty
+ array is returned. Overridden here so that we can get the
+ dynamic row header(s).
+ """
+ result = []
+ try:
+ table = obj.parent.queryTable()
+ except:
+ pass
+ else:
+ index = self._script.getCellIndex(obj)
+ rowIndex = table.getRowAtIndex(index)
+ if rowIndex >= 0 \
+ and table in self._script.dynamicRowHeaders:
+ column = self._script.dynamicRowHeaders[table]
+ header = self._script.getDynamicColumnHeaderCell(obj, column)
+ try:
+ headerText = header.queryText()
+ except:
+ headerText = None
+ if header.childCount > 0:
+ for child in header:
+ text = self._script.getText(child, 0, -1)
+ if text:
+ result.append(text)
+ elif headerText:
+ text = self._script.getText(header, 0, -1)
+ if text:
+ result.append(text)
+ return result
+
+ def _generateColumnHeader(self, obj, **args):
+ """Returns an array of strings that represent the column header for an
+ object that is in a table, if it exists. Otherwise, an empty
+ array is returned. Overridden here so that we can get the
+ dynamic column header(s).
+ """
+ result = []
+ try:
+ table = obj.parent.queryTable()
+ except:
+ pass
+ else:
+ index = self._script.getCellIndex(obj)
+ columnIndex = table.getColumnAtIndex(index)
+ if columnIndex >= 0 \
+ and table in self._script.dynamicColumnHeaders:
+ row = self._script.dynamicColumnHeaders[table]
+ header = self._script.getDynamicRowHeaderCell(obj, row)
+ try:
+ headerText = header.queryText()
+ except:
+ headerText = None
+ if header.childCount > 0:
+ for child in header:
+ text = self._script.getText(child, 0, -1)
+ if text:
+ result.append(text)
+ elif headerText:
+ text = self._script.getText(header, 0, -1)
+ if text:
+ result.append(text)
+ return result
+
+ def _generateSpreadSheetCell(self, obj, **args):
+ result = []
+ if self._script.inputLineForCell == None:
+ self._script.inputLineForCell = \
+ self._script.locateInputLine(obj)
+ # If the spread sheet table cell has something in it, then we
+ # want to append the name of the cell (which will be its
+ # location). Note that if the cell was empty, then
+ # self._script.getDisplayedText will have already done this
+ # for us.
+ #
+ try:
+ if obj.queryText():
+ objectText = self._script.getText(obj, 0, -1)
+ if objectText and len(objectText) != 0:
+ result.append(braille.Component(
+ obj, objectText + " " + obj.name))
+ else:
+ result.append(braille.Component(obj, obj.name))
+ except:
+ pass
+ return result
+
+ def _generateRealTableCell(self, obj, **args):
+ """Get the speech for a table cell. If this isn't inside a
+ spread sheet, just return the utterances returned by the default
+ table cell speech handler.
+
+ Arguments:
+ - obj: the table cell
+
+ Returns a list of utterances to be spoken for the object.
+ """
+ result = []
+ if self._script.isSpreadSheetCell(obj):
+ result.extend(self._generateSpreadSheetCell(obj, **args))
+ else:
+ # Check to see how many children this table cell has. If it's
+ # just one (or none), then pass it on to the superclass to be
+ # processed.
+ #
+ # If it's more than one, then get the speech for each child,
+ # and call this method again.
+ #
+ if obj.childCount <= 1:
+ result.extend(braille_generator.BrailleGenerator.\
+ _generateRealTableCell(self, obj, **args))
+ else:
+ for child in obj:
+ result.extend(self._generateRealTableCell(child, **args))
+ return result
+
+ def _generateTableCellRow(self, obj, **args):
+ """Get the speech for a table cell row or a single table cell
+ if settings.readTableCellRow is False. If this isn't inside a
+ spread sheet, just return the utterances returned by the default
+ table cell speech handler.
+
+ Arguments:
+ - obj: the table cell
+
+ Returns a list of utterances to be spoken for the object.
+ """
+ result = []
+ if self._script.isSpreadSheetCell(obj):
+ # Adding in a check here to make sure that the parent is a
+ # valid table. It's possible that the parent could be a
+ # table cell too (see bug #351501).
+ #
+ parent = obj.parent
+ parentTable = parent.queryTable()
+ if settings.readTableCellRow and parentTable:
+ index = self._script.getCellIndex(obj)
+ row = parentTable.getRowAtIndex(index)
+ column = parentTable.getColumnAtIndex(index)
+ # This is an indication of whether we should present all the
+ # table cells (the user has moved focus up or down a row),
+ # or just the current one (focus has moved left or right in
+ # the same row).
+ #
+ presentAll = True
+ if "lastRow" in self._script.pointOfReference and \
+ "lastColumn" in self._script.pointOfReference:
+ pointOfReference = self._script.pointOfReference
+ presentAll = \
+ (self._mode == 'braille') \
+ or ((pointOfReference["lastRow"] != row) \
+ or ((row == 0 or row == parentTable.nRows-1) \
+ and pointOfReference["lastColumn"] == column))
+ if presentAll:
+ [startIndex, endIndex] = \
+ self._script.getSpreadSheetRowRange(obj)
+ for i in range(startIndex, endIndex+1):
+ cell = parentTable.getAccessibleAt(row, i)
+ showing = cell.getState().contains( \
+ pyatspi.STATE_SHOWING)
+ if showing:
+ cellResult = self._generateRealTableCell(cell, **args)
+ if cellResult and result and self._mode == 'braille':
+ result.append(braille.Region(
+ settings.brailleTableCellDelimiter))
+ result.extend(cellResult)
+ else:
+ result.extend(self._generateRealTableCell(obj, **args))
+ else:
+ result.extend(self._generateRealTableCell(obj, **args))
+ else:
+ result.extend(
+ braille_generator.BrailleGenerator._generateTableCellRow(
+ self, obj, **args))
+ return result
+
def _getBrailleRegionsForTableCellRow(self, obj):
"""Get the braille for a table cell row or a single table cell
if settings.readTableCellRow is False.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]