Edit metadata dialog: Add an undo option for the Trim cover button

See #1219227 (Enhancement and missing translation strings)
This commit is contained in:
Kovid Goyal 2013-09-01 12:52:26 +05:30
parent da951ddee7
commit e21957872e

View File

@ -9,11 +9,11 @@ __docformat__ = 'restructuredtext en'
import textwrap, re, os, errno, shutil import textwrap, re, os, errno, shutil
from PyQt4.Qt import (Qt, QDateTimeEdit, pyqtSignal, QMessageBox, QIcon, from PyQt4.Qt import (
QToolButton, QWidget, QLabel, QGridLayout, QApplication, Qt, QDateTimeEdit, pyqtSignal, QMessageBox, QIcon, QToolButton, QWidget,
QDoubleSpinBox, QListWidgetItem, QSize, QPixmap, QDialog, QMenu, QLabel, QGridLayout, QApplication, QDoubleSpinBox, QListWidgetItem, QSize,
QPushButton, QSpinBox, QLineEdit, QSizePolicy, QDialogButtonBox, QPixmap, QDialog, QMenu, QSpinBox, QLineEdit, QSizePolicy,
QAction, QCalendarWidget, QDate, QDateTime) QDialogButtonBox, QAction, QCalendarWidget, QDate, QDateTime)
from calibre.gui2.widgets import EnLineEdit, FormatList as _FormatList, ImageView from calibre.gui2.widgets import EnLineEdit, FormatList as _FormatList, ImageView
from calibre.utils.icu import sort_key from calibre.utils.icu import sort_key
@ -896,28 +896,34 @@ class Cover(ImageView): # {{{
self.show_size = True self.show_size = True
self.dialog = parent self.dialog = parent
self._cdata = None self._cdata = None
self.cdata_before_trim = None
self.cover_changed.connect(self.set_pixmap_from_data) self.cover_changed.connect(self.set_pixmap_from_data)
self.select_cover_button = QPushButton(QIcon(I('document_open.png')), class CB(QToolButton):
_('&Browse'), parent)
self.trim_cover_button = QPushButton(QIcon(I('trim.png')), def __init__(self, text, icon=None, action=None):
_('T&rim'), parent) QToolButton.__init__(self, parent)
self.trim_cover_button.setToolTip(_( self.setText(text)
if icon is not None:
self.setIcon(QIcon(I(icon)))
self.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
self.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
if action is not None:
self.clicked.connect(action)
self.select_cover_button = CB(_('&Browse'), 'document_open.png', self.select_cover)
self.trim_cover_button = b = CB(_('T&rim borders'), 'trim.png', self.trim_cover)
b.setToolTip(_(
'Automatically detect and remove extra space at the cover\'s edges.\n' 'Automatically detect and remove extra space at the cover\'s edges.\n'
'Pressing it repeatedly can sometimes remove stubborn borders.')) 'Pressing it repeatedly can sometimes remove stubborn borders.'))
self.remove_cover_button = QPushButton(QIcon(I('trash.png')), b.m = m = QMenu()
_('&Remove'), parent) b.setPopupMode(QToolButton.DelayedPopup)
m.addAction(QIcon(I('edit-undo.png')), _('Undo last trim'), self.undo_trim)
self.select_cover_button.clicked.connect(self.select_cover) b.setMenu(m)
self.remove_cover_button.clicked.connect(self.remove_cover) self.remove_cover_button = CB(_('&Remove'), 'trash.png', self.remove_cover)
self.trim_cover_button.clicked.connect(self.trim_cover)
self.download_cover_button = QPushButton(_('Download co&ver'), parent)
self.generate_cover_button = QPushButton(_('&Generate cover'), parent)
self.download_cover_button.clicked.connect(self.download_cover)
self.generate_cover_button.clicked.connect(self.generate_cover)
self.download_cover_button = CB(_('Download co&ver'), 'arrow-down.png', self.download_cover)
self.generate_cover_button = CB(_('&Generate cover'), 'default_cover.png', self.generate_cover)
self.buttons = [self.select_cover_button, self.remove_cover_button, self.buttons = [self.select_cover_button, self.remove_cover_button,
self.trim_cover_button, self.download_cover_button, self.trim_cover_button, self.download_cover_button,
self.generate_cover_button] self.generate_cover_button]
@ -926,6 +932,11 @@ class Cover(ImageView): # {{{
self.setSizePolicy(QSizePolicy(QSizePolicy.Preferred, self.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,
QSizePolicy.Preferred)) QSizePolicy.Preferred))
def undo_trim(self):
if self.cdata_before_trim:
self.current_val = self.cdata_before_trim
self.cdata_before_trim = None
def frame_resized(self, ev): def frame_resized(self, ev):
sz = ev.size() sz = ev.size()
self.frame_size = (sz.width()//3, sz.height()) self.frame_size = (sz.width()//3, sz.height())
@ -977,8 +988,8 @@ class Cover(ImageView): # {{{
im = Image() im = Image()
im.load(cdata) im.load(cdata)
im.trim(tweaks['cover_trim_fuzz_value']) im.trim(tweaks['cover_trim_fuzz_value'])
cdata = im.export('png') self.current_val = im.export('png')
self.current_val = cdata self.cdata_before_trim = cdata
def generate_cover(self, *args): def generate_cover(self, *args):
from calibre.ebooks import calibre_cover from calibre.ebooks import calibre_cover
@ -1014,6 +1025,7 @@ class Cover(ImageView): # {{{
def initialize(self, db, id_): def initialize(self, db, id_):
self._cdata = None self._cdata = None
self.cdata_before_trim = None
self.current_val = db.cover(id_, index_is_id=True) self.current_val = db.cover(id_, index_is_id=True)
self.original_val = self.current_val self.original_val = self.current_val
@ -1027,6 +1039,7 @@ class Cover(ImageView): # {{{
return self._cdata return self._cdata
def fset(self, cdata): def fset(self, cdata):
self._cdata = None self._cdata = None
self.cdata_before_trim = None
pm = QPixmap() pm = QPixmap()
if cdata: if cdata:
pm.loadFromData(cdata) pm.loadFromData(cdata)