mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add inspect element and prevent preview from refreshing while it is hidden
This commit is contained in:
parent
6df507a962
commit
c1e5cddf5f
@ -11,9 +11,9 @@ from threading import Thread
|
||||
from Queue import Queue, Empty
|
||||
|
||||
from PyQt4.Qt import (
|
||||
QWidget, QVBoxLayout, QApplication, QSize, QNetworkAccessManager,
|
||||
QWidget, QVBoxLayout, QApplication, QSize, QNetworkAccessManager, QMenu, QIcon,
|
||||
QNetworkReply, QTimer, QNetworkRequest, QUrl, Qt, QNetworkDiskCache, QToolBar)
|
||||
from PyQt4.QtWebKit import QWebView
|
||||
from PyQt4.QtWebKit import QWebView, QWebInspector
|
||||
|
||||
from calibre import prints
|
||||
from calibre.constants import iswindows
|
||||
@ -221,6 +221,7 @@ class WebView(QWebView):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
QWebView.__init__(self, parent)
|
||||
self.inspector = QWebInspector(self)
|
||||
w = QApplication.instance().desktop().availableGeometry(self).width()
|
||||
self._size_hint = QSize(int(w/3), int(w/2))
|
||||
settings = self.page().settings()
|
||||
@ -260,6 +261,17 @@ class WebView(QWebView):
|
||||
def clear(self):
|
||||
self.setHtml('<p>')
|
||||
|
||||
def inspect(self):
|
||||
self.inspector.parent().show()
|
||||
self.inspector.parent().raise_()
|
||||
self.pageAction(self.page().InspectElement).trigger()
|
||||
|
||||
def contextMenuEvent(self, ev):
|
||||
menu = QMenu(self)
|
||||
menu.addAction(actions['reload-preview'])
|
||||
menu.addAction(QIcon(I('debug.png')), _('Inspect element'), self.inspect)
|
||||
menu.exec_(ev.globalPos())
|
||||
|
||||
class Preview(QWidget):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
@ -268,6 +280,8 @@ class Preview(QWidget):
|
||||
self.setLayout(l)
|
||||
l.setContentsMargins(0, 0, 0, 0)
|
||||
self.view = WebView(self)
|
||||
self.inspector = self.view.inspector
|
||||
self.inspector.setPage(self.view.page())
|
||||
l.addWidget(self.view)
|
||||
self.bar = QToolBar(self)
|
||||
l.addWidget(self.bar)
|
||||
@ -283,6 +297,8 @@ class Preview(QWidget):
|
||||
ac.triggered.connect(self.refresh)
|
||||
self.bar.addAction(ac)
|
||||
|
||||
actions['preview-dock'].toggled.connect(self.visibility_changed)
|
||||
|
||||
self.current_name = None
|
||||
self.last_sync_request = None
|
||||
self.refresh_timer = QTimer(self)
|
||||
@ -313,8 +329,12 @@ class Preview(QWidget):
|
||||
def clear(self):
|
||||
self.view.clear()
|
||||
|
||||
@property
|
||||
def is_visible(self):
|
||||
return actions['preview-dock'].isChecked()
|
||||
|
||||
def start_refresh_timer(self):
|
||||
if actions['auto-reload-preview'].isChecked():
|
||||
if self.is_visible and actions['auto-reload-preview'].isChecked():
|
||||
self.refresh_timer.start(tprefs['preview_refresh_time'] * 1000)
|
||||
|
||||
def stop_refresh_timer(self):
|
||||
@ -324,3 +344,8 @@ class Preview(QWidget):
|
||||
actions['auto-reload-preview'].setToolTip(_(
|
||||
'Auto reload preview when text changes in editor') if not checked else _(
|
||||
'Disable auto reload of preview'))
|
||||
|
||||
def visibility_changed(self, is_visible):
|
||||
if is_visible:
|
||||
self.refresh()
|
||||
|
||||
|
@ -195,8 +195,9 @@ class Main(MainWindow):
|
||||
self.boss.polish, 'smarten_punctuation', _('Smarten punctuation')), 'smarten-punctuation', (), _('Smarten punctuation'))
|
||||
|
||||
# Preview actions
|
||||
group = _('Preview')
|
||||
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'))
|
||||
self.action_reload_preview = reg('view-refresh.png', _('Refresh preview'), None, 'reload-preview', ('F5', 'Ctrl+R'), _('Refresh preview'))
|
||||
|
||||
def create_menubar(self):
|
||||
b = self.menuBar()
|
||||
@ -239,20 +240,37 @@ class Main(MainWindow):
|
||||
b.addAction(self.action_smarten_punctuation)
|
||||
|
||||
def create_docks(self):
|
||||
self.file_list_dock = d = QDockWidget(_('&Files Browser'), self)
|
||||
d.setObjectName('file_list_dock') # Needed for saveState
|
||||
|
||||
def create(name, oname):
|
||||
oname += '-dock'
|
||||
d = QDockWidget(name, self)
|
||||
d.setObjectName(oname) # Needed for saveState
|
||||
ac = d.toggleViewAction()
|
||||
desc = _('Toggle %s') % name.replace('&', '')
|
||||
self.keyboard.register_shortcut(
|
||||
oname, desc, description=desc, action=ac, group=_('Windows'))
|
||||
actions[oname] = ac
|
||||
setattr(self, oname.replace('-', '_'), d)
|
||||
return d
|
||||
|
||||
d = create(_('&Files Browser'), 'files-browser')
|
||||
d.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
|
||||
self.file_list = FileListWidget(d)
|
||||
d.setWidget(self.file_list)
|
||||
self.addDockWidget(Qt.LeftDockWidgetArea, d)
|
||||
|
||||
self.preview_dock = d = QDockWidget(_('File &Preview'), self)
|
||||
d.setObjectName('file_preview') # Needed for saveState
|
||||
d = create(_('File &Preview'), 'preview')
|
||||
d.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
|
||||
self.preview = Preview(d)
|
||||
d.setWidget(self.preview)
|
||||
self.addDockWidget(Qt.RightDockWidgetArea, d)
|
||||
|
||||
d = create(_('&Inspector'), 'inspector')
|
||||
d.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea | Qt.BottomDockWidgetArea | Qt.TopDockWidgetArea)
|
||||
d.setWidget(self.preview.inspector)
|
||||
self.preview.inspector.setParent(d)
|
||||
self.addDockWidget(Qt.BottomDockWidgetArea, d)
|
||||
|
||||
def resizeEvent(self, ev):
|
||||
self.blocking_job.resize(ev.size())
|
||||
return super(Main, self).resizeEvent(ev)
|
||||
@ -282,3 +300,5 @@ class Main(MainWindow):
|
||||
state = tprefs.get('main_window_state', None)
|
||||
if state is not None:
|
||||
self.restoreState(state, self.STATE_VERSION)
|
||||
# We never want to start with the inspector showing
|
||||
self.inspector_dock.close()
|
||||
|
Loading…
x
Reference in New Issue
Block a user