mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-03 19:17:02 -05: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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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_SORT_COLUMN = 1
 | 
			
		||||
LINK_COLUMN = 2
 | 
			
		||||
NOTES_COLUMN = 3
 | 
			
		||||
COUNTS_COLUMN = 2
 | 
			
		||||
LINK_COLUMN = 3
 | 
			
		||||
NOTES_COLUMN = 4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EditColumnDelegate(QStyledItemDelegate):
 | 
			
		||||
@ -83,7 +106,8 @@ class EditColumnDelegate(QStyledItemDelegate):
 | 
			
		||||
        if index.column() == NOTES_COLUMN:
 | 
			
		||||
            self.notes_utilities.edit_note(self.table.itemFromIndex(index))
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        if index.column() == COUNTS_COLUMN:
 | 
			
		||||
            return None
 | 
			
		||||
        from calibre.gui2.widgets import EnLineEdit
 | 
			
		||||
        editor = EnLineEdit(parent)
 | 
			
		||||
        editor.setClearButtonEnabled(True)
 | 
			
		||||
@ -193,13 +217,14 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
 | 
			
		||||
        self.original_authors = {}
 | 
			
		||||
        auts = db.new_api.author_data()
 | 
			
		||||
        self.completion_data = []
 | 
			
		||||
        counts = db.new_api.get_usage_count_by_id('authors')
 | 
			
		||||
        for id_, v in auts.items():
 | 
			
		||||
            name = v['name']
 | 
			
		||||
            name = name.replace('|', ',')
 | 
			
		||||
            self.completion_data.append(name)
 | 
			
		||||
            self.authors[id_] = {'name': name, 'sort': v['sort'], 'link': v['link']}
 | 
			
		||||
            self.original_authors[id_] = {'name': name, 'sort': v['sort'],
 | 
			
		||||
                                          'link': v['link']}
 | 
			
		||||
            vals = {'name': name, 'sort': v['sort'], 'link': v['link'], 'count':counts[id_]}
 | 
			
		||||
            self.authors[id_] = vals
 | 
			
		||||
            self.original_authors[id_] = vals.copy()
 | 
			
		||||
 | 
			
		||||
        if prefs['use_primary_find_in_search']:
 | 
			
		||||
            self.string_contains = primary_contains
 | 
			
		||||
@ -260,7 +285,7 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
 | 
			
		||||
 | 
			
		||||
        self.table.blockSignals(True)
 | 
			
		||||
        self.table.clear()
 | 
			
		||||
        self.table.setColumnCount(4)
 | 
			
		||||
        self.table.setColumnCount(5)
 | 
			
		||||
 | 
			
		||||
        self.table.setRowCount(len(auts_to_show))
 | 
			
		||||
        row = 0
 | 
			
		||||
@ -269,19 +294,21 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
 | 
			
		||||
        for id_, v in self.authors.items():
 | 
			
		||||
            if id_ not in auts_to_show:
 | 
			
		||||
                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_item = TableItem(name)
 | 
			
		||||
            name_item.setData(Qt.ItemDataRole.UserRole, id_)
 | 
			
		||||
            sort_item = TableItem(sort)
 | 
			
		||||
            link_item = TableItem(link)
 | 
			
		||||
            count_item = CountTableItem(count)
 | 
			
		||||
 | 
			
		||||
            self.table.setItem(row, AUTHOR_COLUMN, name_item)
 | 
			
		||||
            self.table.setItem(row, AUTHOR_SORT_COLUMN, sort_item)
 | 
			
		||||
            self.table.setItem(row, LINK_COLUMN, link_item)
 | 
			
		||||
            note_item = NotesTableWidgetItem()
 | 
			
		||||
            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(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)
 | 
			
		||||
            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':
 | 
			
		||||
            self.author_sort_order = 1 - self.author_sort_order
 | 
			
		||||
@ -371,7 +408,7 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
 | 
			
		||||
        self.save_state()
 | 
			
		||||
 | 
			
		||||
    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_):
 | 
			
		||||
        sub = self.get_column_name(item.column())
 | 
			
		||||
@ -381,7 +418,7 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
 | 
			
		||||
 | 
			
		||||
    def show_context_menu(self, 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
 | 
			
		||||
        case_menu = QMenu(_('Change case'))
 | 
			
		||||
        case_menu.setIcon(QIcon.cached_icon('font_size_larger.png'))
 | 
			
		||||
 | 
			
		||||
@ -730,6 +730,13 @@ class TagListEditor(QDialog, Ui_TagListEditor):
 | 
			
		||||
            tags = self.ordered_tags
 | 
			
		||||
 | 
			
		||||
        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):
 | 
			
		||||
            self.name_col = QTableWidgetItem(self.category_name)
 | 
			
		||||
            self.table.setHorizontalHeaderItem(VALUE_COLUMN, self.name_col)
 | 
			
		||||
@ -742,6 +749,9 @@ class TagListEditor(QDialog, Ui_TagListEditor):
 | 
			
		||||
            if self.supports_notes:
 | 
			
		||||
                self.notes_col = QTableWidgetItem(_('Notes'))
 | 
			
		||||
                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))
 | 
			
		||||
            if self.supports_notes:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user