diff --git a/src/calibre/gui2/tweak_book/file_list.py b/src/calibre/gui2/tweak_book/file_list.py index 1fc2eb4cb4..abe0724843 100644 --- a/src/calibre/gui2/tweak_book/file_list.py +++ b/src/calibre/gui2/tweak_book/file_list.py @@ -6,6 +6,7 @@ from __future__ import (unicode_literals, division, absolute_import, __license__ = 'GPL v3' __copyright__ = '2013, Kovid Goyal ' +from binascii import hexlify from PyQt4.Qt import ( QWidget, QTreeWidget, QGridLayout, QSize, Qt, QTreeWidgetItem, QIcon, QStyledItemDelegate, QStyle, QPixmap, QPainter, pyqtSignal) @@ -16,6 +17,7 @@ from calibre.ebooks.oeb.polish.container import guess_type from calibre.ebooks.oeb.polish.cover import get_cover_page_name, get_raster_cover_name from calibre.gui2 import error_dialog from calibre.gui2.tweak_book import current_container +from calibre.utils.icu import sort_key TOP_ICON_SIZE = 24 NAME_ROLE = Qt.UserRole @@ -73,7 +75,6 @@ class FileList(QTreeWidget): self.setAutoExpandDelay(1000) self.setAnimated(True) self.setMouseTracking(True) - self.in_drop_event = False self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.show_context_menu) self.root = self.invisibleRootItem() @@ -158,6 +159,7 @@ class FileList(QTreeWidget): # We have an exact duplicate (can happen if there are # duplicates in the spine) item.setText(0, processed[name].text(0)) + item.setText(1, processed[name].text(1)) return parts = name.split('/') @@ -166,6 +168,7 @@ class FileList(QTreeWidget): text = parts.pop() + '/' + text seen[text] = item item.setText(0, text) + item.setText(1, hexlify(sort_key(text))) def render_emblems(item, emblems): emblems = tuple(emblems) @@ -238,14 +241,16 @@ class FileList(QTreeWidget): continue processed[name] = create_item(name) - for c in self.categories.itervalues(): + for name, c in self.categories.iteritems(): c.setExpanded(True) + if name != 'text': + c.sortChildren(1, Qt.AscendingOrder) if preserve_state: self.set_state(state) def show_context_menu(self, point): - pass + pass # TODO: Implement this def keyPressEvent(self, ev): if ev.key() in (Qt.Key_Delete, Qt.Key_Backspace): @@ -283,6 +288,14 @@ class FileList(QTreeWidget): for c in removals: c.parent().removeChild(c) + def dropEvent(self, event): + text = self.categories['text'] + pre_drop_order = {text.child(i):i for i in xrange(text.childCount())} + super(FileList, self).dropEvent(event) + current_order = {text.child(i):i for i in xrange(text.childCount())} + if current_order != pre_drop_order: + pass # TODO: Implement this + class FileListWidget(QWidget): delete_requested = pyqtSignal(object, object)