mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add a tweak to control how author names are displayed in the Tag Browser
This commit is contained in:
commit
ea03a4c6f6
@ -41,6 +41,20 @@ series_index_auto_increment = 'next'
|
||||
# selecting 'manage authors', and pressing 'Recalculate all author sort values'.
|
||||
author_sort_copy_method = 'invert'
|
||||
|
||||
# Set which author field to display in the tags pane (the list of authors,
|
||||
# series, publishers etc on the left hand side). The choices are author and
|
||||
# author_sort. This tweak affects only the tags pane, and only what is displayed
|
||||
# under the authors category. Please note that if you set this to author_sort,
|
||||
# it is very possible to see duplicate names in the list becasue although it is
|
||||
# guaranteed that author names are unique, there is no such guarantee for
|
||||
# author_sort values. Showing duplicates won't break anything, but it could
|
||||
# lead to some confusion. When using 'author_sort', the tooltip will show the
|
||||
# author's name.
|
||||
# Examples:
|
||||
# tags_pane_use_field_for_author_name = 'author'
|
||||
# tags_pane_use_field_for_author_name = 'author_sort'
|
||||
tags_pane_use_field_for_author_name = 'author'
|
||||
|
||||
|
||||
# Set whether boolean custom columns are two- or three-valued.
|
||||
# Two-values for true booleans
|
||||
|
@ -18,6 +18,7 @@ from PyQt4.Qt import Qt, QTreeView, QApplication, pyqtSignal, \
|
||||
from calibre.ebooks.metadata import title_sort
|
||||
from calibre.gui2 import config, NONE
|
||||
from calibre.library.field_metadata import TagsIcons, category_icon_map
|
||||
from calibre.utils.config import tweaks
|
||||
from calibre.utils.icu import sort_key
|
||||
from calibre.utils.search_query_parser import saved_searches
|
||||
from calibre.gui2 import error_dialog
|
||||
@ -409,17 +410,31 @@ class TagTreeItem(object): # {{{
|
||||
return NONE
|
||||
|
||||
def tag_data(self, role):
|
||||
if role == Qt.DisplayRole:
|
||||
if self.tag.count == 0:
|
||||
return QVariant('%s'%(self.tag.name))
|
||||
tag = self.tag
|
||||
if tag.category == 'authors' and \
|
||||
tweaks['tags_pane_use_field_for_author_name'] == 'author_sort':
|
||||
name = tag.sort
|
||||
tt_author = True
|
||||
else:
|
||||
return QVariant('[%d] %s'%(self.tag.count, self.tag.name))
|
||||
name = tag.name
|
||||
tt_author = False
|
||||
if role == Qt.DisplayRole:
|
||||
if tag.count == 0:
|
||||
return QVariant('%s'%(name))
|
||||
else:
|
||||
return QVariant('[%d] %s'%(tag.count, name))
|
||||
if role == Qt.EditRole:
|
||||
return QVariant(self.tag.name)
|
||||
return QVariant(tag.name)
|
||||
if role == Qt.DecorationRole:
|
||||
return self.icon_state_map[self.tag.state]
|
||||
if role == Qt.ToolTipRole and self.tag.tooltip is not None:
|
||||
return QVariant(self.tag.tooltip)
|
||||
return self.icon_state_map[tag.state]
|
||||
if role == Qt.ToolTipRole:
|
||||
if tt_author:
|
||||
if tag.tooltip is not None:
|
||||
return QVariant('(%s) %s'%(tag.name, tag.tooltip))
|
||||
else:
|
||||
return QVariant(tag.name)
|
||||
if tag.tooltip is not None:
|
||||
return QVariant(tag.tooltip)
|
||||
return NONE
|
||||
|
||||
def toggle(self):
|
||||
|
@ -1128,6 +1128,10 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
||||
for l in list:
|
||||
(id, val, sort_val) = (l[0], l[1], l[2])
|
||||
tids[category][val] = (id, sort_val)
|
||||
elif cat['datatype'] == 'rating':
|
||||
for l in list:
|
||||
(id, val) = (l[0], l[1])
|
||||
tids[category][val] = (id, '{0:05.2f}'.format(val))
|
||||
else:
|
||||
for l in list:
|
||||
(id, val) = (l[0], l[1])
|
||||
@ -1256,12 +1260,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
||||
|
||||
# sort the list
|
||||
if sort == 'name':
|
||||
def get_sort_key(x):
|
||||
sk = x.s
|
||||
if isinstance(sk, unicode):
|
||||
sk = sort_key(sk)
|
||||
return sk
|
||||
kf = get_sort_key
|
||||
kf = lambda x :sort_key(x.s)
|
||||
reverse=False
|
||||
elif sort == 'popularity':
|
||||
kf = lambda x: x.c
|
||||
|
@ -373,18 +373,13 @@ class BrowseServer(object):
|
||||
script='toplevel();', main=main)
|
||||
|
||||
def browse_sort_categories(self, items, sort):
|
||||
def keyg(x):
|
||||
x = getattr(x, 'sort', x.name)
|
||||
if isinstance(x, unicode):
|
||||
return sort_key(x)
|
||||
return x
|
||||
|
||||
if sort not in ('rating', 'name', 'popularity'):
|
||||
sort = 'name'
|
||||
items.sort(key=lambda x: sort_key(getattr(x, 'sort', x.name)))
|
||||
if sort == 'popularity':
|
||||
items.sort(key=operator.attrgetter('count'), reverse=True)
|
||||
elif sort == 'rating':
|
||||
items.sort(key=operator.attrgetter('avg_rating'), reverse=True)
|
||||
else:
|
||||
items.sort(key=keyg)
|
||||
return sort
|
||||
|
||||
def browse_category(self, category, sort):
|
||||
|
Loading…
x
Reference in New Issue
Block a user