diff --git a/src/calibre/ebooks/pdf/render/gradients.py b/src/calibre/ebooks/pdf/render/gradients.py index a9532d49ef..5878789ef5 100644 --- a/src/calibre/ebooks/pdf/render/gradients.py +++ b/src/calibre/ebooks/pdf/render/gradients.py @@ -11,8 +11,11 @@ import sys, copy from future_builtins import map from collections import namedtuple -import sip from PyQt5.Qt import QLinearGradient, QPointF +try: + from PyQt5 import sip +except ImportError: + import sip from calibre.ebooks.pdf.render.common import Name, Array, Dictionary @@ -151,4 +154,3 @@ class LinearGradientPattern(Dictionary): stops[-1][0] = base_stops[-1][0] return start, stop, tuple(Stop(s[0], s[1]) for s in stops) - diff --git a/src/calibre/gui2/actions/show_book_details.py b/src/calibre/gui2/actions/show_book_details.py index cc164bf053..4e4ceac324 100644 --- a/src/calibre/gui2/actions/show_book_details.py +++ b/src/calibre/gui2/actions/show_book_details.py @@ -6,6 +6,10 @@ __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' from PyQt5.Qt import Qt +try: + from PyQt5 import sip +except ImportError: + import sip from calibre.gui2.actions import InterfaceAction from calibre.gui2.dialogs.book_info import BookInfo @@ -45,6 +49,5 @@ class ShowBookDetailsAction(InterfaceAction): except ValueError: pass else: - import sip sip.delete(d) del d diff --git a/src/calibre/gui2/bars.py b/src/calibre/gui2/bars.py index 4acaf35b52..8b14d37bf4 100644 --- a/src/calibre/gui2/bars.py +++ b/src/calibre/gui2/bars.py @@ -8,10 +8,13 @@ __copyright__ = '2011, Kovid Goyal ' __docformat__ = 'restructuredtext en' from functools import partial -import sip from PyQt5.Qt import ( Qt, QAction, QMenu, QObject, QToolBar, QToolButton, QSize, pyqtSignal, QTimer, QPropertyAnimation, QEasingCurve, pyqtProperty, QPainter, QWidget) +try: + from PyQt5 import sip +except ImportError: + import sip from calibre.constants import isosx from calibre.gui2 import gprefs, native_menubar_defaults, config diff --git a/src/calibre/gui2/catalog/catalog_epub_mobi.py b/src/calibre/gui2/catalog/catalog_epub_mobi.py index d89909275b..ef1122cc09 100644 --- a/src/calibre/gui2/catalog/catalog_epub_mobi.py +++ b/src/calibre/gui2/catalog/catalog_epub_mobi.py @@ -21,6 +21,10 @@ from PyQt5.Qt import (Qt, QAbstractItemView, QCheckBox, QComboBox, QDoubleSpinBox, QIcon, QInputDialog, QLineEdit, QRadioButton, QSize, QSizePolicy, QTableWidget, QTableWidgetItem, QTextEdit, QToolButton, QUrl, QVBoxLayout, QWidget) +try: + from PyQt5 import sip +except ImportError: + import sip class PluginWidget(QWidget,Ui_Form): @@ -78,7 +82,7 @@ class PluginWidget(QWidget,Ui_Form): ['radio_button' for i in RadioButtonControls]) # LineEditControls - option_fields += zip(['exclude_genre'],['\[.+\]|^\+$'],['line_edit']) + option_fields += zip(['exclude_genre'],[r'\[.+\]|^\+$'],['line_edit']) # TextEditControls # option_fields += zip(['exclude_genre_results'],['excluded genres will appear here'],['text_edit']) @@ -966,7 +970,6 @@ class GenericRulesTable(QTableWidget): for i in reversed(range(child.count())): if child.itemAt(i).widget() is not None: child.itemAt(i).widget().setParent(None) - import sip sip.delete(child) for i in reversed(range(old_layout.count())): diff --git a/src/calibre/gui2/comments_editor.py b/src/calibre/gui2/comments_editor.py index 309982a51d..1d6e8097b9 100644 --- a/src/calibre/gui2/comments_editor.py +++ b/src/calibre/gui2/comments_editor.py @@ -8,7 +8,6 @@ __docformat__ = 'restructuredtext en' import re, os, json, weakref from lxml import html -import sip from PyQt5.Qt import (QApplication, QFontInfo, QSize, QWidget, QPlainTextEdit, QToolBar, QVBoxLayout, QAction, QIcon, Qt, QTabWidget, QUrl, QFormLayout, @@ -16,6 +15,10 @@ from PyQt5.Qt import (QApplication, QFontInfo, QSize, QWidget, QPlainTextEdit, QHBoxLayout, QKeySequence, QLineEdit, QDialogButtonBox, QPushButton, QCheckBox) from PyQt5.QtWebKitWidgets import QWebView, QWebPage +try: + from PyQt5 import sip +except ImportError: + import sip from calibre.ebooks.chardet import xml_to_unicode from calibre import xml_replace_entities, prepare_string_for_xml diff --git a/src/calibre/gui2/complete2.py b/src/calibre/gui2/complete2.py index d352c5d9d0..c0fb7f1cb5 100644 --- a/src/calibre/gui2/complete2.py +++ b/src/calibre/gui2/complete2.py @@ -9,11 +9,14 @@ __docformat__ = 'restructuredtext en' import weakref -import sip from PyQt5.Qt import ( QLineEdit, QAbstractListModel, Qt, pyqtSignal, QObject, QKeySequence, QApplication, QListView, QPoint, QModelIndex, QFont, QFontInfo, QStyleOptionComboBox, QStyle, QComboBox, QTimer) +try: + from PyQt5 import sip +except ImportError: + import sip from calibre.constants import isosx, get_osx_version from calibre.utils.icu import sort_key, primary_startswith, primary_contains @@ -155,8 +158,7 @@ class Completer(QListView): # {{{ if widget is None: return screen = QApplication.desktop().availableGeometry(widget) - h = (p.sizeHintForRow(0) * min(self.max_visible_items, m.rowCount()) + - 3) + 3 + h = (p.sizeHintForRow(0) * min(self.max_visible_items, m.rowCount()) + 3) + 3 hsb = p.horizontalScrollBar() if hsb and hsb.isVisible(): h += hsb.sizeHint().height() diff --git a/src/calibre/gui2/keyboard.py b/src/calibre/gui2/keyboard.py index fa63545cfb..5079cdb8ee 100644 --- a/src/calibre/gui2/keyboard.py +++ b/src/calibre/gui2/keyboard.py @@ -10,11 +10,14 @@ __docformat__ = 'restructuredtext en' from collections import OrderedDict from functools import partial -import sip from PyQt5.Qt import (QObject, QKeySequence, QAbstractItemModel, QModelIndex, Qt, QStyledItemDelegate, QTextDocument, QStyle, pyqtSignal, QFrame, QApplication, QSize, QRectF, QWidget, QTreeView, QGridLayout, QLabel, QRadioButton, QPushButton, QToolButton, QIcon) +try: + from PyQt5 import sip +except ImportError: + import sip from calibre.utils.config import JSONConfig from calibre.constants import DEBUG @@ -487,8 +490,8 @@ class Editor(QFrame): # {{{ dup_desc = self.dup_check(sequence) if dup_desc is not None: error_dialog(self, _('Already assigned'), - unicode(sequence.toString(QKeySequence.NativeText)) + ' ' + - _('already assigned to') + ' ' + dup_desc, show=True) + unicode(sequence.toString(QKeySequence.NativeText)) + ' ' + _( + 'already assigned to') + ' ' + dup_desc, show=True) self.clear_clicked(which=which) def dup_check(self, sequence): diff --git a/src/calibre/gui2/metadata/pdf_covers.py b/src/calibre/gui2/metadata/pdf_covers.py index 376dd297d9..920628259c 100644 --- a/src/calibre/gui2/metadata/pdf_covers.py +++ b/src/calibre/gui2/metadata/pdf_covers.py @@ -11,11 +11,14 @@ import sys, shutil, os from threading import Thread from glob import glob -import sip from PyQt5.Qt import ( QDialog, QApplication, QLabel, QVBoxLayout, QDialogButtonBox, Qt, pyqtSignal, QListWidget, QListWidgetItem, QSize, QPixmap, QStyledItemDelegate ) +try: + from PyQt5 import sip +except ImportError: + import sip from calibre import as_unicode from calibre.ebooks.metadata.pdf import page_images diff --git a/src/calibre/gui2/preferences/server.py b/src/calibre/gui2/preferences/server.py index e2a5e0d460..5348c61a85 100644 --- a/src/calibre/gui2/preferences/server.py +++ b/src/calibre/gui2/preferences/server.py @@ -8,13 +8,16 @@ import os import textwrap import time -import sip from PyQt5.Qt import ( QCheckBox, QComboBox, QDialog, QDialogButtonBox, QDoubleSpinBox, QFormLayout, QFrame, QHBoxLayout, QIcon, QLabel, QLineEdit, QListWidget, QPlainTextEdit, QPushButton, QScrollArea, QSize, QSizePolicy, QSpinBox, Qt, QTabWidget, QTimer, QToolButton, QUrl, QVBoxLayout, QWidget, pyqtSignal ) +try: + from PyQt5 import sip +except ImportError: + import sip from calibre import as_unicode from calibre.gui2 import ( diff --git a/src/calibre/gui2/tweak_book/file_list.py b/src/calibre/gui2/tweak_book/file_list.py index 9331de70a9..72cce2fc46 100644 --- a/src/calibre/gui2/tweak_book/file_list.py +++ b/src/calibre/gui2/tweak_book/file_list.py @@ -11,13 +11,16 @@ from binascii import hexlify from collections import Counter, OrderedDict, defaultdict from functools import partial -import sip from PyQt5.Qt import ( QCheckBox, QDialog, QDialogButtonBox, QFont, QFormLayout, QGridLayout, QIcon, QInputDialog, QLabel, QLineEdit, QListWidget, QListWidgetItem, QMenu, QPainter, QPixmap, QRadioButton, QScrollArea, QSize, QSpinBox, QStyle, QStyledItemDelegate, Qt, QTimer, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal ) +try: + from PyQt5 import sip +except ImportError: + import sip from calibre import human_readable, plugins, sanitize_file_name_unicode from calibre.ebooks.oeb.base import OEB_DOCS, OEB_STYLES diff --git a/src/pyj/book_list/convert_book.pyj b/src/pyj/book_list/convert_book.pyj index f92759d1ee..e88ae375ff 100644 --- a/src/pyj/book_list/convert_book.pyj +++ b/src/pyj/book_list/convert_book.pyj @@ -9,7 +9,7 @@ from ajax import ajax from book_list.book_details import report_load_failure from book_list.library_data import load_status, url_books_query from book_list.router import back, report_a_load_failure -from book_list.top_bar import create_top_bar +from book_list.top_bar import create_top_bar, set_title from book_list.ui import set_panel_handler from dom import add_extra_css, build_rule, clear from utils import conditional_timeout, parse_url_params @@ -29,6 +29,7 @@ conversion_data_load_status = {'loading':True, 'ok':False, 'error_html':None, 'c def create_convert_book(container): conversion_data.container_id = container.getAttribute('id') + set_title(_('Convert: {}').format(conversion_data.title)) # Initialization {{{ @@ -51,8 +52,10 @@ def on_data_loaded(end_type, xhr, ev): def fetch_conversion_data(book_id): + nonlocal conversion_data if conversion_data_load_status.current_fetch: conversion_data_load_status.current_fetch.abort() + conversion_data = None query = url_books_query() conversion_data_load_status.loading = True conversion_data_load_status.ok = False