diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index 71f72768e1..2b49983970 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -25,6 +25,7 @@ from calibre.gui2.viewer.position import PagePosition from calibre.gui2.viewer.config import config, ConfigDialog, load_themes from calibre.gui2.viewer.image_popup import ImagePopup from calibre.gui2.viewer.table_popup import TablePopup +from calibre.gui2.viewer.inspector import WebInspector from calibre.ebooks.oeb.display.webview import load_html from calibre.constants import isxp, iswindows # }}} @@ -479,6 +480,7 @@ class DocumentView(QWebView): # {{{ self.document = Document(self.shortcuts, parent=self, debug_javascript=debug_javascript) self.setPage(self.document) + self.inspector = WebInspector(self, self.document) self.manager = None self._reference_mode = False self._ignore_scrollbar_signals = False @@ -672,8 +674,7 @@ class DocumentView(QWebView): # {{{ menu.addAction(self.manager.action_font_size_smaller) menu.addSeparator() - inspectAction = self.pageAction(self.document.InspectElement) - menu.addAction(inspectAction) + menu.addAction(_('Inspect'), self.inspect) if not text and img.isNull() and self.manager is not None: menu.addSeparator() @@ -686,6 +687,11 @@ class DocumentView(QWebView): # {{{ menu.exec_(ev.globalPos()) + def inspect(self): + self.inspector.show() + self.inspector.raise_() + self.pageAction(self.document.InspectElement).trigger() + def lookup(self, *args): if self.manager is not None: t = unicode(self.selectedText()).strip() diff --git a/src/calibre/gui2/viewer/inspector.py b/src/calibre/gui2/viewer/inspector.py new file mode 100644 index 0000000000..4d97dd4526 --- /dev/null +++ b/src/calibre/gui2/viewer/inspector.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2013, Kovid Goyal ' + +from PyQt4.Qt import QDialog, QDialogButtonBox, QVBoxLayout, QIcon +from PyQt4.QtWebKit import QWebInspector + +from calibre.gui2 import gprefs + +class WebInspector(QDialog): + + def __init__(self, parent, page): + QDialog.__init__(self, parent) + self.setWindowTitle(_('Inspect book code')) + self.setWindowIcon(QIcon(I('debug.png'))) + l = QVBoxLayout() + self.setLayout(l) + + self.inspector = QWebInspector(self) + self.inspector.setPage(page) + l.addWidget(self.inspector) + + self.bb = bb = QDialogButtonBox(QDialogButtonBox.Close) + l.addWidget(bb) + bb.accepted.connect(self.accept) + bb.rejected.connect(self.reject) + + self.resize(self.sizeHint()) + + geom = gprefs.get('viewer_inspector_geom', None) + if geom is not None: + self.restoreGeometry(geom) + + def save_geometry(self): + gprefs['viewer_inspector_geom'] = bytearray(self.saveGeometry()) + + def closeEvent(self, ev): + self.save_geometry() + return QDialog.closeEvent(self, ev) + + def accept(self): + self.save_geometry() + QDialog.accept(self) + + def reject(self): + self.save_geometry() + QDialog.reject(self) +