From 9a96eea0e8b452001ee797635fb97bdc8d95c40b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 3 Nov 2013 13:09:21 +0530 Subject: [PATCH] Show modified indicator in file tab --- resources/images/modified.png | Bin 0 -> 7044 bytes src/calibre/gui2/tweak_book/ui.py | 19 +++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 resources/images/modified.png diff --git a/resources/images/modified.png b/resources/images/modified.png new file mode 100644 index 0000000000000000000000000000000000000000..db479a078d2a25701632a144692de558b2b04fd2 GIT binary patch literal 7044 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 literal 0 HcmV?d00001 diff --git a/src/calibre/gui2/tweak_book/ui.py b/src/calibre/gui2/tweak_book/ui.py index c170347bd1..f4c536f254 100644 --- a/src/calibre/gui2/tweak_book/ui.py +++ b/src/calibre/gui2/tweak_book/ui.py @@ -8,7 +8,7 @@ __copyright__ = '2013, Kovid Goyal ' from PyQt4.Qt import ( QDockWidget, Qt, QLabel, QIcon, QAction, QApplication, QWidget, - QVBoxLayout, QStackedWidget, QTabWidget) + QVBoxLayout, QStackedWidget, QTabWidget, QImage, QPixmap) from calibre.constants import __appname__, get_version from calibre.gui2.main_window import MainWindow @@ -40,16 +40,31 @@ class Central(QStackedWidget): t.setDocumentMode(True) t.setTabsClosable(True) t.setMovable(True) + pal = self.palette() + if pal.color(pal.WindowText).lightness() > 128: + i = QImage(I('modified.png')) + i.invertPixels() + self.modified_icon = QIcon(QPixmap.fromImage(i)) + else: + self.modified_icon = QIcon(I('modified.png')) def add_editor(self, name, editor): fname = name.rpartition('/')[2] index = self.editor_tabs.addTab(editor, fname) - self.editor_tabs.setTabToolTip(index, name) + self.editor_tabs.setTabToolTip(index, _('Full path:') + ' ' + name) + editor.modification_state_changed.connect(self.editor_modified) def show_editor(self, editor): self.setCurrentIndex(1) self.editor_tabs.setCurrentWidget(editor) + def editor_modified(self, *args): + tb = self.editor_tabs.tabBar() + for i in xrange(self.editor_tabs.count()): + editor = self.editor_tabs.widget(i) + modified = getattr(editor, 'is_modified', False) + tb.setTabIcon(i, self.modified_icon if modified else QIcon()) + class Main(MainWindow): APP_NAME = _('Tweak Book')