Skip to content

Commit

Permalink
Merge branch 't3568' into next. Incubates #3568
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelDCurran committed Jun 10, 2014
2 parents 6264649 + 86268dd commit 6459346
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 10 deletions.
22 changes: 14 additions & 8 deletions source/NVDAObjects/window/excel.py
Expand Up @@ -32,7 +32,7 @@
xlRC = 2
xlUnderlineStyleNone=-4142

re_RC=re.compile(r'R(?:\[(\d+)\])?C(?:\[(\d+)\])?')
re_absRC=re.compile(r'^R(\d+)C(\d+)(?::R(\d+)C(\d+))?$')

class ExcelBase(Window):
"""A base that all Excel NVDAObjects inherit from, which contains some useful methods."""
Expand Down Expand Up @@ -215,10 +215,14 @@ def forgetHeaderCell(self,cell,isColumnHeader=False,isRowHeader=False):
return True

def fetchAssociatedHeaderCellText(self,cell,columnHeader=False):
for info in self.headerCellTracker.iterPossibleHeaderCellInfosFor(cell.rowNumber,cell.columnNumber,columnHeader):
firstHeaderCell=self.excelWorksheetObject.cells(info.rowNumber,info.columnNumber)
if not self.excelApplicationObject.intersect(cell.excelCellObject.currentRegion,firstHeaderCell):
continue
cellRegion=cell.excelCellObject.currentRegion
if cellRegion.count==1:
minRow=maxRow=minColumn=maxColumn=None
else:
rc=cellRegion.address(True,True,xlRC,False)
g=[int(x) for x in re_absRC.match(rc).groups()]
minRow,maxRow,minColumn,maxColumn=min(g[0],g[2]),max(g[0],g[2]),min(g[1],g[3]),max(g[1],g[3])
for info in self.headerCellTracker.iterPossibleHeaderCellInfosFor(cell.rowNumber,cell.columnNumber,minRowNumber=minRow,maxRowNumber=maxRow,minColumnNumber=minColumn,maxColumnNumber=maxColumn,columnHeader=columnHeader):
textList=[]
if columnHeader:
for headerRowNumber in xrange(info.rowNumber,info.rowNumber+info.rowSpan):
Expand All @@ -228,7 +232,9 @@ def fetchAssociatedHeaderCellText(self,cell,columnHeader=False):
for headerColumnNumber in xrange(info.columnNumber,info.columnNumber+info.colSpan):
headerCell=self.excelWorksheetObject.cells(cell.rowNumber,headerColumnNumber)
textList.append(headerCell.text)
return " ".join(textList)
text=" ".join(textList)
if text:
return text

def __init__(self,windowHandle=None,excelWindowObject=None,excelWorksheetObject=None):
self.excelWindowObject=excelWindowObject
Expand Down Expand Up @@ -458,8 +464,8 @@ def _get_cellCoordsText(self):
return self.getCellAddress(self.excelCellObject)

def _get__rowAndColumnNumber(self):
rc=self.excelCellObject.address(False,False,xlRC,False)
return [int(x)+1 if x else 1 for x in re_RC.match(rc).groups()]
rc=self.excelCellObject.address(True,True,xlRC,False)
return [int(x) if x else 1 for x in re_absRC.match(rc).groups()]

def _get_rowNumber(self):
return self._rowAndColumnNumber[0]
Expand Down
6 changes: 4 additions & 2 deletions source/tableUtils.py
Expand Up @@ -35,10 +35,12 @@ def removeHeaderCellInfo(self,info):
def getHeaderCellInfoAt(self,rowNumber,columnNumber):
return self.infosDict.get((rowNumber,columnNumber))

def iterPossibleHeaderCellInfosFor(self,rowNumber,columnNumber,columnHeader=False):
for key in (self.listByColumn if columnHeader else self.listByRow):
def iterPossibleHeaderCellInfosFor(self,rowNumber,columnNumber,minRowNumber=None,maxRowNumber=None,minColumnNumber=None,maxColumnNumber=None,columnHeader=False):
for key in (self.listByRow if columnHeader else self.listByColumn):
info=self.infosDict[key]
if (info.minColumnNumber and info.minColumnNumber>columnNumber) or (info.maxColumnNumber and info.maxColumnNumber<columnNumber) or (info.minRowNumber and info.minRowNumber>rowNumber) or (info.maxRowNumber and info.maxRowNumber<rowNumber):
continue
if (minColumnNumber and minColumnNumber>info.columnNumber) or (maxColumnNumber and maxColumnNumber<info.columnNumber) or (minRowNumber and minRowNumber>info.rowNumber) or (maxRowNumber and maxRowNumber<info.rowNumber):
continue
if (columnHeader and info.isColumnHeader and (info.rowNumber+info.rowSpan-1)<rowNumber and info.columnNumber<=columnNumber) or (not columnHeader and info.isRowHeader and (info.columnNumber+info.colSpan-1)<columnNumber and info.rowNumber<=rowNumber):
yield info

0 comments on commit 6459346

Please sign in to comment.