mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
Changes to manage ... dialogs:
1) Add a counts column to the manage authors dialog. 2) Add tooltips to the manage ... dialogs
This commit is contained in:
parent
b938f2500f
commit
8e9b1812fb
@ -57,10 +57,33 @@ class TableItem(QTableWidgetItem):
|
|||||||
return self.sort_key < other.sort_key
|
return self.sort_key < other.sort_key
|
||||||
|
|
||||||
|
|
||||||
|
class CountTableItem(QTableWidgetItem):
|
||||||
|
|
||||||
|
def __init__(self, val):
|
||||||
|
QTableWidgetItem.__init__(self, str(val))
|
||||||
|
self.val = val
|
||||||
|
self.setTextAlignment(Qt.AlignmentFlag.AlignRight)
|
||||||
|
self.setFlags(Qt.ItemFlag.ItemIsEnabled)
|
||||||
|
|
||||||
|
def setText(self, val):
|
||||||
|
self.val = val
|
||||||
|
QTableWidgetItem.setText(self, str(val))
|
||||||
|
|
||||||
|
def set_sort_key(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __ge__(self, other):
|
||||||
|
return self.val >= other.val
|
||||||
|
|
||||||
|
def __lt__(self, other):
|
||||||
|
return self.val < other.val
|
||||||
|
|
||||||
|
|
||||||
AUTHOR_COLUMN = 0
|
AUTHOR_COLUMN = 0
|
||||||
AUTHOR_SORT_COLUMN = 1
|
AUTHOR_SORT_COLUMN = 1
|
||||||
LINK_COLUMN = 2
|
COUNTS_COLUMN = 2
|
||||||
NOTES_COLUMN = 3
|
LINK_COLUMN = 3
|
||||||
|
NOTES_COLUMN = 4
|
||||||
|
|
||||||
|
|
||||||
class EditColumnDelegate(QStyledItemDelegate):
|
class EditColumnDelegate(QStyledItemDelegate):
|
||||||
@ -83,7 +106,8 @@ class EditColumnDelegate(QStyledItemDelegate):
|
|||||||
if index.column() == NOTES_COLUMN:
|
if index.column() == NOTES_COLUMN:
|
||||||
self.notes_utilities.edit_note(self.table.itemFromIndex(index))
|
self.notes_utilities.edit_note(self.table.itemFromIndex(index))
|
||||||
return None
|
return None
|
||||||
|
if index.column() == COUNTS_COLUMN:
|
||||||
|
return None
|
||||||
from calibre.gui2.widgets import EnLineEdit
|
from calibre.gui2.widgets import EnLineEdit
|
||||||
editor = EnLineEdit(parent)
|
editor = EnLineEdit(parent)
|
||||||
editor.setClearButtonEnabled(True)
|
editor.setClearButtonEnabled(True)
|
||||||
@ -193,13 +217,14 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
self.original_authors = {}
|
self.original_authors = {}
|
||||||
auts = db.new_api.author_data()
|
auts = db.new_api.author_data()
|
||||||
self.completion_data = []
|
self.completion_data = []
|
||||||
|
counts = db.new_api.get_usage_count_by_id('authors')
|
||||||
for id_, v in auts.items():
|
for id_, v in auts.items():
|
||||||
name = v['name']
|
name = v['name']
|
||||||
name = name.replace('|', ',')
|
name = name.replace('|', ',')
|
||||||
self.completion_data.append(name)
|
self.completion_data.append(name)
|
||||||
self.authors[id_] = {'name': name, 'sort': v['sort'], 'link': v['link']}
|
vals = {'name': name, 'sort': v['sort'], 'link': v['link'], 'count':counts[id_]}
|
||||||
self.original_authors[id_] = {'name': name, 'sort': v['sort'],
|
self.authors[id_] = vals
|
||||||
'link': v['link']}
|
self.original_authors[id_] = vals.copy()
|
||||||
|
|
||||||
if prefs['use_primary_find_in_search']:
|
if prefs['use_primary_find_in_search']:
|
||||||
self.string_contains = primary_contains
|
self.string_contains = primary_contains
|
||||||
@ -260,7 +285,7 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
|
|
||||||
self.table.blockSignals(True)
|
self.table.blockSignals(True)
|
||||||
self.table.clear()
|
self.table.clear()
|
||||||
self.table.setColumnCount(4)
|
self.table.setColumnCount(5)
|
||||||
|
|
||||||
self.table.setRowCount(len(auts_to_show))
|
self.table.setRowCount(len(auts_to_show))
|
||||||
row = 0
|
row = 0
|
||||||
@ -269,19 +294,21 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
for id_, v in self.authors.items():
|
for id_, v in self.authors.items():
|
||||||
if id_ not in auts_to_show:
|
if id_ not in auts_to_show:
|
||||||
continue
|
continue
|
||||||
name, sort, link = (v['name'], v['sort'], v['link'])
|
name, sort, link, count = (v['name'], v['sort'], v['link'], v['count'])
|
||||||
name = name.replace('|', ',')
|
name = name.replace('|', ',')
|
||||||
|
|
||||||
name_item = TableItem(name)
|
name_item = TableItem(name)
|
||||||
name_item.setData(Qt.ItemDataRole.UserRole, id_)
|
name_item.setData(Qt.ItemDataRole.UserRole, id_)
|
||||||
sort_item = TableItem(sort)
|
sort_item = TableItem(sort)
|
||||||
link_item = TableItem(link)
|
link_item = TableItem(link)
|
||||||
|
count_item = CountTableItem(count)
|
||||||
|
|
||||||
self.table.setItem(row, AUTHOR_COLUMN, name_item)
|
self.table.setItem(row, AUTHOR_COLUMN, name_item)
|
||||||
self.table.setItem(row, AUTHOR_SORT_COLUMN, sort_item)
|
self.table.setItem(row, AUTHOR_SORT_COLUMN, sort_item)
|
||||||
self.table.setItem(row, LINK_COLUMN, link_item)
|
self.table.setItem(row, LINK_COLUMN, link_item)
|
||||||
note_item = NotesTableWidgetItem()
|
note_item = NotesTableWidgetItem()
|
||||||
self.table.setItem(row, NOTES_COLUMN, note_item)
|
self.table.setItem(row, NOTES_COLUMN, note_item)
|
||||||
|
self.table.setItem(row, COUNTS_COLUMN, count_item)
|
||||||
|
|
||||||
self.set_icon(name_item, id_)
|
self.set_icon(name_item, id_)
|
||||||
self.set_icon(sort_item, id_)
|
self.set_icon(sort_item, id_)
|
||||||
@ -289,7 +316,17 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
self.notes_utilities.set_icon(note_item, id_, id_ in all_items_that_have_notes)
|
self.notes_utilities.set_icon(note_item, id_, id_ in all_items_that_have_notes)
|
||||||
row += 1
|
row += 1
|
||||||
|
|
||||||
self.table.setHorizontalHeaderLabels([_('Author'), _('Author sort'), _('Link'), _('Notes')])
|
headers = { # this depends on the dict being ordered, which is true from python 3.7
|
||||||
|
_('Author'): _('Name of the author'),
|
||||||
|
_('Author sort'): _('Value used to sort this author'),
|
||||||
|
_('Count'): _('Count of books with this author'),
|
||||||
|
_('Link'): _('Link (URL) for this author'),
|
||||||
|
_('Notes'): _('Whether this author has a note attached. The icon changes if the note was created or edited'),
|
||||||
|
}
|
||||||
|
self.table.setHorizontalHeaderLabels(headers.keys())
|
||||||
|
for i,tt in enumerate(headers.values()):
|
||||||
|
header_item = self.table.horizontalHeaderItem(i)
|
||||||
|
header_item.setToolTip(tt)
|
||||||
|
|
||||||
if self.last_sorted_by == 'sort':
|
if self.last_sorted_by == 'sort':
|
||||||
self.author_sort_order = 1 - self.author_sort_order
|
self.author_sort_order = 1 - self.author_sort_order
|
||||||
@ -371,7 +408,7 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
self.save_state()
|
self.save_state()
|
||||||
|
|
||||||
def get_column_name(self, column):
|
def get_column_name(self, column):
|
||||||
return ('name', 'sort', 'link', 'notes')[column]
|
return ('name', 'sort', 'count', 'link', 'notes')[column]
|
||||||
|
|
||||||
def item_is_modified(self, item, id_):
|
def item_is_modified(self, item, id_):
|
||||||
sub = self.get_column_name(item.column())
|
sub = self.get_column_name(item.column())
|
||||||
@ -381,7 +418,7 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
|
|
||||||
def show_context_menu(self, point):
|
def show_context_menu(self, point):
|
||||||
self.context_item = self.table.itemAt(point)
|
self.context_item = self.table.itemAt(point)
|
||||||
if self.context_item is None:
|
if self.context_item is None or self.context_item.column() == COUNTS_COLUMN:
|
||||||
return
|
return
|
||||||
case_menu = QMenu(_('Change case'))
|
case_menu = QMenu(_('Change case'))
|
||||||
case_menu.setIcon(QIcon.cached_icon('font_size_larger.png'))
|
case_menu.setIcon(QIcon.cached_icon('font_size_larger.png'))
|
||||||
|
@ -730,6 +730,13 @@ class TagListEditor(QDialog, Ui_TagListEditor):
|
|||||||
tags = self.ordered_tags
|
tags = self.ordered_tags
|
||||||
|
|
||||||
select_item = None
|
select_item = None
|
||||||
|
tooltips = ( # must be in the same order as the columns in the table
|
||||||
|
_('Name of the item'),
|
||||||
|
_('Count of books with this item'),
|
||||||
|
_('Value of the item before it was edited'),
|
||||||
|
_('The link (URL) associated with this item'),
|
||||||
|
_('Whether the item has a note. The icon changes if the note was created or edited')
|
||||||
|
)
|
||||||
with block_signals(self.table):
|
with block_signals(self.table):
|
||||||
self.name_col = QTableWidgetItem(self.category_name)
|
self.name_col = QTableWidgetItem(self.category_name)
|
||||||
self.table.setHorizontalHeaderItem(VALUE_COLUMN, self.name_col)
|
self.table.setHorizontalHeaderItem(VALUE_COLUMN, self.name_col)
|
||||||
@ -742,6 +749,9 @@ class TagListEditor(QDialog, Ui_TagListEditor):
|
|||||||
if self.supports_notes:
|
if self.supports_notes:
|
||||||
self.notes_col = QTableWidgetItem(_('Notes'))
|
self.notes_col = QTableWidgetItem(_('Notes'))
|
||||||
self.table.setHorizontalHeaderItem(4, self.notes_col)
|
self.table.setHorizontalHeaderItem(4, self.notes_col)
|
||||||
|
for i,tt in enumerate(tooltips):
|
||||||
|
header_item = self.table.horizontalHeaderItem(i)
|
||||||
|
header_item.setToolTip(tt)
|
||||||
|
|
||||||
self.table.setRowCount(len(tags))
|
self.table.setRowCount(len(tags))
|
||||||
if self.supports_notes:
|
if self.supports_notes:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user