mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Edit metadata dialog: Add an undo option for the Trim cover button
See #1219227 (Enhancement and missing translation strings)
This commit is contained in:
parent
da951ddee7
commit
e21957872e
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user