mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Allow generating a cover from metadata by right clicking the cover are in the book details panel also. Fixes #1401972 [[Enhancement] Generate Cover from Book Details](https://bugs.launchpad.net/calibre/+bug/1401972)
This commit is contained in:
parent
0f42e57132
commit
74b391f1c7
@ -19,8 +19,7 @@ from calibre.gui2.dnd import (dnd_has_image, dnd_get_image, dnd_get_files,
|
|||||||
from calibre.ebooks import BOOK_EXTENSIONS
|
from calibre.ebooks import BOOK_EXTENSIONS
|
||||||
from calibre.ebooks.metadata.book.base import (field_metadata, Metadata)
|
from calibre.ebooks.metadata.book.base import (field_metadata, Metadata)
|
||||||
from calibre.ebooks.metadata.book.render import mi_to_html
|
from calibre.ebooks.metadata.book.render import mi_to_html
|
||||||
from calibre.gui2 import (config, open_url, pixmap_to_data, gprefs,
|
from calibre.gui2 import (config, open_url, pixmap_to_data, gprefs, rating_font)
|
||||||
rating_font)
|
|
||||||
from calibre.utils.config import tweaks
|
from calibre.utils.config import tweaks
|
||||||
|
|
||||||
def render_html(mi, css, vertical, widget, all_fields=False, render_data_func=None): # {{{
|
def render_html(mi, css, vertical, widget, all_fields=False, render_data_func=None): # {{{
|
||||||
@ -208,11 +207,13 @@ class CoverView(QWidget): # {{{
|
|||||||
paste = cm.addAction(_('Paste Cover'))
|
paste = cm.addAction(_('Paste Cover'))
|
||||||
copy = cm.addAction(_('Copy Cover'))
|
copy = cm.addAction(_('Copy Cover'))
|
||||||
remove = cm.addAction(_('Remove Cover'))
|
remove = cm.addAction(_('Remove Cover'))
|
||||||
|
gc = cm.addAction(_('Generate Cover from metadata'))
|
||||||
if not QApplication.instance().clipboard().mimeData().hasImage():
|
if not QApplication.instance().clipboard().mimeData().hasImage():
|
||||||
paste.setEnabled(False)
|
paste.setEnabled(False)
|
||||||
copy.triggered.connect(self.copy_to_clipboard)
|
copy.triggered.connect(self.copy_to_clipboard)
|
||||||
paste.triggered.connect(self.paste_from_clipboard)
|
paste.triggered.connect(self.paste_from_clipboard)
|
||||||
remove.triggered.connect(self.remove_cover)
|
remove.triggered.connect(self.remove_cover)
|
||||||
|
gc.triggered.connect(self.generate_cover)
|
||||||
cm.exec_(ev.globalPos())
|
cm.exec_(ev.globalPos())
|
||||||
|
|
||||||
def copy_to_clipboard(self):
|
def copy_to_clipboard(self):
|
||||||
@ -225,6 +226,14 @@ class CoverView(QWidget): # {{{
|
|||||||
if pmap.isNull() and cb.supportsSelection():
|
if pmap.isNull() and cb.supportsSelection():
|
||||||
pmap = cb.pixmap(cb.Selection)
|
pmap = cb.pixmap(cb.Selection)
|
||||||
if not pmap.isNull():
|
if not pmap.isNull():
|
||||||
|
self.update_cover(pmap)
|
||||||
|
|
||||||
|
def update_cover(self, pmap=None, cdata=None):
|
||||||
|
if pmap is None:
|
||||||
|
pmap = QPixmap()
|
||||||
|
pmap.loadFromData(cdata)
|
||||||
|
if pmap.isNull():
|
||||||
|
return
|
||||||
self.pixmap = pmap
|
self.pixmap = pmap
|
||||||
self.do_layout()
|
self.do_layout()
|
||||||
self.update()
|
self.update()
|
||||||
@ -233,8 +242,16 @@ class CoverView(QWidget): # {{{
|
|||||||
self.animation.start()
|
self.animation.start()
|
||||||
id_ = self.data.get('id', None)
|
id_ = self.data.get('id', None)
|
||||||
if id_ is not None:
|
if id_ is not None:
|
||||||
self.cover_changed.emit(id_,
|
self.cover_changed.emit(id_, cdata or pixmap_to_data(pmap))
|
||||||
pixmap_to_data(pmap))
|
|
||||||
|
def generate_cover(self, *args):
|
||||||
|
book_id = self.data.get('id')
|
||||||
|
if book_id is not None:
|
||||||
|
from calibre.ebooks.covers import generate_cover
|
||||||
|
from calibre.gui2.ui import get_gui
|
||||||
|
mi = get_gui().current_db.new_api.get_metadata(book_id)
|
||||||
|
cdata = generate_cover(mi)
|
||||||
|
self.update_cover(cdata=cdata)
|
||||||
|
|
||||||
def remove_cover(self):
|
def remove_cover(self):
|
||||||
id_ = self.data.get('id', None)
|
id_ = self.data.get('id', None)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user