Add tags column to library view

This commit is contained in:
Kovid Goyal 2008-01-20 07:34:37 +00:00
parent f5c1140042
commit e049ba9aa2
2 changed files with 15 additions and 7 deletions

View File

@ -108,7 +108,8 @@ class BooksModel(QAbstractTableModel):
def __init__(self, parent): def __init__(self, parent):
QAbstractTableModel.__init__(self, parent) QAbstractTableModel.__init__(self, parent)
self.db = None self.db = None
self.cols = ['title', 'authors', 'size', 'date', 'rating', 'publisher', 'series'] self.cols = ['title', 'authors', 'size', 'date', 'rating', 'publisher', 'tags', 'series']
self.editable_cols = [0, 1, 4, 5, 6]
self.sorted_on = (3, Qt.AscendingOrder) self.sorted_on = (3, Qt.AscendingOrder)
self.last_search = '' # The last search performed on this model self.last_search = '' # The last search performed on this model
self.read_config() self.read_config()
@ -315,6 +316,10 @@ class BooksModel(QAbstractTableModel):
if pub: if pub:
return QVariant(BooksView.wrap(pub, 20)) return QVariant(BooksView.wrap(pub, 20))
elif col == 6: elif col == 6:
tags = self.db.tags(row)
if tags:
return QVariant(', '.join(tags.split(',')))
elif col == 7:
series = self.db.series(row) series = self.db.series(row)
if series: if series:
return QVariant(series) return QVariant(series)
@ -322,7 +327,7 @@ class BooksModel(QAbstractTableModel):
elif role == Qt.TextAlignmentRole and index.column() in [2, 3, 4]: elif role == Qt.TextAlignmentRole and index.column() in [2, 3, 4]:
return QVariant(Qt.AlignRight | Qt.AlignVCenter) return QVariant(Qt.AlignRight | Qt.AlignVCenter)
elif role == Qt.ToolTipRole and index.isValid(): elif role == Qt.ToolTipRole and index.isValid():
if index.column() in [0, 1, 4, 5]: if index.column() in self.editable_cols:
return QVariant("Double click to <b>edit</b> me<br><br>") return QVariant("Double click to <b>edit</b> me<br><br>")
return NONE return NONE
@ -337,7 +342,8 @@ class BooksModel(QAbstractTableModel):
elif section == 3: text = _("Date") elif section == 3: text = _("Date")
elif section == 4: text = _("Rating") elif section == 4: text = _("Rating")
elif section == 5: text = _("Publisher") elif section == 5: text = _("Publisher")
elif section == 6: text = _("Series") elif section == 6: text = _("Tags")
elif section == 7: text = _("Series")
return QVariant(text) return QVariant(text)
else: else:
return QVariant(section+1) return QVariant(section+1)
@ -345,7 +351,7 @@ class BooksModel(QAbstractTableModel):
def flags(self, index): def flags(self, index):
flags = QAbstractTableModel.flags(self, index) flags = QAbstractTableModel.flags(self, index)
if index.isValid(): if index.isValid():
if index.column() not in [2, 3]: if index.column() in self.editable_cols:
flags |= Qt.ItemIsEditable flags |= Qt.ItemIsEditable
return flags return flags
@ -353,7 +359,7 @@ class BooksModel(QAbstractTableModel):
done = False done = False
if role == Qt.EditRole: if role == Qt.EditRole:
row, col = index.row(), index.column() row, col = index.row(), index.column()
if col in [2,3]: if col not in self.editable_cols:
return False return False
val = unicode(value.toString().toUtf8(), 'utf-8').strip() if col != 4 else \ val = unicode(value.toString().toUtf8(), 'utf-8').strip() if col != 4 else \
int(value.toInt()[0]) int(value.toInt()[0])

View File

@ -793,6 +793,7 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE;
'size': 'size', 'size': 'size',
'date': 'timestamp', 'date': 'timestamp',
'rating': 'rating', 'rating': 'rating',
'tags':'tags',
'series': 'series', 'series': 'series',
} }
field = FIELDS[sort_field] field = FIELDS[sort_field]
@ -990,8 +991,7 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE;
Convenience method for setting the title, authors, publisher or rating Convenience method for setting the title, authors, publisher or rating
''' '''
id = self.data[row][0] id = self.data[row][0]
cols = {'title' : 1, 'authors': 2, 'publisher': 3, 'rating':4} col = {'title':1, 'authors':2, 'publisher':3, 'rating':4, 'tags':7}[column]
col = cols[column]
self.data[row][col] = val self.data[row][col] = val
for item in self.cache: for item in self.cache:
@ -1007,6 +1007,8 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE;
self.set_publisher(id, val) self.set_publisher(id, val)
elif column == 'rating': elif column == 'rating':
self.set_rating(id, val) self.set_rating(id, val)
elif column == 'tags':
self.set_tags(id, val.split(','), append=False)
def set_conversion_options(self, id, format, options): def set_conversion_options(self, id, format, options):
data = sqlite.Binary(cPickle.dumps(options)) data = sqlite.Binary(cPickle.dumps(options))