More QVariant porting

This commit is contained in:
Kovid Goyal 2014-04-24 14:09:49 +05:30
parent ba7206a5ff
commit e25696f16c
8 changed files with 70 additions and 69 deletions

View File

@ -54,6 +54,7 @@ def detect_qvariant():
'src/calibre/utils/serve_coffee.py': {'toString()'}, 'src/calibre/utils/serve_coffee.py': {'toString()'},
'src/calibre/gui2/job_indicator.py': {'toPoint'}, 'src/calibre/gui2/job_indicator.py': {'toPoint'},
'src/calibre/ebooks/pdf/render/engine.py': {'toRect'}, 'src/calibre/ebooks/pdf/render/engine.py': {'toRect'},
'src/calibre/gui2/wizard/send_email.py': {'NONE'},
} }
for path in all_py_files(): for path in all_py_files():
if os.path.basename(path) in { if os.path.basename(path) in {

View File

@ -8,7 +8,7 @@ __docformat__ = 'restructuredtext en'
import sys import sys
from PyQt5.Qt import (Qt, QApplication, QStyle, QIcon, QDoubleSpinBox, QStyleOptionViewItem, from PyQt5.Qt import (Qt, QApplication, QStyle, QIcon, QDoubleSpinBox, QStyleOptionViewItem,
QVariant, QSpinBox, QStyledItemDelegate, QComboBox, QTextDocument, QSize, QSpinBox, QStyledItemDelegate, QComboBox, QTextDocument, QSize,
QAbstractTextDocumentLayout, QFont, QFontInfo, QDate, QDateTimeEdit, QDateTime) QAbstractTextDocumentLayout, QFont, QFontInfo, QDate, QDateTimeEdit, QDateTime)
from calibre.gui2 import UNDEFINED_QDATETIME, error_dialog, rating_font from calibre.gui2 import UNDEFINED_QDATETIME, error_dialog, rating_font
@ -79,7 +79,7 @@ class RatingDelegate(QStyledItemDelegate): # {{{
return sb return sb
def displayText(self, value, locale): def displayText(self, value, locale):
r = value.toInt()[0] r = int(value)
if r < 0 or r > 5: if r < 0 or r > 5:
r = 0 r = 0
return u'\u2605'*r return u'\u2605'*r
@ -107,7 +107,7 @@ class DateDelegate(QStyledItemDelegate): # {{{
self.format = default_format self.format = default_format
def displayText(self, val, locale): def displayText(self, val, locale):
d = qt_to_dt(val.toDateTime()) d = qt_to_dt(val)
if is_date_undefined(d): if is_date_undefined(d):
return '' return ''
return format_date(d, self.format) return format_date(d, self.format)
@ -126,7 +126,7 @@ class PubDateDelegate(QStyledItemDelegate): # {{{
self.format = 'MMM yyyy' self.format = 'MMM yyyy'
def displayText(self, val, locale): def displayText(self, val, locale):
d = qt_to_dt(val.toDateTime()) d = qt_to_dt(val)
if is_date_undefined(d): if is_date_undefined(d):
return '' return ''
return format_date(d, self.format) return format_date(d, self.format)
@ -135,7 +135,7 @@ class PubDateDelegate(QStyledItemDelegate): # {{{
return DateTimeEdit(parent, self.format) return DateTimeEdit(parent, self.format)
def setEditorData(self, editor, index): def setEditorData(self, editor, index):
val = index.data(Qt.EditRole).toDate() val = index.data(Qt.EditRole)
if is_date_undefined(val): if is_date_undefined(val):
val = QDate(2000, 1, 1) val = QDate(2000, 1, 1)
editor.setDate(val) editor.setDate(val)
@ -166,14 +166,14 @@ class TextDelegate(QStyledItemDelegate): # {{{
return editor return editor
def setEditorData(self, editor, index): def setEditorData(self, editor, index):
ct = unicode(index.data(Qt.DisplayRole).toString()) ct = unicode(index.data(Qt.DisplayRole) or '')
editor.setText(ct) editor.setText(ct)
editor.selectAll() editor.selectAll()
def setModelData(self, editor, model, index): def setModelData(self, editor, model, index):
if isinstance(editor, EditWithComplete): if isinstance(editor, EditWithComplete):
val = editor.lineEdit().text() val = editor.lineEdit().text()
model.setData(index, QVariant(val), Qt.EditRole) model.setData(index, (val), Qt.EditRole)
else: else:
QStyledItemDelegate.setModelData(self, editor, model, index) QStyledItemDelegate.setModelData(self, editor, model, index)
@ -208,14 +208,14 @@ class CompleteDelegate(QStyledItemDelegate): # {{{
return editor return editor
def setEditorData(self, editor, index): def setEditorData(self, editor, index):
ct = unicode(index.data(Qt.DisplayRole).toString()) ct = unicode(index.data(Qt.DisplayRole) or '')
editor.setText(ct) editor.setText(ct)
editor.selectAll() editor.selectAll()
def setModelData(self, editor, model, index): def setModelData(self, editor, model, index):
if isinstance(editor, EditWithComplete): if isinstance(editor, EditWithComplete):
val = editor.lineEdit().text() val = editor.lineEdit().text()
model.setData(index, QVariant(val), Qt.EditRole) model.setData(index, (val), Qt.EditRole)
else: else:
QStyledItemDelegate.setModelData(self, editor, model, index) QStyledItemDelegate.setModelData(self, editor, model, index)
# }}} # }}}
@ -228,12 +228,12 @@ class LanguagesDelegate(QStyledItemDelegate): # {{{
return editor return editor
def setEditorData(self, editor, index): def setEditorData(self, editor, index):
ct = unicode(index.data(Qt.DisplayRole).toString()) ct = unicode(index.data(Qt.DisplayRole) or '')
editor.show_initial_value(ct) editor.show_initial_value(ct)
def setModelData(self, editor, model, index): def setModelData(self, editor, model, index):
val = ','.join(editor.lang_codes) val = ','.join(editor.lang_codes)
model.setData(index, QVariant(val), Qt.EditRole) model.setData(index, (val), Qt.EditRole)
# }}} # }}}
class CcDateDelegate(QStyledItemDelegate): # {{{ class CcDateDelegate(QStyledItemDelegate): # {{{
@ -250,7 +250,7 @@ class CcDateDelegate(QStyledItemDelegate): # {{{
self.format = format self.format = format
def displayText(self, val, locale): def displayText(self, val, locale):
d = qt_to_dt(val.toDateTime()) d = qt_to_dt(val)
if is_date_undefined(d): if is_date_undefined(d):
return '' return ''
return format_date(d, self.format) return format_date(d, self.format)
@ -271,7 +271,7 @@ class CcDateDelegate(QStyledItemDelegate): # {{{
val = editor.dateTime() val = editor.dateTime()
if is_date_undefined(val): if is_date_undefined(val):
val = None val = None
model.setData(index, QVariant(val), Qt.EditRole) model.setData(index, (val), Qt.EditRole)
# }}} # }}}
@ -291,13 +291,13 @@ class CcTextDelegate(QStyledItemDelegate): # {{{
return editor return editor
def setEditorData(self, editor, index): def setEditorData(self, editor, index):
ct = unicode(index.data(Qt.DisplayRole).toString()) ct = unicode(index.data(Qt.DisplayRole) or '')
editor.setText(ct) editor.setText(ct)
editor.selectAll() editor.selectAll()
def setModelData(self, editor, model, index): def setModelData(self, editor, model, index):
val = editor.text() val = editor.text()
model.setData(index, QVariant(val), Qt.EditRole) model.setData(index, (val), Qt.EditRole)
# }}} # }}}
class CcNumberDelegate(QStyledItemDelegate): # {{{ class CcNumberDelegate(QStyledItemDelegate): # {{{
@ -324,7 +324,7 @@ class CcNumberDelegate(QStyledItemDelegate): # {{{
val = editor.value() val = editor.value()
if val == editor.minimum(): if val == editor.minimum():
val = None val = None
model.setData(index, QVariant(val), Qt.EditRole) model.setData(index, (val), Qt.EditRole)
def setEditorData(self, editor, index): def setEditorData(self, editor, index):
m = index.model() m = index.model()
@ -353,7 +353,7 @@ class CcEnumDelegate(QStyledItemDelegate): # {{{
val = unicode(editor.currentText()) val = unicode(editor.currentText())
if not val: if not val:
val = None val = None
model.setData(index, QVariant(val), Qt.EditRole) model.setData(index, (val), Qt.EditRole)
def setEditorData(self, editor, index): def setEditorData(self, editor, index):
m = index.model() m = index.model()
@ -401,11 +401,11 @@ class CcCommentsDelegate(QStyledItemDelegate): # {{{
editor = CommentsDialog(parent, text, column_name=m.custom_columns[col]['name']) editor = CommentsDialog(parent, text, column_name=m.custom_columns[col]['name'])
d = editor.exec_() d = editor.exec_()
if d: if d:
m.setData(index, QVariant(editor.textbox.html), Qt.EditRole) m.setData(index, (editor.textbox.html), Qt.EditRole)
return None return None
def setModelData(self, editor, model, index): def setModelData(self, editor, model, index):
model.setData(index, QVariant(editor.textbox.html), Qt.EditRole) model.setData(index, (editor.textbox.html), Qt.EditRole)
# }}} # }}}
class DelegateCB(QComboBox): # {{{ class DelegateCB(QComboBox): # {{{
@ -439,7 +439,7 @@ class CcBoolDelegate(QStyledItemDelegate): # {{{
def setModelData(self, editor, model, index): def setModelData(self, editor, model, index):
val = {0:True, 1:False, 2:None}[editor.currentIndex()] val = {0:True, 1:False, 2:None}[editor.currentIndex()]
model.setData(index, QVariant(val), Qt.EditRole) model.setData(index, (val), Qt.EditRole)
def setEditorData(self, editor, index): def setEditorData(self, editor, index):
m = index.model() m = index.model()
@ -484,7 +484,7 @@ class CcTemplateDelegate(QStyledItemDelegate): # {{{
editor.textbox.setTabStopWidth(20) editor.textbox.setTabStopWidth(20)
d = editor.exec_() d = editor.exec_()
if d: if d:
m.setData(index, QVariant(editor.rule[1]), Qt.EditRole) m.setData(index, (editor.rule[1]), Qt.EditRole)
return None return None
def setModelData(self, editor, model, index): def setModelData(self, editor, model, index):
@ -495,7 +495,7 @@ class CcTemplateDelegate(QStyledItemDelegate): # {{{
error_dialog(self.parent(), _('Invalid template'), error_dialog(self.parent(), _('Invalid template'),
'<p>'+_('The template %s is invalid:')%val + '<p>'+_('The template %s is invalid:')%val +
'<br>'+str(err), show=True) '<br>'+str(err), show=True)
model.setData(index, QVariant(val), Qt.EditRole) model.setData(index, (val), Qt.EditRole)
def setEditorData(self, editor, index): def setEditorData(self, editor, index):
m = index.model() m = index.model()

View File

@ -51,7 +51,7 @@ class HeaderView(QHeaderView): # {{{
opt.orientation = self.orientation() opt.orientation = self.orientation()
opt.textAlignment = Qt.AlignHCenter | Qt.AlignVCenter opt.textAlignment = Qt.AlignHCenter | Qt.AlignVCenter
model = self.parent().model() model = self.parent().model()
opt.text = model.headerData(logical_index, opt.orientation, Qt.DisplayRole).toString() opt.text = unicode(model.headerData(logical_index, opt.orientation, Qt.DisplayRole) or '')
if self.isSortIndicatorShown() and self.sortIndicatorSection() == logical_index: if self.isSortIndicatorShown() and self.sortIndicatorSection() == logical_index:
opt.sortIndicator = QStyleOptionHeader.SortDown if self.sortIndicatorOrder() == Qt.AscendingOrder else QStyleOptionHeader.SortUp opt.sortIndicator = QStyleOptionHeader.SortDown if self.sortIndicatorOrder() == Qt.AscendingOrder else QStyleOptionHeader.SortUp
opt.text = opt.fontMetrics.elidedText(opt.text, Qt.ElideRight, rect.width() - 4) opt.text = opt.fontMetrics.elidedText(opt.text, Qt.ElideRight, rect.width() - 4)
@ -294,7 +294,7 @@ class BooksView(QTableView): # {{{
if idx > -1 and idx < len(self.column_map): if idx > -1 and idx < len(self.column_map):
col = self.column_map[idx] col = self.column_map[idx]
name = unicode(self.model().headerData(idx, Qt.Horizontal, name = unicode(self.model().headerData(idx, Qt.Horizontal,
Qt.DisplayRole).toString()) Qt.DisplayRole) or '')
self.column_header_context_menu = QMenu(self) self.column_header_context_menu = QMenu(self)
if col != 'ondevice': if col != 'ondevice':
self.column_header_context_menu.addAction(_('Hide column %s') % self.column_header_context_menu.addAction(_('Hide column %s') %
@ -352,7 +352,7 @@ class BooksView(QTableView): # {{{
for col in hidden_cols: for col in hidden_cols:
hidx = self.column_map.index(col) hidx = self.column_map.index(col)
name = unicode(self.model().headerData(hidx, Qt.Horizontal, name = unicode(self.model().headerData(hidx, Qt.Horizontal,
Qt.DisplayRole).toString()) Qt.DisplayRole) or '')
m.addAction(name, m.addAction(name,
partial(self.column_header_context_handler, partial(self.column_header_context_handler,
action='show', column=col)) action='show', column=col))

View File

@ -10,7 +10,7 @@ __docformat__ = 'restructuredtext en'
import textwrap import textwrap
from PyQt5.Qt import (QWidget, QGridLayout, QGroupBox, QListView, Qt, QSpinBox, from PyQt5.Qt import (QWidget, QGridLayout, QGroupBox, QListView, Qt, QSpinBox,
QDoubleSpinBox, QCheckBox, QLineEdit, QComboBox, QLabel, QVariant) QDoubleSpinBox, QCheckBox, QLineEdit, QComboBox, QLabel)
from calibre.gui2.preferences.metadata_sources import FieldsModel as FM from calibre.gui2.preferences.metadata_sources import FieldsModel as FM
@ -98,8 +98,8 @@ class ConfigWidget(QWidget):
elif opt.type == 'choices': elif opt.type == 'choices':
widget = QComboBox(self) widget = QComboBox(self)
for key, label in opt.choices.iteritems(): for key, label in opt.choices.iteritems():
widget.addItem(label, QVariant(key)) widget.addItem(label, (key))
idx = widget.findData(QVariant(val)) idx = widget.findData((val))
widget.setCurrentIndex(idx) widget.setCurrentIndex(idx)
widget.opt = opt widget.opt = opt
widget.setToolTip(textwrap.fill(opt.desc)) widget.setToolTip(textwrap.fill(opt.desc))
@ -127,7 +127,7 @@ class ConfigWidget(QWidget):
val = w.isChecked() val = w.isChecked()
elif isinstance(w, QComboBox): elif isinstance(w, QComboBox):
idx = w.currentIndex() idx = w.currentIndex()
val = unicode(w.itemData(idx).toString()) val = unicode(w.itemData(idx) or '')
self.plugin.prefs[w.opt.name] = val self.plugin.prefs[w.opt.name] = val

View File

@ -62,9 +62,9 @@ class PDFCovers(QDialog):
@property @property
def cover_path(self): def cover_path(self):
for item in self.covers.selectedItems(): for item in self.covers.selectedItems():
return unicode(item.data(Qt.UserRole).toString()) return unicode(item.data(Qt.UserRole) or '')
if self.covers.count() > 0: if self.covers.count() > 0:
return unicode(self.covers.item(0).data(Qt.UserRole).toString()) return unicode(self.covers.item(0).data(Qt.UserRole) or '')
def cleanup(self): def cleanup(self):
try: try:

View File

@ -20,7 +20,7 @@ from PyQt5.Qt import (
QStyledItemDelegate, QTextDocument, QRectF, QIcon, Qt, QApplication, QStyledItemDelegate, QTextDocument, QRectF, QIcon, Qt, QApplication,
QDialog, QVBoxLayout, QLabel, QDialogButtonBox, QStyle, QStackedWidget, QDialog, QVBoxLayout, QLabel, QDialogButtonBox, QStyle, QStackedWidget,
QWidget, QTableView, QGridLayout, QFontInfo, QPalette, QTimer, pyqtSignal, QWidget, QTableView, QGridLayout, QFontInfo, QPalette, QTimer, pyqtSignal,
QAbstractTableModel, QVariant, QSize, QListView, QPixmap, QModelIndex, QAbstractTableModel, QSize, QListView, QPixmap, QModelIndex, QUrl,
QAbstractListModel, QColor, QRect, QTextBrowser, QStringListModel, QMenu, QCursor) QAbstractListModel, QColor, QRect, QTextBrowser, QStringListModel, QMenu, QCursor)
from PyQt5.QtWebKitWidgets import QWebView from PyQt5.QtWebKitWidgets import QWebView
@ -30,7 +30,7 @@ from calibre.utils.logging import GUILog as Log
from calibre.ebooks.metadata.sources.identify import urls_from_identifiers from calibre.ebooks.metadata.sources.identify import urls_from_identifiers
from calibre.ebooks.metadata.book.base import Metadata from calibre.ebooks.metadata.book.base import Metadata
from calibre.ebooks.metadata.opf2 import OPF from calibre.ebooks.metadata.opf2 import OPF
from calibre.gui2 import error_dialog, NONE, rating_font, gprefs from calibre.gui2 import error_dialog, rating_font, gprefs
from calibre.utils.date import (utcnow, fromordinal, format_date, from calibre.utils.date import (utcnow, fromordinal, format_date,
UNDEFINED_DATE, as_utc) UNDEFINED_DATE, as_utc)
from calibre.library.comments import comments_to_html from calibre.library.comments import comments_to_html
@ -57,7 +57,7 @@ class RichTextDelegate(QStyledItemDelegate): # {{{
c = p.color(group, p.HighlightedText) c = p.color(group, p.HighlightedText)
c = 'rgb(%d, %d, %d)'%c.getRgb()[:3] c = 'rgb(%d, %d, %d)'%c.getRgb()[:3]
doc.setDefaultStyleSheet(' * { color: %s }'%c) doc.setDefaultStyleSheet(' * { color: %s }'%c)
doc.setHtml(index.data().toString()) doc.setHtml(index.data() or '')
return doc return doc
def sizeHint(self, option, index): def sizeHint(self, option, index):
@ -131,7 +131,7 @@ class CoverDelegate(QStyledItemDelegate): # {{{
def paint(self, painter, option, index): def paint(self, painter, option, index):
QStyledItemDelegate.paint(self, painter, option, index) QStyledItemDelegate.paint(self, painter, option, index)
style = QApplication.style() style = QApplication.style()
waiting = self.timer.isActive() and index.data(Qt.UserRole).toBool() waiting = self.timer.isActive() and bool(index.data(Qt.UserRole))
if waiting: if waiting:
rect = QRect(0, 0, self.spinner_width, self.spinner_width) rect = QRect(0, 0, self.spinner_width, self.spinner_width)
rect.moveCenter(option.rect.center()) rect.moveCenter(option.rect.center())
@ -154,7 +154,7 @@ class ResultsModel(QAbstractTableModel): # {{{
def __init__(self, results, parent=None): def __init__(self, results, parent=None):
QAbstractTableModel.__init__(self, parent) QAbstractTableModel.__init__(self, parent)
self.results = results self.results = results
self.yes_icon = QVariant(QIcon(I('ok.png'))) self.yes_icon = (QIcon(I('ok.png')))
def rowCount(self, parent=None): def rowCount(self, parent=None):
return len(self.results) return len(self.results)
@ -165,10 +165,10 @@ class ResultsModel(QAbstractTableModel): # {{{
def headerData(self, section, orientation, role): def headerData(self, section, orientation, role):
if orientation == Qt.Horizontal and role == Qt.DisplayRole: if orientation == Qt.Horizontal and role == Qt.DisplayRole:
try: try:
return QVariant(self.COLUMNS[section]) return (self.COLUMNS[section])
except: except:
return NONE return None
return NONE return None
def data_as_text(self, book, col): def data_as_text(self, book, col):
if col == 0: if col == 0:
@ -187,12 +187,12 @@ class ResultsModel(QAbstractTableModel): # {{{
try: try:
book = self.results[row] book = self.results[row]
except: except:
return NONE return None
if role == Qt.DisplayRole and col not in self.ICON_COLS: if role == Qt.DisplayRole and col not in self.ICON_COLS:
res = self.data_as_text(book, col) res = self.data_as_text(book, col)
if res: if res:
return QVariant(res) return (res)
return NONE return None
elif role == Qt.DecorationRole and col in self.ICON_COLS: elif role == Qt.DecorationRole and col in self.ICON_COLS:
if col == 3 and getattr(book, 'has_cached_cover_url', False): if col == 3 and getattr(book, 'has_cached_cover_url', False):
return self.yes_icon return self.yes_icon
@ -201,13 +201,13 @@ class ResultsModel(QAbstractTableModel): # {{{
elif role == Qt.UserRole: elif role == Qt.UserRole:
return book return book
elif role == Qt.ToolTipRole and col == 3: elif role == Qt.ToolTipRole and col == 3:
return QVariant( return (
_('The has cover indication is not fully\n' _('The has cover indication is not fully\n'
'reliable. Sometimes results marked as not\n' 'reliable. Sometimes results marked as not\n'
'having a cover will find a cover in the download\n' 'having a cover will find a cover in the download\n'
'cover stage, and vice versa.')) 'cover stage, and vice versa.'))
return NONE return None
def sort(self, col, order=Qt.AscendingOrder): def sort(self, col, order=Qt.AscendingOrder):
key = lambda x: x key = lambda x: x
@ -336,7 +336,7 @@ class Comments(QWebView): # {{{
def link_clicked(self, url): def link_clicked(self, url):
from calibre.gui2 import open_url from calibre.gui2 import open_url
if unicode(url.toString()).startswith('http://'): if unicode(url.toString(QUrl.None)).startswith('http://'):
open_url(url) open_url(url)
def turnoff_scrollbar(self, *args): def turnoff_scrollbar(self, *args):
@ -655,7 +655,7 @@ class CoversModel(QAbstractListModel): # {{{
self.plugin_map = {} self.plugin_map = {}
for i, plugin in enumerate(metadata_plugins(['cover'])): for i, plugin in enumerate(metadata_plugins(['cover'])):
self.covers.append((plugin.name+'\n'+_('Searching...'), self.covers.append((plugin.name+'\n'+_('Searching...'),
QVariant(self.blank), None, True)) (self.blank), None, True))
self.plugin_map[plugin] = [i+1] self.plugin_map[plugin] = [i+1]
if do_reset: if do_reset:
@ -663,10 +663,10 @@ class CoversModel(QAbstractListModel): # {{{
def get_item(self, src, pmap, waiting=False): def get_item(self, src, pmap, waiting=False):
sz = '%dx%d'%(pmap.width(), pmap.height()) sz = '%dx%d'%(pmap.width(), pmap.height())
text = QVariant(src + '\n' + sz) text = (src + '\n' + sz)
scaled = pmap.scaled(150, 200, Qt.IgnoreAspectRatio, scaled = pmap.scaled(150, 200, Qt.IgnoreAspectRatio,
Qt.SmoothTransformation) Qt.SmoothTransformation)
return (text, QVariant(scaled), pmap, waiting) return (text, (scaled), pmap, waiting)
def rowCount(self, parent=None): def rowCount(self, parent=None):
return len(self.covers) return len(self.covers)
@ -675,14 +675,14 @@ class CoversModel(QAbstractListModel): # {{{
try: try:
text, pmap, cover, waiting = self.covers[index.row()] text, pmap, cover, waiting = self.covers[index.row()]
except: except:
return NONE return None
if role == Qt.DecorationRole: if role == Qt.DecorationRole:
return pmap return pmap
if role == Qt.DisplayRole: if role == Qt.DisplayRole:
return text return text
if role == Qt.UserRole: if role == Qt.UserRole:
return waiting return waiting
return NONE return None
def plugin_for_index(self, index): def plugin_for_index(self, index):
row = index.row() if hasattr(index, 'row') else index row = index.row() if hasattr(index, 'row') else index
@ -821,7 +821,7 @@ class CoversView(QListView): # {{{
def show_context_menu(self, point): def show_context_menu(self, point):
idx = self.currentIndex() idx = self.currentIndex()
if idx and idx.isValid() and not idx.data(Qt.UserRole).toPyObject(): if idx and idx.isValid() and not idx.data(Qt.UserRole):
m = QMenu() m = QMenu()
m.addAction(QIcon(I('view.png')), _('View this cover at full size'), self.show_cover) m.addAction(QIcon(I('view.png')), _('View this cover at full size'), self.show_cover)
m.addAction(QIcon(I('edit-copy.png')), _('Copy this cover to clipboard'), self.copy_cover) m.addAction(QIcon(I('edit-copy.png')), _('Copy this cover to clipboard'), self.copy_cover)
@ -834,7 +834,7 @@ class CoversView(QListView): # {{{
pmap = self.model().cc pmap = self.model().cc
if pmap is not None: if pmap is not None:
from calibre.gui2.viewer.image_popup import ImageView from calibre.gui2.viewer.image_popup import ImageView
d = ImageView(self, pmap, unicode(idx.data(Qt.DisplayRole).toString()), geom_name='metadata_download_cover_popup_geom') d = ImageView(self, pmap, unicode(idx.data(Qt.DisplayRole) or ''), geom_name='metadata_download_cover_popup_geom')
d(use_exec=True) d(use_exec=True)
def copy_cover(self): def copy_cover(self):

View File

@ -29,7 +29,7 @@ class TagDelegate(QStyledItemDelegate): # {{{
self.old_look = gprefs['tag_browser_old_look'] self.old_look = gprefs['tag_browser_old_look']
def paint(self, painter, option, index): def paint(self, painter, option, index):
item = index.data(Qt.UserRole).toPyObject() item = index.data(Qt.UserRole)
QStyledItemDelegate.paint(self, painter, option, index) QStyledItemDelegate.paint(self, painter, option, index)
widget = self.parent() widget = self.parent()
style = QApplication.style() if widget is None else widget.style() style = QApplication.style() if widget is None else widget.style()
@ -246,7 +246,7 @@ class TagsView(QTreeView): # {{{
QTreeView.mouseMoveEvent(self, event) QTreeView.mouseMoveEvent(self, event)
return return
md = self._model.mimeData([dex]) md = self._model.mimeData([dex])
pixmap = dex.data(Qt.DecorationRole).toPyObject().pixmap(25, 25) pixmap = dex.data(Qt.DecorationRole).pixmap(25, 25)
drag = QDrag(self) drag = QDrag(self)
drag.setPixmap(pixmap) drag.setPixmap(pixmap)
drag.setMimeData(md) drag.setMimeData(md)
@ -408,7 +408,7 @@ class TagsView(QTreeView): # {{{
self.context_menu = QMenu(self) self.context_menu = QMenu(self)
if index.isValid(): if index.isValid():
item = index.data(Qt.UserRole).toPyObject() item = index.data(Qt.UserRole)
tag = None tag = None
if item.type == TagTreeItem.TAG: if item.type == TagTreeItem.TAG:
@ -421,7 +421,7 @@ class TagsView(QTreeView): # {{{
if not item.category_key.startswith('@'): if not item.category_key.startswith('@'):
while item.parent != self._model.root_item: while item.parent != self._model.root_item:
item = item.parent item = item.parent
category = unicode(item.name.toString()) category = unicode(item.name or '')
key = item.category_key key = item.category_key
# Verify that we are working with a field that we know something about # Verify that we are working with a field that we know something about
if key not in self.db.field_metadata: if key not in self.db.field_metadata:
@ -626,7 +626,7 @@ class TagsView(QTreeView): # {{{
if not index.isValid(): if not index.isValid():
return return
src_is_tb = event.mimeData().hasFormat('application/calibre+from_tag_browser') src_is_tb = event.mimeData().hasFormat('application/calibre+from_tag_browser')
item = index.data(Qt.UserRole).toPyObject() item = index.data(Qt.UserRole)
if item.type == TagTreeItem.ROOT: if item.type == TagTreeItem.ROOT:
return return
flags = self._model.flags(index) flags = self._model.flags(index)
@ -662,7 +662,7 @@ class TagsView(QTreeView): # {{{
self.model().clear_state() self.model().clear_state()
def is_visible(self, idx): def is_visible(self, idx):
item = idx.data(Qt.UserRole).toPyObject() item = idx.data(Qt.UserRole)
if getattr(item, 'type', None) == TagTreeItem.TAG: if getattr(item, 'type', None) == TagTreeItem.TAG:
idx = idx.parent() idx = idx.parent()
return self.isExpanded(idx) return self.isExpanded(idx)
@ -711,7 +711,7 @@ class TagsView(QTreeView): # {{{
def show_item_at_index(self, idx, box=False, def show_item_at_index(self, idx, box=False,
position=QTreeView.PositionAtCenter): position=QTreeView.PositionAtCenter):
if idx.isValid() and idx.data(Qt.UserRole).toPyObject() is not self._model.root_item: if idx.isValid() and idx.data(Qt.UserRole) is not self._model.root_item:
self.expand_parent(idx) self.expand_parent(idx)
self.setCurrentIndex(idx) self.setCurrentIndex(idx)
self.scrollTo(idx, position) self.scrollTo(idx, position)

View File

@ -12,7 +12,7 @@ from contextlib import closing
from PyQt5.Qt import (QWizard, QWizardPage, QPixmap, Qt, QAbstractListModel, from PyQt5.Qt import (QWizard, QWizardPage, QPixmap, Qt, QAbstractListModel,
QVariant, QItemSelectionModel, QObject, QTimer, pyqtSignal, QItemSelection) QItemSelectionModel, QObject, QTimer, pyqtSignal, QItemSelection)
from calibre import __appname__, patheq from calibre import __appname__, patheq
from calibre.library.move import MoveLibrary from calibre.library.move import MoveLibrary
from calibre.constants import (filesystem_encoding, iswindows, plugins, from calibre.constants import (filesystem_encoding, iswindows, plugins,
@ -26,7 +26,7 @@ from calibre.gui2.wizard.stanza_ui import Ui_WizardPage as StanzaUI
from calibre.gui2 import min_available_height, available_width from calibre.gui2 import min_available_height, available_width
from calibre.utils.config import dynamic, prefs from calibre.utils.config import dynamic, prefs
from calibre.gui2 import NONE, choose_dir, error_dialog from calibre.gui2 import choose_dir, error_dialog
from calibre.gui2.dialogs.progress import ProgressDialog from calibre.gui2.dialogs.progress import ProgressDialog
if iswindows: if iswindows:
@ -387,10 +387,10 @@ class ManufacturerModel(QAbstractListModel):
def data(self, index, role): def data(self, index, role):
if role == Qt.DisplayRole: if role == Qt.DisplayRole:
return QVariant(self.manufacturers[index.row()]) return (self.manufacturers[index.row()])
if role == Qt.UserRole: if role == Qt.UserRole:
return self.manufacturers[index.row()] return self.manufacturers[index.row()]
return NONE return None
def index_of(self, man): def index_of(self, man):
for i, x in enumerate(self.manufacturers): for i, x in enumerate(self.manufacturers):
@ -411,10 +411,10 @@ class DeviceModel(QAbstractListModel):
def data(self, index, role): def data(self, index, role):
if role == Qt.DisplayRole: if role == Qt.DisplayRole:
return QVariant(self.devices[index.row()].name) return (self.devices[index.row()].name)
if role == Qt.UserRole: if role == Qt.UserRole:
return self.devices[index.row()] return self.devices[index.row()]
return NONE return None
def index_of(self, dev): def index_of(self, dev):
for i, device in enumerate(self.devices): for i, device in enumerate(self.devices):
@ -702,19 +702,19 @@ class LibraryPage(QWizardPage, LibraryUI):
return 'English' return 'English'
return get_language(l) return get_language(l)
self.language.addItem(get_esc_lang(lang), QVariant(lang)) self.language.addItem(get_esc_lang(lang), (lang))
items = [(l, get_esc_lang(l)) for l in available_translations() items = [(l, get_esc_lang(l)) for l in available_translations()
if l != lang] if l != lang]
if lang != 'en': if lang != 'en':
items.append(('en', get_esc_lang('en'))) items.append(('en', get_esc_lang('en')))
items.sort(cmp=lambda x, y: cmp(x[1], y[1])) items.sort(cmp=lambda x, y: cmp(x[1], y[1]))
for item in items: for item in items:
self.language.addItem(item[1], QVariant(item[0])) self.language.addItem(item[1], (item[0]))
self.language.blockSignals(False) self.language.blockSignals(False)
prefs['language'] = str(self.language.itemData(self.language.currentIndex()).toString()) prefs['language'] = str(self.language.itemData(self.language.currentIndex()) or '')
def change_language(self, idx): def change_language(self, idx):
prefs['language'] = str(self.language.itemData(self.language.currentIndex()).toString()) prefs['language'] = str(self.language.itemData(self.language.currentIndex()) or '')
import __builtin__ import __builtin__
__builtin__.__dict__['_'] = lambda(x): x __builtin__.__dict__['_'] = lambda(x): x
from calibre.utils.localization import set_translators from calibre.utils.localization import set_translators