From ea3d7bf6fc449361df66333eef5e4683c5bff5eb Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 11 Dec 2013 09:17:15 +0530 Subject: [PATCH] File list: Indicate the item being edited currently --- src/calibre/gui2/tweak_book/boss.py | 4 +++ src/calibre/gui2/tweak_book/file_list.py | 31 ++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/tweak_book/boss.py b/src/calibre/gui2/tweak_book/boss.py index 038ab583c2..72f376250b 100644 --- a/src/calibre/gui2/tweak_book/boss.py +++ b/src/calibre/gui2/tweak_book/boss.py @@ -186,6 +186,7 @@ class Boss(QObject): self.current_metadata = self.gui.current_metadata = container.mi self.global_undo.open_book(container) self.gui.update_window_title() + self.gui.file_list.current_edited_name = None self.gui.file_list.build(container, preserve_state=False) self.gui.action_save.setEnabled(False) self.update_global_history_actions() @@ -881,10 +882,13 @@ class Boss(QObject): break if name is not None and getattr(ed, 'syntax', None) == 'html': self.gui.preview.show(name) + if name is not None: + self.gui.file_list.mark_name_as_current(name) if ed.has_line_numbers: self.gui.cursor_position_widget.update_position(*ed.cursor_position) else: actions['go-to-line-number'].setEnabled(False) + self.gui.file_list.clear_currently_edited_name() def update_cursor_position(self): ed = self.gui.central.current_editor diff --git a/src/calibre/gui2/tweak_book/file_list.py b/src/calibre/gui2/tweak_book/file_list.py index 420317027a..964bf199bb 100644 --- a/src/calibre/gui2/tweak_book/file_list.py +++ b/src/calibre/gui2/tweak_book/file_list.py @@ -13,7 +13,7 @@ from functools import partial import sip from PyQt4.Qt import ( - QWidget, QTreeWidget, QGridLayout, QSize, Qt, QTreeWidgetItem, QIcon, + QWidget, QTreeWidget, QGridLayout, QSize, Qt, QTreeWidgetItem, QIcon, QFont, QStyledItemDelegate, QStyle, QPixmap, QPainter, pyqtSignal, QMenu, QTimer, QDialogButtonBox, QDialog, QLabel, QLineEdit, QVBoxLayout, QScrollArea, QRadioButton) @@ -105,6 +105,7 @@ class FileList(QTreeWidget): def __init__(self, parent=None): QTreeWidget.__init__(self, parent) + self.current_edited_name = None self.delegate = ItemDelegate(self) self.delegate.rename_requested.connect(self.rename_requested) self.setTextElideMode(Qt.ElideMiddle) @@ -170,6 +171,29 @@ class FileList(QTreeWidget): if q == name: self.scrollToItem(c) + def mark_name_as_current(self, name): + current = self.item_from_name(name) + if current is not None: + if self.current_edited_name is not None: + ci = self.item_from_name(self.current_edited_name) + if ci is not None: + ci.setData(0, Qt.FontRole, None) + self.current_edited_name = name + self.mark_item_as_current(current) + + def mark_item_as_current(self, item): + font = QFont(self.font()) + font.setItalic(True) + font.setBold(True) + item.setData(0, Qt.FontRole, font) + + def clear_currently_edited_name(self): + if self.current_edited_name: + ci = self.item_from_name(self.current_edited_name) + if ci is not None: + ci.setData(0, Qt.FontRole, None) + self.current_edited_name = None + def build(self, container, preserve_state=True): if preserve_state: state = self.get_state() @@ -325,6 +349,9 @@ class FileList(QTreeWidget): if preserve_state: self.set_state(state) + if self.current_edited_name: + self.mark_item_as_current(self.current_edited_name) + def show_context_menu(self, point): item = self.itemAt(point) if item is None or item in set(self.categories.itervalues()): @@ -662,7 +689,7 @@ class FileListWidget(QWidget): 'edit_file', 'merge_requested', 'mark_requested', 'export_requested', 'replace_requested'): getattr(self.file_list, x).connect(getattr(self, x)) - for x in ('delete_done', 'select_name', 'request_edit'): + for x in ('delete_done', 'select_name', 'request_edit', 'mark_name_as_current', 'clear_currently_edited_name'): setattr(self, x, getattr(self.file_list, x)) def build(self, container, preserve_state=True):