Misc cleanups

This commit is contained in:
Charles Haley 2010-05-26 13:52:13 +01:00
parent fb13f2e7f4
commit 149f979409
6 changed files with 47 additions and 37 deletions

View File

@ -49,7 +49,7 @@ class TagCategories(QDialog, Ui_TagCategories):
cc_map = self.db.custom_column_label_map cc_map = self.db.custom_column_label_map
for cc in cc_map: for cc in cc_map:
if cc_map[cc]['datatype'] == 'text': if cc_map[cc]['datatype'] == 'text':
self.category_labels.append(cc) self.category_labels.append(db.tag_browser_categories.get_search_label(cc))
category_icons.append(cc_icon) category_icons.append(cc_icon)
category_values.append(lambda col=cc: self.db.all_custom(label=col)) category_values.append(lambda col=cc: self.db.all_custom(label=col))
category_names.append(cc_map[cc]['name']) category_names.append(cc_map[cc]['name'])

View File

@ -632,6 +632,8 @@ class BooksModel(QAbstractTableModel): # {{{
return None return None
if role == Qt.ToolTipRole: if role == Qt.ToolTipRole:
ht = self.column_map[section] ht = self.column_map[section]
if self.is_custom_column(self.column_map[section]):
ht = self.db.tag_browser_categories.custom_field_prefix + ht
if ht == 'timestamp': # change help text because users know this field as 'date' if ht == 'timestamp': # change help text because users know this field as 'date'
ht = 'date' ht = 'date'
return QVariant(_('The lookup/search name is "{0}"').format(ht)) return QVariant(_('The lookup/search name is "{0}"').format(ht))

View File

@ -224,10 +224,14 @@ class TagsModel(QAbstractItemModel): # {{{
data = self.get_node_tree(config['sort_by_popularity']) data = self.get_node_tree(config['sort_by_popularity'])
self.root_item = TagTreeItem() self.root_item = TagTreeItem()
for i, r in enumerate(self.row_map): for i, r in enumerate(self.row_map):
if self.db.get_tag_browser_categories()[r]['kind'] != 'user':
tt = _('The lookup/search name is "{0}"').format(r)
else:
tt = ''
c = TagTreeItem(parent=self.root_item, c = TagTreeItem(parent=self.root_item,
data=self.categories[i], data=self.categories[i],
category_icon=self.category_icon_map[r], category_icon=self.category_icon_map[r],
tooltip=_('The lookup/search name is "{0}"').format(r)) tooltip=tt)
for tag in data[r]: for tag in data[r]:
TagTreeItem(parent=c, data=tag, icon_map=self.icon_state_map) TagTreeItem(parent=c, data=tag, icon_map=self.icon_state_map)

View File

@ -386,7 +386,7 @@ class ResultCache(SearchQueryParser):
for x in self.tag_browser_categories: for x in self.tag_browser_categories:
if (len(self.tag_browser_categories[x]['search_labels']) and \ if (len(self.tag_browser_categories[x]['search_labels']) and \
self.tag_browser_categories[x]['kind'] in ['standard', 'not_cat']): self.tag_browser_categories[x]['kind'] in ['standard', 'not_cat']):
MAP[x] = self.FIELD_MAP[self.tag_browser_categories.get_label(x)] MAP[x] = self.FIELD_MAP[self.tag_browser_categories.get_field_label(x)]
# add custom columns to MAP. Put the column's type into IS_CUSTOM # add custom columns to MAP. Put the column's type into IS_CUSTOM
IS_CUSTOM = [] IS_CUSTOM = []

View File

@ -670,7 +670,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
# icon_map is not None if get_categories is to store an icon and # icon_map is not None if get_categories is to store an icon and
# possibly a tooltip in the tag structure. # possibly a tooltip in the tag structure.
icon, tooltip = None, '' icon, tooltip = None, ''
label = tb_cats.get_label(category) label = tb_cats.get_field_label(category)
if icon_map: if icon_map:
if cat['kind'] == 'standard': if cat['kind'] == 'standard':
if category in icon_map: if category in icon_map:
@ -769,7 +769,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
for srch in saved_searches.names(): for srch in saved_searches.names():
items.append(Tag(srch, tooltip=saved_searches.lookup(srch), icon=icon)) items.append(Tag(srch, tooltip=saved_searches.lookup(srch), icon=icon))
if len(items): if len(items):
tb_cats.add_user_category(field_name='search', name=_('Searches')) tb_cats.add_search_category(field_name='search', name=_('Searches'))
if icon_map is not None: if icon_map is not None:
icon_map['search'] = icon_map['search'] icon_map['search'] = icon_map['search']
categories['search'] = items categories['search'] = items

View File

@ -88,73 +88,77 @@ class TagsMetadata(dict, DictMixin):
] ]
def __init__(self): def __init__(self):
self.tb_cats_ = OrderedDict() self._tb_cats = OrderedDict()
for k,v in self.category_items_: for k,v in self.category_items_:
self.tb_cats_[k] = v self._tb_cats[k] = v
self._custom_fields = []
def __getattr__(self, name): self.custom_field_prefix = '#'
if name in self.tb_cats_:
return self.tb_cats_[name]
return None
# def __setattr__(self, name, val):
# dict.__setattr__(self, name, val)
def __getitem__(self, key): def __getitem__(self, key):
return self.tb_cats_[key] return self._tb_cats[key]
# def __setitem__(self, key, val): def __setitem__(self, key, val):
# print 'setitem', key, val raise AttributeError('Assigning to this object is forbidden')
# self.tb_cats_[key] = val
def __delitem__(self, key): def __delitem__(self, key):
del self.tb_cats_[key] del self._tb_cats[key]
def __iter__(self): def __iter__(self):
for key in self.tb_cats_: for key in self._tb_cats:
yield key yield key
def keys(self): def keys(self):
return self.tb_cats_.keys() return self._tb_cats.keys()
def iterkeys(self): def iterkeys(self):
for key in self.tb_cats_: for key in self._tb_cats:
yield key yield key
def iteritems(self): def iteritems(self):
for key in self.tb_cats_: for key in self._tb_cats:
yield (key, self.tb_cats_[key]) yield (key, self._tb_cats[key])
def get_label(self, key): def is_custom_field(self, label):
if 'label' not in self.tb_cats_[key]: return label.startswith(self.custom_field_prefix) or label in self._custom_fields
def get_field_label(self, key):
if 'label' not in self._tb_cats[key]:
return key return key
return self.tb_cats_[key]['label'] return self._tb_cats[key]['label']
def get_search_label(self, key):
if 'label' in self._tb_cats:
return key
if self.is_custom_field(key):
return self.custom_field_prefix+key
raise ValueError('Unknown key [%s]'%(key))
def get_custom_fields(self): def get_custom_fields(self):
return [l for l in self.tb_cats_ if self.tb_cats_[l]['kind'] == 'custom'] return [l for l in self._tb_cats if self._tb_cats[l]['kind'] == 'custom']
def add_custom_field(self, field_name, table, column, datatype, is_multiple, number, name): def add_custom_field(self, field_name, table, column, datatype, is_multiple, number, name):
fn = '#' + field_name fn = self.custom_field_prefix + field_name
if fn in self.tb_cats_: if fn in self._tb_cats:
raise ValueError('Duplicate custom field [%s]'%(field_name)) raise ValueError('Duplicate custom field [%s]'%(field_name))
self.tb_cats_[fn] = {'table':table, 'column':column, self._custom_fields.append(field_name)
self._tb_cats[fn] = {'table':table, 'column':column,
'datatype':datatype, 'is_multiple':is_multiple, 'datatype':datatype, 'is_multiple':is_multiple,
'kind':'custom', 'name':name, 'kind':'custom', 'name':name,
'search_labels':[fn],'label':field_name, 'search_labels':[fn],'label':field_name,
'colnum':number} 'colnum':number}
def add_user_category(self, field_name, name): def add_user_category(self, field_name, name):
if field_name in self.tb_cats_: if field_name in self._tb_cats:
raise ValueError('Duplicate user field [%s]'%(field_name)) raise ValueError('Duplicate user field [%s]'%(field_name))
self.tb_cats_[field_name] = {'table':None, 'column':None, self._tb_cats[field_name] = {'table':None, 'column':None,
'datatype':None, 'is_multiple':False, 'datatype':None, 'is_multiple':False,
'kind':'user', 'name':name, 'kind':'user', 'name':name,
'search_labels':[]} 'search_labels':[]}
def add_search_category(self, field_name, name): def add_search_category(self, field_name, name):
if field_name in self.tb_cats_: if field_name in self._tb_cats:
raise ValueError('Duplicate user field [%s]'%(field_name)) raise ValueError('Duplicate user field [%s]'%(field_name))
self.tb_cats_[field_name] = {'table':None, 'column':None, self._tb_cats[field_name] = {'table':None, 'column':None,
'datatype':None, 'is_multiple':False, 'datatype':None, 'is_multiple':False,
'kind':'search', 'name':name, 'kind':'search', 'name':name,
'search_labels':[]} 'search_labels':[]}
@ -184,7 +188,7 @@ class TagsMetadata(dict, DictMixin):
def get_search_labels(self): def get_search_labels(self):
s_labels = [] s_labels = []
for v in self.tb_cats_.itervalues(): for v in self._tb_cats.itervalues():
map((lambda x:s_labels.append(x)), v['search_labels']) map((lambda x:s_labels.append(x)), v['search_labels'])
for v in self.search_items: for v in self.search_items:
s_labels.append(v) s_labels.append(v)