%PDF- %PDF-
| Direktori : /usr/lib/calibre/calibre/gui2/store/search/ |
| Current File : //usr/lib/calibre/calibre/gui2/store/search/results_view.py |
__license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en'
from functools import partial
from qt.core import (
pyqtSignal, QMenu, QTreeView, QStyledItemDelegate, Qt, QIcon)
from calibre import fit_image
from calibre.gui2 import empty_index
from calibre.gui2.metadata.single_download import RichTextDelegate
from calibre.gui2.store.search.models import Matches
class ImageDelegate(QStyledItemDelegate):
def paint(self, painter, option, index):
QStyledItemDelegate.paint(self, painter, option, empty_index)
img = index.data(Qt.ItemDataRole.DecorationRole)
if img:
h = option.rect.height() - 4
w = option.rect.width()
if isinstance(img, QIcon):
img = img.pixmap(h - 4, h - 4)
dpr = img.devicePixelRatio()
else:
dpr = img.devicePixelRatio()
scaled, nw, nh = fit_image(img.width(), img.height(), w, h)
if scaled:
img = img.scaled(int(nw*dpr), int(nh*dpr), Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation)
iw, ih = int(img.width()/dpr), int(img.height()/dpr)
dx, dy = (option.rect.width() - iw) // 2, (option.rect.height() - ih) // 2
painter.drawPixmap(option.rect.adjusted(dx, dy, -dx, -dy), img)
class ResultsView(QTreeView):
download_requested = pyqtSignal(object)
open_requested = pyqtSignal(object)
def __init__(self, *args):
QTreeView.__init__(self,*args)
self._model = Matches()
self.setModel(self._model)
self.rt_delegate = RichTextDelegate(self)
self.img_delegate = ImageDelegate(self)
for i in self._model.HTML_COLS:
self.setItemDelegateForColumn(i, self.rt_delegate)
for i in self._model.IMG_COLS:
self.setItemDelegateForColumn(i, self.img_delegate)
def contextMenuEvent(self, event):
index = self.indexAt(event.pos())
if not index.isValid():
return
result = self.model().get_result(index)
menu = QMenu(self)
da = menu.addAction(_('Download...'), partial(self.download_requested.emit, result))
if not result.downloads:
da.setEnabled(False)
menu.addSeparator()
menu.addAction(_('Goto in store...'), partial(self.open_requested.emit, result))
menu.exec(event.globalPos())