mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 10:44:09 -04:00
Fix partitioning problems in tag browser with fields that have no name, such as identifiers and formats
This commit is contained in:
commit
f90809eaf1
@ -418,21 +418,24 @@ class TagsModel(QAbstractItemModel): # {{{
|
|||||||
chardict[c][1] = idx
|
chardict[c][1] = idx
|
||||||
|
|
||||||
# sort the ranges to facilitate detecting overlap
|
# sort the ranges to facilitate detecting overlap
|
||||||
ranges = sorted([(v[0], v[1], c) for c,v in chardict.items()])
|
if len(chardict) == 1 and ' ' in chardict:
|
||||||
|
# The category could not be partitioned.
|
||||||
# Create a list of 'first letters' to use for each item in
|
collapse_model = 'disable'
|
||||||
# the category. The list is generated using the ranges. Overlaps
|
else:
|
||||||
# are filled with the character that first occurs.
|
ranges = sorted([(v[0], v[1], c) for c,v in chardict.items()])
|
||||||
cl_list = list(repeat(None, len(data[key])))
|
# Create a list of 'first letters' to use for each item in
|
||||||
for t in ranges:
|
# the category. The list is generated using the ranges. Overlaps
|
||||||
start = t[0]
|
# are filled with the character that first occurs.
|
||||||
c = t[2]
|
cl_list = list(repeat(None, len(data[key])))
|
||||||
if cl_list[start] is None:
|
for t in ranges:
|
||||||
nc = c
|
start = t[0]
|
||||||
else:
|
c = t[2]
|
||||||
nc = cl_list[start]
|
if cl_list[start] is None:
|
||||||
for i in range(start, t[1]+1):
|
nc = c
|
||||||
cl_list[i] = nc
|
else:
|
||||||
|
nc = cl_list[start]
|
||||||
|
for i in range(start, t[1]+1):
|
||||||
|
cl_list[i] = nc
|
||||||
|
|
||||||
for idx,tag in enumerate(data[key]):
|
for idx,tag in enumerate(data[key]):
|
||||||
if clear_rating:
|
if clear_rating:
|
||||||
@ -448,13 +451,19 @@ class TagsModel(QAbstractItemModel): # {{{
|
|||||||
else:
|
else:
|
||||||
d['last'] = data[key][cat_len-1]
|
d['last'] = data[key][cat_len-1]
|
||||||
name = eval_formatter.safe_format(collapse_template,
|
name = eval_formatter.safe_format(collapse_template,
|
||||||
d, 'TAG_VIEW', None)
|
d, '##TAG_VIEW##', None)
|
||||||
sub_cat = self.create_node(parent=category, data = name,
|
if name.startswith('##TAG_VIEW##'):
|
||||||
|
# Formatter threw an exception. Don't create subnode
|
||||||
|
node_parent = category
|
||||||
|
else:
|
||||||
|
sub_cat = self.create_node(parent=category, data = name,
|
||||||
tooltip = None, temporary=True,
|
tooltip = None, temporary=True,
|
||||||
category_icon = category_node.icon,
|
category_icon = category_node.icon,
|
||||||
category_key=category_node.category_key,
|
category_key=category_node.category_key,
|
||||||
icon_map=self.icon_state_map)
|
icon_map=self.icon_state_map)
|
||||||
sub_cat.tag.is_searchable = False
|
sub_cat.tag.is_searchable = False
|
||||||
|
sub_cat.is_gst = is_gst
|
||||||
|
node_parent = sub_cat
|
||||||
else: # by 'first letter'
|
else: # by 'first letter'
|
||||||
cl = cl_list[idx]
|
cl = cl_list[idx]
|
||||||
if cl != collapse_letter:
|
if cl != collapse_letter:
|
||||||
@ -465,8 +474,8 @@ class TagsModel(QAbstractItemModel): # {{{
|
|||||||
tooltip = None, temporary=True,
|
tooltip = None, temporary=True,
|
||||||
category_key=category_node.category_key,
|
category_key=category_node.category_key,
|
||||||
icon_map=self.icon_state_map)
|
icon_map=self.icon_state_map)
|
||||||
sub_cat.is_gst = is_gst
|
sub_cat.is_gst = is_gst
|
||||||
node_parent = sub_cat
|
node_parent = sub_cat
|
||||||
else:
|
else:
|
||||||
node_parent = category
|
node_parent = category
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user