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 Queue import Queue, Empty
|
||||||
|
|
||||||
from PyQt4.Qt import (
|
from PyQt4.Qt import (
|
||||||
QWidget, QVBoxLayout, QApplication, QSize, QNetworkAccessManager,
|
QWidget, QVBoxLayout, QApplication, QSize, QNetworkAccessManager, QMenu, QIcon,
|
||||||
QNetworkReply, QTimer, QNetworkRequest, QUrl, Qt, QNetworkDiskCache, QToolBar)
|
QNetworkReply, QTimer, QNetworkRequest, QUrl, Qt, QNetworkDiskCache, QToolBar)
|
||||||
from PyQt4.QtWebKit import QWebView
|
from PyQt4.QtWebKit import QWebView, QWebInspector
|
||||||
|
|
||||||
from calibre import prints
|
from calibre import prints
|
||||||
from calibre.constants import iswindows
|
from calibre.constants import iswindows
|
||||||
@ -221,6 +221,7 @@ class WebView(QWebView):
|
|||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
QWebView.__init__(self, parent)
|
QWebView.__init__(self, parent)
|
||||||
|
self.inspector = QWebInspector(self)
|
||||||
w = QApplication.instance().desktop().availableGeometry(self).width()
|
w = QApplication.instance().desktop().availableGeometry(self).width()
|
||||||
self._size_hint = QSize(int(w/3), int(w/2))
|
self._size_hint = QSize(int(w/3), int(w/2))
|
||||||
settings = self.page().settings()
|
settings = self.page().settings()
|
||||||
@ -260,6 +261,17 @@ class WebView(QWebView):
|
|||||||
def clear(self):
|
def clear(self):
|
||||||
self.setHtml('<p>')
|
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):
|
class Preview(QWidget):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
@ -268,6 +280,8 @@ class Preview(QWidget):
|
|||||||
self.setLayout(l)
|
self.setLayout(l)
|
||||||
l.setContentsMargins(0, 0, 0, 0)
|
l.setContentsMargins(0, 0, 0, 0)
|
||||||
self.view = WebView(self)
|
self.view = WebView(self)
|
||||||
|
self.inspector = self.view.inspector
|
||||||
|
self.inspector.setPage(self.view.page())
|
||||||
l.addWidget(self.view)
|
l.addWidget(self.view)
|
||||||
self.bar = QToolBar(self)
|
self.bar = QToolBar(self)
|
||||||
l.addWidget(self.bar)
|
l.addWidget(self.bar)
|
||||||
@ -283,6 +297,8 @@ class Preview(QWidget):
|
|||||||
ac.triggered.connect(self.refresh)
|
ac.triggered.connect(self.refresh)
|
||||||
self.bar.addAction(ac)
|
self.bar.addAction(ac)
|
||||||
|
|
||||||
|
actions['preview-dock'].toggled.connect(self.visibility_changed)
|
||||||
|
|
||||||
self.current_name = None
|
self.current_name = None
|
||||||
self.last_sync_request = None
|
self.last_sync_request = None
|
||||||
self.refresh_timer = QTimer(self)
|
self.refresh_timer = QTimer(self)
|
||||||
@ -313,8 +329,12 @@ class Preview(QWidget):
|
|||||||
def clear(self):
|
def clear(self):
|
||||||
self.view.clear()
|
self.view.clear()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_visible(self):
|
||||||
|
return actions['preview-dock'].isChecked()
|
||||||
|
|
||||||
def start_refresh_timer(self):
|
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)
|
self.refresh_timer.start(tprefs['preview_refresh_time'] * 1000)
|
||||||
|
|
||||||
def stop_refresh_timer(self):
|
def stop_refresh_timer(self):
|
||||||
@ -324,3 +344,8 @@ class Preview(QWidget):
|
|||||||
actions['auto-reload-preview'].setToolTip(_(
|
actions['auto-reload-preview'].setToolTip(_(
|
||||||
'Auto reload preview when text changes in editor') if not checked else _(
|
'Auto reload preview when text changes in editor') if not checked else _(
|
||||||
'Disable auto reload of preview'))
|
'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'))
|
self.boss.polish, 'smarten_punctuation', _('Smarten punctuation')), 'smarten-punctuation', (), _('Smarten punctuation'))
|
||||||
|
|
||||||
# Preview actions
|
# 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_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):
|
def create_menubar(self):
|
||||||
b = self.menuBar()
|
b = self.menuBar()
|
||||||
@ -239,20 +240,37 @@ class Main(MainWindow):
|
|||||||
b.addAction(self.action_smarten_punctuation)
|
b.addAction(self.action_smarten_punctuation)
|
||||||
|
|
||||||
def create_docks(self):
|
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)
|
d.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
|
||||||
self.file_list = FileListWidget(d)
|
self.file_list = FileListWidget(d)
|
||||||
d.setWidget(self.file_list)
|
d.setWidget(self.file_list)
|
||||||
self.addDockWidget(Qt.LeftDockWidgetArea, d)
|
self.addDockWidget(Qt.LeftDockWidgetArea, d)
|
||||||
|
|
||||||
self.preview_dock = d = QDockWidget(_('File &Preview'), self)
|
d = create(_('File &Preview'), 'preview')
|
||||||
d.setObjectName('file_preview') # Needed for saveState
|
|
||||||
d.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
|
d.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
|
||||||
self.preview = Preview(d)
|
self.preview = Preview(d)
|
||||||
d.setWidget(self.preview)
|
d.setWidget(self.preview)
|
||||||
self.addDockWidget(Qt.RightDockWidgetArea, d)
|
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):
|
def resizeEvent(self, ev):
|
||||||
self.blocking_job.resize(ev.size())
|
self.blocking_job.resize(ev.size())
|
||||||
return super(Main, self).resizeEvent(ev)
|
return super(Main, self).resizeEvent(ev)
|
||||||
@ -282,3 +300,5 @@ class Main(MainWindow):
|
|||||||
state = tprefs.get('main_window_state', None)
|
state = tprefs.get('main_window_state', None)
|
||||||
if state is not None:
|
if state is not None:
|
||||||
self.restoreState(state, self.STATE_VERSION)
|
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