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