diff --git a/src/calibre/gui2/book_details.py b/src/calibre/gui2/book_details.py index 44c324fa43..ab51789fb0 100644 --- a/src/calibre/gui2/book_details.py +++ b/src/calibre/gui2/book_details.py @@ -28,7 +28,7 @@ from calibre.utils.date import is_date_undefined from calibre.utils.localization import calibre_langcode_to_name from calibre.utils.config import tweaks -def render_html(mi, css, vertical, widget, all_fields=False): # {{{ +def render_html(mi, css, vertical, widget, all_fields=False): # {{{ table = render_data(mi, all_fields=all_fields, use_roman_numbers=config['use_roman_numerals_for_series_number']) @@ -158,14 +158,15 @@ def render_data(mi, use_roman_numbers=True, all_fields=False): if isdevice: durl = url if durl.startswith('mtp:::'): - durl = ':::'.join( (durl.split(':::'))[2:] ) + durl = ':::'.join((durl.split(':::'))[2:]) extra = '
%s'%( prepare_string_for_xml(durl)) link = u'%s%s' % (scheme, url, prepare_string_for_xml(path, True), pathstr, extra) ans.append((field, u'%s%s'%(name, link))) elif field == 'formats': - if isdevice: continue + if isdevice: + continue fmts = [u'%s' % (mi.id, x, x) for x in mi.formats] ans.append((field, u'%s%s'%(name, @@ -195,7 +196,7 @@ def render_data(mi, use_roman_numbers=True, all_fields=False): gprefs.get('default_author_link'), vals, '', vals) if link: link = prepare_string_for_xml(link) - authors.append(u'%s'%(link, aut)) + authors.append(u'%s'%(link, aut)) else: authors.append(aut) ans.append((field, u'%s%s'%(name, @@ -246,7 +247,7 @@ def render_data(mi, use_roman_numbers=True, all_fields=False): # }}} -class CoverView(QWidget): # {{{ +class CoverView(QWidget): # {{{ cover_changed = pyqtSignal(object, object) cover_removed = pyqtSignal(object) @@ -314,11 +315,13 @@ class CoverView(QWidget): # {{{ canvas_size = self.rect() width = self.current_pixmap_size.width() extrax = canvas_size.width() - width - if extrax < 0: extrax = 0 + if extrax < 0: + extrax = 0 x = int(extrax/2.) height = self.current_pixmap_size.height() extray = canvas_size.height() - height - if extray < 0: extray = 0 + if extray < 0: + extray = 0 y = int(extray/2.) target = QRect(x, y, width, height) p = QPainter(self) @@ -407,6 +410,7 @@ class BookInfo(QWebView): save_format = pyqtSignal(int, object) restore_format = pyqtSignal(int, object) copy_link = pyqtSignal(object) + manage_author = pyqtSignal(object) def __init__(self, vertical, parent=None): QWebView.__init__(self, parent) @@ -420,7 +424,10 @@ class BookInfo(QWebView): palette.setBrush(QPalette.Base, Qt.transparent) self.page().setPalette(palette) self.css = P('templates/book_details.css', data=True).decode('utf-8') - for x, icon in [('remove_format', 'trash.png'), ('save_format', 'save.png'), ('restore_format', 'edit-undo.png'), ('copy_link','edit-copy.png')]: + for x, icon in [ + ('remove_format', 'trash.png'), ('save_format', 'save.png'), + ('restore_format', 'edit-undo.png'), ('copy_link','edit-copy.png'), + ('manage_author', 'user_profile.png')]: ac = QAction(QIcon(I(icon)), '', self) ac.current_fmt = None ac.current_url = None @@ -448,6 +455,9 @@ class BookInfo(QWebView): def copy_link_triggerred(self): self.context_action_triggered('copy_link') + def manage_author_triggerred(self): + self.manage_author.emit(self.manage_author_action.current_fmt) + def link_activated(self, link): self._link_clicked = True if unicode(link.scheme()) in ('http', 'https'): @@ -483,14 +493,21 @@ class BookInfo(QWebView): if action is not ca: menu.removeAction(action) if not r.isNull(): - if url.startswith('http'): + if url.startswith('http') or url.startswith('file:'): + el = r.linkElement() + author = el.toPlainText() if unicode(el.attribute('calibre-data')) == u'authors' else None for a, t in [('copy', _('&Copy Link')), ]: ac = getattr(self, '%s_link_action'%a) ac.current_url = url ac.setText(t) menu.addAction(ac) - + if author is not None: + ac = self.manage_author_action + ac.current_fmt = author + ac.setText(_('Manage %s') % author) + menu.addAction(ac) + if url.startswith('format:'): parts = url.split(':') try: @@ -515,7 +532,7 @@ class BookInfo(QWebView): # }}} -class DetailsLayout(QLayout): # {{{ +class DetailsLayout(QLayout): # {{{ def __init__(self, vertical, parent): QLayout.__init__(self, parent) @@ -558,7 +575,8 @@ class DetailsLayout(QLayout): # {{{ self.do_layout(r) def cover_height(self, r): - if not self._children[0].widget().isVisible(): return 0 + if not self._children[0].widget().isVisible(): + return 0 mh = min(int(r.height()/2.), int(4/3. * r.width())+1) try: ph = self._children[0].widget().pixmap.height() @@ -569,7 +587,8 @@ class DetailsLayout(QLayout): # {{{ return mh def cover_width(self, r): - if not self._children[0].widget().isVisible(): return 0 + if not self._children[0].widget().isVisible(): + return 0 mw = 1 + int(3/4. * r.height()) try: pw = self._children[0].widget().pixmap.width() @@ -579,7 +598,6 @@ class DetailsLayout(QLayout): # {{{ mw = min(mw, pw) return mw - def do_layout(self, rect): if len(self._children) != 2: return @@ -603,7 +621,7 @@ class DetailsLayout(QLayout): # {{{ # }}} -class BookDetails(QWidget): # {{{ +class BookDetails(QWidget): # {{{ show_book_info = pyqtSignal() open_containing_folder = pyqtSignal(int) @@ -617,6 +635,7 @@ class BookDetails(QWidget): # {{{ cover_changed = pyqtSignal(object, object) cover_removed = pyqtSignal(object) view_device_book = pyqtSignal(object) + manage_author = pyqtSignal(object) # Drag 'n drop {{{ DROPABBLE_EXTENSIONS = IMAGE_EXTENSIONS+BOOK_EXTENSIONS @@ -659,7 +678,6 @@ class BookDetails(QWidget): # {{{ self.remote_file_dropped.emit(urls[0], filenames[0]) event.accept() - def dragMoveEvent(self, event): event.acceptProposedAction() @@ -683,6 +701,7 @@ class BookDetails(QWidget): # {{{ self.book_info.save_format.connect(self.save_specific_format) self.book_info.restore_format.connect(self.restore_specific_format) self.book_info.copy_link.connect(self.copy_link) + self.book_info.manage_author.connect(self.manage_author) self.setCursor(Qt.PointingHandCursor) def handle_click(self, link): @@ -701,7 +720,6 @@ class BookDetails(QWidget): # {{{ import traceback traceback.print_exc() - def mouseDoubleClickEvent(self, ev): ev.accept() self.show_book_info.emit() diff --git a/src/calibre/gui2/dialogs/edit_authors_dialog.py b/src/calibre/gui2/dialogs/edit_authors_dialog.py index fb25b526a9..d1cb1be828 100644 --- a/src/calibre/gui2/dialogs/edit_authors_dialog.py +++ b/src/calibre/gui2/dialogs/edit_authors_dialog.py @@ -71,7 +71,7 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog): self.table.setItem(row, 0, aut) self.table.setItem(row, 1, sort) self.table.setItem(row, 2, link) - if id == id_to_select: + if id_to_select in (id, author): if select_sort: select_item = sort elif select_link: diff --git a/src/calibre/gui2/init.py b/src/calibre/gui2/init.py index 581f0cb868..52ff70452b 100644 --- a/src/calibre/gui2/init.py +++ b/src/calibre/gui2/init.py @@ -305,6 +305,7 @@ class LayoutMixin(object): # {{{ type=Qt.QueuedConnection) self.book_details.view_device_book.connect( self.iactions['View'].view_device_book) + self.book_details.manage_author.connect(lambda author:self.do_author_sort_edit(self, author, select_sort=False, select_link=False)) m = self.library_view.model() if m.rowCount(None) > 0: