1# -*- coding: utf-8 -*- 2 3 4__license__ = 'GPL 3' 5__copyright__ = '2011, John Schember <john@nachtimwald.com>' 6__docformat__ = 'restructuredtext en' 7 8from functools import partial 9 10from qt.core import (Qt, QTreeView, QSize, QMenu) 11 12from calibre.customize.ui import store_plugins 13from calibre.gui2.metadata.single_download import RichTextDelegate 14from calibre.gui2.store.config.chooser.models import Matches, Delegate 15 16 17class ResultsView(QTreeView): 18 19 def __init__(self, *args): 20 QTreeView.__init__(self,*args) 21 22 self._model = Matches([p for p in store_plugins()]) 23 self.setModel(self._model) 24 25 self.setIconSize(QSize(24, 24)) 26 27 self.rt_delegate = RichTextDelegate(self) 28 self.delegate = Delegate() 29 self.setItemDelegate(self.delegate) 30 31 for i in self._model.HTML_COLS: 32 self.setItemDelegateForColumn(i, self.rt_delegate) 33 34 for i in range(self._model.columnCount()): 35 self.resizeColumnToContents(i) 36 37 self.model().sort(1, Qt.SortOrder.AscendingOrder) 38 self.header().setSortIndicator(self.model().sort_col, self.model().sort_order) 39 40 def contextMenuEvent(self, event): 41 index = self.indexAt(event.pos()) 42 43 if not index.isValid(): 44 return 45 46 plugin = self.model().get_plugin(index) 47 48 menu = QMenu(self) 49 ca = menu.addAction(_('Configure...'), partial(self.configure_plugin, plugin)) 50 if not plugin.is_customizable(): 51 ca.setEnabled(False) 52 menu.exec(event.globalPos()) 53 54 def configure_plugin(self, plugin): 55 plugin.do_user_config(self) 56