view FeedEntryTableModel.py @ 155:a05719a6175e

move common functionality into an abstract backend class, have both backends inherit from it. Implement enough of the couchdb backend that reading feeds (and marking feed entries as read) is possible
author Dirk Olmes <dirk@xanthippe.ping.de>
date Sat, 27 Aug 2011 08:52:03 +0200
parents a16c4e2b2c55
children bb3c851b18b1
line wrap: on
line source


from PyQt4.QtCore import QAbstractTableModel, QVariant, Qt

class TableModel(QAbstractTableModel):
    '''
    This is the abstract super class for table models in Python. It deals with the Qt specifics so
    that subclasses only need to care about implementing the functionality
    '''
    def __init__(self, *args):
        QAbstractTableModel.__init__(self, None, *args)

    def headerData(self, section, orientation, role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            value = self.headerDataForColumn(section)
            return QVariant(value)
        else:
            return QVariant()

    def data(self, index, role):
        if not index.isValid():
            return QVariant()
        elif role != Qt.DisplayRole:
            return QVariant()
        else:
            value = self.dataForRowAndColumn(index.row(), index.column())
            return QVariant(value)


class FeedEntryTableModel(TableModel):
    def __init__(self, feedEntries, *args):
        TableModel.__init__(self, *args)
        self.feedEntries = feedEntries

    def rowCount(self, parent):
        return len(self.feedEntries)

    def columnCount(self, parent):
        return 2

    def dataForRowAndColumn(self, row, column):
        feedEntry = self.feedEntries[row]
        if column == 0:
            return feedEntry.title
        else:
            return str(feedEntry.updated)

    def headerDataForColumn(self, column):
        if column == 0:
            return "Title"
        else:
            return "Date"