Merge from trunk

This commit is contained in:
Charles Haley 2010-09-18 23:45:53 +01:00
commit 3b4f46b115
3 changed files with 29 additions and 14 deletions

View File

@ -173,8 +173,8 @@ class EditMetadataAction(InterfaceAction):
''' '''
rows = [r.row() for r in \ rows = [r.row() for r in \
self.gui.library_view.selectionModel().selectedRows()] self.gui.library_view.selectionModel().selectedRows()]
db = self.gui.library_view.model().db m = self.gui.library_view.model()
ids = [db.id(r) for r in rows] ids = [m.id(r) for r in rows]
if not rows or len(rows) == 0: if not rows or len(rows) == 0:
d = error_dialog(self.gui, _('Cannot edit metadata'), d = error_dialog(self.gui, _('Cannot edit metadata'),
_('No books selected')) _('No books selected'))
@ -193,7 +193,7 @@ class EditMetadataAction(InterfaceAction):
self.gui.tags_view.recount() self.gui.tags_view.recount()
if self.gui.cover_flow: if self.gui.cover_flow:
self.gui.cover_flow.dataChanged() self.gui.cover_flow.dataChanged()
self.gui.library_view.select_rows_with_id(ids) self.gui.library_view.select_rows(ids)
# Merge books {{{ # Merge books {{{
def merge_books(self, safe_merge=False): def merge_books(self, safe_merge=False):

View File

@ -479,20 +479,35 @@ class BooksView(QTableView): # {{{
sm = self.selectionModel() sm = self.selectionModel()
sm.select(index, sm.ClearAndSelect|sm.Rows) sm.select(index, sm.ClearAndSelect|sm.Rows)
def select_rows_with_id(self, ids): def select_rows(self, identifiers, using_ids=True, change_current=True,
scroll=True):
''' '''
Loop through the visible rows, selecting any that have db_id in list ids Select rows identified by identifiers. identifiers can be a set of ids,
row numbers or QModelIndexes.
''' '''
ids = set(ids)
selmode = self.selectionMode() selmode = self.selectionMode()
self.setSelectionMode(QAbstractItemView.MultiSelection) self.setSelectionMode(QAbstractItemView.MultiSelection)
self.clearSelection() try:
db = self.model().db rows = set([x.row() if hasattr(x, 'row') else x for x in
loc = db.FIELD_MAP['id'] identifiers])
for i in range(0, len(db.data)): if using_ids:
if db.get_property(i, index_is_id=False, loc=loc) in ids: rows = set([])
self.selectRow(i) identifiers = set(identifiers)
self.setSelectionMode(selmode) m = self.model()
for row in range(m.rowCount(QModelIndex())):
if m.id(row) in identifiers:
rows.add(row)
if rows:
row = list(sorted(rows))[0]
if change_current:
self.set_current_row(row, select=False)
if scroll:
self.scroll_to_row(row)
self.clearSelection()
for r in rows:
self.selectRow(r)
finally:
self.setSelectionMode(selmode)
def close(self): def close(self):
self._model.close() self._model.close()

View File

@ -56,7 +56,7 @@ class ContentServer(object):
def sort(self, items, field, order): def sort(self, items, field, order):
field = self.db.data.sanitize_sort_field_name(field) field = self.db.data.sanitize_sort_field_name(field)
if field not in ('title', 'authors', 'rating', 'timestamp', 'tags', 'size', 'series'): if field not in self.db.field_metadata.field_keys():
raise cherrypy.HTTPError(400, '%s is not a valid sort field'%field) raise cherrypy.HTTPError(400, '%s is not a valid sort field'%field)
keyg = CSSortKeyGenerator([(field, order)], self.db.field_metadata) keyg = CSSortKeyGenerator([(field, order)], self.db.field_metadata)
items.sort(key=keyg, reverse=not order) items.sort(key=keyg, reverse=not order)