diff --git a/imgsrc/view-refresh.svg b/imgsrc/view-refresh.svg new file mode 100644 index 0000000000..4ab18c929b --- /dev/null +++ b/imgsrc/view-refresh.svg @@ -0,0 +1,1566 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/images/auto-reload.png b/resources/images/auto-reload.png new file mode 100644 index 0000000000..5590b33953 Binary files /dev/null and b/resources/images/auto-reload.png differ diff --git a/resources/images/view-refresh.png b/resources/images/view-refresh.png new file mode 100644 index 0000000000..0b08b2388e Binary files /dev/null and b/resources/images/view-refresh.png differ diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 67d4b80750..01a4310c82 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -876,6 +876,7 @@ class Application(QApplication): 'MessageBoxWarning': u'dialog_warning.png', 'MessageBoxCritical': u'dialog_error.png', 'MessageBoxQuestion': u'dialog_question.png', + 'BrowserReload': u'view-refresh.png', # These two are used to calculate the sizes for the doc widget # title bar buttons, therefore, they have to exist. The actual # icon is not used. diff --git a/src/calibre/gui2/tweak_book/preview.py b/src/calibre/gui2/tweak_book/preview.py index f4a68b287b..bbc6e9b01e 100644 --- a/src/calibre/gui2/tweak_book/preview.py +++ b/src/calibre/gui2/tweak_book/preview.py @@ -12,7 +12,7 @@ from Queue import Queue, Empty from PyQt4.Qt import ( QWidget, QVBoxLayout, QApplication, QSize, QNetworkAccessManager, - QNetworkReply, QTimer, QNetworkRequest, QUrl, Qt, QNetworkDiskCache) + QNetworkReply, QTimer, QNetworkRequest, QUrl, Qt, QNetworkDiskCache, QToolBar) from PyQt4.QtWebKit import QWebView from calibre import prints @@ -20,7 +20,7 @@ from calibre.constants import iswindows from calibre.ebooks.oeb.polish.parsing import parse from calibre.ebooks.oeb.base import serialize, OEB_DOCS from calibre.ptempfile import PersistentTemporaryDirectory -from calibre.gui2.tweak_book import current_container, editors, tprefs +from calibre.gui2.tweak_book import current_container, editors, tprefs, actions from calibre.gui2.viewer.documentview import apply_settings from calibre.gui2.viewer.config import config from calibre.utils.ipc.simple_worker import offload_worker @@ -269,6 +269,19 @@ class Preview(QWidget): l.setContentsMargins(0, 0, 0, 0) self.view = WebView(self) l.addWidget(self.view) + self.bar = QToolBar(self) + l.addWidget(self.bar) + + ac = actions['auto-reload-preview'] + ac.setCheckable(True) + ac.setChecked(True) + ac.toggled.connect(self.auto_reload_toggled) + self.auto_reload_toggled(ac.isChecked()) + self.bar.addAction(ac) + + ac = actions['reload-preview'] + ac.triggered.connect(self.refresh) + self.bar.addAction(ac) self.current_name = None self.last_sync_request = None @@ -301,7 +314,13 @@ class Preview(QWidget): self.view.clear() def start_refresh_timer(self): - self.refresh_timer.start(tprefs['preview_refresh_time'] * 1000) + if actions['auto-reload-preview'].isChecked(): + self.refresh_timer.start(tprefs['preview_refresh_time'] * 1000) def stop_refresh_timer(self): self.refresh_timer.stop() + + def auto_reload_toggled(self, checked): + actions['auto-reload-preview'].setToolTip(_( + 'Auto reload preview when text changes in editor') if not checked else _( + 'Disable auto reload of preview')) diff --git a/src/calibre/gui2/tweak_book/ui.py b/src/calibre/gui2/tweak_book/ui.py index 34491d1b68..1ff98cecd4 100644 --- a/src/calibre/gui2/tweak_book/ui.py +++ b/src/calibre/gui2/tweak_book/ui.py @@ -141,7 +141,8 @@ class Main(MainWindow): def reg(icon, text, target, sid, keys, description): ac = actions[sid] = QAction(QIcon(I(icon)), text, self) ac.setObjectName('action-' + sid) - ac.triggered.connect(target) + if target is not None: + ac.triggered.connect(target) if isinstance(keys, type('')): keys = (keys,) self.keyboard.register_shortcut( @@ -193,6 +194,10 @@ class Main(MainWindow): 'smarten-punctuation.png', _('&Smarten punctuation'), partial( self.boss.polish, 'smarten_punctuation', _('Smarten punctuation')), 'smarten-punctuation', (), _('Smarten punctuation')) + # Preview actions + self.action_auto_reload_preview = reg('auto-reload.png', _('Auto reload preview'), None, 'auto-reload-preview', (), _('Auto reload preview')) + self.action_reload_preview = reg('view-refresh.png', _('Refresh preview'), None, 'reload-preview', (), _('Refresh preview')) + def create_menubar(self): b = self.menuBar()