diff options
author | Xisco Fauli <anistenis@gmail.com> | 2013-01-29 22:50:14 +0100 |
---|---|---|
committer | Xisco Fauli <anistenis@gmail.com> | 2013-01-29 22:51:55 +0100 |
commit | a8eacaa870a4f39e096fb3801f457e1696815367 (patch) | |
tree | 4f20528371bfa663403048baa05fd251a1f85f5c /wizards | |
parent | aa4ef13a517d4eee4db9d36283eca3240bdd873f (diff) |
pyagenda: simplify Topics code
Change-Id: Ie8417eafa70204accadff1c50d23c32fdda7bbb1
Diffstat (limited to 'wizards')
-rw-r--r-- | wizards/com/sun/star/wizards/agenda/AgendaDocument.py | 234 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/agenda/TemplateConsts.py | 9 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/agenda/TopicsControl.py | 10 |
3 files changed, 30 insertions, 223 deletions
diff --git a/wizards/com/sun/star/wizards/agenda/AgendaDocument.py b/wizards/com/sun/star/wizards/agenda/AgendaDocument.py index 86007786097f..b3d88065024b 100644 --- a/wizards/com/sun/star/wizards/agenda/AgendaDocument.py +++ b/wizards/com/sun/star/wizards/agenda/AgendaDocument.py @@ -69,7 +69,6 @@ table.self.xTextDocument A note about threads:<br/> Many methods here are synchronized, in order to avoid colission made by events fired too often. -@author rpiterman ''' class AgendaDocument(TextDocument): @@ -758,8 +757,6 @@ was done out of logic reasons and not design/functionality reasons, since there is anyway only one instance of this class at runtime it could have also be implemented in the AgendaDocument class but for clarity and separation I decided to make a sub class for it. - -@author rp143992 ''' class Topics(object): @@ -781,26 +778,12 @@ class Topics(object): ''' table = None lastRowFormat = [] - numCell = -1 - topicCell = -1 - responsibleCell = -1 - timeCell = -1 rowsPerTopic = None - topicCells = [] def __init__(self, agenda): - self.topicItems = {} self.firstRowFormat = [] self.agenda = agenda - ''' - this is a list which traces which topics were written to the document - and which not. When a cell needs to be actualized, it is checked that the - whole topic is already present in the document, using this vector. - The vector contains nulls for topics which were not written, and - empty strings for topics which were written (though any other - object would also do - i check only if it is a null or not...); - ''' - self.writtenTopics = [] + self.writtenTopics = -1 try: Topics.table = self.agenda.getTable( self.agenda.templateConsts.SECTION_TOPICS) @@ -846,34 +829,10 @@ class Topics(object): cell = Topics.table.getCellByName(cursor.RangeName) # first I store the content and para style of the cell ae = TextElement(cell, cell.String) - # if the cell contains a relevant <...> - # i add the text element to the hash, - # so it's text can be updated later. - try: - if items[cell.CellName] is not None: - self.topicItems[cell.String.lower().lstrip()] = ae - except KeyError: - pass + ae.write() - Topics.topicCells.append(ae) # goto next cell. cursor.goRight(1, False) - ''' - now - in which cell is every fillin? - ''' - - Topics.numCell = Topics.topicCells.index( - self.topicItems[ - self.agenda.templateConsts.FILLIN_TOPIC_NUMBER]) - Topics.topicCell = Topics.topicCells.index( - self.topicItems[ - self.agenda.templateConsts.FILLIN_TOPIC_TOPIC]) - Topics.responsibleCell = Topics.topicCells.index( - self.topicItems[ - self.agenda.templateConsts.FILLIN_TOPIC_RESPONSIBLE]) - Topics.timeCell = Topics.topicCells.index( - self.topicItems[ - self.agenda.templateConsts.FILLIN_TOPIC_TIME]) except Exception: traceback.print_exc() @@ -883,117 +842,42 @@ class Topics(object): to the table. 0 or a negative number: no rows added. ''' - def write2(self, topic, data): - if topic >= len(self.writtenTopics): - size = topic - len(self.writtenTopics) - self.writtenTopics += [None] * size - self.writtenTopics.insert(topic, "") - # make sure three are enough rows for me... - rows = self.agenda.getRowCount(Topics.table) - reqRows = 1 + (topic + 1) * Topics.rowsPerTopic - firstRow = reqRows - Topics.rowsPerTopic + 1 - diff = reqRows - rows - if diff > 0: - # set the item's text... - self.agenda.insertTableRows(Topics.table, rows, diff) - - self.setItemText(Topics.numCell, data[0].Value) - self.setItemText(Topics.topicCell, data[1].Value) - self.setItemText(Topics.responsibleCell, data[2].Value) - self.setItemText(Topics.timeCell, data[3].Value) - # now write ! - cursor = Topics.table.createCursorByCellName("A" + str(firstRow)) - for i in Topics.topicCells: - i.placeHolderText = \ - Topics.table.getCellByName(cursor.RangeName).String - i.write() - cursor.goRight(1, False) - # now format ! - cursor.gotoCellByName("A" + str(firstRow), False) - return diff - - '''check if the topic with the given index is written to the table. - @param topic the topic number (0 base) - @return true if the topic is already written to the table. False if not. - (false would mean rows must be added to the table in order to - be able to write this topic). - ''' + def write(self, row, column, data): + # if the whole row should be written... + if self.writtenTopics < row: + self.writtenTopics += 1 + rows = self.agenda.getRowCount(Topics.table) + reqRows = 1 + (row + 1) * Topics.rowsPerTopic + firstRow = reqRows - Topics.rowsPerTopic + 1 + diff = reqRows - rows + if diff > 0: + # set the item's text... + self.agenda.insertTableRows(Topics.table, rows, diff) + column = 0 + cursor = Topics.table.createCursorByCellName("A" + str(firstRow)) + else: + # calculate the table row. + firstRow = 1 + (row * Topics.rowsPerTopic) + 1 + cursor = Topics.table.createCursorByCellName("A" + str(firstRow)) - def isWritten(self, topic): - return (len(self.writtenTopics) > topic \ - and self.writtenTopics[topic] is not None) + # move the cursor to the needed cell... + cursor.goRight(column, False) + + self.writeCell(cursor, column, data) '''rewrites a single cell containing. This is used in order to refresh the topic/responsible/duration data in the preview document, in response to a change in the gui (by the user) Since the structure of the topics table is flexible, - we don't reference a cell number. Rather, we use "what" argument to - specify which cell should be redrawn. The Topics object, which analyzed the structure of the topics table appon initialization, refreshes the approperiate cell. - @param topic index of the topic (0 based). - @param what 0 for num, 1 for topic, 2 for responsible, 3 for duration - @param data the row's data. - @throws Exception if something goes wrong (thow nothing should) ''' - - def writeCell(self, topic, what, data): - # if the whole row should be written... - if not self.isWritten(topic): - self.write(topic, data) - # write only the "what" cell. - else: - # calculate the table row. - firstRow = 1 + (topic * Topics.rowsPerTopic) + 1 - # go to the first cell of this topic. - cursor = Topics.table.createCursorByCellName("A" + str(firstRow)) - te = None - cursorMoves = 0 - if what == 0: - te = self.setItemText(Topics.numCell, data[0].Value) - cursorMoves = Topics.numCell - elif what == 1: - te = self.setItemText(Topics.topicCell, data[1].Value) - cursorMoves = Topics.topicCell - elif what == 2: - te = self.setItemText(Topics.responsibleCell, data[2].Value) - cursorMoves = Topics.responsibleCell - elif what == 3: - te = self.setItemText(Topics.timeCell, data[3].Value) - cursorMoves = Topics.timeCell - - # move the cursor to the needed cell... - cursor.goRight(cursorMoves, False) - xc = Topics.table.getCellByName(cursor.RangeName) - # and write it ! - te.placeHolderText = xc.String - te.write() - - '''writes the given topic. - if the first topic was involved, reformat the - first row. - If any rows were added to the table, reformat - the last row. - @param topic the index of the topic to write. - @param data the topic's data. (see TopicsControl - for explanation about the topics data model) - @throws Exception if something goes wrong (though nothing should). - ''' - - def write(self, topic, data): - diff = self.write2(topic, data) - '''if the first topic has been written, - one needs to reformat the first row. - ''' - if topic == 0: - self.formatFirstRow() - ''' - if any rows were added, one needs to format - the whole table again. - ''' - - if diff > 0: - self.formatLastRow() + + def writeCell(self, cursor, column, data): + xc = Topics.table.getCellByName(cursor.RangeName) + # and write it ! + te = TextElement(xc, data[column].Value) + te.write() '''removes obsolete rows, reducing the topics table to the given number of topics. @@ -1022,67 +906,9 @@ class Topics(object): tableRows.removeByIndex( targetNumOfRows, tableRows.Count - targetNumOfRows)''' - self.formatLastRow() - while len(self.writtenTopics) > topics: - del self.writtenTopics[topics] - - '''reapply the format of the first (header) row. - ''' - - def formatFirstRow(self): - cursor = Topics.table.createCursorByCellName("A1") - self.formatTable(cursor, self.firstRowFormat, False) - - '''reaply the format of the last row. - ''' - @classmethod - def formatLastRow(self): - cursor = Topics.table.createCursorByCellName("A1") - cursor.gotoEnd(False) - self.formatTable(cursor, Topics.lastRowFormat, True) - - '''returns a text element for the given cell, - which will write the given text. - @param cell the topics cell number. - @param value the value to write. - @return a TextElement object which will write the given value - to the given cell. - ''' - - @classmethod - def setItemText(self, cell, value): - if cell >= 0: - te = Topics.topicCells[cell] - if te is not None: - te.Text = str(value) - return te - - return None - - '''formats a series of cells from the given one, - using the given List of TableCellFormatter objects, - in the given order. - This method is used to format the first (header) and the last - rows of the table. - @param cursor a table cursor, pointing to the start cell to format - @param formats a List containing TableCellFormatter objects. - Each will format one cell in the direction specified. - @param reverse if true the cursor will move left, - formatting in reverse order (used for the last row). - ''' - @classmethod - def formatTable(self, cursor, formats, reverse): - for i in formats: - i.format(Topics.table.getCellByName(cursor.RangeName)) - if reverse: - cursor.goLeft(1, False) - else: - cursor.goRight(1, False) - ''' A Text element which, if the text to write is empty (null or "") inserts a placeholder instead. -@author rp143992 ''' class PlaceholderTextElement(TextElement): @@ -1108,7 +934,6 @@ class PlaceholderTextElement(TextElement): ''' An Agenda element which writes no text, but inserts a placeholder, and formats it using a ParaStyleName. -@author rp143992 ''' class PlaceholderElement(object): @@ -1132,7 +957,6 @@ An implementation of AgendaElement which gets as a parameter a table cursor, and writes a text to the cell marked by this table cursor, and a place holder to the next cell. -@author rp143992 ''' class AgendaItem(object): diff --git a/wizards/com/sun/star/wizards/agenda/TemplateConsts.py b/wizards/com/sun/star/wizards/agenda/TemplateConsts.py index 8d9f6697708d..eb0d0b02e531 100644 --- a/wizards/com/sun/star/wizards/agenda/TemplateConsts.py +++ b/wizards/com/sun/star/wizards/agenda/TemplateConsts.py @@ -64,15 +64,6 @@ class TemplateConsts: FILLIN_RESOURCE_PERSONS = "<resource-persons>" ''' - Fillins for the topic table. - These strings will be searched inside the topic table as - part of detecting its structure. - ''' - FILLIN_TOPIC_NUMBER = "<num>" - FILLIN_TOPIC_TOPIC = "<topic>" - FILLIN_TOPIC_RESPONSIBLE = "<responsible>" - FILLIN_TOPIC_TIME = "<topic-time>" - ''' fillins for minutes. These will be searched in the minutes section and will be replaced with the appropriate data. diff --git a/wizards/com/sun/star/wizards/agenda/TopicsControl.py b/wizards/com/sun/star/wizards/agenda/TopicsControl.py index 809e468ab9a4..af962b8c81f2 100644 --- a/wizards/com/sun/star/wizards/agenda/TopicsControl.py +++ b/wizards/com/sun/star/wizards/agenda/TopicsControl.py @@ -358,7 +358,6 @@ class TopicsControl(ControlScroller): @param guiRow @param column ''' - oldData = [] @classmethod def fieldChanged(self, guiRow, column): @@ -367,13 +366,6 @@ class TopicsControl(ControlScroller): data = self.getTopicData(guiRow + ControlScroller.nscrollvalue) if data is None: return - - dataValue = [i.Value for i in data] - if dataValue == TopicsControl.oldData: - return - else: - TopicsControl.oldData = dataValue - self.updateDocumentCell( guiRow + ControlScroller.nscrollvalue, column, data) if self.isRowEmpty(guiRow + ControlScroller.nscrollvalue): @@ -724,7 +716,7 @@ class TopicsControl(ControlScroller): @classmethod def updateDocumentCell(self, row, column, data): try: - ControlScroller.CurUnoDialog.agendaTemplate.topics.writeCell( + ControlScroller.CurUnoDialog.agendaTemplate.topics.write( row, column, data) except Exception: traceback.print_exc() |