def create_item(name, linear=None): imt = container.mime_map.get(name, guess_type(name)) icat = get_category(name, imt) category = "text" if linear is not None else ({"text": "misc"}.get(icat, icat)) item = QTreeWidgetItem(self.categories["text" if linear is not None else category], 1) flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable if category == "text": flags |= Qt.ItemIsDragEnabled if name not in cannot_be_renamed: flags |= Qt.ItemIsEditable item.setFlags(flags) item.setStatusTip(0, _("Full path: ") + name) item.setData(0, NAME_ROLE, name) item.setData(0, CATEGORY_ROLE, category) item.setData(0, LINEAR_ROLE, bool(linear)) item.setData(0, MIME_ROLE, imt) set_display_name(name, item) # TODO: Add appropriate tooltips based on the emblems emblems = [] if name in {cover_page_name, cover_image_name}: emblems.append("default_cover.png") if name not in manifested_names and name not in ok_to_be_unmanifested: emblems.append("dialog_question.png") if linear is False: emblems.append("arrow-down.png") if linear is None and icat == "text": # Text item outside spine emblems.append("dialog_warning.png") if category == "text" and name in processed: # Duplicate entry in spine emblems.append("dialog_warning.png") render_emblems(item, emblems) return item
def create_item(name, linear=None): imt = container.mime_map.get(name, guess_type(name)) icat = get_category(name, imt) category = "text" if linear is not None else ({"text": "misc"}.get(icat, icat)) item = QTreeWidgetItem(self.categories["text" if linear is not None else category], 1) flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable if category == "text": flags |= Qt.ItemIsDragEnabled if name not in cannot_be_renamed: flags |= Qt.ItemIsEditable item.setFlags(flags) item.setStatusTip(0, _("Full path: ") + name) item.setData(0, NAME_ROLE, name) item.setData(0, CATEGORY_ROLE, category) item.setData(0, LINEAR_ROLE, bool(linear)) item.setData(0, MIME_ROLE, imt) set_display_name(name, item) tooltips = [] emblems = [] if name in {cover_page_name, cover_image_name}: emblems.append("default_cover.png") tooltips.append( _("This file is the cover %s for this book") % (_("image") if name == cover_image_name else _("page")) ) if name in container.opf_name: emblems.append("metadata.png") tooltips.append(_("This file contains all the metadata and book structure information")) if imt == ncx_mime: emblems.append("toc.png") tooltips.append(_("This file contains the metadata table of contents")) if name not in manifested_names and name not in ok_to_be_unmanifested: emblems.append("dialog_question.png") tooltips.append(_("This file is not listed in the book manifest")) if linear is False: emblems.append("arrow-down.png") tooltips.append( _("This file is marked as non-linear in the spine\nDrag it to the top to make it linear") ) if linear is None and icat == "text": # Text item outside spine emblems.append("dialog_warning.png") tooltips.append(_("This file is a text file that is not referenced in the spine")) if category == "text" and name in processed: # Duplicate entry in spine emblems.append("dialog_error.png") tooltips.append(_("This file occurs more than once in the spine")) render_emblems(item, emblems) if tooltips: item.setData(0, Qt.ToolTipRole, "\n".join(tooltips)) return item
def create_item(name, linear=None): imt = container.mime_map.get(name, guess_type(name)) icat = get_category(name, imt) category = 'text' if linear is not None else ({ 'text': 'misc' }.get(icat, icat)) item = QTreeWidgetItem( self.categories['text' if linear is not None else category], 1) flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable if category == 'text': flags |= Qt.ItemIsDragEnabled if name not in cannot_be_renamed: flags |= Qt.ItemIsEditable item.setFlags(flags) item.setStatusTip(0, _('Full path: ') + name) item.setData(0, NAME_ROLE, name) item.setData(0, CATEGORY_ROLE, category) item.setData(0, LINEAR_ROLE, bool(linear)) item.setData(0, MIME_ROLE, imt) set_display_name(name, item) # TODO: Add appropriate tooltips based on the emblems emblems = [] if name in {cover_page_name, cover_image_name}: emblems.append('default_cover.png') if name in container.opf_name: emblems.append('metadata.png') if imt == ncx_mime: emblems.append('toc.png') if name not in manifested_names and name not in ok_to_be_unmanifested: emblems.append('dialog_question.png') if linear is False: emblems.append('arrow-down.png') if linear is None and icat == 'text': # Text item outside spine emblems.append('dialog_warning.png') if category == 'text' and name in processed: # Duplicate entry in spine emblems.append('dialog_warning.png') render_emblems(item, emblems) return item
def create_item(name, linear=None): imt = container.mime_map.get(name, guess_type(name)) icat = get_category(name, imt) category = 'text' if linear is not None else ({ 'text': 'misc' }.get(icat, icat)) item = QTreeWidgetItem( self.categories['text' if linear is not None else category], 1) flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable if category == 'text': flags |= Qt.ItemIsDragEnabled if name not in cannot_be_renamed: flags |= Qt.ItemIsEditable item.setFlags(flags) item.setStatusTip(0, _('Full path: ') + name) item.setData(0, NAME_ROLE, name) item.setData(0, CATEGORY_ROLE, category) item.setData(0, LINEAR_ROLE, bool(linear)) item.setData(0, MIME_ROLE, imt) set_display_name(name, item) tooltips = [] emblems = [] if name in {cover_page_name, cover_image_name}: emblems.append('default_cover.png') tooltips.append( _('This file is the cover %s for this book') % (_('image') if name == cover_image_name else _('page'))) if name in container.opf_name: emblems.append('metadata.png') tooltips.append( _('This file contains all the metadata and book structure information' )) if imt == ncx_mime: emblems.append('toc.png') tooltips.append( _('This file contains the metadata table of contents')) if name not in manifested_names and not container.ok_to_be_unmanifested( name): emblems.append('dialog_question.png') tooltips.append( _('This file is not listed in the book manifest')) if linear is False: emblems.append('arrow-down.png') tooltips.append( _('This file is marked as non-linear in the spine\nDrag it to the top to make it linear' )) if linear is None and icat == 'text': # Text item outside spine emblems.append('dialog_warning.png') tooltips.append( _('This file is a text file that is not referenced in the spine' )) if category == 'text' and name in processed: # Duplicate entry in spine emblems.append('dialog_error.png') tooltips.append( _('This file occurs more than once in the spine')) render_emblems(item, emblems) if tooltips: item.setData(0, Qt.ToolTipRole, '\n'.join(tooltips)) return item
def build(self, container): self.clear() self.root = self.invisibleRootItem() self.root.setFlags(Qt.ItemIsDragEnabled) self.categories = {} for category, text, icon in ( ('text', _('Text'), 'keyboard-prefs.png'), ('styles', _('Styles'), 'lookfeel.png'), ('images', _('Images'), 'view-image.png'), ('fonts', _('Fonts'), 'font.png'), ('misc', _('Miscellaneous'), 'mimetypes/dir.png'), ): self.categories[category] = i = QTreeWidgetItem(self.root, 0) i.setText(0, text) i.setIcon(0, QIcon(I(icon))) f = i.font(0) f.setBold(True) i.setFont(0, f) i.setData(0, NAME_ROLE, category) flags = Qt.ItemIsEnabled if category == 'text': flags |= Qt.ItemIsDropEnabled i.setFlags(flags) processed, seen = set(), {} def get_display_name(name, item): parts = name.split('/') text = parts[-1] while text in seen and parts: text = parts.pop() + '/' + text seen[text] = item return text for name, linear in container.spine_names: processed.add(name) i = QTreeWidgetItem(self.categories['text'], 1) prefix = '' if linear else '[nl] ' if not linear: i.setIcon(self.non_linear_icon) i.setText(0, prefix + get_display_name(name, i)) i.setStatusTip(0, _('Full path: ') + name) i.setFlags(Qt.ItemIsEnabled | Qt.ItemIsDragEnabled | Qt.ItemIsSelectable) i.setData(0, NAME_ROLE, name) font_types = {guess_type('a.'+x)[0] for x in ('ttf', 'otf', 'woff')} def get_category(mt): category = 'misc' if mt.startswith('image/'): category = 'images' elif mt in font_types: category = 'fonts' elif mt in OEB_STYLES: category = 'styles' return category all_files = list(container.manifest_type_map.iteritems()) all_files.append((guess_type('a.opf')[0], [container.opf_name])) for name in container.name_path_map: if name in processed: continue processed.add(name) imt = container.mime_map.get(name, guess_type(name)[0]) icat = get_category(imt) i = QTreeWidgetItem(self.categories[icat], 1) i.setText(0, get_display_name(name, i)) i.setStatusTip(0, _('Full path: ') + name) i.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) i.setData(0, NAME_ROLE, name) for c in self.categories.itervalues(): self.expandItem(c)