Edit metadata dialog: Allow right clicking on the cover to view it in a popup window at larger size. Fixes #2091216 [[Enhancement] Open cover in Edit metadata with internal image viewer](https://bugs.launchpad.net/calibre/+bug/2091216)

This commit is contained in:
Kovid Goyal 2024-12-18 14:27:21 +05:30
parent 0177afafe6
commit f846750d48
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 19 additions and 11 deletions

View File

@ -139,6 +139,7 @@ class ImageView(QDialog):
self.avail_geom = self.screen().availableGeometry() self.avail_geom = self.screen().availableGeometry()
self.current_img = current_img self.current_img = current_img
self.current_url = current_url self.current_url = current_url
self.transformed = False
self.factor = 1.0 self.factor = 1.0
self.geom_name = geom_name self.geom_name = geom_name
self.zoom_in_action = ac = QAction(QIcon.ic('plus.png'), _('Zoom &in'), self) self.zoom_in_action = ac = QAction(QIcon.ic('plus.png'), _('Zoom &in'), self)
@ -327,18 +328,12 @@ class ImageView(QDialog):
t = QTransform() t = QTransform()
t.rotate(90) t.rotate(90)
pm = self.current_img = pm.transformed(t) pm = self.current_img = pm.transformed(t)
self.transformed = True
self.label.setPixmap(pm) self.label.setPixmap(pm)
self.label.adjustSize() self.adjust_image(self.factor)
if self.fit_image.isChecked():
self.set_to_viewport_size()
else:
self.factor = 1
self.prefs.set('image_popup_zoom_factor', self.factor)
for sb in (self.scrollarea.horizontalScrollBar(),
self.scrollarea.verticalScrollBar()):
sb.setValue(0)
def __call__(self, use_exec=False): def __call__(self, use_exec=False):
self.transformed = False
geom = self.avail_geom geom = self.avail_geom
self.label.setPixmap(self.current_img) self.label.setPixmap(self.current_img)
self.label.adjustSize() self.label.adjustSize()
@ -350,8 +345,7 @@ class ImageView(QDialog):
self.current_image_name = self.current_url self.current_image_name = self.current_url
reso = '' reso = ''
if self.current_img and not self.current_img.isNull(): if self.current_img and not self.current_img.isNull():
if self.factor != 1: self.adjust_image(self.factor)
self.adjust_image(self.factor)
reso = f'[{self.current_img.width()}x{self.current_img.height()}]' reso = f'[{self.current_img.width()}x{self.current_img.height()}]'
title = _('Image: {name} {resolution}').format(name=self.current_image_name, resolution=reso) title = _('Image: {name} {resolution}').format(name=self.current_image_name, resolution=reso)
self.setWindowTitle(title) self.setWindowTitle(title)

View File

@ -1228,6 +1228,20 @@ class Cover(ImageView): # {{{
self.setSizePolicy(QSizePolicy(QSizePolicy.Policy.Preferred, self.setSizePolicy(QSizePolicy(QSizePolicy.Policy.Preferred,
QSizePolicy.Policy.Preferred)) QSizePolicy.Policy.Preferred))
def build_context_menu(self):
m = super().build_context_menu()
m.addSeparator()
m.addAction(QIcon.ic('view-image'), _('View image in popup window'), self.view_image)
return m
def view_image(self):
from calibre.gui2.image_popup import ImageView
d = ImageView(self, self.pixmap(), 'cover.jpg')
d(use_exec=True)
if d.transformed:
from calibre.utils.img import image_to_data
self.current_val = image_to_data(d.current_img.toImage(), fmt='png')
def undo_trim(self): def undo_trim(self):
if self.cdata_before_trim: if self.cdata_before_trim:
self.current_val = self.cdata_before_trim self.current_val = self.cdata_before_trim