From 24c492b1ec7889f252b0708544f1b93154a5a166 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 27 Jun 2010 19:09:47 -0600 Subject: [PATCH] Fix #6001 (Cover size looks like thumbnail after resize Edit Metadata window) --- src/calibre/gui2/convert/metadata.ui | 65 ++++++++++----------- src/calibre/gui2/dialogs/metadata_single.py | 9 +-- src/calibre/gui2/dialogs/metadata_single.ui | 24 +++----- src/calibre/gui2/widgets.py | 54 ++++++++++++++--- 4 files changed, 85 insertions(+), 67 deletions(-) diff --git a/src/calibre/gui2/convert/metadata.ui b/src/calibre/gui2/convert/metadata.ui index 5d3cc432d7..ec5a913f18 100644 --- a/src/calibre/gui2/convert/metadata.ui +++ b/src/calibre/gui2/convert/metadata.ui @@ -20,36 +20,6 @@ Book Cover - - - - - - - - - :/images/book.svg - - - true - - - Qt::AlignCenter - - - - - - - - - Use cover from &source file - - - true - - - @@ -101,6 +71,30 @@ + + + + Use cover from &source file + + + true + + + + + + + + + + 0 + 0 + + + + + + opt_prefer_metadata_cover @@ -308,11 +302,6 @@ - - ImageView - QLabel -
widgets.h
-
EnLineEdit QLineEdit @@ -328,6 +317,12 @@ QLineEdit
widgets.h
+ + ImageView + QWidget +
calibre/gui2/widgets.h
+ 1 +
title diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index 1d62ad95ec..8be3774203 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -11,7 +11,7 @@ import re import time import traceback -from PyQt4.Qt import SIGNAL, QObject, QCoreApplication, Qt, QTimer, QThread, QDate, \ +from PyQt4.Qt import SIGNAL, QObject, Qt, QTimer, QThread, QDate, \ QPixmap, QListWidgetItem, QDialog from calibre.gui2 import error_dialog, file_icon_provider, dynamic, \ @@ -25,7 +25,6 @@ from calibre.ebooks import BOOK_EXTENSIONS from calibre.ebooks.metadata import string_to_authors, \ authors_to_string, check_isbn from calibre.ebooks.metadata.library_thing import cover_from_isbn -from calibre import islinux, isfreebsd from calibre.ebooks.metadata.meta import get_metadata from calibre.utils.config import prefs, tweaks from calibre.utils.date import qt_to_dt @@ -311,7 +310,6 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): self.formats.setAcceptDrops(True) self.cover_changed = False self.cpixmap = None - self.cover.setAcceptDrops(True) self.pubdate.setMinimumDate(QDate(100,1,1)) pubdate_format = tweaks['gui_pubdate_display_format'] if pubdate_format is not None: @@ -399,11 +397,6 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): self.series.lineEdit().editingFinished.connect(self.increment_series_index) self.show() - height_of_rest = self.frameGeometry().height() - self.cover.height() - width_of_rest = self.frameGeometry().width() - self.cover.width() - ag = QCoreApplication.instance().desktop().availableGeometry(self) - self.cover.MAX_HEIGHT = ag.height()-(25 if (islinux or isfreebsd) else 0)-height_of_rest - self.cover.MAX_WIDTH = ag.width()-(25 if (islinux or isfreebsd) else 0)-width_of_rest pm = QPixmap() if cover: pm.loadFromData(cover) diff --git a/src/calibre/gui2/dialogs/metadata_single.ui b/src/calibre/gui2/dialogs/metadata_single.ui index 36375589a7..4efb48d870 100644 --- a/src/calibre/gui2/dialogs/metadata_single.ui +++ b/src/calibre/gui2/dialogs/metadata_single.ui @@ -576,22 +576,13 @@ - + 0 - 0 + 100 - - - - - :/images/book.svg - - - true - @@ -707,11 +698,6 @@ - - ImageView - QLabel -
widgets.h
-
EnLineEdit QLineEdit @@ -732,6 +718,12 @@ QListWidget
calibre/gui2/widgets.h
+ + ImageView + QWidget +
calibre/gui2/widgets.h
+ 1 +
title diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 9050c7dbd1..8857945027 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -13,7 +13,7 @@ from PyQt4.Qt import QListView, QIcon, QFont, QLabel, QListWidget, \ QRegExp, QSettings, QSize, QModelIndex, QSplitter, \ QAbstractButton, QPainter, QLineEdit, QComboBox, \ QMenu, QStringListModel, QCompleter, QStringList, \ - QTimer + QTimer, QRect from calibre.gui2 import NONE, error_dialog, pixmap_to_data, gprefs @@ -146,10 +146,15 @@ class FormatList(QListWidget): return QListWidget.keyPressEvent(self, event) -class ImageView(QLabel): +class ImageView(QWidget): - MAX_WIDTH = 600 - MAX_HEIGHT = 800 + def __init__(self, parent=None): + QWidget.__init__(self, parent) + self._pixmap = QPixmap(self) + self.setMinimumSize(QSize(150, 200)) + self.setAcceptDrops(True) + + # Drag 'n drop {{{ DROPABBLE_EXTENSIONS = IMAGE_EXTENSIONS @classmethod @@ -186,13 +191,45 @@ class ImageView(QLabel): def dragMoveEvent(self, event): event.acceptProposedAction() + # }}} def setPixmap(self, pixmap): - QLabel.setPixmap(self, pixmap) - width, height = fit_image(pixmap.width(), pixmap.height(), self.MAX_WIDTH, self.MAX_HEIGHT)[1:] - self.setMaximumWidth(width) - self.setMaximumHeight(height) + if not isinstance(pixmap, QPixmap): + raise TypeError('Must use a QPixmap') + self._pixmap = pixmap + self.updateGeometry() + self.update() + def pixmap(self): + return self._pixmap + + def sizeHint(self): + if self._pixmap.isNull(): + return self.minimumSize() + return self._pixmap.size() + + def paintEvent(self, event): + QWidget.paintEvent(self, event) + pmap = self._pixmap + if pmap.isNull(): + return + w, h = pmap.width(), pmap.height() + cw, ch = self.rect().width(), self.rect().height() + scaled, nw, nh = fit_image(w, h, cw, ch) + if scaled: + pmap = pmap.scaled(nw, nh, Qt.IgnoreAspectRatio, + Qt.SmoothTransformation) + w, h = pmap.width(), pmap.height() + x = int(abs(cw - w)/2.) + y = int(abs(ch - h)/2.) + target = QRect(x, y, w, h) + p = QPainter(self) + p.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform) + p.drawPixmap(target, pmap) + p.end() + + + # Clipboard copy/paste # {{{ def contextMenuEvent(self, ev): cm = QMenu(self) copy = cm.addAction(_('Copy Image')) @@ -215,6 +252,7 @@ class ImageView(QLabel): self.setPixmap(pmap) self.emit(SIGNAL('cover_changed(PyQt_PyObject)'), pixmap_to_data(pmap)) + # }}} class LocationModel(QAbstractListModel):