Ejemplo n.º 1
0
 def set_results(self, results, emphasize_text):
     self.clear()
     self.delegate.emphasize_text = emphasize_text
     self.number_of_results = 0
     self.item_map = []
     book_id_map = {}
     db = current_db()
     for result in results:
         book_id = result['book_id']
         if book_id not in book_id_map:
             book_id_map[book_id] = {
                 'title': db.field_for('title', book_id),
                 'matches': []
             }
         book_id_map[book_id]['matches'].append(result)
     for book_id, entry in book_id_map.items():
         section = QTreeWidgetItem([entry['title']], 1)
         section.setFlags(Qt.ItemIsEnabled)
         section.setFont(0, self.section_font)
         self.addTopLevelItem(section)
         section.setExpanded(True)
         for result in entry['matches']:
             item = QTreeWidgetItem(section, [' '], 2)
             self.item_map.append(item)
             item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled
                           | Qt.ItemNeverHasChildren)
             item.setData(0, Qt.UserRole, result)
             item.setData(0, Qt.UserRole + 1, self.number_of_results)
             self.number_of_results += 1
     if self.item_map:
         self.setCurrentItem(self.item_map[0])
Ejemplo n.º 2
0
 def add_result(self, result):
     section_title = _('Unknown')
     section_id = -1
     toc_nodes = getattr(result, 'toc_nodes', ()) or ()
     if toc_nodes:
         section_title = toc_nodes[-1].get('title') or _('Unknown')
         section_id = toc_nodes[-1].get('id')
         if section_id is None:
             section_id = -1
     section_key = section_id
     section = self.section_map.get(section_key)
     if section is None:
         section = QTreeWidgetItem([section_title], 1)
         section.setFlags(Qt.ItemIsEnabled)
         section.setFont(0, self.section_font)
         lines = []
         for i, node in enumerate(toc_nodes):
             lines.append('\xa0\xa0' * i + '➤ ' + (node.get('title') or _('Unknown')))
         tt = ngettext('Table of Contents section:', 'Table of Contents sections:', len(lines))
         tt += '\n' + '\n'.join(lines)
         section.setToolTip(0, tt)
         self.section_map[section_key] = section
         self.addTopLevelItem(section)
         section.setExpanded(True)
     item = QTreeWidgetItem(section, [' '], 2)
     item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemNeverHasChildren)
     item.setData(0, Qt.UserRole, result)
     item.setData(0, Qt.UserRole + 1, len(self.search_results))
     item.setIcon(0, self.blank_icon)
     self.item_map[len(self.search_results)] = item
     self.search_results.append(result)
     n = self.number_of_results
     self.count_changed.emit(n)
     return n
Ejemplo n.º 3
0
 def load(self, highlights):
     s = self.style()
     icon_size = s.pixelMetric(s.PM_SmallIconSize, None, self)
     dpr = self.devicePixelRatioF()
     is_dark = is_dark_theme()
     self.clear()
     self.uuid_map = {}
     highlights = (h for h in highlights
                   if not h.get('removed') and h.get('highlighted_text'))
     section_map = defaultdict(list)
     section_tt_map = {}
     for h in self.sorted_highlights(highlights):
         tfam = h.get('toc_family_titles') or ()
         if tfam:
             tsec = tfam[0]
             lsec = tfam[-1]
         else:
             tsec = h.get('top_level_section_title')
             lsec = h.get('lowest_level_section_title')
         sec = lsec or tsec or _('Unknown')
         if len(tfam) > 1:
             lines = []
             for i, node in enumerate(tfam):
                 lines.append('\xa0\xa0' * i + '➤ ' + node)
             tt = ngettext('Table of Contents section:',
                           'Table of Contents sections:', len(lines))
             tt += '\n' + '\n'.join(lines)
             section_tt_map[sec] = tt
         section_map[sec].append(h)
     for secnum, (sec, items) in enumerate(section_map.items()):
         section = QTreeWidgetItem([sec], 1)
         section.setFlags(Qt.ItemIsEnabled)
         section.setFont(0, self.section_font)
         tt = section_tt_map.get(sec)
         if tt:
             section.setToolTip(0, tt)
         self.addTopLevelItem(section)
         section.setExpanded(True)
         for itemnum, h in enumerate(items):
             txt = h.get('highlighted_text')
             txt = txt.replace('\n', ' ')
             if len(txt) > 100:
                 txt = txt[:100] + '…'
             item = QTreeWidgetItem(section, [txt], 2)
             item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled
                           | Qt.ItemNeverHasChildren)
             item.setData(0, Qt.UserRole, h)
             try:
                 dec = decoration_for_style(self.palette(),
                                            h.get('style') or {}, icon_size,
                                            dpr, is_dark)
             except Exception:
                 import traceback
                 traceback.print_exc()
                 dec = None
             if dec is None:
                 dec = self.default_decoration
             item.setData(0, Qt.DecorationRole, dec)
             self.uuid_map[h['uuid']] = secnum, itemnum
             self.num_of_items += 1
Ejemplo n.º 4
0
 def add_result(self, result):
     section_title = _('Unknown')
     section_id = -1
     toc_nodes = getattr(result, 'toc_nodes', ()) or ()
     if toc_nodes:
         section_title = toc_nodes[-1].get('title') or _('Unknown')
         section_id = toc_nodes[-1].get('id')
         if section_id is None:
             section_id = -1
     section_key = section_id
     section = self.section_map.get(section_key)
     spine_idx = getattr(result, 'spine_idx', -1)
     if section is None:
         section = QTreeWidgetItem([section_title], 1)
         section.setFlags(Qt.ItemFlag.ItemIsEnabled)
         section.setFont(0, self.section_font)
         section.setData(0, SPINE_IDX_ROLE, spine_idx)
         lines = []
         for i, node in enumerate(toc_nodes):
             lines.append('\xa0\xa0' * i + '➤ ' +
                          (node.get('title') or _('Unknown')))
         if lines:
             tt = ngettext('Table of Contents section:',
                           'Table of Contents sections:', len(lines))
             tt += '\n' + '\n'.join(lines)
             section.setToolTip(0, tt)
         self.section_map[section_key] = section
         for s in range(self.topLevelItemCount()):
             ti = self.topLevelItem(s)
             if ti.data(0, SPINE_IDX_ROLE) > spine_idx:
                 self.insertTopLevelItem(s, section)
                 break
         else:
             self.addTopLevelItem(section)
         section.setExpanded(True)
     item = QTreeWidgetItem(section, [' '], 2)
     item.setFlags(Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled
                   | Qt.ItemFlag.ItemNeverHasChildren)
     item.setData(0, SEARCH_RESULT_ROLE, result)
     item.setData(0, RESULT_NUMBER_ROLE, len(self.search_results))
     item.setData(0, SPINE_IDX_ROLE, spine_idx)
     if isinstance(result, SearchResult):
         tt = '<p>…' + escape(result.before, False) + '<b>' + escape(
             result.text, False) + '</b>' + escape(result.after,
                                                   False) + '…'
         item.setData(0, Qt.ItemDataRole.ToolTipRole, tt)
     item.setIcon(0, self.blank_icon)
     self.item_map[len(self.search_results)] = item
     self.search_results.append(result)
     n = self.number_of_results
     self.count_changed.emit(n)
     return n